618ZXW

PaddlePaddleフレームワークがバージョン3.0にアップグレード!「大規模統合トレーニング&推進」をはじめとする5つの主要新機能を徹底解説。

基礎ソフトウェアとしてのディープラーニング フレームワークは、ディープラーニング技術の急速な進歩を促進しただけでなく、人工知能技術の広範な応用のための強固な基盤も築きました。

ディープラーニングフレームワークは、開発者に便利で使いやすい開発インターフェースを提供します。これらのインターフェースはデータと操作を高度に抽象化するため、開発者は基盤となるデータ処理の詳細に煩わされることなく、アルゴリズムとモデルの設計に集中できます。これらのインターフェースにより、開発者は複雑なハードウェアレベルの開発の詳細を直接把握して対処する必要がなくなり、開発効率とユーザーエクスペリエンスが大幅に向上します。さらに、ディープラーニングフレームワークは自動微分化という強力な機能も提供します。開発者は通常、順伝播ネットワークのコードのみを記述すればよく、面倒な逆伝播ネットワークはフレームワークによって自動的に処理されます。

中国初の独自開発、高機能、オープンソースのディープラーニングプラットフォームであるPaddlePaddleは、静的グラフをデフォルトとしていたバージョン1.0から、動的グラフをデフォルトとするバージョン2.0へと進化しました。バージョン2.0では、静的グラフと動的グラフの統合、そして統合学習と誘導を実現しています。PaddlePaddleフレームワークは、動的グラフの柔軟性と静的グラフの効率性を完璧に融合し、モデルのハイブリッド並列学習をサポートしています。そして先日、大規模モデル時代を見据えたバージョン3.0が正式にリリースされました。PaddlePaddleは、新世代のフレームワーク技術革新に正式に乗り出しました。

デザインコンセプト

ディープラーニング フレームワークの設計は、人工知能技術の発展を促進するために非常に重要であり、その中心的な設計目標は、ディープラーニング技術の革新と応用をより簡単にすることです。

これはどうすればできるのでしょうか?

フレームワークでは、開発者とハードウェアメーカーのニーズを十分に考慮する必要があります。

ユーザーの観点から見ると、優れたディープラーニングフレームワークは、開発者に卓越した開発体験を提供する必要があります。これは、ユーザーフレンドリーな開発環境を提供するだけでなく、開発者の学習コストと時間コストを大幅に削減し、開発の利便性を大幅に向上させることを意味します。この目的のために、PaddlePaddleフレームワークは「静的操作と動的操作の統合、トレーニングとプッシュの統合、自動並列処理」というコンセプトを提案し、開発効率を大幅に向上させます。

ハードウェア適応の観点から見ると、現代のディープラーニングアプリケーションは、多くの場合、多様なハードウェアプラットフォーム上で実行する必要があります。そのため、フレームワークは様々なハードウェアデバイスとの互換性と適応性を備えていなければなりません。そのためには、フレームワークが異なるハードウェアインターフェース間の違いをインテリジェントに分離し、幅広いハードウェア互換性を実現する必要があります。同時に、ハードウェアのパフォーマンスを最大限に活用するためには、フレームワークがハードウェアと連携して動作し、ハードウェアリソースの利用時に最適なパフォーマンスを確保する能力も必要です。

同時に、優れたフレームワークでは、AI 技術開発の全体的な傾向と業界の実際のアプリケーションニーズも考慮する必要があります。

技術開発の面では、大規模言語モデル(LLM)、専門家混合(MOE)、マルチモーダル学習、AI for Scienceといった最先端技術が、徐々に新たな研究のホットスポットとなりつつあります。モデルの複雑性が増すにつれて、計算ボトルネック、ストレージボトルネック、メモリアクセスボトルネック、通信ボトルネックといった問題が顕著になり、分散学習と全体的なパフォーマンス最適化の必要性がますます高まっています。

産業化レベルでは、フレームワークは学習、圧縮、推論というプロセス全体をサポートする能力を備えている必要があります。つまり、モデルの学習から最適化、そして実際の展開と推論に至るまで、フレームワークはディープラーニング技術に対する業界の実際のニーズを満たす、包括的かつ効率的なソリューションを提供する必要があります。

