--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
.
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.
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
Tout d'abord, téléchargez LibTorch à partir du site officiel de PyTorch. Téléchargez les versions Debug et Release.
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.
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
Il existe une solution Visual Studio nommée cmake_sample.sln
dans le dossier de construction, alors ouvrez-la.
Changez la configuration en Debug | x64
et construisez (Ctrl + Shift + B).
Changez le projet sample
en startup et F5.
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.
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
.
Ouvrez la feuille de propriétés avec un éditeur de texte et supprimez la ligne «
Ouvrez le fichier sample.vcxproj
dans un éditeur de texte.
De sample.vcxproj
,
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
De
</ItemDefinitionGroup>
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.
(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.
Créez un «projet vide» approprié dans Visual Studio.
Gestionnaire de l'immeubleDebug|x64
QuandRelease|x64
Quoilibtorch_1_6_0.prop
Ajouter.
Ajoutez le fichier source et écrivez le même contenu que le précédent sample.cpp
.
Changez la configuration en Debug | x64
et F5.
Changez également la configuration en Release | x64
et F5.
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.
Y a-t-il une meilleure façon de le faire?
Recommended Posts