機械学習パイプラインのデータをオーケストレーションする方法

機械学習パイプラインのデータをオーケストレーションする方法

翻訳者 | 李睿

校正 | 梁哲、孫淑娟

機械学習のワークロードでは、結果を迅速に生成するために効率的なインフラストラクチャが必要であり、モデルのトレーニングは大規模なデータセットに大きく依存します。すべての機械学習ワークフローにおいて、最初のステップは、このデータをストレージからトレーニング クラスターに一元化することであり、これはモデル トレーニングの効率にも大きな影響を与えます。

データおよび AI プラットフォーム エンジニアは、長い間、次の質問を考慮してデータを管理してきました。

  • データのアクセシビリティ:データが複数のソースにまたがり、リモートで保存されている場合に、トレーニング データにアクセスできるようにするにはどうすればよいでしょうか。
  • データ パイプライン:待機せずにトレーニング ワークフローに継続的にフィードするパイプラインとしてデータをどのように管理しますか?
  • パフォーマンスと GPU 使用率: GPU がアイドル状態にならないように、メタデータのレイテンシを低く抑えながらデータ スループットを高くするにはどうすればよいでしょうか。

この記事では、上記の問題に対処するために、エンドツーエンドの機械学習パイプラインでデータをオーケストレーションするための新しいソリューションについて説明します。この記事では、一般的な課題と落とし穴を概説し、機械学習のデータ パイプラインを最適化するためにデータをオーケストレーションする新しい手法を紹介します。

モデルトレーニングにおける一般的なデータの課題

エンドツーエンドの機械学習パイプラインは、データの前処理、クリーニング、モデルのトレーニングから推論までの一連のステップであり、その中でもモデルのトレーニングはワークフロー全体の中で最も重要でリソースを大量に消費する部分です。

次の図は、典型的な機械学習パイプラインです。まずデータの収集から始まり、次にデータの準備、最後にモデルのトレーニングが行われます。データ収集フェーズでは、データ プラットフォーム エンジニアは通常、データ エンジニアがデータにアクセスできるようにするために多くの時間を費やします。データ エンジニアは、データ サイエンティストがモデルを構築して反復処理できるようにデータを準備する必要があります。

トレーニング フェーズでは、モデルを生成する GPU にデータが継続的に供給されるように、大量のデータを処理する必要があります。機械学習の複雑さとそれを実行できるアーキテクチャをサポートするには、データを管理する必要があります。データ パイプラインでは、各ステップごとに対応する技術的な課題が生じます。

(1)データ収集の課題:データはどこにでもある

機械学習のトレーニングには大規模なデータセットが必要なので、関連するすべてのソースからデータを収集することが重要です。データがデータ レイク、データ ウェアハウス、オブジェクト ストアに保存されている場合 (オンプレミス、クラウド、または複数の地理的な場所に分散されているかどうかに関係なく)、すべてのデータを 1 つのソースに結合することはもはや現実的ではありません。データ サイロの場合、ネットワーク経由のリモート アクセスによって必然的に遅延が発生します。したがって、必要なパフォーマンスを維持しながらデータにアクセスできるようにすることが大きな課題となります。

(2)データ準備の課題:シリアル化されたデータ準備

データの準備は、クレンジング、ETL、変換などのデータの取り込みから始まり、その後、モデルをトレーニングするためのデータが提供されます。このフェーズが十分に考慮されていない場合、データ パイプラインがシリアル化され、トレーニング クラスター用にデータが準備されるのを待つ余分な時間が無駄になります。したがって、プラットフォーム エンジニアは、並列化されたデータ パイプラインを作成し、効率的なデータ共有と中間結果の効率的な保存を可能にする方法を理解する必要があります。

(3)モデルトレーニングの課題:I/OとGPUが十分に活用されていない

モデルのトレーニングでは、数百 TB のデータ (通常は画像や音声ファイルなどの多数の小さなファイル) を処理する必要があります。トレーニングには多くのエポックを必要とする反復が含まれるため、データに頻繁にアクセスすることになります。 GPU に常にデータを供給して GPU をビジー状態にしておくことが必要ですが、I/O を最適化して GPU に必要なスループットを維持することも簡単ではありません。

