Verzeichnisse zum Speichern und Schreiben von Dateien für Azure Machine Learning-Experimente
GILT FÜR: Python SDK azureml v1
In diesem Artikel erfahren Sie, wo Sie Ihre Eingabedateien speichern sollten, und wohin Sie Ausgabedateien Ihrer Experimente schreiben sollten, um Speicherlimitfehler und Experimentlatenz zu vermeiden.
Beim Ausführen von Trainingsaufträgen auf einem Computeziel sind sie von externen Umgebungen isoliert. Der Zweck dieses Entwurfs besteht darin, die Reproduzierbarkeit und Portabilität des Experiments sicherzustellen. Wenn Sie dasselbe Skript auf demselben bzw. einem anderen Computeziel zweimal ausführen, erhalten Sie die gleichen Ergebnisse. Mit diesem Entwurf können Sie Computeziele als zustandslose Berechnungsressourcen betrachten, die jeweils keine Affinität zu den Aufträgen aufweisen, die nach ihrem Abschluss ausgeführt werden.
Speicherort von Eingabedateien
Bevor Sie ein Experiment auf einem Computeziel oder Ihrem lokalen Computer initiieren können, müssen Sie sicherstellen, dass die erforderlichen Dateien für das Computeziel verfügbar sind. Dies sind beispielsweise Abhängigkeitsdateien und Datendateien, die für die Ausführung des Codes erforderlich sind.
Zum Ausführen von Trainingsskripts wird von Azure Machine Learning das gesamte Quellverzeichnis kopiert. Sind vertrauliche Daten vorhanden, die nicht hochgeladen werden sollen, verwenden Sie eine IGNORE-Datei, oder platzieren Sie diese Daten nicht im Quellverzeichnis. Greifen Sie stattdessen mit einem Datenspeicher auf Ihre Daten zu.
Das Speicherlimit für Momentaufnahmen des Experiments liegt bei 300 MB und/oder 2.000 Dateien.
Aus diesem Grund empfehlen wir Folgendes:
Speichern Sie Ihre Dateien in einem Azure Machine Learning-Dataset. Die Verwendung von Datasets verhindert Wartezeitenprobleme beim Experiment und bietet den Vorteil, dass der Zugriff auf Daten von einem Remotecomputeziel erfolgt. Azure Machine Learning erledigt die Authentifizierung und das Einbinden des Datasets. Weitere Informationen zum Angeben eines Datasets als Eingabedatenquelle in Ihrem Trainingsskript finden Sie unter Trainieren mit Datasets.
Wenn Sie nur wenige Datendateien und Abhängigkeitsskripts benötigen und keinen Datenspeicher verwenden können, legen Sie die Dateien in demselben Ordnerverzeichnis wie Ihr Trainingsskript ab. Geben Sie diesen Ordner direkt in Ihrem Trainingsskript als Ihr
source_directory
an, oder in dem Code, der Ihr Trainingsskript aufruft.
Speicherlimits von Experimentmomentaufnahmen
Für Experimente erstellt Azure Machine Learning automatisch eine Experimentmomentaufnahme Ihres Codes basierend auf dem Verzeichnis, das Sie bei der Konfiguration des Auftrags vorschlagen. Bei einer Pipeline wird das Verzeichnis für jeden Schritt konfiguriert.
Hierfür gilt ein Grenzwert von insgesamt 300 MB und/oder 2.000 Dateien. Wenn Sie diese Grenze überschreiten, wird die folgende Fehlermeldung angezeigt:
While attempting to take snapshot of .
Your total snapshot size exceeds the limit of 300.0 MB
Speichern Sie Ihre Experimentdateien in einem Datenspeicher, um diesen Fehler zu beheben. Wenn Sie keinen Datenspeicher verwenden können, bietet die folgende Tabelle mögliche alternative Lösungen.
Experimentbeschreibung | Lösung zum Speicherlimit |
---|---|
Weniger als 2.000 Dateien und Verwendung eines Datenspeichers nicht möglich | Setzen Sie die Größenbeschränkung für die Momentaufnahme folgendermaßen außer Kraft: azureml._restclient.snapshots_client.SNAPSHOT_MAX_SIZE_BYTES = 'insert_desired_size' und azureml._restclient.constants.SNAPSHOT_MAX_SIZE_BYTES = 'insert_desired_size' Dies kann je nach Anzahl und Größe der Dateien mehrere Minuten dauern. |
Spezifisches Skriptverzeichnis muss verwendet werden | Um zu verhindern, dass nicht benötigte Dateien in die Momentaufnahme eingeschlossen werden, erstellen Sie im Verzeichnis eine Ignore-Datei (.gitignore oder .amlignore ). Fügen Sie dieser Datei die Dateien und Verzeichnisse hinzu, die ignoriert werden sollen. Weitere Informationen zur Syntax, die in dieser Datei zu verwenden ist, finden Sie unter Syntax und Muster für .gitignore . Die .amlignore -Datei verwendet die gleiche Syntax. Wenn beide Dateien vorhanden sind, wird die Datei .amlignore verwendet, und die Datei .gitignore wird nicht verwendet. |
Pipeline | Verwenden Sie für jeden Schritt ein anderes Unterverzeichnis. |
Jupyter Notebooks | Erstellen Sie eine .amlignore -Datei, oder verschieben Sie Ihr Notebook in ein neues, leeres Unterverzeichnis, und führen Sie den Code erneut aus. |
Speicherort zum Schreiben von Dateien
Aufgrund der Isolation von Trainingsexperimenten werden die während Aufträgen auftretenden Änderungen an Dateien nicht unbedingt außerhalb Ihrer Umgebung beibehalten. Wenn Ihr Skript die lokalen zu berechnenden Dateien ändert, werden die Änderungen für Ihren nächsten Experimentauftrag nicht beibehalten und auch nicht automatisch an den Clientcomputer zurückgeleitet. Darum sollten die während des ersten Auftrags des Experiments vorgenommenen Änderungen sich nicht auf die Änderungen des zweiten Auftrags auswirken.
Beim Schreiben von Änderungen wird empfohlen, Dateien über ein Azure Machine Learning-Dataset mit einem OutputFileDatasetConfig-Objekt in den Speicher zu schreiben. Erfahren Sie mehr über das Erstellen eines OutputFileDatasetConfig-Objekts.
Schreiben Sie Dateien andernfalls in den Ordner ./outputs
und/oder in den Ordner ./logs
.
Wichtig
Zwei Ordner, outputs und logs, erhalten eine besondere Behandlung durch Azure Machine Learning. Wenn Sie während des Trainings Dateien in die Ordner ./outputs
und ./logs
schreiben, werden diese Dateien automatisch in Ihren Auftragsverlauf hochgeladen, damit Sie Zugriff darauf haben, wenn der Auftrag abgeschlossen ist.
Für eine Ausgabe wie Statusmeldungen oder Bewertungsergebnisse schreiben Sie Dateien in den Ordner
./outputs
, sodass sie als Artefakte im Auftragsverlauf beibehalten werden. Achten Sie auf die Anzahl und Größe der Dateien, die in diesen Ordner geschrieben werden, weil beim Hochladen der Inhalte in den Auftragsverlauf Wartezeiten entstehen können. Wenn die Wartezeit ein Problem darstellt, wird das Schreiben von Dateien in einen Datenspeicher empfohlen.Um geschriebene Dateien als Protokolle im Auftragsverlauf zu speichern, schreiben Sie Dateien in den Ordner
./logs
. Die Protokolle werden in Echtzeit hochgeladen, sodass diese Methode für das Streamen von Liveupdates von einem Remoteauftrag geeignet ist.
Nächste Schritte
Erfahren Sie mehr über das Zugreifen auf Daten aus dem Speicher.
Erfahren Sie mehr über das Erstellen von Computezielen für Modelltraining und -bereitstellung