MLOps = 머신러닝 엔지니어링 + 데이터 엔지니어링 + 인프라 +Ops
머신러닝의 유지보수 과정
프로세스를 잘짜서 모든 케이스를 해결할 수 있도록.. 최대한 사람이 개입하지 않고 프로세스를 돌려 해결하는 게 베스트.
(1) 리소스그룹 만들기 : azure machine learning


검토+만들기
(2) 생성한 ML service는 바로 사용하는 게 아니라 또 웹(azure machine learning studio)에서 열어서 사용해야한다

(3) 가상 머신 생성
Azure ml studio > compute
+new해서 새로운 컴퓨트 자원을 추가

(4) Designer
샘플들을 사용해서 ML을 사용할 수도 있지만 새로운 컴포넌트 만들어보자


tool(1), canvas(2) area로 나눠져있다
tool area의 component에서 data input and output에서 enter data manually 드래그 해서 canvas area에 drop

수작업으로 데이터를 입력하겠다는 모듈로 더블 클릭하여 값을 넣을 수 있다, 값 입력 후 save

그 후 데이터 누른 상태로, setting >가상머신 할당
compute instance에서 내가 아까 만든 vm할당해준다
그후 submit 버튼 눌러서 실험 세팅장을 만든다

이제 job detail 보면 가상 머신이 계산하는 거 볼 수 있다


계산 다 되었으면 dataset 우클릭 > previes data 해본다

=>간단한 분석 결과 확인 가능

저 막대그래프 같은 것은 히스토그램으로 데이터의 분포를 나타낸다.
학습용/테스트용으로 쪼개기
데이터 트랜스포메이션(데이터 전처리하는 도구)> slipt data 를 아까 만든 데이터에 연결(데이터를 끌고와서 연결)

slipt data 더블클릭하여 설정

(설정)split row: 데이터 열단위로 쪼개고
0.7 : 학습용/테스트용 데이터를 70 : 30로 쪼개겠다
randomized : true(데이터 섞기)
random seed : 랜덤을 정해진 값으로 섞기
학습 모델
Train model 드래그 드롭해서 학습용 데이터와 알고리즘(머신러닝 알고리즘 > 리니어 리그리션)을 넣어준다

그 후 train model 더블클릭하여 label column> edit column 해서 label column 지정해줌

학습 모델 평가
score model (데이터 별로 하나하나 평가)꺼내와서 훈련된 모델과 테스트 데이터를 넣어준다

이제 전체적으로 모델을 종합 평가를 해주는 게 필요
Evaluate model 꺼내서 score model 에 연결 , ( 이 모델은 자동으로 리니어 리그리션과 연동이 돼어 자동으로 알고리듬에 맞는 평가지표 사용함)

이제 가장 기본적인 모델을 만든 것이다.
submit 해서 실행 시킨다, tool area에서 job detail로 작업 현황과 결과보기
결과 확인
split data에서 데이터 나눈 거 확인



evaluate_model 우클릭 프리뷰 데이터로 오류 측정도 보기

모델 활용하여 서비스 운영
완성된 모델 위에 publish 버튼 선택

이름 지어주고 클라우드에 publish

서비스 눌러서 들어가보자

overview에 REST endpoint documentation 를 복붙해보면 API를 호출할 수 있는 스펙이 나온다


chat gpt를 사용하여 REST endpoint documentation 를 파이썬 코드로 호출하는 방법을 작성해달라고 하는 건 꿀팁
, API key 필요하다고 하면....흠
두번째 방법 : Automated ML
이번 예제에서는 타이타닉 데이터의 일부를 사용한다
데이터만 넣으면 전반적인 머신러닝 과정 알아서 모두 해준다(배포 이전까지), 전처리 과정이나, 알고리즘도 여러개 다 돌려보고 평가하여 그 중 가장 잘맞는 방식을 찾을 수 있게 해준다.
<전반적인 머신러닝 과정 설명>
데이터를 가지고 오면 raw data가 되고 여기서 우리가 필요한 형태로 데이터 전처리 과정을 거쳐야한다.
그때 필요한 메타데이터를 따로 관리하기도 하고 그래서 전처리를 해서 나온것이 features(feature engineering)
그리고 이 feature를 가지고 트레이닝과 테스트셋으로 나눠서 트레이닝셋에 알고리즘을 먹이고 파라메타를 조정한다. 여기서 데이터를 학습해서 넣은 것이 모델이다.
그리고 이 모델에 테스트셋을 넣어 평가해보고 괜찮으면 저장하고 배포한 것이 API

1. Automates ML > Create a new Automated ML job 눌러서 시작
2. 데이터를 먼저 만들어주자
create 눌러 시작

