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
Untuk menjalankan model pelatihan Anda sendiri, buat container Docker menggunakan Amazon SageMaker Training Toolkit
Langkah 1: Buat instance SageMaker notebook
Buka konsol Amazon SageMaker AI di https://console.aws.amazon.com/sagemaker/
. -
Di panel navigasi kiri, pilih Notebook, pilih instance Notebook, lalu pilih Buat instance notebook.
-
Pada halaman Create notebook instance, berikan informasi berikut:
-
Untuk nama instance Notebook, masukkan
RunScriptNotebookInstance
. -
Untuk jenis Instance Notebook, pilih
ml.t2.medium
. -
Di bagian Izin dan enkripsi, lakukan hal berikut:
-
Untuk IAMperan, pilih Buat peran baru. Ini membuka jendela baru.
-
Pada halaman Buat IAM peran, pilih bucket S3 Spesifik, tentukan bucket Amazon S3
sagemaker-run-script
bernama, lalu pilih Buat peran.SageMaker AI menciptakan IAM peran bernama
AmazonSageMaker-ExecutionRole-
. Misalnya,YYYYMMDD
THHmmSS
AmazonSageMaker-ExecutionRole-20190429T110788
. Perhatikan bahwa konvensi penamaan peran eksekusi menggunakan tanggal dan waktu pembuatan peran, dipisahkan oleh aT
.
-
-
Untuk Akses Root, pilih Aktifkan.
-
Pilih Buat instans notebook.
-
-
Pada halaman Instance Notebook, Status Tertunda. Amazon SageMaker AI dapat memakan waktu beberapa menit 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 perpustakaan Anaconda. Untuk informasi lebih lanjut, lihat CreateNotebookInstance.
-
Klik pada Nama buku catatan yang baru saja Anda buat. Ini membuka halaman baru.
-
Di bagian Izin dan enkripsi, salin ARNnomor IAM peran, dan tempel ke file notepad untuk menyimpannya sementara. Anda menggunakan ARN nomor IAM peran ini nanti untuk mengonfigurasi estimator pelatihan lokal di instance buku catatan. ARNNomor IAM peran terlihat seperti berikut:
'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
-
Setelah status instance notebook berubah menjadi InService, pilih Buka JupyterLab.
Langkah 2: Buat dan unggah skrip pelatihan Dockerfile dan Python
-
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
-
Buat file
Dockerfile
teks didocker_test_folder
direktori.-
Pilih ikon Peluncur Baru (+) di sudut kiri atas.
-
Di panel kanan di bawah bagian Lainnya, pilih File Teks.
-
Tempelkan kode
Dockerfile
contoh berikut ke dalam 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
Skrip Dockerfile melakukan tugas-tugas berikut:
-
FROM tensorflow/tensorflow:latest-gpu-jupyter
— Mengunduh gambar dasar TensorFlow Docker terbaru. Anda dapat mengganti ini dengan gambar dasar Docker apa pun yang ingin Anda bawa untuk membangun kontainer, serta dengan gambar dasar kontainer yang AWS sudah dibuat sebelumnya. -
RUN pip install sagemaker-training
— Menginstal SageMaker AI Training Toolkityang 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 berada di folder ini. -
ENV SAGEMAKER_PROGRAM train.py
— Mengambil skrip pelatihan Andatrain.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.
-
-
Pada panel navigasi direktori kiri, nama file teks mungkin otomatis diberi
untitled.txt
nama. Untuk mengganti nama file, klik kanan file, pilih Ganti nama, ganti nama fileDockerfile
tanpa.txt
ekstensi, lalu tekanCtrl+s
atauCommand+s
untuk menyimpan file.
-
-
Unggah skrip pelatihan
train.py
kedocker_test_folder
. Anda dapat menggunakan contoh skrip berikut untuk membuat model yang membaca digit tulisan tangan yang dilatih pada MNISTkumpulan datauntuk 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
-
Di direktori JupyterLab home, buka notebook Jupyter. Untuk membuka buku catatan baru, pilih ikon Peluncuran Baru lalu pilih versi terbaru conda_tensorflow2 di bagian Notebook.
-
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
-
Untuk membangun wadah Docker, jalankan perintah build Docker berikut, termasuk spasi yang diikuti oleh titik di akhir:
! docker build -t tf-custom-container-test .
Perintah Docker build 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
Ingatlah bahwa
docker
mencari file yang secara khusus dipanggilDockerfile
tanpa ekstensi apa pun dalam direktori saat ini. Jika Anda menamakannya sesuatu yang lain, Anda dapat meneruskan nama file secara manual dengan-f
bendera. Misalnya, jika Anda menamai Dockerfile sebagaiDockerfile-text.txt
, jalankan perintah berikut:! docker build -t tf-custom-container-test -f Dockerfile-text.txt .
Langkah 4: Uji wadahnya
-
Untuk menguji kontainer secara lokal di instance notebook, buka notebook Jupyter. Pilih Peluncur Baru dan pilih versi terbaru conda_tensorflow2 di bagian Notebook.
-
Rekatkan skrip contoh berikut ke sel kode notebook untuk mengonfigurasi SageMaker AI Estimator.
import sagemaker from sagemaker.estimator import Estimator estimator = Estimator(image_uri='
tf-custom-container-test
', role=sagemaker.get_execution_role()
, instance_count=1
, instance_type='local'
) estimator.fit()Dalam contoh kode sebelumnya,
sagemaker.get_execution_role()
ditentukan kerole
argumen untuk secara otomatis mengambil peran yang disiapkan untuk sesi AI. SageMaker Anda juga dapat menggantinya dengan nilai string ARNnomor IAM peran yang Anda gunakan saat mengonfigurasi instance notebook. ARNSeharusnya terlihat seperti berikut:'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
. -
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 (AmazonECR)
-
Setelah berhasil menjalankan pengujian mode lokal, Anda dapat mendorong wadah Docker ke Amazon ECR dan menggunakannya untuk menjalankan pekerjaan pelatihan. Jika Anda ingin menggunakan registri Docker pribadi alih-alih AmazonECR, lihat Dorong wadah pelatihan Anda ke registri 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 bash shell 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 harus melampirkan EC2ContainerRegistryFullAccess kebijakan Amazon ke IAM peran Anda. Buka IAMkonsol
, pilih Peran dari panel navigasi kiri, cari yang IAMrole Anda gunakan untuk instance Notebook. Di bawah tab Izin, pilih tombol Lampirkan kebijakan, dan cari EC2ContainerRegistryFullAccess kebijakan Amazon. Tandai kotak centang kebijakan, dan pilih Tambahkan izin untuk menyelesaikan. -
Jalankan kode berikut di sel notebook Studio untuk memanggil ECR gambar Amazon 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
-
Gunakan yang
ecr_image
diambil dari langkah sebelumnya untuk mengonfigurasi objek estimator SageMaker AI. Contoh kode berikut mengonfigurasi estimator SageMaker AI denganbyoc_image_uri
dan memulai pekerjaan pelatihan pada instans Amazon. EC2 -
Jika Anda ingin menerapkan model Anda menggunakan wadah Anda sendiri, lihat Mengadaptasi Wadah Inferensi Anda Sendiri. 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 dalam buku catatan yang sama yang Anda gunakan untuk melatih model Anda di sub-langkah sebelumnya untuk mendapatkan gambar URIs (pengidentifikasi sumber daya universal) yang diperlukan untuk penerapan, dan gunakan model.
import boto3 import sagemaker #obtain image uris from sagemaker import image_uris 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 predictor = estimator.deploy(1,instance_type='ml.g4dn.xlarge',image_uri=container)
Uji model Anda menggunakan contoh digit tulisan tangan dari MNIST kumpulan data 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.
from sagemaker.serializers import JSONSerializer data = {"instances": example_image.tolist()} predictor.serializer=JSONSerializer() #update the predictor to use the JSONSerializer predictor.predict(data) #make the prediction
Untuk contoh lengkap yang menunjukkan cara menguji container kustom secara lokal dan mendorongnya ke ECR image Amazon, lihat contoh buku catatan Building Your Own TensorFlow Container
Tip
Untuk membuat profil dan men-debug pekerjaan pelatihan untuk memantau masalah pemanfaatan sistem (seperti CPU kemacetan dan kurangnya GPU pemanfaatan) dan mengidentifikasi masalah pelatihan (seperti overfitting, overtraining, tensor meledak, dan gradien menghilang), gunakan Amazon Debugger. SageMaker Untuk informasi selengkapnya, lihat Gunakan Debugger dengan wadah pelatihan khusus.
Langkah 6: Bersihkan Sumber Daya
Untuk membersihkan sumber daya saat selesai dengan contoh memulai
-
Buka konsol SageMaker AI
, pilih instance notebook RunScriptNotebookInstance, pilih Actions, dan pilih Stop. Hal ini dapat memerlukan waktu beberapa menit sampai instans berhenti. -
Setelah Status instance berubah menjadi Berhenti, pilih Tindakan, pilih Hapus, lalu pilih Hapus di kotak dialog. Diperlukan waktu beberapa menit untuk menghapus instance. Instance notebook menghilang dari tabel ketika telah dihapus.
-
Buka konsol Amazon S3
dan hapus bucket yang Anda buat untuk menyimpan artefak model dan kumpulan data pelatihan. -
Buka IAMkonsol
dan hapus IAM peran. Jika Anda membuat kebijakan izin, Anda juga dapat menghapusnya. catatan
Kontainer Docker dimatikan secara otomatis setelah dijalankan. Anda tidak perlu menghapusnya.
Blog dan Studi Kasus
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
, Medium (20 Januari 2023)