# 说明

本文记录使用 CLionIDE 环境,使用 WSL2 环境下的 CUDA 来调用 PyTorchlibtorch 库内容。

libtorchPyTorch 框架提供的 C++ 接口,因为最近的课题对性能有比较高的要求,并且有自定义算子的需求,所以需要用到相关的代码。

WSL2 下的 CUDA 环境配置可以参考这篇文章

# 配置

# 下载 libtorch

PyTorch官方网站下载自己所需版本的 libtorch 。注意和自己的 CUDA 版本也要对应。

# CLion 配置

打开 CLion 新建一个 CUDA executable 工程。然后修改 CMakeLists.txtCMake 的相关配置。

# WSL2 环境配置

参考这篇知乎文章中的第三步 - 配置 Clion 内的 Toolchains 这一部分的内容。

# CMake 配置

按照 File -> Settings -> Build,Execution,Development -> CMake 的路径,在其中的 CMake options 选项中添加 -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc 的内容。如下图所示:

CMake options

# 修改 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 这一头文件复制到对应位置,在复制之后问题解决。