如何在windows10上使用cmake配置libtorch(vs2022版)
libtorch配置
前往pytorch官网https://pytorch.org/下载libtorch,我下载的是debug版本。下载完成后解压到自己想存放的路径下。
cuda配置
前往CUDA官网下载对应的cuda版本,我选择的libtorch是11.8版本,所以cuda我也选择11.8版本,此时cuda已经达到了12版本,所以需要去寻找旧版本https://developer.nvidia.com/cuda-toolkit-archive下载完之后就可以一路安装下去了,我选择的是自定义安装。
cudnn配置
前往cudnn官网https://developer.nvidia.com/zh-cn/cudnn解压安装到之前安装cuda的路径的对应文件夹下,例如我的安装目录是 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
,注意一定要下载对应的版本。
vs2022配置
前往vs2022官网https://visualstudio.microsoft.com/zh-hans/downloads/下载vs2022,安装C++对应的包。
使用cmake配置
创建新项目
然后一路下去就可以创建自己的cmake项目了。 下面写一下CmakeList.txt,按照以下来写就可以。
# CMakeList.txt: jellyfish 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
# Enable Hot Reload for MSVC compilers if supported.
if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()
project ("jellyfish")
set(CMAKE_PREFIX_PATH D:/libtorch)
find_package(Torch REQUIRED)
include_directories("D:/libtorch/include")
include_directories("D:/libtorch/include/torch/csrc/api/include")
# 将源代码添加到此项目的可执行文件。
add_executable (jellyfish "jellyfish.cpp" "jellyfish.h")
target_link_libraries(jellyfish "${TORCH_LIBRARIES}")
if (CMAKE_VERSION VERSION_GREATER 3.12)
set_property(TARGET jellyfish PROPERTY CXX_STANDARD 20)
endif()
if (MSVC)
file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")
add_custom_command(TARGET jellyfish
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${TORCH_DLLS}
$<TARGET_FILE_DIR:jellyfish>)
endif (MSVC)
# TODO: 如有需要,请添加测试并安装目标。
以上CmakeList的配置是以我项目名称配置的,有需要修改的地方。1.替换所有的jellyfish
为自己的项目名称。2.替换libtorch路径为自己的路径,更方便的做法就是将所有的D:/libtorch/
替换成自己的libtorch路径。3.cmake版本换成自己的版本。
如果嫌弃麻烦的话,在创建项目后,直接在生成的cmake上修改也可以,具体修改方法如下:
1.在project ("自己的项目名称")
后面加上
set(CMAKE_PREFIX_PATH 自己的libtorch路径)
find_package(Torch REQUIRED)
include_directories("自己的libtorch路径/include")
include_directories("自己的libtorch路径/include/torch/csrc/api/include")
2.在add_executable (自己项目名称 自己的cpp文件名称)
后面加上
target_link_libraries(自己项目名称 "${TORCH_LIBRARIES}")
3.在add_executable (自己项目名称 自己的cpp文件名称)
后面加上
if (MSVC)
file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")
add_custom_command(TARGET 自己项目名称
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${TORCH_DLLS}
$<TARGET_FILE_DIR:自己项目名称>)
endif (MSVC)
cmake配置成功后保存会出现一下情况:
以下是测试cuDNN、CUDA、设备数和计算的测试代码:
#include <iostream>
#include <torch/script.h>
#include <torch/torch.h>
void test_libtorch_version() {
if (torch::cuda::cudnn_is_available())
{
std::cout << "cuDNN is available." << std::endl;
}
else
{
std::cout << "cuDNN is not available." << std::endl;
}
if (torch::cuda::is_available())
{
std::cout << "CUDA is available." << std::endl;
}
else
{
std::cout << "CUDA is not available." << std::endl;
}
std::cout << "Device count : " << torch::cuda::device_count() << std::endl;
}
int main(int, char**) {
test_libtorch_version();
torch::Tensor a = torch::randint(10, 20, { 3, 2 });
std::cout << a << std::endl;
std::cout << "Hello, world!\n";
}
测试的输出为: