华为云用户手册

  • 方案概览 本方案介绍了在ModelArts Lite Server上使用昇腾计算资源Ascend Snt9B开展InternVL2-8B, InternVL2-26B,InternVL2-40B及InternVL2.5-4B,InternVL2.5-8B模型的训练过程,包括Finetune训练和LoRA训练。 表1 支持的模型列表 支持的模型 Finetune训练 LoRA训练 社区版本 权重获取路径 InternVL2-8B True True 5d8f485ad09b3eb9b2a7d9a24cca727fa58bb775 https://huggingface.co/OpenGVLab/InternVL2-8B/tree/main InternVL2-26B True True 5d8f485ad09b3eb9b2a7d9a24cca727fa58bb775 https://huggingface.co/OpenGVLab/InternVL2-26B/tree/main InternVL2-40B True True 5d8f485ad09b3eb9b2a7d9a24cca727fa58bb775 https://huggingface.co/OpenGVLab/InternVL2-40B/tree/main InternVL2_5-4B True True 2d57e2181dad4c1c3c50f8da8a23600d4ee19fda https://huggingface.co/OpenGVLab/InternVL2_5-4B InternVL2_5-8B True True 2d57e2181dad4c1c3c50f8da8a23600d4ee19fda https://huggingface.co/OpenGVLab/InternVL2_5-8B
  • 步骤一:检查环境 请参考Lite Server资源开通,购买Lite Server资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买Lite Server资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的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
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.5.901软件包中的AscendCloud-AIGC-6.5.901-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.5.901版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像包 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2409-aarch64-snt9b-20241213131522-aafe527 SWR上拉取。 表3 模型镜像版本 模型 版本 CANN cann_8.0.rc3 驱动 24.1.rc1 PyTorch 2.1.0
  • 步骤五:下载代码安装环境 下载华为侧插件代码包AscendCloud-AIGC-6.3.912-xxx.zip文件,获取路径参见表2。 1. InternVL2 unzip AscendCloud-AIGC-6.3.912-*.zip bash multimodal_algorithm/InternVL2/train/5d8f485ad09b3eb9b2a7d9a24cca727fa58bb775/InternVL2_install.sh cp multimodal_algorithm/InternVL2/train/5d8f485ad09b3eb9b2a7d9a24cca727fa58bb775/shells/* InternVL/internvl_chat/shell/internvl2.0/2nd_finetune/ 下载华为侧插件代码包AscendCloud-AIGC-6.5.901-xxx.zip文件,获取路径参见表2。
  • 步骤六:增加适配代码 表4 添加优化代码 模型 使用方法 internVL2-40B internVL2-40B模型需要执行下列步骤。 cd ${container_work_dir}/multimodal_algorithm/ascendcloud_multimodal_plugin pip install -e . cd ${container_work_dir} 修改InternVL/internvl_chat/internvl/train/internvl_chat_finetune.py 文件,加入如下命令,用于引入优化代码包。 from ascendcloud_multimodal.train.models.internvl2 import ascend_modeling_internvl 执行如下命令添加优化代码。 cp -rf multimodal_algorithm/ascendcloud_multimodal_plugin/ascendcloud_multimodal/train/models/internvl2/modeling_intern_vit.py ${container_work_dir}/InternVL/internvl_chat/internvl/model/internvl_chat/modeling_intern_vit.py internVL2-8B或 internVL2-26B internVL2-8B或internVL2-26B模型需要执行如下命令添加优化代码。 cd ${container_work_dir} cp -rf multimodal_algorithm/ascendcloud_multimodal_plugin/ascendcloud_multimodal/train/models/internvl2/modeling_intern_vit.py ${container_work_dir}/InternVL/internvl_chat/internvl/model/internvl_chat/modeling_intern_vit.py cp -rf multimodal_algorithm/ascendcloud_multimodal_plugin/ascendcloud_multimodal/train/models/internvl2/modeling_internlm2.py ${container_work_dir}/InternVL/internvl_chat/internvl/model/internlm2/modeling_internlm2.py 注:InternVL2.5版本模型需修改版本依赖,执行如下命令:pip install deepspeed==0.14.2
  • comparison模块介绍 当同时指定目标集群profiling和标杆集群profiling或者目标集群内部存在快慢卡时,advisor会针对计算和下发性能存在差异的卡(快慢卡)进行算子级的对比。 如下图所示,当分析时显式指定了标杆集群profiling数据,advisor识别到两次训练任务中0号卡的step12存在计算性能差异,则会对目标集群的0号卡step12与标杆集群的0号卡step12进行kernel(npu侧计算的算子)性能对比。基于该对比数据,可以判断两张卡上的npu算子是否存在计算性能差异。 图7 目标集群profiling数据与标杆集群profiling数据的kernel算子对比 如下图所示,当分析时显式指定了标杆集群profiling数据,advisor识别到两次训练任务中6号卡的step16存在api下发性能差异,对目标集群的6号卡step16与标杆集群的6号卡step16进行了api(cpu侧的torch aten算子任务下发)的性能对比。基于该对比数据,可以判断两张卡上的aten算子是否存在下发性能差异。 图8 目标集群profiling数据与标杆集群profiling数据的api下发对比 如下图所示,分析时并没有指定标杆集群profiling数据,但advisor识别到目标集群存在任务下发快慢卡(16和19号卡)现象,因此对比了16号卡step175和19号卡step172的api下发性能。 图9 目标集群(无标杆集群profiling)内部快慢卡api下发对比
  • performance problem analysis模块介绍 perfomance problem analysis中会细分为计算(computation),下发(schedule),通信(communication)、内存(memory)和数据加载(dataloader)五个维度,根据训练作业卡数、训练实际性能问题有不同的呈现,并非所有训练任务都有上述五个维度的分析。 图10 html报告总览-性能分析五维度 computation 计算维度通常包含如下几类问题: 降频:对应html中的'AI CORE Frequency Issues'。NPU AICORE主频降低,导致flash attention和matmul类算子计算性能严重劣化。 AICPU算子:对应html中的'AICPU Issues'。部分算子因NPU支持度或者输入数据shape/dtype等原因,无法在AICORE上运行,因此会放在AICPU上进行计算,部分AICPU算子会存在明显的性能劣化。 动态shape:对应html中的'Operator Dynamic Shape Issues'。动态shape场景,部分昇腾算子会重复编译,导致计算延后,影响性能。 operator bound等问题:算子未打满AICORE的核数,导致计算利用率较低。 具体介绍如下: AI CORE Frequency Issues 下图展示了高优先级的降频问题,从表格中可以看到flash attention算子耗时最长且降频比率最高,因此降频严重影响了整体的训练性能。对于降频问题,用户通常无法自行解决,需要联系服务方如华为云技术支持排查机器的温度和功耗。 图11 降频分析 AICPU Issues 下图展示了高优先级的AICPU问题,AICPU算子单步计算耗时313秒,GridSample2D算子单步计算耗时208秒,因此需要重点关注该算子。可以通过html中提供的堆栈信息查看源码中对该算子的调用是否可以替换成其他torch api,如果分析后无法替换可以求助昇腾算子侧的算子开发人员进行算子优化分析。 图12 AICPU算子分析 Operator Dynamic Shape Issues 下图展示了低优先级的动态shape问题,在NPU上动态shape可能导致频繁的算子编译从而影响训练性能,可以按照html中的提示在训练脚本开头加上如下红框中的两行代码(分布式训练请确保分布式训练的每个进程都可以使能这两行代码)。 图13 动态shape分析 schedule 下发维度通常包含如下几类问题 同步流:对应html中的'Synchronize Stream Issues'。用户设置了ASCEND_LAUNCH_BLOCKING环境变量,打断了CPU侧算子的异步下发,严重影响训练性能。 GC:对应html中的'GC Analysis'。python garbage collection机制,大规模集群训练时GC任务会导致部分step训练耗时异常增大。 算子下发:对应html中的'Operator Dispatch Issues'。训练时如果频繁进行算子编译会严重影响训练性能,可以增加两行python代码关闭算子编译。 亲和API:对应html中的'Affinity API Issues'。通过使能亲和API(NPU融合算子API如rms_norm,NPU亲和优化器如NPUFusedAdamw)可以减少算子下发数量,从而提升训练性能。 syncBatchNorm:对应html中的'SyncBatchNorm Issues'。多卡DDP训练时如果使用syncBatchNorm,会存在明显的算子下发和通信瓶颈。 具体介绍如下: Synchronize Stream Issues 下图展示了高优先级的同步流问题,html中提示发现大量同步算子,可以尝试`unset ASCEND_LAUNCH_BLOCKING` 环境变量后再进行训练。 图14 异常同步流分析 GC Analysis 下图展示了中优先级的GC问题,html中提示发现单步训练中存在200ms左右的空闲时间且在该时间窗内cpu侧没有进行训练算子下发,怀疑是GC导致,可以尝试加上`gc.disable()`关闭GC。 图15 python垃圾回收(GC)分析 Operator Dispatch Issues 下图展示了中优先级的算子下发问题,html中提示识别到单步训练中存在6678个算子进行了算子编译,编译耗时149ms,可以在训练脚本最开头加上suggestion中的两行代码关闭算子编译(分布式训练请确保每个进程都可以使能这两行代码)。 图16 算子编译分析 Affinity API Issues 下图展示了低优先的亲和API替换,通常仅在首次将训练任务从GPU迁移至NPU时需要关注这部分内容。已经在NPU上进行长训的任务出现性能问题,可以忽略该部分。html中提示存在torch_npu.confusion_transpose, 梯度裁剪和亲和优化器等多个可替换的API,用户可根据代码堆栈找到需要替换的具体源码,然后根据API instruction跳转后的参考文档修改源代码,从而使能亲和API提升训练性能。注意这里提示的亲和API并非都能提升训练性能,需要用户替换后实测,由于有一定代码修改和测试成本,因此优先级可以视作最低。 图17 亲和API分析 SyncBatchNorm Issues 下图展示了高优先级的syncBatchNorm问题,html中提示可以通过去除convert_sync_batchnorm代码使能普通的batchNorm,如果模型开发者评估认为对训练精度存在影响,可以使用html中给出的代码段替换torch_npu中syncbatchnorm.py文件的forward方法(可以在训练环境中执行`pip show torch_npu`查看torch_npu的安装路径)。这类优化通常可以较显著地提升训练速度。 图18 SyncBatchNorm分析 memory 内存维度当前识别的问题较为简单,通常是NPU HBM占用过大或者存在内存碎片导致自动触发昇腾内存释放/重整算子(Memory Operator Issues),进而影响了训练性能。 下图展示了高优先级的内存算子问题,html中提示对于1号卡存在大量aclrtFree和aclMalloc算子,导致存在较大的空闲时间。按照建议,对于aclrtFree算子类问题,首先观察NPU HBM是否已经打满,如果打满则尝试减小micro batch size或者调整训练策略,例如训练LLM模型时使用ZeRO 3优化内存。其次采集profiling时设置“with_stack=True参数”,然后基于MindInsight Studio可视化profiling数据查看代码中是否存在empty_cache操作,如果存在则注释对应代码。对于aclMalloc算子类问题,按照建议设置环境变量即可减少内存碎片。 图19 内存算子分析 dataloader 数据加载维度(Slow Dataloader Issues)通常包含如下几类问题: 数据放在读写性能较差的存储盘上,如云上的EVS和EFS。 多卡训练时使用单进程dataloader,即num_workers参数默认为0。 存在其他多进程操作影响了数据多进程读取。 数据格式问题,例如zip、tar.gz等压缩包。 dataloader参数设置不合理,如没有配置锁页内存pin_memory=True。 下图中展示了高优先级的dataloader问题,较慢的数据加载将会严重影响训练速度。html中提示分别从数据盘、多进程、dataloader参数设置、数据格式等不同方向进行排查。 图20 数据加载分析 communication 通信维度当前支持检测如下几类问题。 通信计算并行时抢占通信带宽:对应html中的'BandWidth Contention Analysis'。在LLM类模型训练过程中,对于megatron类框架可以配置overlap相关参数使能计算和通信互相掩盖,进而提升训练性能。但部分场景中计算抢占通信带宽反而会导致性能劣化。 小包分析:对应html中的'Packet Analysis'。当BatchSize较小或其他场景,并没有打慢NPU HBM,卡间通信数据包较小,没有充分利用通信带宽。 RDMA重传(跨节点通信):对应html中的“Communication Retransmission Analysis”。当网络通信配置出现冲突情况下,RDMA通信传输可能出现重传,导致通信耗时异常大幅增加。 具体介绍如下: BandWidth Contention Analysis 下图展示了低优先级的通信带宽抢占问题,大部分场景中通信计算互相掩盖是有较大训练性能收益的,可以通过修改overlap或其他相关参数来测试是否存在性能提升。 图21 通信带宽抢占分析 Packet Analysis 下图展示了低优先级的通信小包问题,html中提示SDMA(机内通信)带宽相对较小,可以尝试增大batchSize或者梯度累积参数,如果配置了ZeRO3则推荐使用ZeRO1或者ZeRO2(如果内存够)。 图22 通信小包分析 Communication Retransmission Analysis 单次通信重传将会耗时4秒以上,会导致较严重的通信性能劣化,这类问题通常是由于节点网络配置错误导致,可以联系服务方如华为云技术支持排查网络配置。 图23 通信重传分析
  • overall模块介绍 单卡overall summary 下图展示了单卡上一个step的端到端耗时为1353ms,其中计算耗时(昇腾硬件上算子执行耗时)是57ms,未掩盖通信耗时为0ms,空闲耗时(硬件上没有进行计算和通信的其他时间)为1295ms。基于这三项数据可以初步判断当前训练任务的主要耗时瓶颈为空闲耗时。空闲耗时通常是任务下发(schedule)、数据加载(dataloader)和内存(memory)三个维度问题导致的,因此可以重点关注performance problem analysis中对应三个维度的分析。同理如果计算耗时占比较大,则应该重点关注计算维度的分析。 图2 单卡性能拆解总体描述 图3 单卡性能拆解详情 多卡slow rank & slow link 下图展示了多卡profiling分析的overall模块,包含集群快慢卡统计数值(slow rank,用于分析计算和任务下发的快慢卡)和集群带宽统计数值(slow link,用于分析集群中的网络通信慢链路)。点开slow rank模块,html中会基于表格展示每张卡不同step的计算耗时、通信耗时和空闲耗时。基于该表格,通常关注计算耗时(compute)和空闲耗时(free)这两列,可以初步分析当前瓶颈点是计算还是任务下发,以及是否存在计算快慢卡和下发快慢卡。如下图所示,可以看到8号卡的计算耗时明显大于其他卡,因此8号卡的“短板效应”将会拖慢集群的整体训练速度,后续性能分析需要重点关注8号卡的计算维度。 图4 多卡不同step计算、下发和通信耗时统计值 图5 多卡不同step通信带宽统计值 环境变量Environment Variable Issues 识别模型训练环境中设置的昇腾相关环境变量并给出建议。 图6 环境变量分析 表2 当前支持的环境变量 环境变量名称 释义 ASCEND_GLOBAL_ LOG _LEVEL plog日志级别,推荐设置为2(warning级别),低级别日志等级会导致cpu侧性能问题。 HCCL_RDMA_TC HCCL通信相关环境变量,通常无需设置该环境变量,建议unset该环境变量。具体参考拥塞控制与纠错配置策略 HCCL_RDMA_SL HCCL通信相关环境变量,通常无需设置该环境变量,建议unset该环境变量。具体参考拥塞控制与纠错配置策略 ACLNN_CACHE_LIMIT 用于缓存cann侧的aclnn算子,当空闲时间(free)较大时,可以尝试设置一个较大的数值,如export ACLNN_CACHE_LIMIT=100000 HOST_CACHE_CAPACITY 用于动态shape缓存,当存在动态shape时,设置一个非零正整数,如export HOST_CACHE_CAPACITY=20 ASCEND_ENHANCE_ENABLE 使能HCCL的FFTS+模式,export ASCEND_ENHANCE_ENABLE=1 PYTORCH_NPU_ALLOC_CONF 控制缓存分配,当存在内存碎片时,执行export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True ASCEND_LAUNCH_BLOCKING 是否启动同步下发,同步下发会导致严重的性能劣化,建议执行unset ASCEND_LAUNCH_BLOCKING
  • html总览 html中包括总体性能分析(overall)、快慢卡算子性能比对(comparison)和性能问题分析(performance problem analysis)三大模块。overall模块包含对单卡或者集群的性能统计数据,comparison模块包含目标集群profiling与标杆集群profiling或目标集群内部快慢卡的算子比对数据,performance problem analysis模块包含计算(computation)、下发(schedule)、通信(communication)、内存(memory)和数据加载(dataloader)五个维度的具体分析。用户首先需要查看overall模块初步明确是否存在计算维度的慢卡和下发维度慢卡,然后再重点关注performance problem analysis中对应维度的各项分析及其优先级。 红色为高优先级,黄色为中等优先级,绿色为低优先级。参考html进行分析调优时,请按照优先级从高到低依次进行并测试调优后性能,快速解决重点问题。 图1 html报告总览-三大模块 当前advisor的performance problem analysis中包含如下分析项。 表1 性能分析能力概览 分析维度 分析项 释义 overall overall summary 对于单卡profiling进行性能拆解,获取单步计算、下发和通信耗时。 slow rank 对于集群profiling进行性能统计,获取每张卡不同step的计算、下发和通信耗时。 slow link 对于集群profiling进行性能统计,获取每张卡不同step的带宽信息。 environment variable 识别错误配置且会影响性能的环境变量,如PLOG日志级别,HCCL相关环境变量,依赖24年930版本的pta。 comparison kernel compare 两张卡NPU侧计算算子对比。 api compare 两张卡CPU侧torch aten算子下发对比。 performance problem analysis computation - AI CORE frequency 计算维度,识别降频的节点,节点降频会导致flash attention和matmul类算子计算性能变差。 computation - AICPU 计算维度,识别AICPU算子,部分AICPU算子计算性能较差。 computation - operator dynamic shape 计算维度,检测动态shape,动态shape会触发频繁的算子编译。 computation - operator bound 计算维度,算子计算性能分析,例如算子是否充分使用AICORE核数。 schedule - synchronize stream 下发维度,异常同步流分析,过多同步流会打断CPU侧任务异步下发。 schedule - garbage collection(GC) 下发维度,识别异常耗时的垃圾回收,垃圾回收会造成大段空闲。 schedule - operator dispatch 下发维度,算子下发时编译分析,大量算子编译会导致整体训练性能变差。 schedule - syncBatchNorm 下发维度,NPU上分布式训练使用syncBN性能较差。 schedule - affinity api 下发维度,自动识别可替换的亲和API(融合算子API如rms_norm,亲和优化器如NpuFusedAdamw)。 communication - small packet 通信维度,识别因batch过小或者梯度累积较少导致的未充分利用机内通信带宽。 communication - bandwidth contention 通信维度,识别计算和通信相互掩盖,可能会抢占通信带宽。 communication - retransmission 通信维度,识别通信重传问题,单次重传耗时4秒以上。 memory 内存维度,识别异常内存算子。 dataloader 数据加载维度,异常耗时的数据读取将会导致明显的训练性能劣化。
  • 操作步骤 创建Notebook实例。 在ModelArts控制台创建一个Notebook实例,选择要使用的AI框架,创建Notebook时可以选择任意镜像。具体参见创建Notebook实例。 创建成功后,Notebook实例的状态为“运行中”,单击操作列的“打开”,访问JupyterLab。 图1 打开Notebook实例 进入JupyterLab页面后,自动打开Launcher页面,如下图所示。 图2 JupyterLab主页 不同AI引擎的Notebook,打开后Launcher页面呈现的Notebook和Console内核及版本均不同,图2仅作为示例,请以实际控制台为准。 单击Launcher页面的“Performance Advisor”图标,界面将如下图所示 图3 Performance Adviso主页面 提交性能诊断任务 如果您的NPU性能数据存放在OBS上,Source选择OBS,Path输入OBS地址,格式如obs://bucket1/profiling_dir1,单击Submit按钮。界面参考下图。 图4 分析OBS上的性能数据 如果您的NPU性能数据存放在Notebook上,Source选择Local,Path输入Notebook的绝对或相对路径(相对于/home/ma-user/work),格式如/home/ma-user/work/profiling_dir1或者./profiling_dir1,单击Submit按钮。界面参考下图。 图5 分析Notebook本地的性能数据 如果您有两份性能数据想进行对比,可以点开Compared Profiling Data选项开关,然后分别在NPU Profiling Data和Compared Profiling Data项中输入性能数据所在的Notebook本地或OBS路径,单击Submit按钮。界面参考下图。 图6 对比两份性能数据 性能诊断插件支持设置高级参数,当前支持的高级参数列表如下表所示。 表1 高级参数介绍 序号 键 默认值 是否必填 说明 1 cann_version 8.0.RC1 否 可选值包括6.3.RC2、7.0.RC1、7.0.0和8.0.RC1。当运行环境实际cann版本与可选值不匹配时选择大版本相近的可选值即可。主要影响亲和api分析和aicpu算子分析。 2 torch_version 2.1.0 否 可选值包括1.11.0和2.1.0,当运行环境实际torch版本与可选值不匹配时选择大版本相近的可选值即可。主要有影响亲和api分析。 3 analysis_dimensions computation, communication, schedule, memory 否 默认进行计算、通信、下发和内存的全维度分析。可以指定默认值中任意单维度进行分析,如仅指定computation进行计算维度分析,仅指定schedule进行下发维度分析。推荐不填写该参数,即使用默认值进行分析。 4 advisor_analyze_processes 1 否 advisor分析进程数,可选范围为1-8的任意整数。当LLM类模型训练的流水并行参数pp大于1时,advisor会对不同pp stage的训练profilingg数据进行分析。通过设置更大的进程数可以使能并行分析从而加快分析速度,但也会增大分析占用的cpu资源。通常单进程需要占用1U的cpu和一定cpu memory(取决于模型大小),请根据实际分析环境的资源规格调整该参数,避免因cpu资源占用过大或者OOM类问题导致的notebook实例异常。 5 disable_profiling_comparison False 否 关闭快慢卡算子比对。对于集群任务的profiling分析,如果存在快慢卡问题则会自动进行集群内部快慢卡的算子性能比对,包括npu侧计算的算子比对和cpu侧torch算子下发比对。当模型较大时,算子比对将会比较耗时,建议设置为True来提升分析速度。 6 disable_affinity_api False 否 关闭亲和算子(融合算子、亲和优化器)API分析。对于首次从gpu迁移至npu的训练任务性能分析,建议保留该参数,替换亲和算子API通常能获得一定性能收益。对于完成迁移后在npu上长训的训练任务,如果出现性能问题,建议设置为True来提升分析速度。 7 output_path /home/ma-user/work 否 advisor分析结果输出路径,包含html和xlsx两个文件。 如果您想修改参数配置,可以点开Advanced Settings选项开关,然后对参数进行新增或修改。界面参考下图。 图7 修改高级参数 查看性能诊断任务结果。 单击Performance Advisor页面的Report选项,可以看到已提交的性能诊断任务详情。 图8 查看性能诊断任务结果 当前支持的状态有“分析中(Analyzing)、成功(Success)和失败(Failed)”。分析中的任务根据性能诊断数据量大小预计将在1~10分钟内完成;成功的任务可单击Report列的View链接查看详细的诊断报告,如下图所示,失败的任务可将鼠标放到Failed字段上,将弹出具体的失败原因。诊断报告详细介绍请查看查看诊断报告。 图9 查看性能诊断报告 Report页面将每隔5s自动刷新一次。
  • 操作步骤 明确性能问题类型,准确采集性能劣化时刻的profiling数据。 对于固定step出现性能劣化,如固定在16步出现性能劣化,则需要合理配置profiling参数,确保能采集到16步的数据。 对于所有step稳定劣化的场景,避免采集第一个step的profiling即可,可以采集任意step如第15个step即可。 对于偶现且劣化现象出现的step数不固定的场景,则需要确保能采集到该不固定的step。 profiling数据采集请参考Ascend PyTorch Profiler接口采集。文档中包含torch_npu.profiler.profile、dynamic_profile等多种采集方式。任意torch_npu版本均支持torch_npu.profiler.profile方式,而其他采集方式则要求特定版本的torch_npu(2024年0630之后版本)。推荐升级torch_npu后使用dynamic_profile方式进行采集,如果升级成本过高,也可以使用torch_npu.profiler.profile。 当不明确性能劣化的可能原因时,profiling关键参数配置请务必复用如下设置: # torch_npu.profiler._ExperimentalConfig aic_metrics=torch_npu.profiler.AiCMetrics.PipeUtilization profiler_level=torch_npu.profiler.ProfilerLevel.Level1 data_simplification=True # torch_npu.profiler.profile activities=[torch_npu.profiler.ProfilerActivity.CPU, torch_npu.profiler.ProfilerActivity.NPU] with_stack=False torch_npu.profiler.profile采集方式介绍 配置完如图1所示代码后需要启动训练作业触发采集且只能采集指定的step,对于已经明确需要采集step的场景可以使用该采集方式,此时需要重点关注图1中schedule参数以确保采集到需要的step数据。对于schedule参数,请参考图2。skip_first用于跳过指定的前n个step。wait、warmup和active三个参数构成了一次完整的采集,repeat参数表示重复多少次完整的采集。wait参数表示重复执行采集过程中每次采集跳过的step轮数,warmup表示预热的step轮数(推荐设置为1),active表示实际采集的连续m个step。 参数示例: skip_first=10,wait=3, warmup=1, active=3, repeat=2 采集时会先跳过前10个step(从step0开始)。然后完整的一次采集过程包括等待3个step,预热1个step和连续采集3个step(step14-step16)的profiling数据。这一次采集的step14-step16的profiling数据会保存在同一个json文件中。由于设置了repeat=2,则会再次重复一次采集过程,那么实际会二次采集step21-step23这三个连续step的profiling数据并保存至一个新的json文件中。 图1 torch_npu.profiler.profile 图2 torch_npu.profiler.profile schedule参数释义 dynamic_profile采集方式介绍 对于上述提到的性能劣化且出现step不固定的场景,优先考虑使用动态profiling方式进行采集。如图3中所示"if step==5"处,需要在业务代码中添加如下判断逻辑:记录每一个step的耗时,如果某个step的耗时出现异常,即大于正常step耗时或者均值耗时的20%(根据训练日志的实际step耗时来确定异常耗时阈值),则认为出现性能劣化,从而执行'dp.start'触发profiling采集。 图3 dynamic_profile 存储profiling数据。 多机场景如果没有挂载共享存储如SFS Turbo,需要将多机上的profiling复制至同一个目录下才能进行性能分析,这个操作相对较为繁琐且耗时。使用ModelArts时推荐挂载共享网盘如sfs turbo,既能加快训练数据的读取速度又能用于存放性能profiling数据。如果没有共享网盘,profiling数据默认保存到ModelArts训练容器中,则请参考创建ModelArts训练作业中的配置训练参数部分配置好输出参数,训练过程中会自动将训练容器中输出路径下的数据回传至指定的OBS上。 创建performance advisor分析环境。 采集完profiling后如果ModelArts训练作业已经停止,则推荐参照创建诊断任务创建cpu规格的notebook进行性能分析,节省NPU计算资源。完成分析后,可以查看生成的html文件来进行快速的调优,html文件详情请参考查看诊断报告。 下面以开发环境Notebook为例介绍一个典型的性能调优案例。 64卡训练任务,模型为GPT MOE,tensor parallel(tp)为8,pipeline parallel(pp)为4。训练过程中发现每个step耗时均显著增大,基于dynamic_profile方式采集profiling并上传至OBS。选择任意镜像如PyTorch,创建一个2U8GB CPU规格(如果CPU资源充足,建议创建8U32G的分析环境)的notebook开发环境。在notebook中使用performance advisor插件进行性能分析,源数据选择OBS并指定profiling所在的OBS路径。由于pp参数为4,考虑到不同pp stage的计算量存在差异,advisor会自动对不同stage进行计算维度的分析,因此在Advanced Setting中设置分析进程为2(不建议设置太大,避免占用过多CPU资源导致OOM类问题)使能并行分析,加快分析速度,如下图4所示。 图4 基于performance advisor进行性能劣化分析 完成分析后单击下图图5中view查看报告。html(图6)中显示计算维度存在高优先级的AICORE降频问题,分别为pp stage0的8号卡和pp stage3的60号卡。查看对8号卡的降频分析(图7)可以发现节点降频主要影响了FlashAttention和MatMul两类算子,导致这两类算子的计算性能劣化,从而影响了整体的训练性能。按照html中给出的建议,需要检查8号卡和60号卡对应节点的温度和最大功率。 图5 性能分析报告展示 图6 计算维度节点降频问题 图7 节点降频及其影响算子
  • 场景描述 以使用Notebook进行项目开发为例,管理员账号需要拥有ModelArts专属资源池的完全控制权限,以及Notebook所有实例的访问和操作权限。 普通开发者使用开发环境,只需关注对自己Notebook实例的操作权限,包括对自己实例的创建、启动、停止、删除等权限以及周边依赖服务的权限。普通开发者不需要ModelArts专属资源池的操作权限,也不需要查看其他用户的Notebook实例。 图1 账号关系示意图
  • Step3 为用户配置ModelArts的委托访问授权 配置完 IAM 权限之后,需要在ModelArts页面为子账号设置ModelArts访问授权,允许ModelArts访问OBS、SWR、IEF等依赖服务。 此方式只允许主用户为子账号进行配置。因此,本示例中,管理员账号需为所有用户完成访问授权的配置。 使用主用户的账号登录ModelArts服务管理控制台。请注意选择左上角的区域,例如“华南-广州”。 在左侧导航栏单击“权限管理”,进入“权限管理”页面。 单击“添加授权”。在“授权”页面,在“授权对象类型”下面选择“所有用户”,选择“新增委托 ”,为该主用户下面的所有子账号配置委托访问授权。 普通用户:普通用户的委托权限包括了用户使用ModelArts完成AI开发的所有必要功能权限,如数据的访问、训练任务的创建和管理等。一般用户选择此项即可。 自定义:如果对用户有更精细化的权限管理需求,可使用自定义模式灵活按需配置ModelArts创建的委托权限。可以根据实际需在权限列表中勾选要配置的权限。 勾选“我已经详细阅读并同意《ModelArts服务声明》”,单击“创建”,完成委托授权配置。 父主题: 配置ModelArts基本使用权限
  • Step1 创建用户组并加入用户 主用户账号下面可以创建多个子账号,并对子账号的权限进行分组管理。此步骤介绍如何创建用户组、子账号、并将子账号加入用户组中。 主用户登录管理控制台,单击右上角用户名,在下拉框中选择“ 统一身份认证 ”,进入IAM服务。 图1 统一身份认证 创建用户组。在左侧菜单栏中,选择“用户组”。单击右上角“创建用户组”,在“用户组名称”中填入“用户组02”,然后单击“确定”完成用户组创建。 创建完成后,返回用户组列表。通过用户组管理,将已有子账号加入到用户组中。如果没有子用户账号,可以创建子账号并加入用户组。 创建子用户账号并加入用户组。在IAM左侧菜单栏中,选择“用户”,单击右上角“创建用户”,在“创建用户”页面中,添加多个用户。 请根据界面提示,填写必选参数,然后单击“下一步”。 在“加入用户组”步骤中,选择“用户组02”,然后单击“创建用户”。 系统将逐步创建好前面设置的2个用户。 父主题: 配置ModelArts基本使用权限
  • 工作空间 ModelArts的用户需要为不同的业务目标开发算法、管理和部署模型,此时可以创建多个工作空间,把不同应用开发过程的输出内容划分到不同工作空间中,便于管理和使用。 工作空间支持3种访问控制: PUBLIC:租户(主账号和所有子账号)内部公开访问。 PRIVATE:仅创建者和主账号可访问。 INTERNAL:创建者、主账号、指定IAM子账号可访问当授权类型为INTERNAL时需要指定可访问的子账号的账号名,可选择多个。 每个账号每个IAM项目都会分配1个默认工作空间,默认工作空间的访问控制为PUBLIC。 通过工作空间的访问控制能力,可限制仅允许部分人访问对应的工作空间。通过此功能可实现类似如下场景: 教育场景:老师可给每个学生分配1个INTERNAL的工作空间并且限制该工作空间被指定学生访问,这样可使得学生可独立完成在ModelArts上的实验。 企业场景:管理者可创建用于生产任务的工作空间并限制仅让运维人员使用,用于日常调试的工作空间并限制仅让开发人员使用。通过这种方式让不同的企业角色只能在指定工作空间下使用资源。 目前工作空间功能是“受邀开通”状态,作为企业用户您可以通过您对口的技术支持申请开通。 父主题: 权限控制方式
  • 在ModelArts Standard使用run.sh脚本实现OBS和训练容器间的数据传输 自定义容器在ModelArts上训练和本地训练的区别如下图: 图1 本地与ModelArts上训练对比 ModelArts上进行训练比本地训练多了一步OBS和容器环境的数据迁移工作。 增加了和OBS交互工作的整个训练流程如下: 建议使用OBSutil作为和OBS交互的工具,如何在本机安装obsutil可以参考安装和配置OBS命令行工具。 训练数据、代码、模型下载。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil) 启动脚本,用法无切换,一般就是到达执行目录,然后python xxx.py。 训练结果、日志、checkpoints上传。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil) 可以用一个run脚本把整个流程包起来。run.sh脚本的内容可以参考如下示例: #!/bin/bash ##认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 ##本示例以AK和SK保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ##安装obsutil,完成AKSK配置。建议在基础镜像里做好。 #mkdir -p /opt && cd /opt #wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz #tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils #alias obsutil='/opt/utils/obsutil' #obsutil config -i=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_SK} -e=obs.cn-north-4.myhuaweicloud.com ##训练输入复制到容器镜像本地。 #/cache目录的容量较大。 DATA_URL=`echo ${DLS_DATA_URL} | sed /s/s3/obs/` mkdir –p /cache/data /opt/utils/obsutil cp –r –f ${DATA_URL} /cache/data ##执行训练作业。 #涉及conda env切换时。 source /xxxxx/etc/profile.d/conda.sh conda activate xxxenv conda info --envs #启动训练脚本。 cd xxxx python xxx.py ##复制输出结果到OBS目录。 TRAIN_URL=`echo ${DLS_TRAIN_URL} | sed /s/s3/obs/` /opt/utils/obsutil cp –r –f /cache/out ${TRAIN_URL} 把run.sh放到/opt目录,在实际启动任务的时候,使用以下命令启动任务即可: bash –x /opt/run.sh 把run.sh放到/root目录,可以在原镜像里增加一层,这一层就只是COPY这个run脚本。在基础镜像里可以一起把obsutil安装、配置好。参考如下dockerfile: FROM $your_docker_image_tag RUN mkdir -p /opt && cd /opt && \ wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz && \ tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils && \ /opt/utils/obsutil config -i=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_SK} -e=obs.cn-north-4.myhuaweicloud.com COPY run.sh /opt/run.sh ModelArts的容器会有一个/cache目录,这个目录挂载的硬盘容量最大。建议下载数据和中间数据都存到这个目录中,防止因硬盘占满导致任务失败。 父主题: 基于ModelArts Standard运行GPU训练作业
  • 上传镜像 客户端上传镜像,是指在安装了容器引擎客户端的机器上使用docker命令将镜像上传到 容器镜像服务 的镜像仓库。 如果容器引擎客户端机器为云上的E CS 或CCE节点,根据机器所在区域有两种网络链路可以选择: 如果机器与容器镜像仓库在同一区域,则上传镜像走内网链路。 如果机器与容器镜像仓库不在同一区域,则上传镜像走公网链路,机器需要绑定弹性公网IP。 使用客户端上传镜像,镜像的每个layer大小不能大于10G。 上传镜像的容器引擎客户端版本必须为1.11.2及以上。 连接容器 镜像服务 。 登录容器镜像服务控制台。 单击右上角“创建组织”,输入组织名称完成组织创建。请自定义组织名称,本示例使用“deep-learning”,下面的命令中涉及到组织名称“deep-learning”也请替换为自定义的值。 选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。 此处生成的登录指令有效期为24小时,如果需要长期有效的登录指令,请参见获取长期有效登录指令。获取了长期有效的登录指令后,在有效期内的临时登录指令仍然可以使用。 登录指令末尾的 域名 为镜像仓库地址,请记录该地址,后面会使用到。 在安装容器引擎的机器中执行上一步复制的登录指令。 登录成功会显示“Login Succeeded”。 在安装容器引擎的机器上执行如下命令,为镜像打标签。 docker tag [镜像名称1:版本名称1] [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] [镜像名称1:版本名称1]:${image_name}:${image_version}请替换为您所要上传的实际镜像的名称和版本名称。 [镜像仓库地址]:可在SWR控制台上查询,即1.c中登录指令末尾的域名。 [组织名称]:/${organization_name}请替换为您创建的组织。 [镜像名称2:版本名称2]:${image_name}:${image_version}请替换为您期待的镜像名称和镜像版本。 示例: docker tag ${image_name}:${image_version} swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version} 上传镜像至镜像仓库。 docker push [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] 示例: docker push swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version} 上传镜像完成后,返回容器镜像服务控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。
  • 监控资源 用户可以通过资源占用情况窗口查看计算节点的资源使用情况,最多可显示最近三天的数据。在资源占用情况窗口打开时,会定期向后台获取最新的资源使用率数据并刷新。 操作一:如果训练作业使用多个计算节点,可以通过实例名称的下拉框切换节点。 操作二:单击图例“cpuUsage”、“gpuMemUsage”、“gpuUtil”、“memUsage”“npuMemUsage”、“npuUtil”、可以添加或取消对应参数的使用情况图。 操作三:鼠标悬浮在图片上的时间节点,可查看对应时间节点的占用率情况。 表2 参数说明 参数 说明 cpuUsage cpu使用率。 gpuMemUsage gpu内存使用率。 gpuUtil gpu使用情况。 memUsage 内存使用率。 npuMemUsage npu内存使用率。 npuUtil npu使用情况。
  • 上传镜像 客户端上传镜像,是指在安装了容器引擎客户端的机器上使用docker命令将镜像上传到容器镜像服务的镜像仓库。 如果容器引擎客户端机器为云上的ECS或CCE节点,根据机器所在区域有两种网络链路可以选择: 如果机器与容器镜像仓库在同一区域,则上传镜像走内网链路。 如果机器与容器镜像仓库不在同一区域,则上传镜像走公网链路,机器需要绑定弹性公网IP。 使用客户端上传镜像,镜像的每个layer大小不能大于10G。 上传镜像的容器引擎客户端版本必须为1.11.2及以上。 连接容器镜像服务。 登录容器镜像服务控制台。 单击右上角“创建组织”,输入组织名称完成组织创建。请自定义组织名称,本示例使用“deep-learning”,下面的命令中涉及到组织名称“deep-learning”也请替换为自定义的值。 选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击复制登录指令。 此处生成的登录指令有效期为24小时,如果需要长期有效的登录指令,请参见获取长期有效登录指令。获取了长期有效的登录指令后,在有效期内的临时登录指令仍然可以使用。 登录指令末尾的域名为镜像仓库地址,请记录该地址,后面会使用到。 在安装容器引擎的机器中执行上一步复制的登录指令。 登录成功会显示“Login Succeeded”。 在安装容器引擎的机器上执行如下命令,为镜像打标签。 docker tag [镜像名称1:版本名称1] [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] [镜像名称1:版本名称1]:${image_name}:${image_version}请替换为您所要上传的实际镜像的名称和版本名称。 [镜像仓库地址]:可在SWR控制台上查询,即1.c中登录指令末尾的域名。 [组织名称]:/${organization_name}请替换为您创建的组织。 [镜像名称2:版本名称2]:${image_name}:${image_version}请替换为您期待的镜像名称和镜像版本。 示例: docker tag ${image_name}:${image_version} swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version} 上传镜像至镜像仓库。 docker push [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2] 示例: docker push swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version} 上传镜像完成后,返回容器镜像服务控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。
  • 操作步骤 下载MLNX_OFED_LINUX-4.3-1.0.1.0-ubuntu16.04-x86_64.tgz。 进入地址,单击“Download”,选择“Archive Versions”,“Version”选择“4.3-1.0.1.0”,“OS Distribution”选择“Ubuntu”,“OS Distribution Version”选择“Ubuntu 16.04”,“Architecture”选择“x86_64”,下载MLNX_OFED_LINUX-4.3-1.0.1.0-ubuntu16.04-x86_64.tgz。 宿主机安装的infiniband驱动版本为4.3-1.0.1.0,容器镜像中安装的infiniband驱动版本需要与宿主机版本匹配,即同为4.3-1.0.1.0。 可能部分区域的网卡较新,会出现更高版本的infiniband驱动版本,如果您遇到了infiniband驱动安装后,仍然无法使能infiniband网卡的问题,可以咨询相关运维人员以确认宿主机的实际infiniband驱动版本。 图1 下载驱动 参考如下Dockerfile中,以在容器镜像中安装infiniband驱动。 USER root # copy MLNX_OFED_LINUX-4.3-1.0.1.0-ubuntu16.04-x86_64.tgz to docker image RUN tar xzvf MLNX_OFED_LINUX-4.3-1.0.1.0-ubuntu16.04-x86_64.tgz && \ cd MLNX_OFED_LINUX-4.3-1.0.1.0-ubuntu16.04-x86_64 && \ chmod +x mlnxofedinstall && \ ./mlnxofedinstall --user-space-only --without-fw-update --force && \ cd - && \ rm MLNX_OFED_LINUX-4.3-1.0.1.0-ubuntu16.04-x86_64.tgz && \ rm -rf MLNX_OFED_LINUX-4.3-1.0.1.0-ubuntu16.04-x86_64 USER ma-user 验证infiniband驱动是否安装成功。 在训练代码中执行以下命令,如果无报错则infiniband驱动安装成功: os.system("ofed_info")
  • Notebook 表1 Notebook挂载点介绍 挂载点 是否只读 备注 /home/ma-user/work/ 否 客户数据的持久化目录。 /data 否 客户PFS的挂载目录。 /cache 否 裸机规格时支持,用于挂载宿主机NVMe的硬盘。 /train-worker1-log 否 兼容训练任务调试过程。 /dev/shm 否 用于PyTorch引擎加速。 /modelarts 是 / /etc/secret-volume 是 / /etc/sudoers 是 / /etc/localtime 是 / var/run/secrets/kubernetes.io/serviceaccount 是 /
  • run.sh脚本测试ModelArts训练整体流程 自定义容器在ModelArts上训练和本地训练的区别如下图: 图1 本地与ModelArts上训练对比 ModelArts上进行训练比本地训练多了一步OBS和容器环境的数据迁移工作。 增加了和OBS交互工作的整个训练流程如下: 建议使用OBSutil作为和OBS交互的工具,如何在本机安装obsutil可以参考obsutil安装和配置。 训练数据、代码、模型下载。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil) 启动脚本,用法无切换,一般就是到达执行目录,然后python xxx.py。 训练结果、日志、checkpoints上传。(本地使用硬盘挂载或者docker cp,在ModelArts上使用OBSutil) 可以用一个run脚本把整个流程包起来。run.sh脚本的内容可以参考如下示例: #!/bin/bash ##认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 ##本示例以AK和SK保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ##安装obsutil,完成AKSK配置。建议在基础镜像里做好。 #mkdir -p /opt && cd /opt #wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz #tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils #alias obsutil='/opt/utils/obsutil' #obsutil config -i=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_SK} -e=obs.cn-north-4.myhuaweicloud.com ##训练输入复制到容器镜像本地。 #/cache目录的容量较大。 DATA_URL=`echo ${DLS_DATA_URL} | sed /s/s3/obs/` mkdir –p /cache/data /opt/utils/obsutil cp –r –f ${DATA_URL} /cache/data ##执行训练任务。 #涉及conda env切换时。 source /xxxxx/etc/profile.d/conda.sh conda activate xxxenv conda info --envs #启动训练脚本。 cd xxxx python xxx.py ##复制输出结果到OBS目录。 TRAIN_URL=`echo ${DLS_TRAIN_URL} | sed /s/s3/obs/` /opt/utils/obsutil cp –r –f /cache/out ${TRAIN_URL} 把run.sh放到/opt目录,在实际启动任务的时候,使用以下命令启动任务即可: bash –x /opt/run.sh 把run.sh放到/root目录,可以在原镜像里增加一层,这一层就只是COPY这个run脚本。在基础镜像里可以一起把obsutil安装、配置好。参考如下dockerfile: FROM $your_docker_image_tag RUN mkdir -p /opt && cd /opt && \ wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz && \ tar -xzvf obsutil_linux_amd64.tar.gz && mv obsutil_linux_amd64_*/ utils && \ /opt/utils/obsutil config -i=${HUAWEICLOUD_SDK_AK} -k=${HUAWEICLOUD_SDK_SK} -e=obs.cn-north-4.myhuaweicloud.com COPY run.sh /opt/run.sh ModelArts的容器会有一个/cache目录,这个目录挂载的硬盘容量最大。建议下载数据和中间数据都存到这个目录中,防止因硬盘占满导致任务失败。 父主题: FAQ
  • Vnt1机型软件版本建议:gpu driver version : 440.95.01 gpu driver version : 440.95.01(GPU驱动在宿主机中安装,镜像中无需安装) cuda runtime version : 10.2(PyTorch自带,无需关心) cudnn version : 7.6.x(PyTorch自带,无需关心) pytorch version : 1.x.x+cu102
  • Vnt1机型软件版本建议:gpu driver version : 470.57.02 gpu driver version : 470.57.02(GPU驱动在宿主机中安装,镜像中无需安装) cuda runtime version : 10.2(PyTorch自带,无需关心) cudnn version : 7.6(PyTorch自带,无需关心) pytorch version : 1.X.X-cu102
  • 上传算法至SFS 下载Swin-Transformer代码。 git clone --recursive https://github.com/microsoft/Swin-Transformer.git 修改lr_scheduler.py文件,把第27行:t_mul=1. 注释掉。 修改data文件夹下imagenet22k_dataset.py,把第28行:print("ERROR IMG LOADED: ", path) 注释掉。 修改data文件夹下的build.py文件,把第112行:prefix = 'ILSVRC2011fall_whole',改为prefix = 'ILSVRC2021winner21k_whole'。 在Swin-Transformer目录下创建requirements.txt指定python依赖库: # requirements.txt内容如下 timm==0.4.12 termcolor==1.1.0 yacs==0.1.8 准备run.sh文件中所需要的obs文件路径。 准备imagenet数据集的分享链接 勾选要分享的imagenet21k_whole数据集文件夹,单击分享按钮,选择分享链接有效期,自定义提取码,例如123456,单击“复制链接”,记录该链接。 准备obsutil_linux_amd64.tar.gz的分享链接 单击此处下载obsutil_linux_amd64.tar.gz,将其上传至OBS桶中,设置为公共读。单击属性,单击复制链接。 链接样例如下: https://${bucketname_name}.obs.cn-north-4.myhuaweicloud.com/${folders_name}/pytorch.tar.gz 在Swin-Transformer目录下,创建运行脚本run.sh。 脚本中的"SRC_DATA_PATH=${imagenet数据集在obs中分享链接}",需要替换为上一步中的imagenet21k_whole文件夹分享链接。 脚本中的"https://${bucket_name}.obs.cn-north-4.myhuaweicloud.com/${folder_name}/obsutil_linux_amd64.tar.gz",需要替换为上一步中obsutil_linux_amd64.tar.gz在OBS上的路径(需将文件设置为公共读)。 单机单卡运行脚本: # 在代码主目录下创建一个run.sh,内容如下 #!/bin/bash # 从obs中下载数据到本地SSD盘 DIS_DATA_PATH=/cache SRC_DATA_PATH=${imagenet数据集在obs中分享链接} OBSUTIL_PATH=https://${bucket_name}.obs.cn-north-4.myhuaweicloud.com/${folder_name}/obsutil_linux_amd64.tar.gz mkdir -p $DIS_DATA_PATH && cd $DIS_DATA_PATH && wget $OBSUTIL_PATH && tar -xzvf obsutil_linux_amd64.tar.gz && $DIS_DATA_PATH/obsutil_linux_amd64*/obsutil share-cp $SRC_DATA_PATH $DIS_DATA_PATH/ -ac=123456 -r -f -j 256 && cd - IMAGE_DATA_PATH=$DIS_DATA_PATH/imagenet21k_whole MASTER_PORT="6061" /home/ma-user/anaconda3/envs/pytorch/bin/python -m torch.distributed.launch --nproc_per_node=1 --master_addr localhost --master_port=$MASTER_PORT main.py --data-path $IMAGE_DATA_PATH --cfg ./configs/swin/swin_base_patch4_window7_224_22k.yaml --local_rank 0 多机多卡运行脚本: # 创建run.sh #!/bin/bash # 从obs中下载数据到本地SSD盘 DIS_DATA_PATH=/cache SRC_DATA_PATH=${imagenet数据集在obs中分享链接} OBSUTIL_PATH=https://${bucket_name}.obs.cn-north-4.myhuaweicloud.com/${folder_name}/obsutil_linux_amd64.tar.gz mkdir -p $DIS_DATA_PATH && cd $DIS_DATA_PATH && wget $OBSUTIL_PATH && tar -xzvf obsutil_linux_amd64.tar.gz && $DIS_DATA_PATH/obsutil_linux_amd64*/obsutil share-cp $SRC_DATA_PATH $DIS_DATA_PATH/ -ac=123456 -r -f -j 256 && cd - IMAGE_DATA_PATH=$DIS_DATA_PATH/imagenet21k_whole MASTER_ADDR=$(echo ${VC_WORKER_HOSTS} | cut -d "," -f 1) MASTER_PORT="6060" NNODES="$VC_WORKER_NUM" NODE_RANK="$VC_TASK_INDEX" NGPUS_PER_NODE="$MA_NUM_GPUS" /home/ma-user/anaconda3/envs/pytorch/bin/python -m torch.distributed.launch --nnodes=$NNODES --node_rank=$NODE_RANK --nproc_per_node=$NGPUS_PER_NODE --master_addr $MASTER_ADDR --master_port=$MASTER_PORT main.py --data-path $IMAGE_DATA_PATH --cfg ./configs/swin/swin_base_patch4_window7_224_22k.yaml 推荐先使用单机单卡运行脚本,待正常运行后再改用多机多卡运行脚本。 多机多卡run.sh中的“VC_WORKER_HOSTS”、“VC_WORKER_NUM”、“VC_TASK_INDEX”、“MA_NUM_GPUS”为ModelArts训练容器中预置的环境变量。训练容器环境变量详细介绍可参考查看训练容器环境变量。 通过obsutils,将代码文件夹放到OBS上,然后通过OBS将代码传至SFS相应目录中。 在SFS中将代码文件Swin-Transformer-main设置归属为ma-user。 chown -R ma-user:ma-group Swin-Transformer 执行以下命令,去除Shell脚本的\r字符。 cd Swin-Transformer sed -i 's/\r//' run.sh Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致运行报错“$'\r': command not found”,因此需要去除Shell脚本的\r字符。 父主题: 多机多卡
  • 操作步骤 登录Imagenet数据集下载官网地址,下载Imagenet21k数据集:http://image-net.org/ 下载格式转换后的annotation文件:ILSVRC2021winner21k_whole_map_train.txt和ILSVRC2021winner21k_whole_map_val.txt。 下载完成后将上述3个文件数据上传至OBS桶中的imagenet21k_whole文件夹中。上传方法请参考上传数据和算法至OBS(首次使用时需要)。
  • 准备数据 登录coco数据集下载官网地址:https://cocodataset.org/#download 下载coco2017数据集的Train(18GB)、Val images(1GB)、Train/Val annotations(241MB),分别解压后并放入coco文件夹中。 下载完成后,将数据上传至SFS相应目录中。由于数据集过大,推荐先通过obsutil工具将数据集传到OBS桶后,再将数据集迁移至SFS。 在本机机器上运行,通过obsutil工具将本地数据集传到OBS桶。 # 将本地数据传至OBS中 # ./obsutil cp ${数据集所在的本地文件夹路径} ${存放数据集的obs文件夹路径} -f -r # 例如 ./obsutil cp ./coco obs://your_bucket/ -f -r 登录ECS服务器,通过obsutil工具将数据集迁移至SFS,样例代码如下: # 将OBS数据传至SFS中 # ./obsutil cp ${数据集所在的obs文件夹路径} ${SFS文件夹路径} -f -r # 例如 ./obsutil cp obs://your_bucket/coco/ /mnt/sfs_turbo/ -f -r /mnt/sfs_turbo/coco文件夹内目录结构如下: coco |---annotations |---train2017 |---val2017 更多obsutil的操作,可参考obsutil简介。 将文件设置归属为ma-user: chown -R ma-user:ma-group coco
  • 监控资源 用户可以通过资源占用情况窗口查看计算节点的资源使用情况,最多可显示最近三天的数据。在资源占用情况窗口打开时,会定期向后台获取最新的资源使用率数据并刷新。 操作一:如果训练作业使用多个计算节点,可以通过实例名称的下拉框切换节点。 操作二:单击图例“cpuUsage”、“gpuMemUsage”、“gpuUtil”、“memUsage”“npuMemUsage”、“npuUtil”、可以添加或取消对应参数的使用情况图。 操作三:鼠标悬浮在图片上的时间节点,可查看对应时间节点的占用率情况。 表1 参数说明 参数 说明 cpuUsage cpu使用率。 gpuMemUsage gpu内存使用率。 gpuUtil gpu使用情况。 memUsage 内存使用率。 npuMemUsage npu内存使用率。 npuUtil npu使用情况。 父主题: 单机单卡
  • 多机多卡 资源购买: 购买 虚拟私有云VPC 购买弹性文件服务SFS 购买 对象存储服务 OBS 购买容器镜像服务SWR 创建网络 购买ModelArts专属资源池 购买弹性 云服务器ECS 基本配置: 权限配置 专属资源池VPC打通 ECS服务器挂载SFS Turbo存储 在ECS中创建ma-user和ma-group obsutils安装和配置 (可选)工作空间配置 训练: 上传数据至OBS(首次使用时需要) 上传算法至SFS 创建训练任务
  • 准备数据 单击下载动物数据集至本地,并解压。 通过obsutil将数据集上传至OBS桶中。 ./obsutil cp ./dog_cat_1w obs://${your_obs_buck}/demo/ -f -r OBS支持多种文件上传方式,当文件少于100个时,可以在OBS Console中上传,当文件大于100个时,推荐使用工具,推荐OBS Browser+(win)、obsutil(linux)。上述例子为obsutil使用方法。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全