
# 模型调试
训练完成后，可先在开发环境Notebook中创建本地模型，在开发环境Notebook调试完成后再部署到推理服务上。
![](https://support.huaweicloud.com/sdkreference-modelarts/public_sys-resources/note_3.0-zh-cn.png)
只支持使用ModelArts Notebook部署本地服务。
 #### 示例代码
在ModelArts Notebook平台，Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见[Session鉴权](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0123.html)。
1. 将自定义的推理文件和模型配置文件保存在训练生成的模型文件目录下。如训练生成的模型保存在"/home/ma-user/work/tensorflow_mlp_mnist_local_mode/train/model/"中，则推理文件"customize_service.py"和模型配置文件"config.json"也保存在该目录中。
2. 创建模型运行的conda虚拟环境。 
   ```
   from modelarts.environment import Environment
   from modelarts.environment.conda_env import CondaDependencies
   env = Environment("tensorflow_mlp_mnist")
   cd = CondaDependencies.create(pip_packages=["tensorflow==1.13.1", "Pillow>=8.0.1"],
                                 conda_packages=["python=3.6.2"])
   env.conda = cd
   ```
   
   
3. 创建本地模型。 
   ```
   from modelarts.session import Session
   from modelarts.model import Model
   session = Session()
   src_local_path = "/home/ma-user/work/tensorflow_mlp_mnist_local_mode/train/"
   model = Model(session,
                 publish=False,
                 source_location_type="LOCAL_SOURCE",         # 模型文件位置类型，
                 source_location=src_local_path + 'model',    # 模型文件位置
                 environment=env,
                 model_version='1.0.1',
                 model_type='TensorFlow',                     # 模型使用的AI框架
                 model_algorithm="image_classification",
                 model_name="tensorflow_mlp_mnist_local_infer")
   ```
   本地模型创建好后，可部署为本地服务。
   
   
4. 本地模型创建完，可以调用接口发布模型。 
   ```
   model.publish_model(obs_location=obs_location)
   ```
   指定参数"obs_location"后，会将本地的模型文件上传到该目录下。参数可省略，示例如下：
   ```
   model.publish_model()
   ```
   此时模型文件会上传到默认OBS桶以当前时间戳结尾的目录中。该目录会在命令执行后打印出来，示例如下：
   ```
   Successfully upload file /home/ma-user/work/tensorflow_mlp_mnist_local_mode/train/model to OBS modelarts-cn-north-4-08aae033/model-0107-224502
   ```
   
   
 
#### 参数说明
表1创建模型场景参数说明 
| 参数                   | 是否必选 | 参数类型           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| session              | 是    | Object         | 会话对象，初始化方法见[Session鉴权](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0123.html)。                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 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版本等。请参见[表2]                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 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路径。推理脚本必须放于模型所在路径（请参见"source_location"参数）的model目录下，名称固定为："customize_service.py"。                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| input_params         | 否    | params结构数组     | 模型推理输入参数列表，默认为空。如果已在模型配置文件中配置apis信息时，则可不填，后台自动从配置文件的apis字段中读取输入参数信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| output_params        | 否    | params结构数组     | 模型推理输出参数列表，默认为空。如果已在模型配置文件中配置apis信息时，则可不填，后台自动从配置文件的apis字段中读取输出参数信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| dependencies         | 否    | dependency结构数组 | 运行代码及模型需安装的依赖包，默认为空。如果已在模型配置文件中配置dependencies信息时，则可不填，后台自动从配置文件的dependencies字段中读取需要安装的依赖包。                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| apis                 | 否    | String         | 模型提供的推理接口列表，默认为空。如果已在模型配置文件中配置apis信息时，则可不填，后台自动从配置文件中的apis字段读取所配置的推理接口信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   
 表2Environment参数说明 
| 参数    | 是否必选 | 类型                | 说明                                                                      |
|:---|:---|:---|:---|
| name  | 是    | String            | 环境名称。                                                                   |
| conda | 否    | CondaDependencies | conda环境，具体请参见[表3]。 |
   
 表3CondaDependencies参数说明 
| 参数             | 是否必选 | 类型   | 说明                                         |
|:---|:---|:---|:---|
| channels       | 否    | List | python包的下载源。                               |
| pip_packages   | 否    | List | conda虚拟环境需要使用的python包，如tensorflow，pillow等。 |
| conda_packages | 否    | List | conda虚拟环境需要使用的conda包，如指定python版本。          |
   
表4params结构 
| 参数         | 是否必选 | 参数类型   | 描述                                                             |
|:---|:---|:---|:---|
| 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个字符，默认为空。                                           |
   
表5dependency结构 
| 参数        | 是否必选 | 参数类型        | 描述               |
|:---|:---|:---|:---|
| installer | 是    | String      | 安装方式，当前只支持"pip"。 |
| packages  | 是    | package结构数组 | 依赖包集合。           |
   
表6package结构 
| 参数              | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| package_name    | 是    | String | 依赖包名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| package_version | 否    | String | 依赖包版本。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| restraint       | 否    | String | 版本过滤条件，当且仅当package_version存在时必填。取值为： - EXACT：等于给定版本  - ATLEAST：不小于给定版本  - ATMOST：不大于给定版本   |
   
表7创建模型返回参数说明 
| 参数    | 参数类型    | 描述                     |
|:---|:---|:---|
| model | Model对象 | 模型对象，可以调用本章节模型管理的所有接口。 |
   
