MLflow系列4:MLflow模型


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

一個MLflow模型是打包機器學習模型的基本格式,可以方便的應用到不同下游工具,例如實時RESTful服務或者批量推理的Apache Spark。這個格式定義了一系列規范,讓你的模型可以被不同的下游工具使用。

存儲格式

每個MLflow模型都是一個包含各種文件的目錄,根目錄包含一個MLmode文件,用於定義模型的多個flavors(這是個關鍵的概念,不知道如何翻譯,就使用原詞了)。

Flavors是讓MLflow模型強大的關鍵因素,是一套部署工具可以理解的規范,這使得能夠開發一套工具兼容多種機器學習庫。MLflow定義了一些基礎的flavors,所以內置部署工具都支持,例如“Python function”flavor描述了如何通過Python函數的方式來運行模型。機器學習庫也可以定義或使用其他的flavors,例如MLflow的mlflow.sklearn庫允許將模型以scikit-learn Pipeline對象來加載或者當作通過的Python函數來使用。

All of the flavors that a particular model supports are defined in its MLmodel file in YAML format. For example, mlflow.sklearn outputs models as follows:

一個模型支持的所有flavors都在它的MLmodel文件中定義,這個文件是YAML格式。例如mlflow.sklearn輸出模型目錄結構:

# Directory written by mlflow.sklearn.save_model(model, "my_model")
my_model/
├── MLmodel
└── model.pkl

它的MLmodel文件描述了兩個flavors:

time_created: 2018-05-25T17:28:53.35

flavors:
  sklearn:
    sklearn_version: 0.19.1
    pickled_model: model.pkl
  python_function:
    loader_module: mlflow.sklearn

這個模型可以被任何支持sklearn或python_function模型flavor的工具使用。例如mlflow models serve命令能夠serve帶有sklearn flavor的模型:

mlflow models serve my_model

mlflow sagemaker命令行工具可以講一個帶有python_functionflavor的模型打包並部署到AWS SageMaker:

mlflow sagemaker deploy -m my_model [other options]

Fields in the MLmodel Format

除了flavors, MLmodel YAML文件可以包含下列信息:

  • time_created
  • run_id,如果模型是通過MLflow Tracking保存的,會有一個run id

模型API

你可以通過多種方式保存和加載MLflow模型。首先,MLflow集成了很多通用庫,例如mlflow.sklearn包含了用於scikit-learn模型的save_model, log_model, 和 load_model方法。其次,你可使用mlflow.models.Model類來創建和保存模型。這個類有四個關鍵方法:

  • add_flavor:為模型添加一個flavor。每個flavor有一個字符串名字和字典形式的key-value屬性,value可以是任意能夠被YAML序列化的對象。
  • save:將模型保存到本地目錄。
  • log:使用MLflow Tracking將模型保存為當前run的產品。
  • load:從本地目錄加載模型或者從之前的一個run的產品加載模型。

內置Model Flavors

模型定制化

如果MLflow不支持你想使用的機器學習庫,那么就需要進行模型定制化,主要包括Custom Python ModelsCustom Flavors

內置部署工具

MLflow提供的部署工具可以將MLflow模型部署到本地機器或者一些生產環境。並不是所有的部署方法都適用於所有模型flavors。

部署MLflow模型

MLflow可以將模型部署成本地REST API或者直接得出評分文件。MLflow可以將模型打包成支持REST API的Docker鏡像。這個鏡像可以被部署到類似Kubernetes的各種環境。

你可以通過mlflow.models模塊的命令行來本地部署模型或者生成Docker鏡像。

REST API服務接收通過POST請求發送到/invocations路徑的下列數據格式:

  • split orientation格式的JSON-serialized pandas DataFrames. 例如, data = pandas_df.to_json(orient='split'). 這個格式需要在請求頭指定Content-Type=application/json 或 application/json; format=pandas-split.
  • records orientation格式的JSON-serialized pandas DataFrames。不建議使用。
  • CSV-serialized pandas DataFrames. 例如data = pandas_df.to_csv(). 這個格式需要指定請求頭Content-Type=text/csv。
    例如:
# split-oriented
curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json' -d '{
    "columns": ["a", "b", "c"],
    "data": [[1, 2, 3], [4, 5, 6]]
}'

# record-oriented (fine for vector rows, loses ordering for JSON records)
curl http://127.0.0.1:5000/invocations -H 'Content-Type: application/json; format=pandas-records' -d '[[1, 2, 3], [4, 5, 6]]'

常用命令

  • serve:將模型部署成本地REST API服務
  • build_docker:將模型打包成支持REST API的鏡像
  • predict:通過模型根據CSV或JSON文件生成預測結果

詳情查看:

mlflow models --help
mlflow models serve --help
mlflow models predict --help
mlflow models build-docker --help

部署python_function模型到Microsoft Azure ML

部署python_function模型到Amazon SageMaker

部署python_function模型到Apache Spark UDF


免責聲明!

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



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