この記事では、毎回 1 つのトピックを取り上げて、その背景について解説します。また、MATLAB® コミュニティからのいくつかの質問にも回答します。
今回の記事のトピックは、ディープラーニングのための GPUの概要を説明し、その後、次の 3 つの質問に回答します。
GPU (主に NVIDIA® GPU) は、2010 年代のディープラーニングの大熱狂を後押しするきっかけとなりました。膨大な量のデータ (数千または数百万のデータサンプルなど) や複雑なネットワーク アーキテクチャを扱う場合、GPU を利用してモデルの学習にかかる処理時間を大幅に短縮することができます。GPU がなければ、今日のようなディープラーニング ソリューションの多くは実現できなかったでしょう。
GPU が重要であることは理解しましたが、そもそも GPU とはどのようなものなのでしょうか。
GPU (グラフィックス プロセッシング ユニット) は、その名前のとおり、元々はグラフィックス用に開発されたものです。GPU は、多くの計算を並列的に行うことができるため、ピクセル操作のような大規模な単純作業を処理するのに適しています。
一般的に強力なコアが 4 つまたは 8 つある CPU とは異なり、GPU は、数百個の小さなコアを並列に動作させることができます。それぞれの GPU コアで単純な計算を行うことができますが、コア単体での力は限られています。GPU の力は、畳み込みや ReLU、プーリングといった、ディープラーニングの計算にすべての GPU コアを投入するという力技によって発揮されます。
これはすぐにご理解いただけると思います。入力サイズを減らし、(層の数が少ない状態で) 少量の計算をネットワークで実行すると、GPU で並列化と高速化を実現できる機会はそれほど多くはありません。
私からのアドバイスは、GPU を借りられるかどうかを確認するか、クラウドベースの GPU リソースをいくつか確保して、学習時間の差を測定していただきたいということです。いずれにしても、「予期される」または「予測される」メリットよりも、実際の測定値の方が議論の上では説得力があるといえます。
この質問では、「必要」と「高速」の 2 つの言葉に注目したいと思います。必要という言葉は必要不可欠ということを示していると思われますが、この答えは、状況により異なります。短納期でニューラル ネットワークを運用環境で稼働させることを管理職から要求されているような場合は、高速な GPU が必要です。高速な GPU がなくても学習はうまくいくでしょうか。最終的には学習は完了します。つまり、すべてはあなた次第です。
次に、「高速な」 GPU は必要でしょうか。「必要」と同様に、こちらも実際の状況によりますが、一旦専門的な内容は抜きにして、時間的な制約があると仮定し、この質問「必要な GPU を判断するにはどうすればいいか」を考えてみましょう。
一般的なコンピューター ハードウェアと同様に GPU は時間とともに性能は見劣りしていきます。モデルを学習させる際に、現在の研究で何が使用されているかを把握しておく必要があります。先ほどの質問と同様、次の質問に対する回答によって、結果が異なってくる可能性があります。
お使いのラップトップコンピューターに GPU が搭載されていても、ディープラーニングに必要な計算を処理できるとは限りません。
少し前に、私は我慢の限界に達したことがありました。ディープラーニング モデルを実行しようとしたところ、気が遠くなるような時間がかかったのです。開発者の友人に会い、この問題について彼の知恵を借りようと思いました。私たちは、ネットワークの複雑度 (ResNet-Inception に基づく)、画像の数 (数十万枚)、クラスの数 (約 2,000 枚) を調べましたが、学習に数時間以上かかる理由に辿り着けませんでした。
そして、ハードウェアの話になりました。私が Tesla K40 circa 2014 を使用していると話すと、彼は笑い始めました。その後、ハードウェアの話で私をからかうのに飽きた彼は、彼の Titan X を使用するよう提案してくれました。その結果、速度は向上し、再び和やかな雰囲気になりました。この話の教訓は、ハードウェアの進歩は非常に早いということです。Titan X で私を窮地から救ってくれた友人は、真の友人であるといえるでしょう。
学習のプロット有効 (モニタリングおよびスクリーンショット用)
元のモデル (50 クラス): 12.6 時間 精度: 66.7%
小規模モデル (8 クラス): 90 分 精度: 83.16%
学習のプロット有効 (モニタリングおよびスクリーンショット用)
元のモデル (50 クラス): 2.7 時間 精度: 67.8%
小規模モデル (8 クラス): 26 分 29 秒 精度: 80%
注: どちらのテストでも、学習のモニタリングを目的とするプロットが有効になっていました。ここでの問題は、クラスの数ではなく(使用するクラスが少ないと、使用される入力サンプル数も少なくなる)学習時間に目に見える影響を及ぼす可能性があるのは各クラスのデータ量です。
5120
4608
2944
ハードウェアの価格は、発売から時間が経つにつれて下がります。先ほど私の Tesla K40 で友人に笑われた話をしましたが、その GPU の価格は 500 ドルでした。予算がない場合は、高性能な最新の GPU にこだわる必要はありません。毎年、GPU メーカーは、過去に例を見ない高速な GPU を発売し続けているため、旧モデルの価値が低くなるのと同時に、価格も下がっていきます。例えば、RTX 2080 ですが、この GPU は、1,000 ドル未満にしてはスペックは悪くありません。
幸いなことに、選択肢は他にもあります。
第1に: クラウドリソース
第2に: CPU の最適化
マルチコア CPU の学習を実行できます。複数の CPU コアよりも低性能 GPU の方に利点があることに変わりはありませんが、何もないよりは良いといえます。
転移学習は、一から始める学習よりも時間がかからない傾向にあります。以前の学習で習得した特徴量を活用した上で、新しいデータセットの独自の特徴量を把握できるようにネットワークのその後の特徴量のいくつかに焦点を当てることができます。
最後に:GPU を借りて CPU でテスト
ネットワークの学習に成功した場合、CPU は推論に非常に適しています。GPU に比べて、はるかに速度差を管理しやすくなり、その結果、CPU 上でのこれらのネットワークの推論性能が向上します。