メインコンテンツまでスキップ

サーバレスGPUコンピュートにデータをロード

このセクションでは、特にMLおよび DL アプリケーション向けのサーバレス GPU コンピュートへのデータのロードに関する情報を説明します。 Spark Python API を使用してデータをロードおよび変換する方法の詳細については、チュートリアルを確認してください。

表形式データを読み込む

Spark Connect を使用して、 Delta テーブルから表形式の機械学習データを読み込みます。

単一ノードのトレーニングでは、 PySparkメソッドtoPandas()を使用してApache Spark DataFrames Pandas DataFramesに変換し、必要に応じてPySparkメソッドto_numpy()を使用してNumPy形式に変換できます。

注記

Spark Connect は分析と名前解決を実行時まで延期するため、コードの動作が変わる可能性があります。「Spark Connect と Spark Classic の比較」を参照してください。

Spark Connect は、 Spark SQL 、 Spark上のPandas API 、構造化ストリーミング、 MLlib (DataFrame ベース) など、ほとんどのPySpark APIsサポートします。 サポートされている最新のAPIsについては、 PySpark APIリファレンス ドキュメントを参照してください。

その他の制限については、 「 サーバレス コンピュートの制限 」を参照してください。

@distributed デコレータ内でデータをロードする

分散トレーニングにサーバレス GPU API使用する場合は、データ読み込みコードを@distributedデコレータ内に移動します。 データセットのサイズは pickle で許可される最大サイズを超える可能性があるため、次に示すように、デコレータ内でデータセットを生成することをお勧めします。

Python
from serverless_gpu import distributed

# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, remote=True)
def run_train():
# good practice
dataset = get_dataset(file_path)
....

データ読み込みパフォーマンス

/Workspace /VolumesディレクトリはリモートUnity Catalogストレージでホストされています。 データセットが Unity Catalog に保存されている場合、データの読み込み速度は利用可能なネットワーク帯域幅によって制限されます。複数のエポックをトレーニングする場合は、最初にデータをローカルに、具体的には超高速ストレージ (NVMe SSD ディスク) でホストされている/tmpディレクトリにコピーすることをお勧めします。

データセットが大きい場合は、トレーニングとデータの読み込みを並列化するために次の手法も推奨されます。

  • 複数のエポックをトレーニングする場合は、各ファイルを読み取る前にデータセットを更新して、ファイルを/tmpディレクトリにローカルにキャッシュします。後続のエポックでは、キャッシュされたバージョンを使用します。
  • torch DataLoader API でワーカーを有効にして、データ取得を並列化します。num_workers少なくとも 2 に設定します。デフォルトでは、各ワーカーは 2 つの作業項目をプリフェッチします。パフォーマンスを向上させるには、 num_workers (並列読み取りが増加)またはprefetch_factor (各ワーカーがプリフェッチするアイテムの数が増加します)を増やします。