Deep learning用のハードを用意する

今年(2015年)に入り,いっきに一般の単語となった観があるDeep learning(深層学習).
流行語大賞の候補に入りそうな勢いです.
Google Trendsにて日本での「Deep learning」「深層学習」の検索数推移を見てみました.
2014年後半から右肩上がりの角度が急になっています.

f:id:eiji-kb:20150725151119p:plain

ちなみに国別で見てみたのが下図.最大5カ国まで同時表示できますので,各国見てみました.
中国が多い.たしかにこの前のDeep learningを使った認識コンテストでも,TOP10に中国の大学があちこち入っていました.
しかしアメリカと比較してもこんなに多いのはなぜ?グラフが急激に下がっているのも意味不明.f:id:eiji-kb:20150725225426p:plain

話がそれましたが,とにかくDeep learningもここまで一般化すると今更やっても遅い感があります.しかし,始めなければチャンスもありません.まだ可能性はあると思います.
そこでDeep learningの環境を構築しました.
ついでに,夏季休暇あたりに個人的にDeep learningを試してみようと思っている方に,何を揃えたらよいか,必要なものがざっと俯瞰できるガイド的なものも作成できると思いこれを作りました.すでにDeep learningをばりばりやっている方にはなんの価値もない内容です.

1.Deep learningに適したOSとハード
 OSはUbuntu,ハードはタワー型でNVIDIAGPU.  

 f:id:eiji-kb:20150729082512p:plain

 上はかなりのポンチ絵で申し訳ないのですが,
 Deep learningフレームワークは,Caffe,Torch, Pylearn2, Mocha, Chainer, ... 各種存在します.
 この中でCaffeやTorch,Pylearn2はかなりメジャーです.
 また,これらフレームワークを操作する言語(フレームワーク自体その言語で記述されていることも多い)も,
 違いがあります.
 従来の機械学習の分野では,numpyやscikit-learnといった機械学習に便利なライブラリが
 使えるpythonが利用者を獲得しており,引き続きDeep learning界隈でも人気があるようです.
 最終的には,自分のやりたいこと(CNNで識別したい,自分で新しいニューラルネットを作りたい)
 に適した粒度のフレームワークを使うことになると思います.
 その見極めのためにもメジャーなものにはひと通り目を通しておくことは有益と考えます.
 これらDeep leaningのフレームワークですが,対応OSとしてはlinuxが第一のターゲットとなっています.
 同じUnix系のMacOSも対象となっていますが,コンパイラの違いなどによってフレームワーク
 によってはインストールがlinuxより面倒な場合があります.
 Windowsでは非公式サポートだったり,サポートしないが自分たちで試してみてといった一段下の
 取り扱いとなっています.
 もちろん手間暇をかけてWindowsで動かすといったこともありですが,
 Deep leaningが主目的であればあっさりUbuntuを使うのが良いです.
 今は昔と違い3つのOSをそれぞれ得意案件に応じて使い分けることも多いと思います.

 ハードはコストパフォーマンスを考えればWindows機(Ubuntu機も同じ)となります.
 Macは当然アップル社製のみまた,MacbookiMacGPUが世代によりNVIDIAであったり
 AMD(ATI)であったりします.
 選択の幅がWindows機(Ubuntu機)に比べ狭い.
 Windows機(Ubuntu機)はデザインやMacOSが原則使用できないことを置いておけば,
 コストパフォーマンスに優れます.
 Windows機(Ubuntu機)でも高性能なGPUを積んだノートは高価なため,対象はデスクトップとなり,
 またごついGPUを積むことになるため,タワー型が対象となってきます.
 熱のことを考えたら,ミニタワーよりゆとりのあるミドルタワーやフルタワーが良いかと思います.

 もちろんハードについては,予算があれば性能重視で行くこともできます.
 GPU複数枚積むと性能も上がります.
 実際Deep leaning向けにそのような構成のマシンも売られています.
 だいたい100万円は超えるようですが.自分で組めばもう少し安くできるかもしれません.
 会社か学校で予算が出る,もしくは金持ちで痛くも痒くもない,金持ちではないが漢,
 といった場合は選択が可能と思います.

2.GPUの選択について
 TITANシリーズがおすすめとなります.
 GPUはメインのパーツとなります.よって性能が良いものをおすすめします.

