

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

# Bagaimana Amazon SageMaker AI Menjalankan Gambar Pelatihan Anda
<a name="your-algorithms-training-algo-dockerfile"></a>

Anda dapat menggunakan skrip entrypoint khusus untuk mengotomatiskan infrastruktur untuk melatih di lingkungan produksi. Jika Anda meneruskan skrip entrypoint Anda ke wadah Docker Anda, Anda juga dapat menjalankannya sebagai skrip mandiri tanpa membangun kembali gambar Anda. SageMaker AI memproses gambar pelatihan Anda menggunakan skrip entrypoint kontainer Docker. 

Bagian ini menunjukkan cara menggunakan entrypoint khusus tanpa menggunakan toolkit pelatihan. Jika Anda ingin menggunakan entrypoint khusus tetapi tidak terbiasa dengan cara mengonfigurasi wadah Docker secara manual, kami sarankan Anda menggunakan perpustakaan toolkit [SageMaker pelatihan](https://github.com/aws/sagemaker-training-toolkit) sebagai gantinya. Untuk informasi selengkapnya tentang cara menggunakan toolkit pelatihan, lihat[Mengadaptasi wadah pelatihan Anda sendiri](adapt-training-container.md). 

Secara default, SageMaker AI mencari skrip yang disebut `train` di dalam wadah Anda. Anda juga dapat secara manual memberikan entrypoint kustom Anda sendiri dengan menggunakan `ContainerArguments` dan `ContainerEntrypoint` parameter API. [AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html) 

Anda memiliki dua opsi berikut untuk mengonfigurasi wadah Docker Anda secara manual untuk menjalankan gambar Anda.
+ Gunakan [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)API dan wadah Docker dengan instruksi entrypoint yang terdapat di dalamnya.
+ Gunakan `CreateTrainingJob` API, dan teruskan skrip pelatihan Anda dari luar wadah Docker Anda.

Jika Anda meneruskan skrip pelatihan Anda dari luar wadah Docker Anda, Anda tidak perlu membangun kembali wadah Docker saat Anda memperbarui skrip Anda. Anda juga dapat menggunakan beberapa skrip berbeda untuk dijalankan di wadah yang sama.

Skrip entrypoint Anda harus berisi kode pelatihan untuk gambar Anda. Jika Anda menggunakan `source_dir` parameter opsional di dalam [estimator](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html), parameter tersebut harus mereferensikan jalur Amazon S3 relatif ke folder yang berisi skrip titik masuk Anda. Anda dapat mereferensikan beberapa file menggunakan `source_dir` parameter. Jika Anda tidak menggunakan`source_dir`, Anda dapat menentukan titik masuk menggunakan parameter. `entry_point` Untuk contoh skrip entrypoint khusus yang berisi estimator, lihat [Membawa Model Anda Sendiri dengan Mode Skrip SageMaker AI](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html).

SageMaker Pelatihan model AI mendukung bucket direktori S3 Express One Zone berkinerja tinggi sebagai lokasi input data untuk mode file, mode file cepat, dan mode pipa. Anda juga dapat menggunakan bucket direktori S3 Express One Zone untuk menyimpan output pelatihan Anda. Untuk menggunakan S3 Express One Zone, berikan URI bucket direktori S3 Express One Zone, bukan bucket tujuan umum Amazon S3. Anda hanya dapat mengenkripsi data keluaran SageMaker AI di bucket direktori dengan enkripsi sisi server dengan kunci terkelola Amazon S3 (SSE-S3). Enkripsi sisi server dengan AWS KMS kunci (SSE-KMS) saat ini tidak didukung untuk menyimpan data keluaran SageMaker AI dalam bucket direktori. Untuk informasi selengkapnya, lihat [S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html).

## Jalankan pekerjaan pelatihan dengan skrip entrypoint yang dibundel di dalam wadah Docker
<a name="your-algorithms-training-algo-dockerfile-api-ep-in"></a>

SageMaker AI dapat menjalankan skrip entrypoint yang dibundel di dalam wadah Docker Anda. 
+ Secara default, Amazon SageMaker AI menjalankan wadah berikut.

  ```
  docker run {{image}} train
  ```
+ SageMaker AI mengganti pernyataan [CMD](https://docs.docker.com/engine/reference/builder/#cmd) default apa pun dalam wadah dengan menentukan `train` argumen setelah nama gambar. Dalam wadah Docker Anda, gunakan `exec` bentuk `ENTRYPOINT` instruksi berikut.

  ```
  ENTRYPOINT ["{{executable}}", "{{param1}}", "{{param2}}", ...]
  ```

  Contoh berikut menunjukkan bagaimana menentukan instruksi entrypoint python yang disebut. `k-means-algorithm.py`

  ```
  ENTRYPOINT ["python", "k-means-algorithm.py"]
  ```

  `exec`Bentuk `ENTRYPOINT` instruksi memulai eksekusi secara langsung, bukan sebagai anak dari. `/bin/sh` Ini memungkinkannya untuk menerima sinyal seperti `SIGTERM` dan `SIGKILL` dari SageMaker APIs. Ketentuan berikut berlaku saat menggunakan SageMaker APIs. 
  + [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)API memiliki kondisi penghentian yang mengarahkan SageMaker AI untuk menghentikan pelatihan model setelah waktu tertentu. 
  + Berikut ini menunjukkan [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html)API. API ini mengeluarkan yang setara dengan perintah batas waktu 2 menit untuk menghentikan penampung yang ditentukan dengan anggun. `docker stop`

    ```
    docker stop -t 120
    ```

    Perintah mencoba menghentikan wadah yang sedang berjalan dengan mengirimkan `SIGTERM` sinyal. Setelah batas waktu 2 menit, API mengirim `SIGKILL` dan menghentikan kontainer secara paksa. Jika wadah menangani `SIGTERM` dengan anggun dan keluar dalam waktu 120 detik sejak menerimanya, tidak ada `SIGKILL` yang dikirim. 

  Jika Anda ingin akses ke artefak model perantara setelah SageMaker AI menghentikan pelatihan, tambahkan kode untuk menangani penyimpanan artefak di handler Anda`SIGTERM`.
+ Jika Anda berencana menggunakan perangkat GPU untuk pelatihan model, pastikan kontainer Anda `nvidia-docker` kompatibel. Sertakan hanya toolkit CUDA pada wadah; jangan bundel driver NVIDIA dengan gambar. Untuk informasi selengkapnya`nvidia-docker`, lihat [NVIDIA/NVIDIA-Docker](https://github.com/NVIDIA/nvidia-docker).
+ Anda tidak dapat menggunakan `tini` penginisialisasi sebagai skrip titik masuk Anda dalam wadah SageMaker AI karena bingung dengan argumen dan. `train` `serve`
+ `/opt/ml`dan semua subdirektori dicadangkan oleh SageMaker pelatihan. Saat membuat image Docker algoritme Anda, pastikan Anda tidak menempatkan data apa pun yang diperlukan oleh algoritme Anda di direktori ini. Karena jika Anda melakukannya, data mungkin tidak lagi terlihat selama pelatihan.

Untuk menggabungkan skrip shell atau Python Anda di dalam image Docker Anda, atau untuk menyediakan skrip dalam bucket Amazon S3 atau dengan menggunakan ( AWS Command Line Interface CLI), lanjutkan ke bagian berikut.

### Bundel skrip shell Anda dalam wadah Docker
<a name="your-algorithms-training-algo-dockerfile-script-sh"></a>

 Jika Anda ingin menggabungkan skrip shell khusus di dalam gambar Docker Anda, gunakan langkah-langkah berikut. 

1. Salin skrip shell Anda dari direktori kerja Anda ke dalam wadah Docker Anda. Cuplikan kode berikut menyalin skrip entrypoint kustom `custom_entrypoint.sh` dari direktori kerja saat ini ke wadah Docker yang terletak di. `mydir` Contoh berikut mengasumsikan bahwa image Docker dasar telah diinstal Python.

   ```
   FROM {{<base-docker-image>}}:{{<tag>}}
   
   # Copy custom entrypoint from current dir to /mydir on container
   COPY {{./custom_entrypoint.sh /mydir/ }}
   ```

1. Buat dan dorong wadah Docker ke Amazon Elastic Container Registry ([Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) dengan mengikuti petunjuk di [Mendorong gambar Docker di Panduan](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) Pengguna *Amazon ECR*.

1. Luncurkan pekerjaan pelatihan dengan menjalankan AWS CLI perintah berikut.

   ```
   aws --region {{<your-region>}} sagemaker create-training-job \
   --training-job-name {{<your-training-job-name>}} \
   --role-arn {{<your-execution-role-arn>}} \
   --algorithm-specification '{ \ 
       "TrainingInputMode": "File", \
       "TrainingImage": "{{<your-ecr-image>}}", \
       "ContainerEntrypoint": ["{{/bin/sh}}"], \
       "ContainerArguments": ["{{/mydir/custom_entrypoint.sh}}"]}' \
   --output-data-config '{"S3OutputPath": "{{s3://custom-entrypoint-output-bucket/}}"}' \
   --resource-config '{"VolumeSizeInGB":{{10}},"InstanceCount":{{1}},"InstanceType":"{{ml.m5.2xlarge}}"}' \
   --stopping-condition '{"MaxRuntimeInSeconds": {{180}}}'
   ```

### Bundel skrip Python Anda dalam wadah Docker
<a name="your-algorithms-training-algo-dockerfile-script-py"></a>

Untuk menggabungkan skrip Python kustom di dalam gambar Docker Anda, gunakan langkah-langkah berikut. 

1. Salin skrip Python Anda dari direktori kerja Anda ke dalam wadah Docker Anda. Cuplikan kode berikut menyalin skrip entrypoint kustom `custom_entrypoint.py` dari direktori kerja saat ini ke wadah Docker yang terletak di. `mydir`

   ```
   FROM {{<base-docker-image>}}:{{<tag>}}
   # Copy custom entrypoint from current dir to /mydir on container
   COPY {{./custom_entrypoint.py /mydir/}}
   ```

1. Luncurkan pekerjaan pelatihan dengan menjalankan AWS CLI perintah berikut.

   ```
   --algorithm-specification '{ \ 
       "TrainingInputMode": "File", \
       "TrainingImage": "{{<your-ecr-image>}}", \
       "ContainerEntrypoint": ["{{python}}"], \
       "ContainerArguments": ["{{/mydir/custom_entrypoint.py}}"]}' \
   ```

## Jalankan pekerjaan pelatihan dengan skrip titik masuk di luar wadah Docker
<a name="your-algorithms-training-algo-dockerfile-api-pass-ep"></a>

Anda dapat menggunakan wadah Docker Anda sendiri untuk pelatihan dan meneruskan skrip titik masuk dari luar wadah Docker. Ada beberapa manfaat untuk menyusun skrip entrypoint Anda di luar wadah. Jika Anda memperbarui skrip entrypoint Anda, Anda tidak perlu membangun kembali wadah Docker. Anda juga dapat menggunakan beberapa skrip berbeda untuk dijalankan di wadah yang sama. 

Tentukan lokasi skrip pelatihan Anda menggunakan `ContainerEntrypoint` dan `ContainerArguments` parameter [AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)API. Titik masuk dan argumen ini berperilaku dengan cara yang sama seperti titik masuk dan argumen Docker. Nilai dalam parameter ini mengesampingkan yang sesuai `ENTRYPOINT` atau `CMD` disediakan sebagai bagian dari wadah Docker. 

Saat Anda meneruskan skrip entrypoint kustom Anda ke wadah pelatihan Docker Anda, input yang Anda berikan menentukan perilaku penampung.
+ Misalnya, jika Anda hanya menyediakan`ContainerEntrypoint`, sintaks permintaan menggunakan CreateTrainingJob API adalah sebagai berikut.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerEntrypoint": ["{{string}}"],   
          ...     
          }       
  }
  ```

  Kemudian, backend SageMaker pelatihan menjalankan entrypoint khusus Anda sebagai berikut.

  ```
  docker run --entrypoint {{<ContainerEntrypoint>}} image
  ```
**catatan**  
Jika `ContainerEntrypoint` disediakan, backend SageMaker pelatihan menjalankan gambar dengan titik masuk yang diberikan dan mengganti default pada gambar. `ENTRYPOINT`
+ Jika Anda hanya menyediakan`ContainerArguments`, SageMaker AI mengasumsikan bahwa wadah Docker berisi skrip titik masuk. Sintaks permintaan menggunakan `CreateTrainingJob` API adalah sebagai berikut.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerArguments": ["{{arg1}}", "{{arg2}}"],
          ...
      }
  }
  ```

  Backend SageMaker pelatihan menjalankan entrypoint kustom Anda sebagai berikut.

  ```
  docker run image {{<ContainerArguments>}}
  ```
+ Jika Anda memberikan keduanya `ContainerEntrypoint` dan`ContainerArguments`, maka sintaks permintaan menggunakan `CreateTrainingJob` API adalah sebagai berikut.

  ```
  {
      "AlgorithmSpecification": {
          "ContainerEntrypoint": ["{{string}}"],
          "ContainerArguments": ["{{arg1}}", "{{arg2}}"],
          ...
      }
  }
  ```

   Backend SageMaker pelatihan menjalankan entrypoint kustom Anda sebagai berikut.

  ```
  docker run --entrypoint {{<ContainerEntrypoint>}} image {{<ContainerArguments>}}
  ```

Anda dapat menggunakan `InputDataConfig` sumber apa pun yang didukung di `CreateTrainingJob` API untuk menyediakan skrip titik masuk untuk menjalankan image pelatihan Anda. 

### Berikan skrip entrypoint Anda di bucket Amazon S3
<a name="your-algorithms-training-algo-dockerfile-script-s3"></a>

 Untuk menyediakan skrip entrypoint khusus menggunakan bucket S3, gunakan `S3DataSource` parameter [DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)API untuk menentukan lokasi skrip. Jika Anda menggunakan `S3DataSource` parameter, berikut ini diperlukan.
+ [InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)Harus dari tipe`File`.
+ [S3 DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource) harus. `FullyReplicated`

Contoh berikut memiliki skrip bernama custom\_entrypoint.sh ditempatkan di jalur ke bucket `s3://<bucket-name>/<bucket prefix>/custom_entrypoint.sh` S3.

```
#!/bin/bash
echo "Running custom_entrypoint.sh"
echo "Hello you have provided the following arguments: " "$@"
```

Selanjutnya, Anda harus mengatur konfigurasi saluran data input untuk menjalankan pekerjaan pelatihan. Lakukan ini baik dengan menggunakan secara AWS CLI langsung atau dengan file JSON.

#### Konfigurasikan saluran data input menggunakan AWS CLI dengan file JSON
<a name="your-algorithms-training-algo-dockerfile-script-s3-json"></a>

Untuk mengkonfigurasi saluran data input Anda dengan file JSON, gunakan AWS CLI seperti yang ditunjukkan dalam struktur kode berikut. Pastikan bahwa semua bidang berikut menggunakan sintaks permintaan yang ditentukan dalam [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax)API.

```
// run-my-training-job.json
{
 "[AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-AlgorithmSpecification)": { 
        "ContainerEntrypoint": ["{{/bin/sh}}"],
        "ContainerArguments": ["/opt/ml/input/data/{{<your_channel_name>}}/{{custom_entrypoint.sh}}"],
         ...
   },
  "[InputDataConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-InputDataConfig)": [ 
    { 
        "[ChannelName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-ChannelName)": "{{<your_channel_name>}}",
        "[DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-DataSource)": { 
            "[S3DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)": { 
                "[S3DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataDistributionType)": "FullyReplicated",
                "[S3DataType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataType)": "S3Prefix",
                "[S3Uri](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3Uri)": "s3://{{<bucket-name>}}/{{<bucket_prefix>}}"
            }
        },
        "[InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)": "File",
    },
    ...]
}
```

Selanjutnya, jalankan AWS CLI perintah untuk meluncurkan pekerjaan pelatihan dari file JSON sebagai berikut.

```
aws sagemaker create-training-job --cli-input-json file:{{//run-my-training-job.json}}
```

#### Konfigurasikan saluran data input menggunakan AWS CLI langsung
<a name="your-algorithms-training-algo-dockerfile-script-s3-directly"></a>

Untuk mengkonfigurasi saluran data input Anda tanpa file JSON, gunakan struktur AWS CLI kode berikut.

```
aws --region {{<your-region>}} sagemaker create-training-job \
--training-job-name {{<your-training-job-name>}} \
--role-arn {{<your-execution-role-arn>}} \
--algorithm-specification '{ \
    "TrainingInputMode": "File", \
    "TrainingImage": "{{<your-ecr-image>}}", \
    "ContainerEntrypoint": ["{{/bin/sh}}"], \
    "ContainerArguments": ["{{/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"]}}}' \
--input-data-config '[{ \
    "ChannelName":"{{<your_channel_name>}}", \
    "DataSource":{ \
        "S3DataSource":{ \
            "S3DataType":"S3Prefix", \
            "S3Uri":"s3://{{<bucket-name>}}/{{<bucket_prefix>}}", \
            "S3DataDistributionType":"FullyReplicated"}}}]' \
--output-data-config '{"S3OutputPath": "{{s3://custom-entrypoint-output-bucket/}}"}' \
--resource-config '{"VolumeSizeInGB":{{10}},"InstanceCount":{{1}},"InstanceType":"{{ml.m5.2xlarge}}"}' \
--stopping-condition '{"MaxRuntimeInSeconds": {{180}}}'
```