Freigeben über


Laden von Daten auf serverlosem GPU-Compute

In diesem Abschnitt werden Informationen zum Laden von Daten auf serverlosen GPU-Compute speziell für ML- und DL-Anwendungen behandelt. Schauen Sie sich das Lernprogramm an, um mehr über das Laden und Transformieren von Daten mithilfe der Spark Python-API zu erfahren.

Laden von Tabellendaten

Verwenden Sie Spark Connect, um tabellarische Machine Learning-Daten aus Delta-Tabellen zu laden.

Für die Schulung mit einem einzelnen Knoten können Sie Apache Spark DataFrames mithilfe der PySpark-MethodetoPandas() in Pandas DataFrames konvertieren und dann optional mithilfe der PySpark-Methodeto_numpy() in das NumPy-Format konvertieren.

Hinweis

Spark Connect verschiebt die Analyse und Namensauflösung auf die Ausführungszeit, wodurch sich das Verhalten Ihres Codes ändern kann. Siehe "Vergleichen von Spark Connect" mit Spark Classic.

Spark Connect unterstützt die meisten PySpark-APIs, einschließlich Spark SQL, Pandas-API für Spark, Structured Streaming und MLlib (DataFrame-basiert). In der PySpark-API-Referenzdokumentation finden Sie die neuesten unterstützten APIs.

Weitere Einschränkungen finden Sie unter Serverless Compute Limitations.

Laden von Daten innerhalb des @distributed Dekorators

Wenn Sie die Serverless GPU-API für verteiltes Training verwenden, verschieben Sie den Datenladecode innerhalb des Dekorators @distributed. Die Datensatzgröße kann die maximal zulässige Größe des Pickle-Moduls überschreiten. Daher wird empfohlen, den Datensatz innerhalb des Dekorators zu erzeugen, wie im Folgenden gezeigt:

from serverless_gpu import distributed

# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, remote=True)
def run_train():
  # good practice
  dataset = get_dataset(file_path)
  ....

Leistung beim Laden von Daten

/Workspace- und /Volumes-Verzeichnisse werden im Remote-Speicher des Unity-Katalogs gehostet. Wenn Ihr Dataset im Unity-Katalog gespeichert ist, ist die Datenladegeschwindigkeit durch die verfügbare Netzwerkbandbreite begrenzt. Wenn Sie mehrere Epochen trainieren, empfiehlt es sich, die Daten zuerst lokal zu kopieren, insbesondere in das /tmp Verzeichnis, das auf superschnellen Speicher gehostet wird(NVMe SSD-Datenträger).

Wenn Ihr Dataset groß ist, empfehlen wir auch die folgenden Techniken zum Parallelisieren von Schulungen und Laden von Daten:

  • Wenn Sie mehrere Epochen trainieren, aktualisieren Sie Ihr Dataset, um Dateien lokal im /tmp Verzeichnis zwischenzuspeichern, bevor Sie jede Datei lesen. Verwenden Sie in nachfolgenden Epochen die zwischengespeicherte Version.
  • Parallelisieren Sie das Abrufen von Daten, indem Sie Worker in der Torch DataLoader-API aktivieren. Stellen Sie num_workers auf mindestens 2 ein. Standardmäßig werden für jeden Worker zwei Arbeitsaufgaben vorab bereitgestellt. Um die Leistung zu verbessern, erhöhen Sie num_workers (wodurch die parallelen Lesevorgänge erhöht werden) oder prefetch_factor (wodurch die Anzahl der Elemente erhöht wird, die von jedem Worker vorab geladen werden).