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.2Docker コンテナ環境
例 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