tensorflow cuda版本_Tensorflow 源码编译(踩坑版)

在实际项目部署过程中,会需要tensorflow c或者c++版本, 网上一通查,说自己编译会各种坑,投机取巧。。在拿到别人编译好的c和c++版本调用报错后,开始痛定思痛,躲不过的坑 自己来趟好了。。

先说下电脑环境:

1.linux18.04

2.cuda 10.0

3.cudnn 7.6.5

4. make 4.1

5. protobuf 3.7

############环境安装#############

怕tensorflow版本高 容易出错,保守选择 tensroflow 1.13.1版本, 并选择bazel的版本为0.19.2 为啥选择这个版本 是因为之前看过一个博客是这样对应的 ,

Linux环境下编译TensorFlow C++ API和测试方法总结(完美版)​blog.csdn.net
42e513e4cc3e22da1c4bf8784877beb5.png

1 安装bazel

1.安装bazel需要的安装包:pkg-config,zip,g++,zlib1g-dev, unzip,python

$ sudo apt install unzip 
$ sudo apt install make
$ sudo apt install g++ 
$ sudo apt install gcc 
$ sudo apt install cmake
 
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
sudo apt install curl(used to download gmock)
sudo apt-get install zlib1g-dev
sudo apt-get install liblzma-dev

sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python

如果安装不成功

2. git 上下载指定版本的bazel:可以在 bazel发布页上找对应版本 https://github.com/bazelbuild/bazel/releases

下面链接是我所对应的0.19.2的版本:

Release 0.19.2 · bazelbuild/bazel

3.运行安装程序

切换到bazel下载到的文件中,如果担心权限不够 可以先运行

chmod +x bazel-<version>-installer-linux-x86_64.sh

再运行:

./bazel-<version>-installer-linux-x86_64.sh --user

--user标志将Bazel安装到$HOME/bin系统上的目录并设置.bazelrc路径$HOME/.bazelrc

2 安装protobuf

3.安装tensorflow

重中之重的来liao..

1.下载tensorflow 我下载的是1.13.1版本 可以去官网上找各种其他版本:

https://codeload.github.com/tensorflow/tensorflow/tar.gz/v1.13.1

下载完成后,解压:

tar -zxvf tensorflow-1.13.1.tar.gz

2. 进入config配置

解压后进入tensorflow-1.13.1文件夹中:

开始配置:

./configure

开始出现一系列选项:

个人认为,如果要调用cuda时,最主要的是要知道自己的cuda和cudnn版本号,

cuda版本号查询:

nvcc -V

cudnn版本号查询:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

26d4e49eb45aa86f017703d92544023f.png

我的版本号是7.6.5

在配置时,如果需要用cuda,需要填上:

8b6e79c0d39944fee00488036aabbc45.png
主要是CUDA support 和cuda版本号 cudnn版本号

配置完就可以编译了。

3. bazel build编译:

不调用cuda:

bazel build --config=opt //tensorflow:libtensorflow_cc.so

调用cuda:

bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so

然后一直编译过程。。。要等30分钟。。。。。。最后出现:

530fcfc78a975cb1b7a85feda701b085.png

过程中 踩坑无数, 下面开始踩坑之路:

------------------------------------------------------------

【error】:ERROR: ../tensorflow-1.13.1/tensorflow/core/kernels/BUILD:4680:1: no such package '@icu//xception: Error downloading [https://mirror.bazel.build/github.com/unicode-org/icu/archive/release-62-1.//github.com/unicode-org/icu/archive/release-62-1.tar.gz] to ../.cache/bazel/_bazel_zhang56dc5e19b594a565bd2f1d372/external/icu/release-62-1.tar.gz: Tried to reconnect at offset 9,642,752 but support it and referenced by '//tensorflow/core/kernels:string_util'

ERROR: Analysis of target '//tensorflow:libtensorflow_cc.so' failed; build aborted: no such package '@icIOException: Error downloading [https://mirror.bazel.build/github.com/unicode-org/icu/archive/release-62ps://github.com/unicode-org/icu/archive/release-62-1.tar.gz] to ../.cache/bazel/_bazel_zh82456dc5e19b594a565bd2f1d372/external/icu/release-62-1.tar.gz: Tried to reconnect at offset 9,642,752 but support it

