[PYTHON] GPU-fähiger Build der LibTorch-App (PyTorch C ++) unter Windows ohne CMake (nur beim ersten Mal)

einpacken

zunaechst

Um mit anderen Bibliotheken zu verknüpfen, wollte ich eine LibTorch-App nur mit Visual Studio erstellen, vorzugsweise ohne CMake. (Ich denke, es kann mit CMake je nach Einstellung gemacht werden) Sie können die CPU-Version von LibTorch verwenden, indem Sie den Include-Pfad und die abhängigen Dateien nur in Visual Studio festlegen. Selbst wenn Sie verschiedene Stellen kneten, wurde die GPU nicht aktiviert. Es ist einfach (so lala), eine GPU-fähige App mit CMake zu erstellen, aber ich habe keinen Artikel gefunden, der GPU-fähig mit Visual Studio allein aktiviert, also schreibe ich ihn hier.

Außerdem bin ich mit CMake, C ++ oder Visual Studio nicht vertraut. Lassen Sie mich daher wissen, wenn Sie bessere Informationen haben.

Ausführungsumgebung

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

Vorbereitung

Laden Sie zunächst LibTorch von der offiziellen PyTorch-Website herunter. Laden Sie sowohl die Debug- als auch die Release-Version herunter. Image from Gyazo

Entpacken Sie die heruntergeladene Bibliothek und verschieben Sie sie direkt unter C. Benennen Sie die Debug-Version in "Debug" und die Release-Version in "Release" um und stellen Sie die Ordnerhierarchie wie folgt ein. C: \ libtorch \ 1_6_0 \ (Debug, Release) \ (bin, include, lib usw.) \ .....

Laden Sie anschließend CUDA 10.1 von der [offiziellen Website] herunter und installieren Sie es (https://developer.nvidia.com/cuda-10.1-download-archive-update2?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exenetwork). Stellen Sie sicher, dass Sie es der Umgebungsvariablen PATH hinzufügen.

Laden Sie anschließend cuDNN 7.5.1 von der offiziellen Website herunter und C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 Kopieren Sie bin, include, lib to. Sie müssen ein Konto zum Herunterladen erstellen.

Geben Sie das Build-System mit CMake aus und erstellen Sie ein Eigenschaftenblatt

Erstellen Sie eine Lösung mit CMake

Verwenden Sie CMake, um das Build-System auszugeben (Visual Studio-Lösungen und Projektdateien). Hier wird es von Befehlen bedient, aber VS-Code wird empfohlen, da Sie CMake intuitiv bedienen können. Erstellen Sie einen Ordner an einem geeigneten Ort (hier erstellen Sie einen cmake_sample-Ordner direkt unter D) und erstellen Sie sample.cpp und CMakeLists.txt. Bearbeiten Sie die beiden Dateien wie folgt. Auch dieses Mal werden wir auf C ++ 17 abzielen.

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)

Öffnen Sie die x64_x86 Cross Tools-Eingabeaufforderung für VS 2019 mit Administratorrechten und führen Sie die folgenden Befehle aus.

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

Ausführungsergebnis Image from Gyazo

Erstellung eines Eigenschaftenblatts (Debug-Konfiguration)

Im Build-Ordner befindet sich eine Visual Studio-Lösung mit dem Namen "cmake_sample.sln". Öffnen Sie sie daher. Image from Gyazo Ändern Sie die Konfiguration in "Debug | x64" und erstellen Sie (Strg + Umschalt + B). Image from Gyazo Ändern Sie das Projekt sample in Startup und F5. Image from Gyazo Wenn Sie die Tensoren "CUDA verfügbar!" Und "CUDAFloatType" sehen, haben Sie erfolgreich gebaut. Wenn es zu "CPU" wird, überprüfen Sie das Dateilayout, die Umgebungsvariablen und die Befehle. Image from Gyazo

Nachdem Sie bestätigt haben, dass die Ausführung erfolgreich war, erstellen Sie in Visual Studio ein "leeres Projekt" und öffnen Sie den Eigenschaftenmanager. Klicken Sie mit der rechten Maustaste auf "Debug | x64", fügen Sie ein neues Projekteigenschaftsblatt hinzu und erstellen Sie ein Eigenschaftenblatt "libtorch_1_6_0.prop". image.png Öffnen Sie das Eigenschaftenblatt mit einem Texteditor und löschen Sie die Zeile "". image.png

Öffnen Sie die Datei "sample.vcxproj" in einem Texteditor. Von sample.vcxproj, <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> image.png Von </ItemDefinitionGroup> image.png Und fügen Sie es in das Tag in libtorch_1_6_0.prop ein. Zu diesem Zeitpunkt werden alle Teile gelöscht, die von "sample.cpp" abhängen. Speichern und schließen Sie beide.

Erstellung des Eigenschaftenblatts (Release-Konfiguration)

(Da es fast das gleiche wie zuvor ist, werden einige weggelassen.)

Löschen Sie "CMakeCache.txt" im Build-Ordner. (wichtig) Dann im Build-Ordner den folgenden Befehl

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

So öffnen Sie die Visual Studio-Lösung im Build-Ordner Ändern Sie die Konfiguration in "Release | x64", erstellen Sie sie und führen Sie sie aus. Wenn Sie die Tensoren "CUDA verfügbar!" Und "CUDAFloatType" sehen, haben Sie erfolgreich gebaut.

Nachdem Sie bestätigt haben, dass die Ausführung erfolgreich war, öffnen Sie das Eigenschaftenblatt libtorch_1_6_0.prop erneut mit einem Texteditor. Öffnen Sie die Datei "sample.vcxproj" erneut in einem Texteditor. Von sample.vcxproj, <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> Von </ItemDefinitionGroup> Und fügen Sie es in den Tag-Bereich "" in "libtorch_1_6_0.prop" ein. Speichern und schließen Sie beide.

Funktionsprüfung

Erstellen Sie ein geeignetes "leeres Projekt" in Visual Studio. HausverwaltungDebug|x64WannRelease|x64Waslibtorch_1_6_0.propHinzufügen. image.png

Fügen Sie die Quelldatei hinzu und schreiben Sie den gleichen Inhalt wie die vorherige sample.cpp. image.png

Ändern Sie die Konfiguration in "Debug | x64" und F5. image.png

Ändern Sie außerdem die Konfiguration in "Release | x64" und F5. image.png

Das erste Mal wird "* .dll" kopiert, daher dauert die Ausführung einige Zeit. Wenn die Tensoren "CUDA verfügbar!" Und "CUDAFloatType" auf beiden Seiten angezeigt werden, sind die Einstellungen korrekt. Sie können einen Haltepunkt erreichen und prüfen, ob der Debug-Lauf funktioniert.

Von nun an können Sie durch Wiederverwenden dieses Eigenschaftenblatts schnell ein GPU-kompatibles Programm erstellen.

Fazit

Gibt es einen besseren Weg, dies zu tun?

Recommended Posts

GPU-fähiger Build der LibTorch-App (PyTorch C ++) unter Windows ohne CMake (nur beim ersten Mal)
Einfache Erstellung von C ++ - Code mit CMake auf Docker
Führen Sie yolov4 "vorerst" in Windows aus
Zum Zeitpunkt des Python-Updates mit Ubuntu
Schritte zum Erstellen von PyTorch 1.5 für CUDA 10.2 unter Windows