- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
ModelArts用户指南(Standard)
- ModelArts Standard使用流程
- ModelArts Standard准备工作
- ModelArts Standard资源管理
- 使用自动学习实现零代码AI开发
- 使用Workflow实现低代码AI开发
- 使用Notebook进行AI开发调试
- 数据准备与处理
- 使用ModelArts Standard训练模型
- 使用ModelArts Standard部署模型并推理预测
- 制作自定义镜像用于ModelArts Standard
- ModelArts Standard资源监控
- 使用CTS审计ModelArts服务
- ModelArts用户指南(Lite Server)
- ModelArts用户指南(Lite Cluster)
- 最佳实践
-
API参考
- 使用前必读
- API概览
- 如何调用API
- 开发环境管理
- 训练管理
- AI应用管理
- APP认证管理
- 服务管理
- 资源管理
- DevServer管理
- 授权管理
- 配额管理
- 资源标签管理
- 节点池管理
- 应用示例
- 权限策略和授权项
- 公共参数
-
历史API
-
数据管理(旧版)
- 查询数据集列表
- 创建数据集
- 查询数据集详情
- 更新数据集
- 删除数据集
- 查询数据集的统计信息
- 查询数据集监控数据
- 查询数据集的版本列表
- 创建数据集标注版本
- 查询数据集版本详情
- 删除数据集标注版本
- 查询样本列表
- 批量添加样本
- 批量删除样本
- 查询单个样本信息
- 获取样本搜索条件
- 分页查询团队标注任务下的样本列表
- 查询团队标注的样本信息
- 查询数据集标签列表
- 创建数据集标签
- 批量修改标签
- 批量删除标签
- 按标签名称更新单个标签
- 按标签名称删除标签及仅包含此标签的文件
- 批量更新样本标签
- 查询数据集的团队标注任务列表
- 创建团队标注任务
- 查询团队标注任务详情
- 启动团队标注任务
- 更新团队标注任务
- 删除团队标注任务
- 创建团队标注验收任务
- 查询团队标注验收任务报告
- 更新团队标注验收任务状态
- 查询团队标注任务统计信息
- 查询团队标注任务成员的进度信息
- 团队成员查询团队标注任务列表
- 提交验收任务的样本评审意见
- 团队标注审核
- 批量更新团队标注样本的标签
- 查询标注团队列表
- 创建标注团队
- 查询标注团队详情
- 更新标注团队
- 删除标注团队
- 向标注成员发送邮件
- 查询所有团队的标注成员列表
- 查询标注团队的成员列表
- 创建标注团队的成员
- 批量删除标注团队成员
- 查询标注团队成员详情
- 更新标注团队成员
- 删除标注团队成员
- 查询数据集导入任务列表
- 创建导入任务
- 查询数据集导入任务的详情
- 查询数据集导出任务列表
- 创建数据集导出任务
- 查询数据集导出任务的状态
- 同步数据集
- 查询数据集同步任务的状态
- 查询智能标注的样本列表
- 查询单个智能标注样本的信息
- 分页查询智能任务列表
- 启动智能任务
- 获取智能任务的信息
- 停止智能任务
- 查询处理任务列表
- 创建处理任务
- 查询处理任务详情
- 更新处理任务
- 删除处理任务
- 开发环境(旧版)
- 训练管理(旧版)
-
数据管理(旧版)
- SDK参考
-
常见问题
-
一般性问题
- 什么是ModelArts
- ModelArts与其他服务的关系
- ModelArts与DLS服务的区别?
- 如何购买或开通ModelArts?
- 如何获取访问密钥?
- 如何上传数据至OBS?
- 提示“上传的AK/SK不可用”,如何解决?
- 使用ModelArts时提示“权限不足”,如何解决?
- 如何用ModelArts训练基于结构化数据的模型?
- 什么是区域、可用区?
- 在ModelArts中如何查看OBS目录下的所有文件?
- ModelArts数据集保存到容器的哪里?
- ModelArts支持哪些AI框架?
- ModelArts训练和推理分别对应哪些功能?
- 如何查看账号ID和IAM用户ID
- ModelArts AI识别可以单独针对一个标签识别吗?
- ModelArts如何通过标签实现资源分组管理
- 为什么资源充足还是在排队?
- 计费相关
- Standard自动学习
-
Standard数据管理
- 添加图片时,图片大小有限制吗?
- 数据集图片无法显示,如何解决?
- 如何将多个物体检测的数据集合并成一个数据集?
- 导入数据集失败
- 表格类型的数据集如何标注
- 本地标注的数据,导入ModelArts需要做什么?
- 为什么通过Manifest文件导入失败?
- 标注结果存储在哪里?
- 如何将标注结果下载至本地?
- 团队标注时,为什么团队成员收不到邮件?
- 可以两个账号同时进行一个数据集的标注吗?
- 团队标注的数据分配机制是什么?
- 标注过程中,已经分配标注任务后,能否将一个labeler从标注任务中删除?删除后对标注结果有什么影响?如果不能删除labeler,能否删除将他的标注结果从整体标注结果中分离出来?
- 数据标注中,难例集如何定义?什么情况下会被识别为难例?
- 物体检测标注时,支持叠加框吗?
- 如何将两个数据集合并?
- 智能标注是否支持多边形标注?
- 团队标注的完成验收的各选项表示什么意思?
- 同一个账户,图片展示角度不同是为什么?
- 智能标注完成后新加入数据是否需要重新训练?
- 为什么在ModelArts数据标注平台标注数据提示标注保存失败?
- 标注多个标签,是否可针对一个标签进行识别?
- 使用数据处理的数据扩增功能后,新增图片没有自动标注
- 视频数据集无法显示和播放视频
- 使用样例的有标签的数据或者自己通过其他方式打好标签的数据放到OBS桶里,在modelarts中同步数据源以后看不到已标注,全部显示为未标注
- 如何使用soft NMS方法降低目标框堆叠度
- ModelArts标注数据丢失,看不到标注过的图片的标签
- 如何将某些图片划分到验证集或者训练集?
- 物体检测标注时除了位置、物体名字,是否可以设置其他标签,比如是否遮挡、亮度等?
- ModelArts数据管理支持哪些格式?
- 旧版数据集中的数据是否会被清理?
- 数据集版本管理找不到新建的版本
- 如何查看数据集大小
- 如何查看新版数据集的标注详情
- 标注数据如何导出
- 找不到新创建的数据集
- 数据集配额不正确
- 数据集如何切分
- 如何删除数据集图片
- 从AI Gallery下载到桶里的数据集,再在ModelArts里创建数据集,显示样本数为0
-
Standard Notebook
- 规格限制
- 文件上传下载
- 数据存储
- 环境配置相关
- Notebook实例常见错误
- 代码运行常见错误
-
PyCharm Toolkit使用
- 安装ToolKit工具时出现错误,如何处理?
- PyCharm ToolKit工具中Edit Credential时,出现错误
- 为什么无法启动训练?
- 提交训练作业时,出现xxx isn't existed in train_version错误
- 提交训练作业报错“Invalid OBS path”
- 使用PyCharm Toolkit提交训练作业报错NoSuchKey
- 部署上线时,出现错误
- 如何查看PyCharm ToolKit的错误日志
- 如何通过PyCharm ToolKit创建多个作业同时训练?
- 使用PyCharm ToolKit ,提示Error occurs when accessing to OBS
- VS Code使用技巧
-
VS Code连接开发环境失败常见问题
- 在ModelArts控制台界面上单击VS Code接入并在新界面单击打开,未弹出VS Code窗口
- 在ModelArts控制台界面上单击VS Code接入并在新界面单击打开,VS Code打开后未进行远程连接
- VS Code连接开发环境失败时的排查方法
- 远程连接出现弹窗报错:Could not establish connection to xxx
- 连接远端开发环境时,一直处于"Setting up SSH Host xxx: Downloading VS Code Server locally"超过10分钟以上,如何解决?
- 连接远端开发环境时,一直处于"Setting up SSH Host xxx: Copying VS Code Server to host with scp"超过10分钟以上,如何解决?
- 连接远端开发环境时,一直处于"ModelArts Remote Connect: Connecting to instance xxx..."超过10分钟以上,如何解决?
- 远程连接处于retry状态如何解决?
- 报错“The VS Code Server failed to start”如何解决?
- 报错“Permissions for 'x:/xxx.pem' are too open”如何解决?
- 报错“Bad owner or permissions on C:\Users\Administrator/.ssh/config”或“Connection permission denied (publickey)”如何解决?
- 报错“ssh: connect to host xxx.pem port xxxxx: Connection refused”如何解决?
- 报错"ssh: connect to host ModelArts-xxx port xxx: Connection timed out"如何解决?
- 报错“Load key "C:/Users/xx/test1/xxx.pem": invalid format”如何解决?
- 报错“An SSH installation couldn't be found”或者“Could not establish connection to instance xxx: 'ssh' ...”如何解决?
- 报错“no such identity: C:/Users/xx /test.pem: No such file or directory”如何解决?
- 报错“Host key verification failed.'或者'Port forwarding is disabled.”如何解决?
- 报错“Failed to install the VS Code Server.”或“tar: Error is not recoverable: exitng now.”如何解决?
- VS Code连接远端Notebook时报错“XHR failed”
- VS Code连接后长时间未操作,连接自动断开
- VS Code自动升级后,导致远程连接时间过长
- 使用SSH连接,报错“Connection reset”如何解决?
- 使用MobaXterm工具SSH连接Notebook后,经常断开或卡顿,如何解决?
- VS Code连接开发环境时报错Missing GLIBC,Missing required dependencies
- 使用VSCode-huawei,报错:卸载了‘ms-vscode-remote.remot-sdh’,它被报告存在问题
- 在Notebook中使用自定义镜像常见问题
-
更多功能咨询
- 在Notebook中,如何使用昇腾多卡进行调试?
- 使用Notebook不同的资源规格,为什么训练速度差不多?
- 使用MoXing时,如何进行增量训练?
- 在Notebook中如何查看GPU使用情况
- 如何在代码中打印GPU使用信息
- Ascend上如何查看实时性能指标?
- 不启用自动停止,系统会自动停掉Notebook实例吗?会删除Notebook实例吗?
- JupyterLab目录的文件、Terminal的文件和OBS的文件之间的关系
- ModelArts中创建的数据集,如何在Notebook中使用
- pip介绍及常用命令
- 开发环境中不同Notebook规格资源“/cache”目录的大小
- 开发环境如何实现IAM用户隔离?
- 资源超分对Notebook实例有什么影响?
- 在Notebook中使用tensorboard命令打开日志文件报错Permission denied
-
Standard训练作业
-
功能咨询
- 本地导入的算法有哪些格式要求?
- 欠拟合的解决方法有哪些?
- 旧版训练迁移至新版训练需要注意哪些问题?
- ModelArts训练好后的模型如何获取?
- AI引擎Scikit_Learn0.18.1的运行环境怎么设置?
- TPE算法优化的超参数必须是分类特征(categorical features)吗
- 模型可视化作业中各参数的意义?
- 如何在ModelArts上获得RANK_TABLE_FILE进行分布式训练?
- 如何查询自定义镜像的cuda和cudnn版本?
- Moxing安装文件如何获取?
- 多节点训练TensorFlow框架ps节点作为server会一直挂着,ModelArts是怎么判定训练任务结束?如何知道是哪个节点是worker呢?
- 训练作业的自定义镜像如何安装Moxing?
- 子用户使用专属资源池创建训练作业无法选择已有的SFS Turbo
- 训练过程读取数据
- 编写训练代码
- 创建训练作业
- 管理训练作业版本
- 查看作业详情
-
功能咨询
- Standard推理部署
- Standard资源池
- API/SDK
-
一般性问题
-
故障排除
- 通用问题
- 自动学习
-
开发环境
- 环境配置故障
- 实例故障
- 代码运行故障
- JupyterLab插件故障
-
VS Code连接开发环境失败故障处理
- 在ModelArts控制台界面上单击VS Code接入并在新界面单击打开,未弹出VS Code窗口
- 在ModelArts控制台界面上单击VS Code接入并在新界面单击打开,VS Code打开后未进行远程连接
- VS Code连接开发环境失败时的排查方法
- 远程连接出现弹窗报错:Could not establish connection to xxx
- 连接远端开发环境时,一直处于"Setting up SSH Host xxx: Downloading VS Code Server locally"超过10分钟以上,如何解决?
- 连接远端开发环境时,一直处于"Setting up SSH Host xxx: Copying VS Code Server to host with scp"超过10分钟以上,如何解决?
- 远程连接处于retry状态如何解决?
- 报错“The VS Code Server failed to start”如何解决?
- 报错“Permissions for 'x:/xxx.pem' are too open”如何解决?
- 报错“Bad owner or permissions on C:\Users\Administrator/.ssh/config”如何解决?
- 报错“Connection permission denied (publickey)”如何解决
- 报错“ssh: connect to host xxx.pem port xxxxx: Connection refused”如何解决?
- 报错"ssh: connect to host ModelArts-xxx port xxx: Connection timed out"如何解决?
- 报错“Load key "C:/Users/xx/test1/xxx.pem": invalid format”如何解决?
- 报错“An SSH installation couldn't be found”或者“Could not establish connection to instance xxx: 'ssh' ...”如何解决?
- 报错“no such identity: C:/Users/xx /test.pem: No such file or directory”如何解决?
- 报错“Host key verification failed.'或者'Port forwarding is disabled.”如何解决?
- 报错“Failed to install the VS Code Server.”或“tar: Error is not recoverable: exiting now.”如何解决?
- VS Code连接远端Notebook时报错“XHR failed”
- VS Code连接后长时间未操作,连接自动断开
- VS Code自动升级后,导致远程连接时间过长
- 使用SSH连接,报错“Connection reset”如何解决?
- 使用MobaXterm工具SSH连接Notebook后,经常断开或卡顿,如何解决?
- VS Code连接开发环境时报错Missing GLIBC,Missing required dependencies
- 使用VSCode-huawei,报错:卸载了‘ms-vscode-remote.remot-sdh’,它被报告存在问题
- 使用VS Code连接实例时,发现VS Code端的实例目录和云上目录不匹配
- VSCode远程连接时卡顿,或Python调试插件无法使用如何处理?
-
自定义镜像故障
- Notebook自定义镜像故障基础排查
- 镜像保存时报错“there are processes in 'D' status, please check process status using 'ps -aux' and kill all the 'D' status processes”或“Buildimge,False,Error response from daemon,Cannot pause container xxx”如何解决?
- 镜像保存时报错“container size %dG is greater than threshold %dG”如何解决?
- 保存镜像时报错“too many layers in your image”如何解决?
- 镜像保存时报错“The container size (xG) is greater than the threshold (25G)”如何解决?
- 镜像保存时报错“BuildImage,True,Commit successfully|PushImage,False,Task is running.”
- 使用自定义镜像创建Notebook后打开没有kernel
- 用户自定义镜像自建的conda环境会查到一些额外的包,影响用户程序,如何解决?
- 用户使用ma-cli制作自定义镜像失败,报错文件不存在(not found)
- 用户使用torch报错Unexpected error from cudaGetDeviceCount
- 其他故障
-
训练作业
- OBS操作相关故障
-
云上迁移适配故障
- 无法导入模块
- 训练作业日志中提示“No module named .*”
- 如何安装第三方包,安装报错的处理方法
- 下载代码目录失败
- 训练作业日志中提示“No such file or directory”
- 训练过程中无法找到so文件
- ModelArts训练作业无法解析参数,日志报错
- 训练输出路径被其他作业使用
- PyTorch1.0引擎提示“RuntimeError: std:exception”
- MindSpore日志提示“ retCode=0x91, [the model stream execute failed]”
- 使用moxing适配OBS路径,pandas读取文件报错
- 日志提示“Please upgrade numpy to >= xxx to use this pandas version”
- 重装的包与镜像装CUDA版本不匹配
- 创建训练作业提示错误码ModelArts.2763
- 训练作业日志中提示 “AttributeError: module '***' has no attribute '***'”
- 系统容器异常退出
- 硬盘限制故障
- 外网访问限制
- 权限问题
- GPU相关问题
-
业务代码问题
- 日志提示“pandas.errors.ParserError: Error tokenizing data. C error: Expected .* fields”
- 日志提示“max_pool2d_with_indices_out_cuda_frame failed with error code 0”
- 训练作业失败,返回错误码139
- 训练作业失败,如何使用开发环境调试训练代码?
- 日志提示“ '(slice(0, 13184, None), slice(None, None, None))' is an invalid key”
- 日志报错“DataFrame.dtypes for data must be int, float or bool”
- 日志提示“CUDNN_STATUS_NOT_SUPPORTED. ”
- 日志提示“Out of bounds nanosecond timestamp”
- 日志提示“Unexpected keyword argument passed to optimizer”
- 日志提示“no socket interface found”
- 日志提示“Runtimeerror: Dataloader worker (pid 46212 ) is killed by signal: Killed BP”
- 日志提示“AttributeError: 'NoneType' object has no attribute 'dtype'”
- 日志提示“No module name 'unidecode'”
- 分布式Tensorflow无法使用“tf.variable”
- MXNet创建kvstore时程序被阻塞,无报错
- 日志出现ECC错误,导致训练作业失败
- 超过最大递归深度导致训练作业失败
- 使用预置算法训练时,训练失败,报“bndbox”错误
- 训练作业进程异常退出
- 训练作业进程被kill
- 训练作业运行失败
- 专属资源池创建训练作业
- 训练作业性能问题
-
推理部署
-
模型管理
- 创建模型失败,如何定位和处理问题?
- 导入模型提示该账号受限或者没有操作权限
- 用户创建模型时构建镜像或导入文件失败
- 创建模型时,OBS文件目录对应镜像里面的目录结构是什么样的?
- 通过OBS导入模型时,如何编写打印日志代码才能在ModelArts日志查询界面看到日志
- 通过OBS创建模型时,构建日志中提示pip下载包失败
- 通过自定义镜像创建模型失败
- 导入模型后部署服务,提示磁盘不足
- 创建模型成功后,部署服务报错,如何排查代码问题
- 自定义镜像导入配置运行时依赖无效
- 通过API接口查询模型详情,model_name返回值出现乱码
- 导入模型提示模型或镜像大小超过限制
- 导入模型提示单个模型文件超过5G限制
- 创建模型失败,提示模型镜像构建任务超时,没有构建日志
- 服务部署
- 服务预测
-
模型管理
- MoXing
- API/SDK
- 资源池
- 视频帮助
- 通用参考
链接复制成功!
从0制作自定义镜像用于创建训练作业(Pytorch+Ascend)
本章节介绍如何从0到1制作镜像,并使用该镜像在ModelArts平台上进行训练。镜像中使用的AI引擎是PyTorch,训练使用的资源是专属资源池的Ascend芯片。
准备工作
准备一套可以连接外部网络,装有Linux系统并安装18.09.7及以上版本docker的虚拟机或物理机用作镜像构建节点,以下称“构建节点”。
可以通过执行docker pull、apt-get update/upgrade和pip install命令判断是否可正常访问外部可用的开源软件仓库,若可以正常访问表示环境已连接外部网络。
- 上述的虚拟机或物理机需要为arm64架构。
- 建议构建节点安装的Linux系统版本为Ubuntu 18.04。
- 本指导使用/opt目录作为构建任务承载目录,请确保该目录下可用存储空间大于30GB。
- Docker的安装可以参考官方文档:Install Docker Engine on Ubuntu。MiniConda与tflite安装包为第三方安装包,ModelArts不对其安全相关问题进行负责,如用户有安全方面的需求,可以对该安装包进行加固后发布成同样名称的文件上传到构建节点。
制作自定义镜像
- 确认Docker Engine版本。执行如下命令。
docker version | grep -A 1 Engine
命令回显如下。Engine: Version: 18.09.0
说明:
推荐使用大于等于该版本的Docker Engine来制作自定义镜像。
- 准备名为context的文件夹。
mkdir -p context
- 准备可用的pip源文件pip.conf 。本示例使用华为开源镜像站提供的pip源,其pip.conf文件内容如下。
[global] index-url = https://repo.huaweicloud.com/repository/pypi/simple trusted-host = repo.huaweicloud.com timeout = 120
- 准备可用的apt源文件Ubuntu-Ports-bionic.list。本示例使用华为开源镜像站提供的apt源,执行如下命令获取apt源文件。
wget -O Ubuntu-Ports-bionic.list --no-check-certificate https://repo.huaweicloud.com/repository/conf/Ubuntu-Ports-bionic.list
- 下载Ascend-cann-nnae_7.0.0_linux-aarch64.run与torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl以及torch_npu-2.1.0.post7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl安装文件。
- 下载Ascend-cann-nnae_7.0.0_linux-aarch64.run文件:请根据您的用户类型打开下方对应的链接。版本过滤选择CANN7,筛选后版本单击CANN7.0.0链接,然后页面中找到Ascend-cann-nnae_7.0.0_linux-aarch64.run并下载。
- 下载torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl文件:请单击下载地址下载。
- 下载torch_npu-2.1.0.post7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl文件:请单击下载地址下载。
说明:
ModelArts当前仅支持CANN商用版本,不支持社区版。
- 下载Miniconda3安装文件。
使用地址下载地址,下载Miniconda3-py39_24.5.0-0安装文件(对应python 3.9)。
- 将上述pip源文件、*.list文件、*.run文件、 *.whl文件、Miniconda3安装文件放置在context文件夹内,context文件夹内容如下。
context ├── Ascend-cann-nnae_7.0.0_linux-aarch64.run ├── torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl ├── Miniconda3-py39_24.5.0-0-Linux-aarch64.sh ├── torch_npu-2.1.0.post7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl ├── pip.conf └── Ubuntu-Ports-bionic.list
- 编写容器镜像Dockerfile文件。
在context文件夹内新建名为Dockerfile的空文件,并将下述内容写入其中。
# 容器镜像构建主机需要连通公网 FROM ubuntu:18.04 AS builder # 基础容器镜像的默认用户已经是 root # USER root # 安装 OS 依赖 COPY Ubuntu-Ports-bionic.list /tmp RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ mv /tmp/Ubuntu-Ports-bionic.list /etc/apt/sources.list && \ echo > /etc/apt/apt.conf.d/00skip-verify-peer.conf "Acquire { https::Verify-Peer false }" && \ apt-get update && \ apt-get install -y \ # utils ca-certificates vim curl \ # CANN 7.0.0 gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev \ # MindSpore 2.2.0 libgmp-dev && \ apt-get clean && \ mv /etc/apt/sources.list.bak /etc/apt/sources.list && \ # 修改 CANN 7.0.0 安装目录的父目录权限,使得 ma-user 可以写入 chmod o+w /usr/local RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user # 设置容器镜像默认用户与工作目录 USER ma-user WORKDIR /home/ma-user # 使用开源镜像站提供的 pypi 配置 RUN mkdir -p /home/ma-user/.pip/ COPY --chown=ma-user:100 pip.conf /home/ma-user/.pip/pip.conf # 复制待安装文件到基础容器镜像中的 /tmp 目录 COPY --chown=ma-user:100 Miniconda3-py39_24.5.0-0-Linux-aarch64.sh /tmp # https://conda.io/projects/conda/en/latest/user-guide/install/linux.html#installing-on-linux # 安装 Miniconda3 到基础容器镜像的 /home/ma-user/miniconda3 目录中 RUN bash /tmp/Miniconda3-py39_24.5.0-0-Linux-aarch64.sh -b -p /home/ma-user/miniconda3 ENV PATH=$PATH:/home/ma-user/miniconda3/bin # 安装 CANN 7.0.0 Python Package 依赖 RUN pip install numpy~=1.19.2 decorator~=4.4.0 sympy~=1.5.1 cffi~=1.12.3 protobuf~=3.13.0 \ attrs pyyaml pathlib2 scipy requests psutil absl-py # 安装 CANN 7.0.0 至 /usr/local/Ascend 目录 COPY --chown=ma-user:100 Ascend-cann-nnae_7.0.0_linux-aarch64.run /tmp RUN chmod +x /tmp/Ascend-cann-nnae_7.0.0_linux-aarch64.run && \ echo Y|/tmp/Ascend-cann-nnae_7.0.0_linux-aarch64.run --install --install-path=/usr/local/Ascend # 安装 Pytorch 2.1.0 COPY --chown=ma-user:100 torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl /tmp RUN chmod +x /tmp/torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl && \ pip install /tmp/torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl # 安装 touch-npu COPY --chown=ma-user:100 torch_npu-2.1.0.post7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl /tmp RUN chmod +x /tmp/torch_npu-2.1.0.post7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl && \ pip install /tmp/torch_npu-2.1.0.post7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl # 构建最终容器镜像 FROM ubuntu:18.04 # 安装 OS 依赖 COPY Ubuntu-Ports-bionic.list /tmp RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ mv /tmp/Ubuntu-Ports-bionic.list /etc/apt/sources.list && \ echo > /etc/apt/apt.conf.d/00skip-verify-peer.conf "Acquire { https::Verify-Peer false }" && \ apt-get update && \ apt-get install -y \ # utils ca-certificates vim curl \ # CANN 7.0.RC1 gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev \ # MindSpore 2.2.0 libgmp-dev && \ apt-get clean && \ mv /etc/apt/sources.list.bak /etc/apt/sources.list RUN useradd -m -d /home/ma-user -s /bin/bash -g 100 -u 1000 ma-user # 从上述 builder stage 中复制目录到当前容器镜像的同名目录 COPY --chown=ma-user:100 --from=builder /home/ma-user/miniconda3 /home/ma-user/miniconda3 COPY --chown=ma-user:100 --from=builder /home/ma-user/Ascend /home/ma-user/Ascend COPY --chown=ma-user:100 --from=builder /home/ma-user/var /home/ma-user/var COPY --chown=ma-user:100 --from=builder /usr/local/Ascend /usr/local/Ascend # 设置容器镜像预置环境变量 # 请务必设置 CANN 相关环境变量 # 请务必设置 Ascend Driver 相关环境变量 # 请务必设置 PYTHONUNBUFFERED=1, 以免日志丢失 ENV PATH=$PATH:/usr/local/Ascend/nnae/latest/bin:/usr/local/Ascend/nnae/latest/compiler/ccec_compiler/bin:/home/ma-user/miniconda3/bin \ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/nnae/latest/lib64:/usr/local/Ascend/nnae/latest/lib64/plugin/opskernel:/usr/local/Ascend/nnae/latest/lib64/plugin/nnengine \ PYTHONPATH=$PYTHONPATH:/usr/local/Ascend/nnae/latest/python/site-packages:/usr/local/Ascend/nnae/latest/opp/op_impl/built-in/ai_core/tbe \ ASCEND_AICPU_PATH=$ASCEND_AICPU_PATH:/usr/local/Ascend/nnae/latest \ ASCEND_OPP_PATH=$ASCEND_OPP_PATH:/usr/local/Ascend/nnae/latest/opp \ ASCEND_HOME_PATH=$ASCEND_HOME_PATH:/usr/local/Ascend/nnae/latest \ PYTHONUNBUFFERED=1 # 设置容器镜像默认用户与工作目录 USER ma-user WORKDIR /home/ma-user
关于Dockerfile文件编写的更多指导内容参见Docker官方文档。
- 确认已创建完成Dockerfile文件。此时context文件夹内容如下。
context ├── Ascend-cann-nnae_7.0.0_linux-aarch64.run ├── Dockerfile ├── torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl ├── torch_npu-2.1.0.post7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl ├── Miniconda3-py39_24.5.0-0-Linux-aarch64.sh ├── pip.conf └── Ubuntu-Ports-bionic.list
- 构建容器镜像。在Dockerfile文件所在的目录执行如下命令构建容器镜像。
docker build . -t pytorch:2.1.0-cann7.0.0
说明:
如果构建中访问https://registry-1.docker.io/v2/ 出现connection refused或者Client.Timeout exceeded问题,需要配置下docker代理。
vi /etc/docker/daemon.json
文件中写入以下内容,并保存文件
{
"registry-mirrors":[
"https://docker.m.daocloud.io",
"https://docker.jianmuhub.com",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://dockerhub1.beget.com",
"https://noohub.ru"]
}
依次执行systemctl daemon-reload和systemctl restart docker
重新构建
构建过程结束时出现如下构建日志说明镜像构建成功。Successfully tagged pytorch:2.1.0-cann7.0.0
上传镜像至SWR服务
- 登录容器镜像服务控制台,选择区域,要和ModelArts区域保持一致,否则无法选择到镜像。
- 单击右上角“创建组织”,输入组织名称完成组织创建。请自定义组织名称,本示例使用“deep-learning”,下面的命令中涉及到组织名称“deep-learning”也请替换为自定义的值。
- 单击右上角“登录指令”,获取登录访问指令,本文选择复制临时登录指令。
- 以root用户登录本地环境,输入复制的SWR临时登录指令。
- 上传镜像至容器镜像服务镜像仓库。
- 使用docker tag命令给上传镜像打标签。
#region和domain信息请替换为实际值,组织名称deep-learning也请替换为自定义的值。 sudo docker tag pytorch:2.1.0-cann7.0.0 swr.{region-id}.{domain}/deep-learning/pytorch:2.1.0-cann7.0.0
- 使用docker push命令上传镜像。
#region和domain信息请替换为实际值,组织名称deep-learning也请替换为自定义的值。 sudo docker push swr.{region-id}.{domain}/deep-learning/pytorch:2.1.0-cann7.0.0
- 使用docker tag命令给上传镜像打标签。
- 完成镜像上传后,在容器镜像服务控制台的“我的镜像”页面可查看已上传的自定义镜像。
在ModelArts上创建训练作业
- 登录ModelArts管理控制台,检查当前账号是否已完成访问授权的配置。如未完成,请参考快速配置ModelArts委托授权。针对之前使用访问密钥授权的用户,建议清空授权,然后使用委托进行授权。
- 在左侧导航栏中选择“模型训练 > 训练作业”,默认进入“训练作业”列表。
- 在“创建训练作业”页面,填写相关参数信息,然后单击“提交”。
- 创建方式:选择“自定义算法”。
- 启动方式:选择“自定义”。
- 镜像地址:swr.cn-north-4.myhuaweicloud.com/deep-learning/pytorch:2.1.0-cann7.0.0
- 代码目录:设置为OBS中存放启动脚本文件的目录,例如:“obs://test-modelarts/pytorch/demo-code/”,训练代码会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,“demo-code”为OBS存放代码路径的最后一级目录,可以根据实际修改。
- 启动命令:“/home/ma-user/miniconda3/bin/python ${MA_JOB_DIR}/demo-code/pytorch-verification.py” ,此处的“demo-code”为用户自定义的OBS存放代码路径的最后一级目录,可以根据实际修改。
- 资源池:选择专属资源池。
- 类型:选择驱动/固件版本匹配的专属资源池Ascend规格。
- 作业日志路径:设置为OBS中存放训练日志的路径。例如:“obs://test-modelarts/pytorch/log/”
- 在“规格确认”页面,确认训练作业的参数信息,确认无误后单击“提交”。
- 训练作业创建完成后,后台将自动完成容器镜像下载、代码目录下载、执行启动命令等动作。
训练作业一般需要运行一段时间,根据您的训练业务逻辑和选择的资源不同,训练时长将持续几十分钟到几小时不等。您可以在作业详情页面,查看日志信息。