トレンドに対応し、改良に耐えるフレームワークだけが、産業界、学界、研究分野の開発者に継続的かつ安定したサポートを提供することができます。

パドルフレーム3.0の設計コンセプトと主な特徴

こうしたニーズに応えるため、PaddlePaddleは開発者向けに、「動的・静的に統合され、トレーニングと伝播が統合され、自動的に並列化され、自動的に最適化され、ハードウェアに幅広く適応可能な」ディープラーニングフレームワークを提供します。開発者は、複雑な通信やスケジューリングロジックを意識することなく、単一マシンコードを書くかのように分散コードを記述し、大規模なモデルを開発できます。また、ハードウェア開発言語を用いて複雑な演算カーネルコードを書く必要がなく、数式を書くかのようにPythonでニューラルネットワークを記述し、効率的な動作を実現できます。

このニーズに応えるため、PaddlePaddle フレームワーク バージョン 3.0 がリリースされました。バージョン 2.x の統合された静的および動的要素と統合されたトレーニングおよびプッシュ機能の設計理念が継承されています。開発インターフェースはバージョン 2.x と完全に互換性があります。つまり、バージョン 2.x を使用して開発されたコードは、ほとんどの場合、変更なしにバージョン 3.0 で直接実行できます。主な特徴は、自動並列処理を備えた統合された静的および動的要素、自動コンパイラ最適化、大規模モデル向けの統合されたトレーニングおよびプッシュ機能、大規模モデル向けのマルチハードウェア適応という 4 つの新しい特徴です。これらの機能は、PaddlePaddle フレームワーク バージョン 2.6 以前で開発され、現在は外部テストに使用できます。これらの新機能により、ユーザー エクスペリエンス、パフォーマンス、二次開発の容易さ、ハードウェア適応機能が大幅に向上します。PaddlePaddle はバージョン 3.0 を正式にリリースしました。このバージョンには、フレームワーク バージョン 2.x の既存の機能の一部が改善されており、新機能を使用しなくても成熟度と安定性が実証されています。

フレームワークアーキテクチャの概要

ディープラーニングフレームワークの前述の特性を実現するには、そのアーキテクチャを綿密に設計し、様々な複雑なモデルの構築をサポートし、多様なチップとシームレスに統合できるようにする必要があります。以下では、直感的なアーキテクチャ図を用いて、次世代PaddlePaddleフレームワークに含まれる機能モジュールと、これらのモジュール間の相互作用と関係性について詳しく説明します。以下は、PaddlePaddle Framework 3.0のアーキテクチャ図です。

PaddlePaddle 3.0 アーキテクチャ図

豊富なインターフェース:PaddlePaddleフレームワークは、テンソル表現、数学的計算、モデルネットワーク、最適化戦略など、ディープラーニングに関連する豊富な開発インターフェースを提供します。これらのインターフェースを通じて、開発者は基盤となる技術的な詳細を深く理解することなく、独自のディープラーニングモデルを容易に構築・学習できます。

開発インターフェースでは、PaddlePaddle フレームワークは、プレゼンテーション層、スケジューリング層、オペレータ層、適応層の 4 つの層に分けられます。

表現層:計算グラフの表現と変換に焦点を当てています。高度にスケーラブルな中間表現PIRを通じて、動的グラフから静的グラフへの変換(動的グラフから静的グラフへの変換)、自動微分、自動並列化、演算子の組み合わせ、計算グラフの最適化といったコア機能を強力にサポートします。

スケジューリング層は、コードまたは計算グラフのインテリジェントなオーケストレーションと効率的なスケジューリングを担います。また、実際のニーズに応じてGPUメモリとシステムメモリの管理を最適化し、動的グラフと静的グラフの両方の効率的な実行をサポートします。開発者がモデル開発に動的グラフと静的グラフのどちらを使用するかに関わらず、PaddlePaddleフレームワークは、最適なリソース利用を確保しながら効率的な実行環境を提供します。

演算子層: ニューラル ネットワーク コンパイラ CINN と演算子ライブラリ PHI で構成され、テンソル定義、演算子定義、自動演算子融合、演算子カーネル実装などの主要な機能をカバーします。

