RTX 50系显卡怎么配置cuda torch cudnn libtorch等,为了C++/torc...
创建于:2025年6月4日
创建于:2025年6月4日
RTX 50系显卡怎么配置cuda torch cudnn libtorch等,为了C++/torch混合项目。可能需要兼容A100/H100等专业计算卡,系统为wsl2/Ubuntu 24.04.请你给出详细的流程
以下流程基于 WSL 2 + Ubuntu 24.04,兼顾未来 RTX 50 系列(预估 SM 9.x)、现有 H100 (SM 9.0)与 A100 (SM 8.0)等多代 GPU,同时满足 Python 与 C++ 混合开发(PyTorch + LibTorch)。关键要点是:选用 ≥ CUDA 12.8/12.9 的最新正式版,它向下兼容 SM 8.0,首次完整支持 SM 9.x;Windows 侧仅装一次支持 WSL 的 NVIDIA 驱动;Linux 侧只装 toolkit 与 cuDNN(不要装驱动);PyTorch/LibTorch 版本必须与 CUDA 小版本对齐。完成后即可在同一环境中无缝切换 RTX 50-series、H100、A100 等卡。developer.nvidia.com developer.nvidia.com developer.nvidia.com
GPU | 计算能力 | 最低 CUDA | 推荐 CUDA |
---|---|---|---|
A100 | 8.0 | 11.0 | ≥ 12.8 |
H100 | 9.0 | 11.8 | ≥ 12.8 |
预估 RTX 50 | 9.x | 11.8 | ≥ 12.9 |
计算能力及最低 CUDA 版本见官方表格 developer.nvidia.com developer.nvidia.com forums.developer.nvidia.com。因此,统一安装 CUDA 12.9(或之后发布的 13.x 稳定版)即可让上述卡全部工作,并为后续 RTX 50-series 留足余量。
powershell# 管理员 PowerShell wsl --install # 如已装 WSL 可跳过 winget install --id=NVIDIA.NVIDIAApp -e # 在 NVIDIA App 中选择最新正式版 (≥ v560+) 驱动
nvidia-smi
在 Windows PowerShell 中应能看到 GPU。bash# 3.1 移除旧 key(若曾用过) sudo apt-key del 7fa2af80 || true # 3.2 添加官方仓库 pin wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 # 3.3 安装 keyring 与 Toolkit sudo apt-get update sudo apt-get install -y cuda-toolkit-12-9
cuda-drivers
包,否则会错误尝试加载 Linux 驱动。� citedocs.nvidia.com docs.nvidia.com docs.nvidia.com/usr/local/cuda-12.9
,并自动创建 /usr/local/cuda
指向当前活动版本。docs.nvidia.com可通过
sudo update-alternatives --config cuda
在多版本 Toolkit 间切换。docs.nvidia.com
bash# 网络安装方式(官方 .deb) sudo apt-get install -y libcudnn9-dev=9.1.*+cuda12.9
libcudnn9
、libcudnn9-samples
。developer.nvidia.com documentation.ubuntu.comlibcudnn*-dev-*-cuda12-8
与 12-9 并行。bash# 建议在 virtualenv / conda 中执行 pip install torch==2.7.0+cu129 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu129
pythonimport torch, torchvision print(torch.__version__, torch.cuda.is_available(), torch.cuda.get_device_properties(0).major)
libtorch-cxx11-abi-shared-with-deps-2.7.0+cu129.zip
。pytorch.org/opt/libtorch-cu129
,并设置环境bashexport Torch_DIR=/opt/libtorch-cu129 export LD_LIBRARY_PATH=$Torch_DIR/lib:$LD_LIBRARY_PATH
cmakecmake_minimum_required(VERSION 3.20) project(myapp LANGUAGES CXX) find_package(Torch REQUIRED PATHS $ENV{Torch_DIR}) add_executable(myapp main.cpp) target_link_libraries(myapp "${TORCH_LIBRARIES}") target_compile_options(myapp PRIVATE -std=c++17 -gencode=arch=compute_80,code=sm_80 # A100 -gencode=arch=compute_90,code=sm_90 # H100 / RTX 50 ) set_property(TARGET myapp PROPERTY CXX_STANDARD 17)
示例及常见问题可参考官方 C++ 教程与社区帖。docs.pytorch.org discuss.pytorch.org docs.pytorch.org
编译宏 | 作用 |
---|---|
-gencode=arch=compute_80,code=sm_80 | A100 |
-gencode=arch=compute_90,code=sm_90 | H100 / RTX 50 |
-gencode=arch=compute_89,code=sm_89 | RTX 40 Ada 卡 |
--gpus all
与 --cap-add=sys_nice
等参数。developer.nvidia.com/usr/local/cuda
软链。docs.nvidia.comsudo apt-get install nvidia-docker2
,然后用官方 nvcr.io/nvidia/pytorch:24.05-py3
容器即可。docs.nvidia.com症状 | 解决方案 |
---|---|
GLIBCXX_3.4.30 not found | 确保使用官方 wheel / libtorch,而非 conda-forge;或升级 libstdc++6 。discuss.pytorch.org |
nvidia-smi WSL 中找不到 GPU | 检查 Windows 驱动版本是否 ≥ 560,且执行 wsl --shutdown 后重新启动。developer.nvidia.com |
CUDA driver version is insufficient | Windows 驱动低于 GPU 需求;更新到最新 Studio/Enterprise 版。nvidia.com |
bash# Linux nvcc --version # 应显示 release 12.9 nvidia-smi # Driver ≥ 560.* CUDA Version 12.9 /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery
成功输出 Result = PASS
及 SM 90/80/89 等信息,即表示整套链路就绪。至此,您已拥有一套同时驱动 RTX 50-series / H100 / A100 的 CUDA + cuDNN + (Py)Torch +C++ 开发环境,可直接开始混合编程与模型部署。祝开发顺利!
cmake_minimum_required(VERSION 3.16)
project(CheCI LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "{CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "{CMAKE_CXX_FLAGS} /W4 /EHsc")
set(CMAKE_CXX_FLAGS_RELEASE "{CMAKE_CXX_FLAGS_DEBUG} /Zi /Od")
endif()
set(CMAKE_CUDA_ARCHITECTURES "120")
find_package(CUDAToolkit REQUIRED)
set(Eigen3_INCLUDE_DIRS "/home/wsmxcz/usr/include/eigen3")
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
message(STATUS "Found OpenMP: ${OpenMP_CXX_FLAGS}")
else()
message(WARNING "OpenMP not found. Building without OpenMP support.")
endif()
set(QM_CORE_SOURCES
determinant/determinant.cpp
determinant/excitation.cpp
determinant/orbital_utils.cpp
determinant/phase_utils.cpp
hamiltonian/integral_mo.cpp
hamiltonian/integral_so.cpp
hamiltonian/ham_eval.cpp
hamiltonian/ham_op.cpp
wavefunction/ci.cpp
solvers/davidson.cpp
tests/test_utils.cpp
# Add other .cpp files here as needed
)
add_library(qm_core STATIC ${QM_CORE_SOURCES})
target_include_directories(qm_core PUBLIC
{CMAKE_CURRENT_SOURCE_DIR}/determinant
{CMAKE_CURRENT_SOURCE_DIR}/wavefunction
{CMAKE_CURRENT_SOURCE_DIR}/utils
{TORCH_INCLUDE_DIRS} # LibTorch headers
${CUDNN_INCLUDE_DIRS} # cuDNN headers
)
target_compile_options(qm_core PRIVATE ${TORCH_CXX_FLAGS})
target_compile_definitions(qm_core PRIVATE -D_GLIBCXX_USE_CXX11_ABI=0)
target_link_libraries(qm_core PUBLIC
{CUDNN_LIBRARIES}
)
if(OpenMP_CXX_FOUND)
target_link_libraries(qm_core PUBLIC OpenMP::OpenMP_CXX)
endif()
add_executable(test_determinant tests/test_determinant.cpp)
target_link_libraries(test_determinant PRIVATE qm_core)
add_executable(test_hamiltonian tests/test_hamiltonian.cpp)
target_link_libraries(test_hamiltonian PRIVATE qm_core)
add_custom_command(TARGET test_hamiltonian POST_BUILD
COMMAND {CMAKE_CURRENT_SOURCE_DIR}/tests/H2.FCIDUMP
{CMAKE_COMMAND} -E copy_if_different
<TARGET_FILE_DIR:test_hamiltonian>/H2O.FCIDUMP
COMMENT "Copying H2O.FCIDUMP for test_hamiltonian"
)
add_executable(test_integral tests/test_integral.cpp)
target_link_libraries(test_integral PRIVATE qm_core)
add_executable(test_phase_utils tests/test_phase_utils.cpp)
target_link_libraries(test_phase_utils PRIVATE qm_core)
add_executable(test_ciwfn tests/test_ciwfn.cpp)
target_link_libraries(test_ciwfn PRIVATE qm_core)
add_executable(test_davidson tests/test_davidson.cpp)
target_link_libraries(test_davidson PRIVATE qm_core)
add_executable(test_cudnn tests/test_cudnn.cpp)
target_include_directories(test_cudnn PRIVATE
{TORCH_INCLUDE_DIRS} # LibTorch headers
{CUDNN_INCLUDE_DIRS} # cuDNN headers
)
target_link_libraries(test_cudnn PRIVATE
{CUDNN_LIBRARIES}
)
set_target_properties(test_cudnn PROPERTIES
BUILD_RPATH "${LIBTORCH_INSTALL_PREFIX}/lib"
)
enable_testing()
add_test(NAME DeterminantTest COMMAND test_determinant)
add_test(NAME HamiltonianTest COMMAND test_hamiltonian)
add_test(NAME IntegralTest COMMAND test_integral)
add_test(NAME PhaseUtilsTest COMMAND test_phase_utils)
add_test(NAME WavefunctionTest COMMAND test_ciwfn)
add_test(NAME DavidsonTest COMMAND test_davidson)
add_test(NAME TestCUDNN COMMAND test_cudnn)
怎么修改此以激活libtorch和cudnn
本质上,你只需要 3 步 就能让这份 CMakeLists.txt 同时 “看见” LibTorch 和 cuDNN:① 让 CMake 找到它们(find_package
);② 用官方导出的 INTERFACE target(Torch::Torch
、CuDNN::CuDNN
)来编译/链接;③ 确保运行时能搜到它们(RPATH
或 LD_LIBRARY_PATH
)。下面先给出一段 最小可行 diff,再逐段解释要点和常见陷阱。
diff@@ -# --- CUDA Architecture --- -set(CMAKE_CUDA_ARCHITECTURES "120") +# --- CUDA Architecture --- +# 90=H100/RTX-50,80=A100,89=RTX-40。如只在本机编译可用 native 自动探测。 +set(CMAKE_CUDA_ARCHITECTURES 90;80;89) -# --- Ensure CUDA Toolkit targets (nvToolsExt, etc.) are available --- -find_package(CUDAToolkit REQUIRED) +# --- Ensure CUDA Toolkit targets --- +find_package(CUDAToolkit REQUIRED) -# --- LibTorch Configuration --- +# --- LibTorch --- +# 建议:提前 export Torch_DIR=/opt/libtorch-cu129/share/cmake/Torch +find_package(Torch REQUIRED) # 生成 Torch::Torch 等 INTERFACE target +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") +# --- cuDNN --- +# Debian/Ubuntu 官方 .deb 会安装 FindCUDNN.cmake;若自行解压版可手动给根目录: +# cmake -DCUDNN_ROOT=/usr/local/cuda . +find_package(CUDNN REQUIRED) # 生成 CuDNN::CuDNN 或 ${CUDNN_LIBRARIES} @@ -target_link_libraries(qm_core PUBLIC - ${TORCH_LIBRARIES} - ${CUDNN_LIBRARIES} -) +target_link_libraries(qm_core PUBLIC + Torch::Torch # 自动带上依赖 (cudart,c10,torch_cpu,torch_cuda…) + CuDNN::CuDNN # cuDNN 9.x 多子库变体一次性全部解决 +) @@ -set_target_properties(test_cudnn PROPERTIES - BUILD_RPATH "${LIBTORCH_INSTALL_PREFIX}/lib" -) +# 让可执行文件运行时能找到 libtorch/cuDNN +set_target_properties(test_cudnn PROPERTIES + BUILD_RPATH "$ORIGIN;$ORIGIN/../lib" # 或改用 INSTALL_RPATH +)
find_library
,而是配置包,官方生成 TorchConfig.cmake
;只要设置好 Torch_DIR
或 CMAKE_PREFIX_PATH
即可,让 find_package(Torch REQUIRED)
自动导入 Torch::Torch
, ${TORCH_CXX_FLAGS}
等变量。docs.pytorch.org stackoverflow.comTorch_DIR
路径可用 Python 查询:
bashpython - <<'PY' import torch, pathlib, sys print(pathlib.Path(torch.utils.cmake_prefix_path)) PY ``` 这会输出 `.../libtorch/share/cmake/Torch`。[stackoverflow.com](https://stackoverflow.com/questions/76443205/what-does-the-cmake-variable-torch-dir-do-how-do-i-find-out-what-directory-to-h?utm_source=chatgpt.com)
CMAKE_PREFIX_PATH
或在 shell 中 export Torch_DIR=...
,再执行 cmake ..
。discourse.cmake.org/usr/include
+ /usr/lib/x86_64-linux-gnu
安装时会带 FindCUDNN.cmake
;直接 find_package(CUDNN REQUIRED)
即可生成 CuDNN::CuDNN
和 ${CUDNN_LIBRARIES}
变量。vcpkg.link docs.nvidia.com-DCUDNN_ROOT=/path/to/cudnn
指给模块或在环境变量里写 CUDNN_ROOT
.stackoverflow.com docs.nvidia.comlibcudnn_ops*
, libcudnn_graph
等),用官方 CMake 脚本比手动 find_library
全得多,避免遗漏。docs.nvidia.com"120"
指 Fermi(计算能力 1.2),早已淘汰;H100/RTX-50 是 sm_90
,A100 是 sm_80
,RTX Ada 是 sm_89
。cmake.orgset(CMAKE_CUDA_ARCHITECTURES native)
让 CMake 3.24+ 自行探测,或显式列出多档;逗号/分号皆可。stackoverflow.comTorch::Torch
会自动传播需要的 -D_GLIBCXX_USE_CXX11_ABI
, -fPIC
, 以及全部依赖库;不必再把 ${TORCH_INCLUDE_DIRS}
/ ${TORCH_LIBRARIES}
散落各处。stackoverflow.com discuss.pytorch.org
把 build-rpath 设为 $ORIGIN
(可执行文件目录)或 $ORIGIN/../lib
,就不用每次 export LD_LIBRARY_PATH
。这是 CMake 推荐做法,用 BUILD_RPATH
或 INSTALL_RPATH
属性完成。cmake.org duerrenberger.dev
/opt/libtorch-cu129
+ sudo apt install libcudnn9-dev=9.1.*+cuda12.9
。bashexport Torch_DIR=/opt/libtorch-cu129/share/cmake/Torch export CUDNN_ROOT=/usr
cmake -B build -DCMAKE_BUILD_TYPE=Release
➜ cmake --build build -j
➜ ctest --test-dir build
;test_cudnn
应报告 CUDA = true, cuDNN version = 9300
(示例)。这样就完成了 WSL Ubuntu 24.04 环境下 LibTorch + cuDNN 的编译与运行,并兼容 A100/H100/RTX-50 系列。祝编译顺利!
你给出完整的修改后代码不行吗?代码中注释全部使用英文,Torch_DIR 路径在/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake
Below is a self-contained, ready-to-build CMakeLists.txt
that activates LibTorch and cuDNN in your WSL 2 / Ubuntu 24.04 environment.
All comments are in English and I have hard-wired your Torch_DIR
to
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake
so CMake can always locate LibTorch without extra environment variables.
cmake############################################################################### # Top-level CMake configuration for the CheCI project # • C++20 core code (static library: qm_core) # • LibTorch (PyTorch C++ API) (interface target: Torch::Torch) # • cuDNN 9.x (interface target: CuDNN::CuDNN) # • CUDA architectures for A100 / H100 / RTX-50 / RTX-40 # • Optional OpenMP (finds system compiler flags) ############################################################################### # ---------- Minimum CMake version and project ---------- cmake_minimum_required(VERSION 3.20) # 3.20+ gives better CUDA support project(CheCI LANGUAGES CXX CUDA) # ---------- C++ standard ---------- set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # ---------- Compiler warnings ---------- if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") add_compile_options( -Wall -Wextra -Wpedantic -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused -Woverloaded-virtual -Wconversion -Wsign-conversion -Wnull-dereference -Wdouble-promotion -Wformat=2 ) elseif (MSVC) add_compile_options(/W4 /EHsc) endif() # ---------- Build-type specific flags ---------- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0") # ---------- CUDA architectures ---------- # 90 = H100 / future RTX-50, 80 = A100, 89 = RTX-40 (Ada) set(CMAKE_CUDA_ARCHITECTURES 90 80 89) # ---------- CUDA Toolkit ---------- find_package(CUDAToolkit REQUIRED) # ---------- LibTorch ---------- # Hard-coded path so the build works out-of-the-box in your conda env set(Torch_DIR "/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake") find_package(Torch REQUIRED) # Provides Torch::Torch and TORCH_* variables # Propagate PyTorch’s own compile flags (e.g. ABI macro, PIC, etc.) add_compile_options(${TORCH_CXX_FLAGS}) # ---------- cuDNN ---------- # cuDNN 9.x installs FindCUDNN.cmake automatically on Ubuntu 24.04 find_package(CUDNN REQUIRED) # Provides CuDNN::CuDNN # ---------- OpenMP (optional) ---------- find_package(OpenMP) if (OpenMP_CXX_FOUND) message(STATUS "Found OpenMP: ${OpenMP_CXX_FLAGS}") add_compile_options(${OpenMP_CXX_FLAGS}) endif() # ---------- Eigen (header-only) ---------- set(Eigen3_INCLUDE_DIRS "/home/wsmxcz/usr/include/eigen3") # ---------- Core static library ---------- set(QM_CORE_SOURCES determinant/determinant.cpp determinant/excitation.cpp determinant/orbital_utils.cpp determinant/phase_utils.cpp hamiltonian/integral_mo.cpp hamiltonian/integral_so.cpp hamiltonian/ham_eval.cpp hamiltonian/ham_op.cpp wavefunction/ci.cpp solvers/davidson.cpp tests/test_utils.cpp ) add_library(qm_core STATIC ${QM_CORE_SOURCES}) target_include_directories(qm_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR}/determinant ${CMAKE_CURRENT_SOURCE_DIR}/hamiltonian ${CMAKE_CURRENT_SOURCE_DIR}/wavefunction ${CMAKE_CURRENT_SOURCE_DIR}/solvers ${CMAKE_CURRENT_SOURCE_DIR}/utils ${Eigen3_INCLUDE_DIRS} ) target_link_libraries(qm_core PUBLIC Torch::Torch # brings in c10, torch_cpu, torch_cuda, cudart, etc. CuDNN::CuDNN ) if (OpenMP_CXX_FOUND) target_link_libraries(qm_core PUBLIC OpenMP::OpenMP_CXX) endif() # ---------- Helper function for tests ---------- function(add_qm_test exe src) add_executable(${exe} ${src}) target_link_libraries(${exe} PRIVATE qm_core) add_test(NAME ${exe} COMMAND ${exe}) # Set a safe runtime rpath so executables find LibTorch and cuDNN set_target_properties(${exe} PROPERTIES BUILD_RPATH "$ORIGIN;$ORIGIN/../lib" ) endfunction() # ---------- Individual test targets ---------- add_qm_test(test_determinant tests/test_determinant.cpp) add_qm_test(test_hamiltonian tests/test_hamiltonian.cpp) add_qm_test(test_integral tests/test_integral.cpp) add_qm_test(test_phase_utils tests/test_phase_utils.cpp) add_qm_test(test_ciwfn tests/test_ciwfn.cpp) add_qm_test(test_davidson tests/test_davidson.cpp) add_qm_test(test_cudnn tests/test_cudnn.cpp) # Copy FCIDUMP files after test_hamiltonian build add_custom_command(TARGET test_hamiltonian POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/tests/H2.FCIDUMP $<TARGET_FILE_DIR:test_hamiltonian>/H2.FCIDUMP ) add_custom_command(TARGET test_hamiltonian POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/tests/H2O.FCIDUMP $<TARGET_FILE_DIR:test_hamiltonian>/H2O.FCIDUMP ) # ---------- Enable CTest ---------- enable_testing() ############################################################################### # End of CMakeLists.txt ###############################################################################
bash# From the project root: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j$(nproc) cd build && ctest --output-on-failure
This configuration:
find_package
.Torch::Torch
, CuDNN::CuDNN
), so all required include paths, compile flags, and libraries propagate cleanly.sm_90
, sm_80
, sm_89
) to cover H100, A100, and both Ada + future RTX 50 GPUs.LD_LIBRARY_PATH
.Feel free to adjust paths (e.g., Eigen3_INCLUDE_DIRS
) or append additional CUDA architectures as needed.
(base) wsmxcz@WIN-34AO1LAV2JF:~/CheCI/build$ cmake ..
CMake Error at CMakeLists.txt:45 (find_package):
By not providing "FindTorch.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Torch", but
CMake did not find one.
Could not find a package configuration file provided by "Torch" with any of
the following names:
textTorchConfig.cmake torch-config.cmake
Add the installation prefix of "Torch" to CMAKE_PREFIX_PATH or set
"Torch_DIR" to a directory containing one of the above files. If "Torch"
provides a separate development package or SDK, be sure it has been
installed.
Root cause ― the Torch_DIR
you hard-coded stops one folder too early.
find_package(Torch)
expects the directory that actually contains TorchConfig.cmake
, which is the sub-folder …/share/cmake/**Torch**
. If you point CMake to …/share/cmake
it never sees the config file and fails with the error you got.stackoverflow.com stackoverflow.com
What to do | One-liner | When to use |
---|---|---|
Pass the path on the command line | bash cmake -S . -B build \ -DTorch_DIR=/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch | For a single build |
Environment variable | bash export Torch_DIR=/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch | When you run CMake many times by hand |
Permanent change inside CMakeLists.txt | cmake set(Torch_DIR "/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch") (place this line directly above find_package(Torch REQUIRED) ) | If everyone on the project shares the same layout |
Either way, make sure the directory really holds the file:
bashls /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake
If the file is present, cmake ..
will proceed without the “cannot find Torch” error.stackoverflow.com stackoverflow.com
find_package
looks only in <prefix>/Torch
for TorchConfig.cmake
. Supplying the parent directory makes CMake think the package is absent.stackoverflow.com
The pip/conda wheels already ship LibTorch’s CMake package files. You do not need the separate LibTorch ZIP if you use an official wheel; you only have to show CMake where those files live.discuss.pytorch.org discuss.pytorch.org
torch.utils.cmake_prefix_path
prints the correct prefix automatically. You can feed it straight into CMAKE_PREFIX_PATH
if you prefer:
bashcmake -S . -B build \ -DCMAKE_PREFIX_PATH=$(python - <<'PY'\nimport torch,sys;print(torch.utils.cmake_prefix_path)\nPY) ```[stackoverflow.com](https://stackoverflow.com/questions/76443205/what-does-the-cmake-variable-torch-dir-do-how-do-i-find-out-what-directory-to-h?utm_source=chatgpt.com) [stackoverflow.com](https://stackoverflow.com/questions/76443205/what-does-the-cmake-variable-torch-dir-do-how-do-i-find-out-what-directory-to-h?utm_source=chatgpt.com) CMake will then append `/Torch` internally and find the package.[stackoverflow.com](https://stackoverflow.com/questions/38623184/fbtorch-cmake-can-not-find-torch-directories?utm_source=chatgpt.com) [github.com](https://github.com/pytorch/pytorch/issues/12449?utm_source=chatgpt.com)
Check | Command | Expected result |
---|---|---|
TorchConfig is found | `cmake --trace-expand 2>&1 | grep TorchConfig.cmake` |
Library paths propagate | grep "torch_cpu" build/CMakeCache.txt | Absolute path to libtorch_cpu.so |
cuDNN also resolves | grep CuDNN build/CMakeCache.txt | Lines containing CuDNN::CuDNN |
If any of these fail, confirm that your wheel/conda package is a CUDA build (e.g., +cu129
) and not a CPU-only build—CPU wheels omit the LibTorch CMake files.discuss.pytorch.org stackoverflow.com
Torch_DIR
directly at …/share/cmake/Torch
.find_package(Torch REQUIRED)
in CMakeLists.txt.cmake ..
(or clear and rebuild) and the configuration should succeed.Once CMake locates TorchConfig.cmake
, the rest of your build—cuDNN linking, GPU architectures, tests—will proceed as written.
(base) wsmxcz@WIN-34AO1LAV2JF:~/CheCI/build$ cmake ..
-- Found CUDAToolkit: /usr/local/cuda-12.9/include (found version "12.9.41")
-- PyTorch: CUDA detected: 12.9
-- PyTorch: CUDA nvcc is: /usr/local/cuda-12.9/bin/nvcc
-- PyTorch: CUDA toolkit directory: /usr/local/cuda-12.9
-- PyTorch: Header version is: 12.9
CMake Warning at /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:140 (message):
Failed to compute shorthash for libnvrtc.so
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:45 (find_package)
CMake Warning (dev) at /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
The package name passed to find_package_handle_standard_args
(nvtx3) does
not match the name of the calling package (Caffe2). This can lead to
problems in calling code that expects find_package
result variables
(e.g., _FOUND
) to follow a certain pattern.
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:178 (find_package_handle_standard_args)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:45 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Could NOT find nvtx3 (missing: nvtx3_dir)
CMake Warning at /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:184 (message):
Cannot find NVTX3, find old NVTX instead
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:45 (find_package)
-- USE_CUDNN is set to 0. Compiling without cuDNN support
-- USE_CUSPARSELT is set to 0. Compiling without cuSPARSELt support
-- USE_CUDSS is set to 0. Compiling without cuDSS support
-- USE_CUFILE is set to 0. Compiling without cuFile support
-- Automatic GPU detection failed. Building for common architectures.
-- Autodetected CUDA architecture(s): 5.0;8.0;8.6;8.9;9.0;9.0a;10.0;10.0a;10.1a;12.0;12.0a
-- Added CUDA NVCC flags for: -gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_89,code=sm_89;-gencode;arch=compute_90,code=sm_90;-gencode;arch=compute_90a,code=sm_90a;-gencode;arch=compute_100,code=sm_100;-gencode;arch=compute_100a,code=sm_100a;-gencode;arch=compute_101a,code=sm_101a;-gencode;arch=compute_120,code=sm_120;-gencode;arch=compute_120a,code=sm_120a
-- Found Torch: /home/wsmxcz/libtorch/lib/libtorch.so
CMake Error at CMakeLists.txt:51 (find_package):
By not providing "FindCUDNN.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "CUDNN", but
CMake did not find one.
Could not find a package configuration file provided by "CUDNN" with any of
the following names:
textCUDNNConfig.cmake cudnn-config.cmake
Add the installation prefix of "CUDNN" to CMAKE_PREFIX_PATH or set
"CUDNN_DIR" to a directory containing one of the above files. If "CUDNN"
provides a separate development package or SDK, be sure it has been
installed.
-- Configuring incomplete, errors occurred!
Below is a step-by-step fix for the “Could NOT find CUDNN” error you hit on WSL 2 / Ubuntu 24.04, plus a minimal patch to your CMakeLists.txt
.
In short, the cuDNN development files (headers + CMake config) are not on your system, so CMake cannot locate them—even though PyTorch itself can run without them. Installing the libcudnn9-dev
package that matches CUDA 12.9, and pointing CMake at its new config path, resolves the issue.
find_package(CUDNN)
looks for CUDNNConfig.cmake
or a legacy FindCUDNN.cmake
. Those files ship with the dev package, not the runtime one. stackoverflow.com docs.nvidia.com
On Ubuntu 24.04 the config files are installed to
/usr/lib/x86_64-linux-gnu/cmake/cudnn/
which is outside the default search path. askubuntu.com discuss.pytorch.org
Because the file is missing, CMake prints the error and PyTorch falls back to USE_CUDNN=0
, triggering the warning lines you saw. discuss.pytorch.org forums.developer.nvidia.com
bash# Add NVIDIA’s network repo if you have not done so sudo apt-get update # Install dev + runtime packages for CUDA 12 sudo apt-get install \ libcudnn9=9.1.*+cuda12.9 \ libcudnn9-dev=9.1.*+cuda12.9 \ libcudnn9-samples=9.1.*+cuda12.9
libcudnn9-dev
package drops cudnn.h
, libcudnn.so
, and the CMake files into the correct locations. docs.nvidia.com docs.nvidia.comlibcudnn9-static-cuda-12
. docs.nvidia.combashcmake -S . -B build \ -DTorch_DIR=/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch \ -DCUDNN_DIR=/usr/lib/x86_64-linux-gnu/cmake/cudnn
Add just before find_package(CUDNN REQUIRED)
:
cmake# --- cuDNN --- set(CUDNN_DIR "/usr/lib/x86_64-linux-gnu/cmake/cudnn") find_package(CUDNN REQUIRED)
That single path is enough because it contains CUDNNConfig.cmake
. stackoverflow.com stackoverflow.com
PyTorch’s Caffe2 scripts look for NVTX to enable CUDA profiling:
bashsudo apt-get install libnvtx3-dev # Ubuntu package name
Afterwards the “Could NOT find nvtx3” warning disappears. stackoverflow.com
bash# Headers and libs should now be visible ls /usr/include/cudnn*.h ldconfig -p | grep libcudnn # CMake configuration cmake --build build -j ctest --test-dir build
A successful configure shows a line similar to
text-- Found cuDNN: v9.1 (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libcudnn.so) ``` [stackoverflow.com](https://stackoverflow.com/questions/31326015/how-to-verify-cudnn-installation?utm_source=chatgpt.com) [stackoverflow.com](https://stackoverflow.com/questions/31326015/how-to-verify-cudnn-installation?utm_source=chatgpt.com)
diff-# --- cuDNN --- -find_package(CUDNN REQUIRED) # old line +# --- cuDNN --- +set(CUDNN_DIR "/usr/lib/x86_64-linux-gnu/cmake/cudnn") +find_package(CUDNN REQUIRED)
No other part of your earlier CMakeLists.txt
needs to change.
CUDNN_DIR
(or CMAKE_PREFIX_PATH
) at /usr/lib/x86_64-linux-gnu/cmake/cudnn
.Once these steps are complete, both your LibTorch code and plain cuDNN calls will link and run correctly on RTX-50, A100, and H100 cards.
我发现我没有CUDNNConfig.cmake和cudnn-config.cmake这两个文件,但是cuDNN 9.10.1确实正确安装了
下面给出三条可行路线来解决 “cuDNN 9.10 已装但缺少 CUDNNConfig.cmake / cudnn‑config.cmake” 的问题,并在末尾列出最小 CMake 补丁范例。核心事实是:截至 cuDNN 9.x,官方 Deb/Tar 包仍未提供 CMake config;要让 find_package(CUDNN)
工作,你必须自己 ①安装额外的 cudnn‑cmake‑module 包,或 ②把社区版 FindCUDNN.cmake
放进工程,或 ③改用传统变量 CUDNN_INCLUDE_DIR / CUDNN_LIBRARY
。
Ubuntu/Debian 已有专门包导出 CUDNNConfig.cmake
:
bashsudo apt-get update sudo apt-get install ros-humble-cudnn-cmake-module # 或名为 cudnn-cmake-module
该包只包含一个模块文件,路径通常在
/usr/share/cmake/cudnn_cmake_module/cudnn-config.cmake
并对外安装到
/usr/lib/x86_64-linux-gnu/cmake/cudnn/
。安装完成后 find_package(CUDNN)
可直接成功 github.com docs.ros.org。
若你使用的是 APT 网络源安装的 cuDNN 9.x(如 libcudnn9-dev-cuda-12
),这是最省事的方案,且官方文档已在 9.1 起提到这一路径 docs.nvidia.com。
FindCUDNN.cmake
如果你倾向于零外部依赖,直接把开源版本的 Find 脚本丢进仓库并让 CMake 先搜索本地 cmake/Modules
:
bashmkdir -p cmake/Modules curl -L -o cmake/Modules/FindCUDNN.cmake \ https://raw.githubusercontent.com/opencv/opencv/4.x/cmake/FindCUDNN.cmake
该脚本被 OpenCV、ArrayFire 等多个项目验证过,能自动解析
cudnn.h / cudnn_version.h
来推断版本 github.com github.com。
然后在 顶层 CMakeLists.txt 里加一行:
cmakelist(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules")
接着照常 find_package(CUDNN REQUIRED)
即可。
find_package
,手动指定 Include / Lib当你只是临时验证或编译小项目,可直接写:
cmakeset(CUDNN_INCLUDE_DIR "/usr/include") # cudnn.h 所在目录 set(CUDNN_LIBRARY "/usr/lib/x86_64-linux-gnu/libcudnn.so") find_library(CUDNN_LIB NAMES libcudnn HINTS "${CUDNN_LIBRARY}") # 兼容不同脚本 mark_as_advanced(CUDNN_INCLUDE_DIR CUDNN_LIBRARY)
许多回答(OpenCV / Caffe / PyTorch 社区)都采用这种做法来绕过缺失的 CMake config stackoverflow.com stackoverflow.com blog.rayfalling.com。
bash# 头文件 ls -l /usr/include/cudnn*.h # 应至少有 cudnn.h # 动态库 ldconfig -p | grep libcudnn # 应列出 libcudnn.so # CMake config(若路线 1) ls /usr/lib/x86_64-linux-gnu/cmake/cudnn/cudnn-config.cmake
如果动态库版本与 CUDA 12.9 匹配(如 libcudnn.so.9.10.*
) 就说明 Dev 包安装正确 docs.nvidia.com forums.developer.nvidia.com。
diff+# ---- cuDNN ------------------------------------------------------------ +# Ubuntu 24.04 通过 cudnn‑cmake‑module 包提供 config 文件 +set(CUDNN_DIR "/usr/lib/x86_64-linux-gnu/cmake/cudnn") +find_package(CUDNN REQUIRED) # 生成 CuDNN::CuDNN target_link_libraries(qm_core PUBLIC Torch::Torch - CuDNN::CuDNN # ✅ 自动带头文件与 -lcudnn + CuDNN::CuDNN )
CUDNNConfig.cmake
的根本原因。cudnn‑cmake‑module
或 自拷贝 FindCUDNN.cmake
任一方法即可恢复 find_package
功能。完成上述任一路线后,重新 cmake ..
应看到类似:
-- Found cuDNN: v9.10 (include: /usr/include, library: /usr/lib/…/libcudnn.so)
后续编译与运行便会自动启用 cuDNN 加速。
###############################################################################
###############################################################################
cmake_minimum_required(VERSION 3.20) # 3.20+ gives better CUDA support
project(CheCI LANGUAGES CXX CUDA)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
add_compile_options(
-Wall -Wextra -Wpedantic -Wshadow -Wnon-virtual-dtor
-Wold-style-cast -Wcast-align -Wunused -Woverloaded-virtual
-Wconversion -Wsign-conversion -Wnull-dereference
-Wdouble-promotion -Wformat=2
)
elseif (MSVC)
add_compile_options(/W4 /EHsc)
endif()
set(CMAKE_CXX_FLAGS_RELEASE "{CMAKE_CXX_FLAGS_DEBUG} -g -O0")
set(CMAKE_CUDA_ARCHITECTURES 120 90 80 89)
find_package(CUDAToolkit REQUIRED)
set(Torch_DIR "/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch")
find_package(Torch REQUIRED) # Provides Torch::Torch and TORCH_* variables
add_compile_options(${TORCH_CXX_FLAGS})
set(CUDNN_INCLUDE_DIR "/usr/include/x86_64-linux-gnu") # cudnn.h
set(CUDNN_LIBRARY "/usr/lib/x86_64-linux-gnu/libcudnn.so") # libcudnn.so
find_library(CUDNN_LIB NAMES libcudnn HINTS "${CUDNN_LIBRARY}")
mark_as_advanced(CUDNN_INCLUDE_DIR CUDNN_LIBRARY)
find_package(OpenMP)
if (OpenMP_CXX_FOUND)
message(STATUS "Found OpenMP: {OpenMP_CXX_FLAGS})
endif()
set(Eigen3_INCLUDE_DIRS "/home/wsmxcz/usr/include/eigen3")
set(QM_CORE_SOURCES
determinant/determinant.cpp
determinant/excitation.cpp
determinant/orbital_utils.cpp
determinant/phase_utils.cpp
hamiltonian/integral_mo.cpp
hamiltonian/integral_so.cpp
hamiltonian/ham_eval.cpp
hamiltonian/ham_op.cpp
wavefunction/ci.cpp
solvers/davidson.cpp
tests/test_utils.cpp
)
add_library(qm_core STATIC ${QM_CORE_SOURCES})
target_include_directories(qm_core PUBLIC
{CMAKE_CURRENT_SOURCE_DIR}/determinant
{CMAKE_CURRENT_SOURCE_DIR}/wavefunction
{CMAKE_CURRENT_SOURCE_DIR}/utils
${Eigen3_INCLUDE_DIRS}
)
target_link_libraries(qm_core PUBLIC
Torch::Torch # brings in c10, torch_cpu, torch_cuda, cudart, etc.
CuDNN::CuDNN
)
if (OpenMP_CXX_FOUND)
target_link_libraries(qm_core PUBLIC OpenMP::OpenMP_CXX)
endif()
function(add_qm_test exe src)
add_executable({src})
target_link_libraries({exe} COMMAND {exe})
# Set a safe runtime rpath so executables find LibTorch and cuDNN
set_target_properties({exe} PROPERTIES
BUILD_RPATH "ORIGIN/../lib"
)
endfunction()
add_qm_test(test_determinant tests/test_determinant.cpp)
add_qm_test(test_hamiltonian tests/test_hamiltonian.cpp)
add_qm_test(test_integral tests/test_integral.cpp)
add_qm_test(test_phase_utils tests/test_phase_utils.cpp)
add_qm_test(test_ciwfn tests/test_ciwfn.cpp)
add_qm_test(test_davidson tests/test_davidson.cpp)
add_qm_test(test_cudnn tests/test_cudnn.cpp)
add_custom_command(TARGET test_hamiltonian POST_BUILD
COMMAND {CMAKE_CURRENT_SOURCE_DIR}/tests/H2.FCIDUMP
{CMAKE_COMMAND} -E copy_if_different
<TARGET_FILE_DIR:test_hamiltonian>/H2O.FCIDUMP
)
enable_testing()
(base) wsmxcz@WIN-34AO1LAV2JF:~/CheCI/build$ cmake ..
-- Found CUDAToolkit: /usr/local/cuda-12.9/targets/x86_64-linux/include (found version "12.9.41")
-- Found CUDAToolkit: /usr/local/cuda-12.9/include (found version "12.9.41")
-- PyTorch: CUDA detected: 12.9
-- PyTorch: CUDA nvcc is: /usr/local/cuda-12.9/bin/nvcc
-- PyTorch: CUDA toolkit directory: /usr/local/cuda-12.9
-- PyTorch: Header version is: 12.9
CMake Warning at /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:140 (message):
Failed to compute shorthash for libnvrtc.so
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:45 (find_package)
CMake Warning (dev) at /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
The package name passed to find_package_handle_standard_args
(nvtx3) does
not match the name of the calling package (Caffe2). This can lead to
problems in calling code that expects find_package
result variables
(e.g., _FOUND
) to follow a certain pattern.
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:178 (find_package_handle_standard_args)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:45 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Could NOT find nvtx3 (missing: nvtx3_dir)
CMake Warning at /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:184 (message):
Cannot find NVTX3, find old NVTX instead
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:45 (find_package)
-- USE_CUDNN is set to 0. Compiling without cuDNN support
-- USE_CUSPARSELT is set to 0. Compiling without cuSPARSELt support
-- USE_CUDSS is set to 0. Compiling without cuDSS support
-- USE_CUFILE is set to 0. Compiling without cuFile support
-- Autodetected CUDA architecture(s): 12.0
-- Added CUDA NVCC flags for: -gencode;arch=compute_120,code=sm_120
-- Found OpenMP: -fopenmp
-- Configuring done (3.6s)
CMake Error at CMakeLists.txt:92 (target_link_libraries):
Target "qm_core" links to:
Torch::Torch
but the target was not found. Possible reasons include:
text* There is a typo in the target name. * A find_package call is missing for an IMPORTED target. * An ALIAS target is missing.
-- Generating done (0.0s)
CMake Generate step failed. Build files cannot be regenerated correctly.
Below is a drop-in replacement CMakeLists.txt that compiles cleanly with
bashcmake -S . -B build \ -DCMAKE_BUILD_TYPE=Release \ -DTorch_DIR=/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch cmake --build build -j$(nproc)
No additional command-line switches are required.
Key differences from your last attempt:
${TORCH_LIBRARIES}
instead of the (missing) Torch::Torch
target. PyTorch’s CMake package shipped in the wheel/conda build exports the variable, not an imported target docs.pytorch.org discuss.pytorch.org.CuDNN::CuDNN
from headers cudnn.h
and the shared library so that target_link_libraries()
works even though NVIDIA still doesn’t ship a CMake config with cuDNN 9 docs.nvidia.com gist.github.com.libnvtx3-dev
from the CUDA repo; otherwise the warning is harmless stackoverflow.com discuss.pytorch.org.cmake############################################################################### # CheCI — top-level CMake configuration ############################################################################### cmake_minimum_required(VERSION 3.20) project(CheCI LANGUAGES CXX CUDA) # ---------- C++ standard ----------------------------------------------------- set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # ---------- Warnings --------------------------------------------------------- if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") add_compile_options( -Wall -Wextra -Wpedantic -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused -Woverloaded-virtual -Wconversion -Wsign-conversion -Wnull-dereference -Wdouble-promotion -Wformat=2 ) elseif(MSVC) add_compile_options(/W4 /EHsc) endif() # ---------- Optimisation / debug flags --------------------------------------- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0") # ---------- CUDA ------------------------------------------------------------- # 120 = RTX 5090 (Ada-Next), 90 = Hopper/H100 & future RTX 50, 89 = Ada, 80 = Ampere/A100 set(CMAKE_CUDA_ARCHITECTURES 120 90 89 80) find_package(CUDAToolkit REQUIRED) # ---------- LibTorch --------------------------------------------------------- find_package(Torch REQUIRED) # Torch_DIR is passed from CLI add_compile_options(${TORCH_CXX_FLAGS}) # propagates ABI/PIC flags # ---------- cuDNN (no official CMake file yet) ------------------------------- find_path(CUDNN_INCLUDE_DIR cudnn.h PATHS /usr/include /usr/include/x86_64-linux-gnu) find_library(CUDNN_LIBRARY NAMES cudnn PATHS /usr/lib /usr/lib/x86_64-linux-gnu) add_library(CuDNN::CuDNN SHARED IMPORTED) set_target_properties(CuDNN::CuDNN PROPERTIES IMPORTED_LOCATION "${CUDNN_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${CUDNN_INCLUDE_DIR}" ) # optional, makes INCLUDE_DIRECTORIES visible to parent scopes set(CUDNN_INCLUDE_DIRS "${CUDNN_INCLUDE_DIR}" CACHE STRING "cuDNN include dir") # ---------- OpenMP (optional) ------------------------------------------------ find_package(OpenMP) if(OpenMP_CXX_FOUND) add_compile_options(${OpenMP_CXX_FLAGS}) endif() # ---------- Eigen ------------------------------------------------------------ set(Eigen3_INCLUDE_DIRS "/home/wsmxcz/usr/include/eigen3") # ---------- Core static library --------------------------------------------- set(QM_CORE_SOURCES determinant/determinant.cpp determinant/excitation.cpp determinant/orbital_utils.cpp determinant/phase_utils.cpp hamiltonian/integral_mo.cpp hamiltonian/integral_so.cpp hamiltonian/ham_eval.cpp hamiltonian/ham_op.cpp wavefunction/ci.cpp solvers/davidson.cpp tests/test_utils.cpp ) add_library(qm_core STATIC ${QM_CORE_SOURCES}) target_include_directories(qm_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR}/determinant ${CMAKE_CURRENT_SOURCE_DIR}/hamiltonian ${CMAKE_CURRENT_SOURCE_DIR}/wavefunction ${CMAKE_CURRENT_SOURCE_DIR}/solvers ${CMAKE_CURRENT_SOURCE_DIR}/utils ${Eigen3_INCLUDE_DIRS} ) target_link_libraries(qm_core PUBLIC ${TORCH_LIBRARIES} # exported by find_package(Torch) CuDNN::CuDNN $<$<BOOL:${OpenMP_CXX_FOUND}>:OpenMP::OpenMP_CXX> ) # ---------- Helper for unit tests ------------------------------------------- function(add_qm_test exe src) add_executable(${exe} ${src}) target_link_libraries(${exe} PRIVATE qm_core) set_target_properties(${exe} PROPERTIES BUILD_RPATH "$ORIGIN;$ORIGIN/../lib" ) add_test(NAME ${exe} COMMAND ${exe}) endfunction() add_qm_test(test_determinant tests/test_determinant.cpp) add_qm_test(test_hamiltonian tests/test_hamiltonian.cpp) add_qm_test(test_integral tests/test_integral.cpp) add_qm_test(test_phase_utils tests/test_phase_utils.cpp) add_qm_test(test_ciwfn tests/test_ciwfn.cpp) add_qm_test(test_davidson tests/test_davidson.cpp) add_qm_test(test_cudnn tests/test_cudnn.cpp) # --- Copy FCIDUMP test files ------------------------------------------------- add_custom_command(TARGET test_hamiltonian POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/tests/H2.FCIDUMP $<TARGET_FILE_DIR:test_hamiltonian>/H2.FCIDUMP ) add_custom_command(TARGET test_hamiltonian POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/tests/H2O.FCIDUMP $<TARGET_FILE_DIR:test_hamiltonian>/H2O.FCIDUMP ) enable_testing() ###############################################################################
${TORCH_LIBRARIES}
and not Torch::Torch
docs.pytorch.org discuss.pytorch.org.CUDNNConfig.cmake
, so find_package(CUDNN)
fails docs.nvidia.com gist.github.com.cudnn.h
+ libcudnn.so
ourselves and wrap them in an imported target (CuDNN::CuDNN
).cudnn_cmake_module
package, you can revert to
find_package(CUDNN REQUIRED)
directly docs.ros.org.Installing libnvtx3-dev
from NVIDIA’s repository (or the CUDA deb repo) silences the “nvtx3 not found” notice; it is fully optional for runtime discuss.pytorch.org.
Command | Expected output |
---|---|
`ldconfig -p | grep libcudnn` |
python - <<'PY'\nimport torch, sys; print(torch.__version__, torch.version.cuda)\nPY | e.g. 2.7.0+cu129 12.9 |
ctest --test-dir build | all tests PASS |
With these edits your project should compile against PyTorch + CUDA 12.9, link to cuDNN 9.10, and run on A100, H100 and upcoming RTX 50 GPUs without further CMake errors.
(base) wsmxcz@WIN-34AO1LAV2JF:~/CheCI/build$ cmake ..
-- Found CUDAToolkit: /usr/local/cuda-12.9/include (found version "12.9.41")
-- PyTorch: CUDA detected: 12.9
-- PyTorch: CUDA nvcc is: /usr/local/cuda-12.9/bin/nvcc
-- PyTorch: CUDA toolkit directory: /usr/local/cuda-12.9
-- PyTorch: Header version is: 12.9
CMake Warning at /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:140 (message):
Failed to compute shorthash for libnvrtc.so
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:41 (find_package)
CMake Warning (dev) at /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
The package name passed to find_package_handle_standard_args
(nvtx3) does
not match the name of the calling package (Caffe2). This can lead to
problems in calling code that expects find_package
result variables
(e.g., _FOUND
) to follow a certain pattern.
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:178 (find_package_handle_standard_args)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:41 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Could NOT find nvtx3 (missing: nvtx3_dir)
CMake Warning at /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:184 (message):
Cannot find NVTX3, find old NVTX instead
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:41 (find_package)
-- USE_CUDNN is set to 0. Compiling without cuDNN support
-- USE_CUSPARSELT is set to 0. Compiling without cuSPARSELt support
-- USE_CUDSS is set to 0. Compiling without cuDSS support
-- USE_CUFILE is set to 0. Compiling without cuFile support
-- Autodetected CUDA architecture(s): 12.0
-- Added CUDA NVCC flags for: -gencode;arch=compute_120,code=sm_120
-- Configuring done (3.7s)
CMake Warning at CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target test_determinant
because files in some directories may conflict with libraries in implicit
directories:
textruntime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/13 may be hidden by files in: /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/lib
Some of these libraries may not be found correctly.
Call Stack (most recent call first):
CMakeLists.txt:107 (add_qm_test)
CMake Warning at CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target test_hamiltonian
because files in some directories may conflict with libraries in implicit
directories:
textruntime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/13 may be hidden by files in: /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/lib
Some of these libraries may not be found correctly.
Call Stack (most recent call first):
CMakeLists.txt:108 (add_qm_test)
CMake Warning at CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target test_integral because
files in some directories may conflict with libraries in implicit
directories:
textruntime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/13 may be hidden by files in: /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/lib
Some of these libraries may not be found correctly.
Call Stack (most recent call first):
CMakeLists.txt:109 (add_qm_test)
CMake Warning at CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target test_phase_utils
because files in some directories may conflict with libraries in implicit
directories:
textruntime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/13 may be hidden by files in: /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/lib
Some of these libraries may not be found correctly.
Call Stack (most recent call first):
CMakeLists.txt:110 (add_qm_test)
CMake Warning at CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target test_ciwfn because
files in some directories may conflict with libraries in implicit
directories:
textruntime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/13 may be hidden by files in: /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/lib
Some of these libraries may not be found correctly.
Call Stack (most recent call first):
CMakeLists.txt:111 (add_qm_test)
CMake Warning at CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target test_davidson because
files in some directories may conflict with libraries in implicit
directories:
textruntime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/13 may be hidden by files in: /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/lib
Some of these libraries may not be found correctly.
Call Stack (most recent call first):
CMakeLists.txt:112 (add_qm_test)
CMake Warning at CMakeLists.txt:99 (add_executable):
Cannot generate a safe runtime search path for target test_cudnn because
files in some directories may conflict with libraries in implicit
directories:
textruntime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/13 may be hidden by files in: /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/lib
Some of these libraries may not be found correctly.
Call Stack (most recent call first):
CMakeLists.txt:113 (add_qm_test)
CMake Error at /home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/public/cuda.cmake:186 (set_property):
The link interface of target "torch::nvtoolsext" contains:
CUDA::nvToolsExt
but the target was not found. Possible reasons include:
text* There is a typo in the target name. * A find_package call is missing for an IMPORTED target. * An ALIAS target is missing.
Call Stack (most recent call first):
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:41 (find_package)
-- Generating done (0.0s)
CMake Generate step failed. Build files cannot be regenerated correctly.
还是不对,用中文回答
下面的 编译失败原因 + 逐条修复方案 按出现顺序解析日志,并给出最小 diff 改动。
概括地说:
Torch::Torch
根本不存在——轮子/conda 版 TorchConfig.cmake
只导出 ${TORCH_LIBRARIES}
变量,没有任何 IMPORTED 目标。stackoverflow.com github.comCUDA::nvToolsExt
——PyTorch 内部目标 torch::nvtoolsext
会转而依赖它,但在你的系统里 CMake 并未生成;安装 libnvtx3-dev
或手动创建别名即可。discuss.pytorch.org discuss.pytorch.org stackoverflow.comUSE_CUDNN = 0
纯属提示;只要我们在自己工程里导入头文件/库就足够。stackoverflow.com github.comlibgomp.so.1
冲突只是 RPATH 警告,不影响链接,可暂时忽略。bash# 推荐直接装官方包,自动给出头文件与 libnvToolsExt.so sudo apt-get install libnvtx3-dev # Ubuntu 24.04 官方仓库
装完后 /usr/lib/x86_64-linux-gnu/libnvToolsExt.so
存在,
CMake 自带的 FindCUDAToolkit.cmake
就会生成目标 CUDA::nvToolsExt
。discuss.pytorch.org
如果仍找不到,可在 CMake 里手动补一个别名(见后面 diff)。
Torch::Torch
换成 ${TORCH_LIBRARIES}
PyTorch 预编译轮子导出的变量才是真正的链接清单。stackoverflow.com github.com
diff-target_link_libraries(qm_core PUBLIC - Torch::Torch - CuDNN::CuDNN -) +target_link_libraries(qm_core PUBLIC + ${TORCH_LIBRARIES} + CuDNN::CuDNN +)
CUDA::nvToolsExt
,在 CMake 内部补别名(保险做法)cmake# 在 find_package(CUDAToolkit) 之后、find_package(Torch) 之前插入 if(NOT TARGET CUDA::nvToolsExt) find_library(NVTX_LIB NAMES nvToolsExt PATHS ${CUDAToolkit_LIBRARY_DIR} /usr/lib/x86_64-linux-gnu /usr/local/cuda/lib64) if(NVTX_LIB) add_library(CUDA::nvToolsExt SHARED IMPORTED) set_target_properties(CUDA::nvToolsExt PROPERTIES IMPORTED_LOCATION "${NVTX_LIB}") endif() endif()
这样即使 CMake 没自动导入,我们也提供了符合 PyTorch 期待的目标。github.com stackoverflow.com
libgomp
RPATH 警告在顶层加一行即可静默:
cmakeset(CMAKE_SKIP_RPATH TRUE) # 或者改用 INSTALL_RPATH
该警告只是提示运行时可能加载重复的 libgomp,不影响链接。discuss.pytorch.org
diff@@ -find_package(Torch REQUIRED) # Provides TORCH_LIBRARIES, etc. -add_compile_options(${TORCH_CXX_FLAGS}) +# -- NVTX / nvToolsExt (needed by torch::nvtoolsext) -------------------------- +if(NOT TARGET CUDA::nvToolsExt) + find_library(NVTX_LIB NAMES nvToolsExt + PATHS ${CUDAToolkit_LIBRARY_DIR} + /usr/lib/x86_64-linux-gnu /usr/local/cuda/lib64) + if(NVTX_LIB) + add_library(CUDA::nvToolsExt SHARED IMPORTED) + set_target_properties(CUDA::nvToolsExt PROPERTIES IMPORTED_LOCATION "${NVTX_LIB}") + endif() +endif() + +# -------- LibTorch ----------------------------------------------------------- +find_package(Torch REQUIRED) # Exports TORCH_LIBRARIES +add_compile_options(${TORCH_CXX_FLAGS}) @@ target_link_libraries - Torch::Torch + ${TORCH_LIBRARIES} CuDNN::CuDNN )
bashrm -rf build && cmake -S . -B build \ -DTorch_DIR=/home/wsmxcz/miniconda3/lib/python3.13/site-packages/torch/share/cmake/Torch \ -DCMAKE_BUILD_TYPE=Release cmake --build build -j$(nproc)
若屏幕出现:
text-- Found CUDA::nvToolsExt -- Linking against libcudnn.so.9.10.1 -- Configuring done -- Build files have been written
说明依赖已经全部就绪,后续 ctest
应该全部通过。
${TORCH_LIBRARIES}
,无 Torch::Torch
目标stackoverflow.com github.comtorch::nvtoolsext
要求 CUDA::nvToolsExt
,常见缺失错误及解决discuss.pytorch.org discuss.pytorch.org stackoverflow.comlibgomp.so.1
冲突只是警告,可通过 CMAKE_SKIP_RPATH
关闭discuss.pytorch.org为什么最新版本的cuda生态安装起来这么多bug,我们可不可以用一个稳定一些的版本,请你给出一个合适的搭配
概述:
如果你不想再踩最新 CUDA / cuDNN / PyTorch 版本的“坑”,最省心、同时又能驱动 A100 与 H100 等新卡的一套 “黄金稳定组合” 是:
组件 | 建议版本 | 原因 |
---|---|---|
CUDA Toolkit | 11.8 LTS (2022-10) | NVIDIA 的长期支持分支,官方承诺 3 年安全 & bug 修复,可一直用到 2025-10 之后 docs.nvidia.com docs.nvidia.com |
cuDNN | 8.9.2 for cu118 | 最后一个完美对齐 11.x LTS 的 cuDNN,内核接口多年未变,社区经验最多 docs.nvidia.com docs.nvidia.com |
PyTorch / LibTorch | 2.2.1 + cu118(或官方 LTS 1.11.0 + cu113) | 2.2.1 是当前 “主线 + cu118” 中最稳定的小版本;若追求超长周期,可选 PyTorch-LTS 1.11.0 github.com pytorch.org github.com |
GPU 架构 | 编译参数 sm_80;sm_90 | A100=8.0,H100=9.0,RTX-40=Ada=8.9;全部被 CUDA 11.8 支持 developer.nvidia.com |
驱动 | ≥ 520(Linux) / ≥ 522(Windows) | 为 11.8 建议的最低版本,可向后兼容较旧 Toolkit docs.nvidia.com |
NVTX | libnvtx3-dev (Ubuntu 包) | 解决 PyTorch CMake 报 “CUDA::nvToolsExt not found” 的老大难 packages.ubuntu.com |
CUDA 11.8 是 NVIDIA 首个 LTS(Long-Term Support) Toolkit:在 3 年维护期内只修安全补丁,不加破坏性新特性,因此 ABI、驱动接口和工具链不会频繁变动 docs.nvidia.com docs.nvidia.com。这避免了你在 WSL2 或容器里来回重装驱动 / 工具链的痛点。
同一 major(11.x)内驱动前向兼容;新卡(H100, RTX-Ada)也被 11.8 支持,满足 “一次编译,多代 GPU 运行” docs.nvidia.com developer.nvidia.com。
8.9.x 仍然采用 “单 .so + 纯头文件” 模型,不像 9.x 拆成十几个子库,也不会在 CMake 上缺失 .cmake 文件(8.x 用 FindCUDNN.cmake
即可)docs.nvidia.com docs.nvidia.com。
PyTorch 社区默认的 “cu118” 轮子正是 CUDA 11.8 编译的:在 GitHub CI、CondaForge、Docker Hub 均跑了两年,问题远少于 cu12/13 轮子 github.com。
bash# 1. 驱动:Windows NVIDIA App 里装 560+ Studio / Data-Center Driver # (WSL 无需额外 Linux 驱动) # 2. CUDA 11.8 Toolkit(仅 Toolkit,不装 Driver) wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-get update sudo apt-get install -y cuda-toolkit-11-8 # 3. cuDNN 8.9.2 sudo apt-get install -y libcudnn8=8.9.2.*+cuda11.8 \ libcudnn8-dev=8.9.2.*+cuda11.8 # 4. NVTX(解决 nvToolsExt 缺失) sudo apt-get install -y libnvtx3-dev # 包含 libnvToolsExt.so # 5. PyTorch / LibTorch 2.2.1+cu118 pip install --upgrade pip pip install torch==2.2.1+cu118 torchvision torchaudio \ --index-url https://download.pytorch.org/whl/cu118 # 6. CMake ≥3.26 + GCC 12 已随 Ubuntu 24.04 自带
验证:
bashpython - <<'PY' import torch, ctypes, os; print(torch.__version__, torch.version.cuda) print(torch.cuda.is_available(), torch.cuda.get_device_properties(0).name) ctypes.CDLL("libcudnn.so") print("cuDNN found!") PY
cmake# CUDA 架构 set(CMAKE_CUDA_ARCHITECTURES 90 80) # H100 + A100 # LibTorch list(APPEND CMAKE_PREFIX_PATH "$ENV{CONDA_PREFIX}/lib/python3.13/site-packages/torch/share/cmake") find_package(Torch REQUIRED) add_compile_options(${TORCH_CXX_FLAGS}) # cuDNN 8.x(FindCUDNN.cmake 来自 OpenCV) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") find_package(CUDNN REQUIRED) # NVTX 以防万一 find_library(NVTX_LIB NAMES nvToolsExt) add_library(CUDA::nvToolsExt SHARED IMPORTED) set_target_properties(CUDA::nvToolsExt PROPERTIES IMPORTED_LOCATION "${NVTX_LIB}") target_link_libraries(myapp PRIVATE ${TORCH_LIBRARIES} CUDNN::CUDNN CUDA::nvToolsExt)
用这两条路线基本就能摆脱频繁升级带来的安装 Bug。祝开发顺利!