Bangun Wadah Pemrosesan Anda Sendiri (Skenario Lanjutan) - Amazon SageMaker

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 Cara CreateProcessingJob ContainerEntrypoint dan ContainerArgument parameter mengonfigurasi titik masuk gambar Docker dan argumen mencerminkan bagaimana Docker mengganti titik masuk dan argumen melalui Docker API:

    • Jika tidak ada ContainerEntrypoint atau ContainerArguments disediakan, Processing menggunakan default ENTRYPOINT atau CMD dalam gambar.

    • Jika ContainerEntrypoint disediakan, tetapi tidakContainerArguments, Processing menjalankan gambar dengan entrypoint yang diberikan, dan mengabaikan ENTRYPOINT dan CMD dalam gambar.

    • Jika ContainerArguments disediakan, tetapi tidakContainerEntrypoint, Processing menjalankan gambar dengan default ENTRYPOINT pada gambar dan dengan argumen yang disediakan.

    • Jika keduanya ContainerEntrypoint dan ContainerArguments disediakan, Processing menjalankan gambar dengan entrypoint dan argumen yang diberikan, dan mengabaikan ENTRYPOINT 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 menerima SIGINT dan SIGKILL memberi sinyal, yang digunakan Processing untuk menghentikan pemrosesan pekerjaan dengan StopProcessingJob API.

  • /opt/mldan 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. ProcessingOutputParameter 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.jsonFile 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.jsonFile 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 DescribeProcessingJobberisi 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.