自分のための備忘録的なブログです。

Ubuntu14.04LTS を使って、ディープラーニングの勉強をしています。
記載されているコードは、他の OS には互換性がない可能性があります。


DNN:
マシン性能別 学習速度の比較, TFチュートリアルをmodifyする

python3:
オブジェクト指向プログラミングとは, モジュールとインポート、パスを通す, システムコマンド(os), ファイル・フォルダ名取得, 画像の前処理,

Ubuntu14 の初期設定:
Ubuntu14初期設定, 初期設定-2, cudaなども, 初期設定-3

拡張性を考えてディープラーニング用パソコンを組むときに重視したいポイント(ネットや本で見なかった意見)

ディープラーニングの勉強を初めて1年程度たち、ディープラーニング用パソコンを組んでから半年程度立ちました。この間、何度もパソコン組み立て、パーツ交換を行いました。

 

最近、使っているニューラルネットワークが肥大化したことによる、速度低下から、根本的なアップグレードを検討しています。

選択肢が大変多いため、検討した項目を整理のためにまとめます。どれも「重視したいポイント」ですが、同時に、どれも「必須ではない」ので、自分の状況に応じて取捨選択が必要です。

 

ネット上や書籍で見なかった意見を中心に記載します。

 

今回調べて、参考になったサイト。

http://timdettmers.com/2015/03/09/deep-learning-hardware-guide/

このサイトは古いですが、「CPU はどのようにデータを扱うのか」と言った基本的なことから記載されており、大変参考になります。

また、下部のコメント欄で議論が活発であり、多くの人が悩むであろう、core i7/i9, Ryzen/ThreadRipper の話なども相談されています。サイトは古いですが、新しい話題まで網羅されています。

 

例えば、「2018 年 初頭に PCIE 4.0 と Vota GPU が出るはず」とか、 (Volta 版のテスラ GPU は既に出てますね、Volta の GeForce でしょうか)新しいうわさ話も書かれています。

 

  

 

必要なパーツ 

ケース

E-ATXマザーボード対応

 パソコンパーツを設置するマザーボードのサイズ様々。小さな mini-ITX から、順に micro-ATX, ATX, Extended-ATX (E-ATX)と大きくなる。大きなボードほど、たくさんのパーツを設置でき、拡張性も高い傾向。

 

 拡張性について、mini-ITXmicro-ATX, さらに ATX との間には超えられない壁がある。したがって、本格的にディープラーニングを行う場合、mini-ITXmicro-ATX よりも、ATX や EATX を選びたい。

 

 ATX ボードには、EATX と同程度の拡張性のものもある。ただし、そういった ATX ボードは限られ、値段も高い傾向。個人的には EATX 対応のパソコンケースを買うのが無難だと思う。

 なお、mini-ITX とその他のケースでは、サイズの違いが大きい。しかし、 micro-ATX, ATX, EATX の間では、サイズの違いはわずか。そのため、なるべく EATX 対応を選びたいが、あまり EATX 対応のを作っていない会社もあり、探すのが割と大変。

静音・ファンコントローラー付き

 ディープラーニングではパソコンを長時間動かすため、「静音」ケースがベター。パソコンの騒音は、主に冷却の「ファン」に由来する。「静音」ケースは音漏れを防ぐために開口部が少なく、また、内部に消音材が設置されている。実際にはファンノイズは漏れてくるが、後述の「ファンコン」のこともあり、静音ケースが良い。

 注意なのは、消音材のために内部が少し狭くなっていること! 私が購入したのは、見たところ 5mm 程度は厚みがあり、裏配線のスペースを圧迫してる(もともと 1.5 cm とか 2cm とか, それくらいの厚みしかないので)。静音ケースを選んだなら、配線スペースが限られるため、電源は「モジュラー」タイプを選びたい。

 

 現在の CPU は高性能を出すため、なるべく高速で動こうとする。高速で動くと CPU が発熱し、それにより突然ファンが高速回転→その冷却効果で CPU 温度が下がり、ファンの速度が遅くなるなど、ファン回転数が急に上下するのも、不快な騒音になる。

 静音ケースは、CPU 温度に依存せずファンの速度をコントロールできる「ファンコントローラー」が付いていることが一般的で、これも「静音ケース」を重視する一因。ファンコン自体は後から 5 インチスロットに追加設置できるが、近年のケースは 5インチスロットが廃止される傾向にあるし、追加だとケース外装の一体感が失われたり、蓋が閉まらなくなるケースも出てきたり、なので、はじめからファンコン付きのケースを選びたい。

長尺電源対応(できれば >= 22cm)

 電源は「ATX規格」のものを使うことになるはず。電源容量が大きい物ほど、たくさんのパーツを動かせる。容量が大きい電源は、より長い(長尺)傾向。

 将来の拡張性を考えると、ケースは長尺電源に対応したものを買うべきでした(後悔)。

 

 まず、コンセント一本あたりの電流は 15A までになり、電圧 100V と合わせると、電源の最大サイズは 1500W 。 1500W クラスで各社の電源を見てみると、

 

 EVGA SuperNOVA 1600W G2: 22cm (Amazon star x 4.6)

 EVGA SuperNOVA 1600W Platinum: 22.5 cm

 Corsair AX1500i: 22.5 cm (x 4.0)

 Rosewill Tokamak: 18 cm (x3.5)

 SilverStone: SST-ST1500-GS/TI 18cm  (star x4)

 Enermax EMR1500EWT 18cm (star x3)

(アメリカアマゾンはレビューが多いので、日本のサイトより参考になる)

 

 概ね 18cm あれば 1500W まで使える様子。しかし 18cm のものは、Amazon レビューが悪い傾向。実際、STAR x3 台では star x1 レビュー(数週間〜数カ月で壊れたとか、相当ひどいレビュー)があることが多い。 star x4 台を選びたい。 

 高機能なものをコンパクトにつくろうとすると各所に無理が出て値段が高くなるのは容易に想像できる。パソコンの安定動作に重要な電源に高機能なものを選ぶには、長尺電源対応のケースを選びたいところ。

