AIの重要性:メモリとストレージの観点からデータインテリジェンスの核心に迫る
AIや機械学習システムのインフラについて調べていくと、基礎となるストレージやメモリを検討するパフォーマンスデータが奇妙なほど不足していることに気が付きました。代わりに、利用可能なさまざまな計算リソース(GPU、CPU、FPGA、TPUなど)が話題の中心となっています。
私自身、関連するソリューションエンジニアリングの検証と情報の提供を通じて、マイクロンのストレージ製品を主に支援しているため、最初はこのことが気掛かりでした。しかし、実験を始めるうちに、コンピューティング以外のインフラを検討するパフォーマンスデータがないのは、必要性がないからではなく、問題として無視されているだけということが分かりました。
ここで、背景を簡単に説明するためにいくつかのデータをご紹介します。
このグラフは、ある特定のモデルとデータセットに対し、さまざまなAIトレーニングシステムのパフォーマンスを示しています。(具体的には、Imagenetデータセット上で学習されるResNet-50画像分類モデルであり、約145GBサイズの120万の画像を含むデータセットです。)
遡ること2014年、AIトレーニングシステムのストレージは(当時としては)最上位の8倍速GPUに供給するために、約50MB/秒のディスクスループットしか必要としませんでした。すべてのワークロードにSSDを使ってほしいのは山々ですが、このユースケースのためにフラッシュドライブが必要だと言うには無理があるでしょう。50MB/秒なら楽に扱えます。
GPUの世代がK80からP100に進むと、ストレージ要件は50MB/秒から150MB/秒へと大幅に増加しました。この増加幅は大きなものでしたが、それでも心配する必要はありませんでした。HDDベースのシステムにとって150MB/秒はそれなりの量ですが、本質的なアーキテクチャー上の問題は起こしません。
しかし、最新の世代は(ソフトウェアのさらなる最適化とともに)新たな領域に突入しています。同じデータセットを処理する同じモデル(ResNet-50)は、GPUを最大効率で稼働し続けるために、ほぼギガバイト/秒のストレージスループットを必要とします。HDDベースのシステムでは、このような要件を満たすのが困難です。
そのため今では、AIシステムを語る際になぜストレージパフォーマンスを検討してこなかったのか、なんとなく分かります。最近までその必要がなかったのです。さらに、この傾向が続くとすれば(そう考えるのが自然です)、今後の未来は次世代GPUの要件を管理できるストレージシステムを設計する能力にかかっているでしょう。
さて、ストレージのパフォーマンスが重要であることはご理解頂いたと思いますが、どのくらい重要なのでしょう? AIシステムのストレージ(とメモリ)を不適切に設計した場合、実際にどのような影響があるのでしょうか?
これらの疑問にお答えするために、いくつかの追加実験を試してこの問題に焦点を当ててみました。次のデータは、上記と同じモデルとデータセット(Imagenetデータセットに対して学習させたResnet-50)を使用して実行したものです。ハードウェアは、8倍速のNvidia® V100 GPUを搭載したデュアルIntel® Xeon 8180Mサーバーです。各GPUは32GBのメモリ、システムは3TBのメモリを有し、ストレージは8倍速3.2TBのMicron 9200 NVMe™ SSDをRAID10で使用しました。
メモリ量とディスクスループットという2つの変数の影響をテストしました。これらの変数はそれぞれ、適切なdockerコンテナのパラメータ(mem_limitとdevice_read_bps)を変更することで調整しました。
メモリに関しては、コンテナは利用可能なすべてのメモリ(3TB)、もしくはシステムが定常状態になった後ファイルシステムのキャッシュにデータセットの半分だけが収まるような少量のメモリ(128GB)のどちらかを搭載しました。
またストレージについて、コンテナはNVMeストレージに対し無制限アクセスを持つか、500MB/秒のスループットに制限されるかのどちらかにしました。この数値は、観測されたスループットの最大値(1.2GB/秒)のおよそ半分であり、さまざまなクラウドプロバイダーによるGPUインスタンスに利用可能なディスクの種類に対応するよう設定されました。
この結果は驚くようなものではありません。AIシステムのストレージがGPUに対応できず、データセットをキャッシュするのに十分なメモリがない場合、システムのパフォーマンスは著しく低下します。幸い、これは解決できる問題です。大容量のメモリと非常に高速なディスクがあればAIシステムから最大限の効率を引き出すことができますが、高速ディスクや高密度メモリを用意するだけでもそれなりの効果は得られます。
ここでお話しする最後の実験は、GPUメモリが学習のパフォーマンスに与える影響に関するものです。これらのテストは上記と同じハードウェア(8倍速 v100 GPU)で実行したのですが、バッチサイズ(処理のために一度にGPUに送られる画像の数)とアルゴリズムの「複雑さ」(ResNetモデルのレイヤー数)を増減してみました。
それぞれの線は、特定のモデルの1秒あたりの学習スループットを画像数で表しています。バッチサイズが大きくなりすぎると、メモリが不足し、アプリケーションがクラッシュします(上のグラフで線が終わっています)。
このグラフから読み取れることがいくつかあります。まず一番分かりやすいのは、バッチサイズが大きくなるほどスループットが向上する点です。このグラフは学習について表したものですが、推論でも同じ動作が見られます。バッチは大きいほどスループットを高めます。
次に分かったことは、最大バッチサイズはモデルの複雑さに依存する点です。モデルが大きく複雑になるにつれて、モデルの重みがGPUのメモリ領域を占め、データのための領域が少なくなります。具体的なユースケースによりますが、モデルの複雑性を十分に上げることで、モデルをバッチサイズ1に制限しても、全く学習できない形にすることは可能です。これは、今回使用したGPUよりも一般的にメモリ容量がはるかに小さいSmart EdgeやIoTデバイスでモデルを展開する場合、特に顕著になります。
これらをまとめると、AIシステムを設計する際、3つの主要な要素を考慮する必要があります。
- ストレージのパフォーマンス
- システムメモリ密度
- GPU/アクセラレーターメモリ密度
- ストレージのパフォーマンスとシステムメモリ密度は、システムのパフォーマンスを最大限引き出すために極めて重要であり、GPU/アクセラレーターメモリは、パフォーマンスと未来のモデル開発を可能にするために重要となります。
詳細はこちら:特定のAIと機械学習モデルに合わせてメモリとストレージを変更する方法について詳しく見る。ウェビナーをオンデマンドで視聴:「AIの重要性:メモリとストレージの観点からデータインテリジェンスの核心に迫る」では、私Forrester®のクリス・ガードナーとマイクロンのコンピューティング&ネットワーキング部門のエリック・ブースが登場しています。