読者です 読者をやめる 読者になる 読者になる

bohemia日記

おうちハックとか画像処理、DeepLearningなど

GPU搭載ノートPCにUbuntuとCUDAを入れるのに挫折した

機械学習

少し前に、GTX960M搭載のAlienware 13-R2を購入した。当初は予定になかったのだが、このPCをWindows10/Ubuntu14.04でデュアルブートし、CUDAを入れ、ChainerやTensorflowをGPUで学習を回せる環境を作ろうとしたのだが、問題が多すぎて挫折してしまったので、後の誰かのためと、万が一誰か問題を解決してくれる望みを託して記事を書いた。

なんでそんな環境作ろうとしたのか?

きっかけは、参加した超人工生命ハッカソン 。 Unityで作った環境上で人工生命を作るというハッカソンだった。

元となるソースは用意されていて、UnityとPythonをソケット通信で繋ぎ、CNNとDQNを用いて人工生命を学習させていくというものだった。 こんな感じ

普段使用しているmacを持って行ったのだが、やはりGPU無しのmacでは、DQNの動作も遅く、1秒間に2フレーム程度しか計算できない。また画像特徴量を計算しているCNNをファインチューニングを行うだめに学習を回そうとしたが、GPU無しでは遅く、ハッカソンの時間内にできなかった。

「AWS等のクラウドのGPUインスタンスを使えば?」との声もあるかもしれないが、Unityの画像出力が必要なため、SSH接続のみでは厳しい。深層学習系のイベントで外で学習させたいということも今後あると思ったので、頑張って手持ちのPCに入れようと思い立った。

構築したかった環境

  • Ubuntu 14.04 (Windows 10 とデュアルブート)
  • CUDA 7.5
  • Chainer 1.7.2
  • TensorFlow 0.8

Ubuntuのデュアルブート

Ubuntuのインストールは特に問題ない。パーティションを変更して未割り当て領域作って、Ubuntu起動ディスク作って、ブートの順番を変更して起動ディスクからUbuntu起動、インストールするだけ。 詳しくはこちらに書いた。

qiita.com

デスクトップとは異なり、無線LANアダプタが内臓されていたり、トラックパッドが付いており、勝手にいい感じに使えなかった。

Wifiが機能しない

有線はきちんとネットワーク接続できるが、内臓の無線LANが機能しない。無線LANについては、搭載されているネットワークアダプタ周りのドライブ周りでエラーがでるようで、先人達の掲示板の情報を元に試行錯誤したが、解決しなかった。

wireless - ath10k installation - Ask Ubuntu

結果、800円くらいのUSB小型無線子機を購入し接続、Wifi接続ができている。

Amazon.co.jp: BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2: パソコン・周辺機器

トラックパッドが効かない

ノートPCには大体ついているトラックパッドが効かない。 こちらについては、USBマウスを接続すれば問題なく使用できたので、あまり解決には取り組んでいない。

参考

How to install Synaptiks on touchpad on Ubuntu 14.04 - Ask Ubuntu

12.10 - My TouchPad is not responding on an Acer Aspire E1-471-6650 - Ask Ubuntu

CUDAやディスプレイドライバを入れると、画面が映らなくなる

CUDAは、GPGPUというGPUを画像処理以外で使う技術で、ChainerやTensorFlow, Caffeなどで高速に学習をさせるために必要となるものだ。 CUDAに関しては、

qiita.comqiita.com を参考にしてインストールした。

以前に何度かCUDAのインストールを経験したが、毎回どこかでつまずき、時間を取られる恐るべきライブラリだ。正直進んでインストール作業をしたくない。しかし毎回苦しめられていたため、どのあたりでつまずいて、どう直せばいいのか知見が貯まっていたので頑張ってみたが、挫折した。

CUDAのインストールの際には、既存のディスプレイドライバであるnouveauとのコンフリクトによる問題がある。nouveauとnVidiaのディスプレイドライバを同時に動作させると、X-Windowが死んでしまい、ディスプレイ表示ができなくなる。そこで、nouveauを無効化し、nVidiaのドライバだけで動作させることにより、うまくいく事例がたくさんある。

しかし今回の場合、ノートPCという事情があり、うまくいかなかった。試したことを全て書くと大変なので、簡単にまとめてみる。

  • CUDAをインストール、同時に最新のnVidiaのドライバも入る。nouveauを無効化する→再起動後、ログイン時の画面が真っ暗。
  • nouveauを無効化、nVidia公式からダウンロードした最新のドライバをインストール→再起動後、ログインした直後にクラッシュ、ログインループになる
  • BumblebeeというGPU搭載ノートPCの NVIDIA Optimus対応をサポートするライブラリでこちらを参考に安定版のnVidiaディスプレイドライバを入れる→再起動後ログイン時の画面が真っ暗

ちなみに、一番目の状態は、画面はでないがパスワードを入力することでログインできる。その後しばらく放置して、画面ロックが掛かり画面が消えた後にマウスを動かすと、なぜかちゃんとログイン画面が表示される。ログイン後もちゃんと使える。

何度も状況確認が大変だったので、こちらにコマンドをまとめておいた。

qiita.com

まとめ

最終的には、かなり不便だが一応CUDAを導入して、深層学習ができるようにはなった。どれくらい不便かというと、

使うときにはUSB無線子機とマウス必ず指す。起動したら真っ黒な画面に向かってパスワードを入力してログイン、5分ほど待って画面ロックを発生させたあとにマウスを動かして画面を復帰させてから使用する。

という感じ。

GPU搭載ノートPCに自分でUbuntu入れて使うのは、自分にとって相当ハードルが高かったようだ。Ubuntuの仕組みをもっと理解していないと問題解決がままならない。掲示板にも、ノートPCは難しいからちゃんとサポートされてる製品買ったほうがいいよ、というコメントもあった。もし同じことを試そうとしている方がいらっしゃったら、頑張ってください。うまくいったら教えてください。