ディープラーニングに関する

よくある質問と回答

 

作成者 : Johanna Pingel

GPU のすべて

この記事では、毎回 1 つのトピックを取り上げて、その背景について解説します。また、MATLAB® コミュニティからのいくつかの質問にも回答します。


今回の記事のトピックは、ディープラーニングのための GPUの概要を説明し、その後、次の 3 つの質問に回答します。

1. 「学習の高速化」とは、どの程度の高速化を意味するのですか。

2. MATLAB でニューラル ネットワークを学習させるためには、(超) 高速の GPU を購入する必要がありますか。

3. GPU を利用せずにディープラーニングを行うには、どのような方法がありますか。

GPU  (主に NVIDIA® GPU) は、2010 年代のディープラーニングの大熱狂を後押しするきっかけとなりました。膨大な量のデータ (数千または数百万のデータサンプルなど) や複雑なネットワーク アーキテクチャを扱う場合、GPU を利用してモデルの学習にかかる処理時間を大幅に短縮することができます。GPU がなければ、今日のようなディープラーニング ソリューションの多くは実現できなかったでしょう。

 

GPU が重要であることは理解しましたが、そもそも GPU とはどのようなものなのでしょうか。

 

GPU (グラフィックス プロセッシング ユニット) は、その名前のとおり、元々はグラフィックス用に開発されたものです。GPU は、多くの計算を並列的に行うことができるため、ピクセル操作のような大規模な単純作業を処理するのに適しています。

 

GPU の主な用途は画像分類ですが、信号データにもこの高速計算のメリットがあります。多くの場合、信号を 3D 時間周波数表現に変換するデータ前処理技術を使用して、信号から「画像」が作成されます (
MATLAB による信号処理向けディープラーニング
についての詳細はこちら)。これらの画像は、作成された後、ディープラーニングの学習に使用されます。ここで、特徴量は、生の信号ではなく、時間周波数マップ (画像) から直接学習されます。さらに高速化するために、GPU Coder™ を使用して、CUDA コードを作成することもできます。このコードは、NVIDIA GPU 上で直接実行されます。

 

一般的に強力なコアが 4 つまたは 8 つある CPU とは異なり、GPU は、数百個の小さなコアを並列に動作させることができます。それぞれの GPU コアで単純な計算を行うことができますが、コア単体での力は限られています。GPU の力は、畳み込みや ReLU、プーリングといった、ディープラーニングの計算にすべての GPU コアを投入するという力技によって発揮されます。

 

詳細については、
MATLAB の GPU コンピューティングのサポート
をご覧ください。続けて、質問を見ていきましょう。

質問 1

GPU を使用するとディープラーニングの学習を高速化できるという宣伝を度々見かけますが、詳細な情報はほとんど記載されていません。実際に高速化できるという確信がなければ、GPU の予算について議論することは時間の無駄になります。どの程度の高速化が期待できるのでしょうか。

そうですね。これは、状況次第ですが、実現できる高速化の程度に影響を与える要因はいくつかあります。
  • 入力データサイズが大きい: データセットが複雑であればあるほど、GPU を利用して学習を高速化できます。
  • ネットワーク構造が複雑: 畳み込みや計算量が増えるほど時間がかかります。
  • ハードウェア: 最初に使用していたハードウェアと、代わりに使用するハードウェアが関係します。


GPU によって学習を高速化することができない状況はほとんどありませんが、1D の入力データやベクトルデータ、小規模な入力データなど、GPU を使うまでもないといえるケースはあります。ディープラーニングの単純な
分類の例
を見てみましょう。この例では、画像サイズは小さく (28x28px)、ネットワークはわずか数層のみです。このデータセットでは、CPU で学習させても数分しかかからないため、GPU を使ってもそれほど変わりません。


豆知識: GPU が搭載されている場合は、MATLAB 関数 
gputimeit
 を使用して、GPU 上の関数の平均実行時間を測定できます。また、この
ブログ記事
は 2017 年に公開されたものですが、GPU 速度の測定や、ディープラーニングを対象とした CPU と GPU の比較について、現在でも最適なリソースです。

これはすぐにご理解いただけると思います。入力サイズを減らし、(層の数が少ない状態で) 少量の計算をネットワークで実行すると、GPU で並列化と高速化を実現できる機会はそれほど多くはありません。


私からのアドバイスは、GPU を借りられるかどうかを確認するか、クラウドベースの GPU リソースをいくつか確保して、学習時間の差を測定していただきたいということです。いずれにしても、「予期される」または「予測される」メリットよりも、実際の測定値の方が議論の上では説得力があるといえます。


最後に、CPU が何年も同じままではないように、新しい GPU モデルも前のモデルよりも高速になっているということも覚えておいてください。
NVIDIA のパフォーマンスデータをご覧ください。

質問 2

私は MATLAB ユーザーで、ニューラル ネットワークを学習させようと考えています。高速な GPU を購入する必要がありますか。

この質問では、「必要」と「高速」の 2 つの言葉に注目したいと思います。必要という言葉は必要不可欠ということを示していると思われますが、この答えは、状況により異なります。短納期でニューラル ネットワークを運用環境で稼働させることを管理職から要求されているような場合は、高速な GPU が必要です。高速な GPU がなくても学習はうまくいくでしょうか。最終的には学習は完了します。つまり、すべてはあなた次第です。

 

次に、「高速な」 GPU は必要でしょうか。「必要」と同様に、こちらも実際の状況によりますが、一旦専門的な内容は抜きにして、時間的な制約があると仮定し、この質問「必要な GPU を判断するにはどうすればいいか」を考えてみましょう。

 