伝統的な方法とよくある落とし穴

さまざまな解決策について説明する前に、下の図に示すように、単純化されたシナリオを設定しましょう。ここでは、機械学習フレームワークとして TensorFlow を実行する複数のノードを備えたクラウドでのトレーニングに GPU クラスターを使用します。前処理されたデータは Amazon S3 に保存されます。一般に、このデータをトレーニング クラスターに転送する方法は 2 つあり、以下で説明します。

方法1: ローカルストレージにデータをコピーする

最初のアプローチでは、次の図に示すように、データセット全体がトレーニングのためにリモート ストレージから各サーバーのローカル ストレージにコピーされます。したがって、データの局所性が保証され、トレーニング ジョブは入力をリモート ストレージから取得するのではなく、ローカルで読み取ります。

データ パイプラインと I/O の観点から見ると、このアプローチではすべてのデータがローカルであるため、最高の I/O スループットが実現されます。初期フェーズを除き、トレーニングではデータがオブジェクト ストレージからトレーニング クラスターに完全にコピーされるまで待機する必要があるため、GPU はビジー状態のままになります。

しかし、このアプローチはすべての状況で機能するわけではありません。

まず、データセットは集約ローカルストレージに適している必要があります。入力データセットのサイズが大きくなるにつれて、データのコピー プロセスが長くなり、エラーが発生しやすくなり、より多くの時間と GPU リソースが浪費されます。

2 番目に、各トレーニング マシンに大量のデータをコピーすると、ストレージ システムとネットワークに大きな負担がかかります。入力データが頻繁に変更される場合、データの同期は非常に複雑になる可能性があります。

最後に、クラウド ストレージ上のデータをトレーニング データと同期させる必要があるため、データを手動でコピーすると時間がかかり、エラーが発生しやすくなります。

方法2: クラウドストレージに直接アクセスする

もう 1 つの一般的なアプローチは、下の図に示すように、トレーニングをリモート ストレージ上のターゲット データセットに直接連結することです。このアプローチは、以前のソリューションと同様に、データセットのサイズに関する問題はありませんが、いくつかの新たな課題も生じます。

まず、I/O とパイプラインの観点から、データはシリアルに処理されます。すべてのデータ アクセス操作は、オブジェクト ストレージとトレーニング クラスター間のネットワークを経由する必要があるため、I/O がボトルネックになります。したがって、I/O スループットがネットワークによって制限されるため、GPU は待機し、時間を無駄にします。

次に、トレーニングの規模が大きい場合、すべてのトレーニング ノードが同じリモート ストレージから同じデータセットに同時にアクセスするため、ストレージ システムに大きな負荷がかかります。同時アクセスが多いとストレージが混雑し、GPU の使用率が低下する可能性があります。

3 番目に、データセットに多数の小さなファイルが含まれている場合、メタデータ アクセス要求がデータ要求の大部分を占めることになります。そのため、オブジェクト ストレージから多数のファイルやディレクトリのメタデータを直接取得すると、パフォーマンスのボトルネックとなり、メタデータの運用コストが増加します。

推奨されるアプローチ - データのマーシャリング

これらの課題と落とし穴に対処するには、機械学習パイプラインで I/O を処理する際のデータ プラットフォーム アーキテクチャを再考する必要があります。ここでは、エンドツーエンドの機械学習パイプラインを加速するための新しいアプローチであるデータ オーケストレーションをお勧めします。データ オーケストレーション テクノロジーは、すべてのデータを仮想化し、標準化された API とグローバル名前空間を通じてデータ駆動型アプリケーションに提示しながら、ストレージ システム全体のデータ アクセスを抽象化します。

(1)抽象化を利用してデータサイロを統合する

データをコピーして移動するのではなく、オンプレミスまたはクラウドのいずれかの場所にそのまま保存する方が適切です。データ オーケストレーションは、データを抽象化して統一されたビューを作成するのに役立ちます。これにより、データ収集フェーズの複雑さが大幅に軽減されます。

