Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fontos
Az egycsomópontos feladatokhoz készült AI-futtatókörnyezet nyilvános előzetes verzióban érhető el. A több GPU-s számítási feladatok elosztott betanítási API-ja a bétaverzióban marad.
Ez a szakasz a kifejezetten ML- és DL-alkalmazásokhoz készült AI-futtatókörnyezet adatainak betöltésével kapcsolatos információkat ismerteti. Az oktatóanyagból megtudhatja, hogyan tölthet be és alakíthat át adatokat a Spark Python API használatával.
Megjegyzés:
A Unity-katalógusra szükség van. Az AI-futtatókörnyezet összes adathozzáférése a Unity Katalóguson keresztül történik. A táblákat és köteteket regisztrálni kell a Unity Katalógusban, és elérhetővé kell tenni a felhasználó vagy a szolgáltatásnév számára.
Táblázatos adatok betöltése
A Spark Connect használatával táblázatos gépi tanulási adatokat tölthet be Delta-táblákból.
Az egycsomópontos betanításhoz az Apache Spark DataFrame-eket a PySpark metódussaltoPandas() pandas DataFrame-ekre konvertálhatja, majd opcionálisan NumPy formátumra konvertálhatja a PySpark metódussalto_numpy().
Megjegyzés:
A Spark Connect elhalasztja az elemzést és a névfeloldást a végrehajtási időre, ami megváltoztathatja a kód viselkedését. Lásd a Spark Connect és a Klasszikus Spark összehasonlítása című témakört.
A Spark Connect a legtöbb PySpark API-t támogatja, beleértve a Spark SQL-t, a Sparkon futó Pandas API-t, a strukturált streamelést és az MLlib-t (DataFrame-alapú). Tekintse meg a PySpark API referenciadokumentációját a legújabb támogatott API-khoz.
További korlátozásokért lásd a kiszolgáló nélküli számítási korlátozásokat.
Nagyméretű Delta-táblák betöltése tárterületek segítségével
Delta nagytáblák esetén, amelyek túl nagyok ahhoz, hogy a toPandas() funkcióval átalakíthatók legyenek, exportálja az adatokat egy Unity Catalog-kötetbe, és töltse be közvetlenül a PyTorch vagy a Hugging Face használatával.
# 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")
Ez a megközelítés elkerüli a Spark terhelését a betanítás során, és jól működik az egy GPU-s és az elosztott betanítási munkafolyamatok esetében is.
Strukturálatlan adatok betöltése kötetekből
Strukturálatlan adatok, például képek, hang- és szövegfájlok esetén használja a Unity Catalog köteteit. Az alábbi példa bemutatja, hogyan olvashat fájlokat egy kötetből, és hogyan használhatja őket PyTorch Datasethasználatával:
# 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
Adatok betöltése a dekorátoron @distributed belül
Ha kiszolgáló nélküli GPU API-t használ az elosztott betanításhoz, helyezze át az adatbetöltési kódot a @distributed dekorátorba. Az adathalmaz mérete meghaladhatja a pickle által megengedett maximális méretet, ezért javasoljuk, hogy az adathalmazt a dekorátoron belül hozza létre, az alábbiak szerint:
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)
...
Adatbetöltési teljesítmény
/Workspace és /Volumes a címtárak távoli Unity Catalog-tárolóban vannak tárolva. Ha az adathalmaz a Unity Katalógusban van tárolva, az adatbetöltés sebességét a rendelkezésre álló hálózati sávszélesség korlátozza. Ha több epochot tanít be, az ajánlott módszer, hogy először másolja le az adatokat helyileg, közvetlenül a gyors NVMe SSD tárhelyen található /tmp könyvtárba.
Ha az adathalmaz nagy, az alábbi technikák javíthatják a teljesítményt:
Cache adatok helyi tárolása több-korszakos betanításhoz. Adathalmazok másolása a
/tmphelyre a gyorsabb hozzáférés érdekében az egyes korszakok során.import shutil shutil.copytree("/Volumes/catalog/schema/volume/dataset", "/tmp/dataset")Párhuzamosítsa az adatbeolvasást. Használja a torch DataLoader-t több munkafolyamattal az adatbetöltés és a GPU-számítás átfedésének eléréséhez. Állítsa
num_workersbe legalább 2 értékre. A teljesítmény javítása érdekében növeljenum_workers(ami növeli a párhuzamos olvasást) vagyprefetch_factor(ami növeli az egyes munkavállalók által előre letöltött elemek számát):from torch.utils.data import DataLoader loader = DataLoader( dataset, batch_size=32, num_workers=2, prefetch_factor=2, pin_memory=True )Nagy táblázatos adathalmazokhoz használja a Spark Connectet. A Spark Connect a legtöbb PySpark API-t támogatja, és hatékonyan kezeli az elosztott olvasásokat.
Streamelési adatkészletek
Nagyon nagy adathalmazok esetén, amelyek nem férnek el a memóriában, használjon streamelési módszereket:
- PyTorch IterableDataset egyéni streamelési logikához.
- Hugging Face-adathalmazok a Hubon vagy kötetekben üzemeltetett adathalmazok streamelésével.
- Ray Data elosztott adatköteg-feldolgozáshoz.