Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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, pengujian model A/B, streaming, obor XLA, TensorRT, ONNX dan IPEX. Selain itu, ia dengan mulus mengintegrasikan PyTorch solusi model besar, PiPPy, memungkinkan penanganan model besar yang efisien. Selain itu, TorchServe memperluas dukungannya ke perpustakaan 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 keserbagunaan dan kinerja yang dioptimalkan di berbagai konfigurasi perangkat keras dan jenis model. Untuk informasi lebih rinci, Anda dapat merujuk ke PyTorchdokumentasi
Tabel berikut mencantumkan yang AWS PyTorch DLCs didukung oleh TorchServe.
Jenis instans | SageMaker Tautan AI PyTorch DLC |
---|---|
CPU dan GPU |
|
Neuron |
|
Graviton |
Bagian berikut menjelaskan pengaturan untuk membangun dan menguji PyTorch DLCs 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. Kami merekomendasikan menggunakan 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 AI PyTorch DLC 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 gambar PyTorch DLC Anda.
Kasus penggunaan BYOC
Langkah-langkah berikut menguraikan cara menambahkan paket ke gambar PyTorch DLC Anda. Untuk informasi selengkapnya tentang menyesuaikan kontainer, lihat Membangun Gambar Kustom AWS Deep Learning Containers
-
Misalkan Anda ingin menambahkan paket ke image PyTorch docker DLC. Buat Dockerfile di bawah
docker
direktori, 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
-
Buat dan publikasikan image 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 menginstal 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 MNISTworkspace/mnist
, menerapkan mnist_handler.pytorch-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 tgz
Jika Anda ingin menginstal paket, Anda harus menyertakan
code
direktori dalamtar.gz
file.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.gz
ke 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 diterapkan dengan 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 Python SDK. SageMaker
from sagemaker.model import Model
from sagemaker.predictor import Predictor
# create the single model endpoint and deploy it on SageMaker AI
model = Model(model_data = f'{output_path}/mnist.tar.gz',
image_uri = baseimage,
role = role,
predictor_cls = Predictor,
name = "mnist",
sagemaker_session = smsess)
endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
predictor = model.deploy(instance_type='ml.g4dn.xlarge',
initial_instance_count=1,
endpoint_name = endpoint_name,
serializer=JSONSerializer(),
deserializer=JSONDeserializer())
# test the endpoint
import random
import numpy as np
dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()}
res = predictor.predict(dummy_data)
Menggunakan titik akhir multi-model untuk diterapkan TorchServe
Titik akhir multi-model adalah solusi yang dapat diskalakan dan hemat biaya untuk menampung 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 penskalaan sumber daya berdasarkan pola lalu lintas. Titik akhir multi-model sangat berguna untuk pembelajaran mendalam dan model AI generatif yang membutuhkan daya komputasi yang dipercepat.
Dengan menggunakan TorchServe titik akhir multi-model SageMaker AI, Anda dapat mempercepat pengembangan Anda dengan menggunakan tumpukan penyajian yang Anda kenal sambil memanfaatkan pembagian sumber daya dan manajemen model yang disederhanakan yang disediakan oleh titik akhir multi-model SageMaker AI.
Contoh berikut menunjukkan cara membuat endpoint multi-model, menerapkan model ke endpoint, dan menguji endpoint dengan menggunakan Amazon Python SDK. SageMaker
from sagemaker.multidatamodel import MultiDataModel
from sagemaker.model import Model
from sagemaker.predictor import Predictor
# create the single model endpoint and deploy it on SageMaker AI
model = Model(model_data = f'{output_path}/mnist.tar.gz',
image_uri = baseimage,
role = role,
sagemaker_session = smsess)
endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
mme = MultiDataModel(
name = endpoint_name,
model_data_prefix = output_path,
model = model,
sagemaker_session = smsess)
mme.deploy(
initial_instance_count = 1,
instance_type = "ml.g4dn.xlarge",
serializer=sagemaker.serializers.JSONSerializer(),
deserializer=sagemaker.deserializers.JSONDeserializer())
# list models
list(mme.list_models())
# create mnist v2 model artifacts
cp mnist.tar.gz mnistv2.tar.gz
# add mnistv2
mme.add_model(mnistv2.tar.gz)
# list models
list(mme.list_models())
predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess)
# test the endpoint
import random
import numpy as np
dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()}
res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")
Metrik
TorchServe mendukung metrik tingkat sistem dan tingkat 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 diterapkan 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 log CloudWatch 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