水冷対応・五インチベイなし。

 ディープラーニングでパソコンのパーツは激しく発熱するが、高温になると動作が制限される(遅くなる:サーマルリミット)。CPU や GPU は電力消費も大きく、発熱も大きい。これらを効率的に冷却するための「水冷」「簡易水冷」を選べるケースがベター。水冷には、いろいろな部品を買ってきて自分で組み立てる「本格水冷」と、部品がワンセットになった「簡易水冷」がある。「本格水冷」の方が冷却効率を上げたりしやすいが、技術的に難しく、「簡易水冷」を使うほうが多いと思う。

 

 「簡易水冷」のメリットは、

  簡単なこと

  初期投資が安く済むこと

 逆にデメリットは

  たくさん機器を冷やそうとすると、水冷ラジエーターの設置場所の取り合いになってしまうこと、また、それに伴いラジエーターサイズが小さくなりがちなこと。

  設置を最適化しづらいこと(本格水冷では、高温となった冷却水は上側へ、ラジエーターで冷却されたものは下側を通すことで、ポンプの負担を軽くすることができるが、簡易水冷ではそれができない。簡易的に、「冷却したいパーツよりも、ラジエーターを上側に設置すること」となっているが、CPU + 複数の GPU を簡易水冷しようとすると、マウントポイントが限られてくる)

 

 水冷対応のパソコンケースでは、水冷・簡易水冷のパーツを取り付けられる場所を多めにとっているため、将来、水冷・簡易水冷化したくなった時に対応しやすい。

 

 五インチベイは、かつては CD-ROM や DVD-ROM を読み込むために必須だった。これらは近年 USB で外付けできるので、現状、五インチベイは不要。五インチベイがあると、一方でフロントの(簡易)水冷取り付けが制限されてしまう。

 

 簡易水冷を取り付けるポイントは「フロント」「トップ」「リア」の3箇所。

 基本的には「フロント」「リア」を使いたい。ラジエーターサイズは、汎用性の高い 12cm が基本のサイズだと思う。

 

 「リア」はミドルタワーでは 12cm の冷却力が低いものしか付けられないケースが多いが、どのケースでも、ほぼ確実に取付可能な強みがある。

 リアに 14cm 取り付け可能な製品もある。ただし、14cm の簡易水冷はメジャーではない様で、製品も少ないし、12cm と比べ最新ではない製品が多い印象。

 

 トップは 24cm 以上の、冷却力高いのを取り付けられるケースが多い。しかし、PC 起動時にホコリカバーを外したりするのが面倒で使いづらい。また、パソコンの取り回しが面倒になる(排気マネジメントから、机の下に設置は事実上無理。机の下に置くと熱気がこもったり顔にあたって眠くなったりする。また、吸排気管理も面倒になる。ラジエーターをトップに設置するなら必然的に排気になり、ケース換気がアウトフロー傾向になってしまう。ケースファンがアウトフロー傾向になると、ケースの、ホコリ対策をしていない隙間から air が入っていることになり、ホコリが入りやすく、長期的にケア面倒そう)。やはり基本はフロント吸気・リア排気のインフロー傾向に仕上げたいところ。

 5インチベイがあると、「フロントの上部」という、簡易水冷を取り付けやすい「美味しい」ポイントがなくなり、簡易水冷が制限されてしまう。

 また、HDD は従来、フロント下部に置かれることが多かったが、(簡易)水冷の設置のために、HDD を個々に置かないケースが増えている。冷却重視なら、このようなケースを選びたい。

拡張スロット八本(以上)

 ディープラーニングでは GPU を使って計算を高速化するが、GPU の設置に拡張スロットを使用。一般に、一台の GPU につき二本のスロット。そして一台のマザーボードに台までの GPU を設置できる(のが一般的)。

 

 一般的な ATX/EATX パソコンケースでは拡張スロットは七本のみ。基本的にはコレで困ることはないが、こういったケースでは、GPU の設置数は最大三台までとなってしまう。実際にはマザーボードとの兼ね合いで、最大二本となる場合が多い。GPU を 3本以上使う可能性があるなら、スロット八本ほしいところ。

 

 が、実際に GPU 4本刺しにすると電源が厳しくなったり、RAM が足りなくなったり、色々と無理が出てくる。一般には 3 本が現実的だと思う。(しかし3本使うにも、マザーとの兼ね合いで 拡張スロット 8本が必要な場合が)。

 

それで結局どれを買うのか

 上記すべてを満たす製品は見つからなかった。

 いくつか条件を満たしているケースは

 

Antec P110 (長尺電源20cm, EATX対応なし)

Corsair Carbide 600q (長尺電源が 20 cm まで。倒立ケース)

Corsair Carbide 400q (電源 18cm, 拡張スロット 7本)

Corsair Carbide 270R (電源 22.5cm, EATX対応なし、スロット7本)

Fractal Design Define R5 (EATX対応なし、拡張スロット7本、5インチスロットあるが取り外し可能)

Fractal Design Define S(EATX対応なし、拡張スロット7本)

 

 など。

 

 ただし条件を満たすケースは当然「でかい」「高い」ので、コンパクトさと値段と重さといろいろなトレードオフ

 

電源

1000 ~ 1500W対応

 ディープラーニングでは大量の電力を消費するため、家庭用コンセントの上限(15A x 100v = 1500W)である 1500W の電源を選択したいところ(すべきだった、初期投資が高くても)。

 

 ロスもあるので、このワット数でも、使えるのはせいぜい 1200 ~ 1350 W (1500 * 0.8 ~ 0.9) 程度。そもそも電源が最も効率的に働くのは、「定格電力の 50%」と言われ、例えば GPU を 2本挿しすれば、簡単にこの「 50%」を超えてくる。

 

 例えば、 20 万円くらいで組むとすると、CPU/GPU

core i3/i5 (TDP 90W) + GeForce 1070 x2 (TDP 150W x 2)

 あたりになると思うが、消費電力の目安は

90 x 2 + 150 x 2 = 480 W

 

 この場合で、最低必要な電源は 480 / 0.8 = 600W

 効率的に動かす(電力ロスをなるべく少なくしたい)なら、 480 / 0.5 = 960 W

 

 個人的には、少なくとも 1000W くらいの電源を買っといたほうがいいと思うし、できればはじめから 1500W を買っといたほうが、後々買い替えの必要が出てこないので良い。

 

 

 個人で最高性能のパソコンを求めるなら、

 

 Threadripper 1950X (TDP 180W) + GeForce 1080ti x 2 (TDP 250W x 2)

 くらいになると思いますが(これだけで30万円になりますが)、これに必要な電源は

 (180 * 2 + 250 * 2) / 0.8 = 860 W / 0.8 (80 Plus電源) = 1075 W

 

 で、1000W を超えてくる。

 これを効率的に動かす(電力ロスが少ない範囲で動かしたい)なら、

 860 / 0.5 = 1720 W

 

 で、もはや 1500W を超えてしまう。

 

 

  ここに GeForce 1070 を 2枚追加すると

 + 300w / 0.8 = + 375W

 にて、合計 1450W で、1500W の限界に達する。

 

 

 もう少し節電で行くなら

core i7- 6800 (TDP 140W) + GeForce 1070 x 2 (TDP 150W x2)

 必要な電源は

(140 * 2) + (150 * 2)) / 0.8 = 725 W

 効率的に動かすための電力ユニットなら

(140 x 2 + 150 x 2) / 0.5 = 1160 W

 

 というところ。

 やはり 1000 W の電源は、最低でもほしいと思われる。 

 

 今のところ考えているのは

core i7-8720X (140w) + GeForce 1080ti x2 (250W x 2)

 で、これは、最低でも 975W が必要。。。

  

 

 また、静音との兼ね合いもある。一般に、電源の最大電流を供給しようとすると発熱も大きく、ファンの回転数が上昇する傾向あり。大容量電源では、比較的大量の電力を供給しても、回転数は抑えられる。

できればフルモジュラー(またはセミモジュラー)

 私が初めて組んだ PC では、値段を重視して電源を選んだ結果、モジュラーではない電源。モジュラー電源とは、パソコンパーツに電源を供給するケーブルを付け外しできる電源。

 

 拡張性を考えてディープラーニング用パソコンを組む場合、ケース内にパーツが多くなりがち。不要なケーブルを取り外すことのできる「モジュラー」電源を選びたいところだった(けど知らなかったので、安易に安いのを選んだ)。

 

 「セミモジュラー」とは、PCIE や peripheral ケーブルは外せるものの、マザーボード電源ケーブルや、CPU用電源が取り外しできない(PCIE や Peripheral ケーブルが取り外しできる)タイプ。

 なるべくなら、セミモジュラーではなく、全てのケーブルを取り外せる「フルモジュラー」を選びたい。「セミモジュラー」で 1000W 以上の電源になると、CPU 甩電源が 1本の製品と、2本ある場合とがあり、マザーボードによっても必要となるケーブル数が変わってくる。ハイエンドのマザーボードなら 2本必要となるが、このケーブル数が合わずに、電源が使えない場合もあるし、逆にケーブルが余ってしまい無駄な場合もある。

 「セミモジュラー電源」の購入を考える場合、マザーボードの CPU 電源も確認する必要があり、「フルモジュラー」の場合には、CPU 電源が 2本あるものを選ぶ。

マザーボードとの兼ね合いも

 上述の通り、ハイエンドのマザーボードの場合、CPU 電源ケーブルが 2本必要になるが、 1本しかない製品もあるため、事前に確認する必要がある。

 

 フルモジュラータイプの電源で、CPU が 2 本ある製品がベスト。 

 なお、電源が足りなくなったら、足りない容量の電源を追加購入・ケース外からケーブルを引き入れる手はある。ただし電源の管理が面倒になるけれど。

 

マザーボード

 4-way SLI 対応

  ディープラーニングGPU を使うことで高速化できる。GPU をたくさん使うことで、タスクを並列で動かしたりして、さらに高速処理が可能に。

 GPU を挿せる数はマザーボードにより様々で、一般に 1 から 4 本。 ただしマザーボード側で「3本挿せる」と書いてあっても、ケースとの兼ね合いで 2本までしか刺せない場合がある。4-way SLI 対応であれば(かつ、ケースに拡張スロットが 8本あれば)確実に 4 本挿すことができる(し、拡張スロットが 7本の場合でも、GPU 3本挿すことができる)。

 

 ただし、GPU を増やしていくと、その他のパーツも高性能なものにアップグレードしていく必要が出てきて大変。そのため、GPU は 2本で十分な気もする。

 

 

 ただしインテルの最新 chipset の X299 では、4-way SLI 対応は ASUS の RAMPAGE が 10万円、 MSI の XPOWER GAMING が 4-5 万円。これらはどれも、複数の CPU 電源ケーブルが必要なので、私の場合は電源買い替えが必須。このうちの XPOWER GAMING は、アメリカアマゾンで、「ディープラーニングでグラボ 4枚挿しにしようと思って買ったのに、CPU がカーネルパニックを起こして安定しない」とか、「GPU を 4枚指すと起動しない」とか、散々なコメントで星1。

 AMDRyzen / Ryzen TR にあわてて出してきたから、まだ安定性がいまいちなのか? そもそも 2-way SLI で諦めれば 3万円くらいで買えてしまうマザーボードに、こんなに払うか悩ましいところ。。。本当に 3本使えるかわからないのにね。

 

 一方、AMD なら(X399) ASRock の X399 Taichi が 4万円第前半で安い。が、CPU 電源 2本必須。私の場合は 電源買い替えが必要。

wifi, bluetooth 付き

 wifibluetooth は必須の機能ではないが、あると大変便利。

 かつ、後から追加しにくい。

 

 ディープラーニング甩では(GPU と競合して)拡張スロットを使えず、これらの機能を後から追加できない可能性があるため、これらが組み込まれているマザーボードが良い。 どちらも相性問題が出て、追加設置しても動かない場合がある。

 ただしマザーボード組み込みだと高スペックとなり、値段が高い傾向に。悩ましい・・・

 

 しかし、こういう余計な(失礼)機能が付いている方が多くの電力を要求するらしい。Wifi と BT を諦めれば、X299 ボードで CPU ケーブル 1本で動くところ、これらが付いているマザーボードでは、CPU 電源ケーブルを 2本要求する様子。悩ましい。

x99, x299, x399など、RAM 128 GB 対応

 GPU を使ってディープラーニングを行う場合、データは一旦、GPU のメモリー(Video RAM, VRAM) に格納される。データが膨大だと VRAM に収まらず、パソコン本体の RAM を使うことに。このため、パソコン本体の RAM は多いほうがよく、RAM を 128 GB まで増やせるタイプにすべきでした(後悔)。

 

 128 GB 以上に増やせるマザーボードもあるが(CPU が Xeon 対応の製品)、種類が少なく高価。また、RAM 自体も大変高価。実際、128 GB 揃えるのに 10万円以上かかり、本当に 128 GB 買うかどうかわからないけれど。将来的な拡張性ということなら 128 GB まで積めるようにしたい。

 

 ただし、高解像度の画像を使ったディープラーニングでマルチプロセスを動かしたりすると、データ量が膨大となるため、データが RAM に載り切らず Swap を使うことになる。結局 Swap を使うならば、データを RAM に載せることを諦めて、コスト重視で RAM 少なめでも良いかもしれない。その場合、速度低下(と SSD の消耗)に悩むことにはなるけれど。

80mm m.2 NVMe スロットが 2本以上 

 ディープラーニングでは大量のデータ読み込み・書き込みが発生し、大量のストレージが必要。現在一般的なストレージには、 2.5 inch HDD, 3.5 inch HDD, 2.5inch SSD, m.2 NVMe SSD があり、前者ほど遅く、後者ほど速い。

 

 当代最高スピードを誇る、m2 NVMe を複数接続できるようにしたいところ。接続数は一本でも良いが、将来の拡張性を考えると、1本だけだと足りなくなった時「買い替え」に対し、複数本あれば「追加」可能。

(PCIE で拡張可能なので、そちらを使う手もあるけれど)

 

 (Swap についても、 m.2 NVMe 2本に分散したほうが、アクセスが速くなりそうな気はします。適当ですけど)

 

 ちなみに現状、上述のチップセットとの絡みでは、

x99: 1本

x299: 2本

x399: 3本

 の製品が多いみたい。

 

 ただし x399 は CPU が Ryzen ThreadRipper 限定となり、これは TDP180W と消費電力が高く(ただしベンチマークを見ると、実際の電力消費は Skylake-X と同程度の模様)、電源容量との兼ね合いもあり、悩ましい。

Ryzen Threadripper 1950X/1920Xファーストインプレッション - 期待の16コア/12コアCPUのパフォーマンスを検証 (17) ベンチマークテスト「消費電力測定」 | マイナビニュース

