데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      AKS usecase : AutoML 'pycaret'

      broccoli 23.10.05
      1,080 14 0
      DEVOTEE 요약
      AKS를 활용한 ML환경 구성에 대한 내용을 다룬 이번 글에서는 AutoML 도구인 pycaret을 소개하고, AKS에 pycaret을 구성하기 위한 과정을 설명하고 있다. 머신러닝 모델링을 쉽고 빠르게 할 수 있는 pycaret을 사용하여 AKS에서 ML환경을 구축하는 방법을 제안하고 있다. 필요한 환경을 이미지로 만들어 AKS에 배포하여 간편하게 사용할 수 있도록 구성하였다.
      DEVOTEE 추천 블로그

      AKS 를 ML환경 구성에 활용

      AKS 인프라를 구축하고 나서 활용할 만한 상황이 생기면 시도해 보고 있다.

      최근에 AI 스터디를 하면서 사전에 환경이 정의된 pod로 ML환경 구성에 대한 부담을 줄여 주는 방식이 있을지 찾아 보았다.

      pycaret이 눈에 띄었다.


      AutoML 'pycaret'

      pycaret에 대해 아래의 내용으로 핵심적인 개념에 대해 이해할 수 있다.

      배경

      저렴한 계산 자원의 제공으로 머신러닝이 대중화되면서 머신러닝 모델링을 쉽고 빠르게 할 수 있는 도구의 필요성이 대두

      정의

      엔드투엔드 머신러닝 워크플로우를 간소화하고, 머신러닝 실험을 자동화하는 라이브러리

      필요성

      머신러닝 프로세스를 일일이 코딩하지 않고도 간편하게 구성/트레이닝/평가/튜닝이 가능

      특징

      (코드 최소화) 모듈화된 인터페이스로 적은 코드로 구현 가능

      (Auto ML) 최적 알고리즘/하이퍼파라미터 자동 검색

      (높은 사용자 경험) 데이터 전처리부터 배포까지의 전 과정 지원


      AKS에 구성 위한 이미지 탐색

      AKS에 pycaret 서비스를 구성하는 과정을 docker hub 검색 과정부터 시작하는 내용으로 소개한다.

      docker hub를 검색

      aks에 새로운 리소스를 생성할 때, artifact hub를 검색하게 된다. 존재한다면 argocd로 repo를 연결해서 손쉽게 리소스를 생성해 낼 수 있다.

      pycaret은 artifact hub에 존재하지 않았다. 그래서, docker hub에 pycaret 이미지가 있는지 확인해 보았다.

      반갑게도 아래와 같이 pycaret/full 버전이 있었다.

      image.png


      yaml 구성

      이미지가 있으니 yaml 파일로 작성해서 kubectl apply 명령으로 aks에 배포할 수 있다.

      서비스 형태로 제공될 수 있도록 yaml을 구성해 보았다.

      Namespace 설정

      네임스페이스를 구분하여 구성한다.

      apiVersion: v1
      kind: Namespace
      metadata:
        name: jupyter-notebook

      PersistentVolumeClaim 설정

      pycaret 용 주피터 노트북의 실행 코드나 결과를 pod가 재기동 되더라도 남길 수 있게 PVC로 구성

      apiVersion: v1  
      kind: PersistentVolumeClaim
      metadata:
        name: jupyter-notebook-pvc
        namespace: jupyter-notebook
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi

      Deployment 설정

      docker에서 확인 했던 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

      Service 설정

      손쉽게 접속할 수 있도록 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: 8888


      yaml 배포

      kubectl apply 로 손쉽게 배포하여 바로 사용이 가능합니다.

      $ kubectl apply -f pycaret-jupyter.yaml 


      pycaret 사용

      웹기반 접속 UI

      배포된 AKS에 의해 제공되는 IP:8888로 접속하면 pycaret_full 을 포함하는 주피터 노트북 화면에 접속이 된다.

      image.png



      pycaret 샘플 코드 실행

      코드 내용을 보면 pycaret을 이용해 데이터셋 가져오기, 설정, 모델 비교/튜닝/블렌딩, 모델 확정, 예측, 성능 확인하는 머신러닝 워크플로우를 진행한다.

      1. pycaret으로 데이터 준비, 모델 개발/평가/선택/튜닝/블렌딩을 통해 최적의 머신러닝 모델 구현

      2. 개발된 모델로 예측 수행 후 성능 점검으로 엔드투엔드 머신러닝 구현 완료

        상위 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로 실험 추적 및 관리


      실행 결과 예시

      다수의 모델을 구동하여 최적화까지 단계까지 수행하여 결과를 제공한다.

      image.png

      image.png


      정리

      AKS usecase로 pycaret을 구동 시키는 서비스를 생성해 보았다.

      컨테이너 이미지를 준비하여 yaml로 서비스를 정의해서 aks에서 간편하게 구동시킬 수 있어 편리하였다.

      필요한 라이브러리를 포함하는 환경으로 간편하게 구성하여 제공할 수 있어 환경 구성에 낭비하는 시간 없이 개발활동에 집중할 수 있겠다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      broccoli 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기