ディープラーニングで「メモリ不足」にならないためには?

ディープラーニングのメモリ不足

昨今、ディープラーニングがさまざまな場所で利用されるようになり、書籍やオンライン教材でディープラーニングを学べるようになりました。ディープラーニングの学習方法について情報は多くとも、いざ学んだことを実践しようとしたときに、コンピュータにどれくらいのスペックが必要なのかは気になるところ。ディープラーニングを実装してみたいけれど、コンピュータのスペックが足りるか、どれくらいのコンピュータを使えば良いのかわからないという人も多いものです。

今回の記事では、ディープラーニングにPCのスペックがどのように関わってくるのか、そのスペックによって何が変わるかについて解説します。大規模なディープラーニングの学習では、GPUのメモリ不足に陥ることがあります。例えば、コンピュータビジョンの重要なタスクであるセグメンテーションや物体検出では、高解像度の入力画像を使われることがあります。

そして、モデルについて高精度の結果を達成するために、複雑なネットワーク設計のネットワークが使われるケースが多くあります。このように入力やモデルが巨大である場合は途中の計算結果全体が巨大になり、学習中のメモリ不足につながります。

ディープラーニングに望ましい環境とは?

ディープラーニングで開発を行う際のハードウェアは、可能ならGPUを搭載したマシンを使うことが望ましいです。ディープラーニングの学習には、大量の行列演算が必要なのでCPUよりもGPUの方が相性が良いからです。

理想としては、GPUを活用して可能であれば64GB、少なくとも32GBを確保することが望ましいと言えます。

ディープラーニングに必要なパソコンのスペック

ここからは、ディープラーニングに必要なパソコンのスペックについて紹介していきます。ディープラーニングを行う際の最優先事項はGPUのメモリ容量です。PCに搭載するメモリとは別に、GPU自体にもメモリが搭載されています。

ディープラーニングの学習においては、このGPUメモリが大きければ大きいほど良いです。個人でディープラーニングを行う場合は6GBから8GBほどあれば足りることが多いですが、企業として研究開発をする場合は32GB〜64GBが必要となってきます。

GPUの活用は必須

ディープラーニングの学習のためには、GPUの活用が必須となっています。なぜGPUが必須かというと、GPUが得意な処理がディープラーニングでの学習に向いているからです。GPUは高速に画像を処理するため、複数の計算を並行して行うことが得意です。

ディープラーニングでは、学習の過程でたくさんの教師データをもとに、非常に多くの学習を行います。これをCPUで処理しようとすると、計算を一つずつしかできないため、処理にとてつもない時間がかかってしまいます。

しかし、GPUで行えば処理を並列計算で行ってくれるため、CPUで計算をした場合に比べて、圧倒的に早く処理することができます。GPUなしの場合と比較してGPUがある場合は計算時間が10分の1ほどになります。GPUを活用することで大幅に学習速度を変えることができるのです。

また、GPUを選ぶときは、できるだけ最新のモデルを選ぶようにしましょう。近年のGPUの性能の向上はめざましく、一つ前の世代で一番高性能のGPUよりも、最新の一番下〜中くらいの位置するモデルの方が高い性能を持っていることも多いです。

そのため、最新モデルの中でも、GPUの性能によって学習の速度が大きく影響されるために、できるだけ上位のモデルを選ぶようにしましょう。そして、基本的にはGPUはメモリが大きければ大きいほど良いです。

メモリにより学習できるネットワーク・データサイズが変わる

では、なぜGPUのメモリが大きければ大きいほど良いか?それには、ディープラーニングの学習の仕組みを考えると良いです。

GPUは、メインメモリに展開した教師データのうちの一部をランダムに抜き取って学習します。ディープラーニングでは、この作業を繰り返し行うことで学習精度を上げていきます。

このときの、GPUが抜き取ることのできる教師データの数の上限がメモリの容量によって変わります。そのため、大規模なネットワークを使う際は、一度の学習である程度の教師データが必要になり、メモリ数が大きいGPUを活用していく必要があるのです。