一般的なコンピューター ハードウェアと同様に GPU は時間とともに性能は見劣りしていきます。モデルを学習させる際に、現在の研究で何が使用されているかを把握しておく必要があります。先ほどの質問と同様、次の質問に対する回答によって、結果が異なってくる可能性があります。

  • データ量はどのくらいか。
  • 学習のクラス数はどのくらいか。
  • どのような構成のネットワークか。

 

お使いのラップトップコンピューターに GPU が搭載されていても、ディープラーニングに必要な計算を処理できるとは限りません。

 

少し前に、私は我慢の限界に達したことがありました。ディープラーニング モデルを実行しようとしたところ、気が遠くなるような時間がかかったのです。開発者の友人に会い、この問題について彼の知恵を借りようと思いました。私たちは、ネットワークの複雑度 (ResNet-Inception に基づく)、画像の数 (数十万枚)、クラスの数 (約 2,000 枚) を調べましたが、学習に数時間以上かかる理由に辿り着けませんでした。

 

そして、ハードウェアの話になりました。私が Tesla K40 circa 2014 を使用していると話すと、彼は笑い始めました。その後、ハードウェアの話で私をからかうのに飽きた彼は、彼の Titan X を使用するよう提案してくれました。その結果、速度は向上し、再び和やかな雰囲気になりました。この話の教訓は、ハードウェアの進歩は非常に早いということです。Titan X で私を窮地から救ってくれた友人は、真の友人であるといえるでしょう。

 

他にも、実際の例を示しておきましょう。私の同僚の Heather Gorr (
@HeatherGorr
) は、ドキュメンテーションに記載されているこのビデオの分類の
を実行しました。2 つの異なるハードウェア設定で同じデータとネットワークを使用した場合、処理時間にいくつかの有意差が生じました。
 
体験談の詳細はこちらをご覧ください

Windows ラップトップ コンピューター (GPU 搭載)

NVIDIA Quadro M2200


学習のプロット有効 (モニタリングおよびスクリーンショット用)


元のモデル (50 クラス): 12.6 時間 精度: 66.7%

小規模モデル (8 クラス): 90 分 精度: 83.16%

Linux デスクトップ コンピューター (GPU 搭載)

NVIDIA TITAN XP


学習のプロット有効 (モニタリングおよびスクリーンショット用)


元のモデル (50 クラス): 2.7 時間 精度: 67.8%

小規模モデル (8 クラス): 26 分 29 秒 精度: 80%

注: どちらのテストでも、学習のモニタリングを目的とするプロットが有効になっていました。ここでの問題は、クラスの数ではなく(使用するクラスが少ないと、使用される入力サンプル数も少なくなる)学習時間に目に見える影響を及ぼす可能性があるのは各クラスのデータ量です。



非常に高価なものからそうでないものまで、標準的なスペックの GPU をいくつかまとめてみました。
 
Quadro GV100
Titan RTX
GeForce RTX 2080
CUDA 並列処理コア

5120

4608

2944

GPU メモリ
HBM2 (32 GB)
G5X (24 GB)
GDDR6 (8 GB)
メモリ帯域幅
870 GB/秒
672 GB/秒
448 GB/秒
価格
8,999 ドル
2,499 ドル
799 ドル
注: 上記の価格は 2020 年 4 月 2 日時点のものであり、変更される場合があります。


ハードウェアの価格は、発売から時間が経つにつれて下がります。先ほど私の Tesla K40 で友人に笑われた話をしましたが、その GPU の価格は 500 ドルでした。予算がない場合は、高性能な最新の GPU にこだわる必要はありません。毎年、GPU メーカーは、過去に例を見ない高速な GPU を発売し続けているため、旧モデルの価値が低くなるのと同時に、価格も下がっていきます。例えば、RTX 2080 ですが、この GPU は、1,000 ドル未満にしてはスペックは悪くありません。


質問 3

GPU を入手できません。何か方法はありますか。

幸いなことに、選択肢は他にもあります。


第1に: クラウドリソース


たとえば、NVIDIA GPU Cloud (NGC) やクラウドインスタンスでは、4 個または 8 個以上の GPU を使用してクラウドで使用して、複数の反復処理を並行実行することができ、複数の GPU に学習を分散することもできます。これにより、高速化を実現できます。また、GPU を購入するのではなくクラウドリソースを使用することで、時間が経過しても GPU が時代遅れになったり見劣りすることはありません。クラウドは無料ではないため、初期費用は少なくて済みますが、料金がかかる点は変わりません。

第2に: CPU の最適化

マルチコア CPU の学習を実行できます。複数の CPU コアよりも低性能 GPU の方に利点があることに変わりはありませんが、何もないよりは良いといえます。


さらに、アルゴリズムを切り替えることもきます。学習の代わりに、ネットワークから「アクティベーション」を行うことができます。Gabriel Ha は、これについて、「MATLAB を使用したニューラル ネットワークによる特徴抽出」のビデオで語っています。アクティベーションの使用
に従って進めることもできます。


転移学習は、一から始める学習よりも時間がかからない傾向にあります。以前の学習で習得した特徴量を活用した上で、新しいデータセットの独自の特徴量を把握できるようにネットワークのその後の特徴量のいくつかに焦点を当てることができます。

最後に:GPU を借りて CPU でテスト


ネットワークの学習に成功した場合、CPU は推論に非常に適しています。GPU に比べて、はるかに速度差を管理しやすくなり、その結果、CPU 上でのこれらのネットワークの推論性能が向上します。

今回はこれで終わりです。今回の GPU に関するコラムはお楽しみいただけたでしょうか。ディープラーニングについて、他にも取り上げてほしい内容がありましたら、以下のフォームからトピックやご質問をお送りください。

ご提案いただきありがとうございます。