由于Pytorch官方没有发布基于Arm架构的安装包,互联网上的第三方编译出来的Pytorch1.6的安装包要依赖libc6_2.28这个版本,而DLAP221上的系统中libc不支持这个版本,尝试过通过源码升级libc6,但是由于libc6影响的软件包太多,没有成功,所以采用源码编译pytorch1.6的方式来安装。
Torch 编译及安装
1. 安装依赖
首先安装一些编译需要的依赖库:
sudo apt-get install libopenblas-dev cython3 libatlas-base-dev m4 libblas-dev cmake
安装python的包
sudo pip3.7.5 install numpy pyyaml cpython setuptools wheel pillow
2. 编译Torch
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
git checkout v1.6.0 #这里选择1.6版
git submodule sync
git submodule update --init --recursive
由于DLAP是不支持CUDA和MKLDNN的,CUDA是nv的,MKLDNN是intel的, 我们的DLAP221也只做推理,分布式也不要了。所以我们设置以下的环境变量
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1
export MAX_JOBS=4 #这里设置4是因为DLAP221是4核
export NO_NNPACK=1 #NNPACK:是神经网络计算的加速包,官网显示其支持ARM64,但是由于需要ARM NEON支持,ATLAS200不支持,编译报错
export NO_QNNPACK=1 #是一种用于低精度高性能神经网络推理的移动优化库,主要应用于移动设备,因此关闭;
export NO_XNNPACK=1 #XNNPACK是QNNPACK的替代版本
进行完以上的配置,我们可以编译了
#本地安装
python setup.py install
#打包成whl,打包成功后这个文件在dist目录里面
python setup.py bdist_wheel
编译时一个漫长的过程,在DLAP221上大概花了5个小时左右。
3. 编译问题解决
编译出现虚拟内存无法分配错误:
virtual memory exhausted: Cannot allocate memory
编译 torch 需要花费大量的内存,DLAP221没有设置swap交换分区,可以用swap扩展内存的方法。
mkdir /opt/images/ #可以放在自己喜欢的位置如/var/swap
dd if=/dev/zero of=/opt/images/swap bs=1024 count=4096000 #创建4G swap,我尝试创建2G,但是还是不够用
mkswap /opt/images/swap #格式化
swapon /opt/images/swap #使能swap
使用完毕后可以关掉swap:
swapoff swap
rm -f /opt/images/swap
文件也可以不删除,留着以后使用,关键是你的硬盘够用。
4. 安装Torch
cd dist
sudo pip3.7.5 install ./torch-1.6.0a0+b31f58d-cp37-cp37m-linux_aarch64.whl
5. 验证Torch
HwHiAiUser@davinci-mini:~/pytorch/dist$ python3.7.5
Python 3.7.5 (default, Nov 23 2020, 08:14:01)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> #不报错,证明ok了
TorchVision编译及安装
编译完pytorch以后还需要安装torchversion,pytorch1.6.0对应的torchvision是0.7.0的版本,所以这里面我们还是通过源码自己编译。注意,在编译torchvision时需要先安装好上文编译好的torch
1. 安装依赖包
安装编译所需要的包
sudo apt-get install libjpeg-dev libavcodec-dev libavformat-dev libswscale-dev
安装pillow
pip install pillow
2. 编译 TorchVision
目前官网的torchvision版本是0.6,我们不用切换版本直接用就好了
git clone https://github.com/pytorch/vision.git
cd vision
git checkout v0.7.0 #如果需要使用与pytorch 1.6一同发布的0.7版,则要加上这句
#本地安装
python setup.py install
#打包成whl
python setup.py bdist_wheel
3. 安装 TorchVision
cd dist
pip3 install ./torchvision-0.7.0a0+78ed10c-cp37-cp37m-linux_aarch64.whl
4. 验证TorchVision
HwHiAiUser@davinci-mini:~/vision/dist$ python3.7.5
Python 3.7.5 (default, Nov 23 2020, 08:14:01)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torchvision
>>> #没有报错,证明ok