Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Fitur ini ada di Pratinjau Umum.
Muat data pelatihan pada Runtime AI untuk pembelajaran mesin dan beban kerja pembelajaran mendalam. Semua akses data melewati Unity Catalog: gunakan Spark Connect untuk membaca data tabular dari tabel Delta, dan volume Unity Catalog untuk himpunan data besar dan file yang tidak terstruktur seperti gambar, audio, dan teks. Untuk pelatihan multi-epoch, simpan data dalam cache secara lokal ke /tmp agar akses lebih cepat. Untuk mempelajari cara memuat dan mengubah data dengan Spark Python API, lihat tutorial.
Nota
Katalog Unity diperlukan. Semua akses data pada Runtime AI melewati Unity Catalog. Tabel dan volume Anda harus terdaftar di Unity Catalog dan dapat diakses oleh pengguna atau perwakilan layanan Anda.
Memuat data tabular
Gunakan Spark Connect untuk memuat data pembelajaran mesin tabular dari tabel Delta.
Untuk pelatihan node tunggal, Anda dapat mengonversi Apache Spark DataFrames menjadi pandas DataFrames menggunakan metode toPandas(), lalu secara opsional mengonversi ke format NumPy menggunakan metode to_numpy().
Nota
Spark Connect menunda analisis dan resolusi nama ke waktu eksekusi, yang dapat mengubah perilaku kode Anda. Lihat Membandingkan Spark Connect dengan Spark Classic.
Spark Connect mendukung sebagian besar API PySpark, termasuk Spark SQL, Pandas API di Spark, Structured Streaming, dan MLlib (berbasis DataFrame). Lihat dokumentasi referensi API PySpark untuk API terbaru yang didukung.
Untuk batasan lain, lihat Batasan komputasi tanpa server.
Memuat tabel Delta besar menggunakan volume
Untuk tabel Delta besar yang terlalu besar untuk dikonversi dengan toPandas(), ekspor data ke volume Unity Catalog dan muat langsung menggunakan PyTorch atau Hugging Face:
# Step 1: Export the Delta table to Parquet files in a UC volume
output_path = "/Volumes/catalog/schema/my_volume/training_data"
spark.table("catalog.schema.my_table").write.mode("overwrite").parquet(output_path)
# Step 2: Load the exported data directly using Hugging Face datasets
from datasets import load_dataset
dataset = load_dataset("parquet", data_files="/Volumes/catalog/schema/my_volume/training_data/*.parquet")
Pendekatan ini menghindari overhead Spark selama pelatihan dan bekerja dengan baik untuk GPU tunggal dan alur kerja pelatihan terdistribusi.
Muat data yang tidak terstruktur dari volume dengan UCVolumeDataset
Untuk data yang tidak terstruktur seperti gambar, audio, dan file teks yang disimpan dalam volume Katalog Unity, gunakan UCVolumeDataset dari serverless_gpu.data paket.
UCVolumeDataset adalah PyTorch IterableDataset yang menyalin setiap file dari volume ke cache lokal yang cepat pada akses pertama dan menghasilkan jalur file lokal yang di-cache. Ini mengatasi persoalan kinerja dan distribusi yang jika tidak demikian harus Anda implementasikan secara manual:
- Cache lokal. File-file disalin dari mount FUSE ke direktori cache lokal saat pertama kali diakses, lalu selanjutnya diambil dari cache, sehingga pelatihan multi-epoch tidak perlu membaca ulang volume.
- Pemartisian otomatis. Ketika
torch.distributeddiinisialisasi, berkas dipartisi di antara rank lalu dibagi lagi ke dalam pekerjaDataLoader, sehingga setiap pasangan(rank, worker)menerima bagian yang tidak saling tumpang tindih tanpa konfigurasi tambahan.
Nota
UCVolumeDataset dan serverless_gpu.data.DataLoader memerlukan lingkungan GPU 5 atau lebih tinggi.
UCVolumeDataset menghasilkan jalur file lokal mentah. Untuk mendekode file-file tersebut menjadi tensor, bungkus dengan IterableDataset kedua yang menerima aliran jalur dan menerapkan logika parsing Anda. Ini menjaga I/O dan penguraian tetap terpisah.
from serverless_gpu.data import UCVolumeDataset
from torch.utils.data import IterableDataset
from PIL import Image
import torchvision.transforms.functional as TF
class ImageDataset(IterableDataset):
"""Decodes each cached file path from UCVolumeDataset into a tensor."""
def __init__(self, path_dataset: UCVolumeDataset):
self._path_dataset = path_dataset
def __iter__(self):
for local_path in self._path_dataset:
image = Image.open(local_path).convert("RGB")
yield TF.to_tensor(image)
path_dataset = UCVolumeDataset("/Volumes/catalog/schema/my_volume/images")
dataset = ImageDataset(path_dataset)
Komponen pembungkus menerima jalur lokal yang sudah disimpan dalam cache, sehingga tahap penguraian tidak pernah menyentuh mount FUSE. Anda dapat menautkan pembungkus tambahan untuk augmentasi, tokenisasi, atau pemfilteran.
Untuk kinerja optimal, gunakan UCVolumeDataset bersama serverless_gpu.data.DataLoader alih-alih DataLoader bawaan PyTorch. Ini disetel untuk I/O GPU tanpa server dan mengambil dan menyimpan file secara bersamaan saat GPU menghitung. Lihat Performa pemuatan data.
Memuat data dalam dekorator @distributed
Saat menggunakan API GPU Tanpa Server untuk pelatihan terdistribusi, pindahkan kode pemuatan data di dalam dekorator @distributed . Ukuran himpunan data dapat melebihi ukuran maksimum yang diizinkan oleh pickle, sehingga disarankan untuk membuat himpunan data di dalam dekorator, seperti yang ditunjukkan di bawah ini:
from serverless_gpu import distributed
# This may cause a pickle error if the dataset is too large
dataset = get_dataset(file_path)
@distributed(gpus=8, gpu_type='H100')
def run_train():
# Load data inside the decorator to avoid pickle serialization issues
dataset = get_dataset(file_path)
...
Saat Anda membuat UCVolumeDataset di dalam dekorator, ia membaca torch.distributed informasi peringkat pada waktu iterasi dan mempartisi file di seluruh peringkat secara otomatis, sehingga Anda tidak memerlukan DistributedSampler untuk data volume berbasis file.
Performa pemuatan data
/Workspace dan /Volumes direktori dihosting pada penyimpanan Katalog Unity jarak jauh. Jika himpunan data Anda disimpan di Unity Catalog, kecepatan pemuatan data dibatasi oleh bandwidth jaringan yang tersedia. Jika Anda melatih model selama beberapa epoch, pendekatan yang direkomendasikan adalah menggunakan UCVolumeDataset, yang melakukan cache ini untuk Anda: komponen ini menyalin setiap file ke penyimpanan lokal saat pertama kali diakses dan menyajikan pembacaan berikutnya dari salinan lokal. Untuk himpunan data dalam volume, sebaiknya gunakan ini daripada penyalinan manual shutil.copytree, yang menyalin seluruh struktur direktori di awal meskipun pelatihan hanya menggunakan sebagian darinya.
Jika himpunan data Anda besar, teknik berikut dapat meningkatkan throughput:
Gunakan
serverless_gpu.data.DataLoaderuntuk menjalankan pengambilan data secara paralel. Ini adalah subkelas yang dapat langsung digunakan dari torchDataLoaderyang dioptimalkan untuk I/O GPU serverless:num_workersnilai defaultnya 6 danprefetch_factor4 (dibandingkan dengan 0 dan 2 di PyTorch), sehingga file diambil dan di-cache secara bersamaan saat GPU melakukan komputasi. Ini juga mencatat waktu pengambilan data per batch ke dalam run MLflow yang aktif, yang membantu Anda mengidentifikasi hambatan dalam pemuatan data.from serverless_gpu.data import DataLoader loader = DataLoader( dataset, batch_size=32, pin_memory=True, # num_workers=6, by default # prefetch_factor=4, by default # raise num_workers to increase parallel reads, or prefetch_factor to deepen each worker's queue. )Semua rank harus menggunakan nilai
num_workersyang sama, karenaUCVolumeDatasetmempartisi file menggunakan stride global ke seluruhworld_size × num_workersslot. Nilai yang tidak cocok menyebabkan file diduplikasi atau dilewati.Tingkatkan ukuran batch. Batch yang lebih besar membagi overhead pemuatan data per batch ke lebih banyak sampel dan mengurangi jumlah operasi pengambilan file pada setiap langkah. Jika memori GPU adalah faktor pembatas, gabungkan ukuran batch yang lebih besar dengan akumulasi gradien untuk mempertahankan ukuran batch yang efektif.
Aliran data streaming
Untuk himpunan data yang sangat besar yang tidak sesuai dengan memori, gunakan pendekatan streaming:
-
UCVolumeDatasetdariserverless_gpu.datauntuk melakukan streaming file dari volume Katalog Unity dengan cache lokal dan partisi terdistribusi otomatis. Lihat Memuat data yang tidak terstruktur dari volume denganUCVolumeDataset. - PyTorch IterableDataset untuk logika streaming kustom.
- Dataset Hugging Face dengan streaming untuk dataset yang di-hosting di Hub atau volume.
- Ray Data untuk pemrosesan data batch terdistribusi.