As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Como usar o código modular com o decorador @remote
Organize o código em módulos para facilitar o gerenciamento do workspace durante o desenvolvimento e ainda use a função do @remote para invocar uma função. Você também pode replicar os módulos locais do ambiente de desenvolvimento para o ambiente de trabalho remoto. Para fazer isso, defina parâmetro include_local_workdir
como True
, conforme mostrado no exemplo de código a seguir.
@remote( include_local_workdir=True, )
nota
O decorador e o parâmetro do @remote devem aparecer no arquivo principal, em vez de em qualquer um dos arquivos dependentes.
Quando include_local_workdir
está definido comoTrue
, SageMaker empacota todos os scripts do Python enquanto mantém a estrutura de diretórios no diretório atual do processo. Ele também disponibiliza as dependências no diretório de trabalho do trabalho.
Por exemplo, suponha que seu script Python que processa o MNIST conjunto de dados esteja dividido em um main.py
script e um script dependente. pytorch_mnist.py
main.py
chama o script dependente. Além disso, o main.py
script contém código para importar a dependência, conforme mostrado.
from mnist_impl.pytorch_mnist import ...
O main.py
arquivo também deve conter o @remote
decorador e definir o include_local_workdir
parâmetro como. True
Por padrão, o include_local_workdir
parâmetro inclui todos os scripts Python no diretório. Você pode personalizar quais arquivos você deseja carregar para o trabalho usando esse parâmetro em conjunto com o custom_file_filter
parâmetro. Você pode passar uma função que filtra as dependências do trabalho a serem carregadas no S3 ou um CustomFileFilter
objeto que especifica os diretórios e arquivos locais a serem ignorados na função remota. Você pode usar custom_file_filter
somente se include_local_workdir
estiver definido como True
—caso contrário, o parâmetro será ignorado.
O exemplo a seguir usa CustomFileFilter
para ignorar todos os arquivos e pastas do notebook ou arquivos nomeados data
ao carregar arquivos para o 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 ] ) )
O exemplo a seguir demonstra como você pode empacotar um espaço de trabalho inteiro.
@remote( include_local_workdir=True, custom_file_filter=CustomFileFilter( ignore_pattern_names=[] # package whole workspace ) )
O exemplo a seguir mostra como você pode usar uma função para filtrar arquivos.
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áticas recomendadas na estruturação do diretório de trabalho
As melhores práticas a seguir sugerem como você pode organizar sua estrutura de diretórios usando o @remote
decorador em seu código modular.
-
Coloque o decorador @remote em um arquivo que reside no diretório-raiz do workspace.
-
Estruture os módulos locais no nível-raiz.
A imagem de exemplo a seguir mostra a estrutura de diretórios recomendada. Neste exemplo de estrutura, o script main.py
está localizado no diretório de nível-raiz.
. ├── 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
A imagem de exemplo a seguir mostra uma estrutura do diretório que resultará em um comportamento inconsistente quando usada para anotar o código com um decorador @remote.
Neste exemplo de estrutura, o script main.py
que contém o decorador @remote não está localizado no diretório de nível-raiz. A estrutura a seguir é NOTrecomendada.
. ├── 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