AIACC-AGSpeed (AGSpeed) とも呼ばれるAIACC Graph Speedingは、Alibaba Cloudによって開発されたAIトレーニング用の最適化コンパイラです。 これは、Alibaba Cloud GPU高速化コンピューティング最適化インスタンス上のPyTorchモデルのコンピューティングパフォーマンスを最適化するために使用されます。 AGSpeedは、元のAIACCの改良版と見なすことができ、知覚できないコンピューティング最適化を実装できる独立した製品です。
概要
AGSpeedは、Alibaba Cloudによって開発されたAIトレーニング用の社内最適化コンパイラです。 PyTorchモデルのトレーニングシナリオでは、パフォーマンスに大きな利点があります。
AGSpeedのサービスアーキテクチャを次の図に示します。
コンポーネント | 説明 |
フロントエンド | AGSpeedフロントエンドは、AIACCトレーニングパフォーマンスおよびアクセラレーションチームによって最適化されたバージョンのTorchDynamoと統合されています。 これにより、PyTorch Eager APIから直接コンピューティング図を取得し、コードを変更せずにAGSpeed Backend Autotunerで図を処理できます。 Autotunerは、ユースケースに最適なバックエンド実装ソリューションを自動的に選択します。 |
Backend | バックエンドでは、AGSpeedはTorchScript IRに基づいて開発された社内の中間表現 (IR) 最適化パスプラグインを統合します。 これにより、より多くの融合操作が可能になり、パフォーマンスが向上します。 さらに、AGSpeedはNvFuserの最適化されたバージョンをバックエンドに統合します。 ネイティブNvFuserと比較して、最適化されたNVFuserはより堅牢で、より優れたパフォーマンスを提供します。 |
制限事項
AGSpeedフロントエンドで動的テンソルシェイプを使用すると、再キャプチャ、再最適化、再コンパイルなどの操作がトリガーされます。 これは、AGSpeedの最適化性能を損なう可能性がある。 モデルの静的部分を最適化するには、agspeed.optimize()
を使用することを推奨します。 次のセクションでは、原因と提案について説明します。
静的形状は、Tensorに指定した形状、またはモデルの計算の進行中に推測される中間変数の形状です。 静的形状は変化しないままである。
原因
フロントエンドで動的テンソルシェイプを使用すると、TorchDynamoがコンピューティングダイアグラムを繰り返し取得し、フレーム変換操作を実行する可能性があります。 これは、最適化プロセスの効果を大幅に低減する。
バックエンドで動的テンソルシェイプを使用する場合、TorchScriptはグラフの特殊化とすべての最適化パスを繰り返し実行します。 さらに、NvFuserは、新しいテンソル形状のために新しいカーネルを再コンパイルすることもあり、これは性能を大幅に低下させる。
提案事項
agspeed.optimize()
操作を使用して、モデルの静的部分を最適化し、上記の結果を効果的に回避できます。 たとえば、モデルのヘッドは、計算プロセス中に動的な形状を招き、パフォーマンスに影響を与える可能性があります。 この場合、agspeed.optimize()
を使用して、ヘッドではなくモデルのバックボーンのみを最適化できます。
お問い合わせ
AIACCのサポートが必要な場合は、外部ユーザーのAlibaba Cloud AIACCサポートグループに参加してください (グループID: 33617640
) 。 (DingTalkをダウンロード)