交叉编译torch的C++库

工作背景:需要在比特大陆的SE盒子(arm架构)重新编译torch的C++库
工作难点:torch在arm上编译的博客参考太少,很多报错无法解决,SE小盒子配置不高,直接在上面源码编译torch耗时太长
解决办法:在x86上使用交叉编译的方式进行

实现步骤:(步骤中出现的文件都在同级目录中)
1.宿主机环境为ubuntu,需要安装QEMU(功能是模拟x86的底层架构),安装方式1:直接复制cp qemu-user-static /usr/bin,方式2:sudo apt install qemu-user-static;方式3,安装qemu的容器参考https://github.com/rycus86/docker-arm64v8-debian-qemu
我的方式:docker pull multiarch/qemu-user-static:register,cp qemu-aarch64-static /usr/bin/,chmod +x /usr/bin/qemu-aarch64-static,docker run --rm --privileged multiarch/qemu-user-static:register --reset。

2、使用arm镜像创建容器
拉去镜像docker pull arm64v8/debian:10,创建容器docker run -it --name=chentiao-arm -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/debian:10 /bin/bash

3、在容器中部署和se盒子相同的环境
安装gcc-6.3.0,首先安装依赖apt install build-essential libgmp-dev libmpfr-dev libmpc-dev,然后:
wget http://mirrors.concertpass.com/gcc/releases/gcc-6.3.0/gcc-6.3.0.tar.gz
tar fx gcc-6.3.0.tar.gz
cd gcc-6.3.0/
./contrib/download_prerequisites
mkdir gcc-build-6.3.0.
./configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make -j 50 (此步骤遇到struct问题,解决办法见同级目录的pdf)
make install
ln -s /usr/local/python3.7/bin/python3.7 /usr/bin/python
ln -s /usr/local/python3.7/bin/pip3.7 /usr/bin/pip

4、安装python3.7,安装依赖apt install libffi-dev ,源码安装:
apt-get install zlib*
tar xvf Python-3.7.0.tar
cd Python-3.7.0
./configure --prefix=/usr/local/python3.7/ --enable-optimizations
make && make install

5、从git上拉取torch-1.8源码
git clone -b v1.8.0 https://github.com/pytorch/pytorch.git
cd pytorch
git submodule update --init --recursive
对于无法克隆的依赖库,分别进入到地址单独git clone
更改debian的apt源:
mv /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources.list 然后加入:
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
然后apt-get update

安装cmake:apt install cmake
安装cmake-gui(可视化配置工具):apt install cmake(安装之后仍然无法使用,原因是终端连接的问题)

进入pytorch文件夹中,执行 python setup.py install 显示缺少yaml包,使用pip安装(-i http://pypi.douban.com/simple --trusted-host pypi.douban.com)
执行:(以下执行方法未经最终确定)
DEBUG=1 USE_DISTRIBUTED=0 USE_MKLDNN=0 USE_CUDA=0 BUILD_TEST=0 USE_FBGEMM=0 USE_NNPACK=0 USE_QNNPACK=0 USE_XNNPACK=0 python setup.py develop
DEBUG=1 USE_DISTRIBUTED=0 USE_MKLDNN=0 USE_CUDA=0 BUILD_TEST=0 USE_FBGEMM=0 USE_NNPACK=0 USE_QNNPACK=0 USE_XNNPACK=0 BUILD_CAFFE2=0 BUILD_CAFFE2_OPS=0 BUILD_CUSTOM_PROTOBUF=0 BUILD_PYTHON=0 USE_EIGEN_FOR_BLAS=0 USE_OBSERVERS=0 ATEN_AVX512_256=0 USE_NUMPY=0 python setup.py develop

cmake -DBUILD_PYTHON=False -DBUILD_TEST=False -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/workspace/torch/pytorch-pytorch/torch -DCMAKE_PREFIX_PATH=/../ -DNUMPY_INCLUDE_DIR=/usr/local/python3.7/lib/python3.7/site-packages/numpy/core/include -DPYTHON_EXECUTABLE=/usr/bin/python -DPYTHON_INCLUDE_DIR=/usr/local/python3.7/include/python3.7m -DUSE_CUDA=False -DUSE_NCCL=0 -DUSE_NUMPY=True DINTERN_BUILD_ATEN_OPS=0 /workspace/torch/pytorch-pytorch
python ../tools/build_libtorch.py
编译遇到问题,编译停止,后又求助于比特大陆人员。

posted @ 2022-05-30 23:08  海_纳百川  阅读(680)  评论(2编辑  收藏  举报
本站总访问量