JUST WRITE

하이퍼 파리미터 튜닝(1) - Tracking System Mlflow 세팅 본문

AI

하이퍼 파리미터 튜닝(1) - Tracking System Mlflow 세팅

천재보단범재 2024. 10. 12. 22:06

하이퍼파라미터 튜닝(1)

Tracking System Mlflow 세팅

회사에서 하이퍼 파라미터 튜닝(Hyper parameter Tuning)에 관해서 스터디를 진행하였습니다.

엔지니어 입장에서 하이퍼 파라미터 튜닝에 필요한 오픈 소스와 시스템 구성 위주로 공부하였습니다.

스터디 전에는 몰랐지만 튜닝 관련해서 다양한 오픈 소스들이 있다는 것을 알았습니다.

이번 포스팅을 시작으로 스터디에서 공부한 하이퍼 파라미터 튜닝에 관해서 정리하고자 합니다.

하이퍼 파라미터는 무엇인가?

본격적인 내용에 앞서 하이퍼 파라미터가 무엇인지 짚고 넘어갑니다.

하이퍼 파라미터는 모델의 학습 프로세스 부분을 설정할 수 있는 매개변수입니다.

모델이 어떻게 학습할지 설정할 수 있는 매개변수입니다.

모델 학습 전 머신러닝 엔지니어가 하이퍼 파라미터를 선택하고 설정합니다.

학습 과정에서는 변경이 불가하기 때문에 모델의 외부적인 요인입니다.

하이퍼 파라미터는 아래와 같은 것들이 있습니다.

  • Train / Test 비율
  • 클러스트링 알고리즘에서 클러스터의 수
  • Convolution Layer에서 필터 사이즈
  • 의사 결정 나무(Decision tree)에서 branch 수

Mlflow는 무엇인가?

하이퍼 파라미터 튜닝에 Mlflow가 왜 필요할까요?

Mlflow는 머신러닝 학습 프로세싱을 도와주는 오픈소스입니다.

머신러닝 워크플로우에 필요한 기능들을 제공해서 데이터 과학자, 엔지니어에게 큰 도움을 줍니다.

제공하는 주요 기능은 아래와 같습니다.

  • 모델 저장소(Model Registry)
  • Tracking Server
  • 모델 배포(Deployment)
  • 모델 버전 관리
  • UI를 통한 비교/분석/관리

모델 학습부터 배포까지 머신러닝 워크플로우에 필요한 기능들을 제공해주고 있습니다.

[출처] https://mlflow.org/docs/latest/getting-started/index.html

 

Tracking Server

다양한 기능들을 제공하지만 하이퍼 파라미터 튜닝 시리즈에서는 Tracking Server 기능을 활용합니다.

머신러닝을 모델을 학습하거나 학습이전에 모델을 설계 시 다양한 실험들을 진행합니다.

실험들을 진행하면서 아래와 같은 다양한 지표들이 나옵니다.

  • 코드
  • 하이퍼 파라미터
  • 파라미터
  • 메트릭
  • 로그

이런 지표들이 관리가 되어야 일회성 실험에 끝나지 않고 실험 내용을 팔로우업 하면서 발전될 수 있습니다.

어제 진행한 실험 결과가 필요한 경우도 한 달 전 진행한 실험 결과가 필요할 수 있습니다.

Mlflow는 머신 러닝 실험 지표들을 관리할 수 있는 서버와 UI를 제공합니다.

지표들을 추적할 수 있는 서버라고 해서 Tracking Server라고 표현합니다.

[출처] https://mlflow.org/docs/latest/getting-started/index.html

 

Mlflow는 local 파일이나 RDB에 머신러닝 실험 지표들을 저장하고 관리합니다.

아래와 같은 다양한 아키텍처를 가질 수 있습니다.

[출처] https://mlflow.org/docs/latest/tracking.html#tracking

하이퍼 파라미터 튜닝에 Mlflow가 필요한 역할은 튜닝 실험 결과 지표들의 관리입니다.

최적의 튜닝은 한 번으로 끝나지 않습니다.

다양한 시도를 통해 최적의 하이퍼 파라미터를 찾아야 합니다.

Mlflow를 활용해서 튜닝에서 나오는 지표들을 관리하고 효율적으로 작업을 진행하려고 합니다.

Mlflow 세팅

Mlflow를 Kubernetes 환경에 세팅합니다.

Bitnami에서 제공하는 Helm 차트를 이용해서 Mlflow를 쉽게 세팅할 수 있습니다.

먼저 Bitnami Helm 레포지토리를 추가합니다.

Bitnami에서는 다양한 Helm 차트를 제공하며 그중에 Mlflow도 포함되어 있습니다.

$ helm repo add bitnami https://charts.bitnami.com/bitnami

$ helm repo list | grep bitnami
bitnami         https://charts.bitnami.com/bitnami

$ helm search repo bitnami |  grep mlflow
bitnami/mlflow                                  1.5.5           2.16.2          MLflow is an open-source platform designed to m...

Bitnami Helm 차트 중 Mlflow 차트를 로컬에 다운로드합니다.

values.yaml 파일을 수정하여 필요한 설정을 하려고 합니다.

$ helm pull bitnami/mlflow

-rw-r--r--  1 coxspace coxspace 191K Oct 13 05:49 mlflow-1.5.5.tgz

$ tar zxf mlflow-1.5.5.tgz
$ mv mlflow mlflow-1.5.5

아래와 같이 values-override.yaml 파일을 생성하여 필요한 설정을 합니다.

프로덕션 환경이라면 디테일한 설정이 필요하지만 이번에는 이번 포스팅 시리즈에 필요한 최소 설정만 하였습니다.

  • tracking.auth => Mlflow UI Auth 설정
  • tracking.service => Mlflow UI(Tracking Server) 서비스 포트 설정
  • postgresql => PostgreSQL(Data Store) 설정
  • minio => Minio(Model Registry) 설정
tracking:
  auth:
    enabled: true
    username: admin
    password: "******"
  service:
    type: NodePort
    nodePorts:
      http: "30060"
      https: "30061"
postgresql:
  enabled: true
  auth:
    username: bn_mlflow
    password: "******"
    database: bitnami_mlflow
minio:
  enabled: false

이번에는 Model Registry 까지는 필요하지 않아 Minio 세팅을 진행하지 않았습니다.

프로덕션 환경이라면 Data Store, Model Registry를 외부에 세팅하여,

Mlflow에 연결하는 것이 바람직합니다.

이번에는 Data Store를 PostgreSQL로 하여 Mlflow 세팅 시 함께 세팅하였습니다.

Helm 명령어를 통해 설정 파일을 참고하여 Mlflow를 세팅합니다.

$ helm install mlflow -n mlflow-test --create-namespace -f values-override.yaml .

NAME: mlflow
LAST DEPLOYED: Sun Oct 13 05:59:54 2024
NAMESPACE: mlflow-test
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mlflow
CHART VERSION: 1.5.5
APP VERSION: 2.16.2

** Please be patient while the chart is being deployed **
You didn't specify any entrypoint to your code.
To run it, you can either deploy again using the `source.launchCommand` option to specify your entrypoint, or execute it manually by jumping into the pods:

1. Get the running pods
    kubectl get pods --namespace mlflow-test -l "app.kubernetes.io/name=mlflow,app.kubernetes.io/instance=mlflow"

2. Get into a pod
    kubectl exec -ti [POD_NAME] bash

3. Execute your script as you would normally do.
MLflow Tracking Server can be accessed through the following DNS name from within your cluster:

    mlflow-tracking.mlflow-test.svc.cluster.local (port 80)

To access your MLflow site from outside the cluster follow the steps below:

1. Get the MLflow URL by running these commands:

   export NODE_PORT=$(kubectl get --namespace mlflow-test -o jsonpath="{.spec.ports[0].nodePort}" services mlflow-tracking)
   export NODE_IP=$(kubectl get nodes --namespace mlflow-test -o jsonpath="{.items[0].status.addresses[0].address}")
   echo "MLflow URL: http://$NODE_IP:$NODE_PORT/"

2. Open a browser and access MLflow using the obtained URL.
3. Login with the following credentials below to see your blog:

  echo Username: $(kubectl get secret --namespace mlflow-test mlflow-tracking -o jsonpath="{ .data.admin-user }" | base64 -d)
  echo Password: $(kubectl get secret --namespace mlflow-test mlflow-tracking -o jsonpath="{.data.admin-password }" | base64 -d)

WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
  - run.resources
  - tracking.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

정상적으로 Mlflow가 세팅되었다면 Kubernetes IP에 설정한 서비스 포트를 통해 UI에 접근 가능합니다.

브라우저에서 UI에 접근하면 아이디와 패스워드를 요구합니다.

설정한 Auth 정보를 입력하면 되고 분실 시 위에 세팅 시 안내로 나온 명령어로 확인 가능합니다.

echo Username: $(kubectl get secret --namespace mlflow-test mlflow-tracking -o jsonpath="{ .data.admin-user }" | base64 -d)
echo Password: $(kubectl get secret --namespace mlflow-test mlflow-tracking -o jsonpath="{.data.admin-password }" | base64 -d)

Mlflow UI - Auth

올바른 아이디와 패스워드를 입력하면 Mlflow 초기 화면에 접근 가능합니다.

포스팅한 날짜 기준(24/10/13)으로 Mlflow 2.16.2 버전이 설치되었습니다.

Bitnami Helm 차트 기준 Mlflow가 2.16.2 버전이고 Mlflow는 2.17.0까지 릴리즈 되었습니다.

Mlflow UI - 초기 화면

정리

이번 포스팅에서는 Mlflow 세팅 관련해서 정리해보았습니다.

하이퍼 파라미터 튜닝을 엔지니어 관점에서 살펴보는 시리즈의 첫 번째 포스팅입니다.

하이퍼 파라미터가 무엇인지 정리해보고 머신러닝 워크플로우에 도움을 주는 Mlflow를 세팅해 보았습니다.

Mlflow를 통해서 앞으로 진행할 하이퍼 파라미터 튜닝을 효율적으로 진행하고자 합니다.

다음 포스팅에서는 하이퍼 파라미터 튜닝에 사용되는 Optuna에 대해서 정리해 보겠습니다.

[참고사이트]

더보기

 

728x90
반응형
Comments