適応層は、デバイス管理、オペレータ適応、通信適応、コンパイルおよびアクセスなどの機能を含む、基盤となるチップとの互換性を実現するために使用されます。

次のセクションでは、主に次のモジュールを含む、PaddlePaddle 3.0 の主要な新しいアーキテクチャ アップグレードに焦点を当てます。

1) 高度にスケーラブルな中間表現 (PIR): アーキテクチャ全体にわたって統一された中間表現を作成することにより、フレームワーク レイヤーのモジュール間の障壁を打ち破り、科学計算、コンパイラ最適化、大規模モデル ドメインにおける PaddlePaddle の可能性を高めます。

2) ニューラル ネットワーク コンパイラーは、自動融合と戦略調整を通じて、モデルのエンドツーエンドのパフォーマンスを自動的に最適化し、大幅に向上させます。

3) 自動並列処理により、大規模モデル シナリオのモデル開発とパフォーマンス最適化のコストが削減され、大規模モデル シナリオのユーザー エクスペリエンスが大幅に向上します。

高拡張中間表現 PIR

計算グラフの中間表現(IR)は、ディープラーニングフレームワークにおけるパフォーマンス最適化、推論のデプロイメント、そしてコンパイラにとって重要な基盤です。近年、ますます多くのフレームワークや研究者が、ディープラーニングニューラルネットワークモデルの最適化にコンパイラ技術を取り入れ、コンパイラの概念、手法、ツールを活用してニューラルネットワークを自動的に最適化し、コードを生成するようになっています。大規模モデルの時代において、IRには柔軟性、スケーラビリティ、そして完全性という点でより高い要求が課せられています。

そのため、バージョン3.0では、PaddlePaddleはインフラストラクチャレベルで中間表現(IR)の定義を標準化し、アーキテクチャ全体にわたる統一的な表現を実現し、上流から下流まで開発成果の共有を可能にしました。PaddlePaddleの新世代IRアーキテクチャは、高い柔軟性と高いスケーラビリティという2つの重要な側面に重点を置いています。より完全で堅牢なセマンティック表現機能、トレーニングおよび誘導アーキテクチャ全体にわたる統一的な表現、効率的でプラグイン可能なパフォーマンス最適化戦略(Pass)開発メカニズムを通じて、複雑なセマンティクスのサポート、大規模モデルの自動並列化における豊富なパーティショニング戦略のサポート、ニューラルネットワークコンパイラとのシームレスな接続による自動パフォーマンス最適化とマルチハードウェア適応を実現します。

PaddlePaddle中間表現(PIR)は、型、属性、演算子、特性、インターフェースをカバーする、基盤レベルで高度にスケーラブルな基本コンポーネントセットを抽象化します。方言の概念を導入することで、開発者は柔軟な拡張性とカスタマイズ性を実現し、包括的で堅牢なセマンティック表現を提供します。モデル表現層では、複数の方言のモジュール管理と統一されたマルチターミナル表現により、トレーニングと推論を統合した統一アーキテクチャ表現を実現し、演算子とコンパイラのシームレスな統合を可能にし、自動最適化とマルチハードウェア適応をサポートします。グラフ変換層では、基盤モジュールを統一し、基本概念を簡素化することで、低コストで使いやすく高性能な開発エクスペリエンスと、豊富でプラグイン可能なパス最適化メカニズムをユーザーに提供します。 PaddlePaddle PIR は、静的単一割り当て (SSA) 原則に準拠し、モデルが有向非巡回グラフ (DAG) と同等であることを保証し、値と操作を使用して計算グラフを抽象化します。ここで、操作はノードを表し、値はエッジを表します。

演算は計算グラフ内のノードを表します。各演算は演算子を表し、0個以上の領域を含みます。領域は閉包を表し、閉包は0個以上のブロックを含むことができます。ブロックは静的単一代入(SSA)原則に準拠した基本ブロックを表し、0個以上の演算を含みます。これらの3種類のノードはループ内にネストすることで、任意の複雑な構文構造を構築できます。

値は計算グラフにおける有向エッジを表します。2つの操作を結び付けることで、プログラム内の使用-定義チェーン(UDチェーン)を記述します。OpResultは定義の端として機能し、値を定義します。一方、OpOperandは使用の端として機能し、値の使用方法を記述します。

