1 votes

Comment utiliser la boîte à outils CUDA sur le GeForce GTX 460m en 2020

Mon ami m'a donné cet ordinateur portable il y a quelques années car il a évolué depuis. Il possède un GPU et je veux commencer à jouer avec TensorFlow ou les GPU en général. Je n'ai jamais réussi à installer TensorFlow, CUDA, etc. sur cet ordinateur. C'est un GeGorce GTX 460m et un Intel i7. Je pense qu'il a le potentiel pour être la star de mon Cluster Finux, qui comprend des antiquités telles que l'ISKCON ppc7450, qui fonctionne également sous Ubuntu 16.04.

En essayant d'utiliser ce GPU, j'ai essayé VoidLinux, Linux from Scratch, Ubuntu, Kali, etc, dans cet ordre. Je suis actuellement en train de réessayer avec une nouvelle installation d'Ubuntu 16.04 server sans interface graphique. Elle tient sur ma clé USB de 1 Go.

Ce que j'ai compris est le suivant. Je l'ai fait en tant que root, mais j'aurais probablement dû passer en mode mono-utilisateur :

  1. Appliquez les corrections de bogues, mais ne faites jamais do-release-upgrade.

    apt update && apt full-upgrade

MISE À JOUR : les étapes (9-10) peuvent être effectuées ici pour réduire ce problème à un seul redémarrage.

  1. Cela ne s'applique pas dans mon cas, mais pour les installations graphiques, blacklist nouveau, et :

    modprobe -r <some variant of nouveau>
  2. Téléchargez et installez le pilote vidéo 390.138 . Autres versions du pilote aquí Mais il faut regarder dans les petits caractères pour trouver les options avancées, c'est-à-dire les anciennes versions et les versions bêta.

    Pour les nouvelles versions d'Ubuntu, il y a un décalage de version du compilateur concernant DKMS, le module NVidia, GCC 5/7, qui peut être contourné par update-alternatives. Les autres solutions de contournement n'ont pas fonctionné pour moi.

  3. Faites en sorte que le nouveau pilote se charge au démarrage.

    update-initramfs -u
  4. contrôle de l'intégrité

    nvidia-smi
  5. Téléchargez et installez la boîte à outils CUDA 9.1 8.0 et son trois pièces patch. Ne le laissez pas écraser votre pilote. Pour les autres versions du pilote, il y a un matrice de compatibilité pour déterminer la version du SDK requise.

    La page de téléchargement du pilote nous aide à sélectionner la version de notre système d'exploitation, dans ce cas, soit 16.04 ou 17.04, la préférence allant aux numéros de version pairs. Ces scripts doivent être exécutés un par un, car ils ne semblent pas donner un statut de sortie raisonnable lorsqu'ils échouent.

  6. Redémarrez et connectez-vous en tant que non-root. Les programmes n'étaient pas liés correctement, et c'est ce qui a réglé le problème pour moi. Je suppose que cela a quelque chose à voir avec /etc/environment et /etc/profile, et quand et quels processus en font la source.

    MISE À JOUR : peut-être qu'il suffit de se déconnecter. Utiliser /etc/profile.d et /etc/ld.so.conf.d au lieu de /etc/environment

  7. Lorsque je compile le programme que je veux exécuter, je spécifie le chemin vers la bibliothèque avec cuInit().

    CUDA_LIB=/usr/local/cuda/lib64/stubs/libcuda.so

    Je spécifie également mon architecture, car ne pas la spécifier donne des résultats :

    no kernel image is available for execution on the device.

    C'est un 460m, donc il a capacité de calcul 2.1.

    CCAP=21

    CCAP=20
    CCSM=21

    MISE À JOUR : il semble que mon système ait besoin de "-gencode arch=compute_20,code=[sm_21,compute_20]".

    Nous pourrions aussi bien spécifier notre CPU. GCC dit C'est un Sandybridge.

    ARCH=sandybridge

    Ensuite, le passage des arguments avec des espaces est probablement mieux fait avec un tableau, avec la mise en garde que de telles variables ne peuvent pas être exportées.

    export CFLAGS="-march=$ARCH -mtune=$ARCH"
    CMAKE_CONF=( "-DCUDA_LIB=$CUDA_LIB"
      "-DCUDA_NVCC_FLAGS=-gencode arch=compute_$CCAP,code=[sm_$CCSM,compute_$CCAP]" )
    
    mkdir build && cd build &&
    cmake .. -G Ninja "${CMAKE_CONF[@]}" && cd .. &&
    cmake --build build && cd build
    #sudo cmake --build build --target install
    # ninja: error: unknown target 'install'

    MISE À JOUR : CUDA_LIB est une variable spécifique au projet. A la place, faites :

    ~~echo /usr/local/cuda/lib64/stubs | sudo tee -a /etc/ld.so.conf.d/nvidia.conf && sudo ldconfig~~

    MISE À JOUR : cela cause des problèmes avec nvidia-smi. amusant.

Sauter en avant à TF....

La documentation de TF dit que le conteneur docker est censé être plus facile, donc je regarde plus profondément dans ce premier.

  1. Installer docker.

    sudo apt install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \
      software-properties-common &&
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 
    sudo apt-key add - &&
    sudo add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) \
      stable" &&
    sudo apt update &&
    sudo apt install docker-ce docker-ce-cli containerd.io &&
    sudo adduser $(whoami) docker &&
    sudo reboot # fixes permission problem when connecting to socket
  2. Testez le docker.

    docker run hello-world
  3. Installez nvidia-docker.

    distribution=$(. /etc/os-release;echo $ID$VERSION_ID) &&
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey |
    sudo apt-key add - &&
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list |
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list &&
    sudo apt update &&
    sudo apt install -y nvidia-docker2 &&
    sudo systemctl restart docker
  4. Testez nvidia-docker.

    docker run --rm --gpus all nvidia/cuda:9.1-base nvidia-smi

    docker run --rm --gpus all nvidia/cuda:8.0-runtime nvidia-smi

MISE À JOUR : pour autant que je puisse dire, tout est réussi jusqu'ici. L'étape (13) ne peut pas fonctionner.

  1. TF docker build.... Je ne suis pas sûr de l'image à utiliser. Je regarde leurs Dockerfiles, en particulier 0.11.0-devel-gpu et 1.12.0-devel-gpu, et je vois une variable COMPUTE_CAPABILITY. Comme pour les mineurs de crypto à l'étape (8), cette variable semble être un obstacle est un obstacle, car il faut une compatibilité informatique >2.1.

    ~~docker pull tensorflow/tensorflow:1.11.0-devel-gpu && docker run --gpus all -it -w /tensorflow -v $PWD:/mnt \ -e HOST_PERMS="$(id -u):$(id -g)" \ tensorflow/tensorflow:1.11.0-devel-gpu bash

    J'ai fini par changer certaines versions dans leur Dockerfile et l'installation d'apt échoue :

    E: Unable to locate package libcublas-9-1
    E: Unable to locate package libcufft-9-1                                                                                                                   
    E: Unable to locate package libcurand-9-1                                                                                                                  
    E: Unable to locate package libcusolver-9-1                                                                                                                
    E: Unable to locate package libcusparse-9-1~~ 

    La recherche de ces paquets m'a conduit à l'adresse suivante page de téléchargement pour le SDK HPC (libcu++ serait cool), mais hélas, je ne pense pas qu'il y ait une version compatible avec ce vieux GPU.

MISE À JOUR : 9.1 est la mauvaise version. Je regarde maintenant dans la 8.0. Cela signifie que tensorflow:0.11.0-devel-gpu était une bonne piste. Cela signifie également que les étapes (14+) ne feront rien de productif sur mon matériel.

