# 说明
本文记录使用 CLion
的 IDE
环境,使用 WSL2
环境下的 CUDA
来调用 PyTorch
的 libtorch
库内容。
libtorch
是 PyTorch
框架提供的 C++
接口,因为最近的课题对性能有比较高的要求,并且有自定义算子的需求,所以需要用到相关的代码。
WSL2
下的 CUDA
环境配置可以参考这篇文章。
# 配置
# 下载 libtorch
从 PyTorch
的官方网站下载自己所需版本的 libtorch
。注意和自己的 CUDA
版本也要对应。
# CLion
配置
打开 CLion
新建一个 CUDA executable
工程。然后修改 CMakeLists.txt
和 CMake
的相关配置。
# WSL2
环境配置
参考这篇知乎文章中的第三步 - 配置 Clion 内的 Toolchains 这一部分的内容。
# CMake
配置
按照 File
-> Settings
-> Build,Execution,Development
-> CMake
的路径,在其中的 CMake options
选项中添加 -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc
的内容。如下图所示:
# 修改 CMakeLists.txt
首先将下载好的 libtorch
文件解压,这里我解压到了本文件夹下的 libtorch
文件夹中。在 CMakeLists.txt
文件中设置 CMAKE_PREFIX_PATH
变量,添加 libtorch
的路径。添加 find_package(Torch REQUIRED)
语句,以及 target_link_libraries(ProjectName "${TORCH_LIBRARIES}")
,这两行是最关键的内容。
project(ProjectName CXX CUDA) | |
set(CMAKE_PREFIX_PATH libtorch) | |
find_package(Torch REQUIRED) | |
target_link_libraries(ProjectName "${TORCH_LIBRARIES}") |
上方的代码中省去了 CLion
中默认提供的内容,以便让内容更清晰。
# 代码测试
在工程中添加一个 main.cpp
文件,注意在 CMakeLists.txt
也要对应修改 add_executable(ProjectName main.cpp)
这一行的内容。
在 main.cpp
中添加如下的测试代码:
#include <iostream> | |
#include <torch/torch.h> | |
int main() { | |
torch::Tensor tensor = torch::rand({2,3}); | |
std::cout << tensor << std::endl; | |
std::cout << tensor.cuda() << std::endl; | |
return 0; | |
} |
如果编译并运行成功,那么配置完成。
# 可能的错误
如果碰到 PyTorch requires cuDNN 7 and above.
这一问题,可以参考这个 GitHub
链接。问题的原因在于无法识别系统中的 cuDNN
版本。我自己碰到这个问题的原因是没有把 cuDNN
中的 cudnn_version.h
这一头文件复制到对应位置,在复制之后问题解决。