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.
In deze sectie wordt informatie behandeld over het laden van gegevens in AI Runtime, specifiek voor ML- en DL-toepassingen. Raadpleeg de zelfstudie voor meer informatie over het laden en transformeren van gegevens met behulp van 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
Gebruik Unity Catalog-volumes voor ongestructureerde gegevens, zoals afbeeldingen, audio en tekstbestanden. In het volgende voorbeeld ziet u hoe u bestanden van een volume leest en gebruikt met een 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
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)
...
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 tijdvakken traint, is de aanbevolen methode om eerst de gegevens lokaal te kopiëren, met name naar de /tmp map, die wordt gehost op snelle NVMe SSD-opslag.
Als uw gegevensset groot is, kunnen de volgende technieken de prestaties verbeteren:
Cachegegevens lokaal opslaan voor training met meerdere epochs. Kopieer gegevenssets naar
/tmpvoor snellere toegang in verschillende tijdvakken:import shutil shutil.copytree("/Volumes/catalog/schema/volume/dataset", "/tmp/dataset")Het ophalen van gegevens parallel uitvoeren. Gebruik de torch DataLoader met meerdere werkrollen om het laden van gegevens te overlappen met GPU-berekeningen. Ingesteld
num_workersop ten minste 2. Als u de prestaties wilt verbeteren, verhoognum_workers(dit vergroot parallelle leescapaciteit) ofprefetch_factor(dit verhoogt het aantal items dat elke werker vooraf laadt):from torch.utils.data import DataLoader loader = DataLoader( dataset, batch_size=32, num_workers=2, prefetch_factor=2, pin_memory=True )Spark Connect gebruiken voor grote gegevenssets in tabelvorm. Spark Connect ondersteunt de meeste PySpark-API's en verwerkt gedistribueerde leesbewerkingen efficiënt.
Streaminggegevenssets
Gebruik streamingmethoden voor zeer grote gegevenssets die niet in het geheugen passen:
- 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.