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

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

翻訳者 | 李睿

校正 | 梁哲、孫淑娟

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

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

ブログ    
ブログ    
ブログ    

推薦する

サービスロボットは驚異的なユニコーンを生み出すことができるか?

サービスロボットはニッチな領域を超えつつあるようだ。まず、2018年の世界ロボット産業の市場規模は2...

既存のビッグデータ技術を使用して機械学習プラットフォームを構築する方法

[[210160]]機械はどのように学習するのでしょうか?人間の脳は継続的に経験を蓄積する能力があり...

...

未来のスマートシティ: 必須のテクノロジー 10 選

スマート シティは単なる概念や未来の夢ではなく、今や現実のものとなっています。モノのインターネット、...

ドイツのハッカーはレンタルしたコンピュータリソースを使ってハッシュアルゴリズムを攻撃する

ドイツのセキュリティ愛好家が、レンタルしたコンピュータ リソースを使用して、SHA1 ハッシュ アル...

利便性を超えて:スマートホームは信頼できるのか?

映画鑑賞の夜に快適なアームチェアに腰を下ろすと、プロジェクターが起動し、スマートライトが自動的に暗く...

Googleの研究ディレクターはスタンフォード大学で教鞭をとり、「人工知能:現代的アプローチ」の著者でもある。

スタンフォード大学は10月11日、Googleリサーチディレクターのピーター・ノーヴィグ氏がスタンフ...

人工知能とモノのインターネット:スマートシティの交通管理

今日のスマート シティは、都市部を再形成する高度なテクノロジーによって推進されています。人工知能とモ...

45年前のマイクロソフトの予測が現実になりました!シャム:将来、AIの数は人類の人口を上回るだろう

本日開催された第8世代XiaoIce発表会で、XiaoIce会長で元マイクロソフトのグローバルエグゼ...

人工知能はデータを「食べる」

機械学習 (ML) プロジェクトに取り組んだことがある人なら、機械学習ではアルゴリズムをトレーニング...

...

...

...