Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Uso de código modular con el decorador @remote
Puede organizar el código en módulos para facilitar la gestión del espacio de trabajo durante el desarrollo y siga utilizando la función @remote para invocar una función. También puede replicar los módulos locales desde su entorno de desarrollo al entorno de trabajo remoto. Para ello, establezca el parámetro include_local_workdir
en True
, como se muestra en el siguiente ejemplo de código.
@remote( include_local_workdir=True, )
nota
El decorador @remote y el parámetro deben aparecer en el archivo principal y no en ninguno de los archivos dependientes.
Cuando include_local_workdir
se establece enTrue
, SageMaker AI empaqueta todos los scripts de Python mientras mantiene la estructura de directorios en el directorio actual del proceso. También hará que las dependencias estén disponibles en el directorio de trabajo del trabajo en cuestión.
Por ejemplo, supongamos que el script de Python que procesa el conjunto de datos de MNIST está dividido en un script de main.py
y un script de pytorch_mnist.py
dependiente. main.py
llama al script dependiente. Además, el script de main.py
contiene código para importar la dependencia, como se muestra a continuación.
from mnist_impl.pytorch_mnist import ...
El archivo main.py
también debe contener el decorador @remote
y debe establecer el parámetro include_local_workdir
en True
.
El parámetro include_local_workdir
incluye de manera predeterminada todos los scripts de Python del directorio. Puede personalizar los archivos que desea cargar en el trabajo utilizando este parámetro junto con el parámetro custom_file_filter
. Puede pasar una función que filtre las dependencias de los trabajos para cargarlas en S3 o un objeto CustomFileFilter
que especifique los archivos y directorios locales que se deben ignorar en la función remota. Solo puede usar custom_file_filter
si include_local_workdir
se ha establecido en True
; de lo contrario, se ignora el parámetro.
En el siguiente ejemplo, se usa CustomFileFilter
para ignorar todos los archivos y carpetas del cuaderno o los archivos llamados data
al cargar los archivos en 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 ] ) )
En el siguiente ejemplo se muestra cómo puede empaquetar un espacio de trabajo completo.
@remote( include_local_workdir=True, custom_file_filter=CustomFileFilter( ignore_pattern_names=[] # package whole workspace ) )
En el siguiente ejemplo se muestra cómo puede utilizar una función para filtrar archivos.
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 )
Prácticas recomendadas para estructurar el directorio de trabajo
Las siguientes prácticas recomendadas sugieren cómo puede organizar la estructura de directorios al usar el decorador @remote
en un código modular.
-
Coloque el decorador @remote en un archivo que se encuentre en el directorio raíz del espacio de trabajo.
-
Estructure los módulos locales en el nivel raíz.
En la siguiente imagen de ejemplo se muestra la estructura de directorios recomendada. En esta estructura de ejemplo, el script main.py
se encuentra en el directorio raíz.
. ├── 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
En la siguiente imagen de ejemplo se muestra una estructura de directorios que provocará un comportamiento incoherente cuando se utilice para anotar el código con un decorador @remote.
En esta estructura de ejemplo, el script main.py
que contiene el decorador @remote no se encuentra en el directorio raíz. NO se recomienda la siguiente estructura:
. ├── 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