關于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.pswp.cn/news/449374.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449374.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449374.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring集成多個rabbitMQ

轉自&#xff1a;https://blog.csdn.net/zz775854904/article/details/81092892 MQ全稱為Message Queue, 消息隊列&#xff08;MQ&#xff09;是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息&#xff08;針對應用程序的數據&#xff09;來通信&#xff0…

解決(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…

一個三流學校程序員的奮斗歷程

寫作用意 這些日子我一直在寫一個實時操作系統內核&#xff0c;已有小成了&#xff0c;等寫完我會全部公開&#xff0c;希望能夠為國內IT的發展盡自己一份微薄的力量。最近看到很多學生朋友和我當年一樣沒有方向&#xff0c;所以把我的經歷寫出來與大家共勉&#xff0c;希望能…

真格量化——做空波動率策略

# coding:utf-8 #!/usr/bin/env python # EmuCounter2 from PoboAPI import * import datetime import numpy as np#開始時間,用于初始化一些參數 def OnStart(context) :print "system starting..."#設定全局變量品種g.code1 = "m1901-C-3300.DCE" #豆粕…

搭建webpack基礎配置

搭建webpack基礎步驟&#xff1a; 1.去官方網站下載node.js&#xff08;根據自己電腦的系統類型選擇&#xff09; 2.安裝node.js完成后打開cmd命令提示符&#xff1a; 出現版本號證明安裝成功 3.cd到工程目錄下 npm install -g vue-cli&#xff08;這里使用的是vue-cli腳手架安…

JPA 中 sql 預編譯 -- EntityManager 使用 預編譯

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 實現方式 &#xff1a; 1. 注入em: PersistenceContextprivate EntityManager entityManager; 注入方式 2&#xff1a; PersistenceUn…

持續記函數

自己寫文章的緣由 juejin.im/post/5c7368… 2019年2月26日 星期二 array_shift — 將數組開頭的單元移出數組 <?php $stack array("orange", "banana", "apple", "raspberry"); $fruit array_shift($stack); print_r($stack); ?…

研究:多感官教學增強記憶 學習效率事半功倍

人們在記憶外部信息時&#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 pull 無需輸入賬號和密碼

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如果你用git從遠程pull拉取代碼&#xff0c;每次都要輸入密碼&#xff0c;那么執行下面命令即可 git config --global credential.help…

Git 誕生記

你可能有過這樣的經歷&#xff1a;在 debug 的時候這里加一句&#xff0c;那里減一句&#xff0c;順便改改參數&#xff0c;不一會你的程序就從一個 bug 增加到了無數個 bug 。最重要的是&#xff0c;你完全想不起來自己到底改了幾個地方&#xff0c;原來的程序到底長什么樣子了…

使用pandas進行量化回測(akshare)

本人看法&#xff0c;也就比excel高級一點&#xff0c;距離backtrader這些框架又差一點。做最基礎的測試可以&#xff0c;如果后期加入加倉功能&#xff0c;或者是止盈止損等功能&#xff0c;很不合適。只能做最簡單的技術指標測試。所以別太當回事。 導包&#xff0c;常用包導…

【BZOJ4543】【POI2014】Hotel加強版(長鏈剖分)

傳送門 題意&#xff1a;求樹上滿足三點之間距離兩兩相等的三元組個數 n≤1e5n\le 1e5n≤1e5 原題數據是n≤5000n\le5000n≤5000 考慮怎么做f[u][i]f[u][i]f[u][i]表示uuu為根&#xff0c;深度為iii的點的個數g[u][i]g[u][i]g[u][i]表示uuu為根&#xff0c;滿足2點到lcalcalca的…

使用vue+webpack從零搭建項目

vue到現在已經成為一個熱門的框架&#xff0c;在項目實踐當中&#xff0c;如果想要創建一個新項目&#xff0c;通常都會使用vue-cli的腳手架工具&#xff0c;毋容置疑能夠方便很多&#xff0c;很多東西也不需要自己親自去配置。都知道&#xff0c;腳手架其實是vue結合webpack去…

CentOS 6 和 CentOS 7 防火墻的關閉

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。CentOS6.5查看防火墻的狀態&#xff1a; 1[linuxidclocalhost ~]$service iptable status顯示結果&#xff1a; 12345[linuxidclocalhost …

怎樣從Linux終端管理進程:10個你必須知道的命令

本文由 極客范 - Ben Zhang 翻譯自 Chris Hoffman。歡迎加入極客翻譯小組&#xff0c;同我們一道翻譯與分享。轉載請參見文章末尾處的要求。Linux終端有一系列有用的命令。它們可以顯示正在運行的進程、殺死進程和改變進程的優先級。本文列舉了一些經典傳統的命令和一些有用新…

易盛極星多合約回測(問題很多)

注意&#xff0c;使用此函數&#xff0c;在考慮手續費時&#xff0c;無法做到統一。 import talib import numpy as np import EsTalib from EsSeries import NumericSeries# 策略參數字典 g_params[p1] 5 g_params[p2] 10 g_params[p3] 120 g_params[ZQ] 5 #交易周期…

Qt 程序獲取程序所在路徑、用戶目錄路徑、臨時文件夾等特殊路徑的方法

Qt 程序獲取程序所在路徑、用戶目錄路徑、臨時文件夾等特殊路徑的方法 經常我們的程序中需要訪問一些特殊的路徑&#xff0c;比如程序所在的路徑、用戶目錄路徑、臨時文件夾等。在 Qt 中實現這幾個功能所用的方法雖然都不難&#xff0c;但是各不相同&#xff0c;每次用到時還要…