AIによるチャットボットの作り方>AIチャットボット環境の作り方>ディープラーニング用GPU環境の作り方 - 更新

ディープラーニング用GPU環境の作り方

AIゆめ
AIゆめ
   このページでは、AIチャットボットのオフラインディープラーニング用環境であるGPU(Graphics Processing Unit)を搭載したUbuntuサーバーの構築方法について解説しましょう。 AIチャットボットのサービスを提供する環境はCentOS7.6(さくらの専用サーバ)を使用していますし自作のAIですので、あえてUbuntuサーバーを選択する必要はないかも知れませんが、 Ubuntuに対応しているAI用ライブラリが多そうなのでUbuntuサーバーに決めました。なお、本環境の初回構築は2019年8月、システム不具合(非稼働時の設置環境が悪かったせいかHDDの一部のデータが消えたようです)による再構築は2020年8月です。

ディープラーニング用GPU環境の作り方の目次

  1. PC概要
  2. GPU概要
  3. Ubuntu18.04のインストール裏事情
  4. Ubuntu18.04のインストール
  5. タイムゾーンの設定・パッケージのバージョンアップ
  6. pipのインストール
  7. numpy・matplotlibのインストール
  8. MeCabのインストール
  9. GPUドライバのインストール
  10. CUDA Toolkitのインストール
  11. CuPyのインストール

PC概要

   ディープラーニングではCPUの機能を最大限に活用する訳ではありませんので、比較的安価であり、サイズと消費電力が大きいGPUが設置できるようパソコン工房の「STYLE-R039-i5K-UH」という商品で、 そのスペックは以下の通りです。価格は消費税込みで10万円以下です。
デスクトップPC STYLE-R039-i5K-UH
図1 デスクトップPC STYLE-R039-i5K-UH

GPU概要

GPUとしては、一昔前のゲーム用GPUである「MSI GeForce GTX 1080」の中古を選びました。中古なので保証期間は1ヶ月ですが、価格は消費税込みで3万円台半ばと割安です。 ちなみに、この商品は、現在中古しか販売されていません。かなり流行ったGPUなので、中古品はたくさん出回っており、壊れても代替品の入手は比較的簡単です(2019年8月現在)。
ゲーム用GPU MSI GeForce GTX 1080
図2 ゲーム用GPU MSI GeForce GTX 1080

Ubuntu18.04のインストール裏事情

   初回構築時(2019年8月)の最新版はUbuntu18.04でしたが、再構築時(2020年8月)の最新版はUbuntu20.04に更新されています。 再構築時に一旦Ubuntu20.04に更新しましたが、デフォルトCUDAのバージョンが11.0になってしまい、このバージョンに対応できる行列計算ライブラリCuPy11.0が未公開であったため、Pythonプログラムを動かすことができずUbuntu18.04に戻すことにしました。 なお、Ubuntu18.04でもデフォルトのCUDAのバージョンは11.0ですので、何も考えずにCUDA11.0をインストールしてしまうとCuPyの計算部分でエラーが発生してしまいます。CUDA11.0を使用するためには、CuPy11.0の公開を待つしかなさそうです。
CUDA(Compute Unified Device Architecture:クーダ)とは、NVIDIA社が提供しているGPU向けの汎用並列コンピューティングアーキテクチャであり、CUDAが使用可能なGPUを動かすためには、該当するGPUのドライバとCUDAツールキットをインストールする必要があります。

Ubuntu18.04のインストール

   Windows10のPCからPuTTYを使用して、SSH認証のコマンドベースでUbuntuサーバーの操作をしますので、Ubuntu-desktopではなく、よりサイズの小さいUbuntu-serverを使用します。 Ubuntu 18.04.4 LTS (Bionic Beaver)からUbuntu-18.04をダウンロードして、DVDに焼いてインストールします。
初回構築時にはファイル名が"ubuntu-18.04-live-server-amd64.iso"でしたが、再構築時には"ubuntu-18.04.4-live-server-amd64.iso"に更新されていました。 以下は、"ubuntu-18.04-live-server-amd64.iso"を用いた場合の解説ですので、最新版を使用すると多少異なるかも知れません。 Ubuntu-serverのインストールはSSHを選択すること以外は標準仕様で問題ありませんので、インストールは簡単です。 使用者名、サーバー名、ユーザ名、パスワードなどを入力してインストールしてください。

