Windows环境 Tensorflow-2.6.0 编译 C++ GPU Lib DLL (bazel)(后面会提供编译好的库)

本篇博客详细介绍了如何在Windows上编译Tensorflow 2.6.0的C++ GPU版本,包括环境配置、依赖安装、源码下载、bazel构建等步骤,提供了遇到问题的解决方案和编译好的库的下载链接。
摘要由CSDN通过智能技术生成

这是关于 Randlanet 从环境配置到C++推理部署 的博客,原作者的代码是基于tensorflow1.x的,但是现在的显卡基本上都开始是30系列了,只支持cuda11.1以上的开发环境。本系列博客是基于tensorflow-2.6.0 + 3050显卡开发的,在win和ubuntu都会有环境配置到训练自己数据集的教程,并且会有如何将Randlanet加入到自己软件的教程

本篇博客是win下的编译Tensorflow-2.6.0的c++ 版本,用来加载 pb模型

前言

本文编译的是GPU版本,如果要编译CPU版本,只要在是否选择cuda的时候选择no,还有更改 bazel的指令就好了,我会在文末放编译好的 Tensorflow2.6.0的GPU版本的网盘链接,有兴趣的可以直接下载

这里也可以给编译其他的版本的TF2提供一个思路,因为从某个版本开始,TF的编译就放弃了使用cmake,开始使用bazel了,暂时看到的中文资料也比较少,希望这篇可以帮助到大家

环境说明

Tensorflow 2.6.0
bazel 3.7.2
cuda 11.2
cudnn 8.1.0
python 3.8.13
vs2019社区版 (我用过vs2022专业版,一直会找不到VC,猜测是3.7.2还不支持vs2022)

1.安装vs2019 社区版 ,卸载vs2022

(只安装一个vs,之前两个的时候也会找不到BAZEL_VC)
vs2019下载地址:下载地址

2.安装对应版本的cuda cudnn

从英伟达的官网安装cuda和cudnn 我这里选择是的 cuda11.2 和 cudnn8.1.0
和前面博客配置的Randlanet的 ubuntu和 windows 的版本是对应的

cuda下载地址:cuda下载地址
cudnn下载地址:cudnn下载地址

3.下载tensorflow2.6.0源码

下载地址:下载地址
在这里插入图片描述
选择 Tags 2.6.0

4.安装msys

这个不用管版本,会自己更新到最新
下载地址:msys

在环境变量的 path 中添加 C:\msys64\usr\bin  (你安装的地址)
完成后运行msys.exe (在你的安装目录下有,或者打开 cmd 也行)

输入:

pacman -S git patch unzip

5.安装bazel

1.下载地址:https://github.com/bazelbuild/bazel/releases/tag/3.7.2
在这里插入图片描述
2.更改名字为 bazel.exe 添加到系统路径
3.设置 BAZEL_VC,在系统变量中点击新建
在这里插入图片描述

6.查看gpu算力

1.进入目录

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\demo_suite

2.打开终端
3.运行 deviceQuery.exe
在这里插入图片描述
那个 8.6 就是我设备的算力 (这里为了演示,用的我的笔记本)

7.新建anconda环境 (这一步很重要)

conda create -n tensorflow python=3.8.13
conda activate tensorflow 

在新环境中运行安装以下依赖

pip install six==1.15.0 h5py==3.1.0 numpy==1.19.5
pip3 install keras_applications==1.0.6 --no-deps
pip3 install keras_preprocessing==1.0.5 --no-deps

8.修改bazel输出目录(如果C盘够大的可以跳过此步)

修改方法是打开 tensorflow-2.6.0 下的 .bazelrc,
在其最后增加一行 startup --output_user_root=D:/tf,
等号后面的 D:/tf 是你想要改的路径

9.配置configure.py

在 第7步 创建的conda 环境中 ,进入下载好的源码路径下
运行:

python ./configure.py

在这里插入图片描述

10.编译动态库和静态库 (后面有内存限制使用方法)

开始编译:

bazel build --config=cuda tensorflow:tensorflow.dll

在这里插入图片描述

bazel build --config=cuda tensorflow:tensorflow.lib

在这里插入图片描述

bazel build --config=cuda tensorflow:install_headers

在这里插入图片描述

11.编译时限制内存的方法 (这是可选项,土豪请忽略)

从源代码构建 TensorFlow 会消耗大量 RAM。
如果你的系统受内存限制,请将 Bazel 的 RAM 使用量限制为:

--local_ram_resources=2048

如果构建支持 GPU 的 TensorFlow,请添加以下指令以禁止显示 nvcc 警告消息

--copt=-nvcc_options=disable-warnings

如果有以上烦恼,则编译指令为:

bazel build --config=cuda tensorflow:tensorflow.dll --local_ram_resources=2048 --copt=-nvcc_options=disable-warnings
bazel build --config=cuda tensorflow:tensorflow.lib --local_ram_resources=4096 --copt=-nvcc_options=disable-warnings
bazel build --config=cuda tensorflow:install_headers

12.运行和测试

在源码的文件夹里面会生成几个bazel相关的文件夹
在 bazel-in里面拷贝下面三个,即可在vs中运行使用了

在这里插入图片描述
测试代码:

#include <iostream>
#include "tensorflow/core/public/session.h"
#include "tensorflow/core/platform/env.h"

using namespace std;
using namespace tensorflow;

int main()
{
    tensorflow::Tensor inp_tensor_0 = tensorflow::Tensor(DT_FLOAT, TensorShape({ 2,2 }));
    inp_tensor_0.tensor<float, 2>()(0, 0) = 1;
    inp_tensor_0.tensor<float, 2>()(0, 1) = 2;
    inp_tensor_0.tensor<float, 2>()(1, 0) = 2;
    inp_tensor_0.tensor<float, 2>()(1, 1) = 3;
    cout << inp_tensor_0.tensor<float, (2)>() << endl;
    return 0;
}

13.可能出现的问题

1.无法打开包括文件: “google/protobuf/port_def.inc”
现在本地中的anaconda新建tf2.6.0环境,
再将anaconda中安装的tensorflow里的google文件夹拷贝到tensorflow的include文件夹下,我的anaconda中的google是在Lib\site-packages\tensorflow\include下。

在这里插入图片描述
2 .:max
原因是tensorflow中的min和max方法与<windows.h>中传统的min/max宏定义有冲突。在预处理器中添加NOMINMAX即可。
在这里插入图片描述

参考链接

Tensorflow官网

bazel官网

sitting-duck/stuff

编译好的GPU版本网盘下载地址:

链接:https://pan.baidu.com/s/1ic4PJct-UfPcG-Dt9zC7ww
提取码:e461

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值