f:id:eiji-kb:20150729204850p:plain

 速度(Flops)については,サイトにより微妙に違いがあり,上図は下記を参照しました.
 List of Nvidia graphics processing units - Wikipedia, the free encyclopedia


 現行品はTITAN Xや980などのMaxwell世代の製品となります.
 現在はこれらの製品が最も入手し易いということになります.
 しかし残念ながら,これらは前世代(Kepler)と比べて性能がさほど上がっていません.
 また,Deep learningでは浮動小数点の精度は単精度でも十分とされているため
 重視する必要は無いとはいえ,倍精度の性能が出ないのも面白くないところです.
 さらに,次期製品であるPascalアーキテクチャは,性能がかなり向上する見込みである
 ことがアナウンスされています.Deep learning用途であれば10倍向上ということです.
 鵜呑みにするのもなんですが,それでも製造プロセスは変更されますし倍近いトランジスタ
 が載せれるようになるため,性能は確実に向上します.
 仮にDeep learning用途で10倍になるのなら,いやそこまで行かなくても数倍でも性能が
 上がるのであれば,そりゃ来年購入することになると思います.
 こういう情報を仕入れると,安い買い物ではないため現行のMaxwell世代品は買う気が失せます.
 しかし待っていても使えないし時間も金のうちですので,ここは現行品を購入するか,
 もしくは入手の確実性は低いですがKepler世代品を中古で購入するということになります.
 私はTITANを入手しました.

 なお,Teslaシリーズですが,これはGPUコンピューティング専用品です.
 ECCメモリを積むなど,信頼性を重視した製品となっております.
 関係の無い世界ですのでよく知りませんが,GPUクラスタを組む場合に
 この信頼性はかなり重要になってくるものと想定されます.
 ただ価格も相当に良いです.(ググったらK40が最安で52.8万円くらい)
 個人ベースではなかなか購入できないと思いますので,表では参考としました.