データ オーケストレーションはすでにストレージ システムと統合できるため、機械学習フレームワークは、接続されたストレージからデータにアクセスするために、単一のデータ オーケストレーション プラットフォームと対話するだけで済みます。したがって、あらゆるソースのデータをトレーニングに使用できるため、モデルの品質が向上します。同時に、中央ソースへの手動のデータ移動も必要ありません。 Spark、Presto、PyTorch、TensorFlow などのすべてのコンピューティング フレームワークは、データの場所を気にすることなくデータにアクセスできます。

(2)データの局所性を保つために分散キャッシュを使用する

データセット全体をすべてのマシンに複製するのではなく、クラスター全体にデータを均等に分散できる分散キャッシュを実装することをお勧めします。分散キャッシュは、トレーニング データセットが単一ノードのストレージ容量よりもはるかに大きい場合に特に役立ちます。データはローカルにキャッシュされるため、データがリモートの場所から来る場合にも役立ちます。データにアクセスするときにネットワーク I/O がないため、機械学習のトレーニングがより高速になり、コスト効率が向上します。

上の図は、すべてのトレーニング データが保存されているオブジェクト ストレージと、データセットを表す 2 つのファイル (/path1/file1 と /path2/file2) を示しています。すべてのファイル チャンクを各トレーニング マシンに保存するのではなく、チャンクを複数のマシンに分散できます。データの損失を防ぎ、読み取りの同時実行性を向上させるために、各ブロックを複数のサーバーに同時に保存できます。

(3)パイプライン間のデータ共有の最適化

機械学習 (ML) トレーニング ジョブでは、ジョブ内およびジョブ間で実行されるデータの読み取りと書き込みの間にかなりの重複があります。データ共有により、すべてのコンピューティング フレームワークが、次の読み取りおよび書き込みワークロードで以前にキャッシュされたデータにアクセスできるようになります。たとえば、データ準備ステップで ETL に Spark を使用する場合、データ共有により出力データがキャッシュされ、次のステージで使用できるようになります。データ共有により、データ パイプライン全体のエンドツーエンドのパフォーマンスが向上します。

(4)データのプリロード、キャッシュ、トレーニングを並列化してデータパイプラインをオーケストレーションする

プリロードとオンデマンド キャッシュを実行することで、データ パイプラインを調整できます。下の図に示すように、データ キャッシュを使用してソースからデータをロードすることは、実際のトレーニング タスクと並行して実行できます。したがって、トレーニング前に完全なデータがキャッシュされるのを待つ必要がなく、データにアクセスするときに高いデータ スループットのメリットが得られます。

最初は I/O 待ち時間が発生しますが、データはすでにキャッシュにロードされているため、待機時間は短縮されます。このアプローチにより、繰り返しのステップが削減され、オブジェクト ストレージからトレーニング クラスターへのデータの読み込み、キャッシュ、トレーニングに必要なデータの読み込み、トレーニングがすべて並行して完了するため、プロセス全体が大幅に高速化されます。

機械学習パイプラインのステップ全体でデータをオーケストレーションすることで、データが 1 つのステージから次のステージに流れる際のシリアル実行とそれに伴う非効率性が排除され、GPU の使用率も向上します。次の表は、この新しいアプローチと 2 つの従来のアプローチを比較したものです。

機械学習ワークロード向けにデータをオーケストレーションする方法

ここでは、Alluxio を例に、データ オーケストレーションの使用方法を説明します。ここでも、上記の簡略化されたシナリオを使用します。 TensorFlow ジョブをスケジュールするには、Kubernetes またはパブリック クラウド サービスを使用できます。

Alluxio を使用して機械学習とディープラーニングのトレーニングをオーケストレーションするには、通常、次の 3 つのステップが必要です。

(1)トレーニングクラスターにAlluxioをデプロイします。

(2)Alluxioをトレーニングジョブ用のローカルフォルダとしてマウントします。

(3)トレーニングスクリプトを使用して、ローカルフォルダ(Alluxioによってバックアップ)からデータをロードします。

異なるストレージ システム内のデータは、マウント後すぐに Alluxio を介してアクセスでき、TensorFlow を変更することなくベンチマーク スクリプトによって透過的にアクセスできます。これにより、それぞれの特定のストレージ システムとの統合や資格情報の構成が必要となるアプリケーション開発プロセスが大幅に簡素化されます。

