23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
AKS 인프라를 구축하고 나서 활용할 만한 상황이 생기면 시도해 보고 있다.
최근에 AI 스터디를 하면서 사전에 환경이 정의된 pod로 ML환경 구성에 대한 부담을 줄여 주는 방식이 있을지 찾아 보았다.
pycaret이 눈에 띄었다.
pycaret에 대해 아래의 내용으로 핵심적인 개념에 대해 이해할 수 있다.
저렴한 계산 자원의 제공으로 머신러닝이 대중화되면서 머신러닝 모델링을 쉽고 빠르게 할 수 있는 도구의 필요성이 대두
엔드투엔드 머신러닝 워크플로우를 간소화하고, 머신러닝 실험을 자동화하는 라이브러리
머신러닝 프로세스를 일일이 코딩하지 않고도 간편하게 구성/트레이닝/평가/튜닝이 가능
(코드 최소화) 모듈화된 인터페이스로 적은 코드로 구현 가능
(Auto ML) 최적 알고리즘/하이퍼파라미터 자동 검색
(높은 사용자 경험) 데이터 전처리부터 배포까지의 전 과정 지원
AKS에 pycaret 서비스를 구성하는 과정을 docker hub 검색 과정부터 시작하는 내용으로 소개한다.
aks에 새로운 리소스를 생성할 때, artifact hub를 검색하게 된다. 존재한다면 argocd로 repo를 연결해서 손쉽게 리소스를 생성해 낼 수 있다.
pycaret은 artifact hub에 존재하지 않았다. 그래서, docker hub에 pycaret 이미지가 있는지 확인해 보았다.
반갑게도 아래와 같이 pycaret/full 버전이 있었다.
이미지가 있으니 yaml 파일로 작성해서 kubectl apply 명령으로 aks에 배포할 수 있다.
서비스 형태로 제공될 수 있도록 yaml을 구성해 보았다.
네임스페이스를 구분하여 구성한다.
apiVersion: v1
kind: Namespace
metadata:
name: jupyter-notebookpycaret 용 주피터 노트북의 실행 코드나 결과를 pod가 재기동 되더라도 남길 수 있게 PVC로 구성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jupyter-notebook-pvc
namespace: jupyter-notebook
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gidocker에서 확인 했던 pycaret/full 이미지를 활용하여 pod 구성
apiVersion: apps/v1
kind: Deployment
metadata:
name: jupyter-notebook
namespace: jupyter-notebook
spec:
replicas: 1
selector:
matchLabels:
app: jupyter-notebook
template:
metadata:
labels:
app: jupyter-notebook
spec:
securityContext:
fsGroup: 1000
containers:
- name: jupyter-notebook
image: pycaret/full
command: ["start-notebook.sh"]
args: ["--NotebookApp.token=''", "--NotebookApp.password=''", "--NotebookApp.notebook_dir=/data"]
ports:
- containerPort: 8888
volumeMounts:
- mountPath: /data
name: jupyter-notebook-pv
volumes:
- name: jupyter-notebook-pv
persistentVolumeClaim:
claimName: jupyter-notebook-pvc손쉽게 접속할 수 있도록 LB로 구성했다. (보안성을 위해 nsg를 통해 ACL 관리를 하도록 고려할 필요는 있다.)
apiVersion: v1
kind: Service
metadata:
name: jupyter-notebook
namespace: jupyter-notebook
spec:
type: LoadBalancer
selector:
app: jupyter-notebook
ports:
- protocol: TCP
port: 8888
targetPort: 8888kubectl apply 로 손쉽게 배포하여 바로 사용이 가능합니다.
$ kubectl apply -f pycaret-jupyter.yaml 배포된 AKS에 의해 제공되는 IP:8888로 접속하면 pycaret_full 을 포함하는 주피터 노트북 화면에 접속이 된다.
코드 내용을 보면 pycaret을 이용해 데이터셋 가져오기, 설정, 모델 비교/튜닝/블렌딩, 모델 확정, 예측, 성능 확인하는 머신러닝 워크플로우를 진행한다.
pycaret으로 데이터 준비, 모델 개발/평가/선택/튜닝/블렌딩을 통해 최적의 머신러닝 모델 구현
개발된 모델로 예측 수행 후 성능 점검으로 엔드투엔드 머신러닝 구현 완료
상위 5개의 모델을 선택하여 최종 튜닝을 통해서 결과를 도출하는 코드를 아래의 예시에서 볼 수 있다.
from pycaret.datasets import get_data
from pycaret.classification import *
from pycaret.utils.generic import check_metric
# dataset 생성
dataset = get_data('juice')
# setup으로 init
clf = setup(data=dataset, target='Purchase')
# ML 모델 성능 비교
top5 = compare_models(sort='Accuracy', n_select=5)
# 모델 튜닝, blending
tuned_top5 = [tune_model(i) for i in top5]
blender_top5 = blend_models(estimator_list=tuned_top5)
# 모델 최종 확정, 전체 데이터 학습
final_model = finalize_model(blender_top5)
# 테스트셋 predict
prediction = predict_model(final_model, data=dataset.iloc[-100:])
prediction
# metric 확인
check_metric(prediction['Purchase'], prediction['prediction_label'], metric = 'Accuracy')setup()은 pycaret에서 머신러닝 워크플로우를 시작하기 위한 초기 설정을 수행하는 함수이다.
- 입력 데이터 전처리(결측값 처리, 이상치 제거)
- 타겟/설명 변수 자동 인식
- 학습/검증/테스트 데이터 분리
- 다양한 ML 알고리즘 자동 생성
- 피처 engineering을 위한 변환기 설정
- mlflow로 실험 추적 및 관리
다수의 모델을 구동하여 최적화까지 단계까지 수행하여 결과를 제공한다.
AKS usecase로 pycaret을 구동 시키는 서비스를 생성해 보았다.
컨테이너 이미지를 준비하여 yaml로 서비스를 정의해서 aks에서 간편하게 구동시킬 수 있어 편리하였다.
필요한 라이브러리를 포함하는 환경으로 간편하게 구성하여 제공할 수 있어 환경 구성에 낭비하는 시간 없이 개발활동에 집중할 수 있겠다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.