Buat image container Docker kustom untuk SageMaker dan gunakan untuk pelatihan model di AWS Step Functions - AWS Prescriptive Guidance

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

Buat image container Docker kustom untuk SageMaker dan gunakan untuk pelatihan model di AWS Step Functions

Julia Bluszcz, Aubrey Oosthuizen, Mohan Gowda Purushothama, Neha Sharma, dan Mateusz Zaremba, Amazon Web Services

Ringkasan

Pola ini menunjukkan cara membuat image container Docker untuk Amazon SageMaker dan menggunakannya untuk model pelatihan di AWS Step Functions. Dengan mengemas algoritme kustom dalam wadah, Anda dapat menjalankan hampir semua kode di SageMaker lingkungan, terlepas dari bahasa pemrograman, kerangka kerja, atau dependensi.

Dalam contoh SageMaker notebook yang disediakan, image container Docker kustom disimpan di Amazon Elastic Container Registry (Amazon ECR) Registry ECR). Step Functions kemudian menggunakan wadah yang disimpan di Amazon ECR untuk menjalankan skrip pemrosesan Python. SageMaker Kemudian, wadah mengekspor model ke Amazon Simple Storage Service (Amazon S3).

Prasyarat dan batasan

Prasyarat

  • Akun AWS yang aktif

  • Peran AWS Identity and Access Management (IAM) SageMaker dengan izin Amazon S3

  • Peran IAM untuk Step Functions

  • Keakraban dengan Python

  • Keakraban dengan Amazon SageMaker Python SDK

  • Keakraban dengan AWS Command Line Interface (AWS CLI)

  • Keakraban dengan AWS SDK for Python (Boto3)

  • Keakraban dengan Amazon ECR

  • Keakraban dengan Docker

Versi produk

  • AWS Step Functions Data Science SDK versi 2.3.0

  • Amazon SageMaker Python SDK versi 2.78.0

Arsitektur

Diagram berikut menunjukkan contoh alur kerja untuk membuat image container Docker untuk SageMaker, kemudian menggunakannya untuk model pelatihan di Step Functions:

Workflow untuk membuat image container Docker SageMaker untuk digunakan sebagai model pelatihan Step Functions.

Diagram menunjukkan alur kerja berikut:

  1. Seorang ilmuwan atau DevOps insinyur data menggunakan SageMaker notebook Amazon untuk membuat gambar kontainer Docker kustom.

  2. Seorang ilmuwan atau DevOps insinyur data menyimpan gambar kontainer Docker di repositori pribadi Amazon ECR yang ada di registri pribadi.

  3. Seorang ilmuwan atau DevOps insinyur data menggunakan wadah Docker untuk menjalankan pekerjaan pemrosesan SageMaker Python dalam alur kerja Step Functions.

Otomatisasi dan skala

Contoh SageMaker notebook dalam pola ini menggunakan jenis instance ml.m5.xlarge notebook. Anda dapat mengubah jenis instance agar sesuai dengan kasus penggunaan Anda. Untuk informasi selengkapnya tentang jenis instans SageMaker notebook, lihat SageMaker Harga Amazon.

Alat

  • Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.

  • Amazon SageMaker adalah layanan pembelajaran mesin terkelola (ML) yang membantu Anda membuat dan melatih model ML, lalu menerapkannya ke lingkungan host yang siap produksi.

  • Amazon SageMaker Python SDK adalah pustaka sumber terbuka untuk melatih dan menerapkan model pembelajaran mesin. SageMaker

  • AWS Step Functions adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan fungsi AWS Lambda dan layanan AWS lainnya untuk membangun aplikasi yang penting bagi bisnis.

  • AWS Step Functions Data Science Python SDK adalah pustaka open source yang membantu Anda membuat alur kerja Step Functions yang memproses dan menerbitkan model pembelajaran mesin.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan Amazon ECR dan buat registri pribadi baru.

Jika Anda belum melakukannya, siapkan Amazon ECR dengan mengikuti petunjuk dalam Menyiapkan dengan Amazon ECR di Panduan Pengguna Amazon ECR. Setiap akun AWS dilengkapi dengan registri ECR Amazon pribadi default.

DevOps insinyur

Buat repositori pribadi Amazon ECR.

Ikuti petunjuk dalam Membuat repositori pribadi di Panduan Pengguna Amazon ECR.

catatan

Repositori yang Anda buat adalah tempat Anda akan menyimpan gambar kontainer Docker kustom Anda.

DevOps insinyur

Buat Dockerfile yang menyertakan spesifikasi yang diperlukan untuk menjalankan pekerjaan SageMaker pemrosesan Anda.

Buat Dockerfile yang menyertakan spesifikasi yang diperlukan untuk menjalankan pekerjaan SageMaker pemrosesan Anda dengan mengonfigurasi Dockerfile. Untuk petunjuknya, lihat Mengadaptasi wadah pelatihan Anda sendiri di Panduan SageMaker Pengembang Amazon.

Untuk informasi selengkapnya tentang Dockerfiles, lihat Referensi Dockerfile dalam dokumentasi Docker.

Contoh sel kode notebook Jupyter untuk membuat Dockerfile

Sel 1

# Make docker folder !mkdir -p docker

Sel 2

%%writefile docker/Dockerfile FROM python:3.7-slim-buster RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3 ENV PYTHONUNBUFFERED=TRUE ENTRYPOINT ["python3"]
DevOps insinyur

