danの暇人ブログ

こんにちはぁぁぁぁぁ。主に趣味や雑談などを投稿していまス。最近はVtuberにハマっていまス。Youtube配信もしておるんや。



【備忘録】ubuntu20.04LTSにcuda-toolkit-10.1を入れる方法


投稿日:2021年4月25日20:05
更新日:2021年8月29日8:08


ubuntu20.04LTSにアップデートしました

これまた久しぶりの投稿となります。

というかこのブログを開設してもう1年が経ちました。

時の流れは早いものですね。

最近はちょいちょいYoutubeにモンハンの投稿をしているのですが(Riseじゃなくってアイスボーンだけどね)、またブログの方も書いていきたいですね。

少し前にAIの剣持刀也をアップデートしたし、そこら辺のこともブログに書いて更新したいところ。

ですが相変わらず忙しいのとちょっと全体的にモチベーションが下がっているのもあって色々とやる気が起きませんでした。。。


とまあ前置きはここまでにして、現在趣味でやっているAIの開発をubuntu18.04LTSでしています。

剣持刀也開発ページを見るとなんかWindows10homeって書いてありますけど、すみません、だいぶ前からubuntuで開発していました

ubuntuとは

ubuntuとは何かと調べると沢山ヒットするので詳しくはそちらの方で見てほしいのですが、簡単にいうとlinuxベースのOSです。

まぁオープンソースのOSですね(無料)。

で、なんでubuntuを使っているかというと、一般的にプログラミングを調べているとコマンドとか環境がlinuxベースで開発されていることが多いです。

Windowsだど逆に情報が少ないことが多いんですよね。。。

特に個人的にはPythonの開発に関してはWindowsでやっている人の方が少ないのでは?と思うほどです(ネットで検索すると大体がlinuxで開発してます)。

また、Windowsとは違ってubuntuは軽量で日常使いする分には何の苦労もありません。

それだけクオリティが高いんですよ

私は今までは「ubuntu18.04LTS」というバージョンで開発を行っていました。

ですが去年に20.04LTSが公開されたのでそろそろそっちを使ってみようかなと思い、アップデートすることにしました。

使ってみた感想としては凄い良いです(小並感)。

↓が実際のubuntuの画面なんですが、あんまりWindowsと変わらないんですよ。というかmac系に近い? ubuntu_home


ディープラーニングに対応させるためGPUの再設定

さて、ここからが本題です。

ubuntu18.04LTSではPythonの3.7.7でGPUを使ってディープラーニングを行っていました。

ですが、ubuntu20.04LTSではPython3.7系をサポートしていません。なので使えなくなりました。

デフォルトのPythonのバージョンが3.8系です。

Pythonのバージョンが変わるとディープラーニング用のフレームワークの対応バージョンが変わり、フレームワークが変わるとGPUを使用するツールの対応バージョンも変わります。

つまりとんでもなくめんどくさいことになりました

なので再度ドライバをインストールしたのですが、毎回この作業に苦戦しているので自分のブログに備忘録として手順を残しておこうと思います。

今回やった内容

まず初めに今回やった内容をざっくり箇条書きします。

  • CUDA Toolkit のバージョン変更のために既存のドライバなどの削除
  • デフォルトのドライバ無効化
  • CUDA Toolkit 10.0から10.1にアップグレード、インストール
  • nvidia-driverのインストール
  • cuDNNの入れ直し


  • 一応現在の環境など

  • OS:ubuntu 20.04LTS
  • GPU:GeForce RTX 2080Ti
  • Python:3.8.5
  • tensorflow:2.2.0
  • CUDA:10.1
  • CUDA Toolkit:10.1
  • では手順を記載していきます。

    既存ドライバの削除

    以下のコマンドをターミナルで実行して、既存で入っているCUDAやnvidia-driverなどを削除します。
    sudo apt --purge remove nvidia-*
    sudo apt --purge remove cuda-*
    この後にターミナルで「nvidia-smi」とかを入れて「コマンドが見つかりません」と出れば削除されている。

    デフォルトのドライバ無効化

    ubuntuにはnouveauドライバがデフォルトになっているので、もしこのドライバが有効状態になっていたら無効化する。

    以下のコマンドで動作しているか確認する。
    lsmod | grep nouveau
    もし色々表示される場合は有効化状態なので以下のディレクトリにファイルを作成して無効化するような情報を書き込む

    作成ディレクトリ及びファイル名:/etc/modprobe.d/blacklist-nouveau.conf

    書き込む内容
    blacklist nouveau
    options nouveau modeset=0
    ※もしかしたらルート権限でしか作成及び書き込めないかもしれないのでそこは注意する。その場合は以下コマンドで書き込んで対応
    $ sudo vim /etc/modprobe.d/blacklist-nouveau.conf
    その後変更を反映するため再起動する
    $ sudo update-initramfs -u
    $ sudo reboot
    再起動後念のためもう一回「lsmod | grep nouveau」を入力して無効化されているか確認する

    CUDA Toolkit 10.0から10.1にアップグレード、インストール

    ここからが大変だったり大変じゃなかったり。

    CUDAを使えるようにするためCUDA Toolkitを入れる。

    たいていの場合、CUDA Toolkitとかを入れる場合は機械学習目的の人が大半だと思う。
    で、その場合TnesorFlowとCUDA関係のバージョンの関係性を事前に調べておく必要がある。
    目的のTensorFlowのバージョンとそれに対応しているバージョンのCUDAを入れなきゃ正常に動作しない。

    私が手元のPCて試したバージョンをとりあえず以下に載せておきます。
    おそらくだけど大体TensorFlowはこの二つのバージョンで動いていることが結構多いんじゃないかな?
    一応公式ページにTensorFlowバージョンとCUDAバージョンの対応表があるのでそちらを参照したほうがいいですね。

    TensorFlowCUDAcuDNN
    1.1410.07.4
    2.2.010.17.6


    今回私はPython3.8系でTensorFlow2.2.0を使いたいので、公式ページにもあるようにCUDA 10.1とcuDNN7.6を入れます。
    で、CUDAを使えるようにするためにCUDA Toolkitを入れます。

    CUDA Toolkit 10.1 update2のダウンロードページの手順に従ってインストールを行います。

    ダウンロードページに飛んだら、「Linux」→「x86_64」→「Ubuntu」→「18.04」を選びます。
    今回は20.04にインストールするのですが、選択項目の最新バージョンが18.04までしかないので18.04を選択します(特に問題ない)。

    で、Installer Type(インストーラータイプ)ですが、私は「runfile(local)」で今回はインストールしました。

    runfile(local)を選択するとインストール方法が表示されます。
    ターミナルを開いて、記載されている通りまずは下記コマンドでrunファイルをダウンロードします。
    $ wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
    その後、ダウンロードしたrunファイルがあるディレクトリで以下コマンドを実行します。
    $ sudo sh cuda_10.1.243_418.87.00_linux.run
    で、このときもしかしたら「Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.」こんなログがでてインストールに失敗することがあるかもしれません。
    私は出ました。

    これは単純にCUDAのコンパイルで使用するgccのバージョンが古いため失敗するそうです(18.04と20.04の違いによるものかな?)。

    これは以下のコマンドでgccをアップデートすることにより解決できました。
    sudo apt -y install gcc-8 g++-8
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8

    正常にインストールが終わったらパスを通す必要があるので、以下のコマンドでパスを追加します。
    export PATH="/usr/local/cuda/bin:$PATH"
    export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

    その後、再起動します。
    $ sudo reboot
    再起動後、「nvcc -V」をコマンド入力してCUDAのバージョンが10.1と表示されていれば成功です。
    $ nvcc -V
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2019 NVIDIA Corporation
    Built on Sun_Jul_28_19:07:16_PDT_2019
    Cuda compilation tools, release 10.1, V10.1.243
    もしこれで古いバージョンが表示されたら、環境変数が古い状態のものが設定されている可能性があるので、そこを削除して書き直す必要があります。
    この辺は環境変数で検索すると色々出てくるので調べてください(~/.bashrcに書いている可能性もあるかも?)。

    nvidia-driverのインストール

    一番最初にCUDAとNVIDIA関係を削除したのでもう一回nvidia-driverをインストールします。
    まずは以下コマンドで推奨ドライバのバージョンチェックをします。
    $ ubuntu-drivers devices
    == /sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0 ==
    modalias : pci:v000010DEd00001E04sv00001043sd00008675bc03sc00i00
    vendor   : NVIDIA Corporation
    model    : TU102 [GeForce RTX 2080 Ti]
    driver   : nvidia-driver-460-server - distro non-free
    driver   : nvidia-driver-418-server - distro non-free
    driver   : nvidia-driver-450-server - distro non-free
    driver   : nvidia-driver-450 - third-party non-free
    driver   : nvidia-driver-455 - third-party non-free
    driver   : nvidia-driver-460 - third-party non-free recommended
    driver   : nvidia-driver-418 - third-party non-free
    driver   : xserver-xorg-video-nouveau - distro free builtin
    
    「recommended」と記載されているバージョンを入れればとりあえず大丈夫です。
    $ sudo apt install nvidia-driver-460
    もしここでインストールに失敗した場合、「apt」ではなく「aptitude」でインストールするとうまくいくことがあります(私はそうでした)。
    $ sudo apt install aptitude
    $ sudo aptitude install nvidia-driver-460
    その後、再起動してターミナルで「nvidia-smi」を入力して問題なく動作していれば大丈夫(右上に表示されているCUDAのバージョンが違うがこれは気にしなくていい)。
    $ nvidia-smi
    Sun Apr 25 19:41:43 2021       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 460.32.03    Driver Version: 460.32.03    CUDA Version: 11.2     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  GeForce RTX 208...  On   | 00000000:09:00.0 Off |                  N/A |
    | 27%   29C    P8     1W / 250W |     15MiB / 11016MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |    0   N/A  N/A      1475      G   /usr/lib/xorg/Xorg                  9MiB |
    |    0   N/A  N/A      1593      G   /usr/bin/gnome-shell                4MiB |
    +-----------------------------------------------------------------------------+
    

    cuDNNの入れ直し

    ここまでくればあと少しです。
    TensorFlowをGPUで実行するためにはcuDNNというものもインストールする必要があります。
    cuDNNはNVIDIAの開発者ページに登録する必要があります(無料)。
    cuDNNのページにいき、cuDNNをダウンロードします。
    私はTensorFlow2.2.0、CUDAが10.1なので今回はcuDNN7.6.5をインストールします。
    ダウンロードページで「cuDNN Runtime Library for Ubuntu18.04 (Deb)」と「cuDNN Developer Library for Ubuntu18.04 (Deb)」の2種類をダウンロードしてください。
    その後、以下コマンドで順番に実行していきます(devが後)。
    $ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
    $ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
    ↑このコマンドの指定ファイル名はダウンロードしたファイル名に随時合わせてください。
    インストールしたら念の為再起動します。


    これで一応TensorFlowがGPUで動くはずです!お疲れ様でした!


    感想

    結構ubuntuにいろいろ入れていくとOSがぶっ壊れたりしてGPUの再設定をしたりするので、備忘録として残しました。
    毎回マジで大変なんだよなぁ。。。
    一応後日TensorFlowでGPUが動いているか確認する方法も記載したいと思います。
    とりあえず今回はここまで。
    またなにか詳細に書く必要があれば追記します。

    ・カテゴリ プログラミング
    ・タグ python

    (5)

    コメントを投稿する


    最新記事








    月別アーカイブ


    プロフィール
    このサイトを運営している「dan」と申します。
    私の趣味や雑談等を主に投稿しています。


    管理人
    更新情報&つぶやき

    プライバシーポリシー