Thunderbolt 3 ポート

 近年では外付け GPU (eGPU)が色々と販売されているが、それらは Thunderbolt 3 ポートを介して接続される。 eGPU はノートパソコンでも使用可能であるし、PCIE レーンが他の製品で埋まっていても追加可能というメリットがある。

 拡張を考えるなら、なるべく多くの Thunderbolt 3 ポートを持つモデルが良い。といっても、1本だけ、というボードがほとんどのようですが。

 

ストレージ

500GB 以上の m.2 NVMe SSD

 ディープラーニングでは「Swap」を用いる場合があり、Swap 用にストレージを(概ね 100GB 以上)確保したい。現在の底値は 256-512 GB 程度であることを考えると、500GB 以上の m.2 NVMe SSD がほしいところ。

ストレージは、それ以外 割とどうでもいい

 ストレージは m.2 NVMe SSD があれば問題ないし、そもそもどんな PC ケースでも、 2-3 台程度の 3.5 inch HDD が置けるようになっている。ストレージは外付けもできるし、m.2 NVMe SSD 以外は、後からどうにでもなる。

 

GPU

メモリ量と価格のバランス

 GPU で重視すべきはメモリ(Video RAM, VRAM)量。一般に GPU は価格が高いほど速いが、価格が 2倍になっても、速さは 2倍にはならない。安い GPU 複数本を並列に使えば速度を数倍にできる。高いものより、安い GPU を複数の方がコスパが高い。

 しかし、高い GPUはメモリ量が多い点も重要。

 

 

 GPU で計算を行う前に、はじめにデータを VRAM に載せる。データが VRAM に載りきらなかった場合、

  1.計算ができなくなる

  2.パソコンのメモリ (RAM) を使って計算する

 のどちらか。

 

 2. の場合、’RAM は VRAM と比べて圧倒的に低速のため、学習速度も遅くなる。

メモリの種類と速度について表にしてみた【2016秋】 - Qiita

 VRAM と RAM のアクセス速度は、こちらの記事で約 10 倍。ただし VRAM をキャッシュ的に使ってくれるようで、私の経験では 10倍は遅くならないけれど。

 とは言え、なるべくたくさんのデータを VRAM に載せられるように、VRAM 多いモデルを選びたい。

 

 RAM にも載り切らない場合、ストレージの「スワップ」を使用する。スワップは、最も高速な m.2 NVMe SSD を使ったとしても RAM の 10 倍くらい遅い。

プログラマが知っておくべき、メモリ/ディスク/ネットワークの速度まとめ - Qiita

 もちろん、VRAM や RAM を優先して使用するので 10 倍は遅くならない。それでも自分の経験で、Swap を使いはじめると、2-3 倍遅くなる。

 

 ディープラーニングではハイパーパラメーターの調整のため、何度も何度も学習をやり直すので、2倍というのは大変に困る(ので、逆にスワップ量は少なくして、そういうタスクは行わないと決めたほうが幸せかもしれない。m.2 NVMe SSDRAID を組んで、そこに Swap をおければ、この悩みは解決できるかも)

AMD、Ryzen Threadripper対応のX399プラットフォームでNVMe RAIDをサポート | マイナビニュース

(とはいえ 6枚の RAID 0 でようやく 10-20 Gbps なので、労力と金に見合わない感じはする・・・)

 

 データは VRAM や、せめて RAM  に収まるよう、なるべく大きな VRAM を持つモデルを買うべき(だなぁと)。

 

 そうすると選択肢としては、

 

GeForce 1080 ti, VRAM 11GB, 実売 10万円程度

GeForce 1070, VRAM 8GB, 実売 5万円程度

 

 もちろん 1080ti がいいのだけど、値段がバカみたいに高いので、半額で 2/3 の VRAM を確保できる 1070 は魅力的。

 (これ以上では Titan X/Xp が 12GB で 20万円くらい。その上は Quadro P 4000 24GB で 50-100万円くらい。研究室ならまだしも、個人レベルでの購入はありえない・・・)

 逆に、「VRAM に載せることは諦めて、RAM から計算する」と諦めればより安いモデルで十分になる。

 こういったコスパ重視の方向で

 

GeForce 1050 VRAM 2GB 実売 1万円程度

 

 (GeForce 1030 GT というより安価な機種がありますが、こちらはNVIDIA の CUDA enable GPU に出ていない。ひょっとして、ディープラーニングに使えないかもですが、過去の同価格帯のモデル:730 GT がリストに乗っているので、多分載せ忘れてるだけだろうと思います。使えなくても責任負えませんけど)

CUDA GPUs | NVIDIA Developer

 

 というのもありうる。ただし、256x256 みたいな高解像度画像(場合によっては 512x512)を 数千枚、更にRGB 3 チャンネルではなく、10-20チャンネルくらいで入力したり、3D画像にして、マルチ GPUマルチタスクディープラーニングをすると、 GPU 間で RAM の取り合い・Swap の取り合いになり、結局速度低下を招いてしまう。

 こういう割と変態的なディープラーニングをするなら、やはり VRAM が大きいモデルを買うべき。

 

 価格と性能のバランスは

 

GeForce 1060 VRAM 3-6GB 実売 2-3万円程度

GeForce 1050ti VRAM 4GB 実売 1.5万円程度

 

 なども良い感じ。「別に 解像度 256 x 256 の画像とか使わないよ」なら、このへんのモデルのほうがベターな気がする。

 

ディスプレイ 

デルの28インチくらいがほしい

 パソコン組み立てには関係ないのだけど、いいディスプレイもいい仕事に必須。

 「デル」と書いたのは、これまで使ったデルのディスプレには以下の機能があったから。

 1.複数系統の入力

  HDMI, DVI-D, DP, VGA など

 2.高さ調節機能

 3.マウント部にケーブルホール

  名前は本当は違うかもしれない。ケーブルがバラバラになるのを防ぐ孔

 4.USB

  これは使ってないけど、今は。

  でもディスプレイ自体が USB ハブ機能を持ってるのはありがたい。ちょっとしたデータ転送とか、キーボード・マウス設置に便利。

 

 実際、今はメインで 24 インチのを使っている。もうひとつ 28 インチのディスプレイもあり、そちらのほうが快適なので。

 

 

今回、買いそうなパーツたち

