树莓派上编译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前的必要准备

  1. 确认你已经阅读过了构建文档2

  2. 你已经pullpytorch的官方仓库,分支切换到了v2.5.1,下载了所有的第三方包

  3. 有一台树莓派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