这篇文章给大家分享的是有关TensorFlow源代码编译构建安装包的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
成都创新互联专注于企业全网整合营销推广、网站重做改版、江岸网站定制设计、自适应品牌网站建设、HTML5、电子商务商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为江岸等各大城市提供网站开发制作服务。
最近公司给我们分配了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之前,我们要先做两件事:
在下载TensorFlow源码如果网速比较好的话,可以直接使用下面的命令从GitHub仓库中克隆TensorFlow代码库的源码:
git clone https://github.com/tensorflow/tensorflow.gitcd tensorflow
如果网速堪忧的话,可以直接先下载zip版本,然后再传到服务器上,我使用的是后者。
下载和安装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,首先要安装一些依赖:
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了。 在这之前我们还需要去安装一些相应的依赖,使用如下命令即可:
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源代码,并执行
Please specify the location of python. [Default is /root/miniconda3/envs/ray/bin/python3]:
这一句是让你输入Python所在的位置,如果没错的话直接回车,如果想修改的话就输入你的Python所在的目录;
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所在的位置,和上面一样,我这里直接回车。
Do you wish to build TensorFlow with ROCm support? [y/N]: N
这一步是问你是不是要build一个支持ROCm的TensorFlow版本,在这里我选择N。
Do you wish to build TensorFlow with CUDA support? [y/N]: N
这一步是问你是不是要build一个支持CUDA的TensorFlow版本,因为我这个是要在分布式集群的CPU版本用的,这个服务器里没用CUDA,所以我选择N。
Do you wish to download a fresh release of clang? (Experimental) [y/N]: N
这一步是问你是不是希望狭隘一个clang是release版本,这里我一开始选择的是Y,由于我网速不好,下载报错,然后就选择了N;Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:
这一步是让你输入一个编译时候的优化器,在这里我直接用默认的,就直接回车了;
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: N
这一步是问你是不是需要支持Android,我这边不需要,所以直接N,否则的话会让你选择你Android SDK的版本之类的;
当这些都配置完成之后,就会弹出来一个你的配置信息。 接下来就要真正的开始去编译你的TensorFlow源码了,由于我使用的是不带CUDA的版本,所以我直接使用如下命令即可:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
编译好会看到下面的信息:(由于我自己这块没有截图,用了个网图,我用老的CPU花了7500多秒)
编译好之后,我们就可以在TensorFlow源代码目录输入以下命令,来构建最终的pip安装包:
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
在这里,/tmp/tensorflow_pkg是我自己定义的最终安装包输出的位置,结束后,我们可以cd到 /tmp/tensorflow_pkg目录中,查看里面的内容:
可以看到,我们最终的pip安装版本就已经完成,接下来我们就可以在命令行里输入下面的命令进行安装了:
pip install tensorflow-2.5.0-cp38-cp38-linux_x86_64.whl
安装完成后,我们可以试着在Python交互环境中导入一下TensorFlow,看看是否有报错: 我们发现,可以正常导入和使用,至此,整个TensorFlow源码的编译、构建以及安装环境完成。感谢各位的阅读!关于“TensorFlow源代码编译构建安装包的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
标题名称:TensorFlow源代码编译构建安装包的示例分析
文章来源:
http://6mz.cn/article/gdhodj.html