Buddy CompilerのエンドツーエンドLLaMA2-7B推論例がbuddy-mlirリポジトリ[1]のメインラインにマージされました。 Buddy Compiler のフロントエンドに TorchDynamo 用のサードパーティ コンパイラを実装し、 MLIR と PyTorch のコンパイル エコシステムを組み合わせました。 現在、フロントエンドは LLaMA 計算グラフをカバーできます。MLIR に変換した後、いくつかのベクトル化と並列最適化を統合し、AVX512 プラットフォームでテストしました。推論プロセス全体は実行できますが、依然として多くの最適化が必要です。関連するリンクと現在のステータスは次のとおりです。
概要大規模 AI モデルの爆発的な増加により、ソフトウェアとハードウェアの設計に新たな手法と機会がもたらされました。モデルの規模、種類、モダリティが拡大し、多様化するにつれて、単一のソフトウェアおよびハードウェア テクノロジ スタックでさまざまなシナリオをカバーする能力はますます制限されるようになります。この傾向により、ソフトウェアとハードウェアのエコシステムの重要性についての理解も深まりました。私の意見では、エコシステム全体にとって最も重要な 3 つの設計原則は次のとおりです (最も重要なものから最も重要でないものの順)。
上記の考慮に基づいて、ソフトウェアとハードウェアの共同設計エコシステムの実現に特化した Buddy Compiler を作成しました。私たちの目標は、ドメイン固有プログラミング言語 (DSL) からドメイン固有ハードウェア アーキテクチャ (DSA) へのコンパイル フローと共同設計を可能にすることです。 この記事では、Buddy Compiler を使用して LLaMA 2 のエンドツーエンドの推論を完了する方法を紹介します。同時に、Buddy Compiler の全体的な設計コンセプトと将来の計画も共有します。具体的な構築プロセスについては、こちらのドキュメント[4]を参照してください(大規模なモデルを構築するには、多くの忍耐と優れたパフォーマンスを持つマシンが必要です)。PyTorchとMLIRに基づくLLaMAのエンドツーエンドの推論パスを開設しましたが、完全なパフォーマンス分析と最適化はまだ実施していません。 現在、行列乗算にはベクトル化の最適化、ループには並列計算の最適化のみを適用しています。 最適化とチューニング戦略はまだ開発中であるため、パフォーマンスは現時点では低いレベルにあります。当社の当初の目標は、極端なパフォーマンスを追求することではなく、標準的なエンドツーエンドのチャネルを確立し、それに基づいてあらゆるレベルでパフォーマンスを最適化および調整することです。 テクニカルルート技術ルートの標準化は、私たちが目指す中核原則であるだけでなく、これによりより多くの貢献者やパートナーを引き付けると同時に、ユーザーの学習のハードルとその後のメンテナンスコストを効果的に削減できると確信しています。 図に示すように、さまざまな AI モデルを接続するために PyTorch エコシステムを選択し、Buddy Compiler の中間表現として MLIR エコシステムを選択します。 私たちは、さまざまな AI モデルを複数のハードウェア アーキテクチャにマッピングするというビジョンを実現することを目指して、Buddy Compiler を Torch Dynamo のカスタム コンパイラとして使用してコンパイル スタック全体を形成します。設計上のポイントは次のとおりです。 AIモデルに接続するためのトレースツールとしてTorchDynamoを使用するTorchDynamoはCPythonのフレーム評価API機能を使用して、PyTorchグラフをより正確にキャプチャします。詳細については、PyTorchのドキュメント[5]を参照してください。さらに、PyTorch 2.xは包括的なコンパイルサポート、特に非常にユーザーフレンドリーなカスタムコンパイラドッキングソリューションを提供します[6]。したがって、PyTorch 2.x TorchDynamo が AI モデルに接続するための唯一の選択肢になりました。 ドッキングレベルとしてAten IRを選択しますPyTorchのドキュメント[5]によると、Core Aten IRはバックエンドにサービスを提供する演算子のセットであり、Prime IRよりも高いレベルの抽象化を備えています。 MLIR へのマッピングには、より高度な抽象化レベルを使用することをお勧めします。これにより、多層最適化のためのスペースと情報が増えます。そのため、Linalg Dialect と TOSA Dialect のさまざまな操作に簡単にマッピングできる Aten IR をドッキング レベルとして選択します。 MLIR Python バインディングを使用して Dynamo コンパイラを実装し、TOSA/Linalg Ops を生成するBuddy Compiler フロントエンドの Dynamo Compiler (または Dynamo Importer) は、PyTorch の Aten IR を MLIR に変換するために使用され、モデル パラメータの処理とパッケージ化も行います。 Dynamo コンパイラは、TorchDynamo から渡された FX グラフをトラバースし、MLIR Python バインディングを使用して各 Aten IR ノードを変換し、ターゲット MLIR コードを生成します。 Dynamo コンパイラはドッキング方言の優先順位設定をサポートしています。つまり、変換の最初の選択肢として Linalg 方言または TOSA 方言を選択できます。 最後に、Dynamo コンパイラは、変換された MLIR モジュールと重みパラメータを出力する役割を担います。 Buddy Compilerツールチェーンを使用した最適化と降下現在、私たちのコンパイル パイプライン全体は Python スクリプトを使用して完全に完了しているわけではなく、フロントエンド、ミドルエンド、バックエンドを統合するために CMake を使用しています。 これにより、フロントエンド、ミドルエンド、バックエンドの開発プロセスがある程度簡素化され、分離されます。コンパイルの最適化と下降のすべてのパスは、Buddy-opt ツールに登録されます。このツールには、Buddy コンパイラーのすべてのアップストリーム パスと最適化パスが含まれるため、buddy-opt はアップストリーム mlir-opt のスーパーセットになります。当社では、再利用性を最大限に高めるために、MLIR Core Dialect を使用して一般的なハードウェアのコンパイル プロセスを実装しています。そのため、当社のツールは、mlir-translate、llc などのすべての LLVM/MLIR ツールと互換性があります。 現在、ループには並列コンピューティングの最適化を使用しています。この最適化では、関連する中間表現と最適化パスが完全に上流の OMP 方言からのものであり、直接再利用して優れた最適化効果をもたらすことができます。このことから、統合されたエコシステムの利点もわかります。さらに、コンパイルの最適化のために粗粒度演算用のベクトル化アルゴリズムを設計しており、Vector Dialect を使用することで、クロス SIMD/Vector プラットフォーム効果も実現できます。 特定のアクセラレータ (Gemmini Accelerator など) 用のコードを生成する場合は、buddy-translate と buddy-llc を使用してハードウェア固有の LLVM IR を生成し、最終的にアクセラレータのハードウェア命令を生成することもできます。 フォワード関数は、バディコンパイラテキストコンテナと組み合わせてエンドツーエンドの推論を完了するために使用されます。コンパイルの最適化と下降後、モデルの Forward 関数が共有ライブラリとして構築されます。 私たちのシナリオの多くはシミュレーターや開発プラットフォームでテストする必要があるため、実行プロセスを Python エコシステムに引き渡すのではなく、AOT コンパイルを実行して実行可能ファイルを生成しました。 MLIR から構築された Forward 関数を使用してエンドツーエンドの推論を実現するために、テキスト入出力用のトークナイザーおよびデータ コンテナーとして、Text Container と MemRef Container の C++ バージョンを提供します。 最後に、C++ のメイン関数で、入力テキストと重みパラメータがデータ コンテナーにロードされ、推論のために Forward 関数が呼び出されます。出力トークンは、最終的なテキストを取得するための後処理のためにテキスト コンテナーに送信されます。 今後の仕事現在、LLaMA から CPU SIMD/Vector プラットフォームへのパスを開設し、X86 AVX512 を使用して予備テストを実施しています。 Vector Dialect のクロスプラットフォーム性のため、Arm Neon と RISC-V Vector Extension もネイティブでサポートされており、広範囲にわたるテストを実施しています。 同時に、Buddy Compiler の Gemmini アクセラレータと大規模モデル推論パスの接続もサポートしようとしています。 さらに、GPU最適化パスも開発中です。モデル レベルでは、より大規模なマルチモーダル モデルをテストして接続し、Buddy Dynamo Compiler フロント エンドの範囲をさらに拡大したいと考えています。上記の作業を完了した後の次のマイルストーンは、マルチモーダル大規模モデルを複数のハードウェア プラットフォームにコンパイルすることです。 一般的に、フロントエンド、ミドルエンド、バックエンドは比較的分離された状態で開発され、最終的には接続されます。
3 つの部分すべてが比較的完成したら、Python インターフェイスを使用してすべてのツール チェーンをパッケージ化し、よりエレガントな使用プロセスを形成することを検討してください。 要約する現在、大規模モデル推論用のソフトウェア スタックが次々と登場しており、技術的なルートも異なります。私たちが使用する Torch 2.x + Buddy Compiler コンパイル スタック設計戦略は、実際には AI コンピューティング用の PyTorch と MLIR という 2 つの主要なエコシステムを統合することです。もちろん、MLIR エコシステムにおける大規模モデル推論の場合、Torch-MLIR + IREE は現時点では比較的完全なソリューションであると考えています。 nod.aiのSHARK Turbine[7]はこの技術的アプローチを採用しています。 Torch-MLIR と IREE の組み合わせと比較して、Buddy Compiler はシンプルでありながら強力な設計を重視し、極端な再利用戦略と完全なコード生成戦略を採用しています。 Torch-MLIR の Torch Dialect レベルと比較すると、Buddy Compiler は TOSA/Linalg を直接再利用して Aten IR に接続することを優先します。また、すべてのバックエンドをカバーする IREE のランタイムおよび実行エンジンの設計と比較すると、Buddy Compiler は完全なコード生成を実行することを優先します。 Shark Turbine [8] のカバーは航空機のタービンエンジンで、彼らの技術方針によく合っています。TorchDynamo + Torch-MLIR + IREE は、非常に洗練された高耐久性のコンパイルスタックです。このような「エンジン」があれば、理論的にはどんな山や渓谷も越えることができます。それに比べて、Buddy Compiler は、さまざまな個性の電気自動車を構築できる、電気自動車用の 3 電気プラットフォームのようなものです。私たちにとって、LLaMA のサポートは出発点でも終点でもありません。それは、探検の道で出会う山です。私たちは、その山を登り、山の向こう側にある世界を見て、自分たちで作った車を運転したいと思っています。 謝辞Buddy Compiler のすべての貢献者、特に LLaMA の運営に尽力してくれたパートナーの zhanghb97、weilinquan、xTayEx、EllisLambda、Lester-1、LAJIidea、SForeKeeper、LHY-24、xlinsist、qingqing12138 に感謝します。また、オープンソース プロジェクトの席を提供してくれた OSPP 組織委員会にも感謝します。 |
<<: Vincent の画像は 10 倍高速になり、ビデオはリアルタイムでレンダリングされます。清華大学が LCM をリリース: すべての SD 大規模モデル、LoRA、プラグインなどと互換性あり。
>>: AI分野に新たな学者が加わりました!清華大学の胡世民が選出され、「Jitu」フレームワークは彼の研究室から生まれた
医療はこれまでずっと社会から注目されてきた人々の生活の重要な分野です。医療資源の不足、医療スタッフの...
[[419580]]データから実用的なリアルタイムの洞察を生成するには、企業は人工知能や機械学習の導...
COBOL などの従来のプログラミング言語から Java や C++ などの最新の言語にコード ベ...
[[249198]]マイクロソフト、テンセント、インテルがキュウリ栽培にAIを活用北京時間11月13...
ディープラーニングにはビッグデータと大規模な計算能力に対する厳しい要件があるため、モデルトレーニング...
[[333118]]再帰は、プログラミングの本で説明するのが最も難しい部分である魔法のアルゴリズムで...
人工知能(AI)は驚異的な進歩を遂げ、一般に応用可能な技術として社会に影響を与えています。しかし、初...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
2009 年以来、雲奇会議は、最も初期のローカル ウェブサイト サミットから、アリババの年次戦略およ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
日常的なタスクの自動化は、現在多くの業界で関心を集めているコンセプトです。最も革命的なのは自動運転車...
自動運転車は未来を象徴しているが、運転手が全てを完全に機械に任せることはできないかもしれない。おそら...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...