DeepLearning CUDA - eiichiromomma/CVMLAB GitHub Wiki

(DeepLearning) CUDA

CUDA環境の構築

Ubuntu 20.04 環境

  • GeForce RTX 3070

Ubuntu インストールから

諸々新しいハードに対応できてない。 EtherもダメらしいのでUSB3.1(Type C)のEtherを取り敢えず使う。

インストールメディア起動時に grub画面でeを押してずらずらと並んでいる命令からquiet splash を消して

nomodeset modprobe.blacklist=nouveau

に書き換えF10を押してインストールに進む。

インストールの際,"Install third-party software for graphics and Wi-Fi hardware and additional media formats"にチェックを入れる。 インストールし終えて再起動したら

sudo apt update; sudo apt upgrade -y; sudo apt install build-essential -y

で再起動。

CUDA

素直に入る。

CUDA Toolkitので"Download Now"を選び,Linux→x86_64→Ubuntu→20.04→dev(network) を選ぶと"Base Installer"が出てくるのでそれに従ってコピペ。 その後で

sudo apt install cuda-drivers libcudnn8-dev libcusolver10 mesa-utils -y
sudo systemctl restart gdm

CUDA11にも関わらず,libcusolver10を入れるのはTensorflowの問題で,何故かそっちが参照されるため。(cuda無関係に /usr/lib/x86_64-linux-gnu/libcusolver.so.10 に置かれる)

gdmが再起動した後で

nvidia-smi

でGPUが認識されてるか確認する。

ここらでUbuntuを再起動。(しなくてもいい)

Tensorflow-GPU の確認

sudo apt install python3-pip ipython3 -y
sudo pip3 install tensorflow-gpu keras

で入るが,

export TF_FORCE_GPU_ALLOW_GROWTH=true

を実行しておかないとcudnnでエラーを吐いて死ぬ。(.bashrcとかに書いておく)

その後Keras Code examplesからMNISTあたりをコピペして試してみる。デバイスがmodel構築時にエラーが出てないかを確認する(エラーが出るとCPUに切り替わる)。

RTL8125

sudo apt install dkms chromium-browser -y

でdkmsとchromiumを入れておく。 RealtekからRTL8125のドライバソースをダウンロードする。ちなみにchromiumを入れるのはFirefoxだとRealtekのサイトのCaptchaが表示されないから。 配布ページはChromiumで開く。 で,展開した後に

cd path_to_sources
sudo sh ./autorun.sh

でインストールされる。

Docker のインストール

公式のガイド に従う。

sudo apt-get update
sudo apt-get install -y \
    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-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

NVIDIAの指示 に従ってnvidia-docker2も入れる

Docker+GPU環境

CUDAとOpenGLが有効なcudaglコンテナがオススメだがUbuntu18.xなのでlibcusolverの作業も必要。 ※dockerhubをチェックして最新のバージョンに合わせること

  • コンテナ名: cu11-u18-gl
  • イメージ: cudagl:11.2.1-devel-ubuntu18.04
  • 共有フォルダ: $HOME/dockermount
  • GPU: 全部使う設定
  • ポート素通し: 8888, 6006
xhost +
sudo docker pull nvidia/cudagl:11.2.1-devel-ubuntu18.04
sudo docker run --privileged=true --name cu11-u18-gl -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/dockermount:/mnt --gpus all -it -p 8888:8888 -p 6006:6006 nvidia/cudagl:11.2.1-devel-ubuntu18.04

でコンテナに入り

apt update; apt install libcudnn8-dev mesa-utils cuda-cusolver-10-2 -y
cd /usr/local/cuda-11.2/targets/x86_64-linux/lib
ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcusolver.so.10.3.0.89 libcusolver.so.10
export TF_FORCE_GPU_ALLOW_GROWTH=true

で設定完了。exportは.bashrcにでも書いておくと良い。

glxgears

でギアが回るウィンドウが開けばOpenGLでのXの転送も成功。

pythonのバージョンが古いのでAnacondaを入れる。

cd
apt install wget -y
wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh
sh Anaconda3-2020.11-Linux-x86_64.sh
source ~/.bashrc 

でbase環境が出来るので,あとは普通に仮想環境を作るなりして

pip install tensorflow-gpu keras

のように進めれば良い。

Ubuntu 18.04 環境

Ubuntu 20.xだとlibcusolver10をaptで入れると普通に参照される場所に入るのでldconfigすれば直ぐ動くが,18.xはlibcusolver10というパッケージは無いので

sudo apt install cuda-cusolver-10-2

で/usr/local/cuda-10.x以下に入るのでCUDA11の方にシンボリックリンクを張る。(バージョンはある物に合わせる)

ln -s /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcusolver.so.10.3.0.89 libcusolver.so.10

あと

export TF_FORCE_GPU_ALLOW_GROWTH=true

も必要。

Ubuntu 16.04 環境 (古い)

  • Ubuntu 16.04 LTS 64bit
  • nVidia Geforce 1080

環境構築

Ubuntuを入れる。nvidiaのドライバを入れるまではオンボードVGAがあるならそっちを使っていた方がトラブル対処しやすい。

sudo apt install aptitude
sudo aptitude update
sudo aptitude upgrade
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install linux-headers-$(uname -r)
sudo apt-get install nvidia-367
sudo aptitude install ssh
sudo aptitude install mesa-common-dev
sudo aptitude install freeglut3-dev

ツール関係のインストール

sudo aptitude install chromium-browser
sudo aptitude install gnome-tweak-tool 
sudo aptitude install ntpdate
gnome-tweak-tool 
sudo aptitude install git python-pip vim fcitx-skk
LANG=C xdg-user-dirs-gtk-update 

CUDAのインストール。ファイルはnVidiaから拾ってくる(Ubuntuのdebファイル)

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64.deb 
sudo aptitude update
sudo aptitude install cuda

nouveauの無効化

cd /etc/modprobe.d/
sudo vim blacklist-nouveau.conf

で中身を

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

とする。

sudo vim blacklist-kms.conf

で中身を

options nouveau modeset=0

とする。

sudo update-initramfs -u

cuDnnの入手とインストール。CUDA同様にnVidiaから拾ってくる(要ログイン)

tar xvzf cudnn-8.0-linux-x64-v5.1.tgz 
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

環境変数の設定

vim ~/.bashrc

で最後に

export PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64

を追加する。

CUDAのサンプルをビルドして動作確認

cp -r /usr/local/cuda/samples ./
cd samples/
make -j8
cd bin/x86_64/linux/release/
./deviceQuery