【分析】 icu_release-62-1.tar.gz下载不下来,所以可以自己手动下载下来,然后通过服务传上去,所以需要几步操作:1/搭建本地http服务;2/手动下载 icu_release-62-1.tar.gz;3/将下载tar.gz放到本地服务中。

  1. 搭建本地http服务有以下几步:

在linux终端输入:

sudo apt-get install httpd

a61e30b38721b7da15eaaa2f7b990d9c.png
输入代码后 显示如上

再安装apache2:

 sudo apt-get install apache2

再安装apache2-dev

 sudo apt-get install apache2-dev

安装完成后 查看是否安装成功:

sudo systemctl status apache2

fd1d3d90ee8437f9f2c186aa7c5367f2.png

后面在浏览器中粘贴localhost看是否有apache的界面出现 出现则安装成功;同时在根目录下可以看到/var/www/html文件夹,这个文件夹后面要用到。

2 手动下载 icu_release-62-1.tar.gz:

https://codeload.github.com/unicode-org/icu/tar.gz/release-62-1

(注:虽然直接从浏览器下载容易很多,但是也会经常断,这里推荐一个炒鸡好用的github加速网站,不用注册,GitHub 加速下载 - 在线工具)

3.第三步将手动下载的文件上传至本地服务:

将icu_release-62-1.tar.gz 文件名改成release-62-1.tar.gz, 并将改后的文件放到/var/www/html文件夹下;

修改tensorflow/third_party/icu/workspace.bzl文件,在url=[...]中添加一条

"http://localhost/release-62-1.tar.gz"

4cf3f22610669426ca98bd7721a4f742.png
urls 添加到第三个 建议放到第一个上

清理 再重新编译:

bazel clean
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so

---------------------------------------------------

