[PYTHON] Version compatible GPU de l'application LibTorch (PyTorch C ++) sur Windows sans CMake (uniquement la première fois)

emballer

--Préparer un exemple de code source et afficher * .sln et * .vcxproj avec CMake. --Créez une feuille de propriétés à partir de * .vcxproj.

en premier

Afin de travailler avec d'autres bibliothèques, je voulais créer une application LibTorch en utilisant uniquement Visual Studio, de préférence sans CMake. (Je pense que cela peut être fait avec CMake en fonction du réglage) Vous pouvez utiliser la version CPU de LibTorch en définissant le chemin d'inclusion et les fichiers dépendants dans Visual Studio uniquement, mais même si vous malaxez divers endroits, le GPU n'était pas activé. Il est facile (moyen) de créer une application compatible GPU avec CMake, mais je n'ai pas trouvé d'article qui activait GPU avec Visual Studio seul, je vais donc l'écrire ici.

De plus, je ne suis pas familier avec CMake, C ++ ou Visual Studio, veuillez donc me faire savoir si vous avez de meilleures informations.

Environnement d'exécution

OS: Windows 10 Enterprise CPU: Core i7-8700K GPU: RTX 2080 SUPER RAM: 8.0x2 GB

Visual Studio 2019 Community CUDA 10.1 cuDNN 7.5.1 LibTorch 1.6.0 C++17 CMake 3.18.0

Préparation

Tout d'abord, téléchargez LibTorch à partir du site officiel de PyTorch. Téléchargez les versions Debug et Release. Image from Gyazo

Décompressez la bibliothèque téléchargée et déplacez-la directement sous C. Renommez la version de débogage en «Déboguer» et la version Release en «Release» et créez la hiérarchie de dossiers comme suit. C: \ libtorch \ 1_6_0 \ (Debug, Release) \ (bin, include, lib, etc.) \ .....

Ensuite, téléchargez et installez CUDA 10.1 à partir du Site officiel. Assurez-vous de l'ajouter à la variable d'environnement PATH.

Ensuite, téléchargez cuDNN 7.5.1 à partir du Site officiel et C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 Copiez bin, include, lib vers. Vous devez créer un compte pour télécharger.

Sortez le système de construction avec CMake et créez une feuille de propriétés

Créer une solution avec CMake

Utilisez CMake pour générer le système de génération (solutions Visual Studio et fichiers de projet). Ici, il est commandé par des commandes, mais VS Code est recommandé car vous pouvez utiliser CMake de manière intuitive. Créez un dossier dans un emplacement approprié (ici, créez un dossier cmake_sample directement sous D), et créez sample.cpp et CMakeLists.txt. Modifiez les deux fichiers comme suit. De plus, cette fois, nous ciblerons C ++ 17.

sample.cpp


 #include <iostream>
 #include <torch/torch.h>
 int main()
 {
     torch::DeviceType device_type;
     if (torch::cuda::is_available())
     {
         std::cout << "CUDA available!\n";
         device_type = torch::kCUDA;
     }
     else
     {
         std::cout << "CPU only.\n";
         device_type = torch::kCPU;
     }
     torch::Device device(device_type);
     auto tensor = torch::randn({2, 3});
     tensor = tensor.to(device);
     std::cout << tensor << std::endl;
 }

CMakeLists.txt


 cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
 project(cmake_sample)
 set(CMAKE_CXX_STANDARD 17) #add
 
 find_package(Torch REQUIRED)
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
 add_executable(sample sample.cpp)
 target_link_libraries(sample "${TORCH_LIBRARIES}")
 # set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
 
 # The following code block is suggested to be used on Windows.
 # According to https://github.com/pytorch/pytorch/issues/25457,
 # the DLLs need to be copied to avoid memory errors.
 if (MSVC)
   file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")
   add_custom_command(TARGET sample
                      POST_BUILD
                      COMMAND ${CMAKE_COMMAND} -E copy_if_different
                      ${TORCH_DLLS}
                      $<TARGET_FILE_DIR:sample>)
 endif (MSVC)

