サーバレス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 で許可される最大サイズを超える可能性があるため、次に示すように、デコレータ内でデータセットを生成することをお勧めします。
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(各ワーカーがプリフェッチするアイテムの数が増加します)を増やします。