Utilisation d'un code modulaire avec le décorateur @remote - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation d'un code modulaire avec le décorateur @remote

Vous pouvez organiser votre code en modules pour faciliter la gestion de l'espace de travail pendant le développement, tout en utilisant la fonction @remote pour invoquer une fonction. Vous pouvez également répliquer les modules locaux de votre environnement de développement vers l'environnement de tâche distante. Pour ce faire, définissez le paramètre include_local_workdir sur True, comme illustré dans l'exemple de code suivant.

@remote( include_local_workdir=True, )
Note

Le décorateur et le paramètre @remote doivent apparaître dans le fichier principal, plutôt que dans les fichiers dépendants.

When include_local_workdir est défini surTrue, SageMaker empaquette tous les scripts Python tout en conservant la structure du répertoire dans le répertoire actuel du processus. Cela rend également les dépendances disponibles dans le répertoire de travail de la tâche.

Supposons, par exemple, que votre script Python qui traite l'MNISTensemble de données soit divisé en un main.py script et un pytorch_mnist.py script dépendant. main.pyappelle le script dépendant. Le main.py script contient également du code permettant d'importer la dépendance comme indiqué.

from mnist_impl.pytorch_mnist import ...

Le main.py fichier doit également contenir le @remote décorateur, et le include_local_workdir paramètre doit être défini sur. True

Le include_local_workdir paramètre inclut par défaut tous les scripts Python du répertoire. Vous pouvez personnaliser les fichiers que vous souhaitez télécharger vers la tâche en utilisant ce paramètre conjointement avec le custom_file_filter paramètre. Vous pouvez soit transmettre une fonction qui filtre les dépendances des tâches à télécharger vers S3, soit un CustomFileFilter objet qui spécifie les répertoires locaux et les fichiers à ignorer dans la fonction distante. Vous ne pouvez l'utiliser custom_file_filter que s'include_local_workdiril est défini surTrue, sinon le paramètre est ignoré.

L'exemple suivant permet CustomFileFilter d'ignorer tous les fichiers et dossiers de bloc-notes ou les fichiers nommés data lors du téléchargement de fichiers vers S3.

@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 ] ) )

L'exemple suivant montre comment vous pouvez empaqueter un espace de travail complet.

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

L'exemple suivant montre comment utiliser une fonction pour filtrer des fichiers.

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 )

Bonnes pratiques en matière de structuration de votre répertoire de travail

Les meilleures pratiques suivantes indiquent comment organiser la structure de votre répertoire tout en utilisant le @remote décorateur dans votre code modulaire.

  • Placez le décorateur @remote dans un fichier situé dans le répertoire de niveau racine de l'espace de travail.

  • Structurez les modules locaux au niveau de la racine.

L'image d'exemple suivante montre la structure de répertoire recommandée. Dans cet exemple de structure, le script main.py se trouve dans le répertoire de niveau racine.

. ├── 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

L'exemple d'image suivant montre une structure de répertoire qui se traduira par un comportement incohérent lorsqu'elle est utilisée pour annoter votre code avec un décorateur @remote.

Dans cet exemple de structure, le script main.py qui contient le décorateur @remote ne se trouve pas dans le répertoire de niveau racine. La structure suivante est NOTrecommandée.

. ├── 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