后续操作
- 为了提升模型运行速度,建议开启使用二进制算子,参考环境准备安装二进制算子包后,参考如下方式开启:
- 单卡场景下,修改训练入口文件例如main.py文件,在import torch_npu下方添加加粗字体信息。
import torch import torch_npu torch_npu.npu.set_compile_mode(jit_compile=False) ......
- 多卡场景下,如果拉起多卡训练的方式为mp.spawn,则torch_npu.npu.set_compile_mode(jit_compile=False)必须加在进程拉起的主函数中才能使能二进制,否则使能方式与单卡场景相同。
if is_distributed: mp.spawn(main_worker, nprocs=ngpus_per_node, args=(ngpus_per_node, args)) else: main_worker(args.gpu, ngpus_per_node, args) def main_worker(gpu, ngpus_per_node, args): # 加在进程拉起的主函数中 torch_npu.npu.set_compile_mode(jit_compile=False) ......
- 单卡场景下,修改训练入口文件例如main.py文件,在import torch_npu下方添加加粗字体信息。
- 如果启用了“distributed”参数,迁移后会生成如下run_distributed_npu.sh文件,在执行迁移后的模型之前需要把文件中的“please input your shell script here”语句替换成执行模型原来的训练shell脚本的命令。执行run_distributed_npu.sh文件后会生成指定NPU的log日志。
export MASTER_ADDR=127.0.0.1 export MASTER_PORT=29688 export HCCL_WHITELIST_DISABLE=1 NPUS=($(seq 0 7)) export RANK_SIZE=${#NPUS[@]} rank=0 for i in ${NPUS[@]} do export DEVICE_ID=${i} export RANK_ID=${rank} echo run process ${rank} please input your shell script here > output_npu_${i}.log 2>&1 & let rank++ done
表1 参数说明 参数
说明
MASTER_ADDR
指定训练服务器的ip
MASTER_PORT
指定训练服务器的端口
HCCL_WHITELIST_DISABLE
hccl后端环境
NPUS
指定在特定NPU上运行
RANK_SIZE
指定调用卡的数量
DEVICE_ID
指定调用的device_id
RANK_ID
指定调用卡的逻辑ID
- 若用户训练脚本中包含昇腾NPU平台不支持的torch.nn.DataParallel接口,需要手动修改成torch.nn.parallel.DistributedDataParallel接口执行多卡训练,参考迁移单卡脚本为多卡脚本进行修改。
- 若用户训练脚本中包含昇腾NPU平台不支持的torch.cuda.default_generators接口,需要手动修改为torch_npu.npu.default_generators接口。
- 若用户训练脚本中包含昇腾NPU平台不支持的amp_C模块,需要用户手动删除后再进行训练。
- 若用户训练脚本中包含torch.cuda.get_device_capability接口,迁移后在昇腾AI处理器上运行时,会返回“None”值,如遇报错,需要用户将“None”值手动修改为固定值。torch.cuda.get_device_properties接口迁移后在昇腾AI处理器上运行时,返回值不包含minor和major属性,建议用户注释掉调用minor和major属性的代码。
- 由于转换后的脚本与原始脚本平台不一致,迁移后的脚本在调试运行过程中可能会由于算子差异等原因而抛出异常,导致进程终止,该类异常需要用户根据异常信息进一步调试解决。
- 分析迁移后可以参考原始脚本提供的训练流程进行训练。