Created 04/25/2020 at 10:34PM
最近在学习如何让模型在CPU机器上部署起来,并且要达到速度要求,一般来说,可能需要用C++重写整个模型,将神经网络计算用AVX C语言库和MKL库重写。一个工程化之后的模型速度上可以有极大地提升(相比于pytorch直接用cpu inference),但要学的东西也很多,我们就从配置环境开始吧😀。在这之前,你最好需要一个支持AVX-512指令的intel CPU,不小于2GB的内存和一个Linux系统(本文基于root用户下的CentOS)。
cmake-x.x.x-Linux-x86_64.tar.gz
的文件至服务器tar -xzvf cmake-x.x.x-Linux-x86_64.tar.gz
mv cmake-x.x.x-Linux-x86_64 /opt/cmake-x.x.x
ln -s /opt/cmake-x.x.x/bin/cmake /usr/bin/cmake
cmake --version
tar -xvzf gcc-x.x.x.tar.gz
gcc-x.x.x
,运行./contrib/download_prerequisites
下载依赖mkdir temp
cd temp && ../configure --prefix=/usr/local/gcc-x.x.x --enable-languages=c,c++ --disable-multilib
,其中--prefix
表示gcc安装路径,--enable-languages
表示你想要gcc支持的语言,--disable-multilib
表示取消32位支持make -j
,-j
时make针对多核的优化,会加快编译的速度,但也会导致你比较难找到具体的报错或是导致编译失败,建议先用make
确定没啥大问题之后,再用make -j
来加速你的编译make install
进行安装,成功之后就可以删除temp
文件夹,并且卸载掉原先版本的gcc,yum remove gcc
ln -s /usr/local/gcc-x.x.x/bin/gcc /usr/bin/gcc && ln -s /usr/local/gcc-x.x.x/bin/g++ /usr/bin/g++
find / -name "libstdc++.so*"
,复制过去,cp /usr/local/gcc-x.x.x/lib64/libstdc++.so.6.0.xx /usr/lib64/
,再更新软链,rm -rf /usr/lib64/libstdc++.so.6 && ln -s /usr/lib64/libstdc++.so.6.0.xx /usr/lib64/libstdc++.so.6
,大功告成,测试gcc --version
./install.sh
,如果在root下运行,mkl会安装到/opt
下面,如果是user运行会安装到/home/user
中gcc -I/opt/intel/mkl/include demo.c -lmkl_core -lmkl_intel_lp64 -lmkl_sequential -L/opt/intel/mkl/lib/intel64 -L/opt/intel/lib/intel64
,对应到cmake就是link_directories(/opt/intel/lib/intel64)
link_directories(/opt/intel/mkl/lib/intel64)
include_directories(/opt/intel/mkl/include)
target_link_libraries(main mkl_intel_lp64)
target_link_libraries(main mkl_sequential)
target_link_libraries(main mkl_core)
./install.sh
,如果在root下运行,mkl会安装到/opt
下面,如果是user运行会安装到/home/user
中ln -s /opt/intel/compilers_and_libraries/linux/bin/intel64/icc /usr/bin/icc && ln -s /opt/intel/compilers_and_libraries/linux/bin/intel64/icpc /usr/bin/icpc
icc --version && icpc --version
,当然中途你可能会遇到各种小问题,相信善用Google会让你的问题得到解决的🙂