[PYTHON] Memorandum zur Fehlerbehandlung bei PyCUDA-Builds

Nachdem ich die Umgebung von PyCUDA erstellt habe, werde ich unter Buildfehlern leiden, sodass ich ein Memorandum mit Abhilfemaßnahmen hinterlassen werde.

Umweltinformationen

Details des Fehlers

Beim Versuch, eine Matrix auf der GPU zu erstellen (interner Quell-Build-Prozess), tritt ein Fehler auf. Dies liegt an der Version von gcc, g ++ (C, C ++ - Compiler). Ubuntu 20.04 verwendet standardmäßig Version 9 von gcc und g ++, PyCUDA unterstützt jedoch nur bis zu GCC8. Daher ist ein Downgrade erforderlich.

CompileError: nvcc preprocessing of /tmp/tmpu7gbjsl2.cu failed
[command: nvcc --preprocess -arch sm_75 -I/opt/conda/lib/python3.8/site-packages/pycuda/cuda /tmp/tmpu7gbjsl2.cu --compiler-options -P]
[stderr:
b'In file included from /usr/local/cuda-10.1/bin/../targets/x86_64-linux/include/cuda_runtime.h:83,\n                 from <command-line>:\n/usr/local/cuda-10.1/bin/../targets/x86_64-linux/include/crt/host_config.h:129:2: error: #error -- unsupported GNU version! gcc versions later than 8 are not supported!\n  129 | #error -- unsupported GNU version! gcc versions later than 8 are not supported!\n      |  ^~~~~\n']

Überprüfen Sie die Version von gcc und g ++

Überprüfen Sie die Version von gcc und g ++. Sie können sehen, dass "Version 9" die Standardeinstellung für gcc und g ++ ist.

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)

$ ll /usr/bin/gcc
lrwxrwxrwx 1 root root 14 Nov 23 05:53 /usr/bin/gcc -> /usr/bin/gcc-9*

$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)

$ ll /usr/bin/g++
lrwxrwxrwx 1 root root 14 Nov 23 05:54 /usr/bin/g++ -> /usr/bin/g++-9*

Implementierung des Downgrades

Installation von gcc8, g ++ 8

Installieren Sie "gcc-8", "g ++ - 8" mit dem Paketmanager "apt".

sudo apt install -y gcc-8 g++-8

Erstellen einer symbolischen Verknüpfung

Erstellen Sie einen symbolischen Link, sodass die Standardversion von gcc,g ++8 ist.

sudo ln -fs /usr/bin/gcc-8 /usr/bin/gcc

sudo ln -fs /usr/bin/g++-8 /usr/bin/gcc

Zusammenfassung

Mit der obigen Methode tritt der Erstellungsfehler nicht auf. In vielen Fällen kann PyCUDA nur verwendet werden, wenn schwierige Bedingungen für den Umgebungsbau erfüllt sind, z. B. nur die Unterstützung von CUDA 10.1. Ich hoffe, dass es in Zukunft verbessert wird (Beitrag wird ebenfalls berücksichtigt). Der denkwürdige 50. Artikel ist zu einem Artikel über den Umgang mit Fehlern geworden. Im Jahr 2020 haben wir uns das Ziel gesetzt, den 50. Posten zu erreichen, aber dies wurde auf eine Weise erreicht, die nicht unseren Erwartungen entsprach. Im Jahr 2021 möchte ich weiterhin jeden Monat mindestens einen Bericht anstreben.

Reference

Recommended Posts

Memorandum zur Fehlerbehandlung bei PyCUDA-Builds
Fehlerbehandlung im Hauptrahmen
Python-Fehlerbehandlung
SikuliX-Fehlerbehandlung
django.db.migrations.exceptions.InconsistentMigrationHistory Fehlerbehandlung
Fehlerbehandlung in PythonBox
GraphQL (gqlgen) Fehlerbehandlung
Um Fehlerbehandlung von Feedparser
[Fehlergegenmaßnahmen] Fehlerbehandlung bei der Installation von Django-Heroku
Reaktion auf Fehler bei der Installation von mecab-python
Informationen zu FastAPI ~ Endpoint-Fehlerbehandlung ~
[Python] Memorandum zur Vermeidung von SQLAlchemy-Fehlern
Fehler geteilt durch 0 Behandlung von ZeroDivisionError