core i7-6850K

 もともと8万円くらいのが 4万円代まで下がっててお得感が強い。この下位モデルである 6800K と差がない値段。なぜ安いのか、それは、おそらく、計算性能がこの下位の 6800K と性能的に殆ど差がないから。

 では 6850K は6800K と比べてどこが優れているかというと、計算速度が少しだけ速く、それに加えて、PCIE 3.0 レーン数が40 に増えている(6800K: 28レーン)。

 2つの GPU を 3.0 x 16 で動かせるし、GPU を 3つに増やした場合でも、ひとつは 3.0 x 16, 残りの2つは 3.0 x 8 で動かせる。また、4つに増やした場合でも、全て 3.0 x 8 で動かせる。GPU には 3.0 x 8 レーンが必須のようで、28 レーンの 6800K は GPU は 3 本までしか挿せないみたい。

 性能的には 6800K でも満足だし、おそらく 4-way SLI はしないのだけど、値段的に数千円しか差がないし、計算能力がより高いので 6850K を購入したいところ。ただし、3.0 x 16 に意味があるか分からない。ベンチマークでは、3.0 x 16 と 3.0 x 8 で殆ど差がないことが報告されている。

 

 ただし、シングルスレッド〜クアッドでは、現在使っている CPU (i5-7600k)よりも少しだけ計算が遅くなる。計算速度は遅くとも、データ転送のチャネルが増えるので、i5-7600K より速くなるといいけど。

 現行モデルの core i7-78xx 系は性能は良いものの、人気があり値段が高すぎる感。6850K プラスアルファの値段で購入できる 7820X は PCIE レーン数は下位モデル同様で 28 レーンと少ない。

 10 万円を超える core i7-7900X で 44 レーンになっているものの、44と言う数字は微妙。48 なら 3.0 x 16 レーン確保できるので、スペック的な高性能がわかるけれど、44 って誰得だろう。

 さておき、7900X はシングルスレッドでもマルチでも性能が良い。けれど、それだけに 10万円以上するし、値段も下がりにくそう。実際、 全モデルである、40 レーンで性能の高い 6800K は値下がりしていないし。せめて 7820X が 32 レーンあれば買ったのだけど。

 X299 チップセットのボードも高い。さらに 4-way SLI 対応の X299 はめちゃくちゃ高い。

 

 さておき必要電源は

(140 x 2 + 250 + 150 (sum, 540)) / 0.8 = 675

 1080ti を足したとして

(140 x 2 + 250 + 250 + 150 (sum, 930)) /0.8 = 1162.5

X99 ボード(4-way SLI)

 安くて BT ついてるやつ。できれば CPU 電源が 1本だけのもの・・・

 できれば電源・CPU クーラー買い替えなしで行きたいが、さてどうなるか。

Corsair 水冷 CPU クーラー H80i

 12 cm モデルなので、汎用的に使える。

 小型 mini-ITX ケースでも使えそう。かつ、multi-水冷 GPU にしたい時も、取り付け場所が競合しにくい。ぎりぎり Ryzen TR にも使えそう、買わないけど。

 

 

おわり。

思いついたら追加するかも。 

 

ディープラーニングで暖房いらず

画像を使ったディープラーニングをしています。

 

が、

 

発熱とメモリ消費がすごい。

 

70℃ 

f:id:pmonty:20171109111903p:plain

37℃ 

 

 

発熱は、

 赤いのが CPU core i5K

 青いのが GPU 1070

 黒いのが GPU 1080ti 

 

見た感じ 黒いの が冷えてますけど、こやつが曲者。

 

簡易水冷なので冷えてるだけで、発熱がすごい、廃熱がすごいです。

(そのほかのは、ヒートパイプ空冷)

 

11月に入り、冷えこんできましたが、

ディープラーニングしてると、暖房がいらないくらい。

 

VRAM 使用も激しく、ニューラルネットワークを複雑にすると、

VRAM 足りなくなって落ちることもあり

(コードが悪いという話も...)

 

f:id:pmonty:20171109111936p:plain

 

 VRAM がでかい GPU 買っといて良かったなぁ。。。

 

RAM 40GB 積んでるのに、swap を半分近く使ってます。

 

f:id:pmonty:20171109111959p:plain

 

(仕方がないので、RAM を max の 64 GB まで買い足した)

(RAM 使ってるのは、ユニファイドメモリなのかな)

(Swap を広げたいけど、やり方がわからへん)

 

ディープラーニングって、つくづく人間が勉強するプロセスと似てます。

 

札束で殴るところが。

そして札束で殴ったからと言って、いい成績が出るとは限らないところも。

 

 

ヒストグラム比較に使ったコード

うろ覚え

 

 

 

 

import numpy as np
import matplotlib.pyplot as plt
import argparse

 

parser= argparse.ArgumentParser()
parser.add_argument("-infile", nargs = 1)

 

try:
    decoded = args.infile[0]
except:
    decoded = "保存ファイル.npy"

 

a = numpy.load(decoded)
b = numpy.load("ほにゃらら.npy")

 

