

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
<a name="train-remote-decorator-modular"></a>

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` ke`True`, 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 ke`True`, SageMaker AI mengemas semua skrip Python sambil mempertahankan struktur direktori di 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.py`memanggil skrip dependen. Juga, `main.py` skrip berisi kode untuk mengimpor ketergantungan seperti yang ditunjukkan.

```
from mnist_impl.pytorch_mnist import ...
```

`main.py`File juga harus berisi `@remote` dekorator, dan harus mengatur `include_local_workdir` parameter ke`True`.

`include_local_workdir`Parameter 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_name_patterns=[ # 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
<a name="train-remote-decorator-modular-bestprac"></a>

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 yang 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
```