对 TensorFlow Raspbian package 进行交叉编译 (cross-compiling)。 交叉编译使用的平台与部署平台不同。 相较于在 Raspberry Pi 使用有限的 RAM 和相对较慢的处理器,我们更加建议在 Linux ,macOS 或 Windows 等功能更强大的主机上构建TensorFlow。
宿主机 (host) 设置
安装 Docker
为了简化依赖关系管理,构建脚本使用 Docker 来创建虚拟 Linux 开发环境进行编译。通过执行以下操作来验证您的 Docker 是否安装成功: docker run –rm hello-world。
具体安装过程请参考如何在 Ubuntu 20.04 上安装和使用 Docker。
Docker使用方法
以 koa-demos 项目为例,介绍怎么写 Dockerfile 文件,实现让用户在 Docker 容器里面运行 Koa 框架。
1 | git clone https://github.com/ruanyf/koa-demos.git |
编写 Dockerfile 文件
首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容。
1 | .git |
上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。
然后,在项目的根目录下,新建一个文本文件 Dockerfile,写入下面的内容。
1 | FROM node:8.4 |
创建 image 文件
有了 Dockerfile 文件以后,就可以使用docker image build命令创建 image 文件了。
1 | $ docker image build -t koa-demo . |
如果运行成功,就可以看到新生成的 image 文件koa-demo了。
1 | docker image ls |
生成容器
docker container run命令会从 image 文件生成容器。
1 | $ docker container run -p 8000:3000 -it koa-demo /bin/bash |
下载 Tensorflow 源代码
使用 Git 克隆 TensorFlow:
1 | git clone https://github.com/tensorflow/tensorflow.git |
默认为 master 分支。您还可以签出要构建的 release 分支:
1 | git checkout branch_name # r1.9, r1.10, etc. |
交叉编译源代码
交叉编译 TensorFlow 源代码,从而构建一个基于 ARM 指令的 Python pip 包。构建脚本启动 Docker 容器以进行编译。
生成tensorflow构建环境的Docker映像
使用如下命令获得所需Docker映像:
1 | git clone https://github.com/lhelontra/tensorflow-on-arm.git |
启动容器
使用如下命令:
1 | docker run -it -v /tmp/tensorflow_pkg/:/tmp/tensorflow_pkg/ --env TF_PYTHON_VERSION=3.8 tf-arm ./build_tensorflow.sh configs/<conf-name> # rpi.conf, rk3399.conf ... |
交叉编译tensorflow
使用如下命令交叉编译tensorflow:
1 | # Docker容器内设置全局代理 |
参考链接
- 在树莓派设备上编译 tensorflow 源代码 ,by tensorflow.
- Docker 入门教程,by 阮一峰.
- 如何在 Ubuntu 20.04 上安装和使用 Docker,by 雪梦科技.
- Ubuntu 20.04系统下更改apt源为阿里源,by 一缕诗风.
- docker:containerd.io docker-ce-cli docker-ce 的区别,by 非正经研究生.
- [Why does “drm:vmw_host_log [vmwgfx]] ERROR Failed to send host log message” show up and what can I do to fix it?](https://unix.stackexchange.com/questions/502540/why-does-drmvmw-host-log-vmwgfx-error-failed-to-send-host-log-message-sh),by stackexchange.
- 交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别,by 左手牛奶,右手面包.
- 基于源代码为树莓派设备构建 TensorFlow,by Spoony.
- Docker — 从入门到实践,by yeasy.
- 史上讲解最好的 Docker 教程,从入门到精通(建议收藏的教程),by 周辰晨.
- Docker篇之镜像打标签tag,by 听说唐僧不吃肉.
- Docker容器内设置全局代理,by Liao.
- Bazel入门:编译C++项目,by Elaine_Bao.