Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
AI Runtime voor taken met één knooppunt bevindt zich in openbare preview. De gedistribueerde trainings-API voor workloads met meerdere GPU's blijft bèta.
Laad trainingsgegevens in AI Runtime voor machine learning- en Deep Learning-workloads. Alle gegevenstoegang gaat via Unity Catalog: gebruik Spark Connect om tabelgegevens uit Delta-tabellen te lezen en Unity Catalog-volumes voor grote gegevenssets en ongestructureerde bestanden, zoals afbeeldingen, audio en tekst. Voor training met meerdere epochs cachet u gegevens lokaal naar /tmp voor snellere toegang. Zie de zelfstudie voor meer informatie over het laden en transformeren van gegevens met de Spark Python-API.
Opmerking
Unity Catalog is vereist. Alle gegevenstoegang in AI Runtime gaat via Unity Catalog. Uw tabellen en volumes moeten zijn geregistreerd in Unity Catalog en toegankelijk zijn voor uw gebruiker of service-principal.
Tabulaire gegevens laden
Gebruik Spark Connect om machine learning-gegevens uit Delta-tabellen in tabelvorm te laden.
Voor training met één knooppunt kunt u Apache Spark DataFrames converteren naar pandas DataFrames met behulp van de PySpark-methodetoPandas() en optioneel converteren naar NumPy-indeling met behulp van de PySpark-methodeto_numpy().
Opmerking
Spark Connect zorgt ervoor dat analyse en naamomzetting worden uitgesteld tot uitvoeringstijd, waardoor het gedrag van uw code kan worden gewijzigd. Zie Spark Connect vergelijken met Spark Classic.
Spark Connect ondersteunt de meeste PySpark-API's, waaronder Spark SQL, Pandas-API op Spark, Structured Streaming en MLlib (op basis van DataFrame). Raadpleeg de referentiedocumentatie voor de PySpark-API voor de meest recente ondersteunde API's.
Zie Serverloze rekenbeperkingen voor andere beperkingen.
Grote Delta-tabellen laden door gebruik te maken van volumes
Voor grote Delta-tabellen die te groot zijn om mee te converteren toPandas(), exporteert u de gegevens naar een Unity Catalog-volume en laadt u deze rechtstreeks met behulp van PyTorch of 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")
Deze aanpak voorkomt spark-overhead tijdens de training en werkt goed voor zowel één GPU als gedistribueerde trainingswerkstromen.
Ongestructureerde gegevens uit volumes laden met UCVolumeDataset
Gebruik voor ongestructureerde gegevens, zoals afbeeldingen, audiobestanden en tekstbestanden die zijn opgeslagen in Unity Catalog-volumes, UCVolumeDataset uit het pakket serverless_gpu.data.
UCVolumeDataset is een PyTorch IterableDataset waarmee elk bestand van het volume naar een snelle lokale cache wordt gekopieerd bij eerste toegang en het lokale bestandspad in de cache wordt gegenereerd. Hiermee worden de prestatie- en distributieproblemen afgehandeld die u anders handmatig zou implementeren:
- Lokale cache. Bestanden worden gekopieerd van de FUSE-koppeling naar een lokale cachemap bij eerste toegang en worden daarna vanuit de cache geleverd, zodat training met meerdere tijdsperioden het volume niet opnieuw leest.
- Automatisch partitioneren. Wanneer
torch.distributedwordt geïnitialiseerd, worden bestanden verdeeld over ranks en vervolgens verder verdeeld overDataLoaderworkers, zodat elk(rank, worker)-paar een niet-overlappend deel ontvangt zonder extra configuratie.
Opmerking
UCVolumeDataset en serverless_gpu.data.DataLoader vereist GPU-omgeving 5 of hoger.
UCVolumeDataset levert onbewerkte lokale bestandspaden op. Als u deze bestanden in tensors wilt decoderen, verpakt u deze in een seconde IterableDataset die de padstroom verbruikt en past u uw parseerlogica toe. Hierdoor blijven I/O- en parseringsproblemen gescheiden.
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)
De wrapper ontvangt reeds gecachete lokale paden, zodat de parsestap de FUSE-koppeling nooit benadert. U kunt extra wrappers koppelen voor uitbreiding, tokenisatie of filteren.
Voor optimale prestaties combineert u UCVolumeDataset met serverless_gpu.data.DataLoader in plaats van de standaard-PyTorch DataLoader. Het is afgestemd op serverloze GPU I/O en haalt bestanden gelijktijdig op en slaat bestanden op terwijl de GPU wordt berekend. Bekijk de prestaties van het laden van gegevens.
Het laden van gegevens in de @distributed decorator
Wanneer u de serverloze GPU-API gebruikt voor gedistribueerde training, verplaatst u de code voor het laden van gegevens binnen de @distributed decorator. De datasetgrootte kan groter zijn dan de maximale grootte die is toegestaan door de module pickle, dus het wordt aanbevolen om de dataset in de decorator te genereren, zoals hieronder getoond.
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)
...
Wanneer u in de decorator een UCVolumeDataset construeert, leest deze tijdens het itereren rankinformatie uit torch.distributed en verdeelt bestanden automatisch over ranks, zodat u voor op bestanden gebaseerde volumegegevens geen DistributedSampler nodig hebt.
Prestaties van het laden van gegevens
/Workspace en /Volumes directory's worden gehost op externe Unity Catalog-opslag. Als uw gegevensset is opgeslagen in Unity Catalog, wordt de laadsnelheid van gegevens beperkt door de beschikbare netwerkbandbreedte. Als u meerdere epochs traint, is de aanbevolen aanpak om UCVolumeDataset te gebruiken, dat deze cache voor u beheert: het kopieert elk bestand bij de eerste toegang naar de lokale opslag en voert volgende leesbewerkingen uit vanaf de lokale kopie. Voor datasets in volumes heeft dit de voorkeur boven een handmatige shutil.copytree, omdat daarbij vooraf de volledige mapstructuur wordt gekopieerd, zelfs als de training slechts een deel ervan gebruikt.
Als uw gegevensset groot is, kunnen de volgende technieken de doorvoer verbeteren:
Gebruik
serverless_gpu.data.DataLoaderom het ophalen te parallelliseren. Dit is een direct vervangbare subklasse van torchDataLoader, afgestemd op serverless GPU-I/O:num_workersstaat standaard op 6 enprefetch_factorop 4 (vergeleken met 0 en 2 in PyTorch), zodat bestanden gelijktijdig worden opgehaald en gecachet terwijl de GPU berekeningen uitvoert. Ook worden de tijdsinstellingen voor ophalen per batch bij de actieve MLflow-uitvoering in een logboek opgeslagen, zodat u knelpunten voor het laden van gegevens kunt herkennen.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. )Alle rangen moeten dezelfde
num_workers-waarde gebruiken, omdatUCVolumeDatasetbestanden partitioneert met een globale stride overworld_size × num_workersslots. Niet-overeenkomende waarden zorgen ervoor dat bestanden worden gedupliceerd of overgeslagen.Verhoog de batchgrootte. Grotere batches spreiden de overhead van het laden van gegevens per batch over meer voorbeelden en verminderen het aantal bestandsophaalbewerkingen per stap. Als GPU-geheugen de beperkende factor is, combineert u een grotere batchgrootte met verloopaccumulatie om de effectieve batchgrootte te behouden.
Streaminggegevenssets
Gebruik streamingmethoden voor zeer grote gegevenssets die niet in het geheugen passen:
-
UCVolumeDatasetvanserverless_gpu.datavoor het streamen van bestanden van Unity Catalog-volumes met lokale caching en automatische gedistribueerde partitionering. Zie Ongestructureerde gegevens uit volumes laden metUCVolumeDataset. - PyTorch IterableDataset voor aangepaste streaminglogica.
- Hugging Face datasets met streaming voor datasets die worden gehost op de Hub of in volumes.
- Ray Data voor gedistribueerde batchgegevensverwerking.