以PyTorch 2.1为例进行编译优化。
PyTorch推荐在容器里进行编译,参考使用源代码进行安装章节拉取镜像。
毕昇环境变量配置,详情请参见安装毕昇编译器 。
git clone -b v2.1.0 https://github.com/pytorch/pytorch.git pytorch-2.1.0 cd pytorch-2.1.0 git submodule sync git submodule update --init --recursive
cd pytorch-2.1.0 pip install -r requirements.txt
需注释掉下图中红框处标注的内容"append_cxx_flag_if_supported("-Werror=cast-function-type" CMAKE_CXX_FLAGS) ",屏蔽告警错误。
export CMAKE_C_FLAGS="-flto=thin -fuse-ld=lld" export CMAKE_CXX_FLAGS="-flto=thin -fuse-ld=lld" export CC=clang export CXX=clang++ export USE_XNNPACK=0
cd pytorch-2.1.0 git clean -dfx python3 setup.py bdist_wheel
pip3 install /path/to/*.whl --force-reinstall --no-deps
export CMAKE_C_FLAGS="-flto=thin -fuse-ld=lld -fprofile-generate=/path/to/profile" export CMAKE_CXX_FLAGS="-flto=thin -fuse-ld=lld -fprofile-generate=/path/to/profile" export CC=clang export CXX=clang++ export USE_XNNPACK=0
"/path/to/profile"指后续运行PyTorch时要存储的profile数据文件的路径。
cd pytorch-2.1.0 git clean -dfx python3 setup.py bdist_wheel
export OMP_PROC_BIND=false
OMP_PROC_BIND会影响模型运行时的性能,无论是采集还是优化,运行模型前都需注意将该环境变量设置为false。
pip3 install /path/to/*.whl --force-reinstall --no-deps
根据实际情况操作,正常跑模型即可,基于插桩的二进制在运行时会比正常二进制性能差,无需关注。
llvm-profdata merge /path/to/profile -o default.profdata
该命令可以合并/path/to/profile目录下所有的profraw文件,profile数据文件不受机器环境影响,可以迁移到其他机器上使用。
export CMAKE_C_FLAGS="-flto=thin -fuse-ld=lld -fprofile-use=/path/to/profile/default.profdata" export CMAKE_CXX_FLAGS="-flto=thin -fuse-ld=lld -fprofile-use=/path/to/profile/default.profdata"
cd pytorch-2.1.0 git clean -dfx python3 setup.py bdist_wheel
二次编译后PyTorch的whl包为正式使用的高性能包。
export OMP_PROC_BIND=false