在树莓派上编译安装TensorFlow的完整指南
前言
TensorFlow作为当前最流行的机器学习框架之一,其官方版本主要针对x86架构的CPU和NVIDIA GPU进行了优化。然而对于树莓派这样的ARM架构设备,官方并未提供预编译的二进制包。本文将详细介绍如何在树莓派上从源码编译安装TensorFlow,让开发者能够在资源有限的设备上运行机器学习模型。
准备工作
硬件要求
- 树莓派2或3 Model B
- 至少16GB容量的SD卡(全新安装的8GB卡空间不足)
- 稳定的网络连接
- 1GB以上容量的USB存储设备(用作交换空间)
软件环境
- Raspbian操作系统(本文基于Raspbian Stretch版本)
- Python 2.7或Python 3.5环境
编译流程概述
整个编译过程主要分为以下几个步骤:
- 安装基础依赖工具
- 配置USB交换空间
- 编译Bazel构建工具
- 编译TensorFlow源码
- 安装清理
详细步骤
1. 安装基础依赖
首先更新软件源并安装必要的开发工具:
sudo apt-get update
安装Bazel所需的依赖:
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip
安装TensorFlow的Python依赖:
# Python 2.7环境
sudo apt-get install python-pip python-numpy swig python-dev
sudo pip install wheel
# Python 3.5环境
sudo apt-get install python3-pip python3-numpy swig python3-dev
sudo pip3 install wheel
优化编译选项:
sudo apt-get install gcc-4.8 g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100
创建工作目录:
mkdir tf
cd tf
2. 配置USB交换空间
由于树莓派内存有限,编译过程需要额外的交换空间:
- 插入USB设备,使用
sudo blkid查看设备路径(如/dev/sda1) - 卸载设备:
sudo umount /dev/sda1 - 格式化为交换分区:
sudo mkswap /dev/sda1 - 获取设备UUID:
sudo blkid - 编辑
/etc/fstab文件添加交换分区配置:
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX none swap sw,pri=5 0 0
- 激活交换分区:
sudo swapon -a
3. 编译Bazel构建工具
Bazel是TensorFlow使用的构建系统,需要先进行编译:
wget https://github.com/bazelbuild/bazel/releases/download/0.4.5/bazel-0.4.5-dist.zip
unzip -d bazel bazel-0.4.5-dist.zip
cd bazel
修改编译配置:
- 编辑
scripts/bootstrap/compile.sh,在117行添加-J-Xmx500M参数 - 编辑
tools/cpp/cc_configure.bzl,在133行添加return "arm"
开始编译:
sudo ./compile.sh
sudo cp output/bazel /usr/local/bin/bazel
验证安装:
bazel
4. 编译TensorFlow
获取TensorFlow源码:
cd ..
git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git
cd tensorflow
修改平台相关配置:
grep -Rl 'lib64' | xargs sed -i 's/lib64/lib/g'
更新Eigen依赖版本(编辑tensorflow/workspace.bzl文件):
native.new_http_archive(
name = "eigen_archive",
urls = [
"http://mirror.bazel.build/bitbucket.org/eigen/eigen/get/d781c1de9834.tar.gz",
"https://bitbucket.org/eigen/eigen/get/d781c1de9834.tar.gz",
],
sha256 = "a34b208da6ec18fa8da963369e166e4a368612c14d956dd2f9d7072904675d9b",
strip_prefix = "eigen-eigen-d781c1de9834",
build_file = str(Label("//third_party:eigen.BUILD")),
)
配置编译选项:
./configure
建议配置选项:
- Python路径:
/usr/bin/python或/usr/bin/python3 - 启用jemalloc
- 禁用其他所有可选功能
开始编译(此过程需要数小时):
bazel build -c opt --copt="-mfpu=neon-vfpv4" --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" --local_resources 1024,1.0,1.0 --verbose_failures tensorflow/tools/pip_package:build_pip_package
生成安装包并安装:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo pip install /tmp/tensorflow_pkg/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
5. 清理工作
移除交换分区:
sudo swapoff /dev/sda1
sudo nano /etc/fstab # 删除添加的交换分区行
sudo reboot
常见问题解决
- 编译过程中内存不足:确保交换分区配置正确,必要时增加交换空间大小
- Eigen相关编译错误:检查是否已正确修改Eigen版本配置
- Bazel构建失败:尝试减少并发编译任务数(调整
--local_resources参数)
性能优化建议
- 使用更高效的模型架构(如MobileNet)
- 启用TensorFlow的图优化选项
- 考虑使用TensorFlow Lite以获得更好的性能
- 合理设置批量大小(batch size)以减少内存占用
结语
通过本文的详细步骤,开发者可以在树莓派上成功构建TensorFlow环境。虽然ARM架构设备的计算能力有限,但对于学习机器学习、运行轻量级模型或进行原型开发已经足够。希望本指南能帮助更多开发者在资源受限的环境中探索机器学习的可能性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