PaddlePaddleは、PatternRewriterとDeclarative Rewrite Rule (DRR)という2つのパス開発メカニズムを提供し、カスタマイズの柔軟性と開発の容易さを両立させています。3段階のパス開発アプローチにより、開発者は基盤となる情報レンダリング(IR)の詳細を気にすることなく、パスロジック処理に集中できます。PIRパス開発メカニズムを利用することで、パス開発コストを58%削減できます。推論シナリオに適用すると、84%以上のモデルで推論速度が10%以上向上します。

ニューラルネットワークコンパイラの自動最適化

コンパイラ技術を開発する必要がある主な理由は 3 つあります。

1) ハードウェア開発動向:ハードウェア開発の歴史と技術進化の特徴を考慮すると、コンピューティングパワーの発展速度は、メモリアクセス性能、CPU性能、バス帯域幅の発展速度をはるかに上回っています。メモリアクセス性能は、メモリを大量に消費する演算子(ノルムクラス、アクティベーションなど)の性能に影響を与え、CPU性能とバス帯域幅はスケジューリング性能に影響を与えます。コンパイラベースの自動融合最適化技術は、複数の演算子を1つの大きな演算子に統合することができます。メモリアクセスと演算子の数を削減することで、モデル性能を大幅に向上させることができます。コンパイラ技術は、ディープラーニングフレームワークの標準コンポーネントになるでしょう。

2) モデル開発の傾向: モデル構造は多様であり、多様なニーズはコンパイラの一般的な最適化に大きく依存しています。

3) マルチハードウェア最適化:現在、市場には数多くのハードウェア製品が存在します。ハードウェアプラットフォームごとに特性や最適化要件が異なり、それぞれのハードウェアの最適化には多大な労力が必要です。コンパイラ技術を活用することで、こうした最適化技術にかかるコストを大幅に削減できます。

例を挙げて説明しましょう。Llamaモデルでよく使われるRMS正規化(Root Mean Square Layer Normalization)を例に挙げます。計算式は比較的シンプルで分かりやすいです。

RMS正規化計算を実行する必要があるとします。最も簡単な方法は、PaddlePaddleフレームワークが提供するテンソル演算開発インターフェースを使用して、2乗、加算、除算、平方根などの演算を呼び出すことです。以下のコードをご覧ください。

上記のコードは開発が簡単ですが、パフォーマンスが低く、ビデオメモリを大量に消費します。開発者はFusedRMSNormを実装することもできますが、高度なスキルとコストが必要になります。

ニューラルネットワークコンパイラ技術を活用することで、高い柔軟性と使いやすさを維持しながら、大幅なパフォーマンス向上を実現しています。A100プラットフォームにおけるRMSnormオペレータの以下のパフォーマンステスト結果がそれを証明しています。Python開発インターフェースを用いて実装を組み合わせる方法と比較して、最適化されたオペレータは4倍高速に動作し、手動によるオペレータ統合方法と比較しても14%のパフォーマンス向上を実現しています。この成果は、PaddlePaddleフレームワークが柔軟性とパフォーマンスの理想的なバランスを実現していることを如実に示しています。

そのため、PaddlePaddleはニューラルネットワークコンパイラ技術を重要な研究開発方向と位置付けています。以下はPaddlePaddleコンパイラの全体的なアーキテクチャ図です。

表現層では、PIRの拡張性を活用し、CINNフロントエンドモジュールが実装され、演算子分割、再計算、サブグラフ分割、次元導出などのモジュールを含む層関連の変換を処理します。最終的には、コンパイラバックエンドで最適化可能な複数のサブグラフが生成されます。コンパイラバックエンドでは、これらの融合可能なサブグラフに対して、コンパイラはさらに「Compute」関数を呼び出して、抽象構文木(AST)で構成される低レベルの中間表現(IR)に変換し、これらの表現に対して反復的な融合を実行して、単一のカーネルに融合できるようにします。CINNの低レベルIRに対してパフォーマンスチューニング分析が実行され、最適な構成が得られます。最後に、低レベルIRは具体的なコード実装に慎重に変換されます。

