Mémorandum de gestion des erreurs de construction PyCUDA

Après avoir construit l'environnement de PyCUDA, je souffrirai d'erreurs de construction, donc je laisserai un mémorandum de remèdes.

Informations environnementales

Détails de l'erreur

Une erreur se produit lors de la tentative de création d'une matrice sur le GPU (processus de construction de la source interne). Cela est dû à la version de gcc, g ++ (compilateur C, C ++). Ubuntu 20.04 utilise par défaut gcc et g ++ version 9, mais PyCUDA ne prend en charge que jusqu'à GCC 8. Par conséquent, une rétrogradation est requise.

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']

Vérifiez la version de gcc et g ++

Vérifiez la version de gcc et g ++. Vous pouvez voir que «version 9» est la valeur par défaut pour gcc et g ++.

$ 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*

Mise en œuvre du déclassement

Installation de gcc8, g ++ 8

Installez gcc-8, g ++ - 8 en utilisant le gestionnaire de paquets apt.

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

Créer un lien symbolique

Créez un lien symbolique pour que la version par défaut de gcc,g ++soit 8.

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

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

Sommaire

Avec la méthode ci-dessus, l'erreur de génération ne se produira pas. Dans de nombreux cas, PyCUDA ne peut pas être utilisé à moins qu'il ne supprime les conditions difficiles pour la construction de l'environnement, comme la prise en charge uniquement de CUDA 10.1. J'espère qu'il sera amélioré à l'avenir (une contribution est également envisagée). Le 50e article mémorable est devenu un article sur le traitement des erreurs. En 2020, nous nous sommes fixé comme objectif d'atteindre le 50e poste, mais cela a été réalisé d'une manière qui n'était pas ce à quoi nous nous attendions. En 2021, je souhaite continuer à viser au moins un rapport par mois.

Reference

Recommended Posts

Mémorandum de gestion des erreurs de construction PyCUDA
Gestion des erreurs de trame principale
Gestion des erreurs Python
Gestion des erreurs SikuliX
django.db.migrations.exceptions.InconsistentMigrationHistory Gestion des erreurs
Gestion des erreurs dans PythonBox
Gestion des erreurs GraphQL (gqlgen)
Autour de la gestion des erreurs de feedparser
[Contre-mesures d'erreur] Gestion des erreurs d'installation de django-heroku
Réponse aux erreurs lors de l'installation de mecab-python
À propos de FastAPI ~ Gestion des erreurs de point de terminaison ~
[Python] Mémorandum sur l'évitement des erreurs SQLAlchemy
Erreur divisée par 0 Gestion de ZeroDivisionError