이미 예제 파일이 로컬에 있음으로 from local file을 체크하고 넘어간다

저장 공간을 지정

업로드할 파일 선택

데이터의 구조 보기
file format : delimited 구분자로 구별되어있다

ㄴ보면서 빼줘야할 column을 미리 생각해보자
-첫번째 열
-name
-티켓번호
schema(구조)에서는 아까 빼버린 옵션을 꺼버리면 된다

그리고 결과적으로 예측을 할 survived가 0, 1의 정수형으로 되어있는데 컴퓨터는 이 값이 그냥 숫자로 착각할 수도 있기 때문에 삶과 죽음 값 2개 밖에 없음을 나타내기 위해 bool타입으로 바꿔준다

전체적인 overview에서 create까지 눌러주면 DataSet이 만들어진 것(안보이면 refresh)

3.
만들어진 데이터 셋 누르고 next 눌러 새로운 job을 만든다
이름 짓고/ 라벨 데이터 정하고 / 이걸 돌린 컴퓨터 설정(지난 과정에서 만든 vm)

4. 어떤 문제를 풀것인지 체크 (타이타닉 예제는 산자/죽은 자를 나누는 classification 문제)
deep learning을 누르면 dl까지 해주고 아니면 sklearn만 사용. 이번엔 체크해보자

next 하기전 view additional configuration settings에서 Primary metric(지표) 정해주고
Blocked model에서 아예 시도도 안해도 될 것같은 알고리듬을 정해준다.

exit criterion은 시간이 얼마나 걸렸을 때 그만 중단시킬지 정해주는 것

max concurrent iteration은 몇개를 동시에 돌릴지 정한다(올릴 수록 돈도 많이 듦^^)

그 후 저장하고 next
4. validate and test, 모델 평가방법
validatio type: (1)train-validation split 은 학습/테스트용으로 쪼개서 해서 테스트 (2)user validation data 테스트용 데이터 따로 줘서 사용

finish를 눌러준다
completed되기 전 만들어지는 과정에서도 models 들어가면 만들어지며 list up되는 과정 볼 수 있다

알고리즘 중 같은 정확도라면 duration이 짧은 게 좋다(여기선 standardScalerWrapper로 전처리, XGBoostClassifier가 알고리듬)

눌러서 들어가보면 그 모델에 대한 설명 볼 수 있다, /view generated code 하면 코드도 활용 가능./Metric을 보면 해당 알고리즘의 지표들을 보여준다./Data transformation에서는 데이터 전처리 과정을 볼 수 있다.

세번째 방법 : Notebooks
이번에는 당뇨병 데이터를 예제로 사용
파일을 새로 만들어준다

python 버전 바꾸기

애저 쪽 기능을 다 쓰려면 인증을 눌러줘야한다!

# Azure Machine Learning은 Microsoft에서
# Workspace는 머신 러닝 프로젝트의 모든 구성 요소를 포함하는 최상위 개체
# 애저 쪽 기능 임포트
from azureml.core import Workspace
# 워크스페이스 쪽 현재상황 보는 참조 변수 만들기
ws = Workspace.from_config()
# 워크스페이스의 이름 및 다른 몇가지 정보 더보기
print('Workspace name:' + ws.name,
'Azure region:' + ws.location,
'Subscription ID:' + ws.subscription_id,
'Resurce group:' + ws.resource_group
)
실험 공간? 워크 스페이스 내에 또 연구실이 있고 이 안에서 파이썬을 돌리도록 되어있다.
# 실험 공간을 준비
from azureml.core import Experiment
# 실험을 할 땐 워크스페이스에 만들어주고 실험의 이름도 지정
experiment = Experiment(workspace=ws, name='diabetes-experiment')
jobs > experiment 탭에 들어가보면 실험실 만들어진거 볼 수 있다
# 데이터 준비
from azureml.opendatasets import Diabetes
# 데이터 쪼개는 데 쓰는 모듈 임포트
from sklearn.model_selection import train_test_split
#pandas 데이터 프레임 형태로 보기, 이미 보관된 데이터를 가져오는 거라 get_tabular를 이용,dropna()로 빠진 행 지우기
x_df = Diabetes.get_tabular_dataset().to_pandas_dataframe().dropna()
# Y값만 꺼내서 저장
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)
# 쪼개진거 확인
print(X_train)

