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 :
-
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.
-
Cela ne s'applique pas dans mon cas, mais pour les installations graphiques, blacklist nouveau, et :
modprobe -r <some variant of nouveau>
-
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.
-
Faites en sorte que le nouveau pilote se charge au démarrage.
update-initramfs -u
-
contrôle de l'intégrité
nvidia-smi
-
Téléchargez et installez la boîte à outils CUDA
9.18.0 et sontrois piècespatch. 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.
-
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
-
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=21CCAP=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.
-
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
-
Testez le docker.
docker run hello-world
-
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
-
Testez nvidia-docker.
docker run --rm --gpus all nvidia/cuda:9.1-base nvidia-smidocker 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.
-
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 obstacleest 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....
-
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
-
I installé
cuDNN 7.1.3 pour 9.1cuDNN 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
-
trouver et installer libnvinfer7=7.1.3-1+cuda9.1 . On dirait qu'Ubuntu 14.04 en a un. -
Mettre à jour les paquets Python de l'hôte.sudo apt install python3-dev python3-pip python3-venv -
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
-
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
-
installer bazelisk
go get github.com/bazelbuild/bazelisk && sudo ln -sv $(command -v bazelisk) /usr/local/bin/bazel
-
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
-
TODO Test TF :
python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"