如何在windows10上使用cmake配置libtorch(vs2022版)

libtorch配置

前往pytorch官网https://pytorch.org/下载libtorch,我下载的是debug版本。下载完成后解压到自己想存放的路径下。
libtorch下载图

cuda配置

前往CUDA官网下载对应的cuda版本,我选择的libtorch是11.8版本,所以cuda我也选择11.8版本,此时cuda已经达到了12版本,所以需要去寻找旧版本https://developer.nvidia.com/cuda-toolkit-archive下载完之后就可以一路安装下去了,我选择的是自定义安装。
CUDA下载图

cudnn配置

前往cudnn官网https://developer.nvidia.com/zh-cn/cudnn解压安装到之前安装cuda的路径的对应文件夹下,例如我的安装目录是 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8,注意一定要下载对应的版本。
cudnn下载图

vs2022配置

前往vs2022官网https://visualstudio.microsoft.com/zh-hans/downloads/下载vs2022,安装C++对应的包。
C++安装包

使用cmake配置

创建新项目
创建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配置成功后保存会出现一下情况:
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";
}

测试的输出为:
test cuDNN,CUDA

posted @ 2023-05-12 11:33  CallMeRoot  阅读(1458)  评论(1编辑  收藏  举报