Je vais maintenant essayer de construire sur le métal nu....

  1. J'ai installé le CUPTI.

    echo /usr/local/cuda-9.1/extras/CUPTI/lib64 |

    echo /usr/local/cuda-8.0/extras/CUPTI/lib64 |
    sudo tee -a /etc/ld.so.conf.d/nvidia.conf &&
    sudo ldconfig
  2. I installé cuDNN 7.1.3 pour 9.1 cuDNN v7.1.4 pour 8.0 .

    sudo dpkg -i libcudnn7_7.1.4.18-1+cuda8.0_amd64.deb \
            libcudnn7-dev_7.1.4.18-1+cuda8.0_amd64.deb
  3. trouver et installer libnvinfer7=7.1.3-1+cuda9.1 . On dirait qu'Ubuntu 14.04 en a un.

  4. Mettre à jour les paquets Python de l'hôte.

    sudo apt install python3-dev python3-pip python3-venv

  5. Obtenez le le plus ancien Version de Python qui n'est pas EOL.

    cd Python-3.6.12 &&
    ./configure --with-univseral-archs=intel-64 --with-hash-algorithm=siphash24 --with-threads --with-ensurepip=upgrade &&
    make -n`nproc` &&
    make DESTDIR=~/python3.6 install

    TODO c'est un paquet source, et donc je dois tester cette commande

  6. installer GO

    wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz &&
    tar xf go1.15.6.linux-amd64.tar.gz &&
    sudo chown -R root:root go &&
    sudo mv go /opt/go &&
    sudo tee /etc/profile.d/gopath.sh << "EOF"
    export GOPATH="$HOME/go"
    export GOROOT=/opt/go
    PATH="$PATH:$GOROOT/bin:$GOPATH/bin"
    export PATH=$PATH:$(go env GOPATH)/bin
    EOF
    logout
  7. installer bazelisk

    go get github.com/bazelbuild/bazelisk &&
    sudo ln -sv $(command -v bazelisk) /usr/local/bin/bazel
  8. Compilez TF. Dans le passé, j'ai eu des erreurs bizarres suggérant que le paquet TF n'existe pas sur PyPI, donc j'ai essayé de le faire avant, mais les paquets pip résultants n'ont pas fonctionné. Sur mon système, les commandes de la documentation donnent des avertissements, je les ai donc légèrement modifiées.

    MISE À JOUR : depuis que mon matériel ne peut pas supporter même les anciens TF, j'ai changé la construction en CPU seulement.

    ~/python3.6/usr/local/bin/python3.6 -m venv \
      --system-site-packages tf-env &&
    . tf-env/bin/activate
    pip install -U pip &&
    pip install -U numpy wheel &&
    pip install -U keras_preprocessing --no-deps &&
    
    git clone -b r2.2 --depth=1 --recursive \
      git://github.com/tensorflow/tensorflow.git &&
    cd tensorflow &&
    python configure.py &&
    bazel build  \
      --local_ram_resources=2048 \
      --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" \
      //tensorflow/tools/pip_package:build_pip_package &&
    ./bazel-bin/tensorflow/tools/pip_package/build_pip_package \
      /tmp/tensorflow_pkg &&
    pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl

    N.B., les changements d'environnement ne semblent pas affecter ce qui se trouve après le '&&', donc ne le faites pas :

    . tf-env/bin/activate && whatever
  9. TODO Test TF :

    python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

0voto

  1. Système de mise à jour

    apt update && apt full-upgrade
  2. Décharger le conducteur

    modprobe -r <some variant of nouveau>
  3. Téléchargez et installez le pilote vidéo. Il crée automatiquement /etc/modprobe.d/nvidia-installer-disable-nouveau.conf. Faites un contrôle de bon sens.

    nvidia-smi
  4. Le faire charger au démarrage

    update-initramfs -u
  5. Téléchargez et installez la boîte à outils CUDA et les correctifs. N'écrasez pas votre pilote.

  6. Ajoutez les librairies de la boîte à outils CUDA à votre chemin d'accès.

    cat > /etc/ld.so.conf.d/nvidia.conf << "EOF"
    /usr/local/cuda-8.0/lib64
    /usr/local/cuda-8.0/extras/CUPTI/lib64
    EOF
    ldconfig
  7. Ajouter les bins CUDA à votre chemin

    cat > /etc/profile.d/nvidia.sh << "EOF"
    export PATH="$PATH:/usr/local/cuda-8.0/bin"
    EOF
    . /etc/profile.d/nvidia.sh
  8. Lors de la compilation, il existe généralement des moyens spécifiques au projet pour spécifier les chemins vers les bibliothèques cuda.

    LEGACY="
      -Wno-deprecated-gpu-targets
      -gencode arch=compute_20,code=[sm_21,compute_20]"
    • cmake

      mkdir build && cd build &&
      cmake .. -G Ninja \
        -DCUDA_LIB=/usr/local/cuda/lib64/stubs/libcuda.so \
        -DCUDA_NVCC_FLAGS="$LEGACY" &&
      cd .. &&
      cmake --build build &&
      cmake --build build --target install
    • autotools

      ./configure \
        --with-cuda=/usr/local/cuda \
        --with-nvml=libnvidia-ml.so \
        CUDA_NVCC_FLAGS="$LEGACY"

Après avoir modifié certains codes sources, et obtenu des erreurs sur certaines algorithmes j'ai réussi à en compiler quelques-uns.

Il s'avère que le hashrate est très faible .

La bonne nouvelle est que Docker semble fonctionner comme prévu. TensorFlow ne fonctionne pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X