英文鏈接: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 environments和Docker 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
命令語法
指定參數
# 簡單指定
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項目,你可以做到這點,比如隨機切分訓練集/驗證集,或者通過調用另一個項目來切分輸入數據。