これは,NISE (南山大学 青山研究室) Advent Calendar 2019の18日目の記事です.
今年は,本番環境でやらかしちゃった人 Advent Calendar 2019がめっちゃ盛り上がっていますね!
今回はそれに近いお話です.
ココでのお話は限りなくノンフィクションに近い,フィクションになりますので,予めご注意ください.
当時の状況
当時と言ってもそんなに昔というわけではなく,つい一ヶ月前に起こったできたてホヤホヤの事件です.現在のNISEには,学部生25人(1人豪州に留学中),院生8人(うち3人社会人)という構成で,学部生と院生それぞれに研究室を与えられています.
そのそれぞれの部屋にはGPUを積んだPCが設置されており,問題はそのUbuntuで起きました.
何気なしに...
そのPCのスペックを記載しておきます.
基本構成 | |
---|---|
PC名 | MASTERPIECEシリーズ |
OS | Windows 10 Home 64ビット,Ubuntu18.04のデュアルブート |
CPU | Intel Core i7 |
グラフィックス | Geforce 1080ti |
メモリ | 64GB |
SSD | 512GB |
HDD | 1TB |
こんな感じです.
学部生のメンバーから,kerasをGPUを使って動かしたいと言われて,環境構築を今年の夏くらいにやってから,その後はノータッチでした.なので,内部のソフトウェアアップデートも行われておらず,各種ソフトウェアがかなり古いものになっていたと思います.
ある日,学部生のメンバーから,PythonのUpdateをしてほしいと言われて,pyenv
をUbuntuに入れようとしました.
$ apt install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
各種ライブラリのインストールが必要だったためにapt
を使って,installを試みました.ここまではよかったのですが,そこで,
214 個のパッケージがアップデート可能です。
34 個のアップデートはセキュリティアップデートです。
:
*** システムの再起動が必要です ***
みたいなメッセージが出てきているのに気づきました.
いや,ちゃんとUpdateくらいこまめにしておけよなんて,思ったのが間違いでした...
$ apt update
$ apt upgrade
$ apt dist-upgrade
を実行し,その後に再起動をかけました
画面比がおかしいぞ
再起動後,いつもの紫(?)の画面からUbuntuを選択し,Ubuntuを起動させようとしました.そしたら,まさかのログインループ...
でも,これは16.04から18.04にUpgradeをしたときからちょくちょく起きてて,
こちらの記事を参考にリカバリーモードからwaylandを無効にすることで,解決してきました.
ここでも,またかぐらいの気持ちで,リカバリーした記憶があります.
実際,無効にした後にログインすることができ,いつもの画面を拝見することになるのですが....
「あれ?アイコンでかくね??」
つい言葉でちゃいました.
いつもだったら,ディスプレイに合わせた画面比で表示されるはずなのに,16:9のいつもよりでかでかとした画面比となってしまいました.
ここで,後輩から,ディスプレイを2枚にしたいと要望があり,HDMIとディスプレイポートでそれぞれのモニターにつなげることに.
HDMIの方は画面比がおかしいものの表示されましたが,ディスプレイポートの方は読み取ってくれさえしてくれませんでした.
まあ,とりあえず,使えるからいいやとここで諦めるのも1つでしたが,目の前にバグが有るのに解決しないのはエンジニアとしてどうなのかと思い直し,PCと向き合うことにしました.
NVIDIAの闇
nvidia-smi
がまだ動いているのを確認したところ...
Failed to initialize NVML: Driver/library version mismatch
が表示されるようになりました
あれれ〜
再起動したら,治るかなーなんて思って再起動したら最後,もう,私達の前にログイン画面が現れることはありませんでした
あ.やばし
心の焦りが大きく大きく広がってきます.
幸い,リカバリーモードに変更することは可能でしたので,そちらからログインしました.
nvidia-driverをubuntu18.04にインストールする
とか
Ubuntu 18.04にNVIDIAドライバを入れようとしてハマった
とかめちゃめちゃ調べまくって頑張りましたが,リカバリーモードからですらログインすることもできなくなり,真っ黒な画面と私の頭の中は同じ状態に陥りました.
ですが,内部に保存していた研究用のコードなどはちゃんとGithubのプライベートリポジトリで管理していたり,Google Driveに画像のスクショや構築されたモデルやなんかもバックアップしてあったことを思い出し,
Ubuntu18.04を入れ直すことにしました.
Ubuntu18.04のISOをUSBメモリに焼き直して,接続
かたかたしているうちにUbuntuを入れ直しました.
ディスクイメージが前に作ったやつが残っていてよかった
深層学習環境の構築の闇
さて,ここからが問題です.
うちの研究室では,深層学習フレームワークにChainerを推奨しています.
Chainerを使ったGPUでの深層学習環境では,Cupy
というモジュールが必要になります.
これが,結構厄介なやつなんです.
まずは,大本になるCuda
をいれます.
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.105-1_amd64.deb
apt update
apt upgrade
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
apt install ./cuda-repo-ubuntu1804_10.1.105-1_amd64.deb
apt update
apt install cuda cuda-drivers
そして,PATHを通します.
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
次にCudnn
をインストールします.これは,先程インストールしたcuda
のversionによってインストールするversionが異なってくるので,注意が必要です.
wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.5.0.56-1+cuda10.1_amd64.deb
apt install ./libcudnn7_7.5.0.56-1+cuda10.1_amd64.deb
apt update
apt-get install libcudnn7
そして,Chainer
やCupy
をインストールします.
ここで注意する必要があるのが,Cupy
はCuda
のversionに依存するので,それにあったversionを利用することが必須です.また,Chainer
を先に入れずに,Cupy
をインストールしないと,Chainer
のインストール時にコケます.
pip search cupy
pip install cupy
pip install chainer
裏技
さて,これでうまくいく!なんてなかなか世の中そんなに甘くはありませんw
実は,これには裏技がありまして,
conda install keras-gpu
でGPU周りのソフトウェアを一気にダウンロードすることができるという裏技があります.
こちらのほうが,めちゃくちゃ簡単なので,深層学習フレームワークにこだわりがない人はこちらをおすすめします.
まとめ
今回は,apt update
apt upgrade
によって,nvidia-driverのバージョンが複数インストールされた状態になってしまい,それに気づくことが遅くなってしまったからこそ,Ubuntuを入れ直す,という最終手段を使って解決したお話です.
教訓としましては,
- 迂闊にUpdateしない
- 常にバックアップしておく
- 調べた対処法をコピペして使わない
です.
特に3つ目はこの環境構築の界隈だと同じような現象かと思っていたら,全く違うところでしたみたいなことが往々にして起こっているので,かなり注意が必要となります.
これで,環境構築芸人をやめたいとおもいます(願望).
みなさんも,もし,深層学習の開発環境構築の際は,お気をつけてください.
次回
次回は,NISE (南山大学 青山研究室) Advent Calendar 2019に初登場の@chi-nosukeです.どんな面白いことを書いてくれるのかお楽しみに!!