Alluxio と TensorFlow を使用して画像認識を実行するには、ここの手順に従ってください。

データオーケストレーションのベストプラクティス

万能のアプローチは存在しないため、データ オーケストレーションは次のシナリオで使用するのが最適です。

  • 分散トレーニングが必要です。
  • 特にトレーニング データに小さなファイルや画像が多数含まれている場合は、トレーニング データが大量 (10 TB 以上) になります。
  • GPU リソースはネットワーク I/O によって十分に活用されません。
  • パイプラインは、多くのデータ ソースと複数のトレーニング/コンピューティング フレームワークを使用します。
  • 追加のトレーニング要求を処理する間、基盤となるストレージは安定している必要があります。
  • 複数のトレーニング ノードまたはタスクが同じデータセットを使用します。

機械学習技術が進歩し、フレームワークがより複雑なタスクを実行するようになるにつれて、データ パイプラインを管理する方法も改善され続けます。データ オーケストレーションをデータ パイプラインに拡張することで、エンドツーエンドのトレーニング パイプラインの効率とリソース使用率を向上させることができます。

原題:機械学習パイプラインのためのデータのオーケストレーション、著者: Bin Fan、InfoWorld


<<:  2022 年にゲームを変える AI と ML テクノロジーのトップトレンド

>>:  Microsoft の Zhu Chenguang: 事前トレーニング済みモデルの次のステップは何ですか? PLMの「不可能の三角形」を突破する

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ハイパーオートメーションはビジネスの未来か?企業にとって何ができるのでしょうか?

ロボティックプロセスオートメーション、人工知能、機械学習などの新しいテクノロジーを組み合わせることで...

自動化から拡張現実まで: 製造業を混乱させる 12 の革新的なテクノロジー トレンド

製造業は、自動車、電子機器、医療機器、機械、その他のシステムの部品を生産する上で重要な役割を果たして...

国内大学がSORA型VDTを開発、汎用ビデオ拡散トランスフォーマーがICLR2024に採択

2月16日のOpenAI Soraのリリースは、間違いなくビデオ生成の分野における大きな進歩を示しま...

...

未来の戦場は「瞬殺」の時代へ、人工知能が威力を発揮

近年、人工知能技術は飛躍的な進歩を遂げ、戦闘指揮の分野で広く応用され、観察・判断・決定・行動(OOD...

GPT-4 脳を解読する 0 コード!海外のネットユーザーがLLMのガードレールを突破し、AIに段階的に爆弾を作らせる

ネットユーザーが何か新しいものを思いつきました! OpenAI は大規模言語モデルの安全ガードレール...

梅の花の山の上を歩くロボット犬?自転車は自分でバランスをとることができますか?テンセント・ロボティクスXラボ研究初の「開封」

テンセントは11月20日、移動ロボット研究における新たな進展を発表し、四足移動ロボット「ジャモカ」と...

メンガー: 大規模分散強化学習アーキテクチャ

過去 10 年間で、強化学習 (RL) は機械学習で最も人気のある研究分野の 1 つになりました。R...

マイクロソフトとIDCの最新レポート:AIへの1ドル投資で3.5ドルの利益が生まれる

Microsoft と IDC は共同で、企業における AI の応用と商業的価値を詳細に調査した調査...

データセキュリティの向上と人工知能の信頼性の向上

JD Discovery Research InstituteのTao Dacheng所長はかつて、...

サイボーグの時代が到来すると予想される:人間の体が機械に置き換えられる時代

ロボット工学ジャーナリストで専門家のクリス・ミドルトン氏は、早ければ2070年には私たちの体全体がロ...

...

...

商用 AI をマスターする: RAG と CRAG を使用したエンタープライズ レベルの AI プラットフォームの構築

当社のガイドで、ビジネスに AI の力を活用する方法を学びましょう。 RAG と CRAG の統合、...

AIで生成された出版物の急増により、Amazonは書籍の著者に作品でのAIの使用をプラットフォームに通知することを義務付けている。

9月10日、AP通信は、全米作家組合やその他の団体から何か月にもわたる苦情を受けて、アマゾンのファ...