機械学習プロジェクトをコードを整理するMLflowProjects

MLflowProjects

MLFlowProjectsとは

コードを整理して記述するための規則。

MLFlowProjects導入の流れ

  1. 環境を選ぶ
  2. 環境の設定ファイルを記述する
  3. プロジェクトを実行する

詳細情報

  • YAML形式のテキスト ファイルであるファイルを追加することで、プロジェクトをより詳細に記述
  • Conda環境, Virtualenv環境, Dockerコンテナーがサポートされている
  • Conda環境
    • CuDNN, Intel MKLの療法をサポート
    • conda.yaml プロジェクト ディレクトリのルートにファイルを含めるか、ファイルにconda_envエントリ を含めることで、MLflow プロジェクトの Conda 環境を指定できる
  • Virtualenv環境
    • pyenvでPythonをダウンロード
    • virtualenvで実行環境として有効にする
    • python_envファイルにエントリ を含めることで、MLflow プロジェクトの Virtualenv 環境を指定できる
  • Dockerコンテナ環境
    • Dockerコンテナを使用すると、
  • コマンドラインツールまたはPython APIを使用して任意のプロジェクトを実行できる
  • MLproject ファイルをルートディレクトリに追加すると詳細に設定できる
  • 環境の指定
    • コンダ環境
    • conda_env: files/config/conda_environment.yaml
    • VIrtualenv環境
    • python_env: files/config/python_env.yaml
    • Docker コンテナ環境
    • docker_env:
      image: mlflow-docker-example-environment
  • コマンドの構文
  • パラメータの指定
    • 各パラメーターのデータ型と既定値を指定できる
    • parameter_name: data_type
    • data_type
      • string
      • fload
      • path
      • uri
  • プロジェクトの実行
    • コマンドラインツールからmlflow run
    • オプション
      • -e, –entry-point
      • -v, –version
      • -P, –param-list
      • -A, –docker-args
      • –experiment-name
      • –experiment-id
      • -b, –backend
      • -c, –backend-config
      • –no-conda
      • –env-manager
      • –storage-dir
      • –run-id
      • –run-name
      • –skip-image-build
    • Python APIからmlflow.projects.run()
  • Kubernetes で MLflow プロジェクトを実行する方法もある (実験段階)
  • Kubernetes 上のDocker 環境でMLflow プロジェクトを実行できる
  • 実験段階のためAPIが変更される可能性あり
  • kubernetes_backend.jsonkubernetes_job_template.yaml
  • 使い方
    • Kubernetes で MLflow プロジェクトを実行
    • MLflow はプロジェクトを含む新しい Docker イメージを構築
    • MLflow は新しいプロジェクト イメージを指定された Docker レジストリにプッシュ
    • 指定された Kubernetes クラスターでKubernetes ジョブを開始
  • 実行ガイド
    • Docker 環境がまだ存在しない場合は、MLflow プロジェクトに追加
    • バックエンド構成 JSON ファイルを作成
    • プロジェクトの Docker および Kubernetes リソースにアクセスするための資格情報を取得
    • プロジェクト URI とバックエンド構成ファイルへのパスを指定して、MLflow プロジェクト CLI または を使用してプロジェクトを実行

環境ごとの設定記述例

コンダ環境

conda_environment.yaml

name: My Project

conda_env: my_env.yaml
# Can have a docker_env instead of a conda_env, e.g.
# docker_env:
#    image:  mlflow-docker-example

entry_points:
  main:
    parameters:
      data_file: path
      regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
  validate:
    parameters:
      data_file: path
    command: "python validate.py {data_file}"

VIrtualenv環境

python_env.yaml

python: "3.7.13"
# Dependencies required to build packages. This field is optional.
build_dependencies:
  - pip
  - setuptools
  - wheel==0.37.1
# Dependencies required to run the project.
dependencies:
  - mlflow
  - scikit-learn==1.0.2

Docker コンテナ環境

例 1: イメージ

docker_env:
  image: mlflow-docker-example-environment

例 2: ボリュームのマウントと環境変数の指定

docker_env:
  image: mlflow-docker-example-environment
  volumes: ["/local/path:/container/mount/path"]
  environment: [["NEW_ENV_VAR", "new_var_value"], "VAR_TO_COPY_FROM_HOST_ENVIRONMENT"]

例 3: リモート レジストリ内のイメージ

docker_env:
  image: 012345678910.dkr.ecr.us-west-2.amazonaws.com/mlflow-docker-example-environment:7.0

例 4: ビルド済みイメージの使用

docker_env:
  image: python:3.7

mlflow run ... --skip-image-build

例 5: Kubenetesを使用

apiVersion: batch/v1
kind: Job
metadata:
  name: "{replaced with MLflow Project name}"
  namespace: mlflow
spec:
  ttlSecondsAfterFinished: 100
  backoffLimit: 0
  template:
    spec:
      containers:
      - name: "{replaced with MLflow Project name}"
        image: "{replaced with URI of Docker image created during Project execution}"
        command: ["{replaced with MLflow Project entry point command}"]
        env: ["{appended with MLFLOW_TRACKING_URI, MLFLOW_RUN_ID and MLFLOW_EXPERIMENT_ID}"]
        resources:
          limits:
            memory: 512Mi
          requests:
            memory: 256Mi
      restartPolicy: Never