【error】ERROR: ../tensorflow-1.13.1/tensorflow/core/kernels/BUILD:4680:1: no such package '@icu//': java.io.IOException: Error downloading [http://localhost/release-62-1.tar.gz, https ://mirror.bazel.build/github.com/unicode-org/icu/archive/release-62-1.tar.gz, https://github.com/unicode-org/icu/archive/release-62-1.tar.gz] to /home/zhangqinwei/.cache/bazel/_bazel_/81b182456dc5e19b594a565bd2f1d372/external/icu/release-62-1.tar.gz: Checksum was 86b85fbf1b 251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181 but wanted e15ffd84606323cbad5515bf9ecdf8061cc3bf80fb883b9e6aa162e485aa9761 and referenced by '//tensorflow/core/kernels:string_util'

ERROR: Analysis of target '//tensorflow:libtensorflow_cc.so' failed; build aborted: no such package '@icu//': java.io.IOException: Error downloading [http://localhost/release-62-1.tar.gz, https://mirror.bazel.build/github.com/ unicode-org/icu/archive/release-62-1.tar.gz, https://github.com/unicode-org/icu/archive/release-62-1.tar.gz ] to /home/zhangqinwei/.cache/bazel/_bazel_zhan gqinwei/81b182456dc5e19b594a565bd2f1d372/external/icu/release-62-1.tar.gz: Checksum was 86b85fbf1b251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181 but wanted e15ffd84606323cbad5515bf9e cdf8061cc3bf80fb883b9e6aa162e485aa9761

【分析】release-62-1.tar.gz 的Checksum是86b85....但是得到的却是e15ff.... 所以修改垓下tensorflow/third_party/icu/workspacd.bzl:

将sha256 由e15ff改成86b85..

sha256 = "86b85fbf1b251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181",

660e7b4dc2fa7f75e3150c72e55cbc01.png

清理 再重新编译:

bazel clean
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so

---------------------------------------------------

【error】ERROR: tensorflow-1.13.1/tensorflow/BUILD:393:1: no such package '@grpc//': java.io.IOException: Error downloading [https://mirror.bazel.build/github.com/grpc/grpc/archive/69b6c047bc767b4d80e7af4d00ccb7c45b683dae.tar.gz, https://github.com/grpc/grpc/archive/69b6c047bc767b4d80e7af4d00ccb7c45b683dae.tar.gz] to /.cache/bazel/_bazel_zhangqinwei/81b182456dc5e19b594a565bd2f1d372/external/grpc/69b6c047bc767b4d80e7af4d00ccb7c45b683dae.tar.gz: Checksum was cde4cc00d517cd8a40cf61dfcf86902ccff792224ea4d08ac46cae7bcc70b914 but wanted 1aa84387232dda273ea8fdfe722622084f72c16f7b84bfc519ac7759b71cdc91 and referenced by '//tensorflow:grpc++'

ERROR: Analysis of target '//tensorflow:libtensorflow_cc.so' failed; build aborted: Analysis failed

【分析】乍一看以为是与上面的icu_release 一样是某个sha256需要改成对应的值,最后没找到这个sha256, 后来想是不是也是grcp这个模块下载不下来,开始处理:

重复上面第一个错误:(这里本地服务已经建好,只需要手动下载后,再上传上去好了):

1 手动下载 69b6c047bc767b4d80e7af4d00ccb7c45b683dae.tar.gz

https://codeload.github.com/grpc/grpc/tar.gz/69b6c047bc767b4d80e7af4d00ccb7c45b683dae

2.将下载下来的 69b6c047bc767b4d80e7af4d00ccb7c45b683dae.tar.gz 放到var/www/html文件夹下;

3.修改tensorflow/tensorflow/workspace.bzl文件:在urls = [....]中加一条:

"http://localhost/grpc-69b6c047bc767b4d80e7af4d00ccb7c45b683dae.tar.gz",

如下:

922d7c90ce579feeb8f7f70abb1bad34.png

清理 再重新编译:

bazel clean
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so

4. 安装其他依赖库

安装完tensorflow后,将tensorflow中生成的bazel-genfiles 等文件和include文件 拷贝到根目录下面:

mkdir /usr/local/include/tf
cp -r bazel-genfiles/ /usr/local/include/tf/
mkdir /usr/local/include/tf/tensorflow
cp -r tensorflow/* /usr/local/include/tf/tensorflow/
cp -r third_party /usr/local/include/tf/
cp -r bazel-bin/tensorflow/*.so /usr/local/lib/
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是在Linux系统中从源码编译安装TensorFlow 1.13.1的步骤: 1. 安装必要的依赖项: ``` sudo apt-get update && sudo apt-get install python3-dev python3-pip python3-wheel python3-venv sudo apt-get install libhdf5-dev libc-ares-dev libeigen3-dev sudo apt-get install libatlas-base-dev libopenblas-dev libblas-dev sudo apt-get install liblapack-dev cython3 ``` 2. 创建Python虚拟环境: ``` python3 -m venv tensorflow_env source tensorflow_env/bin/activate ``` 3. 下载TensorFlow 1.13.1源代码: ``` wget https://github.com/tensorflow/tensorflow/archive/v1.13.1.tar.gz tar -xzvf v1.13.1.tar.gz ``` 4. 进入TensorFlow源代码目录: ``` cd tensorflow-1.13.1 ``` 5. 配置编译选项: ``` ./configure ``` 按照提示进行配置,其中需要注意的是: - 选择Python解释器的路径为虚拟环境中的Python路径,例如:/home/user/tensorflow_env/bin/python3.6; - 如果您的计算机支持AVX指令集,请在编译选项中启用该选项,以获得更好的性能。 6. 开始编译: ``` bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package ``` 编译过程可能需要一些时间,请耐心等待。 7. 生成安装包: ``` ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg ``` 此步骤将会在/tmp/tensorflow_pkg目录下生成TensorFlow 1.13.1的安装包。 8. 安装TensorFlow: ``` pip install /tmp/tensorflow_pkg/tensorflow-1.13.1-*.whl ``` 9. 验证TensorFlow是否安装成功: ``` python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" ``` 如果输出了一个随机数的和,则说明TensorFlow安装成功。 希望以上步骤能够帮助您成功安装TensorFlow 1.13.1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值