3.実際に購入したハードと価格
 (1)GPU
   TITANをオークションで入手しました.
   4月ころ入手で,58,000円
   グラボはいくつかメーカがあるのですが,
   落としたのはEVGAというメーカのものです.
   EVGA製は,OCができたりと,品質が良いという評価のようです.
   他のメーカのものであれば,もう少し安いようです.
  f:id:eiji-kb:20150728131121j:plain


 (2)パソコン本体
   BTOで購入.
   いくつかサイトを見て,値段がこなれていると思ったパ◯コン工房より購入.
   (特にこの会社を薦めているわけではありません.どこでも良いと思います)

   基本方針は,
    ・性能は基本的にハイエンド側のものを.
    ・しかし水冷とかOCとかしない.
    ・コスト重視.ケースとか安いので良い.BTOでオーダするより個別に購入した方
     が安いパーツは個別に買う.

   ええ,私はお大尽ではないのでコストは重視します.
   しかしハイエンド側としたのは,過去の機械学習のソフトでBoFでCPUのマルチコア
   を使って処理に一晩とかかけていたので,CPUはいいものを選択することにしました.
   ただ,性能が高いCPUを選択しても払った値段に比例して性能が向上するわけでは
   ないです.
   Deep learningでは,処理の中心はGPUとなりますので,
   パソコン本体側は割りきってコストの安い構成にすることも考えられます.
   むしろ本体はi3とか安い構成で組んだ方が,
   そのピーキーさがかっこいいかなとも妄想しました.

   パーツはBTOでオーダするより実店舗の方が安いものがありました.
   BTOでオーダしたら保証や取り付けの手間なしのメリットはあるのですが,
   メモリなど故障する可能性が低く,手間もかからないパーツならもうコスト重視で
   個別に購入します.好きなメーカのパーツが選択できるというメリットもあります.

   実際にベースのモデルとして選択したのは,
   ・MD7100-i7-HLB[Win8.1] 
   スペックは以下の通りです.
  f:id:eiji-kb:20150731052844j:plain 
   このベースモデルの正確な価格は控えていませんでしたが,8万円台後半でした.
   これに以下のカスタマイズをおこないました.
    ・CPU i7-4790K       (+6,480円程.Kは4コア同時に最大4.2GHz動作
                  可能との記事を見たのでこれにした)
    ・メモリ 16G(8G✕2)     (+11,980円程.なおBTOで32Gにすると高い.
                  そこは個別買いで対応予定.)
    ・HDD 2T         (+4,980円程.HDDはWindows用として.しかしこれが...)
    ・光学ドライブ ブルーレイ    (+5,980程.これはDeep Learningには関係なし.)
    ・電源 700W 80PLUS GOLD (+7,980円程.GPU対応)   
   以上のカスタマイズをして,
    ・支払価格 136,494円(税込,送料込)
     (※価格は時期により異なります.上の発注は2015年7月初旬に行いました)
    ・納期 8日間(発注から手元に納品するまで.土日含めて)

   納期はケースバイケースと思いますが,私の場合8日でした.
   休暇に間に合わせようと思ったら,早めの手配をおすすめします.

   ・残念だったこと
    HDDは+5千円で2Tにできたのでそうしたのだが,
    本体に入ってきたのがSeagateBarracudaだった.
    f:id:eiji-kb:20150729053157j:plain 

    以前iMac27のリコールプログラムでSeagateの1Tが対象になり,
    実際に壊れたので個人的にSeagateにはいい印象を持っていない.
    もちろん今回のが問題ある製品というわけではないのだが.


 (3)個別購入パーツ
    1)SSDUbuntu用) 
     ・Crucial CT500MX200SSD1 25,916円
     ・オウルテック HDD/SSD用→3.5インチサイズ変換ブラケット   536円
     ・サンワサプライ シリアルATA3ケーブル 0.5m TK-SATA3-05  739円 
                           計 27,191円

      f:id:eiji-kb:20150729074234j:plain

     以前機械学習の特徴量を保存していくのにかなり容量を食った思い出があるので,
     UbuntuもHDDにしようと考えていたが,下記にSSDがいいとありましたので
     参考にさせて頂きSSDにしました.
     Hi-KingさんのChainerの解説がとてもわかりやすい - shi3zの長文日記

      データは増えたらとりあえず手持ちのUSBHDDに保存するかHDDを増設する.
     なおSSDのメーカ選定は下記を参考にさせて頂きました.
     http://ssdおすすめ.com/


    2)その他
     ・結束バンド 100円(電源やSATAケーブルの取り回しで,付け直しする必要があった.ダイソーで購入)
     ・ベゼル用ネジ 270円(安いケースのせいか,ベゼルは1スロットを除き,
      空き缶のフタのようにねじ切るタイプ.まとめて押えるレバー(緑)があるが,
      これはGPUのカドと干渉して押えることができなかった.ベゼルのスロット用の
      ネジも1コしかおまけについてなかったので買いに行った.面倒くさ.)     

      f:id:eiji-kb:20150729060155j:plain


    3)その他(環境により必要ない)
     ・無線子機 バッファロー WLI-UC-G301N 1,500円程
      デスクトップは有線でつなぐのが普通なのでちょっとアンバランスですが,
      都合により無線子機を付けた.実店舗で特価品で購入.
     ・モニタ Prolite X2380HS 15,000円程 これも実店舗の特価品で購入.

  

 (4)最終的な費用
     モニタなど一部の費用はおよそだがここまでの金額を合計すると,
     総合計 238,555円 
     となる.

     ちなみに,7月29日現在で,GTX980Ti搭載したPCは以下の価格.
     パーツが違ったり,メモリやSSDの容量が少なかったりモニタがオプションなど
     条件が違うので単純な比較はできませんが,目安として掲載しました.
f:id:eiji-kb:20150729174432j:plain

     なお,繰り返しになりますが,このブログは特定の会社の製品を推薦する
     ものではありません.
     あえて書くことでもありませんが,実際の購入にあたっては,面倒ですが各社の
     サイトで価格をご確認の上,納得された上で購入されることをおすすめします.

4.パーツ取り付け
 フタを開けて手順書を見てGPUを取り付けた.
 熱のことを考慮してHDDは元あったところから一段上のベイに移動,
 SSDは下のベイに取り付けた.
f:id:eiji-kb:20150729073252j:plain

 このあたりはケースによって違うので,細かいことは略しますが,
 パズルみたいなもんで,取り外したり付けようとした時に,引っかかったような感じを
 受けた場合は,きちんと目視でパーツを確認した方が良い.

5.Ubuntuインストール
 (1)Windows8.1とのデュアルブート

  下記サイトなどを参考にさせていただきました.

