

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

# Mengadaptasi wadah pelatihan Anda sendiri
<a name="adapt-training-container"></a>

Untuk menjalankan model pelatihan Anda sendiri, buat wadah Docker menggunakan [ Amazon Tra SageMaker ining Toolkit ](https://github.com/aws/sagemaker-training-toolkit) melalui instance SageMaker notebook Amazon.

## Langkah 1: Buat instance SageMaker buku catatan
<a name="byoc-training-step1"></a>

1. Buka konsol Amazon SageMaker AI di [ https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Di panel navigasi kiri, pilih ** Notebook**, pilih ** Instans buku ** catatan, lalu pilih ** Buat instance buku catatan**. 

1. Pada ** halaman ** Buat instance buku catatan, berikan informasi berikut: 

   1. Untuk nama instance ** Notebook**, masukkan**RunScriptNotebookInstance**.

   1. Untuk jenis Instans ** Notebook**, pilih**ml.t2.medium**.

   1. Di ** bagian ** Izin dan enkripsi, lakukan hal berikut:

      1. Untuk **Peran IAM**, pilih **Buat Peran Baru**. Ini membuka jendela baru.

      1. Pada ** halaman ** Buat peran IAM, pilih Bucket S3 ** spesifik**, tentukan bucket Amazon S3 bernama**sagemaker-run-script**, lalu pilih ** Buat peran**.

         SageMaker AI menciptakan peran IAM bernama`AmazonSageMaker-ExecutionRole-{{YYYYMMDD}}T{{HHmmSS}}`. Misalnya, `AmazonSageMaker-ExecutionRole-20190429T110788`. Perhatikan bahwa konvensi penamaan peran eksekusi menggunakan tanggal dan waktu di mana peran dibuat, dipisahkan oleh a`T`.

   1. Untuk Ak ** ses Root**, pilih ** Aktifkan**.

   1. Pilih **Buat instans notebook**. 

1. Pada ** halaman instance ** Notebook, ** Status Ter ** tun ** da**. Butuh beberapa menit bagi Amazon SageMaker AI untuk meluncurkan instance komputasi pembelajaran mesin — dalam hal ini, ia meluncurkan instance notebook — dan melampirkan volume penyimpanan ML ke dalamnya. Instance notebook memiliki server notebook Jupyter yang telah dikonfigurasi sebelumnya dan satu set pustaka Anaconda. Untuk informasi lebih lanjut, lihat [  CreateNotebookInstance](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateNotebookInstance.html). 

   

1. Klik pada ** Nama buku ** catatan yang baru saja Anda buat. Ini membuka halaman baru.

1.  Di ** bagian ** Izin dan enkripsi, salin ** nomor ARN peran IAM**, dan tempelkan ke file notepad untuk menyimpannya sementara. Anda menggunakan nomor ARN peran IAM ini nanti untuk mengonfigurasi pelatihan lokal ModelTrainer di instance notebook. **Nomor ARN peran IAM ** terlihat seperti berikut: `'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'` 

1. Setelah status instance notebook berubah menjadi ** InService**, pilih ** Buka JupyterLab**.

## Langkah 2: Buat dan unggah skrip pelatihan Dockerfile dan Python
<a name="byoc-training-step2"></a>

1. Setelah JupyterLab terbuka, buat folder baru di direktori home Anda JupyterLab. Di sudut kiri atas, pilih ** ikon Folder ** Baru, lalu masukkan nama folder. `docker_test_folder` 

1. Buat file `Dockerfile` teks di `docker_test_folder` direktori. 

   1. Pilih ** ikon Peluncur ** Baru (\+) di sudut kiri atas. 

   1. Di panel kanan di bawah ** bagian ** Lainnya, pilih File ** Teks**.

   1. Tempelkan kode `Dockerfile` contoh berikut ke file teks Anda. 

      ```
      #Download an open source TensorFlow Docker image
      FROM tensorflow/tensorflow:latest-gpu-jupyter
      
      # Install sagemaker-training toolkit that contains the common functionality necessary to create a container compatible with SageMaker AI and the Python SDK.
      RUN pip3 install sagemaker-training
      
      # Copies the training code inside the container
      COPY train.py /opt/ml/code/train.py
      
      # Defines train.py as script entrypoint
      ENV SAGEMAKER_PROGRAM train.py
      ```

      Script Dockerfile melakukan tugas-tugas berikut:
      + `FROM tensorflow/tensorflow:latest-gpu-jupyter`— Mengunduh gambar dasar TensorFlow Docker terbaru. Anda dapat menggantinya dengan gambar dasar Docker apa pun yang ingin Anda bawa untuk membangun wadah, serta dengan gambar basis kontainer AWS yang sudah dibuat sebelumnya.
      + `RUN pip install sagemaker-training`— Menginstal [ SageMaker Alat Pelatihan AI ](https://github.com/aws/sagemaker-training-toolkit) yang berisi fungsionalitas umum yang diperlukan untuk membuat wadah yang kompatibel dengan SageMaker AI. 
      + `COPY train.py /opt/ml/code/train.py`— Menyalin skrip ke lokasi di dalam wadah yang diharapkan oleh SageMaker AI. Skrip harus ditempatkan di folder ini.
      + `ENV SAGEMAKER_PROGRAM train.py`— Mengambil skrip pelatihan Anda `train.py` sebagai skrip titik masuk yang disalin di `/opt/ml/code` folder wadah. Ini adalah satu-satunya variabel lingkungan yang harus Anda tentukan ketika Anda membangun wadah Anda sendiri.

   1.  Pada panel navigasi direktori kiri, nama file teks mungkin secara otomatis diberi nama`untitled.txt`. Untuk mengganti nama file, klik kanan file, pilih U ** bah nama, ** ganti nama file sebagai `Dockerfile` tanpa `.txt` ekstensi, lalu tekan `Ctrl+s` atau `Command+s` untuk menyimpan file.

1. Unggah skrip pelatihan `train.py` ke`docker_test_folder`. Anda dapat menggunakan contoh skrip berikut untuk membuat model yang membaca digit tulisan tangan yang dilatih pada dataset [ MNIST ](https://en.wikipedia.org/wiki/MNIST_database) untuk latihan ini.

   ```
   import tensorflow as tf
   import os
   
   mnist = tf.keras.datasets.mnist
   
   (x_train, y_train), (x_test, y_test) = mnist.load_data()
   x_train, x_test = x_train / 255.0, x_test / 255.0
   
   model = tf.keras.models.Sequential([
   tf.keras.layers.Flatten(input_shape=(28, 28)),
   tf.keras.layers.Dense(128, activation='relu'),
   tf.keras.layers.Dropout(0.2),
   tf.keras.layers.Dense(10, activation='softmax')
   ])
   
   model.compile(optimizer='adam',
   loss='sparse_categorical_crossentropy',
   metrics=['accuracy'])
   
   model.fit(x_train, y_train, epochs=1)
   model_save_dir = f"{os.environ.get('SM_MODEL_DIR')}/1"
   
   model.evaluate(x_test, y_test)
   tf.saved_model.save(model, model_save_dir)
   ```

## Langkah 3: Bangun wadah
<a name="byoc-training-step3"></a>

1. Di direktori JupyterLab home, buka notebook Jupyter. Untuk membuka notebook baru, pilih ** ikon Peluncuran ** Baru dan kemudian pilih versi terbaru dari ** conda\_tensorflow ** 2 di bagian Notebook. ** **

1. Jalankan perintah berikut di sel notebook pertama untuk mengubah ke `docker_test_folder` direktori:

   ```
   cd ~/SageMaker/docker_test_folder
   ```

   Ini mengembalikan direktori Anda saat ini sebagai berikut:

   ```
   ! pwd
   ```

   `output: /home/ec2-user/SageMaker/docker_test_folder`

1. Untuk membangun wadah Docker, jalankan perintah build Docker berikut, termasuk ruang diikuti oleh titik di akhir:

   ```
   ! docker build -t tf-custom-container-test .
   ```

   Perintah build Docker harus dijalankan dari direktori Docker yang Anda buat, dalam hal ini. `docker_test_folder`
**catatan**  
Jika Anda mendapatkan pesan kesalahan berikut bahwa Docker tidak dapat menemukan Dockerfile, pastikan Dockerfile memiliki nama yang benar dan telah disimpan ke direktori.  

   ```
   unable to prepare context: unable to evaluate symlinks in Dockerfile path: 
   lstat /home/ec2-user/SageMaker/docker/Dockerfile: no such file or directory
   ```
Ingat bahwa `docker` mencari file yang secara khusus dipanggil `Dockerfile` tanpa ekstensi apa pun dalam direktori saat ini. Jika Anda menamainya dengan sesuatu yang lain, Anda dapat meneruskan nama file secara manual dengan `-f` bendera. Misalnya, jika Anda menamai Dockerfile Anda sebagai`Dockerfile-text.txt`, jalankan perintah berikut:  

   ```
   ! docker build -t tf-custom-container-test -f Dockerfile-text.txt .
   ```

## Langkah 4: Uji wadah
<a name="byoc-training-step4"></a>

1. Untuk menguji wadah secara lokal di instance notebook, buka notebook Jupyter. Pilih Peluncur ** Baru ** dan pilih versi terbaru dari ** conda\_tensorflow ** 2 di bagian Notebook. ** ** 

1. Tempelkan contoh skrip berikut ke sel kode notebook untuk mengonfigurasi SageMaker AI ModelTrainer.

   ```
   import sagemaker
   from sagemaker.train import ModelTrainer
   from sagemaker.train.configs import Compute
   from sagemaker.core.helper.session_helper import get_execution_role
   
   model_trainer = ModelTrainer(training_image='{{tf-custom-container-test}}',
                         role={{get_execution_role()}},
                         compute=Compute(instance_count={{1}},
                                         instance_type={{'local'}}))
   
   model_trainer.train()
   ```

   Dalam contoh kode sebelumnya, `get_execution_role()` ditentukan ke `role` argumen untuk secara otomatis mengambil peran yang diatur untuk sesi SageMaker AI. Anda juga dapat menggantinya dengan nilai string dari ** nomor ARN peran IAM yang ** Anda gunakan saat mengonfigurasi instance notebook. ARN akan terlihat seperti berikut:`'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'`. 

1. Jalankan sel kode. Tes ini menghasilkan konfigurasi lingkungan pelatihan, nilai yang digunakan untuk variabel lingkungan, sumber data, dan kehilangan dan akurasi yang diperoleh selama pelatihan.

## Langkah 5: Dorong wadah ke Amazon Elastic Container Registry (Amazon ECR)
<a name="byoc-training-step5"></a>

1. Setelah berhasil menjalankan pengujian mode lokal, Anda dapat mendorong wadah Docker ke [ Amazon ECR ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) dan menggunakannya untuk menjalankan tugas pelatihan. Jika Anda ingin menggunakan registri Docker pribadi alih-alih Amazon ECR, lihat Dor [ ong wadah pelatihan Anda ke registr ](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers-adapt-your-own-private-registry.html) i pribadi.

   Jalankan baris perintah berikut di sel notebook.

   ```
   %%sh
   
   # Specify an algorithm name
   algorithm_name=tf-custom-container-test
   
   account=$(aws sts get-caller-identity --query Account --output text)
   
   # Get the region defined in the current configuration (default to us-west-2 if none defined)
   region=$(aws configure get region)
   region=${region:-us-west-2}
   
   fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest"
   
   # If the repository doesn't exist in ECR, create it.
   
   aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1
   if [ $? -ne 0 ]
   then
   aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null
   fi
   
   # Get the login command from ECR and execute it directly
   
   aws ecr get-login-password --region ${region}|docker login --username AWS --password-stdin ${fullname}
   
   # Build the docker image locally with the image name and then push it to ECR
   # with the full name.
   
   docker build -t ${algorithm_name} .
   docker tag ${algorithm_name} ${fullname}
   
   docker push ${fullname}
   ```
**catatan**  
Skrip shell bash ini dapat menimbulkan masalah izin yang mirip dengan pesan kesalahan berikut:  

   ```
   "denied: User: [ARN] is not authorized to perform: ecr:InitiateLayerUpload on resource:
   arn:aws:ecr:us-east-1:[id]:repository/tf-custom-container-test"
   ```
Jika kesalahan ini terjadi, Anda perlu melampirkan ** AmazonEC2ContainerRegistryFullAccess ** kebijakan ke peran IAM Anda. Buka konsol [ IAM](https://console.aws.amazon.com/iam/home), pilih Peran ** dari ** panel navigasi kiri, cari IAMRole yang Anda gunakan untuk instance Notebook. Di bawah ** tab ** Izin, pilih ** tombol ** Lampirkan kebijakan, dan cari ** AmazonEC2ContainerRegistryFullAccess ** kebijakan tersebut. Tandai kotak centang kebijakan, dan pilih ** Tambahkan izin ** untuk menyelesaikan.

1. Jalankan kode berikut di sel notebook Studio untuk memanggil gambar Amazon ECR dari wadah pelatihan Anda.

   ```
   import boto3
   
   account_id = boto3.client('sts').get_caller_identity().get('Account')
   ecr_repository = 'tf-custom-container-test'
   tag = ':latest'
   
   region = boto3.session.Session().region_name
   
   uri_suffix = 'amazonaws.com'
   if region in ['cn-north-1', 'cn-northwest-1']:
       uri_suffix = 'amazonaws.com.cn'
   
   byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag)
   
   byoc_image_uri
   # This should return something like
   # 111122223333.dkr.ecr.us-east-2.amazonaws.com/sagemaker-byoc-test:latest
   ```

1. Gunakan yang `ecr_image` diambil dari langkah sebelumnya untuk mengonfigurasi ModelTrainer objek SageMaker AI. Contoh kode berikut mengonfigurasi SageMaker AI ModelTrainer dengan `byoc_image_uri` dan memulai pekerjaan pelatihan pada instans Amazon EC2.

------
#### [ SageMaker Python SDK v1 ]

   ```
   import sagemaker
   from sagemaker.core.helper.session_helper import get_execution_role
   from sagemaker.train import ModelTrainer
   from sagemaker.train.configs import Compute
   
   model_trainer = ModelTrainer(training_image=byoc_image_uri,
                         role=get_execution_role(),
                         compute=Compute(
                             instance_count=1,
                             instance_type='ml.g4dn.xlarge'),
                         base_job_name='tf-custom-container-test-job')
   
   #train your model
   model_trainer.train()
   ```

------
#### [ SageMaker Python SDK v2 ]

   ```
   import sagemaker
   from sagemaker.core.helper.session_helper import get_execution_role
   from sagemaker.train import ModelTrainer
   from sagemaker.train.configs import Compute
   
   model_trainer = ModelTrainer(training_image=byoc_image_uri,
                         role=get_execution_role(),
                         compute=Compute(
                             instance_count=1,
                             instance_type='ml.g4dn.xlarge'),
                         base_job_name='tf-custom-container-test-job')
   
   #train your model
   model_trainer.train()
   ```

------

1. Jika Anda ingin menerapkan model menggunakan wadah Anda sendiri, lihat Meng [ adaptasi Wadah Inferensi Anda Sendiri. ](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-inference-container.html) Anda juga dapat menggunakan wadah AWS kerangka kerja yang dapat menerapkan TensorFlow model. Untuk menerapkan model contoh untuk membaca digit tulisan tangan, masukkan skrip contoh berikut ke buku catatan yang sama yang Anda gunakan untuk melatih model Anda di sub-langkah sebelumnya untuk mendapatkan URI gambar (pengidentifikasi sumber daya universal) yang diperlukan untuk penerapan, dan menerapkan model.

   ```
   import boto3
   import sagemaker
   import json
   
   #obtain image uris
   from sagemaker.core import image_uris
   from sagemaker.serve import ModelBuilder
   
   container = image_uris.retrieve(framework='tensorflow',region='us-west-2',version='2.11.0',
                       image_scope='inference',instance_type='ml.g4dn.xlarge')
   
   #create the model entity, endpoint configuration and endpoint
   model_builder = ModelBuilder(
       image_uri=container,
       s3_model_data_url=model_trainer.model_data,
       role_arn=get_execution_role(),
       instance_type='ml.g4dn.xlarge'
   )
   model = model_builder.build()
   endpoint = model_builder.deploy()
   ```

   Uji model Anda menggunakan contoh digit tulisan tangan dari dataset MNIST menggunakan contoh kode berikut.

   ```
   #Retrieve an example test dataset to test
   import numpy as np
   import matplotlib.pyplot as plt
   from keras.datasets import mnist
   
   # Load the MNIST dataset and split it into training and testing sets
   (x_train, y_train), (x_test, y_test) = mnist.load_data()
   # Select a random example from the training set
   example_index = np.random.randint(0, x_train.shape[0])
   example_image = x_train[example_index]
   example_label = y_train[example_index]
   
   # Print the label and show the image
   print(f"Label: {example_label}")
   plt.imshow(example_image, cmap='gray')
   plt.show()
   ```

   Ubah digit tulisan tangan tes menjadi bentuk yang TensorFlow dapat menelan dan membuat prediksi tes.

   ```
   import json
   data = {"instances": example_image.tolist()}
   response = endpoint.invoke(body=json.dumps(data))
   result = json.loads(response.body.read().decode('utf-8')) #make the prediction
   ```

Untuk contoh lengkap yang menunjukkan cara menguji wadah khusus secara lokal dan mendorongnya ke gambar Amazon ECR, lihat buku catatan [ contoh ](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/tensorflow_bring_your_own/tensorflow_bring_your_own.html) Membangun TensorFlow Kontainer Anda Sendiri.

**Tip**  
Untuk membuat profil dan men-debug pekerjaan pelatihan untuk memantau masalah pemanfaatan sistem (seperti hambatan CPU dan kurangnya pemanfaatan GPU) dan mengidentifikasi masalah pelatihan (seperti overfitting, overtraining, tensor yang meledak, dan gradien menghilang), gunakan Amazon Debugger. SageMaker Untuk informasi selengkapnya, lihat [Gunakan Debugger dengan wadah pelatihan khusus](debugger-bring-your-own-container.md).

## Langkah 6: Bersihkan Sumber Daya
<a name="byoc-training-step6"></a>

**Untuk membersihkan sumber daya setelah selesai dengan contoh mulai**

1. Buka konsol [ SageMaker AI](https://console.aws.amazon.com/sagemaker/), pilih instance notebook ** RunScriptNotebookInstance**, pilih Ac ** tions**, dan pilih ** Stop**. Hal ini dapat memerlukan waktu beberapa menit sampai instans berhenti. 

1. Setelah ** Status instance ** berubah menjadi Dih ** entikan**, pilih ** T ** indakan, pilih ** ** Hapus, lalu pilih ** H ** apus di kotak dialog. Diperlukan beberapa menit untuk menghapus instans. Instans buku catatan menghilang dari tabel ketika telah dihapus. 

1. Buka konsol [ Amazon S3 ](https://console.aws.amazon.com/s3/) dan hapus bucket yang Anda buat untuk menyimpan artefak model dan dataset pelatihan. 

1. Buka konsol [ IAM ](https://console.aws.amazon.com/iam/) dan hapus peran IAM. Jika Anda membuat kebijakan izin, Anda juga dapat menghapusnya. 
**catatan**  
 Container Docker mati secara otomatis setelah dijalankan. Anda tidak perlu menghapusnya.

## Blog dan Studi Kasus
<a name="byoc-blogs-and-examples"></a>

Blog berikut membahas studi kasus tentang penggunaan wadah pelatihan khusus di Amazon SageMaker AI.
+ [Mengapa membawa wadah Anda sendiri ke Amazon SageMaker AI dan bagaimana melakukannya dengan benar](https://medium.com/@pandey.vikesh/why-bring-your-own-container-to-amazon-sagemaker-and-how-to-do-it-right-bc158fe41ed1), * Medium * (20 Januari 2023)