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
Runtime AI untuk tugas node tunggal sedang dalam Pratinjau Umum. API pelatihan terdistribusi untuk beban kerja multi-GPU tetap berada di Beta.
Bagian ini mencakup informasi tentang memuat data pada Runtime AI khusus untuk aplikasi ML dan DL. Periksa tutorial untuk mempelajari selengkapnya tentang cara memuat dan mengubah data menggunakan Spark Python API.
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.
Memuat data yang tidak terstruktur dari volume
Untuk data yang tidak terstruktur seperti gambar, audio, dan file teks, gunakan volume Katalog Unity. Contoh berikut menunjukkan cara membaca file dari volume dan menggunakannya dengan PyTorch Dataset:
# Read files from a UC volume
volume_path = "/Volumes/catalog/schema/my_volume/images/"
from torch.utils.data import Dataset
import os
from PIL import Image
class ImageDataset(Dataset):
def __init__(self, root_dir):
self.file_list = [os.path.join(root_dir, f) for f in os.listdir(root_dir)]
def __len__(self):
return len(self.file_list)
def __getitem__(self, idx):
img = Image.open(self.file_list[idx])
return img
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)
...
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 beberapa epok, pendekatan yang direkomendasikan adalah menyalin data terlebih dahulu secara lokal, khususnya ke direktori /tmp, yang dihosting pada penyimpanan NVMe SSD yang cepat.
Jika himpunan data Anda besar, teknik berikut dapat meningkatkan performa:
Cache data secara lokal untuk melakukan pelatihan multi-epoch. Salin himpunan data ke
/tmpuntuk akses yang lebih cepat selama keseluruhan epoch.import shutil shutil.copytree("/Volumes/catalog/schema/volume/dataset", "/tmp/dataset")Paralelisasi pengambilan data. Gunakan torch DataLoader dengan beberapa pekerja paralel untuk melakukan pemuatan data secara bersamaan dengan komputasi GPU. Atur
num_workerske setidaknya 2. Untuk meningkatkan performa, tingkatkannum_workers(yang meningkatkan pembacaan paralel) atauprefetch_factor(yang meningkatkan jumlah item yang diprefetch oleh setiap pekerja):from torch.utils.data import DataLoader loader = DataLoader( dataset, batch_size=32, num_workers=2, prefetch_factor=2, pin_memory=True )Gunakan Spark Connect untuk himpunan data tabular besar. Spark Connect mendukung sebagian besar API PySpark dan menangani bacaan terdistribusi secara efisien.
Aliran data streaming
Untuk himpunan data yang sangat besar yang tidak sesuai dengan memori, gunakan pendekatan streaming:
- 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.