Verteiltes Training¶
Die Snowflake Container Runtime bietet eine flexible Trainingsumgebung, die Sie verwenden können, um Modelle auf der Infrastruktur von Snowflake zu trainieren. Sie können Open-Source-Pakete oder verteilte Snowflake ML-Trainingsläufe für das Training mit mehreren Knoten und mehreren Geräten verwenden.
Verteilte Trainingsläufe skalieren Ihre Machine-Learning-Workloads automatisch über mehrere Knoten und GPUs. Snowflake-Distributoren können Clusterressourcen auf intelligente Weise verwalten, ohne dass eine komplexe Konfiguration erforderlich ist, sodass verteiltes Training zugänglich und effizient ist.
Verwenden Sie Standard-Open-Source-Bibliotheken, wenn Sie
Mit kleinen Datensets in Ein-Knoten-Umgebungen arbeiten
Prototypen schnell ausführen und mit Modellen experimentieren
Workflows ohne verteilte Anforderungen rehosten
Verwenden Sie verteilte Snowflake-Trainingsläufe für:
Trainieren von Modellen für Datensets, die größer als der Arbeitsspeicher eines einzelnen Serverknotens sind
Effiziente Verwendung mehrerer GPUs
Automatische Nutzung aller MLJobs mit mehreren Compute-Knoten oder skalierten Notebook-Cluster
Verteilte Snowflake-ML-Trainingsläufe¶
Snowflake ML bietet verteilte Trainingsläufe für gängige Frameworks für maschinelles Lernen, einschließlich XGBoost, LightGBMund PyTorch. Diese Trainingsläufe sind für die Ausführung auf der Infrastruktur von Snowflake optimiert und können automatisch über mehrere Knoten und GPUs skaliert werden.
Automatisches Ressourcenmanagement – Snowflake erkennt und verwendet automatisch alle verfügbaren Cluster-Ressourcen
Vereinfachte Einrichtung – Die Container Runtime-Umgebung wird durch einen von Snowflake bereitgestellten Ray-Cluster unterstützt, sodass keine Benutzerkonfiguration erforderlich ist
Nahtlose Snowflake-Integration – Direkte Kompatibilität mit Snowflake-Datenkonnektoren und -Stagingbereichen
Optionale Skalierungskonfigurationen – Fortgeschrittene Benutzende können bei Bedarf eine Feinabstimmung vornehmen
Laden von Daten¶
Sowohl für Open Source- als auch für verteilte Snowflake-Trainingsläufe ist die leistungsfähigste Methode zum Einlesen von Daten der Snowflake Data Connector:
Trainingsmethoden¶
Open-Source-Training¶
Verwenden Sie standardmäßige Open-Source-Bibliotheken, wenn Sie maximale Flexibilität und Kontrolle über Ihren Trainingsprozess benötigen. Bei Open-Source-Training verwenden Sie direkt beliebte ML-Frameworks wie XGBoost, LightGBMund PyTorch mit minimalen Änderungen und profitieren gleichzeitig von der Infrastruktur und Datenkonnektivität von Snowflake.
Die folgenden Beispiele trainieren ein Modell mit XGBoost und LightGBM.
Zum Trainieren mit Open Source XGBoost konvertieren Sie Daten, nachdem Sie sie mit dem Datenkonnektor geladen haben, in einen pandas-Datenframe und verwenden die XGB-Bibliothek direkt:
Verteiltes Training¶
Die verteilte XGBEstimator-Klasse hat eine ähnliche API mit ein paar wesentlichen Unterschieden:
Die XGBoost-Trainingsparameter werden an den
XGBEstimatorwährend der Klasseninitialisierung über den Parameter „params“ übergeben.Das DataConnector-Objekt kann direkt an die
fit-Funktion des Estimator übergeben werden, zusammen mit den Eingabespalten, die die Features definieren, und der Beschriftungsspalte, die das Ziel definiert.Sie können eine Skalierungskonfiguration angeben, wenn Sie die
XGBEstimator-Klasse instanziieren. Snowflake verwendet jedoch standardmäßig alle verfügbaren Ressourcen.
Evaluierung des Modells¶
Modelle können durch Übergabe eines eval_set und mit verbose_eval evaluiert werden, um die Evaluierungsdaten auf der Konsole auszugeben. Zusätzlich kann die Ableitung als zweiter Schritt durchgeführt werden. Der verteilte Estimator bietet der Einfachheit halber eine predict-Methode, aber es werden keine verteilten Ableitungen ausgeführt. Wir empfehlen, das Modell nach dem Training in einen OSS xgboost-Estimator umzuwandeln, um Ableitungen auszuführen und in der Modell-Registry zu protokollieren.
Registrieren des Modells¶
Um das Modell in der Snowflake Modell-Registry zu registrieren, verwenden Sie den Open Source-Booster, der von estimator.get_booster bereitgestellt und von estimator.fit zurückgegeben wurde. Weitere Informationen dazu finden Sie unter XGBoost.
PyTorch¶
Der SnowflakePyTorch Distributor bietet native Unterstützung für parallele Modelle von verteilten Daten auf dem Snowflake-Backend. UmDDP auf Snowflake zu verwenden, nutzen Sie Open Source PyTorch-Module mit einigen Snowflake-spezifischen Änderungen:
Laden Sie Daten mit dem
ShardedDataConnector, um Daten automatisch in der Anzahl von Partitionen zu teilen, die mit derworld_sizedes verteilten Trainingslaufs übereinstimmen. Rufen Sieget_shardinnerhalb eines Snowflake-Trainingskontexts auf, um den Shard abzurufen, der mit diesem Worker-Prozess verknüpft ist.Verwenden Sie innerhalb der Trainingsfunktion das
context-Objekt, um verarbeitungsspezifische Informationen wie Rang, lokaler Rang und die für das Training erforderlichen Daten zu erhalten.Speichern Sie das Modell unter Verwendung des
get_model_dirdes Kontexts, um den Speicherort für das Modell zu finden. Dadurch wird das Modell lokal für das Training mit einzelnen Knoten gespeichert und mit einem Snowflake-Stagingbereich für verteiltes Training synchronisiert. Wenn kein Speicherort für den Stagingbereich angegeben ist, wird standardmäßig Ihr Benutzer-Stagingbereich verwendet.
Laden von Daten¶
Trainieren des Modells¶
Abrufen des Modells¶
Wenn Sie DDP mit mehreren Knoten verwenden, wird das Modell automatisch mit einem Snowflake-Stagingbereich als gemeinsam genutzter persistenter Speicher synchronisiert.
Der folgende Code ruft das Modell aus einem Stagingbereich ab. Er verwendet den artifact_stage_location-Parameter, um den Speicherort des Stagingbereichs anzugeben, in dem das Modellartefakt gespeichert wird.
Die in der stage_location-Variable gespeicherte Funktion erhält den Speicherort des Modells im Stagingbereich, nachdem das Training abgeschlossen ist. Das Modellartefakt wird unter "DB_NAME.SCHEMA_NAME.STAGE_NAME/model/{request_id}" gespeichert.