交叉编译树莓派TensorFlow Go动态链接库

树莓派上用python运行tflite模型效果一般,觉得应该没go快,c开发难度又大,所以需要在树莓派上使用tensorflow go的动态链接库,在树莓派上编译显然时间太长,所以得用交叉编译。本文构建的主要适用于树莓派64位系统(arm64)

为 arm64 构建 TensorFlow 库

交叉编译环境

Bazel v4.2.1

TensorFlow v2.8.0

Python v3.9

安装构建工具

sudo apt-get update && sudo apt-get install -y zip build-essential

下载安装 Bazel

bazel是 TensorFlow 的构建系统,它的版本严格依赖于特定版本的 TensorFlow。

图片[1]-交叉编译树莓派TensorFlow Go动态链接库-诚哥博客

2.8.0 的目前文档还没更新对应的 Bazel,但如果不知道版本也可以先安装一个版本,配置的时候会报错显示让安装对应版本的 bazel 即可(别问我怎么知道的 TT)

图片[2]-交叉编译树莓派TensorFlow Go动态链接库-诚哥博客

wget https://github.com/bazelbuild/bazel/releases/download/4.2.1/bazel-4.2.1-installer-linux-x86_64.sh
 chmod 755 bazel-4.2.1-installer-linux-x86_64.sh
sudo ./bazel-4.2.1-installer-linux-x86_64.sh
bazel

图片[3]-交叉编译树莓派TensorFlow Go动态链接库-诚哥博客

下载安装 Anaconda

wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
 chmod 755 Anaconda3-2021.11-Linux-x86_64.sh
./Anaconda3-2021.05-Linux-x86_64.sh
exit # 并再次登录

此时 python 已设置好,但可能没有激活,所以最好退出并重新登录并确认版本

python --version

下载 TensorFlow 代码

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout tags/v2.8.0

配置构建参数

根据提示选择对应配置即可,也可以全部回车(默认值)

./configure

启动构建

bazel build -c opt --config=elinux_aarch64 //tensorflow/tools/lib_package:libtensorflow

图片[4]-交叉编译树莓派TensorFlow Go动态链接库-诚哥博客

需要一些时间, 生成的动态链接库在:bazel-bin/tensorflow/tools/lib_package/libtensorflow.tar.gz

在树莓派上安装动态库

sudo tar -C /usr/local -xzf libtensorflow.tar.gz
sudo ldconfig
export LD_LIBRARY_PATH="/usr/local/lib"

在树莓派上运行 tensorflow go 官方例子

tensorflow go 官方安装教程

安装 Protocol Buffers 库和编译器

安装协议缓冲区库和编译器。在安装 Go 绑定期间,需要库中的编译器和众所周知的原型文件。

Linux,使用 aptor apt-get,例如:

apt install libprotobuf-dev protobuf-compiler

安装 tensorflow go api

由于 tensorflow go api 不支持 2.0 使用 go get 安装,所以需要手动安装

首先,记下 Go 工作区的位置。其余的安装步骤必须在您的 Go 工作区中执行。

go env GOPATH

克隆 TensorFlow 源存储库,将 Go 工作区的位置替换为/go 以下命令

git clone --branch v2.8.0 https://github.com/tensorflow/tensorflow.git /go/src/github.com/tensorflow/tensorflow

将工作目录更改为克隆的 TensorFlow 存储库的基础,/go 在下面的命令中替换您的 Go 工作区的位置。

cd /go/src/github.com/tensorflow/tensorflow

将所需的补丁应用到 TensorFlow 源代码。

git cherry-pick --strategy-option=no-renames --no-commit 65a5434

初始化一个新的 go.mod 文件。

go mod init github.com/tensorflow/tensorflow

生成包装器和协议缓冲区。

(cd tensorflow/go/op && go generate)

添加缺少的模块。

go mod tidy

测试安装。

go test ./...
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容