关于windows下的libtorch配置

关于windows下的libtorch配置

1.环境

  • Windows service 2012 R2/Windows10
  • Cuda 9.0
  • OpenCV3.4.1
  • Libtorch1.0
  • VS2017/VS2015

2.配置

  • 第一步:CUDA 9.0+cudnn7.5安装(也可以用CUDA8.0)

如果已经安装了cuda8.0及以上版本,可以忽略此步骤。

 

libtorchcuda8.0 cuda9.0的版本,为了与vs版本保持一致,这里建议用cuda9.0版本(当然cuda8.0也可以成功编译),参考安装链接:https://blog.csdn.net/u013165921/article/details/77891913

  •   第二步:VS2017下载

下载Visio Studio Installer,通过Visio Studio Installer安装vs2017,安装时选择使用C++的桌面开发,记得在单个组件上一定要将所有的Windows 10 SDK选上,其他的正常安装.

  • 第三步:VS2017配置Opencv3.4.1(到目前为止libtorch不支持opencv4.0)

这里建议配置opencv3.4版本,目前libtorch还不支持opencv4.0,opencv配置的步骤比较多,如果您的电脑还未配置Opencv,您可以参考这个博客可以配置成功:https://blog.csdn.net/qq_41175905/article/details/80560429,如果在这之前已经配置好了Opencv,可以忽略此步骤.

  • 第四步:Libtorch配置

1.libtorch 1.0 c++版本下载

cuda8.0版本的libtorch1.0下载:https://download.pytorch.org/libtorch/cu80/libtorch-win-shared-with-deps-latest.zip

cuda9.0版本的libtorch1.0下载:https://download.pytorch.org/libtorch/cu90/libtorch-win-shared-with-deps-latest.zip

Windows版本的libtorch已经是编译好了的,下载后解压即可。

2.修改Cmakelists.txt文件:

这里需要修改3个地方:

l  第一个红框修改为当前的cmake版本

l  第二个红框修改为当前的libtorch路径

l  第三个红框设置为当前的..\opencv\build目录路径。

3.libtorch联合编译

首先我已经有了以下等待编译相关文件

在..\build路径下内打开命令行窗口,输入:

cmake -DCMAKE_PREFIX_PATH=C:\Program Files\opencv\build\x64\vc14\lib;D:\data\tanglin\RFBNet\libtorch-win-shared-with-deps-latest\libtorch -DCMAKE_BUILD_TYPE=Release -G"Visual Studio 15 2017 Win64" ..

  

此处分别是opencv路径、libtorch路径和VS版本,需根据自己的环境修改。如果顺利则会显示生成成功:

3.运行

 

打开..\build文件夹,则会看到生成成功的工程文件RFBNet.vcxproj,右键用vs2017或者vs2015打开工程文件。

 

链接..\nms_gpu目录下的gpu_nms.h头文件和nms_lib.lib文件到RFBNet.cpp中,vs2017链接lib静态库参考链接:https://blog.csdn.net/tangyanzhi1111/article/details/78962208。解决方案配置需选择Release x64,点击运行。

 

运行的时候一般会出现找不到torch.dll等问题,因此需要将..\libtorch\lib目录下相对应的dll文件复制到..\build\Release目录下。复制过去后则会成功运行。

 

4.附加

1.关于VS2017+CUDA9.0编程环境配置

cuda安装成功后,会自动设置以下环境变量:

 

 

 

其他教程中还需要在环境变量中添加以下变量,但是我没添加它也可以用:

CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0  
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64 CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

打开VS2017.创建一个空win32程序,即test_cuda项目

 

 

.右键源文件文件夹->添加->新建项->选择CUDA C/C++File,取名test

 

 

选择test_cuda,点击右键–>项目依赖项–>自定义生成,选择CUDA9.0

 

 

点击test.cu的属性,在配置属性–>常规–>项类型–>选择“CUDA C/C++”

 

接下来需要配置一些项目:

右键项目 → 属性 → 配置属性 → VC++目录 → 包含目录,添加以下目录:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\inc

右键项目 → 属性 → 配置属性 → VC++目录 → 库目录,添加以下目录:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64 C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64

 

配置CUDA静态链接库路径:

右键项目 → 属性 → 配置属性 → 链接器 → 常规 → 附加库目录,添加以下目录:

$(CUDA_PATH_V9_0)\lib\$(Platform)

 

选用CUDA静态链接库:

右键项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项,添加以下库:

cublas.lib;cublas_device.lib;cuda.lib;cudadevrt.lib;cudart.lib;cudart_static.lib;cufft.lib;cufftw.lib;curand.lib;cusolver.lib;cusparse.lib;nppc.lib;nppial.lib;nppicc.lib;nppicom.lib;nppidei.lib;nppif.lib;nppig.lib;nppim.lib;nppist.lib;nppisu.lib;nppitc.lib;npps.lib;nvblas.lib;nvcuvid.lib;nvgraph.lib;nvml.lib;nvrtc.lib;OpenCL.lib;

 

修改test.cu,添加以下测试代码:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>int main() {int deviceCount;cudaGetDeviceCount(&deviceCount);int dev;for (dev = 0; dev < deviceCount; dev++){int driver_version(0), runtime_version(0);cudaDeviceProp deviceProp;cudaGetDeviceProperties(&deviceProp, dev);if (dev == 0)if (deviceProp.minor = 9999 && deviceProp.major == 9999)printf("\n");printf("\nDevice%d:\"%s\"\n", dev, deviceProp.name);cudaDriverGetVersion(&driver_version);printf("CUDA驱动版本:                                   %d.%d\n", driver_version / 1000, (driver_version % 1000) / 10);cudaRuntimeGetVersion(&runtime_version);printf("CUDA运行时版本:                                 %d.%d\n", runtime_version / 1000, (runtime_version % 1000) / 10);printf("设备计算能力:                                   %d.%d\n", deviceProp.major, deviceProp.minor);printf("Total amount of Global Memory:                  %u bytes\n", deviceProp.totalGlobalMem);printf("Number of SMs:                                  %d\n", deviceProp.multiProcessorCount);printf("Total amount of Constant Memory:                %u bytes\n", deviceProp.totalConstMem);printf("Total amount of Shared Memory per block:        %u bytes\n", deviceProp.sharedMemPerBlock);printf("Total number of registers available per block:  %d\n", deviceProp.regsPerBlock);printf("Warp size:                                      %d\n", deviceProp.warpSize);printf("Maximum number of threads per SM:               %d\n", deviceProp.maxThreadsPerMultiProcessor);printf("Maximum number of threads per block:            %d\n", deviceProp.maxThreadsPerBlock);printf("Maximum size of each dimension of a block:      %d x %d x %d\n", deviceProp.maxThreadsDim[0],deviceProp.maxThreadsDim[1],deviceProp.maxThreadsDim[2]);printf("Maximum size of each dimension of a grid:       %d x %d x %d\n", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]);printf("Maximum memory pitch:                           %u bytes\n", deviceProp.memPitch);printf("Texture alignmemt:                              %u bytes\n", deviceProp.texturePitchAlignment);printf("Clock rate:                                     %.2f GHz\n", deviceProp.clockRate * 1e-6f);printf("Memory Clock rate:                              %.0f MHz\n", deviceProp.memoryClockRate * 1e-3f);printf("Memory Bus Width:                               %d-bit\n", deviceProp.memoryBusWidth);}return 0;
}

 

生成,这里注意VS2017版本和CUDA9.0不兼容,因此在visio studio installer 2017里面安装VS2015,如图所示:

 

 

如果一切顺利,则会出现:

 

 

2.关于CUDA编程静态链接库的生成

VS2017新建新建-项目-CUDA 9.0 Runtime , 输入项目名称 “test_cuda”此时会自动生成代码 kernel.cu :

 

 

右键项目test_cuda->添加->新建项->选择visual c++头文件,命名为gpu_nms.h

 

 

在头文件中添加函数的声明:

void _nms(int* keep_out, int* num_out, const float* boxes_host, int boxes_num,  int boxes_dim, float nms_overlap_thresh, int device_id);

将新项目自动生成的代码 kernel.cu 里面的内容修改为自己lib文件想要定义的函数内容,同时需要添加之前新建的头文件

#include "gpu_nms.h"

修改test_cuda项目的项目属性,如果是VS2017版本需要将平台工具集修改为vs2015,配置类型设置为静态库(.lib)

 

 

此时所有配置均完成,点击运行,在路径..\test_cuda\x64\Debug目录下则会生成test_cuda.lib文件.

3.vs2017静态链接库lib的引用

vs里面静态链接库引用非常简单,这里介绍两种方法:

l  第一种方法,直接在.c文件中声明所调用的lib文件名“#pragma comment(lib,"Staticlib.lib")

l  第二种方法:

  1. 添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录;
  2. 添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录;
  3.  然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名

 

转载于:https://www.cnblogs.com/yeshengCqupt/p/10622621.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题

这个问题有2种解决方法&#xff1a; 我的报错是&#xff1a;java.sql.SQLSyntaxErrorException: Table gaei_ms.gaei_work_task doesnt exist方法一&#xff1a; 转自&#xff1a;https://confluence.atlassian.com/fishkb/table-xxx-doesn-t-exist-error-with-mysql-server-30…

搭建webpack基础配置

搭建webpack基础步骤&#xff1a; 1.去官方网站下载node.js&#xff08;根据自己电脑的系统类型选择&#xff09; 2.安装node.js完成后打开cmd命令提示符&#xff1a; 出现版本号证明安装成功 3.cd到工程目录下 npm install -g vue-cli&#xff08;这里使用的是vue-cli脚手架安…

研究:多感官教学增强记忆 学习效率事半功倍

人们在记忆外部信息时&#xff0c;必须先要去接受这些信息&#xff0c;而接受信息的“通道”不止一个&#xff0c;有视觉、听觉、嗅觉、味觉、触觉等等。有多种感官参加的记忆叫做“多通道”记忆。图为台中一幼稚园户外写生活动。 生动的教学方法往往可以吸引大多数孩子&#…

330 div+css Experience

今天学习的div&#xff0c;感觉对编辑html更为方便快捷&#xff0c;但还是需要多练&#xff0c;多熟悉一下思路和逻辑方式 越来越感觉&#xff0c;代码不是重要的&#xff0c;重要的是方向和思路&#xff0c;am的float clearfloat 及属性&#xff0c;还有overflow 溢出的三个属…

时间序列的平稳性检验方法汇总

时间序列平稳性检验方法&#xff0c;可分为三类&#xff1a; 图形分析方法 简单统计方法 假设检验方法 一、图形分析方法 可视化数据 可视化数据即绘制时间序列的折线图&#xff0c;看曲线是否围绕某一数值上下波动&#xff08;判断均值是否稳定&#xff09;&#xff0c;看…

tcp的发送端一个小包就能打破对端的delay_ack么?

3.10内核&#xff0c;反向合入4.9的bbr。 最近分析bbr的时候&#xff0c;收集了线上的一些报文&#xff0c;其中有一个疑问一直在我脑海里面&#xff0c;如下&#xff1a; 本身处于delay_ack状态的客户端&#xff0c;大概40ms回复一个delay_ack&#xff0c;当收到一个490字节的…

Git 诞生记

你可能有过这样的经历&#xff1a;在 debug 的时候这里加一句&#xff0c;那里减一句&#xff0c;顺便改改参数&#xff0c;不一会你的程序就从一个 bug 增加到了无数个 bug 。最重要的是&#xff0c;你完全想不起来自己到底改了几个地方&#xff0c;原来的程序到底长什么样子了…

使用pandas进行量化回测(akshare)

本人看法&#xff0c;也就比excel高级一点&#xff0c;距离backtrader这些框架又差一点。做最基础的测试可以&#xff0c;如果后期加入加仓功能&#xff0c;或者是止盈止损等功能&#xff0c;很不合适。只能做最简单的技术指标测试。所以别太当回事。 导包&#xff0c;常用包导…

使用vue+webpack从零搭建项目

vue到现在已经成为一个热门的框架&#xff0c;在项目实践当中&#xff0c;如果想要创建一个新项目&#xff0c;通常都会使用vue-cli的脚手架工具&#xff0c;毋容置疑能够方便很多&#xff0c;很多东西也不需要自己亲自去配置。都知道&#xff0c;脚手架其实是vue结合webpack去…

怎样从Linux终端管理进程:10个你必须知道的命令

本文由 极客范 - Ben Zhang 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。Linux终端有一系列有用的命令。它们可以显示正在运行的进程、杀死进程和改变进程的优先级。本文列举了一些经典传统的命令和一些有用新…

搞了个30天学习量化的数据资料,可以bt做全球。数据链接白送

待会上传代码,资料,打包好了,拿来就能用。累死我了,搞了两天,必须收费,绝不允许白嫖。不然对不起我熬夜,那么辛苦。 确定后,扫描百度网盘 链接:https://pan.baidu.com/s/1C0k6zkjHchFVQaHe4nRMsg?pwd=kkgb 提取码:kkgb 如何回测k线图 如何根据形态选股

自学Linux命令的四种方法

本文由 极客范 - 小道空空 翻译自 Danny Stieben。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。如果你想成为Linux高手&#xff0c;那么掌握一些Linux命令是必不可少的。下面是自学Linux命令的四种方法。 每日提示 学习Linux命令的…

第五周学习总结

第六章&#xff1a; 主要内容: 1.接口 2.实现接口 3.理解接口 4.接口回调 5.接口与多态 6.接口变量做参数 7.面向接口编程 Example6_1: Example6_2: Example6_3: Example6_4: Example6_5: Example6_6: 总结&#xff1a;这章节没有较大问题&#xff0c;例题也都做了一遍。蛮顺利…

Android 设备的CPU类型(通常称为”ABIs”)

armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.arm64-v8a: 第8代、64位ARM处理器&#xff0c;很少设备&#xff0c;三星 Galaxy S6是其中之一。armeabi: 第5代、第6代的ARM处理器&#xff0c;早期的手机用的比较多。x86: 平板、模…

通过8个技巧让你成为一个超强的Linux终端用户

本文由 极客范 - minejo 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。使用Linux终端不仅仅是只输入命令。学习这些基本的技巧&#xff0c;你就会逐渐掌握Bash shell&#xff0c;这个在大多数Linux发行版上默认…

时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析

2019独角兽企业重金招聘Python工程师标准>>> InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计。由于InfluxDB的集群版已在0.12版就不再开源&#xff0c;因此如无特殊说明&#xff0c;本文的介绍对象都是指 InfluxDB 单机版 1. InfluxDB 的…

如何在Linux上提高文本的搜索效率

本文由 极客范 - minejo 翻译自 Xmodulo。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。对于系统管理员或程序员来说&#xff0c;当需要在复杂配置的目录中或者在大型源码树中搜寻特定的文本或模式时&#xff0c;grep类型的工具大概是…

JSch - Java Secure Channel : java 代码实现服务器远程操作

一、前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JSch是SSH2的纯Java实现 。 JSch允许您连接到sshd服务器并使用端口转发&#xff0c;X11转发&#xff0c;文件传输等&#xff0…

前嗅ForeSpider教程:数据建表

今天&#xff0c;小编为大家带来的教程是&#xff1a;如何在前嗅ForeSpider中&#xff0c;进行数据建表操作及各注意事项。主要内容包括&#xff1a;快速建表&#xff0c;自由建表&#xff0c;字段参数&#xff0c;数据表的创建&#xff0c;关联与删除&#xff0c;以及表单变更…

世纪大争论:Linux还是GNU/Linux?

本文由 极客范 - 爱开源的贡献开源社区 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。我们在网上已经习惯用“Linux”来称呼Linux操作系统了&#xff0c;然而&#xff0c;偶尔也用“GNU/Linux”来称呼和指代同…