前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【原创】记录我一次详细的TensorFlow源代码编译构建安装包总结

【原创】记录我一次详细的TensorFlow源代码编译构建安装包总结

作者头像
黄鸿波
发布2020-11-19 11:38:00
2K0
发布2020-11-19 11:38:00
举报
文章被收录于专栏:AI的那些事儿

最近公司给我们分配了2台虚拟机服务器用于强化学习训练,我们在虚拟环境中安装好了TensorFlow环境后,在import tensorflow时发现报了下面的错误:

于是我去Google搜索了下出现这个错误的原因,发现是因为我们服务器的CPU不支持AVX指令集导致的,而使用pip安装的TensorFlow需要依赖AVX指令集,为了确认我们的CPU是否真的不支持AVX指令集,我使用cat /proc/cpuinfo 命令查看了下目前CPU指令集支持情况,发现我们的CPU果然不支持AVX指令集。

又不支持又想用咋办,后来经过网上查询了一下,我们可以自己使用TensorFlow的源代码来编译和构建一个TensorFlow的版本,这样的话就可以在不支持AVX指令集的机器上使用TensorFlow了。于是我按照官网https://www.tensorflow.org/install/source给出的步骤来尝试从源码自己编译和构建TensorFlow。

在构建TensorFlow之前,我们要先做两件事:

  1. 下载TensorFlow的源码
  2. 下载和安装Bazel构建工具

在下载TensorFlow源码如果网速比较好的话,可以直接使用下面的命令从GitHub仓库中克隆TensorFlow代码库的源码:

代码语言:javascript
复制
git clone https://github.com/tensorflow/tensorflow.gitcd tensorflow

如果网速堪忧的话,可以直接先下载zip版本,然后再传到服务器上,我使用的是后者。

注意:这里的代码库默认的是master开发分支。

下载和安装Bazel构建工具这里我要特别说一下,一般来讲,Bazel的安装方式有2种,一种是使用Bazelisk来安装,另外一种是手动安装,我使用的是后者。在官网中会告诉你,你可以安装在GitHub中可以是 tensorflow/configure.py 中指定的介于 _TF_MIN_BAZEL_VERSION 和 _TF_MAX_BAZEL_VERSION 之间的任意版本,但是,这里是一个坑。因为在这里他说可以安装3.10~3.99种的任意一个版本,于是乎我安装了一个3.70的版本,等到真正编译的时候,他会告诉你,这个版本不匹配,需要你安装3.10的版本,于是只能卸载重新安装。

接下来我们需要按照bazel,首先要安装一些依赖:

代码语言:javascript
复制
apt install curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list

接下来我们可以使用apt update && sudo apt install bazel-3.1.0命令直接安装就好。

到目前为止我们已经安装好了bazel编译工具,也下载了TensorFlow的源码,那么接下来就要开始准备编译和构建TensorFlow了。

在这之前我们还需要去安装一些相应的依赖,使用如下命令即可:

代码语言:javascript
复制
pip install  six numpy wheel setuptools mock 'future>=0.17.1'
pip install  keras_applications --no-deps
pip install  keras_preprocessing --no-deps

然后我们使用gcc --version查看下我们的gcc版本,我的是18.04自带的7.5.0,可用。

接下来就是真正的编译环节了。首先我们进入到从GitHub中下载的TensorFlow源代码,并执行

代码语言:javascript
复制
./configure

这个时候会让你去做一些配置相关的信息:

代码语言:javascript
复制
Please specify the location of python. [Default is /root/miniconda3/envs/ray/bin/python3]:

这一句是让你输入Python所在的位置,如果没错的话直接回车,如果想修改的话就输入你的Python所在的目录;

代码语言:javascript
复制
Found possible Python library paths:
/root/miniconda3/envs/ray/lib/python3.8/site-packages
Please input the desired Python library path to use.  Default is [/root/miniconda3/envs/ray/lib/python3.8/site-packages]

这一步让你去输入Python library所在的位置,和上面一样,我这里直接回车。

代码语言:javascript
复制
Do you wish to build TensorFlow with ROCm support? [y/N]: N

这一步是问你是不是要build一个支持ROCm的TensorFlow版本,在这里我选择N。

代码语言:javascript
复制
Do you wish to build TensorFlow with CUDA support? [y/N]: N

这一步是问你是不是要build一个支持CUDA的TensorFlow版本,因为我这个是要在分布式集群的CPU版本用的,这个服务器里没用CUDA,所以我选择N。

代码语言:javascript
复制
Do you wish to download a fresh release of clang? (Experimental) [y/N]: N

这一步是问你是不是希望狭隘一个clang是release版本,这里我一开始选择的是Y,由于我网速不好,下载报错,然后就选择了N;

代码语言:javascript
复制
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:

这一步是让你输入一个编译时候的优化器,在这里我直接用默认的,就直接回车了;

代码语言:javascript
复制
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]:  N

这一步是问你是不是需要支持Android,我这边不需要,所以直接N,否则的话会让你选择你Android SDK的版本之类的;

当这些都配置完成之后,就会弹出来一个你的配置信息。

接下来就要真正的开始去编译你的TensorFlow源码了,由于我使用的是不带CUDA的版本,所以我直接使用如下命令即可:

代码语言:javascript
复制
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

编译好会看到下面的信息:(由于我自己这块没有截图,用了个网图,我用老的CPU花了7500多秒)

编译好之后,我们就可以在TensorFlow源代码目录输入以下命令,来构建最终的pip安装包:

代码语言:javascript
复制
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

在这里,/tmp/tensorflow_pkg是我自己定义的最终安装包输出的位置,结束后,我们可以cd到 /tmp/tensorflow_pkg目录中,查看里面的内容:

可以看到,我们最终的pip安装版本就已经完成,接下来我们就可以在命令行里输入下面的命令进行安装了:

代码语言:javascript
复制
pip install tensorflow-2.5.0-cp38-cp38-linux_x86_64.whl

安装完成后,我们可以试着在Python交互环境中导入一下TensorFlow,看看是否有报错:

我们发现,可以正常导入和使用,至此,整个TensorFlow源码的编译、构建以及安装环境完成。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI的那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档