Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Modul runtime AI pro úlohy s jedním uzlem je ve verzi Public Preview. Distribuované trénovací rozhraní API pro úlohy s více GPU zůstává v beta verzi.
Tato část popisuje informace o načítání dat v modulu runtime AI speciálně pro aplikace ML a DL. V tomto kurzu se dozvíte více o tom, jak načíst a transformovat data pomocí rozhraní Spark Python API.
Poznámka:
Vyžaduje se katalog Unity. Veškerý přístup k datům v modulu runtime AI prochází katalogem Unity. Vaše tabulky a svazky musí být zaregistrované v katalogu Unity a přístupné vašemu uživateli nebo služebnímu principálu.
Načítání tabulkových dat
Použijte Spark Connect k načtení tabulkových dat strojového učení z tabulek Delta.
Pro trénování s jedním uzlem můžete datové rámce Apache Sparku převést na datové rámce pandas pomocí metody toPandas() a pak volitelně převést na formát NumPy pomocí metody to_numpy().
Poznámka:
Spark Connect odkládá analýzu a řešení názvů na dobu provádění, což může změnit chování vašeho kódu. Viz Porovnání Spark Connect s Klasickým Sparkem.
Spark Connect podporuje většinu rozhraní API PySpark, včetně Spark SQL, rozhraní Pandas API ve Sparku, strukturovaném streamování a knihovně MLlib (založené na datovém rámci). Nejnovější podporovaná rozhraní API najdete v referenční dokumentaci k rozhraní API PySpark .
Další omezení najdete v tématu Omezení výpočetních prostředků bez serveru.
Načtení velkých tabulek Delta pomocí objemů
U velkých tabulek Delta, které jsou příliš velké na převod s toPandas(), exportujte data do svazku katalogu Unity a načtěte je přímo pomocí PyTorch nebo 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")
Tento přístup eliminuje režijní zátěž softwaru Spark během trénování a dobře funguje jak pro pracovní postupy s jednou GPU, tak pro distribuované tréninkové workflow.
Načtení nestrukturovaných dat ze svazků
Pro nestrukturovaná data, jako jsou obrázky, zvuk a textové soubory, použijte svazky katalogu Unity. Následující příklad ukazuje, jak číst soubory ze svazku a používat je s 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
Načtení dat uvnitř dekorátoru @distributed
Při použití Serverless GPU API pro distribuované trénování přesuňte kód načítání dat do dekorátoru @distributed. Velikost datové sady může překročit maximální velikost povolenou funkcí pickle, takže je doporučeno vygenerovat datovou sadu uvnitř dekorátoru, jak je znázorněno níže:
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)
...
Výkon načítání dat
/Workspace a /Volumes adresáře jsou hostované ve vzdáleném úložišti Katalogu Unity. Pokud je vaše datová sada uložená v katalogu Unity, rychlost načítání dat je omezená dostupnou šířkou pásma sítě. Pokud trénujete více epoch, doporučeným přístupem je nejprve zkopírovat data místně, konkrétně do /tmp adresáře, který je hostovaný v rychlém úložišti SSD NVMe.
Pokud je vaše datová sada velká, můžou zvýšit výkon následující techniky:
Data můžete ukládat do mezipaměti místně pro více epochové trénování. Zkopírujte datové sady do
/tmppro rychlejší přístup napříč epochami.import shutil shutil.copytree("/Volumes/catalog/schema/volume/dataset", "/tmp/dataset")Paralelizace načítání dat Pomocí torch DataLoaderu s více pracovními procesy můžete překrývat načítání dat pomocí výpočtů GPU. Nastavte
num_workersna alespoň 2. Pokud chcete zvýšit výkon, zvyštenum_workers(což zvyšuje paralelní čtení) neboprefetch_factor(což zvyšuje počet elementů, které každý pracovník předem načte):from torch.utils.data import DataLoader loader = DataLoader( dataset, batch_size=32, num_workers=2, prefetch_factor=2, pin_memory=True )Pro velké tabulkové datové sady použijte Spark Connect. Spark Connect podporuje většinu rozhraní API PySpark a efektivně zpracovává distribuované čtení.
Streamování datových sad
U velmi velkých datových sad, které se nevejdou do paměti, použijte přístupy ke streamování:
- PyTorch IterableDataset pro vlastní logiku streamování
- Datasety Hugging Face se streamováním pro datasety umístěné na Hubu nebo ve svazcích.
- Ray Data pro distribuované dávkové zpracování dat.