1. 镜像选择与容器创建:别在第一步就踩坑
很多朋友一上来就直奔主题,想赶紧把ModelZoo跑起来,结果在第一步选镜像和建容器的时候就栽了跟头。我刚开始用昇腾的时候也这样,总觉得镜像嘛,找个最新的、名字里带“modelzoo”的准没错。结果发现,昇腾镜像仓库里那些标着“pytorch-modelzoo”的镜像,状态基本都是“停止维护”。这就好比你想装个最新的Windows系统,结果找了个十年前的安装盘,驱动和软件兼容性肯定一堆问题。
这里有个关键概念得先搞清楚:CANN版本。你可以把它理解为昇腾NPU的“CUDA”。它决定了底层计算库的能力和兼容性。如果镜像里的CANN版本太老,你后续安装新版的torch_npu适配库时,大概率会碰壁。所以,我们的策略是:找一个CANN版本较新、且仍在持续更新的基础镜像,然后自己动手在里面搭建PyTorch环境。
目前看来,ascend-mindspore这个镜像系列更新比较勤快。比如,我写这篇文章的时候,它已经更新到了CANN 8.0.RC3。为了稳妥起见,我选择了24.0.RC2-A1-ubuntu20.04这个版本。这里的“A1”对应你的NPU卡型号,如果你的卡是A2,那就选对应的A2镜像,千万别搞错,否则驱动挂载会出问题。
选好了镜像,拉取命令很简单:
docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/ascend-mindspore:24.0.RC2-A1-ubuntu20.04
接下来是创建容器,这一步的命令参数有点长,但每个都很有讲究,漏了可能后面就报各种莫名奇妙的错:
docker run -it -u root --name train_env --shm-size=256g \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /var/log/npu/conf/slog/slog.conf:/var/log/npu/conf/slog/slog.conf \
-v /var/log/npu/slog/:/var/log/npu/slog \
-v /var/log/npu/profiling/:/var/log/npu/profiling \
-v /var/log/npu/dump/:/var/log/npu/dump \
-v /var/log/npu/:/usr/slog \
-v /media/:/media/ \
<你的IMAGE_ID> /bin/bash
我解释几个容易忽略的点:
--shm-size=256g:共享内存设大点,很多并行编译和数据处理需要大内存,默认值太小容易导致进程崩溃。--device:这里把几个关键的NPU设备文件映射到容器里,这是容器能调用NPU算力的基础。-v挂载:这一串挂载操作,是把宿主机上已经安装好的NPU驱动、固件、日志目录等全部映射进去。核心思想是“容器只提供运行环境,硬件驱动和底层工具集用宿主机现成的”。这样能保证环境的一致性,也省去了在容器内重复安装复杂驱动


3621

被折叠的 条评论
为什么被折叠?