デュアルブート(UEFI Win8.1 + Ubuntu14.04) その2 - Windows 8.1のパーティション構成を確認する - Ubuntu kledgeb
  なおWindowsで使用している2T HDDもトラブル対策を考えパーティションを分けました.
  上のサイトには,フリーのパーティション操作ソフトの紹介があったので,それを使いました.
  Windows10リリース直前なのでタイミング的に残念でしたが,10へのアップデートは機会
  を見てやろうと思います.

 (2)Ubuntu14.04LTS日本語Remix(インストール直後アップデートし14.04.2)
  インストールは(1)で紹介したサイトを参考にしながらおこないました.
  LiveCDで起動した時点で,無線子機 バッファロー WLI-UC-G301N は認識するので,
  暗号化規格やキーを設定できます.

  Ubuntuについては,本家サイトの14.04.2isoイメージから導入するか
  日本語Remix14.04isoイメージで導入するか悩みました.
  実際両方入れたりしましたが,最終的には(2)の形で導入したものを使っています.
  個人の好みです.
  本家isoから英語版としてインストールしておけば一番無難という気がしますが,
  Deep learningでかなりUbuntu環境を常用しそうなので,やはり日本語環境で使いたい.
  本家isoでもインストール時日本語を選択すれば日本語インプットメソッドとしてiBus-anthy
  が入る.しかし私はmozcが使いたい.(和音かなというのを使うので)
  結局日本語Remixの方が面倒がなかったので,こちらで使っています.


 (3)トラブルシューティング
  1)日本語Remix14.04LTSを導入し,後述するCaffe(ビデオドライバ等環境含む)を
   インストールした後にUbuntuを14.04.2にアップデートしたところ,
   ログインしてもすぐログイン画面に戻されるという病気がでた.
   これに対してはサイト上にいろいろな情報があるので試したが,解消しなかった.
   まだ導入したばかりなので,再度Ubuntuクリーンインストールした.
   日本語Remix14.04LTSを導入直後,14.04.2にアップデート(sudo apt-get update,
   sudo apt-get upgrade)しCaffeを導入した.
   なぜログインできなくなったのか原因不明なため,今後アップデートが発生した時が不安.
   14.04.2ではxserverが14.10相当のものにかわるという記事を見たがそれが関係あるのか.
   実際に14.04と14.04.02では後述するNVIDIAドライバ導入後の起動時の挙動も違う.
   今の私のUbuntuの知識では原因はわかりません.スミマセン.
   
  2)Ubuntuを2度目導入したとき,導入後真っ黒な画面になってUbuntuが起動しなくなった.
   よく覚えていないが,下記のような流れで対処した.
   1. UEFI(昔でいうBIOS)で起動して,Windows Boot Managerからブートした.
   2. Windowsから管理者権限のコマンドプロンプトを立ち上げ,以下を入力し,

bcdedit /enum firmware

    ブート情報を確認. 

  f:id:eiji-kb:20150729153720j:plain

    ubuntuというのが2個ある.
    GRUBX64とSHIMX64というところが違うが,
    下記サイトを参照すると,

Ubuntu Boot Repair その27 - おすすめの修復でUbuntuを起動できるようにする(ブートメニュー)(UEFI + GPT) - Ubuntu kledgeb

    SHIMX64・・・セキュアブートが有効な環境で「GRUB2」を起動するOSローダ.
             セキュアブートが無効でも利用可.
    GRUBX64・・・セキュアブートが無効の環境で「GRUB2」を起動するOSローダ.

    ということだった.
    今回購入したPCでは,SHIMX64であれば起動した.

   3. 名前が同じubuntuで判別しずらいのでubuntu shimx64に変える.
    下記{id}は,SHIM64.EFIのidentifier(モザイクで隠している部分)をコピペして入力
    する.

bcdedit /set {id} description "ubuntu shimx64"

     (参考サイト)bcdeditでUEFIのブート・エントリの名前を変更する − @IT


   4. UEFIを起動し,Boot Option #1を,ubuntu shimx64にした.

  f:id:eiji-kb:20150729161338j:plain

   これでGRUBが表示され,Ubuntuが起動できるようになった.

  それにしても,SSDは起動が速いですね.
  今回,PC本体も速いということもあると思いますが,
  以前使ってたHDDでのUbuntuよりはるかに快適です.
  買ってよかった.

   (以下に続く )  

eiji-kb.hatenablog.com