이번 포스팅에서는 AzureML(Azure Machine Learning, 이하 AzureML)에 대해서 소개하고 간략히 코드로 training을 수행.

 

(2) AzureML - Azure Machine Learning 이란 무엇인가?

공식 가이드 내용 먼저 살펴보자. 

Azure Machine Learning is a cloud service for accelerating and managing the machine learning project lifecycle. Machine learning professionals, data scientists, and engineers can use it in their day-to-day workflows: Train and deploy models, and manage MLOps.

What is Azure Machine Learning? - Azure Machine Learning | Microsoft Docs

AzureML은 머신러닝 프로젝트 라이프사이클을 빠르게 구현하고 관리하기 위한 클라우드 서비스이다.

머신러닝 전문가와 data scientist, 개발자가 자신의 업무 workflow에 적용할 수 있고, 머신러닝 모델 트레이닝, 모델 배포, MLOps 관리에 적용 가능하다.

 

만약 처음 이런 MLaaS와 MLOps를 접한다면 잘 감이 잡히지 않을 수 있다. 차근차근 코드를 통해 살펴보고, 이후 MLOps 내용까지 진행 예정.

 

최초 환경 구성

여러가지 방법이 있다. "AzureML Studio의 노트북을 이용해라, DSVM이 좋다", 등등.

이 문서에서는 아무 구성도 되지 않은 WSL ubuntu에서 최초 conda 환경부터 차근차근 구성하고 notebook을 실행해 AzureML을 바닥부터 수행하는 것을 목표로 진행한다.

 

만약 conda나 기본 머신러닝에 대한 강좌가 필요하다면, 아래 강좌를 참고.

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트)

 

Python, notebook 환경 설정

아래 명령을 수행해 conda 환경을 생성하고, AzureML에 필요한 package들을 구성한다.

conda create -n azureml python=3.8
conda activate azureml
conda install jupyter
pip install sklearn
pip install seaborn  # 개인적인 선호. 여러 NumPy, Pandas 등의 package들을 자동 설치해 준다.
pip install azureml-core
pip install azureml-opendatasets

 

 

환경 구성 참고 링크

Install the Azure Machine Learning SDK for Python - Azure Machine Learning Python | Microsoft Docs

위 문서에서는 azureml-core 설치 후 구성이 진행된다, 추가 구성이 필요할 경우 포스트에서 진행하고, "azureml-sdk"를 설치하는 것도 한 방법이다.

 

Azure 포털에서 AzureML 리소스 생성

Quickstart: Create workspace resources - Azure Machine Learning | Microsoft Docs

이렇게 포털에서 AzureML workspace를 생성 가능. 물론 Azure cliAzureML Python SDKterraform도 가능하다.

 

예제 노트북 코드 repository clone수행

AzureML tutorial code clone 수행

git clone https://github.com/Azure/MachineLearningNotebooks.git

 

 

Jupyter notebook을 실행

jupyter notebook
# 또는, 특정 port 및 외부 IP 접근을 허용할 경우 - OS차원에서 방화벽 오픈 확인.
jupyter notebook --ip=0.0.0.0 --port=8080

 

Clone된 repository에서 노트북은 이 노트북을 열고 진행한다.

tutorials/create-first-ml-experiment/tutorial-1st-experiment-sdk-train.ipynb 

 

AzureML Workspace 연결 구성

대부분의 예제와 노트북이 이미 AzureML workspace가 생성되어 있고, write_config()가 완료된 상태에서 시작한다.

그래서 대부분 "ws = Workspace.from_config()" 이렇게 처리되어 있다. 즉, 우리도 최초 한번 write_config()를 수행해야 한다.

 

우리는 이미 위에서 AzureML workspace를 생성하였다. 다음 코드로 ws.write_config() 을 수행하면 된다.

 

# 일반적인 workspace 접근 방안
from azureml.core import Workspace

subscription_id = '<subscription-id>'
resource_group  = '<resource-group>'
workspace_name  = '<workspace-name>'

ws = Workspace(
    subscription_id=subscription_id,
    resource_group=resource_group,
    workspace_name=workspace_name
)
ws.write_config('~/')

