Menggunakan kode modular dengan dekorator @remote - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan kode modular dengan dekorator @remote

Anda dapat mengatur kode Anda ke dalam modul untuk kemudahan manajemen ruang kerja selama pengembangan dan masih menggunakan fungsi @remote untuk menjalankan fungsi. Anda juga dapat mereplikasi modul lokal dari lingkungan pengembangan Anda ke lingkungan kerja jarak jauh. Untuk melakukannya, atur parameter include_local_workdir keTrue, seperti yang ditunjukkan pada contoh kode berikut.

@remote( include_local_workdir=True, )
catatan

Dekorator dan parameter @remote harus muncul di file utama, bukan di file dependen mana pun.

Ketika include_local_workdir diatur keTrue, SageMaker paket semua skrip Python sambil mempertahankan struktur direktori dalam direktori proses saat ini. Itu juga membuat dependensi tersedia di direktori kerja pekerjaan.

Misalnya, skrip Python Anda yang memproses dataset MNIST dibagi menjadi skrip dan main.py skrip dependen. pytorch_mnist.py main.pymemanggil skrip dependen. Juga, main.py skrip berisi kode untuk mengimpor ketergantungan seperti yang ditunjukkan.

from mnist_impl.pytorch_mnist import ...

main.pyFile juga harus berisi @remote dekorator, dan harus mengatur include_local_workdir parameter keTrue.

include_local_workdirParameter secara default mencakup semua skrip Python di direktori. Anda dapat menyesuaikan file mana yang ingin Anda unggah ke pekerjaan dengan menggunakan parameter ini bersama dengan custom_file_filter parameter. Anda dapat meneruskan fungsi yang memfilter dependensi pekerjaan untuk diunggah ke S3, atau CustomFileFilter objek yang menentukan direktori dan file lokal untuk diabaikan dalam fungsi jarak jauh. Anda custom_file_filter hanya dapat menggunakan jika include_local_workdir disetel ke True —jika tidak parameter diabaikan.

Contoh berikut digunakan CustomFileFilter untuk mengabaikan semua file notebook dan folder atau file bernama data saat mengunggah file ke 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 ] ) )

Contoh berikut menunjukkan bagaimana Anda dapat mengemas seluruh ruang kerja.

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

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan fungsi untuk memfilter file.

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 )

Praktik terbaik dalam menyusun direktori kerja Anda

Praktik terbaik berikut menyarankan bagaimana Anda dapat mengatur struktur direktori Anda saat menggunakan @remote dekorator dalam kode modular Anda.

  • Letakkan dekorator @remote dalam file yang berada di direktori tingkat root ruang kerja.

  • Struktur modul lokal di tingkat root.

Contoh gambar berikut menunjukkan struktur direktori direkomendasikan. Dalam struktur contoh ini, main.py skrip terletak di direktori tingkat root.

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

Contoh gambar berikut menunjukkan struktur direktori yang akan menghasilkan perilaku yang tidak konsisten ketika digunakan untuk membubuhi keterangan kode Anda dengan dekorator @remote.

Dalam struktur contoh ini, main.py skrip yang berisi dekorator @remote tidak terletak di direktori tingkat root. Struktur berikut TIDAK direkomendasikan.

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