在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在本身配置的时候会默认加载一些环境,本人这方面也是小白,这个问题困扰了我好几天才解决,希望能给大家一些帮助,各位大佬可以在评论区分享一下原因。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)