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

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.

Lorsqu'il include_local_workdir est défini surTrue, SageMaker AI 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 le jeu de données MNIST soit divisé en un script main.pyt et un script pytorch_mnist.py dépendant. main.py appelle le script dépendant. Le main.py script contient également le code permettant d’importer la dépendance comme indiqué.

from mnist_impl.pytorch_mnist import ...

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

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

L’exemple suivant utilise CustomFileFilter pour ignorer tous les fichiers et dossiers de bloc-notes ou les fichiers nommés data lors du chargement de fichiers vers S3.

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

L’exemple suivant montre comment empaqueter un espace de travail entier.

@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 les 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 bonnes pratiques suivantes suggèrent comment organiser votre structure de répertoire lorsque vous utilisez le décorateur @remote 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 n’est PAS recommandé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