生成大規模言語モデル Llama とテキストベースのグラフモデル Stable Diffusion の実験結果によると、コンパイラ最適化手法を使用することで、手動によるパフォーマンス最適化を行わない基本バージョンと比較して、推論速度がそれぞれ 36% と 30% 向上しました。

動的および静的統合自動並列

自動並列処理を実装する必要があるのはなぜですか?

現在、大規模モデルの主流の学習手法は、様々な並列戦略を採用しています。これらの戦略は、動的グラフモデルを用いて実装された「手動」並列アプローチに基づいています。これは、パーティショニング(テンソルと計算グラフの分割)、通信(通信演算子の追加)、メモリ最適化(メモリ共有、再計算)、スケジューリング最適化(パイプラインオーケストレーション、非同期計算と通信)を単一のGPUベースで手動で処理することを意味します。開発者はモデル構造に精通し、並列戦略とフレームワークのスケジューリングロジックを深く理解している必要があるため、大規模モデルの開発とパフォーマンス最適化は非常に困難です。モデルアルゴリズムの革新を担当する専任のアルゴリズムチームに加えて、モデルの並列最適化を担当する専任チームも必要であり、これが大規模モデルの革新と反復に多くの障害をもたらします。

大規模モデル開発とシングルカードロジックの違いを説明するために、簡単な例を見てみましょう。並列戦略は実行時にテンソルの形状を変化させる可能性があるため、形状処理に関連するすべての演算子は、並列戦略の影響を受けるかどうかを考慮する必要があります。例えば、以下のreshape操作では、分割戦略によって入力の形状が変化するため、出力の形状は分割戦略に応じて適切に調整する必要があります。

これに対処するため、静的演算と動的演算を統合する自動並列化スキームを提案します。開発者は少量のテンソル分割アノテーションを記述するだけで、フレームワークはすべてのテンソルと演算子の分散分割状態を自動的に推測し、適切な通信演算子を追加することで結果の正確性を確保します。最後に、モデル構造とクラスター情報に基づき、メモリ層とスケジューリング層の最適化と組み合わせることで、最も効率的な分散並列戦略を自動的に見つけ出します。

自動並列設計では、開発者は少量のテンソル分割アノテーションのみで済みます。分割手法は抽象化されており、テンソル(パラメータ、入力)の分割と計算グラフ(パイプライン)の分割という2つの種類が必要です。これらの2つの分割手法を実装するには、フレームワークに分散テンソルとコンピューティングデバイス間のマッピング関係を記述するメカニズムが必要です。この目的のために、ProcessMeshとPlacementという2つの分散概念を導入します。ProcessMeshは、GPUカードをプロセスに、複数のデバイスを1次元または多次元のプロセス配列にマッピングします。下の図は、8つのデバイスで構成されるProcessMeshの2つの異なる抽象表現を示しています。

Placements は、Replicate、Shard、Partial の 3 つの分散マーカーのリストです。その長さは ProcessMesh の次元と一致します。これは、対応するコンピューティングデバイスの次元に沿って分散テンソルを分割するためにどの分散マーカーが使用されるかを示します。これら 3 つの分散マーカーの詳細な説明は次のとおりです。

下の図に示すように、Replicate はテンソルが異なるデバイス上にコピーの形で存在することを意味します。Shard は特定の次元に従って異なるデバイス上に分割されることを意味します。Partial はデバイス上のテンソルが不完全であり、完全な状態を取得するには Reduce Sum や Reduce Mean などの異なる方法で操作する必要があることを意味します。

分散ラベリングの抽象化が完了したら、paddle.distributed.shard_tensor() インターフェースを呼び出すことで、テンソルパーティションのラベリングを実装します。テンソルパーティションのラベリングと自動導出により、複雑な分散ハイブリッド並列処理を表現できます。下の図は、データ並列処理、テンソルモデル並列処理、パイプライン並列処理からなるハイブリッド並列処理の具体的な例を示しています。

次のコードは、ハイブリッド並列処理の具体的な例を示しています。

自動化された並列開発アプローチを採用することで、開発者は複雑な通信ロジックを考慮する必要がなくなります。Llamaタスクを例にとると、分散学習のコアコードサイズは50%削減され、開発の難易度が大幅に低下しました。私たちの実験では、グローバル分析などの最適化を活用することで、動的グラフの手動並列処理よりもパフォーマンスが向上することが示されています。

今後は、テンソル分割ラベルを必要としない完全自動並列処理をさらに追求し、開発者が分散コードを単一マシンコードのように記述できるようにすることで、大規模モデルの開発エクスペリエンスをさらに向上させます。

産業上の利点

まとめると、PaddlePaddleの次世代フレームワークであるPaddlePaddle Framework 3.0-Betaは、大規模モデルと異種マルチコアシステム向けに特別に設計されています。異種マルチコアシステムとの下位互換性を備え、ハードウェアのポテンシャルを最大限に引き出し、上位システムでは大規模モデルの学習と推論を統合的にサポートします。また、統合された静的および動的並列処理、自動コンパイラ最適化、大規模モデルの統合学習と推論、そして大規模モデルのマルチハードウェア適応という4つの主要機能を備えており、業界へのサービス提供能力を総合的に強化しています。

動的・静的統合自動並列化:この機能により、産業開発とトレーニングのコストが大幅に削減されます。ユーザーは単一のGPUで少量のテンソル分割とラベリングを実行するだけで、PaddlePaddleフレームワークが分散分割情報を自動的に導出し、通信演算子を追加してロジックの正確性を確保します。同時に、モデル構造とクラスター情報に基づき、メモリとスケジューリング層の最適化と組み合わせることで、PaddlePaddleは最も効率的な分散並列化戦略を自動的に見つけ出すことができます。これにより、ハイブリッド並列トレーニングの開発コストが大幅に削減され、開発者はモデルとアルゴリズムの革新に集中できるようになります。

自動コンパイラ最適化:この機能により、パフォーマンス最適化のコストが大幅に削減されます。PaddlePaddleのコンパイラはフレームワークとの統合設計を採用しており、生成モデルや科学計算モデルなど、様々なモデルの効率的なトレーニングと可変形状推論を可能にし、計算柔軟性と高性能の良好なバランスを実現します。自動演算子融合およびコード生成技術により、Llama2やStable Diffusionなどの生成モデルの推論性能が30%以上向上しました。

大規模モデルのトレーニングと推論の統合:この機能は、業界に究極の開発エクスペリエンスを提供します。トレーニングと推論機能の再利用を可能にし、大規模モデルのワークフロー全体を通して統一された開発エクスペリエンスと極めて高いトレーニング効率を実現します。動的操作を静的操作に変換することで、トレーニングと推論タスクがシームレスに統合されます。RLHF(Human Feedback Reinforcement Learning)トレーニングプロセスにおける生成計算は、推論最適化を再利用できるため、2.1倍の高速化を実現します。同時に、トレーニングの分散自動並列戦略は推論量子化シナリオでも再利用され、効率が3.8倍向上します。

大規模モデルとマルチハードウェアへの適応:PaddlePaddleの重要な特徴の一つは、異機種混在のマルチチップシステムへの適応性と、ハードウェアの潜在能力を最大限に引き出す能力です。アクセスメカニズムの面では、PaddlePaddleは簡潔で効率的な抽象インターフェースと基本的なオペレータシステムを提供し、適応コストを削減します。運用メカニズムの面では、スケジューリングオーケストレーションとストレージ共有メカニズムを最適化し、スケジューリング効率を向上させます。オペレータカーネルの観点からは、PaddlePaddleは自動コンパイラ融合およびチューニングソリューションを提供し、エンドツーエンドのパフォーマンスを向上させます。同時に、PaddlePaddleは、コードマージ、継続的インテグレーション、モデル回帰テストなど、新しいハードウェアメーカー向けに研究開発インフラストラクチャを構築しました。これらのメカニズムにより、新しいハードウェアはPaddlePaddleの通常のリリースシステムに組み込まれ、ユーザーはコンパイルなしで直接インストールして試用できます。この包括的かつ低コストのアクセスメカニズムは、ハードウェアメーカーから3,456件のプルリクエストと25,000件を超えるコミットの提供を獲得しました。

これはPaddlePaddleの次世代フレームワーク3.0です。3.0ベータ版は現在開発者向けに公開されており、すべての開発インターフェースは2.0と完全に互換性があります。開発者の皆様はぜひご利用いただき、フィードバックをお寄せください。