Skip to main content
Version: 2.17.1

开发Python标准格式的在线训练模型

了解如何定义 模型训练的标准格式代码 作为 Web 服务部署在 小波AI平台 中。

以下介绍均以 demo-标准格式训练示例 为例。

训练文件目录

    ├── code                               <- Scripts to train models and then use trained models to make predictions.
│   ├── train_model.py <- Train the model and generate the corresponding model files.
│   ├── predict_model.py <- Model prediction combined with specific data preprocessing and business logic.
│   ├── MLproject <- Configuration files of training entrance.
│   └── requirements.txt <- Configuration files of the model running environment.
└── README.md <- The top-level README for developers using this project.

有关模型 在线训练部署 工作流的详细信息,请参阅使用 快速开始-在线训练模型

编写训练文件

  1. 训练入口文件 MLproject

    配置文件结构:

        ├── name                          <- 非必填,指定系统自动生成的训练所需的镜像名称))
    ├── docker_env <- docker环境
    │   ├── args
    │   │   └── cpus/gpus <- 非必填,cpus/gpus环境,选择运行内存大小
    │   └── image <- 基础Docker镜像路径
    └── entry_points
    └── main
    ├── command <- 模型运行入口
    └── parameters <- 模型入口参数

    name镜像名称属性,注意不允许出现大写和特殊符号,参考docker镜像名称规范

    基础Docker镜像路径:一般直接使用系统提供的基础镜像即可。了解并使用Docker镜像,选择预生成Docker镜像路径。

    模型运行入口:执行python方法的模型训练文件,添加入口参数。

    python train_model.py -pi={parameter_i} -pj={parameter_j} -pk={parameter_k} -td={training_data}

    模型入口参数:常用数据类型 str, int, float, url 等。其中 training_data为必填参数,参数类型type为url, 默认值default为"",训练数据在AI平台模型训练时进行选择,并自动填写。

      parameter_i:
    type: int
    default: 3
    parameter_j:
    type: float
    default: 3.5
    parameter_k:
    type: str
    default: '7e911-9ac94806add-328f7f1e35'
    training_data:
    type: url
    default: ""

    示例demo如下:

    name: example_case
    docker_env:
    args:
    cpus: 3
    image: harbor.xiaobodata.com/wai/cpu:py37

    entry_points:
    main:
    command: python train_model.py -dr={division_ratio} -td={training_data}
    parameters:
    training_data:
    type: url
    default: ""
    division_ratio:
    default: 0.7
    type: float
  2. 模型训练文件 train_model.py

    代码结构:

        ├── @click                                   <- 以click方法为例,引入模型入口参数
    ├── train() <- 编辑训练函数
    │   ├── mlflow.log_param() <- 记录模型参数
    │   ├── mlflow.log_metric() <- 记录模型指标
    │   ├── mlflow.log_artifact() <- 保存模型依赖文件
    │   └── mlflow.log_model() <- 保存模型文件
    └── eval() <- 模型测试

    模型入口传参方法:引入模型入口参数,详情了解平台训练传参

    以click方法为例:

        @click.command()
    @click.option("--parameter_i", "-pi", type=int, default='none', help="参数i")
    @click.option("--parameter_j", "-pj", type=float, default='none', help="参数j")
    @click.option("--parameter_k", "-pk", type=str, default=0.7, help="参数k")
    @click.option("--training_data", "-td", type=url, default="", help="数据集")

    log_param():在训练过程中,运行中记录单个键值的训练运行参数。键和值都是字符串。用于mlflow.log_params()一次记录多个参数。

    备注:平台训练传参的入口参数 gunicorn 与 mlflow.log_param记录参数的argprase()参数名不能为相同的。否则,平台无法记录。

        mlflow.log_param("param_i", 1)

    log_metric():在训练过程中,记录单个键值的模型预测指标。该值必须始终是一个数字。MLflow 会记住每个指标的值的历史记录。用于mlflow.log_metrics()一次记录多个指标。

        mlflow.log_metric("metric_i", 2)

    log_artifact():训练结束后,在保存模型的过程中,将本地文件保存文件目录到模型库中,记录artifact_path,用于后续的模型预测。

        mlflow.log_artifact("features.txt")                <- 保存文件
    mlflow.log_artifacts("./features/", "features") <- 保存文件夹

    log_model():保存模型文件,用于后续的模型预测。

        mlflow.pyfunc.log_model(artifact_path, code_path, conda_env, python_model, artifacts)

    参数说明:

    - artifact_path  –  Python模型保存路径。

    - code_path  – 自定义覆写的模型预测入口脚本(prediction.py)以及模型预测所依赖的文件或文件路径。

    - conda_env  – 自定义的环境脚本(conda.yaml),或者,当无特别的依赖包,可以选择None为默认Conda环境。

    - python_model  – 模型预测脚本( prediction.py )中的类函数 model_predict()。

    - artifacts  – 自定义保存的文件或者文件路径。模型预测时,python_model可以将其解析的文件作为PythonModel.load_context()和PythonModel.predict()中context参数的artifacts属性来引用。如果为None,则不会将任何文件添加到模型。

    示例demo如下:

        artifacts = {
    "file1": file1_path,
    "file2": file2_path,
    "file3": file3_path,
    }
    mlflow.pyfunc.log_model(
    artifact_path="model", <- 模型文件夹名称(自定义)
    python_model=model_predict(), <- 模型预测类函数( prediction.py)
    code_path=['prediction.py', 'dependent_file1.py', 'dependent_file2.py'], <- 模型预测文件
    artifacts=artifacts <- 依赖文件
    conda_env=None, <- 环境文件
    )

    eval():编辑完训练代码,用于本地进行模型测试。

  3. 模型预测文件 predict_model.py

    入口脚本接收提交到已部署 Web 服务的数据,将数据传递给模型并进行模型预测,并将预测数据返回。

    你需要在输入脚本中完成以下操作:

    定义 model_predict类,覆写函数 predict(context, model_input)

    predict() 函数为自定义的Python模型的预测函数,contextPythonModelContext实例,其中包含模型可用于执行推理的变量。model_input为入参变量。

    以下是自定义的predict()的示例表示形式:

    def function1(x):
    ...
    ...
    return outputs

    class model_predict(pyfunc.PythonModel):

    def load_context(self, context):
    self.file1 = context.artifacts["file1"] <- 引用依赖文件,参与模型预测
    self.file2 = context.artifacts["file2"]
    self.file3 = context.artifacts["file3"]

    def predict(self, context, inputs):
    input = inputs.values <- 模型入参
    outputs = function1(input) <- 调用自定义的预测函数function()进行模型预测
    ...
    ...
    dic = {"out_parameter_name": outputs[:, 0]} <- 转换为平台可识别DataFrame格式
    predict_value = pd.DataFrame(dic, index=range(0, len(outputs)))
    return predict_value

  4. 环境配置文件 requirements.txt

        waveletai                <- 官方提供的SDK插件,必填依赖包,本地开发时使用,平台提供的基础镜像中默认已安装
    scikit-learn <- 自定义依赖包
    scipy <- 自定义依赖包