Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyebarkan model dengan TorchServe
TorchServe adalah server model yang direkomendasikan untuk PyTorch, sudah diinstal sebelumnya di AWS PyTorch Deep Learning Container (DLC). Alat canggih ini menawarkan pelanggan pengalaman yang konsisten dan ramah pengguna, memberikan kinerja tinggi dalam menerapkan beberapa PyTorch model di berbagai AWS instance, termasuk CPU, GPU, Neuron, dan Graviton, terlepas dari ukuran model atau distribusinya.
TorchServe mendukung beragam fitur canggih, termasuk batching dinamis, microbatching, A/B pengujian model, streaming, torch XLA, TensorRT, ONNX dan IPEX. Selain itu, ia secara mulus PyTorch mengintegrasikan solusi model besar, PiPPy, memungkinkan penanganan model besar yang efisien. Selain itu, TorchServe memperluas dukungannya ke pustaka open-source populer seperti DeepSpeed, Accelerate, Fast Transformers, dan banyak lagi, memperluas kemampuannya lebih jauh. Dengan TorchServe, AWS pengguna dapat dengan percaya diri menerapkan dan melayani PyTorch model mereka, memanfaatkan fleksibilitas dan kinerja yang dioptimalkan di berbagai konfigurasi perangkat keras dan jenis model. Untuk informasi lebih rinci, Anda dapat merujuk ke PyTorch dokumentasi
Tabel berikut mencantumkan AWS PyTorch DLC yang didukung oleh TorchServe.
| Tipe instans | SageMaker Taut PyTorch an DLC AI |
|---|---|
CPU dan GPU |
|
Neuron |
|
Graviton |
Bagian berikut menjelaskan pengaturan untuk membangun dan menguji PyTorch DLC di Amazon SageMaker AI.
Memulai
Untuk memulai, pastikan Anda memiliki prasyarat berikut:
-
Pastikan Anda memiliki akses ke AWS akun. Siapkan lingkungan Anda sehingga AWS CLI dapat mengakses akun Anda melalui pengguna AWS IAM atau peran IAM. Sebaiknya gunakan peran IAM. Untuk tujuan pengujian di akun pribadi Anda, Anda dapat melampirkan kebijakan izin terkelola berikut ke peran IAM:
-
Konfigurasikan dependensi Anda secara lokal, seperti yang ditunjukkan pada contoh berikut:
from datetime import datetime import os import json import logging import time # External Dependencies: import boto3 from botocore.exceptions import ClientError import sagemaker sess = boto3.Session() sm = sess.client("sagemaker") region = sess.region_name account = boto3.client("sts").get_caller_identity().get("Account") smsess = sagemaker.Session(boto_session=sess) role = sagemaker.get_execution_role() # Configuration: bucket_name = smsess.default_bucket() prefix = "torchserve" output_path = f"s3://{bucket_name}/{prefix}/models" print(f"account={account}, region={region}, role={role}") -
Ambil gambar PyTorch DLC, seperti yang ditunjukkan pada contoh berikut.
SageMaker Gambar PyTorch DLC AI tersedia di semua AWS wilayah. Untuk informasi selengkapnya, lihat daftar gambar
kontainer DLC. baseimage = sagemaker.image_uris.retrieve( framework="pytorch", region="<region>", py_version="py310", image_scope="inference", version="2.0.1", instance_type="ml.g4dn.16xlarge", ) -
Buat ruang kerja lokal.
mkdir -p workspace/
Menambahkan paket
Bagian berikut menjelaskan cara menambahkan dan menginstal paket ke image PyTorch DLC Anda.
Kasus penggunaan BYOC
Langkah-langkah berikut menguraikan cara menambahkan paket ke gambar PyTorch DLC Anda. Untuk informasi selengkapnya tentang menyesuaikan wadah Anda, lihat Mem bangun Gambar
-
Misalkan Anda ingin menambahkan paket ke gambar docker PyTorch DLC. Buat Dockerfile di bawah
dockerdirektori, seperti yang ditunjukkan pada contoh berikut:mkdir -p workspace/docker cat workspace/docker/Dockerfile ARG BASE_IMAGE FROM $BASE_IMAGE #Install any additional libraries RUN pip install transformers==4.28.1 -
Bangun dan publikasikan gambar docker yang disesuaikan dengan menggunakan skrip
build_and_push.sh berikut. # Download script build_and_push.sh to workspace/docker ls workspace/docker build_and_push.sh Dockerfile # Build and publish your docker image reponame = "torchserve" versiontag = "demo-0.1" ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}
SageMaker Kasus penggunaan prainstal AI
Contoh berikut menunjukkan cara melakukan pra-instal paket ke wadah PyTorch DLC Anda. Anda harus membuat requirements.txt file secara lokal di bawah direktoriworkspace/code.
mkdir -p workspace/code cat workspace/code/requirements.txt transformers==4.28.1
Buat artefak TorchServe model
Dalam contoh berikut, kami menggunakan model MNIS T yang telah dilatih sebelumnya. workspace/mnist, mengimplementasikan mnist_handler.py torch-model-archiver untuk membangun artefak model dan mengunggah ke Amazon S3.
-
Konfigurasikan parameter model di
model-config.yaml.ls -al workspace/mnist-dev mnist.py mnist_handler.py mnist_cnn.pt model-config.yaml # config the model cat workspace/mnist-dev/model-config.yaml minWorkers: 1 maxWorkers: 1 batchSize: 4 maxBatchDelay: 200 responseTimeout: 300 -
Bangun artefak model dengan menggunakan torch-
model-archiver. torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgzJika Anda ingin melakukan pra-instal paket, Anda harus menyertakan
codedirektori dalamtar.gzfile.cd workspace torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive cd mnist mv ../code . tar cvzf mnist.tar.gz . -
Unggah
mnist.tar.gzke Amazon S3.# upload mnist.tar.gz to S3 output_path = f"s3://{bucket_name}/{prefix}/models" aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz
Menggunakan titik akhir model tunggal untuk digunakan TorchServe
Contoh berikut menunjukkan cara membuat titik akhir inferensi real-time model tunggal, menerapkan model ke titik akhir, dan menguji titik akhir dengan menggunakan Amazon SageMaker Python SDK
from sagemaker.serve import ModelBuilder from sagemaker.core.resources import Endpoint # Create a ModelBuilder for the single model endpoint and deploy it on SageMaker AI model_builder = ModelBuilder( s3_model_data_url=f'{output_path}/mnist.tar.gz', image_uri=baseimage, role_arn=role, model_server='TORCHSERVE' ) model_builder.build() endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) endpoint = model_builder.deploy( instance_type='ml.g4dn.xlarge', initial_instance_count=1, endpoint_name=endpoint_name ) # test the endpoint import random import json import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} response = endpoint.invoke( body=json.dumps(dummy_data), content_type='application/json' ) res = json.loads(response.body.read().decode('utf-8'))
Menggunakan titik akhir multi-model untuk digunakan TorchServe
Multi-model titik akhir adalah solusi yang dapat diskalakan dan hemat biaya untuk menghosting sejumlah besar model di belakang satu titik akhir. Mereka meningkatkan pemanfaatan titik akhir dengan berbagi armada sumber daya yang sama dan melayani wadah untuk menampung semua model Anda. Mereka juga mengurangi overhead penerapan karena SageMaker AI mengelola model bongkar muat secara dinamis, serta menskalakan sumber daya berdasarkan pola lalu lintas. Multi-model titik akhir sangat berguna untuk pembelajaran mendalam dan model AI generatif yang membutuhkan daya komputasi yang dipercepat.
Dengan menggunakan TorchServe pada titik SageMaker akhir multi-model AI, Anda dapat mempercepat pengembangan Anda dengan menggunakan tumpukan penyajian yang Anda kenal sambil memanfaatkan berbagi sumber daya dan manajemen model yang disederhanakan yang disediakan oleh titik akhir multi-model SageMaker AI.
Contoh berikut menunjukkan cara membuat titik akhir multi-model, menerapkan model ke titik akhir, dan menguji titik akhir dengan menggunakan Amazon SageMaker Python SDK
from sagemaker.serve import ModelBuilder # Create a ModelBuilder for the multi-model endpoint and deploy it on SageMaker AI model_builder = ModelBuilder( s3_model_data_url=f'{output_path}/mnist.tar.gz', image_uri=baseimage, role_arn=role, model_server='TORCHSERVE' ) endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime()) model_builder.build() endpoint = model_builder.deploy( initial_instance_count=1, instance_type="ml.g4dn.xlarge", endpoint_name=endpoint_name, model_data_download_timeout=1200 ) # test the endpoint import random import json import numpy as np dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()} response = endpoint.invoke( body=json.dumps(dummy_data), content_type='application/json', target_model="mnist.tar.gz" ) res = json.loads(response.body.read().decode('utf-8'))
Metrik-metrik
TorchServe mendukung metrik tingkat sistem dan level model. Anda dapat mengaktifkan metrik dalam mode format log atau mode Prometheus melalui variabel lingkungan. TS_METRICS_MODE Anda dapat menggunakan file konfigurasi metrik TorchServe pusat metrics.yaml untuk menentukan jenis metrik yang akan dilacak, seperti jumlah permintaan, latensi, penggunaan memori, pemanfaatan GPU, dan banyak lagi. Dengan mengacu pada file ini, Anda dapat memperoleh wawasan tentang kinerja dan kesehatan model yang digunakan dan secara efektif memantau perilaku TorchServe server secara real-time. Untuk informasi lebih rinci, lihat dokumentasi TorchServe metrik
Anda dapat mengakses log TorchServe metrik yang mirip dengan format StatsD melalui filter CloudWatch log Amazon. Berikut ini adalah contoh log TorchServe metrik:
CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185 DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185