a = np.reshape(a, [a.shape[0] * a.shape[1] * a.shape[2])
b = np.reshape(b, [b.shape[0] * b.shape[1] * b.shape[2])

 

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(a, bins=256, normed=True, color='red', alpha=0.5)
ax.hist(b, bins=256, normed=True, color='gray',alpha=0.5)
fig.savefig("1.png")

# 表示して見て確認したいなら fig.show()


fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(a, bins=256, normed=True, color='red', alpha=0.5)
ax.hist(b, bins=256, normed=True, color='gray',alpha=0.5)
ax.set_xlim(0, 80)
ax.set_ylim(0, 0.1)
fig.show("2.png")


fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(a, bins=256, normed=True, color='red', alpha=0.5)
ax.hist(b, bins=256, normed=True, color='gray',alpha=0.5)
ax.set_xlim(40, 200)
ax.set_ylim(0, 0.02)
fig.show("3.png")

 

参考

qiita.com

 

 

python xxx.py -infile yyy

 

見たいにファイル名を指定して実行できる。

はずだけど、できなかった。。。

 

精進が足りない。。。

 

対話的に使えばファイル名を指定できるから、まぁいいや。

labeling_for_object_detection の使い方

faster R-CNN, YOLO, SSD 等で用いる、学習データの生成ツール?  labeling_for_object_detection

 

セットアップに苦労しました。

ので、まとめておきます。

 

コードはこちら

github.com

 

セットアップの際に参考にしたサイトです。

ほとんど、このサイトの記載通りですが、少し違います。

ai-coordinator.jp

 

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

 

 

A. ソフトのインストールと起動

0. 環境

 Ubuntu 14.04 および、Windows 10

 1. Processing のダウンロード 以外はほぼ同じ。

 

1. Processing のダウンロード・インストール

 Processing というソフトをダウンロードします。

Download \ Processing.org

 

 32-bit, 64-bit は自分の OS に合わせて。普通は 64-bit を使っているはず。

 わからなければ 32-bit をダウンロードすれば、どちらでも動くとは思いますが・・・

 

 labeling_for... コードの対応は Processing 3.3 となっています。

 しかし、現在はダウンロードページから 3.3 をダウンロードできません。

 現時点では Processing 3.3.5, および, 3.3.6 にしかアクセスできませんが、3.3.5, 3.3.6 でも動きました。

 

 Windows でしたら、 .exe を使ってインストール。

  ウィザードで簡単にインストールできます。

スタートメニューには登録されません。

デスクトップに生成されたショートカットをダブルクリックして起動。

ショートカットは邪魔なので、生成されたフォルダ "processing-3.3.x" に移動しました。また、 "processing-3.3.x" フォルダも、邪魔にならない適当な場所に移動しておきます。

 

 Ubuntu 14 でしたら、

ダウンロードしたファイルを unzip で展開

ターミナルで展開されたフォルダ内に移動、

bash install.sh

にてインストールします。

 

デスクトップ上にショートカットが生成されます。私はわかりやすいように、展開されたフォルダ "processing-3.3.x" に移動しました。また、 "processing-3.3.x" ディレクトリ自体も適当な場所に移動しておきます。私は /home におきました。

 

ダウンロードしてきた processing-3.3.x.zip はあとは不要なので、

rm

するなり、保存フォルダに置いておくなり。

 

私の場合は、将来の再インストールに備えて、NAS に保存しておきます。  

   

 

 

2. github から コードをダウンロード

# terminal

cd

git clone https://github.com/slowsingle/labeling_for_object_detection

 

※私は /home にダウンロードしました。

 お好みで、お好きな場所に

 

 

3. Processing を起動、設定

1. Processing を起動します。(ショートカットのダブルクリック)

 

2. 「labeling_for_object_detection」内のファイル移動

labeling_for_object_detection 内に mainGUI ディレクトリーを作成。

すべてのファイル・ディレクトリをこの中に入れます。

cd labeling_for_object_detection

mkdir mainGUI

mv *.pde mainGUI

mv xml mainGUI

 

2. Processing で、 mainGUI.pde を開く、「フォルダ」「開く(Ctrl + O)」から、

メニュー「フォルダ」「開く(Ctrl + O)」から

「labeling_for_object_detection/mainGUI.pde」を開きます。

 

3. labeling_for_object_detection の起動

「labeling_for_object_detection/mainGUI」ディレクトリ内の mainGUI.pde をダブルクリック。

processing が起動します。

processing ウィンドウの左上の三角ボタン(再生ボタン)を押すと、使用可能状態になるはず。

 

 

 

B. コードの修正 と ラベル付け

コードの修正: mainGUI.pde

このプログラミング言語は使ったことがなので

間違ってたら申し訳ない。java なのかな。

1種類のみのラベル, lesion を使う方針。

 

コードの修正前に、mainGUI.pde はどこかにコピーしておいて、バックアップしておくのが吉。私の場合は

mkdir backup

cp mainGUI.pde ./backup

のように保存。

 

line 10

final int N_CLASS = 1;


line 12

final String[] index2name = {"lesion"};

 

line 51-54 コメントアウト

/* radio.addItem(index2name[1], 2);
radio.addItem(index2name[2], 3);
radio.addItem(index2name[3], 4);
radio.addItem(index2name[4], 5); */

 

ラベルする

このソフトでは、画像を表示する領域の広さは 600x600程度

このため、対象画像も 512x512 程度以下のピクセルに縮小しておいたほうが無難。

 

1. processing の起動

 mainGUI.pde のダブルクリックで開くのが楽。

 左上の参画じるしをクリックすると、ラベルするためのウィンドウが開く。

2. ファイルを開く

 右上の LOAD IMAGE ボタンより

3. ラベルする

 ラベルしたい名前のボタン(Chiyo, Cocoa など)をクリックしたあとで、ラベルしたい場所の「左上と右下」、または「右上と左下」をクリック。赤い四角で囲まれるはず。

 場所が良ければ SAVE RECT をクリックして保存する(赤い四角は消えるはず)

 ラベルしたい場所が他にもあれば、3. を繰り返す。

4. 保存

 OUTPUT XML ボタンを押すと、同一ファイル名(拡張子が.xmlに変わったもの)が、/labeling_for_object_detection ディレクトリ内に保存される。

 ひとしきり保存が終わったら、

mkdir xml_data

mv *.xml xml_data

 などで全部移動してしまうこと。

 5. DELETE RECT ボタン

 現在書きかけの赤い四角を消去する。

 SAVE RECT を押し、保存しておいた赤い四角は消えないので注意 

 

 

ディープラーニング用GPUの選択 - リライト

本記事は、ページビューを集めている記事のリライト、修正版です。

リライト前の記事:

pmonty.hatenablog.com

 

2種類のCPU, 2種類のGPUの速度比較した記事:

pmonty.hatenablog.com

 

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 

ディープラーニングを行うのに、GPU があると、すごく高速になります。「CUDA」というソフトで GPU を動かすそうなんですけど、 

CUDA :NVIDIA 社の GPU を,計算で使うためにプログラム

CUDA - Wikipedia

 

で、CUDA に対応した NVIDIA 製の GPU を探すと、 

developer.nvidia.com

TESLA、QuadroGeForceNVS と製品がたくさんあります。初心者はどれを選べばいいのか?

 

店頭でたくさん売ってるのは GeForce ですし、ブログ記事を見ても、 GeForce がほとんど。GeForce の一択でしょう。

上記サイトでは、性能の指標で Compute Capability  というものがあります。これは新しい GPU ほど数値が高く、数値が高いと最新バージョンの CUDA に対応しているようです。 

 

ディープラーニングをする場合、普通、 tensorflow, Chainer などの "フレームワーク" を使うことになります。すべてのフレームワークが最新の CUDA に対応しているわけではありません。GPU 購入前に、自分の使いたいフレームワークが対応している CUDA を確認するべきです。ただし今のところ、最新モデルは、過去の CUDA にも対応しているようで、基本は最新モデルを買えばいい(CC高いのを買う)となります。

 

GeForce で最新というと、 10系(1030, 1050, 1050ti, 1060, 1070, 1080, 1080ti) です。モ基本はデル番号の数字が大きいほど値段が高く、高性能ですので、後はお財布と相談。

 

お財布に合うってことは重要で、ディープラーニングの教科書でも、

shop.ohmsha.co.jp

 

GeForce GTX 750 という旧機種を導入してたりします。教科書を書いた先生が、旧機種を使っている・・・それでもずいぶん高速化できています。できれば高性能のを買いたいですが、高速化できるのなら、安いのでもいいですよね。因みにこの本、Chainer v2 に対応した新版が出ましたね。これから買う人は、お気を付け下さい。

 

で、もし画像(データ量が多い)を対象にディープラーニングをするなら、メモリーが大きい方が良いでしょう。 最新モデルで、メモリーが大きめと言うことで、候補を上げると、1050ti(4GB), 1060(6GB), 1070(8GB), 1080ti(11GB)、この中から、財布が許すのを購入すれば良んだろうと思います。ちなみに、1060 にはメモリーが少ない 3GB のモデルもあるので、注意してください。

 

 

いくつか気になってるモデルがあります。まず、1050ti はロープロファイル(小さい)モデルがあります。小さいのを買えば、コンパクトな PC ケースにも入りますね。こういうの

www.ask-corp.jp

 

コンパクトケースの一例。

apac.coolermaster.com

 

コンパクトは正義です。これくらいの GPU なら、CPU も 1万円以下の pentium とかで良いでしょう。

kakaku.com

5万円程度で組めると思います。それでもGPUなしのノートパソコンより十分速いはずで、最初は安いのでいいんではないかと。

 

安く作る上での注意点は、SSD を入れず、ストレージは HDD only にすることです。SSD 入れると起動とか速いですけど。ディープラーニング専用機なら、長時間立ち上げっぱなしにするでしょうから、起動が遅いのは無視できる。それに、ディープラーニングで処理する big data は結局HDD に入れますよね? それで、SSD の速さがあまり生かせない訳です。ディープラーニング専用のパソコンなら、SSD を入れるメリットは大きくないと思います。

 

高性能な GPU を買うなら、1080ti か、1080 の簡易水冷モデルが良いでしょうね。

1080

kakaku.com

こういうやつ。でも10万円くらいしますね。たっかい。この辺の GPU で組もうとすると、CPU も core-i7 とか、ストレージも SSD が欲しくなり、20万円以上するはず。個人でやるなら、このへんが限界かな。

 

ディープラーニングすると、CPU, GPU が非常に熱を持ちます。次のエントリに具体的に書いていますが、

pmonty.hatenablog.com

私の場合で、CPU は 80度近く、GPU は 85度まで行きました。

まず、GPU について。ディープラーニング中、GPUは本当に熱を持ちます。触ってみると本当に暑いです。冷却には、空冷、ヒートパイプ空冷、簡易水冷、本格水冷があり、この4つのうち後ろに行くほど冷却効果が高いです。1080 や 1080ti を買うなら、本格的にディープラーニングをやる(つもり)のはず。それなら、簡易水冷モデルを買いたいところです(本格水冷は初心者にはハードルが高いです)。

ディープラーニングで CPU もかなり発熱します。しかし、触ってみると、GPU ほど暑くはありません。CPUの冷却は、空冷(CPUにバンドルされてる奴)もしくはヒートパイプ空冷で十分だと私は思っています。

ところで、アメリカはこういったパソコン製品が安いので、アメリカに旅行する機会があれば、ホテル付で買ったりするのもありです。なお、アメリカアマゾンは、日本と違い、 Prime でも2日後がデフォ。基本的にもっと日数がかかります。なので、アメリカ旅行中に購入する場合、日程には余裕を持って。

 

 

本当は 1080ti の簡易水冷が良いんですけど

kakaku.com

あまり在庫がないし、

バカみたいに高いので。

 

最近は、GPUで、仮想通貨マイニングがはやってるみたいなので、

そっち方面でも どんどん売れていくんでしょうね。。。

 

私は GPU をもう一枚買って高速化(SLI)しようかと、時々値段を見ていますが、

10万円クラスの高性能モデル(1080ti)になると、かなり値動きが大きいです。1万、2万とか変化しますので、購入される場合、値動きにご注意下さい。

 

Amazonについては、過去の値動きをグラフ化してくれる「Keepa」というアドインがあります。

安く買いたいとき、参考になります。

chrome.google.com

 

憧れの NAS と現実

憧れの NAS を買いました。

Synology の 216j.

2ドライブの入門機です。

 

www.synology.com

 

数ヶ月運用したので感想。

 

まず、購入した目的は、複数 PC でのデータ共有でした。

 

これまで、複数 PC でのデータ共有は、

Dropbox の無料容量で頑張ってきました。

 

PC母艦は家に置いてあります。

外でノートでちゃっちゃとコード書いたり、処理を試すこともあり。

 

データのやりとりが必要。

で、メインで使ってる Dropbox では足りなくなってきたと。

 

Onedrive や GoogleDrive を併用しても良かったのですが、

それほど容量が増えるわけではないし。

 

複数のソフトを常駐させると、

  遅くなったり、

  消費電力が増えたり

しそうだから嫌。

 

OneDrive は Ubuntu で使えないし(使い方が分からない)。

 

MicrosoftGoogle は、Dropbox と比べ、

プライバシーに不安もありました。

 

アップルはテロリスト(疑い)の個人情報を守りましたし、

アップルなら信頼しますけど。

 

一部の企業は、サービス最適化のため、

顧客データで機械学習とか回してるでしょうしね。

 

ディープラーニングは「研究」でやってるんで、

虎の子の「データ」を、企業に渡すわけにはいかんのです。

 

で、クラウド上でデータやりとりするために、

憧れの NAS を導入しました。

 

(ホントにデータを守りたければ、クラウドなんか使っちゃダメで、

全部ローカルで管理しなきゃなんですけどね。)

 

 

RAID で冗長性確保。

データをロスする危険も減ってウハウハ!!

 

 

かと思っていたら!!

 

まず、Dropbox の様に使おうと思い、Synology-Cloud-Station-Drive と言うソフトを各 PC に導入、常時同期をやっていました。するといくつか問題が。。。

 

問題点

1.遅い

 LAN ケーブル1本、RAID 1 ですから、書き込みがめっちゃ遅い。

 しかも複数の PC で常時同期してるので、遅い、遅い。

 

2.時々同期されなかったり。

 いつまで待っても同期されなかったり。

 PC再起動、NAS再起動したりして、なんとか同期してくれました。

 

 けど、まぁ不安ですわね。

 「データを保存してるつもり」で「保存されてないかもしれない」訳ですから!

 

 

で、Dropbox って本当に優秀なんだと、今更気付きました。

高速

複数 PC からも常時同期。

世代管理で以前のファイルを復活

 など

 

良いんですけど、おかげさまでお値段も良い訳です。

当然ですね。

1TB で月々1000円という。

navi.dropbox.jp

1TB っていうのは、ちょっと少ないですね。

日常的に使う分なら十分ですけど、ビッグデータとなると足りないですね。

悩ましい。。。 

 

 

ビジネスのスタンダードとか言うサービスなら、2TB あるいはそれ以上使えるんですけど、「5名様から」なので、お値段は75ドル/月からですか。高いですね。

Dropbox plan comparison - Dropbox Business

 

 

 

でも、Dropbox の 1TB 有料プランって、本当に高いのでしょうか?

今回の NAS 導入費用はざっくり 4万円, で 3TB です。

4万円あれば Dropbox 1TB のでも 3年以上使えますね。

 

でも目的は、ディープラーニングビッグデータ管理。

1TB では足りません。

 

 

 

で、札束で殴って、

NAS を高速化することを考えてみます。

 

 

ボトルネック

データの入出力の LAN ケーブル

データ書き込みの HDD

なので、これらを複数帯域確保すれば、速くなるでしょう、と。

 

 

実際の RAID の速度比較 については

こちらのサイトを参照。

https://hikaku.cman.jp/raid/

 

 

例えば 5本差しの RAID 6

  (5本のうち2本が壊れても大丈夫)

  ざっと2-3倍に高速化するようです。

 

 

Synology は 5本モデルからは LAN の差し込み口が4本。

  LAN を複数挿せますし、

  PC とダイレクト接続もできますね。

  ルーターを介さず、ダイレクトの方が速いんでしょう。

 

 

しかしまあ、5本差しモデルというと、本体 10万円くらいになっちゃうし。

HDD も 3 本、買い足さないと。

なんか「沼」にハマる感じ。

 

DS1517 とか、DS 1517+ とか言う機種を考えてたんですけど

(これらは 5ベイだけど、拡張ユニットで 15 ベイまで増やせる)

 

カカクコムのレビューなんか見ると、

  「CPU は性能低い」

とかディスられてたりもして。

うーむ。悲しい。

 

自分に知識があれば、Ubuntu でデータサーバー組むんだけどなぁ。。。

 

と、妄想しています。

 

とりあえず、現状、運用方法を変えてます。

 

NAS はデータのバックアップのみで使用。

 

1.メインのノートパソコンのクラウドバックアップ

 

2.ディープラーニングの大量データ保存。

  常時同期はやめる。

  データバックアップは、FTP? みたいに、

   ブラウザ上でアップロード・ダウンロード。

  重いデータは USBメモリとか、外付け HDD でやりとり

 

という感じ。

 

メインの PC のバックアップは、不安なんですけどね。

NAS にうまく同期されてないことがありましたし。

一応 外付け HDD にも時々保存しています。

 

 

現状に不満あって。

なんと言っても、転送が遅いので。

 

今から思えば、

ふつーに 2.5 か 3.5 の HDD を裸で買って

USB でつないで外付け HDD 風に使う

 

のが、一番ストレスなかったかもです。

 

Keras を使って驚いたこと:インストールの不具合に気付く。

と言うわけで、Keras を始めて約 1日が過ぎました。

 

Keras は簡単で良いですね。

 

できたこと

 

1.VGG 風の簡単なモデルを試す。

2.Keras に実装済みモデルを使う:Xception

3.Imagenet 学習済みモデルの転移学習を試す。

 

結果:これまで 精度 0.90 までしか出なかったのが、最高 0.97 を叩き出す。

 

これまで tf で、何ヶ月も苦しんでいた

1.batch normalization とか

2.既存の高精度なモデルの利用 とか

3.Imagenet 学習済みモデルの転移学習 とか

 

が解決してしまいました。

(tf で実装できている、学習過程の保存とか、tensorboard の利用は、まだ Keras ではできないのですが) 

 

その学習過程は壮絶で、これまで 65度程度だったオリファンの GTX1070 が、80度越えまで頑張ってくれちゃいました。

これを何日も回すのは不安・・・

 

もちろん、ここ数ヶ月の、tf での苦しみから学んだこともあります・・・

 

エラーを見て、どこの問題か推測する とか

エラーが出ても慌てず、手順を経て解消する とか

 

の経験が積めたし。

 

おかげで、Keras を短期間で使えるようになったと思いたい。。。

無駄じゃなかったと思いたい。。。

 

さておき、とんでもないことに気付きました。

 

私はディープラーニング用に2台のパソコンを使っていますが、

メインマシンでトラブル発生です。

 

気付いたのは些細なこと。

今回なぜか、サブマシンで Keras を使い始めました。

 

とりあえずの実装ができたので、メインマシンへコピー。2台でハイパーパラメータの調整を始めたところ、どうもメインマシンの精度が安定しないのです。

サブマシンだと val_accuracy は 0.95-0.99 に張り付いてるのが、メインだと 0.00 - 0.99 までめまぐるしく動く感じ。Seed 取ってないせいかもしれませんが、それにしたって上下動が激しすぎます。

 

で、なんだか変だと。

 

よくよく考えると、

 

「Python3.6 で、出るはずの pandas エラーが返らない!」

 

ことに気付きました。

Keras は python 3.5 までの対応でして、サブマシンの方で 3.6 で動かすと「pandasがなんちゃら」とか エラーを出して止まるのですが。

メインマシンだと、3.6 でも曲がりなりに動いてくれますが、 val_acc が 0 ~ 0.99 までめまぐるしく動きます。そうすると test accuracy も当然悪いと。

 

学習速度は 1080ti のおかげで 1.5 倍くらい速いのですが、どこかがおかしく、使い物になりません。 

 

pandas 関連の問題だとすれば Anaconda のインストールの問題なんでしょうけど。

前 Anaconda を入れ直した際、なんか設定ファイルがうまく消せなかった経験があり(再インストールで環境引き継がれてしまった)。

また、どこに問題があるか切り分けられず、そのうちにさっくり、 Ubuntu インストールからやり直そうと思っています。

 

 これで一日潰れるし、再インストールして再発した否にはどうしようって感じですけど。。。

 

Keras のインストール

というわけで、Keras に挑戦することに相成りました。

Keras Documentation

 

バックエンドに TensorFlow, CNTK または Theano を使い、

フロントエンドでディープラーニングを楽にしてくれるものらしい。

Tensorflow はインストール済み。

CNTK も Theano も定評あるモデルで、いつかは触ってみたいけど、

今回は Tensorflow でいこう。

 

それでは Keras のインストール。 

pip install keras

 

 ただし、対応は Python 2.7-3.5 だそうなので、 Python 3.6 を入れている私は

source activate py35 

しないといけない。

さて、依存パッケージがあるそうで、

 

Kerasは以下のライブラリに依存しています.

numpy, scipy
yaml
HDF5とh5py (モデルの保存や読み込み関数を使う場合のみ)
cuDNN: オプションですが,CNNを使用する場合は推奨

Anaconda で入れてる人は、 numpy, scipy は導入済みのはず。

HDF5っていうのは見つからなかったけど、ぐぐったらどうも HDF5 = h5py らしい。

いつの間にか PyPI でインストールされていた: h5py

 

yaml というのは、データの保存や読み込みに使うようなのだけど、

このインストールは

sudo apt-get install libyaml-dev

 とのこと。

 

かんたん!

 

Keras は公式ドキュメントが日本語化されているし、使い方も TensorFlow よりも簡単!

データの取り回しも numpy で行うようですね。

tf だと、 tf. なんちゃら みたいな Tensor でデータを保持したりしますが、そうすると 

sess.run

しないと中身が見えなくて使いづらいし、

私の中で RAM をバカ食いしている疑惑も。

 

ちうことで、しばらく Keras で遊んでみます。

 

Keras とは、ギリシア語で「角」のことだとさ。

 

 

apt で公開鍵登録

sudo apt-get update

で、

 

パッケージリストを読み込んでいます... 完了
W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: http://dl.google.com stable Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 0000A0A0000A000A

などと表示されるとき。

 

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 000A0A0000A000A

で公開鍵を登録したあとに

 

sudo apt-get upgrade

 

pip-review で python パッケージ一発アップグレード

pip-reviewのインストール

pip install pip-review 

 

pip でインストールされているパッケージ検索

pip freeze 

 

アップデートの有無を確認

pip list -o

または

pip-review

 

一括アップデート

pip-review --auto

 

依存関係が壊れていないかを確認

pip check 

 

もしも依存関係が壊れていたら、必要なパッケージをインストールし直す

pip install bleach==1.5.0

pip install html5lib==0.9999999 

 のように、

pip install [モジュールの名前]==[バージョン番号]