MLflowProjects
MLFlowProjectsとは
コードを整理して記述するための規則。
MLFlowProjects導入の流れ
- 環境を選ぶ
- 環境の設定ファイルを記述する
- プロジェクトを実行する
詳細情報
- 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