在AI模型训练领域,混合精度训练和分布式训练技术是提升效率的关键。NVIDIA Apex作为PyTorch生态中的重要工具库,为这些技术提供了便捷实现。而针对华为昇腾AI处理器,通过Apex Patch适配的apex for Ascend则让昇腾用户也能享受类似的效率提升。下面我将详细解析apex for Ascend的编译流程、环境配置要点及常见问题解决方案,为昇腾昇腾平台部署AI训练任务提供全面参考。
在深入编译流程前,有必要明确两个核心概念的区别与联系:
容器化编译因其环境隔离性和一致性,成为推荐的编译方式。整个流程包括代理配置、镜像构建、容器操作及编译安装四个关键环节:
在受限网络环境中,代理配置是确保编译过程顺利进行的前提。
通过环境变量配置系统代理,适用于curl、wget等命令行工具:
# 替换为实际代理地址和端口proxy_ip="your_proxy_ip"proxy_port="your_proxy_port"export http_proxy="http://${proxy_ip}:${proxy_port}"export https_proxy="http://${proxy_ip}:${proxy_port}"Docker服务作为独立系统进程,需要单独配置代理:
docker info | grep -i proxy
sudo mkdir -p /etc/systemd/system/docker.service.d
[Service]Environment="HTTP_PROXY=http://your_proxy_ip:your_proxy_port"
[Service]Environment="HTTPS_PROXY=http://your_proxy_ip:your_proxy_port"
sudo systemctl daemon-reloadsudo systemctl restart docker
完成代理配置后,即可进行容器镜像的构建与运行:
git clone -b master https://gitcode.com/Ascend/apex.git
# 根据实际架构选择目录cd apex/scripts/docker/x86 # 或 apex/scripts/docker/armdocker build -t manylinux-builder:v1 .
# 将{code_path}替换为本地apex代码的实际路径docker run -it -v /{code_path}/apex:/home/apex manylinux-builder:v1 bash进入容器后,依次完成PyTorch安装与Apex编译:
pip3.8 install torch==2.1.0
提示:可参考PyTorch官方文档( https://pytorch.org/get-started/previous-versions/)选择适合的版本安装命令。
cd /home/apex bash scripts/build.sh --python=3.8
对于需要自定义基础环境的场景,可采用直接编译方式。该方案跳过官方容器镜像,基于自有镜像(如Ubuntu、openEuler)构建环境,架构图如下:
操作步骤如下:
git clone -b master https://gitcode.com/Ascend/apex.git
# Ubuntu/Debian系统示例apt-get update && apt-get install -y python3.8 python3.8-dev gcc g++ make# OpenEuler系统示例yum install -y python3.8 python3.8-devel gcc gcc-c++ make
cd apex bash scripts/build.sh --python=3.8
编译完成后,在dist目录会生成对应版本的wheel包,执行以下命令完成安装:
cd apex/dist/# 先卸载可能存在的旧版本pip3 uninstall apex -y# 安装新编译的版本,注意替换{version}为实际版本信息pip3 install --upgrade apex-0.1+ascend-{version}.whl安装验证可通过简单的Python导入测试:
import apexprint("Apex for Ascend installed successfully. Version:", apex.__version__)_ 【问题现象】_构建镜像过程中出现网络超时或无法连接仓库的错误。
_ 【解决思路】_这类问题通常与代理配置相关,需确保:
【报错截图】
提示链接torch库失败,我们通过
find / -name "libtorch.so" 2>/dev/null命令确认torch库路径 回显如下
且import torch正常说明torch应该是正常安装的。 检查
apex/script/build.sh脚本可以看到使用的应用完patch后NV apex仓库的setup.py脚本进行编译
在
apex/apex/setup.py中搜索torch关键字寻找链接torch的配置
查看
func get_package_dir()
发现未输入
--user参数时脚本默认将包路径配置为
/usr/local/lib/python3.11/site-packages 与前面torch安装路径不一致导致查找torch库失包
_
【解决方法】 _直接修改
setup.py中
get_package_dir的
package_dir默认值
bash package_dir = f'{sys.prefix}/lib/python{py_version}/site-packages' -> package_dir = f'{sys.prefix}/lib64/python{py_version}/site-packages'
然后执行python setup.py --cpp_ext bdist_wheel (执行scritp/build.sh会重新clone apex导致修改被覆盖) 成功后会在dist目录生成apex whl包
apex for Ascend作为昇腾平台上实现高效训练的重要工具,其编译过程涉及环境配置、容器操作、跨平台适配等多个环节。本文我们介绍的容器化编译和直接编译两种方案,开发者可根据实际环境需求选择合适的方式。在遇到问题时,应重点关注网络代理配置和系统架构差异带来的路径问题,通过针对性调整确保编译顺利完成。
掌握apex for Ascend的编译部署技术,能够帮助开发者充分发挥昇腾AI处理器的性能优势,为大规模AI模型训练提供有力支持。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049839/viewspace-3130526/ ,如需转载,请注明出处,否则将追究法律责任。