Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Cara Amazon SageMaker AI Menjalankan Gambar Pelatihan Anda
Anda dapat menggunakan skrip titik masuk khusus untuk mengotomatiskan infrastruktur untuk melatih di lingkungan produksi. Jika Anda meneruskan skrip titik masuk ke wadah Docker Anda, Anda juga dapat menjalankannya sebagai skrip mandiri tanpa membangun kembali gambar Anda. SageMaker AI memproses gambar pelatihan Anda menggunakan skrip titik masuk wadah Docker.
Bagian ini menunjukkan cara menggunakan titik masuk khusus tanpa menggunakan toolkit pelatihan. Jika Anda ingin menggunakan titik masuk khusus tetapi tidak terbiasa dengan cara mengonfigurasi wadah Docker secara manual, sebaiknya gunakan pustaka toolkit SageMaker pelatihan sebagai gantinya.
Secara default, SageMaker AI mencari skrip yang disebut train di dalam wadah Anda. Anda juga dapat secara manual menyediakan titik masuk kustom Anda sendiri dengan menggunakan ContainerEntrypoint parameter ContainerArguments dan dari API. AlgorithmSpecification
Anda memiliki dua opsi berikut untuk mengkonfigurasi wadah Docker Anda secara manual untuk menjalankan gambar Anda.
-
Gunakan CreateTrainingJob API dan wadah Docker dengan instruksi entrypoint yang terkandung di dalamnya.
-
Gunakan
CreateTrainingJobAPI, dan berikan skrip pelatihan Anda dari luar wadah Docker Anda.
Jika Anda meneruskan skrip pelatihan dari luar wadah Docker Anda, Anda tidak perlu membangun kembali wadah Docker saat memperbarui skrip Anda. Anda juga dapat menggunakan beberapa skrip berbeda untuk dijalankan dalam wadah yang sama.
Skrip entrypoint Anda harus berisi kode pelatihan untuk gambar Anda. Jika Anda menggunakan parameter opsional di dalam ModelTrainersource_dir 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 menggunakansource_dir, Anda dapat menentukan titik masuk menggunakan parameter. entry_point Untuk contoh skrip titik masuk khusus yang berisi a ModelTrainer, lihat Membawa Model Sen diri dengan Mode Skrip SageMaker AI.
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 alih-alih bucket tujuan umum Amazon S3. Anda hanya dapat mengenkripsi data keluaran SageMaker AI dalam bucket direktori dengan enkripsi sisi server dengan kunci terkelola Amazon S3 ()SSE-S3. Server-side enkripsi 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.
Jalankan pekerjaan pelatihan dengan skrip titik masuk yang dibundel di dalam wadah Docker
SageMaker AI dapat menjalankan skrip titik masuk yang dibundel di dalam wadah Docker Anda.
-
Secara default, Amazon SageMaker AI menjalankan wadah berikut.
docker runimagetrain -
SageMaker AI mengganti pernyataan
CMD default apa pun dalam wadah dengan menentukan trainargumen setelah nama gambar. Dalam wadah Docker Anda, gunakanexecbentukENTRYPOINTinstruksi berikut.ENTRYPOINT ["executable", "param1", "param2", ...]Contoh berikut menunjukkan cara menentukan instruksi titik masuk python yang disebut.
k-means-algorithm.pyENTRYPOINT ["python", "k-means-algorithm.py"]execBentukENTRYPOINTinstruksi memulai eksekusi secara langsung, bukan sebagai anak dari/bin/sh. Ini memungkinkannya untuk menerima sinyal sepertiSIGTERMdanSIGKILLdari SageMaker API. Ketentuan berikut berlaku saat menggunakan SageMaker API.-
CreateTrainingJobAPI memiliki kondisi penghentian yang mengarahkan SageMaker AI untuk menghentikan pelatihan model setelah waktu tertentu. -
Berikut ini menunjukkan
StopTrainingJobAPI. API ini mengeluarkan yang setara dengandocker stop, dengan perintah batas waktu 2 menit untuk menghentikan wadah yang ditentukan dengan anggun.docker stop -t 120Perintah mencoba menghentikan wadah yang sedang berjalan dengan mengirimkan
SIGTERMsinyal. Setelah batas waktu 2 menit, API mengirimSIGKILLdan menghentikan kontainer secara paksa. Jika wadah menanganiSIGTERMdengan anggun dan keluar dalam waktu 120 detik setelah menerimanya, tidakSIGKILLada yang dikirim.
Jika Anda ingin akses ke artefak model perantara setelah SageMaker AI menghentikan pelatihan, tambahkan kode untuk menangani artefak penyimpanan di
SIGTERMhandler Anda. -
-
Jika Anda berencana menggunakan perangkat GPU untuk pelatihan model, pastikan wadah Anda
nvidia-dockerkompatibel. Sertakan hanya toolkit CUDA pada wadah; jangan bundel driver NVIDIA dengan gambar. Untuk informasi selengkapnya tentangnvidia-docker, lihat NVIDIA/nvidia-docker. -
Anda tidak dapat menggunakan pengin
tiniisialisasi sebagai skrip titik masuk Anda di wadah SageMaker AI karena menjadi bingung oleh argumen and.trainserve -
/opt/mldan semua subdirektori dicadangkan oleh SageMaker pelatihan. Saat membangun image Docker algoritma Anda, pastikan Anda tidak menempatkan data apa pun yang diperlukan oleh algoritma 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
Jika Anda ingin menggabungkan skrip shell khusus di dalam image Docker Anda, gunakan langkah-langkah berikut.
-
Salin skrip shell Anda dari direktori kerja Anda ke dalam wadah Docker Anda. Cuplikan kode berikut menyalin skrip titik masuk khusus
custom_entrypoint.shdari direktori kerja saat ini ke wadah Docker yang terletak di.mydirContoh berikut mengasumsikan bahwa gambar Docker dasar telah menginstal Python.FROM<base-docker-image>:<tag># Copy custom entrypoint from current dir to /mydir on container COPY./custom_entrypoint.sh /mydir/ -
Buat dan dorong wadah Docker ke Amazon Elastic Container Registry (Amazon ECR) dengan mengikuti petunjuk di Pus hing a Docker image di Panduan Pengguna Amazon ECR.
-
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
Untuk menggabungkan skrip Python khusus di dalam gambar Docker Anda, gunakan langkah-langkah berikut.
-
Salin skrip Python Anda dari direktori kerja Anda ke dalam wadah Docker Anda. Cuplikan kode berikut menyalin skrip titik masuk khusus
custom_entrypoint.pydari direktori kerja saat ini ke wadah Docker yang terletak di.mydirFROM<base-docker-image>:<tag># Copy custom entrypoint from current dir to /mydir on container COPY./custom_entrypoint.py /mydir/ -
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
Anda dapat menggunakan wadah Docker Anda sendiri untuk pelatihan dan meneruskan skrip titik masuk dari luar wadah Docker. Ada beberapa manfaat untuk menyusun skrip titik masuk 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 dalam wadah yang sama.
Tentukan lokasi skrip pelatihan Anda menggunakan ContainerArguments parameter ContainerEntrypoint dan AlgorithmSpecification API. Titik masuk dan argumen ini berperilaku dengan cara yang sama seperti titik masuk dan argumen Docker. Nilai dalam parameter ini menggantikan yang sesuai ENTRYPOINT atau CMD disediakan sebagai bagian dari wadah Docker.
Saat Anda meneruskan skrip titik masuk kustom Anda ke wadah pelatihan Docker Anda, input yang Anda berikan menentukan perilaku wadah.
-
Misalnya, jika Anda hanya menyediakan
ContainerEntrypoint, sintaks permintaan menggunakan CreateTrainingJob API adalah sebagai berikut.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], ... } }Kemudian, backend SageMaker pelatihan menjalankan titik masuk kustom Anda sebagai berikut.
docker run --entrypoint<ContainerEntrypoint>imagecatatan
Jika
ContainerEntrypointdisediakan, back SageMaker end pelatihan menjalankan gambar dengan titik masuk yang diberikan dan mengganti defaultENTRYPOINTdalam gambar. -
Jika Anda hanya menyediakan
ContainerArguments, SageMaker AI mengasumsikan bahwa wadah Docker berisi skrip titik masuk. Sintaks permintaan menggunakanCreateTrainingJobAPI adalah sebagai berikut.{ "AlgorithmSpecification": { "ContainerArguments": ["arg1", "arg2"], ... } }Back SageMaker end pelatihan menjalankan titik masuk kustom Anda sebagai berikut.
docker run image<ContainerArguments> -
Jika Anda memberikan kedua
ContainerEntrypointdanContainerArguments, maka sintaks permintaan menggunakanCreateTrainingJobAPI adalah sebagai berikut.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], "ContainerArguments": ["arg1", "arg2"], ... } }Back SageMaker end pelatihan menjalankan titik masuk kustom Anda sebagai berikut.
docker run --entrypoint<ContainerEntrypoint>image<ContainerArguments>
Anda dapat menggunakan InputDataConfig sumber yang didukung di CreateTrainingJob API untuk menyediakan skrip titik masuk untuk menjalankan gambar pelatihan Anda.
Menyediakan skrip titik masuk Anda di bucket Amazon S3
Untuk menyediakan skrip titik masuk khusus menggunakan bucket S3, gunakan S3DataSource parameter DataSource API untuk menentukan lokasi skrip. Jika Anda menggunakan S3DataSource parameter, berikut ini diperlukan.
-
Itu InputMode harus dari jenisnya
File. -
Itu S3DataDistributionType harus
FullyReplicated.
Contoh berikut memiliki skrip bernama custom_entrypoint.sh ditempatkan di jalur ke bucket S3s3://<bucket-name>/<bucket
prefix>/custom_entrypoint.sh.
#!/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 AWS CLI langsung atau dengan file JSON.
Konfigurasikan saluran data input menggunakan AWS CLI dengan file JSON
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 API.
// run-my-training-job.json { "AlgorithmSpecification": { "ContainerEntrypoint": ["/bin/sh"], "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"], ... }, "InputDataConfig": [ { "ChannelName": "<your_channel_name>", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://<bucket-name>/<bucket_prefix>" } }, "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
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}'