Buat gambar kontainer Docker Anda dan dorong ke Amazon ECR.

  1. Buat image container menggunakan Dockerfile yang Anda buat dengan menjalankan docker build perintah di AWS CLI.

  2. Dorong gambar kontainer ke Amazon ECR dengan menjalankan docker push perintah.

Untuk informasi selengkapnya, lihat Membangun dan mendaftarkan kontainer di Membangun wadah algoritme Anda sendiri GitHub.

Contoh sel kode notebook Jupyter untuk membangun dan mendaftarkan gambar Docker

penting

Sebelum menjalankan sel berikut, pastikan Anda telah membuat Dockerfile dan menyimpannya di direktori yang disebut. docker Selain itu, pastikan Anda telah membuat repositori Amazon ECR, dan Anda mengganti ecr_repository nilai di sel pertama dengan nama repositori Anda.

Sel 1

import boto3 tag = ':latest' account_id = boto3.client('sts').get_caller_identity().get('Account') region = boto3.Session().region_name ecr_repository = 'byoc' image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)

Sel 2

# Build docker image !docker build -t $image_uri docker

Sel 3

# Authenticate to ECR !aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com

Sel 4

# Push docker image !docker push $image_uri
catatan

Anda harus mengautentikasi klien Docker Anda ke registri pribadi Anda sehingga Anda dapat menggunakan perintah docker push dandocker pull. Perintah ini mendorong dan menarik gambar ke dan dari repositori di registri Anda.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat skrip Python yang mencakup pemrosesan kustom dan logika pelatihan model Anda.

Tulis logika pemrosesan khusus untuk dijalankan dalam skrip pemrosesan data Anda. Kemudian, simpan sebagai skrip Python bernama. training.py

Untuk informasi selengkapnya, lihat Membawa model Anda sendiri dengan Mode SageMaker Skrip aktif GitHub.

Contoh skrip Python yang mencakup pemrosesan kustom dan logika pelatihan model

%%writefile training.py from numpy import empty import pandas as pd import os from sklearn import datasets, svm from joblib import dump, load if __name__ == '__main__': digits = datasets.load_digits() #create classifier object clf = svm.SVC(gamma=0.001, C=100.) #fit the model clf.fit(digits.data[:-1], digits.target[:-1]) #model output in binary format output_path = os.path.join('/opt/ml/processing/model', "model.joblib") dump(clf, output_path)
Ilmuwan data

Buat alur kerja Step Functions yang menyertakan pekerjaan SageMaker Processing Anda sebagai salah satu langkahnya.

Instal dan impor AWS Step Functions Data Science SDK dan unggah file training.py ke Amazon S3. Kemudian, gunakan Amazon SageMaker Python SDK untuk menentukan langkah pemrosesan di Step Functions.

penting

Pastikan Anda telah membuat peran eksekusi IAM untuk Step Functions di akun AWS Anda.

Contoh pengaturan lingkungan dan skrip pelatihan khusus untuk diunggah ke Amazon S3

!pip install stepfunctions import boto3 import stepfunctions import sagemaker import datetime from stepfunctions import steps from stepfunctions.inputs import ExecutionInput from stepfunctions.steps import ( Chain ) from stepfunctions.workflow import Workflow from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput sagemaker_session = sagemaker.Session() bucket = sagemaker_session.default_bucket() role = sagemaker.get_execution_role() prefix = 'byoc-training-model' # See prerequisites section to create this role workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole" execution_input = ExecutionInput( schema={ "PreprocessingJobName": str}) input_code = sagemaker_session.upload_data( "training.py", bucket=bucket, key_prefix="preprocessing.py", )

Contoh definisi langkah SageMaker pemrosesan yang menggunakan gambar Amazon ECR kustom dan skrip Python

catatan

Pastikan Anda menggunakan execution_input parameter untuk menentukan nama pekerjaan. Nilai parameter harus unik setiap kali pekerjaan berjalan. Juga, kode file training.py diteruskan sebagai input parameter keProcessingStep, yang berarti bahwa itu akan disalin di dalam wadah. Tujuan untuk ProcessingInput kode adalah sama dengan argumen kedua di dalamcontainer_entrypoint.

script_processor = ScriptProcessor(command=['python3'], image_uri=image_uri, role=role, instance_count=1, instance_type='ml.m5.xlarge') processing_step = steps.ProcessingStep( "training-step", processor=script_processor, job_name=execution_input["PreprocessingJobName"], inputs=[ ProcessingInput( source=input_code, destination="/opt/ml/processing/input/code", input_name="code", ), ], outputs=[ ProcessingOutput( source='/opt/ml/processing/model', destination="s3://{}/{}".format(bucket, prefix), output_name='byoc-example') ], container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"], )

Contoh alur kerja Step Functions yang menjalankan pekerjaan SageMaker pemrosesan

catatan

Contoh alur kerja ini mencakup langkah pekerjaan SageMaker pemrosesan saja, bukan alur kerja Step Functions yang lengkap. Untuk contoh alur kerja lengkap, lihat Contoh notebook SageMaker dalam dokumentasi AWS Step Functions Data Science SDK.

workflow_graph = Chain([processing_step]) workflow = Workflow( name="ProcessingWorkflow", definition=workflow_graph, role=workflow_execution_role ) workflow.create() # Execute workflow execution = workflow.execute( inputs={ "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")), # Each pre processing job (SageMaker processing job) requires a unique name, } ) execution_output = execution.get_output(wait=True)
Ilmuwan data

Sumber daya terkait