Como usar o código modular com o decorador @remote - Amazon SageMaker

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.pychama 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