Ouvrez x64_x86 Cross Tools Command Prompt for VS 2019 avec les privilèges d'administrateur et exécutez les commandes suivantes.

$ D:
$ cd cmake_sample
$ mkdir build
$ cd build
$ cmake .. -G "Visual Studio 16 2019" -DCMAKE_PREFIX_PATH=C:\libtorch\1_6_0\Debug

Résultat d'exécution Image from Gyazo

Création d'une feuille de propriétés (configuration de débogage)

Il existe une solution Visual Studio nommée cmake_sample.sln dans le dossier de construction, alors ouvrez-la. Image from Gyazo Changez la configuration en Debug | x64 et construisez (Ctrl + Shift + B). Image from Gyazo Changez le projet sample en startup et F5. Image from Gyazo Si vous voyez les tenseurs CUDA available! Et CUDAFloatType, vous avez réussi à construire. S'il devient CPU, vérifiez la disposition du fichier, les variables d'environnement et les commandes. Image from Gyazo

Après avoir confirmé que l'exécution a réussi, créez un «projet vide» dans Visual Studio et ouvrez le gestionnaire de propriétés. Faites un clic droit sur Debug | x64, ajoutez une nouvelle feuille de propriétés de projet, et créez une feuille de propriétés libtorch_1_6_0.prop. image.png Ouvrez la feuille de propriétés avec un éditeur de texte et supprimez la ligne «». image.png

Ouvrez le fichier sample.vcxproj dans un éditeur de texte. De sample.vcxproj, <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> image.png De </ItemDefinitionGroup> image.png Et collez-le dans la balise <Project> dans libtorch_1_6_0.prop. À ce stade, toutes les parties qui dépendent de sample.cpp sont supprimées. Enregistrez et fermez les deux.

Création de la feuille de propriétés (configuration Release)

(Comme c'est presque le même qu'avant, certains sont omis.)

Supprimez CMakeCache.txt dans le dossier de construction. (important) Ensuite, dans le dossier de construction, la commande suivante

$ cmake .. -G "Visual Studio 16 2019" -DCMAKE_PREFIX_PATH=C:\libtorch\1_6_0\Release

Pour ouvrir la solution Visual Studio dans le dossier de génération. Changez la configuration en Release | x64, compilez et exécutez. Si vous voyez les tenseurs CUDA available! Et CUDAFloatType, vous avez réussi à construire.

Après avoir confirmé que l'exécution a réussi, ouvrez à nouveau la feuille de propriétés libtorch_1_6_0.prop avec un éditeur de texte. Rouvrez le fichier sample.vcxproj dans un éditeur de texte. De sample.vcxproj, <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> De </ItemDefinitionGroup> Et collez-le dans la plage de balises <Project> dans libtorch_1_6_0.prop. Enregistrez et fermez les deux.

Contrôle de fonctionnement

Créez un «projet vide» approprié dans Visual Studio. Gestionnaire de l'immeubleDebug|x64QuandRelease|x64Quoilibtorch_1_6_0.propAjouter. image.png

Ajoutez le fichier source et écrivez le même contenu que le précédent sample.cpp. image.png

Changez la configuration en Debug | x64 et F5. image.png

Changez également la configuration en Release | x64 et F5. image.png

La première fois, * .dll est copié, donc son exécution prend du temps. Si les tenseurs CUDA available! Et CUDAFloatType sont affichés dans les deux, les paramètres sont corrects. Vous pouvez atteindre un point d'arrêt et voir si l'exécution de débogage fonctionne.

Désormais, en réutilisant cette feuille de propriétés, vous pouvez rapidement créer un programme compatible GPU.

Conclusion

Y a-t-il une meilleure façon de le faire?

Recommended Posts

Version compatible GPU de l'application LibTorch (PyTorch C ++) sur Windows sans CMake (uniquement la première fois)
Construction facile de code C ++ avec CMake sur Docker
Exécutez yolov4 "pour le moment" dans Windows
Au moment de la mise à jour de python avec ubuntu
Étapes pour créer PyTorch 1.5 pour CUDA 10.2 sous Windows