タイムゾーンの設定・パッケージのバージョンアップ

   まず、権限のあるスーパーユーザーへのなり方と表記法の説明を明しておきます。 スーパーユーザーになって1つのコマンドを入力する場合は"sudo"コマンドを使えば良いのですが、スーパーユーザーで複数個のコマンドを入力する場合は、"su root"コマンドでスーパーユーザーになる必要があります。 下記の"UserName"、"ServerName"、パスワードは、Ubuntu-serverのインストール時に設定したサーバー名、ユーザ名、パスワードです。 そして、一般ユーザのプロンプトは"$"であり、スーパーユーザのプロンプトは"#"になります。以下、このプロンプト"$"と"#"を使い分けますので注意してください。
UserName@ServerName:~$ sudo su root [sudo] password for UserName: ←UserNameのパスワードを入れる root@ServerName:/home/UserName# _
Ubuntuのインストールが完了したら、まず、タイムゾーンの設定を行いましょう。 インストール時に設定したユーザ名で"sudo"コマンドが使用できますので、スーパーユーザーであるrootのパスワードは設定しなくても問題はないでしょう。
$ date Tue Aug 4 05:20:05 UTC 2020 $ sudo timedatectl set-timezone Asia/Tokyo $ date Tue Aug 4 14:20:43 JST 2020
次に、"apt update"コマンドでインストール可能なパッケージ一覧を更新して、"apt upgrade"コマンドでインストール済みパッケージのバージョンアップをしておきましょう。
$ sudo apt update $ sudo apt upgrade

pipのインストール

   AI処理用言語としてはPythonが圧倒的に有名です。そして、Pythonと言えばUbuntuと言うくらいですから、Ubuntuをインストールすれば、Pythonは自動的にインストールされています。 ここでは、Pythonのパッケージ管理ツールであるpipをインストールしましょう。また、pythonやpipのバージョンも確認しておきましょう。 ここで、pythonのバージョンによっては"python3"というコマンドではなく"python3.*"(例えば"python3.7")というコマンドになるケースがあるかも知れません。
$ sudo apt install -y python3-pip $ pip3 -V pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6) $ python3 -V python3.6.9

numpy・matplotlibのインストール

   ここでは、Pythonで行列計算を行うライブラリ"numpy"とグラフ描画を行うライブラリ"matplotlib"をインストールします。 AI処理はCPUでの行列計算がメインですので、"numpy"は必須でしょうが、ディープラーニング用サーバーでグラフ描画を行わないのであれば"matplotlib"は必ずしも必要ないでしょう。 私自身としても、グラフ描画はPCにデータを転送後に行っていますので、ディープラーニング用サーバーに"matplotlib"は必要なく、PC側のpythonにインストールしています。
$ sudo python3 -m pip install numpy $ sudo python3 -m pip install matplotlib

