华为云用户手册

  • Step5 上传镜像至SWR服务 登录容器镜像服务控制台,选择区域,要和ModelArts区域保持一致,否则无法选择到镜像。 单击右上角“创建组织”,输入组织名称完成组织创建。请自定义组织名称,本示例使用“deep-learning”,下面的命令中涉及到组织名称“deep-learning”也请替换为自定义的值。 单击右上角“登录指令”,获取登录访问指令,本文选择复制临时登录指令。 以root用户登录本地环境,输入复制的SWR临时登录指令。 上传镜像至容器镜像服务镜像仓库。 使用docker tag命令给上传镜像打标签。 #region和domain信息请替换为实际值,组织名称deep-learning也请替换为自定义的值。 sudo docker tag pytorch:1.8.1-cuda11.1 swr.{region-id}.{domain}/deep-learning/pytorch:1.8.1-cuda11.1 #此处以华为云cn-north-4为例 sudo docker tag pytorch:1.8.1-cuda11.1 swr.cn-north-4.myhuaweicloud.com/deep-learning/pytorch:1.8.1-cuda11.1 使用docker push命令上传镜像。 #region和domain信息请替换为实际值,组织名称deep-learning也请替换为自定义的值。 sudo docker push swr.{region-id}.{domain}/deep-learning/pytorch:1.8.1-cuda11.1 #此处以华为云cn-north-4为例 sudo docker push swr.cn-north-4.myhuaweicloud.com/deep-learning/pytorch:1.8.1-cuda11.1 完成镜像上传后,在容器镜像服务控制台的“我的镜像”页面可查看已上传的自定义镜像。 “swr.cn-north-4.myhuaweicloud.com/deep-learning/pytorch:1.8.1-cuda11.1”即为此自定义镜像的“SWR_URL”。
  • Step1 创建OBS桶和文件夹 在OBS服务中创建桶和文件夹,用于存放样例数据集以及训练代码。需要创建的文件夹列表如表1所示,示例中的桶名称“test-modelarts”和文件夹名称均为举例,请替换为用户自定义的名称。 创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 请确保您使用的OBS与ModelArts在同一区域。 表1 OBS桶文件夹列表 文件夹名称 用途 “obs://test-modelarts/pytorch/demo-code/” 用于存储训练脚本文件。 “obs://test-modelarts/pytorch/log/” 用于存储训练日志文件。
  • 配置ModelArts委托权限 给用户配置ModelArts委托授权,允许ModelArts服务在运行时访问OBS等依赖服务。 使用华为云账号登录ModelArts管理控制台,在左侧导航栏单击“全局配置”,进入“全局配置”页面,单击“添加授权”。 在弹出的“访问授权”窗口中, 授权对象类型:所有用户 委托选择:新增委托 权限配置:普通用户 选择完成后勾选“我已经详细阅读并同意《ModelArts服务声明》”,然后单击“创建”。 图1 配置委托访问授权 完成配置后,在ModelArts控制台的全局配置列表,可查看到此账号的委托配置信息。 图2 查看委托配置信息 父主题: 权限配置
  • 单模型性能测试工具Mindspore lite benchmark 在模型精度对齐后,针对SD模型性能调优,可以通过AOE工具进行自助性能调优,进一步可以通过profiling工具对于性能瓶颈进行分析,并针对性的做一些调优操作。 可以直接使用benchmark命令测试mindir模型性能,用来对比调优前后性能是否有所提升。 # shell cd /home_host/work benchmark --modelFile=diffusers/scripts/mindir_models/text_encoder.mindir --device=Ascend 上述命令中:modelFile指定生成的mindir模型文件;device指定运行推理的设备。其他用法参考benchmark文档。 测试结果如下所示: 图1 测试结果 父主题: 性能调优
  • Step2 为用户配置云服务使用权限 主用户为子用户授予ModelArts、OBS等云服务的使用权限后,子用户才可以使用这些云服务。此步骤介绍如何为用户组中的所有子用户授予使用ModelArts、OBS、SWR等各类云服务的权限。 主用户在IAM服务的用户组列表页面,单击“授权”,进入到授权页面,为子用户配置权限。 图1 为用户组授权 配置授权前,请先了解ModelArts各模块使用到的最小权限要求,如表1所示。 配置ModelArts使用权限。在搜索框搜索ModelArts。ModelArts FullAccess权限和ModelArts CommonOperations权限只能二选一,不能同时选。 选择说明如下: ModelArts CommonOperations没有任何专属资源池的创建、更新、删除权限,只有使用权限。推荐给子用户配置此权限。 如果需要给子用户开通专属资源池的创建、更新、删除权限,此处要勾选ModelArts FullAccess,请谨慎配置。 配置OBS使用权限。搜索OBS,勾选“ OBS Administrator”。ModelArts训练作业中需要依赖OBS作为数据中转站,需要配置OBS的使用权限。 配置SWR使用权限。搜索SWR,勾选“SWR FullAccess”。ModelArts的自定义镜像功能依赖镜像服务SWR FullAccess权限。 (可选)配置密钥管理权限。如果需要使用ModelArts Notebook的SSH访问功能,依赖密钥管理权限。搜索DEW,勾选“DEW KeypairFullAccess”。 此处需要注意以下Region配置的是DEW密钥管理权限:华北-北京一、华北-北京四、华东-上海一、华东-上海二、华南-广州、西南-贵阳一、中国-香港、亚太-新加坡。其他Region配置的是KMS密钥管理权限。本示例中使用“华南-广州”Region举例,所以需要配置DEW密钥管理权限。 (可选)配置智能边缘平台使用权限。ModelArts的边缘服务依赖智能边缘平台,要求配置Tenant Administrator权限。 注意:Tenant Administrator权限比较大,包含全部云服务的管理权限,而不仅是使用ModelArts服务。请谨慎配置。 (可选) 配置CES云监控和SMN消息通知使用权限。ModelArts推理部署的在线服务详情页面内有调用次数详情,单击可查看该在线服务的调用次数随时间详细分布的情况。如果想进一步通过CES云监控查看ModelArts的在线服务和对应模型负载运行状态的整体情况,需要给子用户授予CES权限。 如果只是查看监控,给子用户授予CES ReadOnlyAccess权限即可。 如果还需要在CES上设置监控告警,则需要再加上CES FullAccess权限,以及SMN消息通知权限。 (可选)配置VPC权限。如果用户在创建专属资源池过程中,需要开启自定义网络配置,此处需要授予用户VPC权限。 (可选)配置SFS和SFS Turbo权限。如果用户在专属资源池中挂载SFS系统作为开发环境或训练的存储时,需要授予使用权限。 单击左上角的“查看已选”,确认已勾选的权限。 再单击“下一步”,设置最小授权范围。单击“指定区域项目资源”,勾选待授权使用的区域,单击“确定”。 提示授权成功,查看授权信息,单击“完成”。此处的授权生效需要15-30分钟。 父主题: 配置ModelArts基本使用权限
  • 步骤3:创建自动学习物体检测项目 确保数据集创建完成且可正常使用后,在ModelArts控制台,左侧导航栏选择“自动学习”默认进入新版自动学习页面,选择物体检测项目,单击“创建项目”。 进入“创建物体检测”页面后,填写相关参数。 计费模式:默认按需计费。 名称:自行创建项目名称。 描述:自行描述项目详情,例如口罩检测。 数据集:下拉选择已下载的数据集(步骤2中已成功导入的数据集,默认为下拉数据集列表中的第一个数据集)。 输出路径:选择步骤2的3中的数据集输出位置。 训练规格:根据您的实际需要选择对应的训练规格。 确认无误后单击右下角“创建项目”可自动跳转至自动学习的运行总览页面。
  • 步骤1:准备工作 注册华为账号并开通华为云、实名认证 注册华为账号并开通华为云 进行实名认证 配置委托访问授权 ModelArts使用过程中涉及到OBS、SWR、IEF等服务交互,首次使用ModelArts需要用户配置委托授权,允许访问这些依赖服务。 使用华为云账号登录ModelArts管理控制台,在左侧导航栏单击“全局配置”,进入“全局配置”页面,单击“添加授权”。 在弹出的“访问授权”窗口中,授权对象类型选“所有用户”,委托选择选“新增委托”,权限配置选择“普通用户”,并勾选“我已经详细阅读并同意《ModelArts服务声明》”,然后单击“创建”。 完成配置后,在ModelArts控制台的全局配置列表,可查看到此账号的委托配置信息。
  • 步骤4:运行工作流 在自动学习的运行总览页面,会产生一条工作流。工作流会自动从数据标注节点开始,依次运行数据集版本发布、数据校验、物体检测、模型注册、服务部署等节点,直至工作流全部运行完成。您需要做的是: 在数据标注节点,待数据标注节点变为橘色即为“等待操作”状态,双击数据标注节点,打开数据标注节点的运行详情页面。前往实例详情页确认所有图片是否都标注完成,确认无误后,回到工作流页面单击“继续运行”。 在“确认是否继续允许”的弹窗中,单击“确定”,工作流会继续从数据标注节点依次运行到服务部署节点。该段时间不需要用户做任何操作。 当工作流运行到“服务部署”节点,“服务部署”节点会变成橙色,双击“服务部署”节点。在服务部署页签中,可以看到状态变为了“等待输入”。 需要选择填写以下两个参数,其他参数均为默认值,保持不变。 计算节点规格:根据您的实际需求选择相应的规格。 是否自动停止:为避免资源浪费,建议打开自动停止开关,根据您的实际需要,选择自动停止时间,也可以自定义自动停止的时间。 图3 选择计算节点规格 图4 设置自动停止 参数填写完毕之后,单击运行状况右边的“继续运行”,单击确认弹窗中的“确定”即可继续完成工作流的运行。
  • 启动训练脚本 请根据表1修改超参值后,再启动训练脚本。 单机启动 以Qwen-14B为例,单机训练启动样例命令如下。在/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/代码目录下。 MODEL_TYPE=14B RUN_TYPE=pretrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B TRAIN_ITERS=200 MBS=2 GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh 其中 MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH为必填,TRAIN_ITERS、MBS、GBS、TP、PP、SEQ_LEN为非必填,有默认值。 多机启动 以Qwen-14B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以双机为例。在/home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/代码目录下执行。 #第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=14B RUN_TYPE=pretrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B TRAIN_ITERS=200 MBS=2 GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=14B RUN_TYPE=pretrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B TRAIN_ITERS=200 MBS=2 GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh 以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。 其中MASTER_ADDR、 NODE_RANK、 NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH为必填,TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR、SEQ_LEN为非必填,有默认值。 等待模型载入 执行训练启动命令后,等待模型载入,当出现“training”关键字时,表示开始训练。训练过程中,训练日志会在最后的Rank节点打印。 图1 等待模型载入 更多查看训练日志和性能操作,请参考查看日志和性能章节。 如果需要使用断点续训练能力,请参考断点续训练章节修改训练脚本。
  • 预训练超参配置 预训练脚本qwen.sh,存放在“xxx-Ascend/llm_train/AscendSpeed/scripts/qwen”目录下。训练前,需要根据实际需要配置超参。 表1 预训练超参配置 参数 示例值 参数说明 DATASET_PATH /home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca_text_document 必填。训练时指定的输入数据路径。一般为数据地址/处理后的数据前缀名,不加文件类型后缀。 请根据实际规划修改。 TOKENIZER_PATH /home/ma-user/ws/tokenizers/Qwen-14B 必填。加载tokenizer时,tokenizer存放地址。 请根据实际规划修改。 MODEL_TYPE 14B 必填。表示模型加载类型,根据实际填写7B、14B或72B。 TRAIN_ITERS 200 非必填。表示训练迭代周期,根据实际需要修改。 MBS 2 非必填。表示流水线并行中一个micro batch所处理的样本量。在流水线并行中,为了减少气泡时间,会将一个step的数据切分成多个micro batch。 该值与TP和PP以及模型大小相关,可根据实际情况进行调整。默认值为2。取值建议如下: Qwen-14B:2 Qwen-7B:2 Qwen-72B:1 GBS 64 非必填。表示训练中所有机器一个step所处理的样本量。影响每一次训练迭代的时长。 默认值为64。对于PP(流水线并行)值大于1的场景,增大GBS值吞吐性能会有提升。 TP 8 非必填。表示张量并行。默认值为8,取值建议: Qwen-14B:8 Qwen-7B:4 Qwen-72B:8 PP 1 非必填。表示流水线并行。默认值为1,取值建议: Qwen-14B:1 Qwen-7B:1 Qwen-72B:大于等于5,例如5机填写5,8机填8。 RUN_TYPE pretrain 必填。表示训练类型,根据实际训练任务类型选择。取值说明: pretrain:表示预训练 retrain:表示断点续训 sft:表示SFT微调训练 lora:表示LoRA微调训练 MASTER_ADDR localhost 多机必填。主节点IP地址,多台机器中需要指定一个节点IP为主节点IP。 一般指定第一个节点IP为主节点IP。 NNODES 1 多机必填。节点总数,如为双机,则写2。单机默认是1。 NODE_RANK 0 多机必填。节点序号,当前节点ID,一般从0开始,单机默认是0。以Qwen-72B 5机训练为例,节点ID依次为(0 1 2 3 4);一般ID为0的节点设置为主节点IP。 WORK_DIR /home/ma-user/ws 容器的工作目录。训练的权重文件保存在此路径下。非必填,默认值为:/home/ma-user/ws。 SEQ_LEN 4096 非必填。默认值为4096。
  • 性能调优总体原则和思路 PyTorch在昇腾AI处理器的加速实现方式是以算子为粒度进行调用(OP-based),即通过Python与C++调用CANN层接口Ascend Computing Language(AscendCL)调用一个或几个亲和算子组合的形式,代替原有GPU的实现方式,具体逻辑模型参考此处。 在PyTorch模型迁移后进行训练的过程中,CPU只负责算子的下发,而NPU负责算子的执行,算子下发和执行异步发生,性能瓶颈在此过程中体现。在PyTorch的动态图机制下,算子被CPU逐个下发到NPU上执行。一方面,理想情况下CPU侧算子下发会明显比NPU侧算子执行更快,此时性能瓶颈主要集中在NPU侧;另一方面,理想情况下NPU侧算子计算流水线一直执行,不会出现NPU等待CPU算子下发即NPU空转的场景,如果存在,则CPU侧算子下发存在瓶颈。 图1 Host算子下发和Device算子执行 综上所述,性能优化的总体原则为:减少Host算子下发时间、减少Device算子执行时间。 训练代码迁移完成后,如存在性能不达标的问题,可参考下图所示流程进行优化。建议按照单卡、单机多卡、多机多卡的流程逐步做性能调优。 图2 性能调优总体思路 父主题: PyTorch迁移性能调优
  • 方案概述 推理服务的端到端运维流程 算法开发阶段,先将业务AI数据存放到对象存储服务(OBS)中,接着通过ModelArts数据管理进行标注和版本管理,然后通过训练获得AI模型结果,最后通过开发环境构建AI应用镜像。 服务运维阶段,先利用镜像构建AI应用,接着部署AI应用为在线服务,然后可在云监控服务(CES)中获得ModelArts推理在线服务的监控数据,最后可配置告警规则实现实时告警通知。 业务运行阶段,先将业务系统对接在线服务请求,然后进行业务逻辑处理和监控设置。 图1 推理服务的端到端运维流程图 整个运维过程会对服务请求失败和资源占用过高的场景进行监控,当超过阈值时发送告警通知。 图2 监控告警流程图 方案优势 通过端到端的服务运维配置,可方便地查看业务运行高低峰情况,并能够实时感知在线服务的健康状态。 约束限制 端到端服务运维只支持在线服务,因为推理的批量服务和边缘服务无CES监控数据,不支持完整的端到端服务运维设置。
  • 启动训练脚本 单机启动 以baichuan2-13b为例,单机训练启动样例命令如下,以自己实际为准。在/home/ma-user/ws/6.3.904-Ascend/llm_train/AscendSpeed/代码目录下执行。超参详解参考表1。 MODEL_TYPE=13B RUN_TYPE=pretrain DATA_PATH=/home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/pretrain/alpaca_text_document TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B/tokenizer.model TRAIN_ITERS=200 MBS=1 GBS=16 TP=8 PP=1 WORK_DIR=/home/ma-user/ws sh scripts/baichuan2/baichuan2.sh 以上超参配置中,其中 MODEL_TYPE 、RUN_TYPE、DATA_PATH、TOKENIZER_MODEL为必填;TRAIN_ITERS、MBS、GBS、 TP、PP 、WORK_DIR为非必填,有默认值。 多机启动 以baichuan2-13b为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以双机为例。超参详解参考表1。 #第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=13B RUN_TYPE=pretrain DATA_PATH= /home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/pretrain/alpaca_text_document TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B/tokenizer.model TRAIN_ITERS=200 MBS=2 GBS=32 TP=8 PP=2 WORK_DIR=/home/ma-user/ws sh scripts/baichuan2/baichuan2.sh ... ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=13B RUN_TYPE=pretrain DATA_PATH= /home/ma-user/ws/processed_for_ma_input/BaiChuan2-13B/data/pretrain/alpaca_text_document TOKENIZER_MODEL=/home/ma-user/ws/tokenizers/BaiChuan2-13B/tokenizer.model TRAIN_ITERS=200 MBS=2 GBS=32 TP=8 PP=2 sh scripts/baichuan2/baichuan2.sh 以上命令多台机器执行时,只有${NODE_RANK}:节点ID值不同,其他参数都保持一致。 其中MASTER_ADDR、NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATHDATA_PATH、TOKENIZER_PATHTOKENIZER_MODEL为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR为非必填,有默认值。 等待模型载入 执行训练启动命令后,等待模型载入,当出现“training”关键字时,表示开始训练。训练过程中,训练日志会在最后的Rank节点打印。 图1 等待模型载入 更多查看训练日志和性能操作,请参考查看日志和性能章节。 如果需要使用断点续训练能力,请参考断点续训练章节修改训练脚本。
  • 训练过程 断点续训脚本qwen.sh,存放在“xxx-Ascend/llm_train/AscendSpeed/scripts/qwen”目录下。 执行命令如下,进入AscendSpeed代码目录。 cd /home/ma-user/ws/xxx-Ascend/llm_train/AscendSpeed/ 修改断点续训练参数。断点续训前,需要在原有训练参数配置表1中新加“MODEL_PATH”参数,并修改“TRAIN_ITERS”参数和“RUN_TYPE”参数。 表1 断点续训练修改参数 参数 示例值 参数说明 MODEL_PATH /home/ma-user/ws/saved_dir_for_ma_output/Qwen-14B/pretrain 必填。加载上一步预训练后保存的权重文件。 请根据实际规划修改。 TRAIN_ITERS 300 必填。表示训练周期,必须大于上次保存训练的周期次数。 RUN_TYPE retrain 必填。训练脚本类型,retrain表示断点续训练。 在AscendSpeed代码目录下执行断点续训练脚本。 单机启动 MODEL_TYPE=14B RUN_TYPE=retrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B MODEL_PATH=/home/ma-user/ws/saved_dir_for_ma_output/Qwen-14B/pretrain TRAIN_ITERS=300 MBS=2 GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh 多机启动 以Qwen-14B为例,多台机器执行训练启动命令如下。多机启动需要在每个节点上执行,以双机为例。 #第一台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=0 MODEL_TYPE=14B RUN_TYPE=retrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B MODEL_PATH=/home/ma-user/ws/saved_dir_for_ma_output/Qwen-14B/pretrain TRAIN_ITERS=300 MBS=2 GBS=64 TP=8 PP=1 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh ... # 第二台节点 MASTER_ADDR=xx.xx.xx.xx NNODES=2 NODE_RANK=1 MODEL_TYPE=14B RUN_TYPE=retrain DATASET_PATH=/home/ma-user/ws/processed_for_ma_input/Qwen-14B/data/pretrain/alpaca_text_document TOKENIZER_PATH=/home/ma-user/ws/tokenizers/Qwen-14B MODEL_PATH=/home/ma-user/ws/saved_dir_for_ma_output/Qwen-14B/pretrain TRAIN_ITERS=300 MBS=2 GBS=64 TP=8 PP=12 SEQ_LEN=4096 WORK_DIR=/home/ma-user/ws sh scripts/qwen/qwen.sh 以上命令多台机器执行时,只有${NODE_RANK}的节点ID值不同,其他参数都保持一致。 其中MASTER_ADDR、 NODE_RANK、 NODE_RANK、MODEL_TYPE 、RUN_TYPE、DATASET_PATH、TOKENIZER_PATH、MODEL_PATH为必填;TRAIN_ITERS、MBS、GBS、TP、PP、WORK_DIR、SEQ_LEN为非必填,有默认值。 图1 保存的ckpt 训练完成后,参考查看日志和性能,查看断点续训练日志和性能。
  • Step5 在ModelArts上创建Notebook并调试 将上传到SWR上的镜像注册到ModelArts的镜像管理中。 登录ModelArts管理控制台,在左侧导航栏中选择“镜像管理 ”,单击“注册镜像”,根据界面提示注册镜像。注册后的镜像可以用于创建Notebook。 在Notebook中使用自定义镜像创建Notebook并调试,调试成功后,保存镜像。 在Notebook中使用自定义镜像创建Notebook操作请参见基于自定义镜像创建Notebook实例。 保存Notebook镜像操作请参见保存Notebook镜像环境。 已有的镜像调试成功后,再使用ModelArts训练模块训练作业。 父主题: 示例:从 0 到 1 制作自定义镜像并用于训练(MindSpore+Ascend)
  • 步骤1:准备工作 已注册华为账号并开通华为云,进行了实名认证,且在使用ModelArts前检查账号状态,账号不能处于欠费或冻结状态。 注册华为账号并开通华为云 进行实名认证 配置委托访问授权 ModelArts使用过程中涉及到OBS、SWR、IEF等服务交互,首次使用ModelArts需要用户配置委托授权,允许访问这些依赖服务。 使用华为云账号登录ModelArts管理控制台,在左侧导航栏单击“全局配置”,进入“全局配置”页面,单击“添加授权”。 在“访问授权”页面,选择需要授权的“授权对象类型”,选择新增委托及其对应的权限“普通用户”,并勾选“我已经详细阅读并同意《ModelArts服务声明》”,然后单击“创建”。 图1 配置委托访问授权 完成配置后,在ModelArts控制台的全局配置列表,可查看到此账号的委托配置信息。 图2 查看委托配置信息
  • 迁移环境简介 ModelArts开发环境针对推理昇腾迁移的场景提供了云上可以直接访问的开发环境,具有如下优点: 利用云服务的资源使用便利性,可以直接使用到不同规格的昇腾设备。 通过指定对应的运行镜像,可以直接使用预置的、在迁移过程中所需的工具集,且已经适配到最新的版本可以直接使用。 开发者可以通过浏览器入口一Notebook方式访问,也可以通过VSCode远程开发的模式直接接入到云上环境中完成迁移开发与调测,最终生成适配昇腾的推理应用。 当前支持以下两种迁移环境搭建方式: ModelArts Standard:在Notebook中,使用预置镜像进行。 ModelArts Lite DevServer:在裸金属服务器中 ,自助配置好存储、安装固件、驱动、配置网络等。
  • Step6 预测结果 在“在线服务”页面,单击在线服务名称,进入服务详情页面。 单击“预测”页签,请求类型选择“multipart/form-data”,请求参数填写“image”,单击“上传”按钮上传示例图片,然后单击“预测”。 预测完成后,预测结果显示区域将展示预测结果,根据预测结果内容,可识别出此图片的数字是“2”。 本案例中使用的MNIST是比较简单的用做demo的数据集,配套算法也是比较简单的用于教学的神经网络算法。这样的数据和算法生成的模型仅适用于教学模式,并不能应对复杂的预测场景。即生成的模型对预测图片有一定范围和要求,预测图片必须和训练集中的图片相似(黑底白字)才可能预测准确。 ModelArts的AI Gallery中提供了常见的精度较高的算法和相应的训练数据集,用户可以在AI Gallery的资产集市中获取。 图8 示例图片 图9 预测结果展示
  • 操作流程 开始使用如下样例前,请务必按准备工作指导完成必要操作。 Step1 准备训练数据:下载MNIST数据集。 Step2 准备训练文件和推理文件:编写训练与推理代码。 Step3 创建OBS桶并上传文件:创建OBS桶和文件夹,并将数据集和训练脚本,推理脚本,推理配置文件上传到OBS中。 Step4 创建训练作业:进行模型训练。 Step5 推理部署:训练结束后,将生成的模型导入ModelArts用于创建AI应用,并将AI应用部署为在线服务。 Step6 预测结果:上传一张手写数字图片,发起预测请求获取预测结果。 Step7 清除资源:运行完成后,停止服务并删除OBS中的数据,避免不必要的扣费。
  • 准备工作 已注册华为账号并开通华为云,且在使用ModelArts前检查账号状态,账号不能处于欠费或冻结状态。 配置委托访问授权 ModelArts使用过程中涉及到OBS、SWR、IEF等服务交互,首次使用ModelArts需要用户配置委托授权,允许访问这些依赖服务。 使用华为云账号登录ModelArts管理控制台,在左侧导航栏单击“全局配置”,进入“全局配置”页面,单击“添加授权”。 在弹出的“访问授权”窗口中, 授权对象类型:所有用户 委托选择:新增委托 权限配置:普通用户 选择完成后勾选“我已经详细阅读并同意《ModelArts服务声明》”,然后单击“创建”。 图1 配置委托访问授权 完成配置后,在ModelArts控制台的全局配置列表,可查看到此账号的委托配置信息。 图2 查看委托配置信息
  • Step3 创建OBS桶并上传文件 将上一步中的数据和代码文件、推理代码文件与推理配置文件,从本地上传到OBS桶中。在ModelArts上运行训练作业时,需要从OBS桶中读取数据和代码文件。 登录OBS管理控制台,按照如下示例创建OBS桶和文件夹。创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。 {OBS桶} # OBS对象桶,用户可以自定义名称,例如:test-modelarts-xx -{OBS文件夹} # OBS文件夹,自定义名称,此处举例为pytorch - mnist-data # OBS文件夹,用于存放训练数据集,可以自定义名称,此处举例为mnist-data - mnist-code # OBS文件夹,用于存放训练脚本train.py,可以自定义名称,此处举例为mnist-code - infer # OBS文件夹,用于存放推理脚本customize_service.py和配置文件config.json - mnist-output # OBS文件夹,用于存放训练输出模型,可以自定义名称,此处举例为mnist-output 创建的OBS桶所在区域和后续使用ModelArts必须在同一个区域Region,否则会导致训练时找不到OBS桶。具体操作可参见查看OBS桶与ModelArts是否在同一区域。 创建OBS桶时,桶的存储类别请勿选择“归档存储”,归档存储的OBS桶会导致模型训练失败。 上传Step1 准备训练数据下载的MNIST数据集压缩包文件到OBS中。上传文件至OBS的操作指导请参见上传对象。 上传数据到OBS中时,请不要加密,否则会导致训练失败。 文件无需解压,直接上传压缩包至OBS中即可。 上传训练脚本“train.py”到“mnist-code”文件夹中。 上传推理脚本“customize_service.py”和推理配置文件“config.json”到“infer”文件中。
  • Step1 准备训练数据 本案例使用的数据是MNIST数据集,您可以从MNIST官网下载数据集至本地,以下4个文件均要下载。 图3 MNIST数据集 “train-images-idx3-ubyte.gz”:训练集的压缩包文件,共包含60000个样本。 “train-labels-idx1-ubyte.gz”:训练集标签的压缩包文件,共包含60000个样本的类别标签。 “t10k-images-idx3-ubyte.gz”:验证集的压缩包文件,共包含10000个样本。 “t10k-labels-idx1-ubyte.gz”:验证集标签的压缩包文件,共包含10000个样本的类别标签。 如果单击MNIST官网链接后提示输入登录信息,可在浏览器中直接粘贴此链接免登录:http://yann.lecun.com/exdb/mnist/。 出现登录提示是由于浏览器使用了https的方式打开了该链接,使用http的方式打开则无需登录信息。
  • Step8 Jmeter压测 获取开源的Jmeter压测工具。安装包地址:jmeter安装包地址。 安装Java。 下载jdk包到宿主机上,拷贝到容器/opt/jdk目录下,使用tar -zxvf 解压,例如: #容器内执行: mkdir /opt/jdk #宿主机上执行: docker cp jdk-8u352-linux-aarch64.tar.gz bert-mindspore:/opt/jdk #容器内执行: cd /opt/jdk tar -zxvf jdk-8u352-linux-aarch64.tar.gz 然后设置环境变量(JAVA_HOME 路径名称以实际为准): export JAVA_HOME=/opt/jdk/jdk1.8.0_352 export PATH=${JAVA_HOME}/bin:${PATH} 安装Jmeter。 下载jmeter包到宿主机上,拷贝到容器/opt/jmeter,使用unzip 解压,例如: #容器内执行: mkdir /opt/jmeter #宿主机上执行: docker cp apache-jmeter-5.4.1.zip bert-mindspore:/opt/jmeter #容器内执行: cd /opt/jmeter unzip apache-jmeter-5.4.1.zip 然后设置环境变量 export PATH=/opt/jmeter/apache-jmeter-5.4.1/bin:${PATH} 启动Jmeter压测。 修改jmeter启动脚本 vim run_jmeter.sh 将其内容修改如下,${model}.jtl 为jtl文件名 jmeter -n -t jmeter.jmx -l ${model}.jtl 启动jmeter脚本 sh run_jmeter.sh 查看信息。将jtl文件保存在本地,创建一个线程组,在该线程组下面创建一个监听器的聚合报告。在聚合报告中打开相应的jtl文件查看信息。 查看的信息包括: 平均值:平均时延 99%百分位:p99时延 异常:失败率 吞吐量:qps 每打开一个jtl文件需要重新创建一个聚合报告,不能用同一个聚合报告打开多个jtl文件,会使数据杂糅,使聚合报告信息不准。 记录最终吞吐量时需将该信息中的吞吐量 x batchsize。
  • 附录:get_onnx.py脚本内容 get_onnx.py脚本用于查看onnx模型文件信息,脚步具体内容如下: from pprint import pprint import onnxruntime onnx_path = "./model.onnx" # 此处的onnx_path值需替换成实际的模型存放路径和模型文件名称 provider = "CPUExecutionProvider" onnx_session = onnxruntime.InferenceSession(onnx_path, providers=[provider]) print("----------------- 输入部分 -----------------") input_tensors = onnx_session.get_inputs() # 该 API 会返回列表 for input_tensor in input_tensors: # 因为可能有多个输入,所以为列表 input_info = { "name" : input_tensor.name, "type" : input_tensor.type, "shape": input_tensor.shape, } pprint(input_info) print("----------------- 输出部分 -----------------") output_tensors = onnx_session.get_outputs() # 该 API 会返回列表 for output_tensor in output_tensors: # 因为可能有多个输出,所以为列表 output_info = { "name" : output_tensor.name, "type" : output_tensor.type, "shape": output_tensor.shape, } pprint(output_info)
  • Step6 安装插件代码包并编辑 模型推理时需要使用适配过昇腾的模型插件包。将获取到的模型插件代码包ascendcloud-aigc-6.3.904-*.tar.gz文件上传到容器的/home/ma-user/目录下并解压。获取路径参见获取软件和镜像。 cd /home/ma-user/ tar -zxvf ascendcloud-aigc-6.3.904-*.tar.gz #解压,包名中的*表示时间戳,请按照实际替换。 cp ascendcloud-aigc-poc-redbook.tar.gz ${model_path} #${model_path}为mindir文件所在路径 cd ${model_path} tar -zxvf ascendcloud-aigc-poc-redbook.tar.gz 解压后所得文件如图3所示。 图3 ascendcloud-aigc-poc-redbook解压后文件 编辑gunicorn.conf文件。 vim gunicorn.conf 图4 编辑gunicorn.conf文件 5556与创建容器映射端口号保持一致。 workers为服务数,测试多服务时可以根据需要修改此参数的值。 编辑infer_server.py文件。 vim infer_server.py 图5 BERT编辑infer_server.py文件 DEVICE_ID:设备ID,与挂载卡保持一致。 model_path:为mindir名称。 port:与创建容器时端口保持一致。 input_data:三个为onnx模型转mindir模型时的输入,此次三个输入全部为4,96,将图上32,256全部换为4,96即可。如果该模型只有一个输入,需将input_data2与input_data3添加注释,并将res = model[(input_data1,input_data2,input_data3])]中的input_data2与input_data3删除,在input_data1中填入相应输入即可。 此次三个BERT全部为三个输入,CV模型全部为单个输入,如下图为CV模型的输入信息查看示例。 图6 get_onnx.py查看CV模型的onnx信息 对于CV模型,需将input_data2与input_data3注释,此onnx模型为固定shape,其转为onnx模型时不能修改其输入,故Inptu_data1中需修改为1,3,640,640,后面np.int32也需修改为np.float32。 编辑jmeter.jmx文件 vim jmeter.jmx 图7 编辑jmeter.jmx文件(1) ThreadGroup.num_threads:为jemter压测的线程数。 ThreadGroup.scheduler:将false修改为true,表示限制压测时间。 ThreadGroup.duration:设置压测时间,默认时间单位为s,例如需要压测10min,则添加600即可,无需带单位。 图8 编辑jmeter.jmx文件(2) port:与创建容器时端口保持一致
  • Step5 转换模型文件 将onnx模型文件转换为mindir格式模型文件。转换过程中涉及到的参数需要查看原始onnx文件,此处提供查看的脚本文件get_onnx.py,具体的脚步文件内容见附录:get_onnx.py脚本内容。 模型转换命令如下。 export model_name="model" export LD_LIBRARY_PATH=/home/ma-user/anaconda3/envs/python-3.9.10/lib/:${LD_LIBRARY_PATH} converter_lite --modelFile=./${model_name}.onnx --outputFile=./${model_name} --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --inputShape="input_ids:4,96;attention_mask:4,96;token_type_ids:4,96" --modelFile:模型名称。 --outputFile:输出模型名称。模型名称无需添加.mindir后缀,添加后对后续测试流程存在一定影响。 --inputShape:根据onnx输出的name:shape进行修改,可以通过get_onnx.py脚本查看,如图1所示。 图1 get_onnx.py脚本查看输入参数 如需进行AOE优化,则需配置一个config.ini文件,文件内容如下。 [ascend_context] plugin_custom_ops=FlashAttention,GroupNormSilu,GeGluV2 aoe_mode="subgraph tuning, operator tuning" AOE优化命令如下,只需将以上模型转换命令添加一个--configFile=config.ini即可。 converter_lite --modelFile=./${model_name}.onnx -- outputFile=./${model_name} --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --inputShape="input_ids:4,96;attention_mask:4,96;token_type_ids:4,96" --configFile=config.ini benchmark测试命令如下。 benchmark --device=Ascend --modelFile=${model_name}.mindir 图2 benchmark测试
  • Step1 准备环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 检查环境。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装NPU设备和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
  • Step3 启动容器镜像 启动容器镜像。启动前请先按照参数说明修改${}中的参数。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称" // 启动一个容器去运行镜像 docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ --shm-size 32g \ --net=bridge \ -p 5556:5556 \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ ${image_name} bash 参数说明: -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 ${image_name}:容器镜像的名称。 通过容器名称进入容器中。 docker exec -it ${container_name} bash
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 ascendcloud-aigc-6.3.904-*.tar.gz 说明: 包名中的*表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E网站。 说明: 如果没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像 西南-贵阳一:swr.cn-southwest-2.myhuaweicloud.com/atelier/mindspore_2_3_ascend:mindspore_2.3.0-cann_8.0.rc1-py_3.9-hce_2.0.2312-aarch64-snt9b-20240516142953-ca51f42 从SWR拉取。
  • 背景信息 Notebook使用涉及到计费,具体收费项如下: 处于“运行中”状态的Notebook,会消耗资源,产生费用。根据您选择的资源不同,收费标准不同,价格详情请参见产品价格详情。当您不需要使用Notebook时,建议停止Notebook,避免产生不必要的费用。 创建Notebook时,如果选择使用云硬盘EVS存储配置,云硬盘EVS会一直收费,建议及时停止并删除Notebook,避免产品不必要的费用。 在创建Notebook时,默认会开启自动停止功能,在指定时间内停止运行Notebook,避免资源浪费。 只有处于“运行中”状态的Notebook,才可以执行打开、停止操作。 一个帐户最多创建10个Notebook。
共100000条