write_config('~/')를 home 디렉토리로 구성하면, 이후 다른 디렉토리에 config를 구성하였더라도, 자동으로 from_config()를 수행하면, 상위 디렉토리로 올라가면서 config를 찾아 읽는다. AzureML config 파일은 "~/.azureml/config.json" 파일로 저장된다.

 

만약, 다른 tenent의 구독(다른 AD 디렉토리의 구독)에 로그인하려면, 아래처럼, 추가 설정이 필요하다.

# 다른 tenent에 속한 구독의 AzureML에 연결할 경우
from azureml.core.authentication import InteractiveLoginAuthentication

interactive_auth = InteractiveLoginAuthentication(tenant_id="my-tenant-id")

ws = Workspace(subscription_id="my-subscription-id",
               resource_group="my-ml-rg",
               workspace_name="my-ml-workspace",
               auth=interactive_auth)

이외에도 Service Principal을 이용하는 로그인 등 다양한 방법이 있다. 관련 내용은 다양한 AzureML workspace 인증 방안 노트북을 참조한다.

 

노트북의 코드 수행

Workspace 설정

workspace가 무엇인지 지금은 중요치 않다. AzureML의 인스턴스라고 생각하고 우선 코드를 수행하자. 이렇게 workspace를 설정한다.

from azureml.core import Workspace
ws = Workspace.from_config()

 

Experiment 생성

Experiment는 AzureML에서 머신러닝 작업을 수행할 근간이 되는 구조이다. "diabetes-experiment" 이름으로 생성하자.

from azureml.core import Experiment
experiment = Experiment(workspace=ws, name="diabetes-experiment")

 

데이터셋 로드 - diabetes 데이터셋이다.

# opendatasets module 오류가 발생하면 bash 쉘에서 pip install azureml-opendatasets  수행
from azureml.opendatasets import Diabetes
from sklearn.model_selection import train_test_split

x_df = Diabetes.get_tabular_dataset().to_pandas_dataframe().dropna()
y_df = x_df.pop("Y")

X_train, X_test, y_train, y_test = train_test_split(x_df, y_df, test_size=0.2, random_state=66)

 

트레이닝 수행

여러 alpha 값을 파라미터로 이용해 여러 번 트레이닝을 수행한다. 이때, "run" object를 생성하고 logging, 모델 업로드 등의 작업을 수행한다. run object 처리 부분 외에는 일반적인 regression ML 작업과 다르지 않다.

from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
# ImportError: cannot import name 'joblib' from 'sklearn.externals' 오류가 발생하면 "import joblib" 으로 수정.
from sklearn.externals import joblib
import math

alphas = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

for alpha in alphas:
    run = experiment.start_logging()
    run.log("alpha_value", alpha)
    
    model = Ridge(alpha=alpha)
    model.fit(X=X_train, y=y_train)
    y_pred = model.predict(X=X_test)
    rmse = math.sqrt(mean_squared_error(y_true=y_test, y_pred=y_pred))
    run.log("rmse", rmse)
    
    model_name = "model_alpha_" + str(alpha) + ".pkl"
    filename = "outputs/" + model_name
    
    joblib.dump(value=model, filename=filename)
    run.upload_file(name=model_name, path_or_stream=filename)
    run.complete()

 

sklean의 ridge 모델에 관심이 있다면, 아래 링크 참조.

sklearn.linear_model.Ridge — scikit-learn 1.0 documentation

 

트레이닝 결과 확인

experiment

실행하면, 현재 작업 중인 experiment를 AzureML studio 포털에서 볼 수 있다.

 

experiment2.png

Regression 모델이고, RMSE metric을 체크한다. alpha 값에 따라 각각 다른 rmse 결과가 출력된다.

 

output.png

개별 run을 확인하면, 각각 run의 상세한 정보와 run의 출력 로그 및 생성된 파일들을 볼 수 있다.

 

가장 성능이 좋은 모델(best model) 확인

minimum_rmse_runid = None
minimum_rmse = None

