MLflow系列3:MLflow項目


英文鏈接:https://mlflow.org/docs/latest/projects.html
本文鏈接:https://www.cnblogs.com/CheeseZH/p/11945432.html

MLflow項目是一種用於以可復用可復現的方式打包數據科學代碼的格式。項目的組件包含了API和命令行工具,可以用來在一個工作流中鏈接多個項目。

概覽

簡而言之,MLflow項目就是一套框架,用於組織和發布你的代碼,使得其他數據科學家或者自動化工具能夠運行。每個項目就是一個包含多個文件的目錄或者一個Git倉庫。MLflow可以根據目錄中的文件(比如conda.yaml文件可以看作是Conda環境)來運行項目,你也可以在MLproject文件中指定更詳細的信息。

Name

人類可讀的項目名稱。

Entry Points

項目中可以執行的命令,以及命令的參數信息。大多數項目至少有一個用來調用的入口點,一些項目可能包含多個入口點,比如你有一個Git倉庫里邊有多種特征提取算法。你也可以調用任意的.py或者.sh文件作為入口點。如果你在MLproject文件中列舉了入口點信息,你也需要提供相應的參數信息,包括數據類型和默認值。

Environment

用於執行入口點的軟件環境。包括項目代碼依賴的所有庫。詳情參考Project Environments,包括Conda environmentsDocker containers

你可以通過mlflow run命令或者mlflow.projects.run()Python API來運行來自Git URI(需要使用絕對目錄)或者本地目錄的項目。

指定項目

默認情況下,一個Git倉庫或者一個本地目錄都可以被當作一個MLflow項目。項目目錄的章節會介紹了MLflow如何把目錄解析成一個項目。

為了給一個項目提供額外的信息,你可以在倉庫或者目錄中提供一個MLproject文件。

MLflow項目允許你指定項目需要的軟件環境。

項目環境

目前MLflow支持以下幾種項目環境:Conda環境,Docker容器環境,系統環境。

Conda環境

Conda環境支持Python包和本地庫(例如CuDNN或Intel MKL)。當一個MLflow項目指定了Conda環境,這個環境會在項目運行前激活(activated)。

默認的,MLflow使用系統路徑查找並運行conda。你可以通過環境變量MLFLOW_CONDA_HOME來指定conda環境,這樣MLflow就會嘗試運行$MLFLOW_CONDA_HOME/bin/conda。

你可以通過conda.yaml文件為項目指定conda環境,將這個文件放在項目根目錄或者MLproject的conda_env參數。

Docker容器環境

Docker容器可以讓你調用非Python依賴,比如Java庫。詳情參考Dockerized Model Training with MLflow

如果指定Docker容器環境,必須向項目中添加MLproject文件。

系統環境

你也可以在當前系統環境下直接運行MLflow項目。前提是你當前系統中安裝了項目的所有依賴。使用系統環境的話,不需要在MLproject文件中指定。更多信息查看運行項目的Environment參數。

項目目錄

當運行一個沒有MLproject文件的MLflow項目目錄或者倉庫,MLflow使用下面的約定決定項目的屬性:

  • 項目名稱就是目錄名稱
  • 如果有conda.yaml文件,就是用指定的conda環境,否則MLflow會使用一個僅包含Python的conda環境。
  • 任何.py和.sh文件都可以作為入口點。
  • 默認情況下,入口點沒有任何參數。參數可以在運行時通過命令行mlflow run或者Python APImlflow.projects.run()指定參數。語法是--key value

MLproject文件

MLproject文件是一個遵循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}"

這個文件可以指定名字,conda或者docker環境,入口點的詳細信息。每個入口點都會定義一個運行命令和參數。

指定環境

Conda environment
Include a top-level conda_env entry in the MLproject file. The value of this entry must be a relative path to a Conda environment YAML file within the MLflow project’s directory. In the following example:

MLproject文件不能同時指定conda環境和Docker環境。

Conda環境

在MLproject文件的頂層通過conda_env來指定。conda_env的值必須是MLflow項目目錄中的指定conda環境的YAML文件的相對目錄。例如:

conda_env: files/config/conda_environment.yaml

conda_env會被解析成<MLFLOW_PROJECT_DIRECTORY>/files/config/conda_environment.yaml,其中<MLFLOW_PROJECT_DIRECTORY>表示項目的根目錄。

Docker容器環境

Include a top-level docker_env entry in the MLproject file. The value of this entry must be the name of a Docker image that is accessible on the system executing the project; this image name may include a registry path and tags. Here are a couple of examples.

Example 1: Image without a registry path

在MLproject文件的頂層通過docker_env來指定。docker_env的值必須是該項目可以訪問到的Docker鏡像,以下是幾個例子。

例1: 無注冊路徑的鏡像

docker_env:
  image: mlflow-docker-example-environment

默認Tag是latest,首先從當前系統中查找鏡像mlflow-docker-example-environment,如果本地沒有找到,就會嘗試到DockerHub上拉取。

例2: 有注冊路徑的鏡像

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

命令語法

參考Python format string syntax

指定參數

# 簡單指定
parameter_name: data_type

# Short syntax
parameter_name: {type: data_type, default: value}  

# Long syntax
parameter_name:     
  type: data_type
  default: value

參數類型

  • string
  • float
  • path
  • uri

運行項目

MLflow提供了兩種運行項目的方式:mlflow run命令行工具,mlflow.projects.run() Python API。這兩種方式都包括以下參數:

  • Project URI
  • Project Version
  • Entry Point
  • Parameters
  • Deployment Mode
  • Environment

例如mlflow run git@github.com:mlflow/mlflow-example.git -P alpha=0.5

在Databricks上運行MLflow項目

在Kubernetes上運行MLflow項目(experimental)

快速迭代

  • 項目中添加MLproject文件
  • 將主程序指定為main入口點
  • 將參數設置為默認參數
  • 執行mlflow run .

構建多步驟工作流

結合使用mlflow.tracking和mlflow.projects.run()能夠構建一個多步驟工作流,每個步驟可以是單獨的項目或者一個項目中的入口點。每次調用mlflow.projects.run()都會返回一個run對象,你可以使用mlflow.tracking來知道這個run什么時候結束以及它的輸出產品。這些產品可以通過路徑或者URI參數傳遞到下一個步驟。你可以通過一個Python程序協調所有工作流,查看每個步驟的結果。下邊是個使用多步驟工作流的場景:

模塊化你的數據科學代碼

不同的用戶可以發布數據特征抽取,訓練,驗證等可復用的步驟,這樣其他用戶或者團隊就可以在他們的工作流中使用。因為MLflow支持Git版本,另一個團隊可以鎖定他們的工作令使用指定版本的項目,或者根據他們自己的計划升級。

超參數調優

使用mlflow.projects.run()你可以並行啟動多個runs,無論是在本地機器還是在Databricks這種雲平台。你的主程序就可以實時查看每個run的指標,以此為依據取消runs或者啟動新的runs或者選擇最好的run。

交叉驗證

Sometimes you want to run the same training code on different random splits of training and validation data. With MLflow Projects, you can package the project in a way that allows this, for example, by taking a random seed for the train/validation split as a parameter, or by calling another project first that can split the input data.
For an example of how to construct such a multistep workflow, see the MLflow Multistep Workflow Example project.

有時候你希望同樣的訓練代碼在不同的訓練集和驗證集上運行。使用MLflow項目,你可以做到這點,比如隨機切分訓練集/驗證集,或者通過調用另一個項目來切分輸入數據。

詳情參考MLflow Multistep Workflow Example


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM