解决libtorch在Clion进行torchscript部署时CUDA不可用

解决libtorch在Clion进行torchscript部署时CUDA不可用,第1张

在libtorclass="superseo">ch进行torchscript部署时发现torch::cuda::is_available()返回为Flase,查资料发现其他人解决的办法为在VS中:

在链接器中 -> 命令行 -> 其他选项中加入: 

/INCLUDE:?warp_size@cuda@at@@YAHXZ

但是我用的是Clion,找了半天也没有发现这个东西,VS里面竟然也没找到(我的Clion的C++是使用VS配置的),后来无意中看到了一个VS配置Clion的帖子(原帖忘记在哪了,抱歉哈),竟然解决了我的问题,下面是我的解决过程。



环境:win10 + vs2017 + opencv 4 + Clion2021 + libtorch-win-shared-with-deps-1.9.0+cu102 + CUDA10.0


首先,需要确保libtorch的版本是GPU版本,而不是CPU版本,我一开始下载的是CPU版本,又踩了一个坑。


换成GPU版本的libtorch之后torch::cuda::is_available()仍然返回为Flase,而且环境配置报了这么一个错:

CMake Error at D:/lib/libtorch/share/cmake/Caffe2/public/cuda.cmake:74 (message):
Caffe2: Couldn't determine version from header: Change Dir:
D:/Clion/DeepLearning/cmake-build-release/CMakeFiles/CMakeTmp

不能从标题中确定版本,这个问题先不管,接着往下。


除了CUDA不可用,libtorch其他的一些 *** 作都是可以正常使用的,这是我的CMake文件:

cmake_minimum_required(VERSION 3.2) #cmake源码
project(DeepLearning)

add_executable (DeepLearning "libtorch.cpp") #设置要编译的源码

set(CMAKE_PREFIX_PATH "D:/lib/libtorch")
set(OpenCV_DIR "D:/Clion/OpenCV 4.5.3/opencv/build/x64/vc15/lib") #opencv的编译路径

find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)  #找到使用opencv需要的别的库

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")

target_link_libraries(DeepLearning ${OpenCV_LIBS} ${TORCH_LIBRARIES})  #链接编译时需要的opencv的动态库到当前的项目
set_property(TARGET DeepLearning PROPERTY CXX_STANDARD 14)
#将动态链接库拷贝到当前程序所在文件夹
if (MSVC)
    file(GLOB TORCH_DLLS "D:/lib/libtorch/lib/*.dll")
    add_custom_command(TARGET DeepLearning  #目标项目
            POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_if_different
            ${TORCH_DLLS}
            $) #项目路径

    file(GLOB OPENCV_DLLS "D:/Clion/OpenCV 4.5.3/opencv/build/x64/vc15/bin/*.dll")
    add_custom_command(TARGET DeepLearning  #目标项目
            POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_if_different
            ${OPENCV_DLLS}
            $) #项目路径

endif (MSVC)

这里libtorch已经换成GPU版本,libtorch在下载的时候最好与自己的pytorch版本对应。


下面一步是关键,只针对于VS对于C++环境的配置:

在Clion中选择 文件->设置->构建、执行、部署->CMake->CMake选项 中输入:

-G "Visual Studio 15 2017 Win64"

  

这个地方的Visual Studio 15 2017根据自己的VS版本进行修改,具体对应关系参考:

Visual Studio 16 2019
Visual Studio 15 2017
Visual Studio 14 2015
Visual Studio 12 2013
Visual Studio 11 2012
Visual Studio 10 2010
Visual Studio 9 2008

点击确定之后上面Couldn't determine version from header这个错误就没了,并且torch::cuda::is_available()返回为True,可正常地将模型和图片加载到GPU上做运算。


至于原因好像是VS在本身配置的时候会默认加载一些环境,本人这方面也是小白,这个问题困扰了我好几天才解决,希望能给大家一些帮助,各位大佬可以在评论区分享一下原因。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/567806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存