Windows11 での xgboost gpu build 時のエラー

2022/10/09に公開

新しい Windows PC に xgboost gpu をビルドしようとしたところ、躓いたので解決方法をメモしておきます。

前提条件

  • Visual Studio 2022 v17.3.4
  • CUDA Toolkit v11.8
  • Cmake v3.24.2
  • xgboost v1.7.0

エラー内容

CUDA toolkit をインストールしているのにも関わらず No CUDA toolset found. となり cmake できない。

PS C:\gitrepositories\xgboost\build> cmake .. -G"Visual Studio 17 2022" -DUSE_CUDA=ON
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.22000.
-- CMake version 3.24.2
-- xgboost VERSION: 1.7.0
-- Configured CUDA host compiler: C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/cl.exe
CMake Warning at C:/Program Files/CMake/share/cmake-3.24/Modules/CMakeDetermineCUDACompiler.cmake:15 (message):
  Visual Studio does not support specifying CUDAHOSTCXX or
  CMAKE_CUDA_HOST_COMPILER.  Using the C++ compiler provided by Visual
  Studio.
Call Stack (most recent call first):
  CMakeLists.txt:133 (enable_language)

CMake Error at C:/Program Files/CMake/share/cmake-3.24/Modules/CMakeDetermineCompilerId.cmake:491 (message):
  No CUDA toolset found.
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.24/Modules/CMakeDetermineCompilerId.cmake:6 (CMAKE_DETERMINE_COMPILER_ID_BUILD)
  C:/Program Files/CMake/share/cmake-3.24/Modules/CMakeDetermineCompilerId.cmake:48 (__determine_compiler_id_test)
  C:/Program Files/CMake/share/cmake-3.24/Modules/CMakeDetermineCUDACompiler.cmake:307 (CMAKE_DETERMINE_COMPILER_ID)
  CMakeLists.txt:133 (enable_language)

-- Configuring incomplete, errors occurred!
See also "C:/GitRepositories/xgboost/build/CMakeFiles/CMakeOutput.log".
See also "C:/GitRepositories/xgboost/build/CMakeFiles/CMakeError.log".

解決方法

原因は Visual Sudio か CUDA Toolkit のどちらかの問題で両者の integration がうまく進んでいないよう。
そのため、手動でインテグレーションを行います。

1. 必要ファイルコピー

次の CUDA フォルダから、Visual Studio フォルダへ CUDA 関係のファイルをコピーします。

powershell
cd "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\extras\visual_studio_integration\MSBuildExtensions"
ls
CUDA 11.8.props
CUDA 11.8.targets
CUDA 11.8.xml
Nvda.Build.CudaTasks.v11.8.dll
powershell
Copy-Item * "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VC\v170\BuildCustomizations"
2. レジストリ設定

次のレジストリキーに CUDA フォルダの値を設定します。

HKEY_LOCAL_MACHINE\SOFTWARE\NVIDIA Corporation\GPU Computing Toolkit\CUDA\v11.8
値の名前 種類 データ
InstallDir REG_SZ (文字列) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8

以上で、cmake .. -G"Visual Studio 17 2022" -DUSE_CUDA=ONのコマンドが通るようになりました。

Discussion