
# 训练作业的自定义镜像制作流程
如果您已经在本地完成模型开发或训练脚本的开发，且您使用的AI引擎是ModelArts不支持的框架。您可以制作自定义镜像，并上传至SWR服务。您可以在ModelArts使用此自定义镜像创建训练作业，使用ModelArts提供的资源训练模型。
![](https://support.huaweicloud.com/docker-modelarts/public_sys-resources/note_3.0-zh-cn.png)
**基础镜像：**镜像制作的一个基本概念，您可以在基础镜像上构建业务镜像。基础镜像可以是ModelArts预置镜像或统一镜像。
#### 构建自定义训练镜像
图1训练作业的自定义镜像制作流程   
![](https://support.huaweicloud.com/docker-modelarts/figure/zh-cn_image_0000002586931075.png "点击放大")
**场景一：**预置镜像满足ModelArts训练平台约束，但不满足代码依赖的要求，需要额外安装软件包。
具体案例参考[使用预置镜像制作自定义镜像用于训练模型](https://support.huaweicloud.com/docker-modelarts/docker-modelarts_0118.html)。
**场景二：**已有本地镜像满足代码依赖的要求，但是不满足ModelArts训练平台约束，需要适配。
具体案例参考[已有镜像迁移至ModelArts用于训练模型](https://support.huaweicloud.com/docker-modelarts/docker-modelarts_0029.html)。
**场景三：** 当前无可使用的镜像，需要从0制作镜像（既需要安装代码依赖，又需要制作出的镜像满足ModelArts平台约束）。具体案例参考：
[从0制作自定义镜像用于创建训练作业（Pytorch+Ascend）](https://support.huaweicloud.com/docker-modelarts/docker-modelarts_6031.html)
[从0制作自定义镜像用于创建训练作业（PyTorch+CPU）](https://support.huaweicloud.com/docker-modelarts/docker-modelarts-0097.html)
[从0制作自定义镜像用于创建训练作业（MPI+CPU）](https://support.huaweicloud.com/docker-modelarts/docker-modelarts-0105.html)
[从0制作自定义镜像用于创建训练作业（Tensorflow+GPU）](https://support.huaweicloud.com/docker-modelarts/docker-modelarts-0145.html)
#### 训练框架的自定义镜像约束
- 镜像打包时需注意镜像版本与环境中的Docker版本的兼容性。推荐自定义镜像使用ubuntu-18.04的操作系统，避免出现版本不兼容的问题。
- 自定义镜像的大小推荐15GB以内，最大不要超过资源池的容器引擎空间大小的一半。镜像过大会直接影响训练作业的启动时间。 ModelArts公共资源池的容器引擎空间为50G，专属资源池的容器引擎空间的默认为50G，支持在创建专属资源池时自定义容器引擎空间。
  
- 自定义镜像的默认用户必须为"uid"为"1000"的用户。
- 自定义镜像中不能安装GPU或Ascend驱动程序。当用户选择GPU资源运行训练作业时，ModelArts后台自动将GPU驱动程序放置在训练环境中的/usr/local/nvidia目录；当用户选择Ascend资源运行训练作业时，ModelArts后台自动将Ascend驱动程序放置在/usr/local/Ascend/driver目录。
- X86 CPU架构和ARM CPU架构的自定义镜像分别只能运行于对应CPU架构的规格中。
  执行如下命令，查看自定义镜像的CPU架构。
  ```
  docker inspect {自定义镜像地址} | grep Architecture
  ```
  ARM CPU架构的自定义镜像，上述命令回显如下。
  ```
  "Architecture": "arm64"
  ```
  - 规格中带有ARM字样的显示，为ARM CPU架构。
  
  - 规格中未带有ARM字样的显示，为X86 CPU架构。
    
- ModelArts后台暂不支持下载开源安装包，建议用户在自定义镜像中安装训练所需的依赖包。
- 自定义镜像需上传至容器镜像服务（SWR）才能在ModelArts上用于训练。
 
