树莓派上编译libtorch
工创赛,由于成本问题,我拿出了吃灰好久的树莓派,但是在上面编译libtorcch真是困难呀,写个博客记录一下
树莓派上编译libtorch
首先,官网上的肯定是不能正常使用的,官网的libtorch
仅在x86_64
的机器上编译,当下载到ARM
架构的树莓派时就无法正常工作了,为此,我和同学进行了多次编译,最终将经验教训总结如下。
libtorch的版本选择
如果你使用了v2.6.0在树莓派上编译,你会遇到Illegal instruction (core dumped)
,这一步真的是非常坑。
我们在不同的ARM
机器上编译了很多次,但是只要放到Raspberry Pi 4
上就必定出现这个报错。
究其原因,在看了pytorch
仓库的issue1之后,我们发现,是libtorchv2.6.0
本身存在BUG,无法在Raspberry Pi 4
上运行。
因此,比较合理的选择是切换到已经验证的v2.5.1
版本,所以以下工作是在v2.5.1
的情况下实现的。
构建libtorch前的必要准备
-
确认你已经阅读过了构建文档2
-
你已经
pull
了pytorch
的官方仓库,分支切换到了v2.5.1
,下载了所有的第三方包 -
有一台树莓派4并执行命令如下:
sudo apt update sudo apt-get install gcc cmake clang openssh-server curl
构建libtorch
建议使用
Cmake
构建
在pytorch同级目录创建构建文件夹
mkdir pytorch-build && cd pytorch-build
执行Cmake指令
相关环境变量设置的来源:
DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=hard"
3
其他环境变量4
总指令
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=../pytorch-install \
-DPYTHON_EXECUTABLE=$(which python3) \
-DBUILD_SHARED_LIBS=ON \
-DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=hard" \
-USE_CUDA=0 \
-USE_CUDNN=0 \
-USE_MLKDNN=0 \
-USE_DISTRIBUTED=0 \
-DCFLAGS="-march=armv8-a+crc -mtune=cortex-a72" \
../pytorch
启动构建
cmake --build . --target install -j 2
不出意外,你能在pytorch
同级文件夹找到pytorch-install
文件夹,这就是需要的libtorch
库。
总结
这个问题困扰了我们整整3天,我们一开始用的是v2.6.0
,尝试了在各种ARM
机器上构建,通过不同渠道获得了一些ARM
版本的libtorch
,但是最终都会报错。
不过幸好看见了github
上面的issue
,在2.5.1
版本下最终顺利构建了,虽然解决方式没有那么硬核
,不过结果还是非常好的。
最后修改于 2025-03-01