十分なメモリ数がないGPUを活用する場合は、元々運用しようとしていたネットワークのバッチサイズを減らすなど、ネットワーク自体の改変が求められることがあり、精度が低下する可能性が出てきてしまいます。

ディープラーニングでのメモリ不足を回避する方法

ディープラーニングは大規模な計算が必要であるため、メモリ不足になってしまうケースがあります。ここからは、メモリ不足を回避する方法について紹介していきます。

複数のGPUを利用する

まずは、GPUを複数利用することでメモリ不足を行うという手法があります。複数搭載することで、学習時間を短縮することができます。単純にGPUを2倍に増やせばメモリは2倍に増えるため、メモリ不足が解消されます。

再計算を行う

再計算を行うことで計算量を減らすというアプローチもあります。

ディープラーニングを行う際の計算グラフは、勾配計算のための実行手順を与えてくれます。しかし、これをそのまま実行すると、順伝播部分での計算結果は、逆伝播時に基本的にすべて必要となるため、単純に中間結果もすべて記憶しておくと大規模な学習ではメモリが足りなくなることがあります。

しかし、順伝播ですべてを記憶せずに一部の中間結果を破棄しても、残りの中間結果からもう一度順方向に計算して必要な中間結果を復元さえできれば、逆伝播時はに勾配計算を行うことができます。これにより、ピーク時のメモリ消費を下げることができます。

ディープラーニング向けのパソコンを選ぶ際のチェックポイント

ディープラーニング用のPC(パソコン)選びの際は、スペックが一番高いものを使えば問題なく使えるかもしれませんが、必要ないところまでスペックを上げてしまうと、無駄になってしまうことも多いです。では、どういった点に注意してPCを選べば良いでしょうか?

GPU搭載かどうか

ディープラーニング向けのPCを選ぶ際は、GPUが必須です。確かに、GPUがなくてもPCは動作します。オフィスやウェブブラウザーを使うだけであれば、GPUなしのPCであっても問題なく使えます。

しかし、ディープラーニングにPCを使っていきたいのであれば、GPU搭載かどうかは必要不可欠な最重要な要素です。

GPU搭載のコンピュータは、そうでないコンピュータよりも割高であるため、できれば購入したくないという方もいるかもしれません。ただ、ディープラーニングを活用する際のスピードや快適さがCPUのみのコンピュータとは段違いであるため、必ずGPU搭載のコンピュータを活用するようにしましょう。

CPU

GPUが必須であると説明しましたが、CPUもディープラーニングに影響します。

まず、CPUの世代がGPUの性能に影響します。例えば、古い世代のCPUを使っていた場合は、最新のGPUの性能を最大まで引き出すことができず、同じGPUを使っていても倍近い性能差が出てしまうことがあります。そのため、CPUをなるべく新しいものを使うようにしましょう。

もう一つは、CPUで前処理を行う場合にも影響があります。ディープラーニングの場合は、学習を正しく行うために、GPUで学習を行う前に学習用のデータを編集(前処理)することが多くあります。前処理のような学習以外の処理の場合はCPUを使うことが多いため、GPUの計算能力が高くても、CPUの計算が遅いと次のGPUの学習ができなくなります。よって、結果として学習速度が遅くなってしまうのです。

前処理の際はGPUのような並列化ができないことが多いため、シングルスレッドの性能が重要になります。コア数よりも周波数を重視しましょう。

GPUメモリ

GPUには、GPU専用のメモリが搭載されています。GPUメモリは、学習するネットワークのサイズに影響します。複雑な学習モデルを試したい場合は、GPUメモリについても考慮する必要があります。

ここまで聞くと、「GPUメモリを一番重要視すれば良いのでは?」と考えるかもしれませんね。しかし、メインメモリをいくら大きくしても、実際には学習はGPUで行うため学習速度が速くなることはありません。学習するネットワークのサイズと比較して大きくしすぎてしまうと、メインメモリは無駄になってしまうため注意してください。

メインメモリ