for run in experiment.get_runs():
    run_metrics = run.get_metrics()
    run_details = run.get_details()
    # each logged metric becomes a key in this returned dict
    run_rmse = run_metrics["rmse"]
    run_id = run_details["runId"]
    
    if minimum_rmse is None:
        minimum_rmse = run_rmse
        minimum_rmse_runid = run_id
    else:
        if run_rmse < minimum_rmse:
            minimum_rmse = run_rmse
            minimum_rmse_runid = run_id

print("Best run_id: " + minimum_rmse_runid)
print("Best run_id rmse: " + str(minimum_rmse))

 

가장 성능이 좋은 모델의 run 정보를 가져오고, 파일들을 출력. 이어서, 피클 파일을 다운로드 한다.

 

from azureml.core import Run
best_run = Run(experiment=experiment, run_id=minimum_rmse_runid)
print(best_run.get_file_names())

best_run.download_file(name="model_alpha_0.1.pkl")

수행하고, 노트북의 파일리스트를 체크하면, pkl 파일이 다운로드 된 것을 확인 가능하다.

 

이렇게 첫 AzureML 노트북을 수행했다. 우선 workspace를 생성하고, 머신러닝 트레이닝 코드를 훌륭하게 AzureML과 연동해 수행하였다. Workspace, Experiment, Run, Compute 등의 여러 object들은 다음 포스트에서 차근차근 진행 예정.

 

참고링크

개발자 커뮤니티 SQLER.com - MLaaS - (1) 12가지의 머신러닝을 먼저 도입한 기업들의 고민

개발자 커뮤니티 SQLER.com - 2021년 머신러닝과 인공지능(AI) 트렌드 - MLaaS (서비스로의 머신러닝)

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트)

What is Azure Machine Learning? - Azure Machine Learning | Microsoft Docs

Azure Machine Learning SDK for Python - Azure Machine Learning Python | Microsoft Docs

Set up Python development environment - Azure Machine Learning | Microsoft Docs

 

 

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 447
70 EA의 인공지능 게임 애니메이션 file 코난(김대우) 2023.01.13 17
69 자율주행 - Wayve사의 대표 Alex Kendall 대화 코난(김대우) 2023.01.04 13
68 Two Minute Papers에 올라온 ChatGPT 코난(김대우) 2022.12.28 29
67 MLOps 소개 - MLOps explained | Machine Learning Essentials 코난(김대우) 2022.12.27 16
66 ChatGPT 관련 추가 - 나도코딩님 코난(김대우) 2022.12.23 46
65 ChatGPT 대단하네요. 코난(김대우) 2022.12.22 98
64 [1편] Azure Machine Learning 얼마나 알고 계신가요?🤖 코난(김대우) 2022.12.20 18
63 github 코파일럿 - 코딩애플님의 영상 코난(김대우) 2022.12.09 24
62 스타트업을 위한 AI와 MLOps 핵심 요약 | 테크 스타트업을 위한 웨비나 코난(김대우) 2022.12.08 29
61 자동화된 ML, 나도 해보자! | ep7. 클로징 | 애저 듣고보는 잡학지식 코난(김대우) 2022.12.01 26
60 자동화된 ML, 나도 해보자! | ep6-3. 자동화된ML 코드로 돌려보기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.12.01 21
59 자동화된 ML, 나도 해보자! | ep6-2. 자동화된ML 코드로 돌려보기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.30 24
58 자동화된 ML, 나도 해보자! | ep6-1. 자동화된ML 코드로 돌려보기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.25 13
57 자동화된 ML, 나도 해보자! | ep5-2. 자동화된ML 모델 배포 활용하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.24 20
56 자동화된 ML, 나도 해보자! | ep5-1. 자동화된ML 모델 배포 활용하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.18 31
55 자동화된 ML, 나도 해보자! | ep4-2. 자동화된ML 결과 해석하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.15 24
54 AI, 머신러닝, MLOps – Azure에서 톺아보기! | Developer Digital Meetup Tour 코난(김대우) 2022.11.15 25
53 자동화된 ML, 나도 해보자! | ep4-1. 자동화된ML 결과 해석하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.11 25
52 자동화된 ML, 나도 해보자! | ep3-2. GUI로 자동화된ML 직접 해보기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.09 25
51 자동화된 ML, 나도 해보자! | ep3-1. GUI로 자동화된ML 직접 해보기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.05 21





XE Login