algonote

There's More Than One Way To Do It

10万円で自宅にDeep Learning用マシンを作った際にはまったこと

1年半前にBTOパソコンのGPU入れ替えた際のメモ。

f:id:hiromichinomata:20180604013950p:plain:w400

中古のBTO PCのGPUを入れ替えるという選択肢

Deep Learningの学習をする際にCPUでやるのは速度の面で現実的でなく、デファクトスタンダードはNVIDIAのGPUのマシーンを使うこと。

最近では随分GPUのクラウドインスタンスも増えたが、GPUは本質的に発熱量が多く、データセンターで1点管理するには不向きで、長時間学習させているとコストがかさみがち。そう行った際に、自宅にGPU環境があるとクラウドより割安になる場合もあるが、組み立て済みのマシンは初期費用20万円以上するのでまあお高い。

自作するという選択肢もあるが、パーツで買うと量産効果きかないのか割高になる場合もある他、Macに慣れたゆるふわ自作PC勢には0->1組み立てはなかなか厳しい。

マシンに対する見解は色々あり、ググると 1) クラウド派 2)組み立て済み購入派 3) 自作派 などが出てくるが、自分のやった 4)BTO PCのGPUを入れ替える派 はそれほど情報がなかったので知見を共有してみる。

BTO PCとは

BTOとはBuild To Orderの略で受注生産のこと。受注生産ときくととスーツのオーダーメイドのように高級なものを想像してしまいがちだが、BTO PCの本質はどちらかというと自作PCの自作部分を外注するイメージに近い。Webの画面で好きなカスタマイズをボタンぽちぽちしていくと、要望のPCが届く。

メーカーとしてはドスパラやマウスコンピュータが有名。

今回は以前(2012年)にマウスコンピュータで購入したG-TuneのゲーミングPCのGPUを入れ替えた。

やったこと

以下のマシンのGPUを入れ替えた。

  • CPU: Core i3 3.3GHz
  • メモリ: 8GB
  • SSD: 60GB
  • HDD: 500GB(追加オプション)
  • GPU: GeForce GTX550 Ti 1GB => GTX 1060 6GB

自分は色々カスタマイズした結果元マシンはトータル11万円くらい使ったが本体だけならminの構成で6万円。標準構成にモニターが含まれていないので+1万円で7万円くらいがフェアな値かもしれない。GTX 1060 6GBは秋葉原で3万円で計10万円。

以下ははまったこと。

GPUの選定、交換

始める前はGPU入れ替えるだけなのでAmazonでGTX 1060 6GB買えばいいだけだろうくらいに思っていたが、同じGPUでもファンの種類や電源の供給チャンネル数に違いがある。特に電源供給でケーブル何本必要かを調べることが大事で秋葉原で複数種類比較するのを推奨。

一般的なゲーミングPCの電源容量とマザーボードでは1GPUに1本しかケーブルが伸びる前提になっておらず、2個以上のGPUを使いたい場合やGTX 1080Tiなどケーブル2本必要なGPUを使用したければマザーボードの選定からやる必要がある。この場合はBTO PCの改造よりフルスクラッチの自作の方が現実的だと思う。

また、古いPCのマザーボードが出た時点では当然ながらNvidiaの最新GPUは存在しておらず、nvidia-smiなどのコマンドをうってもunknown GPU扱いになる。マザーボードのメーカーがドライバの更新をしてくれていれば、それを適用することができるが、古いものだとサポートを打ち切っていることもあるのでその点もはまりどころ。

OSまわり

Nvidiaのマニュアルを見るとある程度メジャーなディストリビューションはサポートしているが、Ubuntuが使われることが多い。

新しい方がいいだろうと思いUbuntu 16を入れるとアノテーションツール等はQt4前提で作られており、Ubuntu 16だとdefaultはQt5のため上手くいかないことが多々あった。ただ、2018年現在では最新のCudaがサポートしているのが最新のUbuntuだけだったりするので、場合によってアノテーションはVirtualBox上のUbuntuで動かすなども検討した方がいいかもしれない。

また、最近ではどのOSでもディスク暗号化が提供されているが、有効化するともれなく後述するNVIDIAのドライバが入らなかったので、ディスク暗号化は切ることを推奨。

Cudaまわり

GPUで計算させるためにはCudaを入れる必要があり、それをするためにはNVIDIAのドライバが必要。Nvidiaのドライバを入れるためには既存のドライバを切らなければならないが、マニュアル通りやっても割とこけた。GPUのドライバインストールにこける=画面に何も映らないなので絶望的。

事前にsshdなどを起動しておき同一LAN内の別マシーンから接続するという技も一応あるが、OS再起動してpasswordを入力しないとsshdが動かず詰んだりした。結局何度もUbuntuをクリーンインストールするはめに。二度とやりたくない。

Windowsとの共存

VR全盛の今日この頃、せっかく最新のGPUを手に入れたので、WindowsとLinuxを切り替えたくなる場合も多い。

あー、デュアルブートってやつやればいいんでしょうと老害感を出すとはまる。Windows 10ではファームウェアがBIOSからUEFIに変わっており、UbuntuはUEFIをサポートしていなかった(追記:2016年当時、Ubuntu 14だとすんなりとはいかなかった)。つまり、同じディスクでOSを選ぶことができない。自分は2つディスクがあったのでMaster Boot Recordをそれぞれ作成し、必要に応じて起動画面で切り替えた。美しくない...

また、当然ながらWindowsのファイルシステムはNTFSでLinuxのそれとは違う。Deep Learningは大量のデータが必要で、Linux側の容量が足りなくてもWindowsの方使えばいいだろうと思っていが、既存コードはデータとコードが同一ディレクトリにある前提のものがほとんど。

Deep LearningのライブラリはCaffeやdarknetなどC/C++のビルドが普通に必要なものやPythonのラッパーがあっても内部的にはC++を使っているものも多い。gccのコンパイルはLinuxのドライブ上でしか通らないので余裕のもったディスク計画が望まれる。

所感

めちゃくちゃつまづいて、多くの幸運の結果、動かすことができた。二度とやりたくない。今はもうクラウドかなあ。