lammps 怎么编译gpu版本_Windows下Tensorflow-gpu_C++库编译

概述

本文旨在实现Windows环境下Tensorflow-gpu_C++版本库文件编译与使用。经测试,选取tensorflow-1.8.0版本源码进行编译[1],不同CUDA版本的开发环境可按照本教程编译tensorflow-1.8.0_C++库文件。主要参考教程:https://blog.csdn.net/yuejisuo1948/article/details/84197534。

注1:笔者编译1.8版本源码时最新版tensorflow源码为1.13版本,编译过程中共编译了1.3、1.4、1.8、1.10、1.12五个版本源码,其中1.3、1.4有无法解决的错误,1.10、1.12错误较多,因此选择1.8版本源码进行编译。

一、环境配置

Ø 操作系统 Windows 10 64位

Ø 处理器 英特尔 Core i7-7700 @ 3.60GHz 四核

Ø 显卡 Nvidia GeForce GTX 1080 Ti ( 11 GB / 技嘉 )

Ø CUDA cuda_9.0

Ø CUDNN cudnn_7.4

二、依赖安装

Ø VS2015

Ø Python-3.5

Ø Swigwin

Ø Cmake

Ø Git

VS2015与Python-3.5安装不过多赘述,下面介绍Swigwin、Cmake、Git安装方法。

2.1 Swigwin安装

① 进入官网地址:http://swig.org/download.html

② 点击下载压缩文件

v2-c8d112a63d627768f8a6d8f39652bf9f_b.jpg

③ 将可执行文件添加至环境变量

右键此电脑->属性->高级系统设置->环境变量,在下面系统变量一栏中点击Path->编辑->新建,输入可执行文件目录。(例:E:TensorFlowc++_libTensorFlowc++_libswigwin-3.0.12,swig.exe位于此目录下)

2.2 Cmake安装

① 进入官网地址:https://cmake.org/download/

② 下载安装包

③ 点击安装(选择加入环境变量选项)

2.1 Git安装

① 进入官网地址:https://git-scm.com/downloads

② 下载安装包

③ 点击安装(选择加入环境变量选项)

三、源码编译

① 下载tensorflow-1.8.0源码:https://github.com/tensorflow/tensorflow/tree/v1.8.0。

② 进入文件路径E:TensorFlowc++_libtensorflow-1.8.0tensorflowcontribcmake,新建文件夹build。

③ 以管理员身份运行,开始所有程序Visual Studio 2015Visual Studio ToolsVS2015开发人员命令提示工具,切换到build目录下。使用以下命令编译出VS工程文件:cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release -DSWIG_EXECUTABLE=E:/TensorFlow/c++_lib/swigwin-3.0.12/swig.exe -DPYTHON_EXECUTABLE=E:/TensorFlow/c++_lib/python-3.5/python.exe -DPYTHON_LIBRARIES=E:/TensorFlow/c++_lib/python-3.5/libs/python35.lib -Dtensorflow_ENABLE_GPU=ON -Dtensorflow_ENABLE_GRPC_SUPPORT=OFF -Dtensorflow_BUILD_SHARED_LIB=ON

命令解析:

Ø CMAKE_BUILD_TYPE:编译库版本,此处编译的为Release

Ø SWIG_EXECUTABLE:swig.exe可执行文件路径

Ø PYTHON_EXECUTABLE:python.exe可执行文件路径

Ø PYTHON_LIBRARIES:python.lib库文件路径

Ø tensorflow_ENABLE_GPU:编译gpu版本

Ø tensorflow_ENABLE_GRPC_SUPPORT:关闭grpc支持(未知原因若开启会导致编译失败)

Ø tensorflow_BUILD_SHARED_LIB:编译静态库文件(即只需一个lib文件即可运行tensorflow_static.lib,否则需要tensorflow.lib、tensorflow.dll配合使用)

注:tensorflow_ENABLE_GPU、tensorflow_ENABLE_GRPC_SUPPORT等命令在E:TensorFlowc++_libtensorflow-1.8.0tensorflowcontribcmake路径下CMakeLists.txt文件中也可手动设置开启(ON)、关闭(OFF)

④ 进入文件路径E:TensorFlowc++_libtensorflow-1.8.0tensorflowcontribcmakebuild,打开tensorflow.sln,将以下几个项目添加库路径$(SolutionDir)$(Configuration);,否则编译过程中会出现链接错误。右键项目->属性->配置属性->链接器->常规->附加库目录,添加$(SolutionDir)$(Configuration);

v2-e86b7739b1b0e821987a1a49fd41d831_b.jpg

v2-7de31683195f1f64b4b68712b5ac32e1_b.jpg

⑤ 设置最多并行生成几个项目,防止编译过程中内存耗尽。菜单栏中的工具->选项->项目和解决方案->生成并运行,将其中的最大并行项目生成数,改为2。

v2-ab1068e983d5a003f0bc269b72d7c324_b.jpg

⑥ 关闭360安全卫士(生成的exe文件会被当做木马处理),点击生成解决方案,编译时间约为两个小时。编译成功后,在E:TensorFlowc++_libtensorflow-1.8.0tensorflowcontribcmakebuildRelease路径下会生成tensorflow-gpu_C++版库文件。

v2-70e120b99a0cca186b02d257ea26aafb_b.jpg

四、测试用例

编写测试项目test,项目结构如下:

v2-6a8fcd1d9665f8266bf80c41c403e3f2_b.png

① 头文件main.h文件内容

#pragma once //这一句防止重复include头文件

#define COMPILER_MSVC

#define NOMINMAX //这一句防止max/min函数命名冲突

注:头文件中必须包含此句定义#define COMPILER_MSVC,否则编译失败

② 源文件main.cpp文件内容

#include "main.h"

#include "tensorflow/cc/client/client_session.h"

#include "tensorflow/cc/ops/standard_ops.h"

#include "tensorflow/core/framework/tensor.h"

using namespace tensorflow;

using namespace tensorflow::ops;

int main() {

Scope root = ScopE:TensorFlowc++_lib:NewRootScope();

// Matrix A = [3 2; -1 0]

auto A = Const(root, { { 3.f, 2.f },{ -1.f, 0.f } });

// Vector b = [3 5]

auto b = Const(root, { { 3.f, 5.f } });

// v = Ab^T

auto v = MatMul(root.WithOpName("v"), A, b, MatMul::TransposeB(true));

std::vector<Tensor> outputs;

ClientSession session(root);

// Run and fetch v

TF_CHECK_OK(session.Run({ v }, &outputs));

// Expect outputs[0] == [19; -3]

LOG(INFO) << outputs[0].matrix<float>();

return 0;

}

③ 添加头文件路径

v2-7aa525889655a2376e2851f658d87b73_b.jpg

④ 添加库文件路径

v2-922ae67519d7fde3f2397c08474761fc_b.jpg

⑤ 编译并运行test.exe

v2-8468d9a1979d4d8bd82a082121eb8fc9_b.jpg

输出19 -3表示库文件编译成功。

五、问题汇总

Ø warning C4003: “max”宏的实参不足
error C2589: “(” : “::”右边的非法标记

修改:

将std::numeric_limits::max()改为(std::numeric_limits::max)()