Verwendung von modularem Code mit dem @remote Decorator - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwendung von modularem Code mit dem @remote Decorator

Sie können Ihren Code in Modulen organisieren, um die Workspace-Verwaltung während der Entwicklung zu vereinfachen, und trotzdem die @remote-Funktion verwenden, um eine Funktion aufzurufen. Sie können die lokalen Module auch aus Ihrer Entwicklungsumgebung in die Remote-Auftragsumgebung replizieren. Setzen Sie dafür den Parameter include_local_workdir auf True, wie im folgenden Beispielcode gezeigt.

@remote( include_local_workdir=True, )
Anmerkung

Der @remote Decorator und der Parameter müssen in der Hauptdatei und nicht in einer der abhängigen Dateien vorkommen.

Wenn auf gesetzt include_local_workdir istTrue, werden alle Python-Skripte SageMaker verpackt, während die Verzeichnisstruktur im aktuellen Verzeichnis des Prozesses beibehalten wird. Außerdem werden die Abhängigkeiten im Arbeitsverzeichnis des Jobs verfügbar gemacht.

Nehmen wir beispielsweise an, Ihr Python-Skript, das den MNIST Datensatz verarbeitet, ist in ein main.py Skript und ein abhängiges pytorch_mnist.py Skript unterteilt. main.pyruft das abhängige Skript auf. Außerdem enthält das main.py Skript Code zum Importieren der Abhängigkeit, wie in der Abbildung gezeigt.

from mnist_impl.pytorch_mnist import ...

Die main.py Datei muss auch den @remote Decorator enthalten und den include_local_workdir Parameter muss auf True gesetzt werden.

Der include_local_workdir Parameter umfasst standardmäßig alle Python-Skripten im Verzeichnis. Sie können anpassen, welche Dateien Sie in den Job hochladen möchten, indem Sie diesen Parameter in Verbindung mit dem custom_file_filter Parameter verwenden. Sie können entweder eine Funktion übergeben, die Auftragsabhängigkeiten filtert, die auf S3 hochgeladen werden sollen, oder ein CustomFileFilter Objekt, das die lokalen Verzeichnisse und Dateien angibt, die in der Remote-Funktion ignoriert werden sollen. Sie können custom_file_filter nur if verwenden, wenn auf gesetzt include_local_workdir ist True — andernfalls wird der Parameter ignoriert.

Im folgenden Beispiel werden data beim Hochladen von Dateien CustomFileFilter auf S3 alle Notizbuchdateien und Ordner oder Dateien mit Namen ignoriert.

@remote( include_local_workdir=True, custom_file_filter=CustomFileFilter( ignore_pattern_names=[ # files or directories to ignore "*.ipynb", # all notebook files "data", # folter or file named data ] ) )

Das folgende Beispiel zeigt, wie Sie einen gesamten Workspace verpacken können.

@remote( include_local_workdir=True, custom_file_filter=CustomFileFilter( ignore_pattern_names=[] # package whole workspace ) )

Das folgende Beispiel zeigt, wie Sie eine Funktion zum Filtern von Dateien verwenden können.

import os def my_filter(path: str, files: List[str]) -> List[str]: to_ignore = [] for file in files: if file.endswith(".txt") or file.endswith(".ipynb"): to_ignore.append(file) return to_ignore @remote( include_local_workdir=True, custom_file_filter=my_filter )

Bewährte Methoden zur Strukturierung Ihres Arbeitsverzeichnisses

Die folgenden bewährten Methoden zeigen, wie Sie Ihre Verzeichnisstruktur organisieren und gleichzeitig den @remote Decorator in Ihrem modularen Code verwenden können.

  • Legen Sie den @remote Decorator in einer Datei ab, die sich im Stammverzeichnis des Workspace befindet.

  • Lokale Module auf der Stammebene strukturieren.

Das folgende Beispielbild zeigt die empfohlene Verzeichnisstruktur. In dieser Beispielstruktur befindet sich das main.py Skript im Stammverzeichnis.

. ├── config.yaml ├── data/ ├── main.py <----------------- @remote used here ├── mnist_impl │ ├── __pycache__/ │ │ └── pytorch_mnist.cpython-310.pyc │ ├── pytorch_mnist.py <-------- dependency of main.py ├── requirements.txt

Das folgende Beispielbild zeigt eine Verzeichnisstruktur, die zu inkonsistentem Verhalten führt, wenn sie dazu verwendet wird, Ihren Code mit einem @remote Decorator zu kommentieren.

In dieser Beispielstruktur befindet sich das main.py Skript, das den @remote Decorator enthält, nicht im Stammverzeichnis. Die folgende Struktur wird NOTempfohlen.

. ├── config.yaml ├── entrypoint │ ├── data │ └── main.py <----------------- @remote used here ├── mnist_impl │ ├── __pycache__ │ │ └── pytorch_mnist.cpython-310.pyc │ └── pytorch_mnist.py <-------- dependency of main.py ├── requirements.txt