Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bangun Wadah Pemrosesan Anda Sendiri (Skenario Lanjutan)
Anda dapat memberikan Amazon SageMaker Processing dengan image Docker yang memiliki kode dan dependensi Anda sendiri untuk menjalankan pemrosesan data, rekayasa fitur, dan beban kerja evaluasi model.
Contoh berikut dari Dockerfile membangun wadah dengan pustaka Python scikit-learn dan panda, yang dapat Anda jalankan sebagai pekerjaan pemrosesan.
FROM python:3.7-slim-buster # Install scikit-learn and pandas RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3 # Add a Python script and configure Docker to run it ADD processing_script.py / ENTRYPOINT ["python3", "/processing_script.py"]
Untuk contoh skrip pemrosesan, lihat Memulai dengan SageMaker Memproses
Buat dan dorong image Docker ini ke repositori Amazon Elastic Container Registry (Amazon ECR) dan pastikan SageMaker peran IAM Anda dapat menarik gambar dari Amazon ECR. Kemudian Anda dapat menjalankan gambar ini di Amazon SageMaker Processing.
Bagaimana Amazon SageMaker Processing Menjalankan Gambar Kontainer Pemrosesan Anda
Amazon SageMaker Processing menjalankan image container pemrosesan Anda dengan cara yang sama seperti perintah berikut, di mana AppSpecification.ImageUri
URI image Amazon ECR yang Anda tentukan dalam suatu CreateProcessingJob
operasi.
docker run [AppSpecification.ImageUri]
Perintah ini menjalankan ENTRYPOINT
perintah yang dikonfigurasi dalam image Docker Anda.
Anda juga dapat mengganti perintah entrypoint dalam gambar atau memberikan argumen baris perintah ke perintah entrypoint Anda menggunakan parameter and dalam permintaan Anda. AppSpecification.ContainerEntrypoint
AppSpecification.ContainerArgument
CreateProcessingJob
Menentukan parameter ini akan mengonfigurasi Amazon SageMaker Processing untuk menjalankan container yang mirip dengan cara perintah berikut.
docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
Misalnya, jika Anda menentukan ContainerEntrypoint
untuk berada [python3, -v, /processing_script.py]
dalam CreateProcessingJob
permintaan Anda, dan ContainerArguments
menjadi[data-format, csv]
, Amazon SageMaker Processing menjalankan container Anda dengan perintah berikut.
python3 -v /processing_script.py data-format csv
Saat membangun wadah pemrosesan Anda, pertimbangkan detail berikut:
-
Amazon SageMaker Processing memutuskan apakah pekerjaan selesai atau gagal tergantung pada kode keluar dari perintah yang dijalankan. Pekerjaan pemrosesan selesai jika semua kontainer pemrosesan berhasil keluar dengan kode keluar 0, dan gagal jika salah satu kontainer keluar dengan kode keluar bukan nol.
-
Amazon SageMaker Processing memungkinkan Anda mengganti titik masuk container pemrosesan dan menyetel argumen baris perintah seperti yang Anda bisa dengan Docker API. Gambar Docker juga dapat mengonfigurasi titik masuk dan argumen baris perintah menggunakan instruksi dan CMD.
ENTRYPOINT
CaraCreateProcessingJob
ContainerEntrypoint
danContainerArgument
parameter mengonfigurasi titik masuk gambar Docker dan argumen mencerminkan bagaimana Docker mengganti titik masuk dan argumen melalui Docker API:-
Jika tidak ada
ContainerEntrypoint
atauContainerArguments
disediakan, Processing menggunakan defaultENTRYPOINT
atau CMD dalam gambar. -
Jika
ContainerEntrypoint
disediakan, tetapi tidakContainerArguments
, Processing menjalankan gambar dengan entrypoint yang diberikan, dan mengabaikanENTRYPOINT
dan CMD dalam gambar. -
Jika
ContainerArguments
disediakan, tetapi tidakContainerEntrypoint
, Processing menjalankan gambar dengan defaultENTRYPOINT
pada gambar dan dengan argumen yang disediakan. -
Jika keduanya
ContainerEntrypoint
danContainerArguments
disediakan, Processing menjalankan gambar dengan entrypoint dan argumen yang diberikan, dan mengabaikanENTRYPOINT
dan CMD dalam gambar.
-
-
Anda harus menggunakan formulir exec dari
ENTRYPOINT
instruksi di Dockerfile Anda (ENTRYPOINT
["executable", "param1", "param2"])
bukan formulir shell ().ENTRYPOINT
command param1 param2
Ini memungkinkan container pemrosesan Anda menerimaSIGINT
danSIGKILL
memberi sinyal, yang digunakan Processing untuk menghentikan pemrosesan pekerjaan denganStopProcessingJob
API. -
/opt/ml
dan semua subdirektorinya dicadangkan oleh. SageMaker Saat membuat image Processing Docker Anda, jangan letakkan data apa pun yang diperlukan oleh container pemrosesan Anda di direktori ini. -
Jika Anda berencana untuk menggunakan perangkat GPU, pastikan container Anda kompatibel dengan nvidia-docker. Sertakan hanya toolkit CUDA dalam wadah. Jangan bundel driver NVIDIA dengan gambar. Untuk informasi selengkapnya tentang nvidia-docker, lihat nvidia/nvidia-docker.
Bagaimana Amazon SageMaker Processing Mengkonfigurasi Input dan Output Untuk Container Pemrosesan Anda
Saat Anda membuat pekerjaan pemrosesan menggunakan CreateProcessingJob
operasi, Anda dapat menentukan beberapa ProcessingInput
danProcessingOutput
. nilai.
Anda menggunakan ProcessingInput
parameter untuk menentukan URI Amazon Simple Storage Service (Amazon S3) untuk mengunduh data, dan jalur dalam wadah pemrosesan untuk mengunduh data. ProcessingOutput
Parameter mengonfigurasi jalur dalam wadah pemrosesan untuk mengunggah data, dan tempat di Amazon S3 untuk mengunggah data tersebut. Untuk keduanya ProcessingInput
danProcessingOutput
, jalur dalam wadah pemrosesan harus dimulai dengan/opt/ml/processing/
.
Misalnya, Anda dapat membuat pekerjaan pemrosesan dengan satu ProcessingInput
parameter yang mengunduh data dari s3://your-data-bucket/path/to/input/csv/data
/opt/ml/processing/csv
dalam wadah pemrosesan Anda, dan ProcessingOutput
parameter yang mengunggah data dari /opt/ml/processing/processed_csv
kes3://your-data-bucket/path/to/output/csv/data
. Pekerjaan pemrosesan Anda akan membaca data input, dan menulis data keluaran ke/opt/ml/processing/processed_csv
. Kemudian mengunggah data yang ditulis ke jalur ini ke lokasi keluaran Amazon S3 yang ditentukan.
penting
Tautan simbolik (symlink) tidak dapat digunakan untuk mengunggah data keluaran ke Amazon S3. Symlink tidak diikuti saat mengunggah data keluaran.
Bagaimana Amazon SageMaker Processing Menyediakan Log dan Metrik untuk Wadah Pemrosesan Anda
Saat wadah pemrosesan Anda menulis ke stdout
ataustderr
, Amazon SageMaker Processing menyimpan output dari setiap wadah pemrosesan dan menempatkannya di CloudWatch log Amazon. Untuk informasi tentang pencatatan, lihatLog SageMaker Acara Amazon dengan Amazon CloudWatch.
Amazon SageMaker Processing juga menyediakan CloudWatch metrik untuk setiap instance yang menjalankan container pemrosesan Anda. Untuk informasi tentang metrik, lihatPantau Amazon SageMaker dengan Amazon CloudWatch.
Bagaimana Amazon SageMaker Processing Mengkonfigurasi Kontainer Pemrosesan Anda
Amazon SageMaker Processing menyediakan informasi konfigurasi ke wadah pemrosesan Anda melalui variabel lingkungan dan dua file JSON— /opt/ml/config/processingjobconfig.json
dan /opt/ml/config/resourceconfig.json
— di lokasi yang telah ditentukan sebelumnya dalam wadah.
Saat pekerjaan pemrosesan dimulai, ia menggunakan variabel lingkungan yang Anda tentukan dengan Environment
peta dalam CreateProcessingJob
permintaan. /opt/ml/config/processingjobconfig.json
File berisi informasi tentang nama host wadah pemrosesan Anda, dan juga ditentukan dalam CreateProcessingJob
permintaan.
Contoh berikut menunjukkan format /opt/ml/config/processingjobconfig.json
file.
{ "ProcessingJobArn": "<processing_job_arn>", "ProcessingJobName": "<processing_job_name>", "AppSpecification": { "ImageUri": "<image_uri>", "ContainerEntrypoint": null, "ContainerArguments": null }, "Environment": { "KEY": "VALUE" }, "ProcessingInputs": [ { "InputName": "input-1", "S3Input": { "LocalPath": "/opt/ml/processing/input/dataset", "S3Uri": "<s3_uri>", "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3InputMode": "File", "S3CompressionType": "None", "S3DownloadMode": "StartOfJob" } } ], "ProcessingOutputConfig": { "Outputs": [ { "OutputName": "output-1", "S3Output": { "LocalPath": "/opt/ml/processing/output/dataset", "S3Uri": "<s3_uri>", "S3UploadMode": "EndOfJob" } } ], "KmsKeyId": null }, "ProcessingResources": { "ClusterConfig": { "InstanceCount": 1, "InstanceType": "ml.m5.xlarge", "VolumeSizeInGB": 30, "VolumeKmsKeyId": null } }, "RoleArn": "<IAM role>", "StoppingCondition": { "MaxRuntimeInSeconds": 86400 } }
/opt/ml/config/resourceconfig.json
File berisi informasi tentang nama host wadah pemrosesan Anda. Gunakan nama host berikut saat membuat atau menjalankan kode pemrosesan terdistribusi.
{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"] }
Jangan gunakan informasi tentang nama host yang terkandung di dalam /etc/hostname
atau /etc/hosts
karena mungkin tidak akurat.
Informasi nama host mungkin tidak segera tersedia untuk wadah pemrosesan. Sebaiknya tambahkan kebijakan coba lagi pada operasi resolusi nama host saat node tersedia di klaster.
Simpan dan Akses Informasi Metadata Tentang Pekerjaan Pemrosesan Anda
Untuk menyimpan metadata dari wadah pemrosesan setelah keluar, kontainer dapat menulis teks yang dikodekan UTF-8 ke file. /opt/ml/output/message
Setelah pekerjaan pemrosesan memasuki status terminal apa pun (” Completed
“," Stopped
“, atau" Failed
“), bidangExitMessage
" "di DescribeProcessingJob
berisi 1 KB pertama dari file ini. Akses bagian awal file dengan panggilan ke DescribeProcessingJob
, yang mengembalikannya melalui ExitMessage
parameter. Untuk pekerjaan pemrosesan yang gagal, Anda dapat menggunakan bidang ini untuk mengkomunikasikan informasi tentang mengapa wadah pemrosesan gagal.
penting
Jangan menulis data sensitif ke /opt/ml/output/message
file.
Jika data dalam file ini tidak dikodekan UTF-8, pekerjaan gagal dan mengembalikan file. ClientError
Jika beberapa kontainer keluar dengan isi ExitMessage
dari setiap kontainer pemrosesan digabungkan, kemudian dipotong menjadi 1 KB. ExitMessage,
Jalankan Container Pemrosesan Anda Menggunakan SageMaker Python SDK
Anda dapat menggunakan SageMaker Python SDK untuk menjalankan gambar pemrosesan Anda sendiri dengan menggunakan kelas. Processor
Contoh berikut menunjukkan cara menjalankan container pemrosesan Anda sendiri dengan satu input dari Amazon Simple Storage Service (Amazon S3) dan satu output ke Amazon S3.
from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput processor = Processor(image_uri='<your_ecr_image_uri>', role=role, instance_count=1, instance_type="ml.m5.xlarge") processor.run(inputs=[ProcessingInput( source='<s3_uri or local path>', destination='/opt/ml/processing/input_data')], outputs=[ProcessingOutput( source='/opt/ml/processing/processed_data', destination='<s3_uri>')], )
Alih-alih membangun kode pemrosesan Anda ke dalam gambar pemrosesan Anda, Anda dapat memberikan gambar dan perintah yang ingin Anda jalankan, bersama dengan kode yang ingin Anda jalankan di dalam wadah itu. ScriptProcessor
Lihat contohnya di Jalankan Skrip dengan Container Pemrosesan Anda Sendiri.
Anda juga dapat menggunakan gambar scikit-learn yang disediakan Amazon SageMaker Processing SKLearnProcessor
untuk menjalankan skrip scikit-learn. Sebagai contoh, lihat Pemrosesan Data dengan scikit-learn.