编译优化-torch_npu
编译优化方法
- 依赖安装。
torch_npu构建依赖PyTorch,目前需要参考编译优化-Pytorch用毕昇编译器构建PyTorch之后,在环境里重新安装PyTorch,然后再编译torch_npu。
torch_npu推荐在容器里进行编译,参考https://gitee.com/ascend/pytorch下的“README”文件中"使用源代码进行安装" 一栏拉取镜像。以下描述均以torch_npu v2.1.0版为例。
参考安装毕昇编译器配置毕昇编译器环境。
- 获取源码。
- 根据需要的优化类型进行相应编译参数设置并进行编译,LTO和PGO优化可以单独使用,也可以叠加一起使用,当前torch_npu已支持基于毕昇编译器的编译优化选项。
- LTO优化
- 配置编译参数,设置环境变量。
export CC=clang export CXX=clang++
- 执行编译命令。
cd torch_npu git clean -dfx bash ci/build.sh --python=3.8 --enable_lto
- 执行ls dist命令,查看编译成功的whl包。
- 安装whl包。
pip install torch_npu-*.whl --force-reinstall --no-deps
- 配置编译参数,设置环境变量。
- LTO+PGO优化
- 一次编译(插桩编译)
- 配置编译参数,设置环境变量。
export CC=clang export CXX=clang++
- 执行编译命令。
cd torch_npu git clean -dfx bash ci/build.sh --python=3.8 --enable_lto --enable_pgo=1
- 配置编译参数,设置环境变量。
- 安装一次编译后的torch_npu的whl包,执行如下命令:
pip3 install /path/to/*.whl --force-reinstall --no-deps
- 运行需要优化的模型,采集Profile信息。
- 模型跑完之后,程序停止执行,在上述文件路径有已生成的profraw格式文件。
- Profile数据格式转换。
llvm-profdata merge /path/to/profile -o default.profdata
该命令可以合并/path/to/profile目录下所有的profraw文件,profile数据文件不受机器环境影响,可以迁移到其他机器上使用。
- 二次编译(使用Profile数据)
配置profdata文件:将前一步骤中生成的default.profdata文件拷贝到torch_npu目录下。请将profdata文件命名为default.profdata。
执行编译命令:cd torch_npu git clean -dfx bash ci/build.sh --python=3.8 --enable_lto --enable_pgo=2
二次编译后的torch_npu的whl包为正式使用的高性能包。
- 一次编译(插桩编译)
- LTO优化
常见问题
- Error while loading shared libraries: libomp.so: cannot open shared object file: No such file or directory.
torch_npu构建时默认使用了openmp。torch_npu运行环境需要安装毕昇编译器包,并设置LD_LIBRARY_PATH环境变量,以便可以正确找到动态库libomp.so。
- PyTorch和torch_npu中profile生成路径是否可以相同?
- 运行时报错未定义符号,其中包含如basic_string等字样。
可能是编译时c++11 abi不一致导致,建议查看PyTorch和torch_npu的build目录下的compile_commands.json文件,检查宏DGLIBCXX_USE_CXX11_ABI的值是否一致。若不一致,设置环境变量export _GLIBCXX_USE_CXX11_ABI=0,再重新编译PyTorch。
父主题: 编译优化