「MLパイプラインアーキテクチャのデザインパターン(10の実世界の例を使用)」
Design patterns for ML pipeline architecture (using 10 real-world examples)
MLの実践者は、Jupyter Notebookでモデルをトレーニングすることはプロジェクト全体の一部に過ぎないことに気づく時が来ます。データを生の形式から予測まで取り扱い、レスポンシブさと柔軟性を保ちながらワークフローを整えることが本当の課題です。
その時点で、データサイエンティストやMLエンジニアは興味を持ち、そのような実装を探し始めます。機械学習パイプラインやシステムの構築に関する多くの質問は、既に業界のベストプラクティスやパターンから回答されています。しかし、これらの質問のいくつかはまだ再発しており、十分に説明されていません。
機械学習パイプラインは通常、組織や機械学習チームが一貫した、モジュール化された、構造化されたアプローチでMLシステムを構築、トレーニング、展開することを可能にする相互に接続されたインフラストラクチャで構成されます。ただし、この効率的なシステムは単独では動作せず、包括的なアーキテクチャアプローチと綿密な設計の考慮が必要です。
しかし、機械学習デザインとアーキテクチャとはどのような意味であり、MLパイプラインメカニズムのような複雑なソフトウェアシステムはどのように効率的に動作するのでしょうか? このブログでは、以下の内容を探求することでこれらの質問に答えます:
- 「トランスフォーマーと位置埋め込み:マスタリーのためのステップバイステップのNLPチュートリアル」
- 「5つの最高のオープンソースLLM」
- 「2023年のAi4カンファレンスでジェネレーティブAIが主役を務める」
-
1
パイプラインアーキテクチャと設計の考慮事項とは何か、それらを理解することの利点は何か? -
2
有名なテック企業での標準的なMLパイプライン/システムの設計とアーキテクチャの実践 -
3
一般的なMLパイプラインアーキテクチャ設計パターンの説明 -
4
MLパイプラインの一般的なコンポーネントの紹介 -
5
MLパイプラインの実装とメンテナンスに使用されるツール、技術、ソフトウェアの紹介 -
6
MLパイプラインアーキテクチャの例 -
7
MLパイプラインの設計と開発時に考慮すべき一般的なベストプラクティス
それでは、さっそく見ていきましょう!
MLパイプラインアーキテクチャ設計パターンとは何ですか?
これらの2つの用語はしばしば交換可能に使用されますが、異なる意味を持ちます。
MLパイプラインアーキテクチャは、交響曲のためのハイレベルな楽譜のようなものです。MLパイプライン内のコンポーネント、ステージ、ワークフローを概説します。アーキテクチャの考慮事項は、主にコンポーネントをお互いや関連するプロセスやステージに関連付ける方法に焦点を当てています。これは次の質問に答えます:”パイプラインにどのようなMLプロセスとコンポーネントが含まれ、それらはどのように構造化されていますか?”
一方、MLパイプライン設計は、MLパイプラインの構成に深く立ち入り、パイプラインとそのコンポーネントの実装、テスト、メンテナンスに使用されるツール、パラダイム、テクニック、プログラミング言語に取り組みます。これは作曲家の感覚で、次の質問に答えるものです:”パイプライン内のコンポーネントやプロセスはどのように実装、テスト、メンテナンスされるのでしょうか?”
機械学習パイプライン設計とアーキテクチャのパターンに関する技術情報はいくつかありますが、この記事では主に以下の内容をカバーしています:
MLパイプラインアーキテクチャの理解の利点
MLエンジニア、データサイエンティスト、ML実践者がMLパイプラインアーキテクチャと設計に存在するパターンを知るべき理由はいくつかあります。その中には以下のものがあります:
- 効率性: MLパイプラインアーキテクチャと設計のパターンを理解することで、プロジェクトを迅速に提供するために必要な技術的なリソースを特定することができます。
- スケーラビリティ: MLパイプラインアーキテクチャと設計パターンにより、スケーラビリティを優先することができ、スケーラビリティ志向のMLシステムを構築することができます。これらのパターンは、大量のデータでのモデルトレーニング、低遅延のモデル推論などを扱う解決策を提供します。
- テンプレートと再現性: 典型的なパイプラインのステージやコンポーネントは、馴染みのあるパターンを使用してチーム全体で再現可能になり、メンバーが効率的にMLプロジェクトを複製できるようにします。
- 標準化: MLパイプラインアーキテクチャと設計に同じパターンを使用する組織は、組織全体でパイプラインの更新とメンテナンスをより簡単に行うことができます。
一般的なMLパイプラインアーキテクチャの手順
MLパイプラインアーキテクチャと設計パターンの理解の重要性に触れた後、以下のセクションでは、さまざまなステージやコンポーネントで見られる一般的なアーキテクチャと設計アプローチをいくつか紹介します。
MLパイプラインは、ステージと呼ばれるセクションに分割され、MLパイプラインの出力を生成するために一つまたは複数のコンポーネントやプロセスが連携して動作します。年月を経て、MLパイプライン内のステージは増加しています。
10年未満前、機械学習業界は主に研究に焦点を当てており、モデルの監視、デプロイメント、およびメンテナンスといったステージは存在せず、または優先されない考慮事項でした。現在の時代に移ると、MLパイプライン内の監視、メンテナンス、およびデプロイメントのステージが優先されるようになりました。なぜなら、製品システム内のモデルは保守と更新が必要とされるからです。これらのステージは主にMLOps(機械学習オペレーション)の領域で考慮されます。
今日、技術的な要件、産業的な要件、ビジネス要件を満たすために構築されるMLパイプライン内には、さまざまなステージが存在します。このセクションでは、業界やビジネス機能に関係なく、ほとんどのMLパイプラインに共通するステージについて詳しく説明します。
-
1
データ取り込み(例:Apache Kafka、Amazon Kinesis) -
2
データ前処理(例:pandas、NumPy) -
3
特徴量エンジニアリングと選択(例:Scikit-learn、Feature Tools) -
4
モデルトレーニング(例:TensorFlow、PyTorch) -
5
モデル評価(例:Scikit-learn、MLflow) -
6
モデルデプロイメント(例:TensorFlow Serving、TFX) -
7
監視とメンテナンス(例:Prometheus、Grafana)
標準的なMLパイプライン内のコンポーネントを理解したので、以下にMLパイプライン全体で遭遇するサブパイプラインやシステムを紹介します。
- データエンジニアリングパイプライン
- 特徴量エンジニアリングパイプライン
- モデルトレーニングおよび開発パイプライン
- モデルデプロイメントパイプライン
- 製品パイプライン
MLパイプラインの構築:6つの問題と解決策
10のMLパイプラインのアーキテクチャの例
以下では、最も一般的なアーキテクチャとデザインパターンについて詳しく調査し、その例、利点、欠点を探求します。
シングルリーダーアーキテクチャ
シングルリーダーアーキテクチャとは何ですか?
共通の機械学習パイプラインのアーキテクチャとパターンの探求は、機械学習システムだけでなく、データベースシステム、ストリーミングプラットフォーム、Webアプリケーション、およびモダンなコンピューティングインフラストラクチャでも見られるパターンから始まります。シングルリーダーアーキテクチャは、個々のコンポーネントの管理可能なインフラストラクチャを提供しながら、スケールで動作するように設計された機械学習パイプラインの開発で利用されるパターンです。
シングルリーダーアーキテクチャは、マスタースレーブのパラダイムを利用しています。このアーキテクチャでは、リーダーまたはマスターノードがシステムの全体的な状態を把握し、リソースの可用性に応じてタスクの実行と配布を管理し、書き込み操作を処理します。
フォロワーまたはスレーブノードは主に読み取り操作を実行します。MLパイプラインの文脈では、リーダーノードはさまざまなタスクの実行をオーケストレートし、リソースの可用性に基づいてフォロワーノード間でワークロードを配分し、システムの全体的な状態を管理します。
一方、フォロワーノードはリーダーノードから割り当てられたデータの前処理、特徴抽出、モデルトレーニング、および検証などのタスクを実行します。
シングルリーダーアーキテクチャの実世界の例
シングルリーダーアーキテクチャがスケールで利用される機械学習パイプライン内でどのように活用されるかを見るために、世界中の何百万人ものユーザーにパーソナライズされたビデオの推薦を提供する最大のストリーミングプラットフォームの一つであるNetflixを見てみましょう。
Netflixのエンジニアリングチーム内部で、ML/データパイプライン内のワークフローを管理、オーケストレート、スケジュール、および実行するためにMesonが構築されました。Mesonは、推薦やコンテンツ分析などの機能を提供し、シングルリーダーアーキテクチャを活用してMLパイプラインのライフサイクルを管理しました。
Mesonでは、70,000のワークフローがスケジュールされ、1日に50万件以上のジョブが実行されました。Mesonでは、リーダーノードが各ジョブの実行の状態を追跡し、フォロワーノードに割り当てられたジョブの失敗を特定し修正することで耐障害性を提供し、ジョブの実行とスケジュールを処理しました。
シングルリーダーアーキテクチャの利点と欠点
機械学習パイプラインのコンポーネントにおいてシングルリーダーアーキテクチャを活用するタイミングを理解するためには、その主な利点と欠点を探求することが役立ちます。
- シングルリーダーアーキテクチャの注目すべき利点は、障害耐性、スケーラビリティ、一貫性、および分散性です。
- ワークフローの操作と管理を担当するシステムのノードまたはパートが1つであるため、シングルリーダーアーキテクチャを採用したパイプライン内の障害箇所を特定することは容易です。
- ジョブの実行をリダイレクト/再配布することで予期しない処理の障害を効果的に処理し、MLパイプライン全体でデータと状態の一貫性を提供し、すべてのプロセスに対する唯一の真実の情報源となります。
- シングルリーダーアーキテクチャを採用したMLパイプラインは、フォロワーノードの数を増やすことで追加の読み取り操作に対して水平方向にスケーリングすることができます。
ただし、すべての利点にもかかわらず、MLパイプラインのシングルリーダーアーキテクチャにはスケーリング、データの損失、可用性などの問題が生じる可能性があります。
- シングルリーダーアーキテクチャ内の書き込みスケーラビリティは制限されており、この制限は全体的なジョブ/ワークフローオーケストレーションと管理の速度にボトルネックとなる可能性があります。
- アーキテクチャ内のシングルリーダーノードがすべての書き込み操作を処理するため、読み取り操作は水平方向にスケーリングできる一方、リーダーノードが処理する書き込み操作は比例的にまたはまったくスケーリングしません。
- リーダーノードが失敗すると、シングルリーダーアーキテクチャは長時間のダウンタイムを持つ可能性があり、これによりパイプラインの可用性の問題が生じ、リーダーノードへの依存によりシステム全体が失敗する可能性があります。
Mesonが管理するワークフローの数が増えるにつれて、シングルリーダーアーキテクチャはスケールの問題を抱えるようになりました。たとえば、ピーク時のトラフィック時に遅延が発生し、非営業時間には注意を払う必要がありました。利用が増えるにつれて、システムはAWSのインスタンスタイプの制限に近づくため、垂直方向にスケールする必要がありました。
これが、Maestroの開発につながりました。Maestroは共有なしアーキテクチャを使用して水平方向にスケールし、数百万のワークフローとステップインスタンスの状態を同時に管理します。
Maestroは、機械学習機能を備えたモダンなアプリケーションで使用されるいくつかのアーキテクチャパターンを組み込んでいます。これには、共有なしアーキテクチャ、イベント駆動型アーキテクチャ、および有向非巡回グラフ(DAG)が含まれます。これらのアーキテクチャパターンは、機械学習パイプラインの効率を向上させる上で重要な役割を果たします。
次のセクションでは、これらのアーキテクチャパターンについて詳しく説明し、データの取り込み、処理、モデルトレーニング、展開を効率化するために機械学習パイプラインでどのように活用されているかを探求します。
有向非巡回グラフ(DAG)
有向非巡回グラフアーキテクチャとは何ですか?
有向グラフはノード、エッジ、および方向から構成されます。ノードはプロセスを表し、グラフ内のエッジはプロセス間の関係を描写し、エッジの方向はプロセスの実行フローまたはデータ/信号の転送を示します。
グラフに制約を適用することで、順次実行フローを持つシステムの表現と実装が可能になります。たとえば、頂点またはノード間のループが不許可とされるグラフ内の条件です。このタイプのグラフは非巡回グラフと呼ばれ、1つ以上のノード間に循環的な関係(有向サイクル)が存在しないことを意味します。
非巡回グラフは、2つのノード間にループを回避することでノード、ポイント、またはプロセス間の繰り返しを排除します。有向エッジとノード間の非循環的な関係を組み合わせることにより、有向非巡回グラフが得られます。
有向非巡回グラフ(DAG)は、活動をノードとして、ノード間の依存関係を別のノードに向けたエッジとして表す方法です。特に、DAG内ではノード間のエッジの方向に循環やループは回避されます。
DAGはトポロジカルな特性を持ち、DAG内のノードは線形に順序付けられ、ノードは順次に配置されます。
この順序付けでは、他のノードに接続するノードはそれに続くノードの前に配置されます。この線形な配置により、エッジはシーケンス内でのみ前進するようになり、サイクルやループが発生しないようになります。
有向非巡回グラフアーキテクチャの現実世界の例
DAGの使用を示す適切な現実世界の例は、UberやLyftなどのライドヘイリングアプリのプロセスです。この文脈では、DAGはノードとして活動、タスク、またはジョブのシーケンスを表し、各ノードを接続する有向辺は実行順序またはフローを示します。たとえば、ドライバーはユーザーの場所に進む前に、ユーザーがアプリを通じてドライバーをリクエストする必要があります。
さらに、NetflixのMaestroプラットフォームは、機械学習/データパイプライン内のワークフローをオーケストレーションおよび管理するためにDAGを使用しています。ここでは、DAGは操作のためのジョブ定義を具現化したユニットから成るワークフローを表します。
MLパイプラインとプロジェクト内でDAGアーキテクチャを活用したいと考えるプラクティショナーは、DAGのアーキテクチャ特性を利用して、予測可能で効率的な手順の記述を強制および管理できます。
DAGのこの主な特徴により、MLパイプライン内の複雑なワークフローの実行を管理しやすくなります。特に、MLパイプライン内のプロセス、ジョブ、または操作の依存関係が高い場合に有効です。
たとえば、以下の画像は、データ取り込み、前処理、特徴抽出、モデルトレーニング、モデル検証、予測を含む標準的なMLパイプラインを示しています。パイプラインのステージは、前のステージが完了し出力を提供したときに連続して実行されます。パイプライン内の各ステージは、再びDAG内のノードとして定義することができ、有向辺はパイプラインステージ/コンポーネント間の依存関係を示します。
有向非巡回グラフアーキテクチャの利点と欠点
- DAGを使用することで、タスクの依存関係と実行順序が重要なビッグデータ分析、機械学習、人工知能などのさまざまなアプリケーションでプロセスとタスクを効率的に実行する方法が提供されます。
- ライドヘイリングアプリの場合、各活動の結果はライドヘイリングプロセスの完了に貢献します。DAGのトポロジカルな順序付けにより、活動の正しいシーケンスが確保され、よりスムーズなプロセスフローが実現されます。
- NetflixのMaestroのような機械学習パイプラインでは、DAGはプロセス操作のシーケンスを視覚化し整理するための論理的な方法を提供します。DAG表現のノードは、データ取り込み、データ前処理、特徴抽出などの標準的なコンポーネントまたはステージに対応します。
- 有向辺は、プロセス間の依存関係とプロセス実行の順序を示します。この特徴により、すべての操作が正しい順序で実行され、並行実行の機会も特定でき、全体的な実行時間が短縮されます。
DAGはタスク間の相互依存関係を視覚化する利点を提供しますが、ノード数やタスク間の依存関係が多数存在する大規模な複雑な機械学習パイプラインでは、この利点は逆に不利になる場合があります。
- 最終的にDAGによってモデル化された複雑な機械学習システムは、管理、理解、視覚化が困難になります。
- 動的な環境やワークフロー内で適応可能で動作する現代の機械学習パイプラインでは、DAGはこれらのシステムやパイプラインをモデル化および管理するのに適していません。これは主に、DAGが事前定義された依存関係を持つ静的なワークフローに適しているためです。
ただし、今日の動的な機械学習パイプラインには、より良い選択肢があるかもしれません。たとえば、ネットワークトラフィックのリアルタイムの異常検知を行うパイプラインを想像してください。このパイプラインは、ネットワーク構造とトラフィックの絶え間ない変化に適応する必要があります。静的なDAGは、そのような動的な依存関係をモデル化するのに苦労するかもしれません。
スティッチフィックスでのMLプラットフォームの構築からの学びと、Stefan Krawczyk(DAGWorks)とのその他の情報
foreachパターンとは
foreachパターンとは何ですか?
機械学習パイプラインにおけるアーキテクチャとデザインのパターンは、パイプラインのフェーズ内での操作の実装に見ることができます。実装されたパターンは、データセットに対して操作を順次かつ効率的に実行することができるようになっています。そのようなパターンの1つがforeachパターンです。
foreachパターンは、コレクションやデータセット内のアイテムが現れる回数だけコードを反復的に実行するコード実行パラダイムです。このパターンは、機械学習パイプライン内のプロセス、コンポーネント、またはステージで、順次かつ再帰的に実行されるものに特に有用です。つまり、同じプロセスが出力を提供し、次のプロセスまたはステージに進む前に、ある回数実行される場合があります。
例えば、標準的なデータセットは、複数のデータポイントから構成されており、それらを所望のデータ形式に変換するためには、同じデータ前処理スクリプトを経る必要があります。この例では、foreachパターンは、処理関数を「n」回呼び出す方法として適しています。通常、「n」はデータポイントの数に対応します。
foreachパターンの別の応用例は、モデルトレーニングのステージで見ることができます。このステージでは、モデルは一定の時間内に異なるデータセットのパーティションに繰り返し露出され、トレーニングやテストが行われます。
foreachパターンの実際の例
foreachパターンの実際の応用例は、NetflixのML/データパイプラインのオーケストレーターおよびスケジューラであるMaestroにあります。 Maestroのワークフローは、DAG(有向非巡回グラフ)アーキテクチャで定義された順序で実行されるステップ/ジョブを含むジョブ定義で構成されています。Maestroでは、foreachパターンは、内部的に定義されたステップ/ジョブからなるサブワークフローとして利用されます。ここでは、ステップが繰り返し実行されます。
先に述べたように、foreachパターンは、MLパイプラインのモデルトレーニングのステージで使用することができます。このステージでは、モデルは一定の時間内に異なるデータセットのパーティションに繰り返し露出され、トレーニングやテストが行われます。
foreachパターンの利点と欠点
- MLパイプラインでDAGアーキテクチャとforeachパターンを利用することで、堅牢でスケーラブルかつ管理しやすいMLパイプラインソリューションを実現することができます。
- その後、foreachパターンは各パイプラインのステージ内で使用され、データセットの前処理シナリオなどで処理関数を繰り返し呼び出すなど、特定の操作を繰り返し適用するために利用されます。
- このセットアップにより、MLパイプライン内の複雑なワークフローの効率的な管理が可能となります。
以下は、DAGとforeachパターンを活用したMLパイプラインのイラストです。フローチャートは、各ステージ(データ収集、データ前処理、特徴抽出、モデルトレーニング、モデル検証、予測生成)が有向非巡回グラフ(DAG)ノードとして表される機械学習パイプラインを示しています。各ステージ内では、「foreach」パターンがコレクション内の各アイテムに特定の操作を適用するために使用されます。
たとえば、データ前処理の過程で、各データポイントはクリーニングや変換が行われます。ステージ間の有向エッジは依存関係を表し、前のステージが完了するまで、次のステージは開始できないことを示しています。このフローチャートは、DAGアーキテクチャとforeachパターンを使用して、機械学習パイプライン内の複雑なワークフローの効率的な管理を示しています。
ただし、いくつかの欠点もあります。
データや特徴の処理ステージでforeachパターンを利用する場合、操作を実行する前にすべてのデータをメモリに読み込む必要があります。これは、利用可能なメモリリソースを超える可能性がある大量のデータを処理する場合、計算パフォーマンスが低下する可能性があります。たとえば、データセットが数テラバイトの大きさである場合、システムはすべてのデータを同時に読み込もうとすると、メモリ不足になり、遅くなったり、クラッシュしたりする可能性があります。
foreachパターンの別の制限は、データコレクション内の要素の実行順序にあります。foreachパターンは、データがロードされた形と同じ形式で実行順序を保証しません。
foreachパターン内での実行順序の不一致は、データや特徴の処理順序が重要なシナリオで問題となることがあります。たとえば、時系列データセットを処理する場合、データポイントの順序がトレンドやパターンの理解に重要であるため、順序のない実行は正確なモデルのトレーニングや予測に影響を与える可能性があります。
埋め込み
埋め込みデザインパターンとは何ですか?
埋め込みは、伝統的な機械学習パイプラインや現代の機械学習パイプラインに存在するデザインパターンであり、高次元データの低次元表現であり、データの固有の構造の主要な特徴、関係、特性を捉えます。
埋め込みは、通常、浮動小数点数のベクトルとして表され、2つの埋め込みベクトル間の関係や類似性はさまざまな距離測定技術を使用して推測することができます。
機械学習では、埋め込みはモデルトレーニング、計算効率、モデルの解釈性、次元削減など、さまざまな領域で重要な役割を果たします。
埋め込みデザインパターンの実世界の例
GoogleやOpenAIなどの著名な企業は、機械学習パイプライン内のプロセスに存在するいくつかのタスクにおいて埋め込みを活用しています。Googleの主力製品であるGoogle検索は、検索エンジンや推奨エンジンで埋め込みを活用し、高次元ベクトルを文字の意味を捉える低レベルのベクトルに変換します。これにより、検索結果の関連性が検索クエリに対する検索結果の関連性の向上につながります。
一方、OpenAIは、GPT-3などの生成型AIモデルの先駆的な進歩に取り組んでおり、埋め込みを大いに活用しています。これらのモデルでは、埋め込みは入力テキストの単語やトークンを表し、単語間の意味的および構文的な関係を捉えることで、モデルが一貫した文脈に即したテキストを生成できるようにします。OpenAIはまた、埋め込みを強化学習のタスクでも使用し、環境の状態やエージェントのアクションを表します。
埋め込みデザインパターンの利点と欠点
データ表現の埋め込み方法の利点は、いくつかの機械学習タスクと機械学習パイプラインのコンポーネントに適用できることにあります。埋め込みは、コンピュータビジョンタスク、自然言語処理(NLP)タスク、および統計学で利用されます。具体的には、埋め込みは、ニューラルネットワークがデータから特徴を抽出できる形式でトレーニングデータを消費することを可能にします。これは、特に自然言語処理(NLP)や画像認識などのタスクにおいて重要です。さらに、埋め込みは、解釈可能なAIの基本的な側面であるモデルの解釈性に重要な役割を果たし、モデルの内部プロセスを解明するための戦略として使用され、モデルの意思決定プロセスの深い理解を促進します。埋め込みは、主要な情報、パターン、特徴を保持するデータ表現形式としても機能し、高次元データの低次元表現を提供します。
機械学習の文脈では、埋め込みはさまざまな領域で重要な役割を果たします。
- モデルトレーニング: 埋め込みは、ニューラルネットワークがデータから特徴を抽出できる形式でトレーニングデータを消費することを可能にします。自然言語処理(NLP)や画像認識などの機械学習タスクでは、データの初期形式(テキスト内の単語や文、画像や動画内のピクセルなど)は直接的にニューラルネットワークのトレーニングに適していません。ここで埋め込みが重要な役割を果たします。高次元データを実数の密なベクトルに変換することで、埋め込みはネットワークのパラメータ(重みやバイアスなど)が適切にデータセットに適応するための形式を提供します。
- モデルの解釈性: モデルが内部パラメータ、トレーニングデータ、ヒューリスティクスに基づいて予測結果を生成し、これらの予測がどのように推論されたかについての詳細な洞察を提供する能力は、AIシステムの採用を大幅に向上させることができます。説明可能なAIの概念は、予測の背後にあるプロセスを詳細に説明する推論結果と説明の形式を提供するモデルの開発に関わります。モデルの解釈性は、モデルの内部プロセスを解明するために使用される戦略として、モデルの意思決定プロセスのより深い理解を促進する役割を果たします。この透明性は、ユーザーや関係者の信頼構築、モデルのデバッグと改善の容易化、規制要件の遵守を確保する上で重要です。特にNLPタスクでは、文や文内の単語間の意味的な関係を視覚化することで、モデルが提供されたテキスト内容をどのように理解しているかを理解する手段として、埋め込みがモデルの解釈性へのアプローチを提供します。
- 次元削減: 埋め込みは、主要な情報、パターン、特徴を保持するデータ表現形式を提供します。機械学習パイプラインでは、データにはさまざまな次元レベルで捉えられた膨大な情報が含まれています。つまり、データの膨大な量が計算コスト、ストレージ要件、モデルトレーニング、データ処理のすべてを増加させ、次元の呪いシナリオに関連する要素を指しています。埋め込みは、主要なパターンと情報を保持する高次元データの低次元表現を提供します。
- その他のMLパイプラインの領域:転移学習、異常検知、ベクトルの類似性検索、クラスタリングなど
埋め込みは、多くの機械学習タスクにおいて有用なデータ表現手法ですが、データの疎な性質やデータセット内の固有のパターンの欠如により、埋め込みの表現力が制限される場合があります。これが「コールドスタート」問題として知られています。埋め込みは、データセットの要素間のパターンや相関関係を特定して生成されるデータ表現手法ですが、パターンが希少でデータが不十分な状況では、埋め込みの表現上の利点が失われ、レコメンダーやランキングシステムなどの機械学習システムのパフォーマンスが低下します。
低次元のデータ表現の予想される欠点は情報の損失です。高次元のデータから生成された埋め込みは、次元削減の過程で情報の損失に陥ることがあり、機械学習システムやパイプラインのパフォーマンスの低下につながる場合があります。
データ並列処理
データ並列処理とは何ですか?
データ並列処理は、CPUやGPUなどの複数の計算リソースにアクセスできるマシンラーニングパイプラインで使用される戦略です。また、大規模なデータセットを持ちます。この戦略は、大きなデータセットを小さなバッチに分割し、各計算リソースでそれぞれ処理することを含みます。
トレーニングの開始時に、同じ初期モデルパラメータと重みがすべての計算リソースにコピーされます。各リソースがデータのバッチを処理するたびに、それぞれのパラメータと重みを独立して更新します。各バッチが処理された後、これらのパラメータの勾配(または変化)が計算され、すべてのリソースで共有されます。これにより、モデルのすべてのコピーがトレーニング中に同期されることが保証されます。
データ並列処理の実世界の例
データ並列処理の原則が現実のアプリケーションでどのように具現化されるかの実世界のシナリオは、Facebook AI Research(FAIR)エンジニアリングによる画期的な取り組みであるFully Sharded Data Parallel(FSDP)システムです。この革新的なシステムは、大規模なAIモデルのトレーニングプロセスを向上させることを目的としています。これは、AIモデルの変数をデータ並列演算子に分散させながら、トレーニング計算の一部をCPUにオフロードすることによって行います。
FSDPは、パラメータのシャーディングにおける独自のアプローチによって他のシステムとは異なる優れたパフォーマンスを実現しています。これにより、トレーニングに関連する通信と計算を重ねることができます。 FSDPの魅力的な点は、巨大なモデルのトレーニングを最適化する一方で、より少ないGPUを使用することです。
この最適化は、自然言語処理(NLP)やコンピュータビジョンなどの専門分野で特に重要で価値があります。これらの分野では、大規模なモデルのトレーニングがしばしば要求されます。
FSDPの実践的な応用は、Facebookの運用に明らかに見られます。 彼らはFSDPをいくつかのNLPとビジョンモデルのトレーニングプロセスに取り入れており、その有効性を証明しています。さらに、それはFairScaleライブラリの一部であり、開発者やエンジニアがモデルのトレーニングを改善しスケールさせるための簡単なAPIを提供しています。
FSDPの影響は、fairseq(言語モデル)、VISSL(コンピュータビジョンモデル)、PyTorch Lightning(他のさまざまなアプリケーション)など、多くの機械学習フレームワークに及んでいます。この広範な統合は、現代の機械学習パイプラインでデータ並列処理が適用可能で使いやすいことを示しています。
データ並列処理の利点と欠点
- データ並列処理の概念は、機械学習モデルのトレーニング時間を短縮する魅力的なアプローチです。
- 基本的なアイデアは、データセットを細分化し、さまざまな計算プラットフォーム(複数のCPUまたはGPU)でこれらの分割を同時に処理することです。結果として、利用可能な計算リソースを最大限に活用できます。
- データ並列処理をプロセスやMLパイプラインに統合することは困難です。たとえば、異なる計算リソース間でモデルパラメータを同期することは複雑さを増します。特に分散システムでは、この同期による通信の遅延問題によりオーバーヘッドコストが発生する可能性があります。
- さらに、データ並列処理の有用性は、一部の機械学習モデルやデータセットにのみ適用されることに注意することが重要です。一部の再帰ニューラルネットワークなど、順次依存関係を持つモデルは、データ並列処理とはうまく合わない場合があります。
モデル並列処理
モデル並列処理とは何ですか?
モデル並列処理は、ディープラーニングモデルが単一のGPUやCPUインスタンスに保持できないほど大きい場合に、計算リソースを効率的に利用するために機械学習パイプライン内で使用されます。この計算効率は、初期モデルをサブパーツに分割し、それらのパーツを異なるGPU、CPU、またはマシンに保持することによって実現されます。
モデル並列処理の戦略は、モデルの異なる部分を異なる計算リソースにホストします。さらに、モデルの勾配とトレーニングの計算は、各マシンで実行され、初期モデルのそれぞれのセグメントに対して行われます。この戦略は、ディープラーニングの時代に生まれたものであり、モデルが数十億のパラメータを含んでいるため、単一のGPUに保持または保存することができないという特徴があります。
モデル並列処理の実世界の例
現代のディープラーニングモデルは、内部パラメータの数において本質的に大きく、MLパイプラインのトレーニングおよび推論フェーズでモデルパラメータを保持および計算するためにスケーラブルな計算リソースが必要です。たとえば、GPT-3は1750億個のパラメータを持ち、800GBのメモリスペースが必要であり、Metaによって作成されたLLaMAなどの他の基礎モデルは70億から700億のパラメータを持っています。
これらのモデルは、トレーニングフェーズ中に大量の計算リソースを必要とします。モデル並列処理は、モデルの一部を異なる計算リソース上でトレーニングする方法を提供し、各リソースがトレーニングデータのミニバッチでモデルをトレーニングし、割り当てられた元のモデルの部分に対して勾配を計算します。
モデル並列処理の利点と欠点
MLパイプライン内でモデル並列処理を実装することには、独自の課題があります。
- 元のモデルの一部の持ち主であるマシン間での連続的な通信が必要です。モデルの一部の出力が別の部分の入力として使用されるためです。
- さらに、モデルのどの部分をセグメントに分割するかを理解するには、複雑なディープラーニングモデルに対する深い理解と経験、そして多くの場合は特定のモデル自体が必要です。
- 主な利点の一つは、大きなモデルを処理およびトレーニングするために計算リソースを効率的に使用できることです。
フェデレーテッドラーニング
フェデレーテッドラーニングアーキテクチャとは何ですか?
フェデレーテッドラーニングは、機械学習によって可能になる革新的な進展を実現する一方で、プライバシーや機密データの進化する視点も考慮に入れた分散学習のアプローチです。
比較的新しい手法であるフェデレーテッドラーニングは、モデルトレーニングプロセスをデバイスやマシンに分散させることで、データをマシンのプレミスに出さずにモデルをトレーニングすることを試みます。代わりに、ユーザー固有のデータを使用してモデルのコピーでトレーニングされた内部パラメータの更新のみが中央サーバーに転送されます。この中央サーバーは、他のローカルデバイスからのすべての更新を蓄積し、変更を中央サーバー上のモデルに適用します。
フェデレーテッドラーニングアーキテクチャの実世界の例
フェデレーテッドラーニングアプローチでは、ユーザーのプライバシーとデータはユーザーのデバイスやマシンから離れることはありません。これは、データの機密性とアクセスが非常に重要視されるMLパイプラインにおける戦略的なモデルトレーニング手法です。これにより、ユーザーデータをデバイス間でやクラウドストレージソリューションのような中央システムに送信せずに、機械学習機能を提供できます。
フェデレーテッドラーニングアーキテクチャの利点と欠点
フェデレーテッドラーニングは、ユーザーのプライバシーとデータを保護することで、組織をよりデータフレンドリーな未来に導きます。ただし、制限もあります。
- フェデレーテッドラーニングはまだ初期の段階であり、効率的なフェデレーテッドラーニング手順の実装を支援するためのツールや技術は限られています。
- 成熟した組織でフェデレーテッドラーニングを採用するには、MLパイプラインが標準化された状態である必要があり、既存のMLインフラストラクチャを完全に再構築する必要があります。
- さらに、中央モデルの全体的なパフォーマンスは、データの品質や送信速度などのユーザー中心の要素に依存します。
同期トレーニング
同期トレーニングアーキテクチャとは何ですか?
同期トレーニングは、複雑なディープラーニングモデルが異なる計算リソースに分割または分散され、トレーニングプロセス中の一貫性の要件が増加する場合に使用される機械学習パイプライン戦略です。
この文脈では、同期トレーニングは、独立した計算ユニットである「ワーカー」と呼ばれるすべてのユニットの共同作業を含みます。各ワーカーはモデルのパーティションを保持し、均等に分散されたデータの一部を使用してパラメータを更新します。
同期トレーニングの主な特徴は、すべてのワーカーが同期して動作することであり、つまり、すべてのワーカーがトレーニングフェーズを完了するまで、次の操作やトレーニングステップに進むことができません。
同期トレーニングアーキテクチャの実際の例
同期トレーニングは、トレーニングデータを計算リソース全体に均等に分散させ、すべてのリソースで均一な計算能力と低遅延の通信が必要なシナリオやユースケースに関連しています。
同期トレーニングアーキテクチャの利点と欠点
- 同期トレーニングの利点は、一貫性、均一性、精度の向上、およびシンプルさです。
- すべてのワーカーは、次のステップに進む前にトレーニングフェーズを終了するため、すべてのユニットのモデルパラメータの一貫性が保たれます。
- 非同期メソッドと比較して、同期トレーニングは、ワーカーの同期と均一な動作により、各ステップでのパラメータ更新の分散を減少させるため、優れた結果をよく達成します。
- 同期トレーニングの主な欠点は、トレーニングフェーズの長期化です。
- 同期トレーニングでは、次のステップに進む前にすべてのワーカーのタスクを完了する必要があるため、時間効率の問題が発生する可能性があります。
- 特に異種の計算リソースを持つシステムでは、これは効率の低下をもたらす可能性があります。
パラメーターサーバーアーキテクチャ
パラメーターサーバーアーキテクチャとは何ですか?
パラメーターサーバーアーキテクチャは、ワーカー間の依存関係、戦略の実装の複雑さ、一貫性、および同期などの分散機械学習の問題に対処するために設計されています。
このアーキテクチャは、サーバーとクライアントの関係の原則に基づいて動作します。クライアントノードは「ワーカー」と呼ばれ、データの処理、モデルのパーティションの管理、および定義された操作の実行などの特定のタスクが割り当てられます。
一方、サーバーノードは、更新されたモデルパラメータの管理と集約、およびこれらの更新をクライアントノードに伝える責任を持ちます。
パラメーターサーバーアーキテクチャの実際の例
分散機械学習システムの文脈では、パラメーターサーバーアーキテクチャは、効率的かつ調整された学習を実現するために使用されます。このアーキテクチャのサーバーノードは、モデルのパラメータの一貫性を分散システム全体で確保するため、複数のノードまたはワーカー間でモデルパラメータを適切に管理する必要がある大規模な機械学習タスクの処理に適しています。
パラメーターサーバーアーキテクチャの利点と欠点
- パラメーターサーバーアーキテクチャは、サーバーノードとクライアントノードの異なる、定義された責任により、機械学習パイプラインとワークフロー内の高い組織性を実現します。
- この明確な区別により、操作が簡素化され、問題解決が効率化され、パイプラインの管理が最適化されます。
- サーバーノードによるモデルパラメータの保守と一貫性の集中管理により、最新の更新がすべてのクライアントノードまたはワーカーに伝達され、モデルの出力のパフォーマンスと信頼性が向上します。
ただし、このアーキテクチャのアプローチには欠点もあります。
- 最大の欠点は、サーバーノードへの依存によるシステム全体の障害に対する脆弱性です。
- したがって、サーバーノードに何らかの不具合が発生すると、システム全体が機能しなくなる可能性があり、このアーキテクチャの単一障害点の固有のリスクが強調されます。
Ring-AllReduceアーキテクチャ
Ring-AllReduceアーキテクチャとは何ですか?
Ring-AllReduceアーキテクチャは、現代の機械学習パイプラインで利用される分散機械学習トレーニングアーキテクチャです。このアーキテクチャは、大規模で複雑な機械学習モデルが広範なデータセットでトレーニングされる際に、バックプロパゲーションを介して行われる勾配計算とモデルパラメータの更新を管理する方法を提供します。各ワーカーノードは、このアーキテクチャで完全なモデルのパラメータのコピーとトレーニングデータの一部を提供されます。
ワーカーは、トレーニングデータの各パーティションでバックワード伝播中に独自の勾配を計算します。各デバイスのワーカーが、他の独立したワーカーが行った勾配の更新を含むパラメータを持つモデルを持つように、リング構造が適用されます。
これは、リング内の1人のワーカーから次のワーカーに勾配の合計を渡すことによって達成されます。次のワーカーは、自身が計算した勾配を合計に追加し、それを次のワーカーに渡します。このプロセスは、リング内のすべてのワーカーがすべてのワーカーから集約された勾配の完全な合計を持つまで繰り返されます。
リングオールリダクションアーキテクチャの実世界の例
リングオールリダクションアーキテクチャは、分散機械学習トレーニングを必要とするさまざまな実世界のアプリケーションで重要な役割を果たしており、特に大規模なデータセットの処理が必要なシナリオで有効です。たとえば、FacebookやGoogleなどの主要なテック企業は、このアーキテクチャを自社の機械学習パイプラインに統合しています。
FacebookのAI Research(FAIR)チームは、リングオールリダクションアーキテクチャを分散深層学習に活用し、モデルのトレーニング効率を向上させ、広範で複雑なデータセットを効果的に処理しています。GoogleもこのアーキテクチャをTensorFlow機械学習フレームワークに統合しており、深層学習モデルの効率的なマルチノードトレーニングを実現しています。
リングオールリダクションアーキテクチャの利点と欠点
- リングオールリダクションアーキテクチャの利点は、特に大規模なデータセットを扱う場合に、分散機械学習タスクを効率的に管理する戦略であることです。
- 計算リソースの最適な利用を確保することで、効果的なデータ並列処理が可能です。各ワーカーノードはモデルの完全なコピーを保持し、データのサブセットでのトレーニングを担当します。
- リングオールリダクションのもう一つの利点は、複数のデバイス間でモデルパラメータの更新を集約することができることです。各ワーカーはデータのサブセットでトレーニングを行いますが、他のワーカーが計算した勾配の更新も受け取ることができます。
- このアプローチにより、モデルのトレーニングフェーズが加速し、機械学習パイプラインのスケーラビリティが向上し、需要の増加に応じてモデルの数を増やすことができます。
結論
この記事では、パイプラインアーキテクチャ、設計上の考慮事項、主要なテック企業の標準プラクティス、一般的なパターン、およびMLパイプラインの典型的なコンポーネントなど、さまざまな側面をカバーしました。
また、MLパイプラインの構築と維持に必要なツール、手法、およびソフトウェアを紹介し、ベストプラクティスについても議論しました。シングルリーダーアーキテクチャ、有向非循環グラフ、およびForEachパターンなどのアーキテクチャと設計パターンのイラスト入りの概要も提供しました。
さらに、データ並列処理、モデル並列処理、フェデレーテッドラーニング、同期トレーニング、およびパラメータサーバーアーキテクチャなど、分散機械学習の問題に対するユニークなソリューションを提供するさまざまな分散戦略も検討しました。
MLプラクティショナーにとって、長期的なキャリアに焦点を当てる場合、MLパイプラインの機能、スケーリングと適応性の維持、トラブルシューティング対応のインフラストラクチャについて正しく認識することが重要です。この記事が同じ点に関する必要な明確さをもたらしたことを願っています。
参考文献
- Netflix Tech Blog: Meson Workflow Orchestration for Netflix Recommendations
- Netflix. (2022, January 18). Meson workflow orchestration for Netflix recommendations. [Online]. Retrieved from https://netflixtechblog.com/meson-workflow-orchestration-for-netflix-recommendations-fc932625c1d9
- Facebook Engineering: fSDP: A Fast and Scalable Distributed Parallel Programming Framework
- Facebook. (2021, July 15). fSDP: A Fast and Scalable Distributed Parallel Programming Framework. [Online]. Retrieved from https://engineering.fb.com/2021/07/15/open-source/fsdp/
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