ディープラーニングを使って学習を行う際には、学習用のデータをメモリ上に展開して学習を行っていきます。そのため、学習に使うデータの容量以上のメモリ容量が必要です。

メインメモリもGPUメモリ同様に、不足するとそもそも学習自体ができなくなってしまいます。大きなデータを学習する場合は、メモリが大きいPCを選択するようにしましょう。

データ保存の方法

一般的なPCでは、HDDを活用することでデータを保存をしておくための部品をSSDというものに交換することで高速化できます。しかし、ディープラーニングの学習においては、GPUなどの計算にかかる比重が大きいため、あまり優先度は高くないと言えます。自分の扱うデータサイズの少なくとも3〜4倍の容量のHDDを選ぶことをおすすめします。

クラウドGPUの利用も検討しよう

これまでお伝えしてきたように、ディープラーニング用のコンピュータ選びは、メモリ数やGPUメモリなどの複数の要素を考慮しつつ、これから行おうとしている学習に適したスペックのPCを選ぶ必要があります。そのため、何を選んだら良いか判断が難しいと思った方も少なくないはずです。

そこで、GPU付きのハードウェアのPCだけではなく、「クラウド型のGPU」を利用することも検討してみると良いでしょう。クラウド型のGPUの特徴には、次のような点が挙げられます。

  • 低コストで迅速な運用ができる
  • 必要なときに必要な分だけGPUリソースを活用できる
  • オフィスサーバーが不要

低コストで迅速な運用ができる

まず、クラウド型のGPUは、オンプレミスのGPUと比較して低コストでの運用が期待できます。例えば、オンプレミスGPUは、導入のための初期費用や環境の移行のためにコストや時間がかかってしまいます。

一方で、クラウド型のGPUであれば、必要なときに必要な分だけGPUのリソースを確保できます。これによって、導入のために初期費用を抑えられると同時に、即日利用ができるなど、スピードのある運用ができます。

必要なときに必要な分だけGPUリソースを活用できる

GPUの性能を選ぶ際には、活用するデータ量はモデルサイズに応じてコンピュータのスペックを選択していく必要がありますが、データ量やモデルサイズは案件によって変わる可能性があります。

一方、クラウド型であれば、必要な分だけGPUのリソースを活用できるため、このようなデータ量やモデルサイズの変更にも柔軟に対応できます。このように、クラウドGPUは予算や場所の制約が少ないです。

オフィスサーバーが不要

クラウドGPUの登場によって、AIなどの最新テクノロジーを利用しやすい環境になりました。初期投資や環境のアップデートが進められなかった現場でも、クラウドであれば最低限のライセンス料金で利用が可能になります。

当社MorgenrotのクラウドGPU「M:CPP」は、シンプルでカスタマイズが自由にできます。

MCPP

M:CPPを活用すれば、「大規模な開発を進めていく前に、一度コストを抑えてテストを行いたい」「オンプレミスのGPUの維持管理コスト負担が気になる」など、GPUの運用に関する課題を一気に解決することが可能です。大手GPUクラウドと比べても低価格であるため、費用に悩んでいる場合も、M:CPPであれば案件によって最適化されたサービスを活用し、さらなるコスト削減を期待できるでしょう。

M:CPPに関しては、こちらを参考にしてみてください

まとめ

ディープラーニングに必要な環境や、考慮すべきPCのスペックについて解説しました。

ディープラーニングに必要なメモリは、個人でディープラーニングを行う場合は6GBから8GBくらいあれば足りることが多いですが、企業として研究開発をする場合は32GB〜64GBが必要となってきます。

また、PC スペックは「GPU搭載か」「GPUメモリ」「CPU」「メインメモリ」「データ保存方法」などを考慮するようにしてください。

必要なデータ量やモデルのサイズは案件によって変わる可能性があるため、その場合に備えて必要なぶんだけGPUのリソースを活用できるクラウド型のGPUの活用についても検討しましょう。クラウド型GPUにご興味を持った方は、M:CPPの利用を検討してみてください。