
# 模型包结构介绍
创建模型时，如果是从OBS中导入元模型，则需要符合一定的模型包规范。
![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/note_3.0-zh-cn.png)
- 模型包规范适用于单模型场景，如果是多模型场景（例如含有多个模型文件）推荐使用自定义镜像方式。
- ModelArts推理平台不支持的AI引擎，推荐使用自定义镜像方式。
- 请参考[模型镜像规范](https://support.huaweicloud.com/docker-modelarts/modelarts_23_0219.html#section2)和[制作自定义镜像用于推理](https://support.huaweicloud.com/docker-modelarts/modelarts_23_0270.html)，制作自定义镜像。
- 更多的自定义脚本代码示例，请参考[自定义脚本代码示例](https://support.huaweicloud.com/usermanual-standard-modelarts/inference-modelarts-0078.html)。
 
模型包里面必须包含"model"文件夹，"model"文件夹下面放置模型文件，模型配置文件，模型推理代码文件。
- **模型文件** ：在不同模型包结构中模型文件的要求不同，具体请参见[模型包结构示例]。
- **模型配置文件** ：模型配置文件必须存在，文件名固定为"config.json"，有且只有一个，模型配置文件编写请参见[模型配置文件编写说明](https://support.huaweicloud.com/usermanual-standard-modelarts/inference-modelarts-0056.html)。
- **模型推理代码文件** ：模型推理代码文件是必选的。文件名固定为"customize_service.py"，此文件有且只能有一个，模型推理代码编写请参见[模型推理代码编写说明](https://support.huaweicloud.com/usermanual-standard-modelarts/inference-modelarts-0057.html)。
  - customize_service.py依赖的py文件可以直接放model目录下，推荐采用相对导入方式导入自定义包。
  
  - customize_service.py依赖的其他文件可以直接放model目录下，需要采用绝对路径方式访问。绝对路径获取请参考[绝对路径如何获取](https://support.huaweicloud.com/usermanual-standard-modelarts/inference-modelarts-0057.html#ZH-CN_TOPIC_0000001891635613__zh-cn_topic_0172466150_li135956421288)。
   
ModelArts针对多种引擎提供了样例及其示例代码，您可以参考样例编写您的配置文件和推理代码，详情请参见[ModelArts样例列表](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0014.html)。ModelArts也提供了常用AI引擎对应的自定义脚本示例，请参见[自定义脚本代码示例](https://support.huaweicloud.com/usermanual-standard-modelarts/inference-modelarts-0078.html)。
如果您在导入元模型过程中遇到问题，可[联系华为云技术支持](https://www.huaweicloud.com/service/contact.html)协助解决问题。
 #### 模型包结构示例
- TensorFlow模型包结构 发布该模型时只需要指定到"ocr"目录。
  ```
  OBS桶/目录名
  |── ocr
  |   ├── model 必选： 固定子目录名称，用于放置模型相关文件
  |   │   ├── <<自定义python包>>  可选：用户自有的Python包，在模型推理代码中可以直接引用
  |   │   ├── saved_model.pb 必选: protocol buffer格式文件，包含该模型的图描述
  |   │   ├── variables  对*.pb模型主文件而言必选；固定子目录名称，包含模型的权重偏差等信息
  |   │   │   ├── variables.index 必选
  |   │   │   ├── variables.data-00000-of-00001 必选
  |   │   ├──config.json 必选：模型配置文件，文件名称固定为config.json, 只允许放置一个
  |   │   ├──customize_service.py 必选：模型推理代码，文件名称固定为customize_service.py, 只允许放置一个
  customize_service.py依赖的文件可以直接放model目录下
  ```
  
- MindSpore模型包结构
  ```
  OBS桶/目录名
  |── resnet
  |   ├── model 必选： 固定子目录名称，用于放置模型相关文件
  |   │   ├── <<自定义python包>>  可选：用户自有的Python包，在模型推理代码中可以直接引用
  |   │   ├── checkpoint_lenet_1-1_1875.ckpt 必选；使用mindspore训练出来的ckpt格式/om格式的模型文件
  |   │   ├── config.json 必选：模型配置文件，文件名称固定为config.json, 只允许放置一个
  |   │   ├── customize_service.py 必选：模型推理代码，文件名称固定为customize_service.py, 只允许放置一个，customize_service.py依赖的文件可以直接放model目录下
  ```
  
  
- PyTorch模型包结构 发布该模型时只需要指定到"resnet"目录。
  ```
  OBS桶/目录名
  |── resnet
  |   ├── model  必选： 固定子目录名称，用于放置模型相关文件
  |   │  ├── <<自定义Python包>>  可选：用户自有的Python包，在模型推理代码中可以直接引用
  |   │  ├── resnet50.pth 必选，pytorch模型保存文件，保存为“state_dict”，存有权重变量等信息。
  |   │  ├──config.json 必选：模型配置文件，文件名称固定为config.json, 只允许放置一个
  |   │  ├──customize_service.py  必选：模型推理代码，文件名称固定为customize_service.py, 只允许放置一个，customize_service.py依赖的文件可以直接放model目录下
  ```
  
- Custom模型包结构，与您自定义镜像中AI引擎有关。例如自定义镜像中的AI引擎为TensorFlow，则模型包采用TensorFlow模型包结构。
 