# 모델 훈련, 로그, 모델 파일 관리
# 알고리듬/ 평가지표/ 저장 모듈 부르기
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
from sklearn.externals import joblib
# 수학적 도구 임포트
import math
# 학습을 시키기 위한 alpha 값 만들기(성능 비교위해)
alphas = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
# 테스트
#for alpha in alphas:
#
# model = Ridge(alpha=alpha)
# model.fit(X_train, y_train) # 데이터 학습
# y_pred = model.predict(X_test) # 예측 결과 저장
# mse = mean_squared_error(y_test, y_pred) # 오류 저장
#
# print('model_alpha={0}, mse={1}'.format(alpha, mse)) # 결과 보기
오류 측정을 rmse로 바꿔서 해주기 (mse에 루트준 값), 실험 로그 남기기
# 테스트
for alpha in alphas:
#실험의 기록
run = experiment.start_logging() # 실험 시작, 로그 시작
run.log('alpha_value',alpha) # 로그 기록 항목1
model = Ridge(alpha=alpha) # Ridge 회귀 분석 모델을 만들고,Ridge(alpha=alpha) 부분은 alpha 매개 변수를 사용하여 규제 강도를 지정
model.fit(X_train, y_train) # 데이터 학습
y_pred = model.predict(X_test) # 예측 결과 저장
rmse = math.sqrt(mean_squared_error(y_test, y_pred)) # 오류 저장
run.log('rmse', rmse) # 로그 기록 항목2
print('model_alpha={0}, rmse={1}'.format(alpha, rmse)) # 결과 보기
# 모델을 파일로 저장하는 부분
model_name = 'model_alpha_' + str(alpha) + '.pkl' # 파일 이름 정하기
filename = 'outputs/' + model_name # 경로 + 모델명
#joblib은 파이썬의 객체 직렬화 라이브러리로서, 메모리에 상주하는 파이썬 객체를 파일 형태로 저장하거나 읽어들이는 기능을 제공
joblib.dump(value=model, filename = filename) # 저장명령으로 임시저장(dump), 내용은 모델,저장할 파일의 이름
# Azure ML Service 에 모델 파일을 업로드 하는 부분
run.upload_file(name=model_name, path_or_stream=filename)
run.complete() # 기록끝
print(f'{alpha} experiment completed')

실험이 끝났으면 파일 창 refresh하면 훈련시킨 모델들이 저장된 걸 볼 수 있다

job 에셋 > 당뇨병 실험 들어가기

각각의 실험에 대한 모델들을 볼 수 있다.(Azure ML Service 에 모델 파일을 업로드 하는 부분)

각각의 모델에 들어가면 설정했던 alpha_value과 오류값 측정등을 볼 수 있다.

다시 해당 노트북에서 expriment 치면 리포트 등 볼 수 있다.
expriment
모델 중 가장 best 모델 탐색 후 다운로드(rmse가 가장 낮은 모델)
# Best Model을 탐색 후 다운로드
minimum_rmse = None # 오류도
minimum_rmse_runid = None # 몇번 째 실험인지 인덱스
for exp in experiment.get_runs(): # 실험 돌리기
run_metrics = exp.get_metrics(); # 평가지표 돌리기
run_details = exp.get_details(); # 실험 디테일 돌리기(몇번째 실험인지 알기위해 사용하는 듯)
run_rmse = run_metrics['rmse'] # 평가지표중에 rmse 돌리기
run_id = run_details['runId'] # 디테일 중 몇번째 실험인지 돌리기
# 가장 낮은 RMSE 값을 가진 실행 ID를 구하는 부분
if minimum_rmse is None: # minimum_rmse가 none일 때
minimum_rmse = run_rmse # 평가지표 돌리고
minimum_rmse_runid = run_id # minimum_rmse id 도 돌려
else:
if run_rmse < minimum_rmse: # rmse가 기존 minimum rmse보다 작으면
minimum_rmse = run_rmse # 걔가 새로운 minimum으로 대체
minimum_rmse_runid = run_id # id도 같은 이치로 작업
print('Best run_id: ' + minimum_rmse_runid)
print('Best run_id rmse: ' + str(minimum_rmse))
# best 파일 이름 확인
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=str(best_run.get_file_names()[0]))
#이제 파일 목록에 베스트 버전 모델이 다운로드 되어있다.
과정에 오류가 생기면 Jobs에 해당 실험들어가 뭔가 값이 빠지거나 여전히 생성중인 파일이 있는 것인지 확인하고 삭제 재실행한다
Data > data store
실험에 관련됐던 데이터 저장하고 관리하는 곳

'machine_learning' 카테고리의 다른 글
| 통계기반의 데이터분석(1) (1) | 2023.05.22 |
|---|---|
| MLOps (2) Azure의 ML service (0) | 2023.05.08 |
| 비지도 학습 Clustering(3) - Hierarchical Clustering (0) | 2023.05.01 |
| 비지도 학습 Clustering(2) - K-Means 모델 만들기 (0) | 2023.05.01 |
| 비지도 학습 Clustering(1) - 예제용 와인 데이터 전처리 (0) | 2023.05.01 |