更新时间:2024-03-21 GMT+08:00

导入模型

导入模型功能包括:

  • 初始化已存在的模型,根据模型ID生成模型对象。
  • 创建模型。模型对象的属性,请参见查询模型详情

示例模型文件

PyTorch为例,编写模型文件。PyTorch模型包结构可参考模型包规范介绍

OBS桶/目录名
├── resnet
│   ├── model 必选:固定子目录名称,用于放置模型相关文件
│   │  ├──<<自定义Python包>>  可选:用户自有的Python包,在模型推理代码中可以直接引用
│   │  ├──mnist_mlp.pt 必选,pytorch模型保存文件,保存为“state_dict”,存有权重变量等信息。
│   │  ├──config.json 必选:模型配置文件,文件名称固定为config.json,只允许放置一个
│   │  ├──customize_service.py 必选:模型推理代码,文件名称固定为customize_service.py,只允许放置一个,customize_service.py依赖的文件可以直接放model目录下

示例代码

在ModelArts notebook平台,Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见Session鉴权

1
2
3
4
5
from modelarts.session import Session
from modelarts.model import Model
from modelarts.config.model_config import ServiceConfig, Params, Dependencies, Packages

session = Session()
  • 方式1:初始化已存在模型
    1
    model_instance = Model(session, model_id="your_model_id")
    
  • 方式2:创建模型
    • 基于预置镜像和OBS路径创建模型
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      model_location = "/your_obs_bucket/model_path"            # 修改为真实的模型文件OBS路径 
      execution_code = "/your_obs_bucket/model_path/customize_service.py"
      runtime = "python3.7"
      
      model_instance = Model(
                              session,
                              model_name="input_model_name",    # (可选)模型名称
                              model_version="1.0.0",            # (可选)模型版本
                              source_location=model_location,   # 模型文件所在的OBS路径,如:"/your_obs_bucket/model_path"
                              model_type="PyTorch",             # 模型类型
                              execution_code=execution_code,    # (可选)存放执行脚本的OBS路径,如:"/your_obs_bucket/model_path/customize_service.py"
                              runtime=runtime                  # (可选)支持的运行环境
                             )
      

      dependencies会覆盖样例中config.json的相关内容,上述无需使用dependencies,dependencies格式样例可参考下方格式定义。

      • dependencies参数组的定义格式

        SDK提供了Dependencies类对其定义,dependencies为list,list中的元组对象是Dependencies。

        定义代码如下:

        1
        2
        3
        4
        5
        6
        dependencies = []
        dependency1 = Dependencies(
              installer="pip",                     # 安装方式,目前支持pip
              packages=packages                   # 依赖包集合, 定义格式参考下文关于packages的定义
        )
        dependencies.append(dependency1)
        
      • package参数组的定义格式

        SDK提供了Packages类对其定义,packages为list,list中的元组对象是Packages。

        定义代码如下:

        1
        2
        3
        4
        5
        6
        7
        packages = []
        package1 = Packages(
             package_name="package_name",               # 包名
             package_version="version",                 # 包版本号
             restraint="EXACT"
        )  
        packages.append(package1)
        

        dependencies参数组的创建样例:

        dependencies = []
        packages = [{
            "package_name": "numpy",
            "package_version": "1.15.0",
            "restraint": "EXACT"
            }, {
                "package_name": "h5py",
                "package_version": "2.8.0",
                "restraint": "EXACT"
            }]
        dependency = Dependencies(installer="pip", packages=packages)
        dependencies.append(dependency)
    • 基于自定义镜像创建模型

      适用于推理服务的脚本已经内置在自定义镜像中,镜像启动时会自动拉起服务的场景。

      from modelarts.session import Session
      from modelarts.model import Model
      
      session = Session()
      image_path = "custom_image_path"       # 自定义镜像的swr路径
      model_instance = Model(
                              session, 
                              model_name="your_model_name",               # 模型名称
                              model_version="0.1.0",                      # 模型版本
                              source_location="image_path",                 # 模型文件路径
                              model_type="Image"                         # 模型类型
                            )

参数说明

表1 初始化模型场景参数说明

参数

是否必选

参数类型

描述

session

Object

会话对象,初始化方法参考Session鉴权

model_id

String

模型ID。

表2 创建模型场景参数说明

参数

是否必选

参数类型

描述

session

Object

会话对象,初始化方法见Session鉴权

model_name

String

模型名称,名称只能字母,中文开头,为字母、数字、下划线、中文或者中划线组成的合法字符,支持1-64个字符。若未输入该参数,系统会自动生成模型name。

model_version

String

模型版本,格式需为“数值.数值.数值”,其中数值为1-2位正整数。版本不可以出现以0开头的版本号形式,如“01.01.01”等。

publish

Bool

是否发布模型。可选值:

  • True: 发布模型。(默认值)
  • False: 不发布模型,创建本地模型,可用来调试相关代码。

source_location_type

String

模型位置类型。可选值:

  • OBS_SOURCE:source_location为OBS路径。(默认值)
  • LOCAL_SOURCE:source_location为本地路径。

source_location

String

模型文件所在路径,指定到模型文件的父目录。

  • 当source_location_type为OBS_SOURCE时,模型文件所在路径为OBS路径,格式为“/obs_bucketname/.../model_file_parent_dir/”
  • 当source_location_type为LOCAL_SOURCE时,模型文件所在路径为本地路径,格式为“/local_path/.../model_file_parent_dir/”

environment

Environment实例

描述模型正常运行需要的环境,如使用的python版本、tensorflow版本等。

Environment实例的示例请参见示例代码

source_job_id

String

来源训练作业的ID,模型是从训练作业产生的可填写,用于溯源;如模型是从第三方元模型导入,则为空,默认值为空。

source_job_version

String

来源训练作业的版本,模型是从训练作业产生的可填写,用于溯源;如模型是从第三方元模型导入,则为空,默认值为空。

source_type

String

模型来源的类型,当前仅可取值auto,用于区分通过自动学习部署过来的模型(不提供模型下载功能);用户通过训练作业部署的模型不设置此值。默认值为空。

model_type

String

模型类型,取值为:TensorFlow/MXNet/Spark_MLlib/Scikit_Learn/XGBoost/MindSpore/Image/PyTorch。

model_algorithm

String

模型算法,表示模型的算法实现类型,如果已在模型配置文件中配置,则可不填。如:predict_analysis、object_detection 、image_classification。

description

String

模型描述信息,不超过100个字符,且不能包含特殊字符!<>=&’”。

execution_code

String

存放执行脚本的OBS路径,若模型没有输出“customize_service.py”则需要通过该参数指定。推理脚本必须放于模型所在路径(请参见“source_location”参数)的model目录下,名称固定为:“customize_service.py”

runtime

String

支持的运行环境。如果使用了model_type参数,则需要填该参数。不同引擎对应的runtime可参见支持的常用引擎及其Runtime

input_params

params结构数组

模型推理输入参数列表,默认为空。如果已在模型配置文件中配置apis信息时,则可不填,后台自动从配置文件的apis字段中读取输入参数信息。

output_params

params结构数组

模型推理输出参数列表,默认为空。如果已在模型配置文件中配置apis信息时,则可不填,后台自动从配置文件的apis字段中读取输出参数信息。

dependencies

dependency结构数组

运行代码及模型需安装的依赖包,默认为空。如果已在模型配置文件中配置dependencies信息时,则可不填,后台自动从配置文件的dependencies字段中读取需要安装的依赖包。

apis

String

模型提供的推理接口列表,默认为空。如果已在模型配置文件中配置apis信息时,则可不填,后台自动从配置文件中的apis字段读取所配置的推理接口信息。

表3 params结构

参数

是否必选

参数类型

描述

url

String

模型推理接口的请求路径。

param_name

String

参数名,不超过64个字符。

param_type

String

JSON Schema基本参数类型,有string、object、array、boolean、number、integer。

min

Double

当param_type为int或float时,可选填,默认为空。

max

Double

当param_type为int或float时,可选填,默认为空。

param_desc

String

参数描述,不超过100个字符,默认为空。

表4 dependency结构

参数

是否必选

参数类型

描述

installer

String

安装方式,当前只支持“pip”

packages

package结构数组

依赖包集合。

表5 package结构

参数

是否必选

参数类型

描述

package_name

String

依赖包名称。

package_version

String

依赖包版本。

restraint

String

版本过滤条件,当且仅当package_version存在时必填。取值为:

  • EXACT:等于给定版本
  • ATLEAST:不小于给定版本
  • ATMOST:不大于给定版本
表6 create_model返回参数说明

参数

是否必选

参数类型

描述

model_instance

Model对象

模型对象,可以调用本章节模型管理的所有接口。

给出MXNet实现手写数字识别项目中模型创建实例:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from modelarts.session import Session
from modelarts.model import Model

session = Session()
model_instance = Model(session,
                       model_name="digit_recognition",
                       model_version="1.0.0",
                       source_location=model_location,
                       model_type="MXNet",
                       model_algorithm="image_classification"
                       )