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

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

翻訳者 | 李睿

校正 | 梁哲、孫淑娟

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

データおよび 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の「不可能の三角形」を突破する

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

推薦する

...

行動バイオメトリクスと機械学習が顧客関係を改善する方法

行動バイオメトリクスは、トラブルのない認証を実現し、世界中の消費者の体験に革命をもたらす画期的なテク...

Google Chat GPT は、メールを読んだり、予定をスケジュールしたり、フライトやホテルをワンクリックで予約したりできます。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

EasyDL Professional Notebookモデリング機能の詳しい説明

Jupyter Notebook は、開発やドキュメントの作成からコードの実行、結果の表示まで、コン...

顔スキャンの時代、顔認識起業家の進むべき道

[[205201]] 9月26日、北京市内の中学校で、顔認証システムで本人確認がされた受験者が模擬試...

...

...

最新の! 2018年中国プログラマーの給与と生活に関する調査レポート

中国インターネット情報センター(CNNIC)が発表した第41回中国インターネット発展統計報告によると...

未来を予測しますか? GoogleはAIモデルを使って「リアルタイム」の天気予報を実現

人類にとって、時間は常に最大の敵であり、時間を超越することは常に人類の夢でした。「未来を予測する」こ...

Madlib を使用して「機械学習」で KNN を学習する

序文機械学習(ML)は、教師あり学習、教師なし学習、半教師あり学習などに分けられます。 1.1 教師...

ロボットが家庭に入り込み、家事を引き受け始めています。あなたのお気に入りはどれですか?

【網易知能ニュース 3月18日】次回チェルシーでディナーを楽しんだ際、スーパーヨットの執事の慎重な...

ADMap: 干渉防止オンライン高精度マップへの新しいアプローチ

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

時代遅れにならないで、機械学習プラットフォームこそが未来だ

機械学習と人工知能の急速な発展に伴い、業界では多くのオープンソースの機械学習プラットフォームが登場し...

EUのAI法案は企業に厳しい規則と巨額の罰金をもたらす

EUが長らく議論されてきたEU AI法案を前進させ、AIの使用に関するガードレールを導入しようと最近...

...