MeCabのインストール

   MeCabによる形態素解析で解説した通り、ここでは、文章の形態素解析ツールであるMeCabをインストールします。 pythonでMeCabを使用できるようにするためには、MeCab本体、IPA辞書、MeCab-pythonバインディングモジュールの3つのパッケージをインストールする必要があります。 まず、MeCabのページのリンクを辿って、以下の3ファイルをダウンロードします。
  • MeCab本体:mecab-0.996.tar.gz
  • IPA辞書:mecab-ipadic-2.7.0-20070801.tar.gz
  • MeCab-pythonバインディングモジュール:mecab-python-0.996.tar.gz
  • そして、これらのファイルを"/opt"ディレクトリに移動します。 PCでダウンロードしてWinSCPソフトなどを使用して、個別ユーザでログイン後にSSH認証して転送する場合には、権限の問題で転送出来ない場合があります。 このような場合には一時的に"/opt"のアクセス権限を変更してから書き込むと良いでしょう。書き込んだ後は、アクセス権限を元に戻すことを忘れないようにしましょう。
    $ sudo chmod 777 /opt ここで、WinSCPソフトなどを使用して上記3ファイルを/optにコピーする。 $ sudo chmod 755 /opt

    MeCab本体のインストール

       使用する言語コードはUTF8に限定しますので、"--enable-utf8-only"を設定してインストールします。 MeCabのインストールはroot権限で行う必要がありますので、上述の通り"su root"コマンドでスーパーユーザーになってから"/opt"ディレクトリ配下でインストールしてください。
    # tar zxfv mecab-0.996.tar.gz # cd mecab-0.996 # ./configure --enable-utf8-only # make # make check # make install

    IPA辞書のインストール

    # tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz # cd mecab-ipadic-2.7.0-20070801 # ./configure --with-charset=utf8 # export LD_LIBRARY_PATH="/usr/local/lib" # make # make install

    MeCab-pythonバインディングモジュールのインストール

    # tar zxfv mecab-python-0.996.tar.gz # cd mecab-python-0.996 # pip3 install mecab-python3

    MeCabの動作チェック

       実際にpython3で形態素解析ができるかどうかチェックしておきましょう。以下のように形態素解析が出来れば、インストールが上手く出来たと考えて良いでしょう。ここで">>>"はpythonのプロンプトです。
    # cd ..(移動しないとimport MeCabでエラーが出る) # python3 Python 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> import MeCab >>> m = MeCab.Tagger ("-Ochasen") >>> print(m.parse("今日もしないとね")) 今日 キョウ 今日 名詞-副詞可能 も モ も 助詞-係助詞 し シ する 動詞-自立 サ変・スル 未然形 ない ナイ ない 助動詞 特殊・ナイ 基本形 と ト と 助詞-接続助詞 ね ネ ね 助詞-終助詞 EOS >>>

    GPUドライバのインストール

    GTX1080ドライバのダウンロード

       GPU概要で述べた通り、本ページではGPUとして"GeForce GTX 1080"を選択しましたので、NVIDIAドライバダウンロードのページで、 "Linux Long Lived"を選択して該当するドライバのダウンロードを検索すると、2020.8.5現在、以下のような検索結果が表示されますので、ダウンロードします。
    LINUX X64 (AMD64/EM64T) DISPLAY DRIVER
    ただし、Ubuntu18.04のインストール裏事情で述べた通り、本ページでは、初回構築時(2019年8月)のCUDA10.1の状態に戻すため、以下、「バージョン: 435.21」を使用することにします。 「バージョン: 450.57」でもCUDA10.1で動かすことができると思いますが、保証はしかねます。
    初回構築時(2019年8月)には、GTX1080を接続した状態でUbuntu18.04を立ち上げると、ネットワークカードの設定が無効になってしまい、通信ができなくなるという不具合があり、 USBメモリーでファイル移動したという経緯がありました。再構築時(2020年8月)には、GTX1080を接続したままでUbuntu18.04をインストールしたためか、この不具合は確認できませんでしたが、 念のためusbメモリでファイルを移動する方法も書いておきます。
    $ ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 Aug 4 21:21 /dev/sda brw-rw---- 1 root disk 8, 1 Aug 4 21:21 /dev/sda1 brw-rw---- 1 root disk 8, 2 Aug 4 21:21 /dev/sda2 ここでusbメモリを接続すると、/dev/sdbと/dev/sdb1が増えている。 $ ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 Aug 4 21:21 /dev/sda brw-rw---- 1 root disk 8, 1 Aug 4 21:21 /dev/sda1 brw-rw---- 1 root disk 8, 2 Aug 4 21:21 /dev/sda2 brw-rw---- 1 root disk 8, 16 Aug 6 10:18 /dev/sdb brw-rw---- 1 root disk 8, 17 Aug 6 10:18 /dev/sdb1 /dev/sdb1をマウントした後、$dfコマンドで確認すると/dev/sdb1が/mediaとしてマウントされているので、/media以下のファイルがコピー可能になる。 $ sudo mount -t vfat /dev/sdb1 /media $df ・・・ /dev/sdb1 3998656 160 3998496 1% /media /media からコピーした後は、必ずアンマウントしてからusbメモリを抜く。 $ sudo umount /media
    また、ネットワークカードの設定が無効になった場合には、手動ででネットワーク環境を設定する必要がありますので、その方法も記述しておきます。 スーパーユーザになって、"/etc/netplan/50-cloud-init.yaml"ファイルを以下のように編集してリブートすればOKです。
    # vi /etc/netplan/50-cloud-init.yaml # This file is generated from information provided by # the datasource. Changes to it will not persist across an instance. # To disable cloud-init's network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: enp3s0: dhcp4: no dhcp6: no addresses: [192.168.1.15/24] gateway4: 192.168.1.1 nameservers: addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4] enp4s0: dhcp4: no dhcp6: no addresses: [192.168.1.14/24] gateway4: 192.168.1.1 nameservers: addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4] version: 2

    GTX1080ドライバのインストール

       以下、スーパーユーザーで作業を行います。いきなりインストールするとエラーが発生してインストールできませんので、 Ubuntu17.10にNVIDIAドライバをインストールしてみたのページを参考に、 viエディタで"/etc/modprobe.d/blacklist-nouveau.conf"に以下の2行を書きこんで作成します。
    # vi /etc/modprobe.d/blacklist-nouveau.conf blacklist nouveau options nouveau modeset=0 :wで書き込んで、以下の要領でUbuntuをリブートします。 # update-initramfs -u # reboot
       ダウンロードした.runファイルを実行し、以下の要領で、〇が付いている項目を選択して行けば、インストールが完了します。
    # sh NVIDIA-Linux-x86_64-435.21.run Verifying archive integrity... OK Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 435.21 ........................................................................................................................................................................................................... ........................................................................................................................................................................................................... ..................................................................................................................................
    The target kernel has CONFIG_MODULE_SIG set, which means that it supports cryptographic signatures on kernel modules. On some systems, the kernel may refuse to load modules without a valid signature from a trusted key. This system also has UEFI Secure Boot enabled; many distributions enforce module signature verification on UEFI systems when Secure Boot is enabled. Would you like to sign the NVIDIA kernel module? Sign the kernel module 〇 Install without signing
    Would you like to sign the NVIDIA kernel module with an existing key pair, or would you like to generate a new one? Use an existing key pair Generate a new key pair 〇
    The NVIDIA kernel module was successfully signed with a newly generated key pair. Would you like to delete the private signing key? Yes 〇 No
    An X.509 certificate containing the public signing key will be installed to /usr/share/nvidia/nvidia-modsign-crt-A7C*****.der. The SHA1 fingerprint of this certificate is: 86:19:2C:2F:78:35:5E:C4:19:53:5A:6A:4B:33:AA:1E:D9:F5:76:3F. ※公開鍵ファイル/usr/share/nvidia/nvidia-modsign-crt-A7C*****.derは、その後の公開鍵の登録で必要になりますので必ずメモを残しておきましょう。 This certificate must be added to a key database which is trusted by your kernel in order for the kernel to be able to verify the module signature. OK
    The signed kernel module failed to load, because the kernel does not trust any key which is capable of verifying the module signature. Would you like to install the signed kernel module anyway? Note that you will not be able to load the installed module until after a key that can verify the module signature is added to a key database that is trusted by the kernel. This will likely require rebooting your computer. Install signed kernel module 〇 Abort installation
    WARNING: nvidia-installer was forced to guess the X library path '/usr/lib' and X module path '/usr/lib/xorg/modules'; these paths were not queryable from the system. If X fails to find the NVIDIA X driver module, please install the `pkg-config` utility and the X.Org SDK/development package for your distribution and reinstall the driver. OK
    WARNING: Unable to find a suitable destination to install 32-bit compatibility libraries. Your system may not be set up for 32-bit compatibility. 32-bit compatibility files will not be installed; if you wish to install them, re-run the installation and set a valid directory with the --compat32-libdir option. OK
    Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X? Any pre-existing X configuration file will be backed up. Yes No 〇
    Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version: 435.21) is now complete. Please update your xorg.conf file as appropriate; see the file /usr/share/doc/NVIDIA_GLX-1.0/README.txt for details. OK
       その後は、サーバーがセキュアブートかどうかを確認し、公開鍵の登録後にリブートして、コンソールのMOK management画面で公開鍵のパスワードを入れてenrollします。 MOK management画面は10秒程度で閉じられますので注意してください。
    サーバーがセキュアブートかどうかを確認する。 $ dmesg | grep Secure [ 0.000000] secureboot: Secure boot enabled 公開鍵の登録(ドライバーインストール時に出力された公開鍵ファイルをパスワードを設定して登録) $ sudo mokutil --import /usr/share/nvidia/nvidia-modsign-crt-A7C*****.der input password: ******** input password again: ******** リブートしてコンソールのMOK management画面で公開鍵のパスワードを入れてenroll $ reboot

    CUDA Toolkitのインストール

    CUDA Toolkitのインストール前の確認事項

       NVIDIA CUDA Installation Guide for Linuxの解説に従い、 インストール前の確認をしておきましょう。

    CUDA-capable GPUの確認

    $ lspci | grep -i nvidia 01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1) 01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)

    Linuxバージョンの確認

    $ uname -m && cat /etc/*release x86_64 DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" NAME="Ubuntu" VERSION="18.04.4 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.4 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic

    gccバージョンの確認

    $ gcc --version gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    カーネルバージョンの確認

    $ uname -r 4.15.0-112-generic

    CUDA Toolkitインストール方法の選択

       CUDA Toolkitのインストール方法は以下の2種類の方法があります。 runfile packagesでは失敗したという経緯がありますので、ここではRPM and Deb packagesでインストールを行うことにします。

    CUDA Toolkit 11.0のインストール

       CUDA Toolkitダウンロードのページで、Linux - x86_64 - Ubuntu - 18.04 - dev(local)と選ぶと、 CUDA Toolkit 11.0をインストールする以下のようなコマンド群が表示されます。 Ubuntu18.04のインストール裏事情で述べた通り、CUDA11.0に対応したCuPy11.0が未公開であるため、次項に示す通り本サイトではCUDA Toolkit 10.1をインストールしますが、 CuPy11.0が公開されている場合には、CUDA Toolkit 11.0をインストールしてください。
    $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin $ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 $ wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda-repo-ubuntu1804-11-0-local_11.0.2-450.51.05-1_amd64.deb $ sudo dpkg -i cuda-repo-ubuntu1804-11-0-local_11.0.2-450.51.05-1_amd64.deb $ sudo apt-key add /var/cuda-repo-ubuntu1804-11-0-local/7fa2af80.pub $ sudo apt-get update $ sudo apt-get -y install cuda

    CUDA Toolkit 10.1のインストール

       初回構築時(2019年8月)に上記サイトで、上記と同様の操作を行うと、CUDA Toolkit 10.1をインストールする以下のようなコマンド群が表示されていましたので、 ここでは、これらのコマンド群をそのまま使用することにします。
    $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin $ sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 $ wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb $ sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb $ sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub $ sudo apt-get update $ sudo apt-get -y install cuda
    これらのコマンドを入力して行くと、最後にピンクの背景で以下のようなメッセージが出力されます。
    Your system has UEFI Secure Boot enabled. │ │ │ │ UEFI Secure Boot requires additional configuration to work with third-party drivers. │ │ │ │ The system will assist you in configuring UEFI Secure Boot. To permit the use of third-party drivers, │ │ a new Machine-Owner Key (MOK) has been generated. This key now needs to be enrolled in your system's │ │ firmware. │ │ │ │ To ensure that this change is being made by you as an authorized user, and not by an attacker, you │ │ must choose a password now and then confirm the change after reboot using the same password, in both │ │ the "Enroll MOK" and "Change Secure Boot state" menus that will be presented to you when this system │ │ reboots. │ │ │ │ If you proceed but do not confirm the password upon reboot, Ubuntu will still be able to boot on your │ │ system but any hardware that requires third-party drivers to work correctly may not be usable. │ │ │ │ │ │ │
    そして、OKを選択すると、Secure Bootのパスワードを求められるので、画面に従ってパスワードを2回入力します。 リブートして、コンソールのメッセージに従ってMOKをenrollすれば、インストールが完了します。CUDAバージョンやGPUの稼働状況は以下のように確認出来ます。
    $ nvidia-smi Tue Aug 4 20:21:04 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 435.21 Driver Version: 435.21 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 1080 Off | 00000000:01:00.0 Off | N/A | | 0% 43C P5 16W / 240W | 0MiB / 8119MiB | 2% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+

    CuPyのインストール

       最後に、CUDA Toolkit 10.1に対応したCuPy10.1をインストールします。
    $ pip3 install cupy-cuda101 Collecting cupy-cuda101 ・・・・・・・・・・ Successfully installed cupy-cuda101-7.7.0 fastrlock-0.5 numpy-1.19.1 six-1.15.0 インストールしたCuPyのバージョン確認 $ pip3 freeze | grep cupy cupy-cuda101==7.7.0


    ページトップへ

    Twitter Twitter Facebook Mail Line

    * 無断転載禁止。
    * どのページでもご自由にリンクして下さい。
    * ご意見・ご質問等がございましたら こちらからメールをご送付下さい。 無料SEO対策 -153.121.92.88。