ギークフィードでは講師の方にお越しいただいて機械学習の勉強会を行っています。
勉強会では、Google Colaboratoryを使用して環境構築をすることなく学習をすることができています。
Colabは無料で使用できるので学習には最適ですが、将来的には学習環境をサーバーに構築することもあるのではないかと考え、
手持ちの余っていたGPUを使用して構築を行ってみました。
本音を言うと形から入るのが好きなだけです。
Google Colaboratoryとの比較とパフォーマンス考察も行っているのでぜひ最後まで読んでみてください。
講師としてお越しいただいているのは株式会社 喋ラボの大橋さんです。
株式会社 喋ラボ
目次
環境
インストールUSB作成環境
・macOS Mojave
・普通のUSBメモリ 32GB
構築サーバー
・ryzen1700
・GTX1060 6GB
・RAM 16GB
・ASRock Fatal1ty Gaming-ITX/ac
・250GB HDD(機械学習はディスク性能はあまり関係ないらしいので)
・Ubuntu 18.04 LTS
・CUDA 10.1
・NVIDIA Driver 430.50
・cuDNN 7.6
インストールUSBの作成
手元のMacでインストールUSBを作成します。
USBメモリのフォーマット
USBメモリをMacに接続します。
ディスクユーティリティからUSBメモリを選択し、「消去」をクリック。
フォーマット形式はMS-DOS(FAT)を選択します。
名前を適当に決めて「消去」をクリックし、フォーマットは完了です。
インストーラーイメージの書き込み
Ubuntu 18.04.3 LTSダウンロード
上記のリンクより、インストーラーイメージをダウンロードします。
今回はデスクトップ環境も使うかもしれないのでDesktop imageを選択しました。
イメージの書き込みにはbalenaEtcherを利用します。
Etcherをインストールし、インストーラーイメージとUSBメモリを選択して「Flash!」をクリックします。
意識高くCUIから書き込む方法もありますが、面倒なので省略します。
Ubuntuのインストール
インストール
biosのbootメニューで起動プライオリティをUSBメモリに変更して再起動。
インストーラー起動後は好みの環境に合わせてインストール作業を行います。
今回「アップデート他のソフトウェア」メニューでは最小インストールを選びました。
Install Ubuntu Desktop
インストール後の作業
インストール後に行う準備作業です。
ipを固定
GUIで行う方法はこちらのブログがわかりやすく解説しています。(こっちのほうが簡単!)
意識高くCUIから行う方法を紹介します。
まずは現状の状態を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ippei@ippei-ubuntu:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp12s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 70:85:c2:48:ce:7f brd ff:ff:ff:ff:ff:ff inet 192.168.0.248/24 brd 192.168.0.255 scope global noprefixroute enp12s0 valid_lft forever preferred_lft forever inet6 fe80::7285:c2ff:fe48:ce7f/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: wlp11s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 88:78:73:99:33:e7 brd ff:ff:ff:ff:ff:ff ippei@ippei-ubuntu:~$ ippei@ippei-ubuntu:~$ nmcli c s NAME UUID TYPE DEVICE 有線接続 1 95893e6e-8e23-38bc-90fa-45fc1645e304 ethernet enp12s0 |
LANで接続しています。NICはenp12s0です。
マザーボードに無線LANのNICもありますが、使用していません。
nmcliコマンドでipアドレス、ゲートウェイ、DNS、methodを設定します。
コマンド後、設定ファイルが生成されるので確認することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
ippei@ippei-ubuntu:~$ sudo nmcli c m "有線接続 1" \ > ipv4.addresses "192.168.0.248/24" \ > ipv4.gateway "192.168.0.1" \ > ipv4.dns "192.168.0.1" \ > ipv4.method "manual" [sudo] ippei のパスワード: ippei@ippei-ubuntu:~$ ippei@ippei-ubuntu:~$ sudo cat /etc/NetworkManager/system-connections/有線接続\ 1 [connection] id=有線接続 1 uuid=95893e6e-8e23-38bc-90fa-45fc1645e304 type=ethernet autoconnect-priority=-999 permissions= timestamp=1570674828 [ethernet] mac-address=70:85:C2:48:CE:7F mac-address-blacklist= [ipv4] address1=192.168.0.248/24,192.168.0.1 dns=192.168.0.1; dns-search= method=manual [ipv6] addr-gen-mode=stable-privacy dns-search= method=ignore |
opensshの導入
Desktop版はデフォルトでsshサーバーが入っていないのでリモート接続できません。
インストールをして自動起動を有効にします。
1 2 3 |
ippei@ippei-ubuntu:~$ sudo apt install openssh-server ippei@ippei-ubuntu:~$ sudo systemctl enable sshd ippei@ippei-ubuntu:~$ sudo systemctl start sshd |
パッケージの更新
パッケージの更新はしておきましょう。
1 |
ippei@ippei-ubuntu:~$ sudo apt update; sudo apt upgrade -y ; sudo reboot |
CUDA Toolkit, GPUドライバー, cuDNNのインストール
必要なパッケージのインストール
ソフトウェア開発パッケージとDKMSをインストールします。
1 2 |
ippei@ippei-ubuntu:~$ sudo apt install build-essential ippei@ippei-ubuntu:~$ sudo apt install dkms |
nouveauを止める
NVIDIAグラフィックスドライバーとnouveauグラフィックスドライバーが同時に動くと問題が発生するのでnouveauを止めます。
まずはモジュールが動いているかをlsmodで確認。
1 2 3 4 5 6 7 8 9 |
ippei@ippei-ubuntu:~$ lsmod | grep -i nouveau nouveau 1871872 9 mxm_wmi 16384 1 nouveau video 49152 1 nouveau ttm 102400 1 nouveau drm_kms_helper 180224 1 nouveau drm 483328 13 drm_kms_helper,ttm,nouveau i2c_algo_bit 16384 2 igb,nouveau wmi 28672 3 wmi_bmof,mxm_wmi,nouveau |
nouveauが動いているようなので以下のファイルを作成して設定します。
1 2 3 4 |
ippei@ippei-ubuntu:~$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf #以下を書く blacklist nouveau options nouveau modeset=0 |
以下のコマンドで設定を反映します。
1 2 |
ippei@ippei-ubuntu:~$ sudo update-initramfs -u ippei@ippei-ubuntu:~$ sudo reboot |
CUDA Toolkitのインストール
以下のリンクからCUDA Toolkitのrunfileをダウンロードします。
自分の環境に合わせてrunfileを選択してください。
CUDA Toolkit
以下のコマンドでもOK。
1 |
ippei@ippei-ubuntu:~$ wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run |
ダウンロードしたファイルをUbuntuサーバー上で実行します。
1 |
ippei@ippei-ubuntu:~$ sudo sh sudo sh cuda_10.1.243_418.87.00_linux.run --silent --toolkit --no-opengl-libs |
コンソールには何も表示されずに完了します。
インストールが完了したら、環境変数を設定するファイルを作成します。
1 2 3 4 5 6 7 |
ippei@ippei-ubuntu:~$ sudo vim /etc/profile.d/cuda.sh #以下を書く export CUDA_HOME="/usr/local/cuda" export PATH="$CUDA_HOME/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH" export CPATH="/usr/local/include:$CUDA_HOME/include:$CPATH" export INCLUDE_PATH="$CUDA_HOME/include" |
設定をしたら一度ログアウトし、再ログインした際に$CUDA_HOMEが環境変数として認識されていればOKです。
NVIDIA Driverのインストール
以下のリンクからNVIDIA Driverをダウンロードします。
自分の環境に合わせてGPUを選択してください。
NVIDIA Driver Downloads
今回は以下のコマンドで行いました。
1 |
ippei@ippei-ubuntu:~$ wget http://us.download.nvidia.com/XFree86/Linux-x86_64/430.50/NVIDIA-Linux-x86_64-430.50.run |
ダウンロードしたファイルを実行します。
1 2 3 4 5 6 7 |
ippei@ippei-ubuntu:~$ sudo sh NVIDIA-Linux-x86_64-430.50.run --silent --no-opengl-files --no-libglx-indirect --dkms Verifying archive integrity... OK Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 430.50............................................. 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. |
今回は途中でwarningが出ましたが、32bit環境に関するものなので問題なさそうです。
インストールが完了すると、以下のようにnvidia-smiコマンドでGPU情報を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
ippei@ippei-ubuntu:~$ nvidia-smi Wed Oct 9 11:39:15 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 430.50 Driver Version: 430.50 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 106... Off | 00000000:0D:00.0 Off | N/A | | 0% 81C P5 14W / 120W | 0MiB / 6077MiB | 2% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ |
cuDNNのインストール
cuDNNとは、NVIDIAが公開しているディープラーニング用の高速化ライブラリです。
cuDNNをダウンロードするには、NVIDIA Developer Programにサインインする必要があります。
「cuDNN Library for Linux」をダウンロードします。
ダウンロードしたファイルはscp等でサーバーへアップロードします。
ダウンロードしたtgzファイルを解凍し、ファイルを移動します。
1 2 3 |
ippei@ippei-ubuntu:~$ tar xfvz cudnn-10.1-linux-x64-v7.6.4.38.tgz ippei@ippei-ubuntu:~$ sudo mv cuda/include/cudnn.h /usr/local/cuda/include/ ippei@ippei-ubuntu:~$ sudo mv cuda/lib64/* /usr/local/cuda/lib64/ |
cuDNNがインストール完了しました。
Jupyter Notebookのインストール
インストール
以下のコマンドでpipとJupyter Notebookをインストールします。
今回はfastaiのライブラリも利用したいのでインストールします。
1 2 3 |
ippei@ippei-ubuntu:~$ sudo apt install python3-pip python3-pandas python3-sklearn ippei@ippei-ubuntu:~$ pip3 install jupyter notebook jupyter_contrib_nbextensions ippei@ippei-ubuntu:~$ pip3 install fastai |
一度ログアウト、ログインをするとjupyterコマンドが利用できるようになります。
Jupyter Notebookの設定
Jupyter Notebookへの接続ポートを変更し、tokenではなくパスワードでのログイン管理にしたいため、
以下のコマンドでconfigを生成し、パスワードを設定します。
1 2 3 4 5 6 7 8 9 10 11 |
ippei@ippei-ubuntu:~$ jupyter notebook --generate-config # パスワードを設定 ippei@ippei-ubuntu:~$ jupyter notebook password Enter password: #パスワードを入力 Verify password: #再入力 [NotebookPasswordApp] Wrote hashed password to /home/ippei/.jupyter/jupyter_notebook_config.json ippei@ippei-ubuntu:~$ vim ~/.jupyter/jupyter_notebook_config.py #以下でポートを変更 -- #c.NotebookApp.port = 8888 ++ c.NotebookApp.port = 5555 |
自動起動設定
Ubuntu起動時にJupyter Notebookが起動するようにdaemon化します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
ippei@ippei-ubuntu:~$ sudo vim /etc/systemd/system/jupyter.service #以下を書く [Unit] Description=Jupyter Notebook [Service] Type=simple WorkingDirectory=/home/ippei #環境に合わせて設定 ExecStart=/home/ippei/.local/bin/jupyter notebook #環境に合わせて設定 User=ippei #環境に合わせて設定 Group=ippei #環境に合わせて設定 [Install] WantedBy=multi-user.target |
自動起動の有効化と実行。
1 2 |
ippei@ippei-ubuntu:~$ sudo systemctl enable jupyter.service ippei@ippei-ubuntu:~$ sudo systemctl start jupyter.service |
(オプション)モニターを接続せずにNVIDIA Driverを動かす
基本的にリモートで作業を行うので、サーバーにモニターは接続しません。
その際に、ディスプレイが無いということでNVIDIA Driverがロードされない問題が発生することがあるようです。
その場合は以下のコマンドで解決できるみたいです。
1 |
ippei@ippei-ubuntu:~$ sudo nvidia-xconfig --allow-empty-initial-configuration |
動かしてみる
Notebookを実行してみる
Jupyter Notebookのサービスを起動したら、ブラウザから
http://【ubuntuのipアドレス】:【設定したポート】
でアクセスします。
このようなスーパーシンプルなログイン画面が表示されたらOKです。
先程設定したパスワードでログインしましょう。
Google Colaboratoryとの比較
Google ColaboratoryではGPUはTesla K80を使用しています。
今回はfastaiで公開されているレッスンでパフォーマンスを比較してみました。
lesson1-pets.ipynb
githubURL: lesson1-pets.ipynb
最初のレッスンは画像認識をして犬猫を種類ごとに分類するものです。
画像の枚数は枚。resnet34を使用してファインチューニングをしています。
まずはGoogle Colaboratoryの結果から。
次に今回構築したJupyter Notebookでの結果です。
3倍くらい早くなりました!
若干error lateが高いのが気になりますが誤差の範囲でしょう。
lesson3-imdb.ipynb
githubURL: lesson3-imdb.ipynb
続いてのレッスンは言語認識を行い、 映画のレビューがポジティブかネガティブ化を判定するものです。
wkipediaの言語モデルをimdbのレビューでチューニングし、さらにネガポジ判定のチューニングを行っています。
こちらもGoogle Colaboratoryの結果から。
そしてJupyter Notebookでの結果です。
最初の内はトレーニング完了予想時間が50分弱と好スタートをきっていたのですが。。
最終的にはこんな結果に。
まさかの6時間コースへ。
なぜパフォーマンスが落ちてしまったのか?
lesson1では高パフォーマンスを出していたのに、lesson3では急激なパフォーマンス低下を起こしてしまいました。
原因は単純です。それは、GPUの冷却能力が低いことにあります。
lesson3のトレーニング中のGPU状態を計測すると以下のような状態でした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ippei@ippei-ubuntu:~$ nvidia-smi Fri Oct 11 14:07:45 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 430.50 Driver Version: 430.50 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 106... Off | 00000000:0D:00.0 Off | N/A | | 0% 97C P2 53W / 120W | 5048MiB / 6077MiB | 100% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 1317 G /usr/lib/xorg/Xorg 6MiB | | 0 3855 C /usr/bin/python3 5029MiB | +-----------------------------------------------------------------------------+ |
97Cという箇所がありますが、これはGPUの温度を表しています。
一般的にGPUの適正温度は80℃以下と言われています。97℃はかなりマズい温度です。
このまま使い続けるとGPUの寿命を削ってしまいますし、高温ではほとんどパフォーマンスを発揮することはできません。
GPUメモリについて
また今回使用してみてわかったことは、GPUのメモリは6GBでしたがこれは全然足りないということです。
上記のnvidia-smiの結果から、lesson3のトレーニングでは約5GBのメモリを使用しています。
そしてこのメモリですが、Jupyter Notebookではノートのプロセスを終了しないとメモリが開放されません。
以下はlesson3のトレーニング実行後、lesson1のトレーニングを実行した際のプロセスとメモリ状況です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
ippei@ippei-ubuntu:~$ ps ax | grep python 978 ? Ssl 0:11 /usr/bin/python3 /home/ippei/.local/bin/jupyter-notebook 979 ? Ssl 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers 1040 ? Ssl 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal 3855 ? Ssl 20:40 /usr/bin/python3 -m ipykernel_launcher -f /home/ippei/.local/share/jupyter/runtime/kernel-be2a11eb-48fc-4e79-90d8-1089e6becc45.json 5194 ? Ssl 0:14 /usr/bin/python3 -m ipykernel_launcher -f /home/ippei/.local/share/jupyter/runtime/kernel-67cbdd51-c9c9-482c-9199-2cf289fc1ebe.json 5326 pts/0 S+ 0:00 grep --color=auto python ippei@ippei-ubuntu:~$ lsof /dev/nvidia* lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/121/gvfs Output information may be incomplete. lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing Output information may be incomplete. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python3 3855 ippei mem CHR 195,255 512 /dev/nvidiactl python3 3855 ippei mem CHR 236,0 529 /dev/nvidia-uvm python3 3855 ippei mem CHR 195,0 513 /dev/nvidia0 python3 3855 ippei 52u CHR 195,255 0t0 512 /dev/nvidiactl python3 3855 ippei 58u CHR 236,0 0t0 529 /dev/nvidia-uvm python3 3855 ippei 59u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 60u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 61u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 68u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 69u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 70u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 73u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 74u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 75u CHR 195,0 0t0 513 /dev/nvidia0 python3 3855 ippei 76u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei mem CHR 195,255 512 /dev/nvidiactl python3 5194 ippei mem CHR 236,0 529 /dev/nvidia-uvm python3 5194 ippei mem CHR 195,0 513 /dev/nvidia0 python3 5194 ippei 57u CHR 195,255 0t0 512 /dev/nvidiactl python3 5194 ippei 58u CHR 236,0 0t0 529 /dev/nvidia-uvm python3 5194 ippei 59u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 60u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 61u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 70u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 71u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 72u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 75u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 76u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 77u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 78u CHR 195,0 0t0 513 /dev/nvidia0 ippei@ippei-ubuntu:~$ nvidia-smi Fri Oct 11 14:50:48 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 430.50 Driver Version: 430.50 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 106... Off | 00000000:0D:00.0 Off | N/A | | 0% 64C P8 6W / 120W | 5939MiB / 6077MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 1317 G /usr/lib/xorg/Xorg 6MiB | | 0 3855 C /usr/bin/python3 5029MiB | | 0 5194 C /usr/bin/python3 891MiB | +-----------------------------------------------------------------------------+ |
PID3855がlesson3、PID5194がlesson1のノートのプロセスです。
メモリが上限まで使用されており、この時Notebook上ではランタイムエラーが起きています。
この後lesson3のプロセス、PID3855をkillすると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
ippei@ippei-ubuntu:~$ kill 3855 ippei@ippei-ubuntu:~$ lsof /dev/nvidia* lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/121/gvfs Output information may be incomplete. lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing Output information may be incomplete. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python3 5194 ippei mem CHR 195,255 512 /dev/nvidiactl python3 5194 ippei mem CHR 236,0 529 /dev/nvidia-uvm python3 5194 ippei mem CHR 195,0 513 /dev/nvidia0 python3 5194 ippei 57u CHR 195,255 0t0 512 /dev/nvidiactl python3 5194 ippei 58u CHR 236,0 0t0 529 /dev/nvidia-uvm python3 5194 ippei 59u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 60u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 61u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 70u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 71u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 72u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 75u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 76u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 77u CHR 195,0 0t0 513 /dev/nvidia0 python3 5194 ippei 78u CHR 195,0 0t0 513 /dev/nvidia0 ippei@ippei-ubuntu:~$ nvidia-smi Fri Oct 11 15:02:04 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 430.50 Driver Version: 430.50 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 106... Off | 00000000:0D:00.0 Off | N/A | | 0% 60C P8 6W / 120W | 910MiB / 6077MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 1317 G /usr/lib/xorg/Xorg 6MiB | | 0 5194 C /usr/bin/python3 891MiB | +-----------------------------------------------------------------------------+ |
5GBのメモリの空きができました。
このように同時にノートを実行する際は注意が必要です。
一方Google ColaboratoryのTesla K80は12GBのメモリを積んでいます。
おわりに
まとめ
・インストールは結構たいへん
・GPUの温度には気をつけよう
・GPUメモリも見ないとだめだよ
・Google Colaboratory使おう
感想
一言でいうと「Google Colaboratoryすげえ!」です。
無料で素晴らしいスペックの環境をブラウザから使用できるというのは圧巻です。
これから機械学習を始める方はColabを利用すればまず間違いないです。
私もメインではColabを使っていこうと思います。
一方で今回の構築は良い経験になりました。
改善のためにはサーバー全体(特にGPU)の冷却能力を上げる必要があります。
また、GPUも性能の高いものをSLIで構成したりするといいかもしれません。
消費電力も考えるといくらお金をかければいいのやら。。
今回の環境を使う余地があるとすれば、Colabはインスタンスの実行時間が12時間であるという制限があるため、
超長時間の学習の際に活用する可能性があるかもしれません。
その場合は、以下のコマンドでGPUの消費電力を制限することで負荷をかけすぎることなく運用できるかもです。
1 |
ippei@ippei-ubuntu:~$ sudo nvidia-smi -pl 【GPUの最大消費電力】 |
参考にさせていいただいたリンク
CUDA Toolkit/GPUカードドライバー導入手順
Teslaのnvidiaドライバーの正しいインストール方法
モニタを接続しないPCでNvidiaドライバを動かす
【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory
- 組織内のIPv4アドレス(EIP)を自動通知してコスト削減する - 2024-12-03
- 組織内のAWSコスト最適化のためにやっている7つのこと - 2024-12-01
- Amazon Connect Contact Lens + iPaaSで生成AI活用&他サービス連携を簡単に実現!– Amazon Connect アドベントカレンダー 2024 - 2024-12-01
- AWS Step Functionsの基本を再学習しました - 2024-09-23
- Amazon SESでバウンスメールを管理する - 2024-07-07