「新時代のAI/MLのためのソフトウェア/ハードウェアアーキテクチャをどのように共同設計するか?」
「美とファッションのエキスパートによるナチュラルな美しさの秘訣」
効率的なAI / MLのアーキテクチャの設計の包括的な視点
コンピュータビジョン、自然言語処理などの最先端の生成AIテクノロジーは、安定したディフュージョン、ニューラルレンダリング(NeRF)、テキストから3D、大規模言語モデル(LLM)などの革新的なモデルアーキテクチャにおける研究のブレークスルーを含め、最近急速に発展しています。これらの先進的なテクノロジーには、より複雑なAIネットワークが必要であり、数桁以上の計算リソースとエネルギー効率のあるアーキテクチャを要求します。
上記のアーキテクチャの要件を満たすためには、ハードウェア(HW)とソフトウェア(SW)/アルゴリズム設計のギャップを埋めることが不可欠です。共同設計には、HWとSWのコンポーネントの設計、テスト、改良を反復的に行うプロセスが含まれます。ただし、従来はSWとHWが独立して設計されており、SWプログラマーは実行するHWを考える必要はほとんどありませんし、HWは通常、さまざまなSWをサポートするように設計されています。効率的にAIワークロードをサポートするためには、SW / HW共同設計に関する非常に限られた研究があります。
限られた計算リソースの最小限の利用を図るために、効率的な「SW / アルゴリズムに注意した」HWと「HWを意識した」SW / アルゴリズムを設計する必要があります。どのようにすればよいのでしょうか?以下は、AIのために新しいHW / SW機能を設計する際の参考として使用できる進化した方法論です。
1. 代理AIワークロードの識別。
分析を開始するには、代理AIモデルを用意し、さらに調査するための優先リストを定義する必要があります。最新の研究論文(CVPR、Siggraph、ビッグテックの研究所など)やオープンソースコード、顧客のフィードバックや要望、業界のトレンドなど、参考にできる複数のリソースがあります。専門家の判断に基づいて、いくつかの代表的なモデルを選び出すことが重要です。このステップは、将来のアーキテクチャの設計に使用するためにそれらを使用しています。
- (Donna data no shigoto demo ukeru to iu koto wa, kariara toshite saiaku no sentaku deari, kawari ni nani o subeki ka)
- RAGの回答を向上させる:自己デバッグ技術と認知負荷の軽減
- スタートアップの創業者が最適なインキュベーターを見つけるのを支援するマッチングツールの構築:エンド・トゥ・エンドのフリーランスプロジェクト
2. 徹底的なモデルアーキテクチャ分析。
モデルアーキテクチャを包括的に調査し、その機能、イノベーションを理解し、できるだけ詳細に分解してください。現在のテックスタックではサポートされていない新しいオペレーターはありますか?計算集約型のレイヤーはどこにありますか?データ転送(メモリ)が重いモデルですか?必要なデータ型と、精度を犠牲にすることなく適用できる量子化技術の種類は何ですか?モデルのどの部分がHWで高速化でき、どこに潜在的なパフォーマンスの最適化の余地があるのでしょうか?
たとえば、ニューラルレンダリングでは、モデルが描画と計算(行列乗算)の両方を並行して実行する必要があります。現在のSWスタックが描画/計算を同時にサポートしているかどうかを確認する必要があります。LLMsでは、重要なキーバリュー(KV)キャッシュサイズは入力シーケンスの長さに比例して増加しています。大規模なKVキャッシュを処理するためには、メモリ要件と潜在的なデータ転送/メモリ階層の最適化を理解することが重要です。
3. SWの有効化とプロトタイピング
ステップ2で特定したモデルのオープンソースコードをダウンロードし、『ターゲット』のSWフレームワーク/HWで実行します。このステップは、特に新しい/破壊的なモデルには直感的ではありません。目標はパフォーマンス分析のために作動するソリューションを実現することであり、この段階では製品品質のコードを提供する必要はありません。パフォーマンスチューニングを行わないSWの修正は、ステップ4に進むために許容されます。主要なステップの1つは、開発フレームワーク(Pytorch)で事前トレーニングされたモデルを、ターゲットとなる新しいフレームワークで必要な新しい形式に変換することです。
torch.onnx.export(model, dummy_input, "resnet50.onnx", verbose=False, input_names=input_names, outputnames=output_names, export_params=True)
ただし、重要なサポートの努力が必要な場合もよくあります。たとえば、微分可能なレンダリングモデルを実行するためには、autogradのサポートが必要です。新しいフレームワークではこの機能がまだ準備されていない可能性が非常に高く、開発チームに数ヶ月の努力を必要とします。また、LLMのGPTQ量子化なども、初期のインファレンスフレームワークではサポートされていない可能性があります。エンジニアリングチームを待つ代わりに、アーキテクトはNvidiaシステムでワークロードを実行し、パフォーマンス分析を行うことができます。Nvidiaは学術開発のためのHWの選択肢です。これにより、SWの有効化中に観察されるギャップに基づいたSW要件のリストを作成することができます。
4. パフォーマンス分析とアーキテクチャ革新。
AIモデルのパフォーマンスを判断するための数多くのメトリクスがあります。以下に主要なものを考慮する必要があります。
4.1 FLOPs(浮動小数点演算)およびMACs(乗算-加算演算)。
これらのメトリクスは、ディープラーニングモデルの計算量を計算するためによく使用されます。必要な算術演算の数を簡単に理解するためのクイックで簡単な方法を提供します。FLOPsは、論文の分析、Vtuneレポート、またはflops-counter.pytorchやpytorch-OpCounterなどのツールを使用して計算することができます。
4.2 メモリフットプリントと帯域幅(BW)
メモリフットプリントは主に重み(ネットワークパラメータ)と入力データで構成されます。たとえば、FP16のLlamaモデルで13Bのパラメータを持つ場合、約13 * 2(FP16=2バイト)= 26GBのメモリを消費します(入力は無視できるほど重みがより多くのスペースを占めます)。LLMのもう一つの重要な要素はKVキャッシュのサイズです。KVキャッシュは総メモリの30%を占有し、動的です(ステップ2の画像を参照)。大きなモデルは通常、メモリバウンドとなり、速度はシステムメモリからローカルメモリ、またはローカルメモリからローカルキャッシュ/レジスタにデータを移動する速さに依存します。利用可能なメモリ帯域幅はピーク計算TOPSよりも推論レイテンシ(LLMのトークン生成時間)を予測する際にははるかに優れた指標です。1つのパフォーマンス指標は、メモリ帯域幅利用率(MBU)であり、実際のBW/ピークBWと定義されます。理想的には、MBUが100%に近い場合、メモリBWが完全に利用されていることを示します。
メモリは十分でない!
メモリはボトルネックとなるため、高度なモデル圧縮やメモリ/キャッシュ技術の探索が必要です。以下にいくつかの先駆的な作業をリストアップします:
- MemGPT:高速で小さいRAMと大きくて遅いストレージメモリの組み合わせなど、異なるレベルのメモリ階層リソースを利用します。情報は明示的にそれらの間で転送されなければなりません。[2]
- 低精度量子化(GPTQ、AWQ、GGML)によるモデルのメモリフットプリントの削減
- インメモリコンピューティング(PIM):データの移動の必要性を除去することにより、電力を削減しパフォーマンスを向上させます。
4.3 レイテンシ/スループット。
コンピュータビジョンでは、レイテンシは1つのフレームを生成するためにかかる時間です。LLMのコンテキストでは、最初のトークンと次のトークン生成間の時間となります。スループットは、1秒あたりのトークン/フレームの数です。レイテンシは、AIシステムのパフォーマンスを測定するための重要なメトリクスであり、SW/HWのパフォーマンスの複合要因です。以下に考慮すべきさまざまな最適化戦略があります:
- 正規化、ポイントワイズ演算、SoftMax、およびReLUなどの帯域幅制約のある操作の最適化。正規化とポイントワイズ演算は、マトリックス乗算に比べてランタイムが約40%多く、マトリックス乗算に対してFLOPSは250倍と700倍少ない結果しか得られません。この問題を解決するために、カーネルフュージョンを利用して複数のオペレータを結合し、データ転送コストを節約したり、高価なオペレータ(softmax)を軽量なもの(ReLU)に置き換えたりすることができます。
- 専門のHWアーキテクチャ。特殊ハードウェア(AVX、GPU、TPU、NPU)の統合は、リソースに制約のあるデバイスでリアルタイム処理を必要とするアプリケーションにとって特に重要で、大幅な高速化とエネルギー節約をもたらすことができます。たとえば、Intel AVX命令は、ネイティブのPythonコードよりも最大で60,000倍の高速化を実現することができます。
Nvidiaグラフィックス(V100、A100、H100など)のテンソルコアは、1クロックサイクルで2つのFP16および/またはFP32行列を乗算および加算することができ、Cudaコアは1サイクルごとに1つの操作のみ実行することができます。ただし、テンソルコアの利用率は非常に低く(エンドツーエンドトレーニングの場合は3〜9%)、エネルギーコストが高くパフォーマンスが低下します。テンソリック配列の利用率を改善するための研究が活発に行われています(FlexSA、多方向SAなど)。これについては、次のシリーズの投稿で詳しく説明します。
また、大規模なAIモデルではメモリとデータトラフィックが常にボトルネックとなるため、より大きく効率的なチップ上のメモリを考慮した高度なアーキテクチャの探索が重要です。その1つの例はCerebrasコアメモリデザインで、メモリは個々にコアごとにアドレス指定されます。
- その他の最適化方法も多数あります:並列処理、LLMのキャッシュ量子化、疎な活性化、エンドツーエンドの最適化。これらについては、今後の投稿で詳しく説明します。
4.4 電力とエネルギー効率
電力は、特に低電力ユーザーシナリオにおいて注意を払う必要があるもう一つの重要な要素です。パフォーマンスと電力の間には常にトレードオフがあります。下記の例からも分かるように、メモリアクセス操作には計算操作よりも桁違いに多くのエネルギーが必要です。電力を節約するためには、メモリ転送の削減が強く求められます。
結論
以上は、AIモデルのパフォーマンスを測定するために測定する必要がある主要な指標です。Vtune、Nsightなどのパフォーマンスプロファイラーや他のモデリングツールを使用することで、アーキテクトはパフォーマンスの詳細レベル(レイヤーごとの計算/メモリトラフィック、計算効率、BW利用率など)にまで深く潜ることができ、トレースを活用してホットスポットを特定することができます。ソフトウェアの非効率性により、パフォーマンスが予想外に低下することが非常に多いです。プロキシモデルに基づいてAI SW/HWを共同設計するためには、反復的なプロセスです。
新興のAIモデルのアーキテクチャを徹底的に分析するための共同作業です。調査サイクルはかなり長くなることがあり、製品のスケジュールと分析の深さの間には常にトレードオフがあります。効率的なAIソリューションを設計するためには、HW、SW、AI技術に関する高度な専門知識が同時に必要です。
参考文献
[1] Woosuk Kwon、Zhuohan Li、Siyuan Zhuang、Ying Sheng、Lianmin Zheng、Cody Hao Yu、Joseph E. Gonzalez、Hao Zhang、Ion Stoica、Efficient Memory Management for Large Language Model Serving with Paged Attention、2023年、arxiv
[2] Charles Packer、Vivian Fang、Shishir G. Patil、Kevin Lin、Sarah Wooders、Joseph E. Gonzalez、MemGPT: Towards LLMs as Operating Systems、2023年、arxiv
[3] Charles Leiserson、Neil Thompson、Joel Emer、Bradley Kuszmaul、Butler Lampson、Daniel Sanchez、およびTao Schardl、「There’s plenty of room at the Top: What will drive computer performance after Moore’s law?」、2020年、Science
[4] Song Han、Jeff Pool、John Tran、William J. Dally、Learning both Weights and Connections for Efficient Neural Networks、2015年、arxiv
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles