

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

# Server model untuk penerapan model dengan Amazon AI SageMaker
<a name="deploy-model-frameworks"></a>

Anda dapat menggunakan server model populer, seperti TorchServe, DJL Serving, dan Triton Inference Server, untuk menyebarkan model Anda di AI. SageMaker Topik berikut menjelaskan caranya.

**Topics**
+ [Menyebarkan model dengan TorchServe](deploy-models-frameworks-torchserve.md)
+ [Menyebarkan model dengan DJL Serving](deploy-models-frameworks-djl-serving.md)
+ [Penerapan model dengan Triton Inference Server](deploy-models-frameworks-triton.md)

# Menyebarkan model dengan TorchServe
<a name="deploy-models-frameworks-torchserve"></a>

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, 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](https://pytorch.org/serve/) dan [TorchServeseterusnya GitHub](https://github.com/pytorch/serve).

Tabel berikut mencantumkan yang AWS PyTorch DLCs didukung oleh TorchServe.


| Tipe instans | SageMaker Tautan AI PyTorch DLC | 
| --- | --- | 
| CPU dan GPU | [SageMaker PyTorch Kontainer AI](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) | 
| Neuron | [PyTorch Wadah neuron](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#neuron-containers) | 
| Graviton | [SageMaker Wadah AI PyTorch Graviton](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-graviton-containers-sm-support-only) | 

Bagian berikut menjelaskan pengaturan untuk membangun dan menguji PyTorch DLCs di Amazon SageMaker AI.

## Memulai
<a name="deploy-models-frameworks-torchserve-prereqs"></a>

Untuk memulai, pastikan Anda memiliki prasyarat berikut:

1. 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:
   + [Amazon EC2 ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [Amazon EC2 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AWS ServiceRoleForAmazonEKSNodegroup](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSServiceRoleForAmazonEKSNodegroup)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [AmazonS3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

1. 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}")
   ```

1. 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](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only).

   ```
   baseimage = sagemaker.image_uris.retrieve(
           framework="pytorch",
           region="<region>",
           py_version="py310",
           image_scope="inference",
           version="2.0.1",
           instance_type="ml.g4dn.16xlarge",
       )
   ```

1. Buat ruang kerja lokal.

   ```
   mkdir -p workspace/
   ```

## Menambahkan paket
<a name="deploy-models-frameworks-torchserve-package"></a>

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 container, lihat [Membangun Gambar Kustom AWS Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/custom_images.md).

1. 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
   ```

1. Buat dan publikasikan image docker yang disesuaikan dengan menggunakan skrip [build\$1and\$1push.sh](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/workspace/docker/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 direktori`workspace/code`.

```
mkdir -p workspace/code
    cat workspace/code/requirements.txt
    
    transformers==4.28.1
```

## Buat artefak TorchServe model
<a name="deploy-models-frameworks-torchserve-artifacts"></a>

Dalam contoh berikut, kami menggunakan model [MNIST](https://github.com/pytorch/serve/tree/master/examples/image_classifier/mnist) yang telah dilatih sebelumnya. Kami membuat direktori`workspace/mnist`, menerapkan [mnist\$1handler.py](https://github.com/pytorch/serve/blob/master/examples/image_classifier/mnist/mnist_handler.py) dengan mengikuti [instruksi layanan TorchServe khusus](https://github.com/pytorch/serve/blob/master/docs/custom_service.md#custom-service), dan [mengkonfigurasi parameter model](https://github.com/pytorch/serve/tree/master/model-archiver#config-file) (seperti ukuran batch dan pekerja) di [model-config.yaml](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/workspace/lama/model-config.yaml). Kemudian, kami menggunakan TorchServe alat `torch-model-archiver` untuk membangun artefak model dan mengunggah ke Amazon S3.

1. 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
   ```

1. Bangun artefak model dengan menggunakan [torch-model-archiver ](https://github.com/pytorch/serve/tree/master/model-archiver#torch-model-archiver-for-torchserve).

   ```
   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 dalam `tar.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 .
   ```

1. 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
<a name="deploy-models-frameworks-torchserve-single-model"></a>

[Contoh berikut menunjukkan cara membuat [titik akhir inferensi real-time model tunggal, menerapkan model ke titik akhir](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html), dan menguji titik akhir dengan menggunakan Amazon Python SDK. SageMaker ](https://sagemaker.readthedocs.io/en/stable/)

```
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
<a name="deploy-models-frameworks-torchserve-multi-model"></a>

[Titik akhir multi-model](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) 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 ](https://sagemaker.readthedocs.io/en/stable/) Rincian tambahan dapat ditemukan dalam [contoh notebook](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/torchserve_multi_model_endpoint.ipynb) ini.

```
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-metrik
<a name="deploy-models-frameworks-torchserve-metrics"></a>

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](https://github.com/pytorch/serve/blob/master/docs/metrics.md#torchserve-metrics).

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
```

# Menyebarkan model dengan DJL Serving
<a name="deploy-models-frameworks-djl-serving"></a>

DJL Serving adalah solusi penyajian model berdiri sendiri universal berkinerja tinggi. Dibutuhkan model pembelajaran mendalam, beberapa model, atau alur kerja dan membuatnya tersedia melalui titik akhir HTTP.

Anda dapat menggunakan salah satu DJL Serving [Deep Learning Containers (DLCs)](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html) untuk melayani model Anda. AWS Untuk mempelajari tentang jenis model dan kerangka kerja yang didukung, lihat repositori [DJL Serving GitHub](https://github.com/deepjavalibrary/djl-serving).

DJL Serving menawarkan banyak fitur yang membantu Anda untuk menyebarkan model Anda dengan kinerja tinggi:
+ Kemudahan penggunaan - DJL Serving dapat melayani sebagian besar model tanpa modifikasi apa pun. Anda membawa artefak model Anda, dan DJL Serving dapat meng-host mereka.
+ Beberapa perangkat dan dukungan akselerator - DJL Serving mendukung penerapan model pada CPUs, GPUs, dan Inferentia. AWS 
+ Kinerja - DJL Serving menjalankan inferensi multithreaded dalam satu mesin virtual Java (JVM) untuk meningkatkan throughput.
+ Batching dinamis - DJL Serving mendukung batching dinamis untuk meningkatkan throughput.
+ Penskalaan otomatis - DJL Serving secara otomatis menskalakan pekerja naik atau turun berdasarkan beban lalu lintas.
+ Dukungan multi-engine - DJL Serving dapat secara bersamaan meng-host model menggunakan kerangka kerja yang berbeda (misalnya, PyTorch dan). TensorFlow
+ Model ensemble dan alur kerja - DJL Serving mendukung penerapan alur kerja kompleks yang terdiri dari beberapa model dan dapat mengeksekusi bagian dari alur kerja dan bagian lain pada. CPUs GPUs Model dalam alur kerja dapat memanfaatkan kerangka kerja yang berbeda.

Bagian berikut menjelaskan cara menyiapkan endpoint dengan DJL Serving on SageMaker AI.

## Memulai
<a name="deploy-models-frameworks-djl-prereqs"></a>

Untuk memulai, pastikan Anda memiliki prasyarat berikut:

1. 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:
   + [Amazon EC2 ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [Amazon EC2 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [AmazonS3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

1. Pastikan Anda telah menyiapkan klien [docker](https://docs.docker.com/get-docker/) di sistem Anda.

1. Masuk ke Amazon Elastic Container Registry dan atur variabel lingkungan berikut:

   ```
   export ACCOUNT_ID=<your_account_id>
   export REGION=<your_region>
   aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
   ```

1. Tarik gambar docker.

   ```
   docker pull 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118
   ```

   Untuk semua gambar kontainer DJL Serving yang tersedia, lihat wadah inferensi [model besar dan wadah inferensi](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) [CPU Serving DJL](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#djl-cpu-full-inference-containers). Saat memilih gambar dari tabel di tautan sebelumnya, ganti AWS wilayah di kolom URL contoh dengan wilayah tempat Anda berada. Tersedia di wilayah DLCs yang tercantum dalam tabel di bagian atas halaman [Available Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

## Sesuaikan wadah Anda
<a name="deploy-models-frameworks-djl-byoc"></a>

Anda dapat menambahkan paket ke gambar DLC dasar untuk menyesuaikan wadah Anda. Misalkan Anda ingin menambahkan paket ke image `763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118` docker. Anda harus membuat dockerfile dengan gambar yang Anda inginkan sebagai gambar dasar, menambahkan paket yang diperlukan, dan mendorong gambar ke Amazon ECR.

Untuk menambahkan paket, selesaikan langkah-langkah berikut:

1. Tentukan instruksi untuk menjalankan pustaka atau paket yang Anda inginkan di dockerfile gambar dasar.

   ```
   FROM 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118
                           
   ## add custom packages/libraries
   RUN git clone https://github.com/awslabs/amazon-sagemaker-examples
   ```

1. Bangun image Docker dari dockerfile. Tentukan repositori Amazon ECR Anda, nama gambar dasar, dan tag untuk gambar. Jika Anda tidak memiliki repositori Amazon ECR, lihat Menggunakan [Amazon ECR dengan di AWS CLI](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) *Panduan Pengguna Amazon ECR* untuk petunjuk tentang cara membuatnya.

   ```
   docker build -f Dockerfile -t <registry>/<image_name>:<image_tag>
   ```

1. Dorong gambar Docker ke repositori Amazon ECR Anda.

   ```
   docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/<image_name>:<image_tag>
   ```

Anda sekarang harus memiliki gambar kontainer khusus yang dapat Anda gunakan untuk penyajian model. Untuk contoh penyesuaian kontainer lainnya, lihat [Membangun Gambar Kustom AWS Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/custom_images.md).

## Siapkan artefak model Anda
<a name="deploy-models-frameworks-djl-artifacts"></a>

Sebelum menerapkan model Anda di SageMaker AI, Anda harus mengemas artefak model Anda dalam sebuah `.tar.gz` file. DJL Serving menerima artefak berikut dalam arsip Anda:
+ Pos pemeriksaan model: File yang menyimpan bobot model Anda.
+ `serving.properties`: File konfigurasi yang dapat Anda tambahkan untuk setiap model. Tempatkan `serving.properties` di direktori yang sama dengan file model Anda.
+ `model.py`: Kode penangan inferensi. Ini hanya berlaku saat menggunakan mode Python. Jika Anda tidak menentukan`model.py`, djl-serving menggunakan salah satu penangan default.

Berikut ini adalah contoh `model.tar.gz` struktur:

```
 - model_root_dir # root directory
    - serving.properties            
    - model.py # your custom handler file for Python, if you choose not to use the default handlers provided by DJL Serving
    - model binary files # used for Java mode, or if you don't want to use option.model_id and option.s3_url for Python mode
```

DJL Serving mendukung mesin Java didukung oleh mesin DJL atau Python. Tidak semua artefak sebelumnya diperlukan; artefak yang diperlukan bervariasi berdasarkan mode yang Anda pilih. Misalnya, dalam mode Python, Anda hanya perlu menentukan `option.model_id` dalam `serving.properties` file; Anda tidak perlu menentukan pos pemeriksaan model di dalam wadah LMI. Dalam mode Java, Anda diminta untuk mengemas pos pemeriksaan model. Untuk detail selengkapnya tentang cara mengkonfigurasi `serving.properties` dan mengoperasikan dengan mesin yang berbeda, lihat [Mode Operasi Penyajian DJL](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md).

## Gunakan titik akhir model tunggal untuk menerapkan dengan DJL Serving
<a name="deploy-models-frameworks-djl-single-model"></a>

Setelah menyiapkan artefak model Anda, Anda dapat menerapkan model Anda ke titik akhir SageMaker AI. Bagian ini menjelaskan cara menerapkan model tunggal ke titik akhir dengan DJL Serving. Jika Anda menerapkan beberapa model, lewati bagian ini dan buka. [Gunakan titik akhir multi-model untuk menerapkan dengan DJL Serving](#deploy-models-frameworks-djl-mme)

Contoh berikut menunjukkan metode untuk membuat objek model menggunakan Amazon SageMaker Python SDK. Anda harus menentukan bidang berikut:
+ `image_uri`: Anda dapat mengambil salah satu gambar DJL Serving dasar seperti yang ditunjukkan dalam contoh ini, atau Anda dapat menentukan gambar Docker kustom dari repositori Amazon ECR Anda, jika Anda mengikuti instruksi di. [Sesuaikan wadah Anda](#deploy-models-frameworks-djl-byoc)
+ `model_s3_url`: Ini harus URI Amazon S3 yang menunjuk ke file Anda`.tar.gz`.
+ `model_name`: Tentukan nama untuk objek model.

```
import boto3
 import sagemaker
from sagemaker.model import Model
from sagemaker import image_uris, get_execution_role

aws_region = "aws-region"
sagemaker_session = sagemaker.Session(boto_session=boto3.Session(region_name=aws_region))
role = get_execution_role()

def create_model(model_name, model_s3_url):
    # Get the DJL DeepSpeed image uri
    image_uri = image_uris.retrieve(
        framework="djl-deepspeed",
        region=sagemaker_session.boto_session.region_name,
        version="0.20.0"
    )
    model = Model(
        image_uri=image_uri,
        model_data=model_s3_url,
        role=role,
        name=model_name,
        sagemaker_session=sagemaker_session,
    )
    return model
```

## Gunakan titik akhir multi-model untuk menerapkan dengan DJL Serving
<a name="deploy-models-frameworks-djl-mme"></a>

Jika Anda ingin menerapkan beberapa model ke titik akhir, SageMaker AI menawarkan titik akhir multi-model, yang merupakan solusi terukur dan hemat biaya untuk menerapkan sejumlah besar model. DJL Serving juga mendukung pemuatan beberapa model secara bersamaan dan menjalankan inferensi pada masing-masing model secara bersamaan. Kontainer Penyajian DJL mematuhi kontrak titik akhir multi-model SageMaker AI dan dapat digunakan untuk menyebarkan titik akhir multi-model.

Setiap artefak model individu perlu dikemas dengan cara yang sama seperti yang dijelaskan di bagian sebelumnya. [Siapkan artefak model Anda](#deploy-models-frameworks-djl-artifacts) Anda dapat mengatur konfigurasi khusus model dalam `serving.properties` file dan kode pengendali inferensi khusus model di. `model.py` Untuk titik akhir multi-model, model perlu diatur dengan cara berikut:

```
 root_dir
        |-- model_1.tar.gz
        |-- model_2.tar.gz
        |-- model_3.tar.gz
            .
            .
            .
```

Amazon SageMaker Python SDK menggunakan [MultiDataModel](https://sagemaker.readthedocs.io/en/stable/api/inference/multi_data_model.html)objek untuk membuat instance endpoint multi-model. URI Amazon S3 untuk direktori root harus diteruskan sebagai `model_data_prefix` argumen ke konstruktor. `MultiDataModel`

DJL Serving juga menyediakan beberapa parameter konfigurasi untuk mengelola persyaratan memori model, seperti `required_memory_mb` dan`reserved_memory_mb`, yang dapat dikonfigurasi untuk setiap model dalam file [serving.properties.](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md#servingproperties) Parameter ini berguna untuk menangani kesalahan memori dengan lebih anggun. Untuk semua parameter yang dapat dikonfigurasi, lihat [OutofMemory penanganan di djl-serving](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/out_of_memory_management.md).

Fitur penskalaan otomatis dari DJL Serving memudahkan untuk memastikan bahwa model diskalakan dengan tepat untuk lalu lintas masuk. Secara default, DJL Serving menentukan jumlah maksimum pekerja untuk model yang dapat didukung berdasarkan perangkat keras yang tersedia (seperti core CPU atau perangkat GPU). Anda dapat mengatur batas bawah dan atas untuk setiap model untuk memastikan bahwa tingkat lalu lintas minimum selalu dapat dilayani, dan bahwa satu model tidak mengkonsumsi semua sumber daya yang tersedia. Anda dapat mengatur properti berikut dalam file [serving.properties](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md#servingproperties):
+ `gpu.minWorkers`: Jumlah minimum pekerja untuk GPUs.
+ `gpu.maxWorkers`: Jumlah maksimum pekerja untuk GPUs.
+ `cpu.minWorkers`: Jumlah minimum pekerja untuk CPUs.
+ `cpu.maxWorkers`: Jumlah maksimum pekerja untuk CPUs.

[Untuk end-to-end contoh cara menerapkan endpoint multi-model pada SageMaker AI menggunakan container DJL Serving, lihat contoh notebook Multi-model-inference-demo.ipynb.](https://github.com/deepjavalibrary/djl-demo/blob/master/aws/sagemaker/Multi-Model-Inference-Demo.ipynb)

# Penerapan model dengan Triton Inference Server
<a name="deploy-models-frameworks-triton"></a>

[Triton Inference Server](https://github.com/triton-inference-server/server) adalah perangkat lunak penyajian inferensi open source yang merampingkan inferensi AI. Dengan Triton, Anda dapat menerapkan model apa pun yang dibangun dengan beberapa kerangka pembelajaran mendalam dan pembelajaran mesin, termasuk TensorRT,,, ONNX, OpenVINO, Python, RAPIDS FIL TensorFlow PyTorch, dan banyak lagi.

Kontainer SageMaker AI Triton membantu Anda menyebarkan Triton Inference Server pada platform SageMaker AI Hosting untuk melayani model terlatih dalam produksi. Ini mendukung berbagai mode di mana SageMaker AI beroperasi. Untuk daftar container Triton Inference Server yang tersedia di SageMaker AI, lihat [NVIDIA Triton Inference Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only) (hanya dukungan SM). 

Untuk contoh end-to-end notebook, kami sarankan untuk melihat [amazon-sagemaker-examples repositori](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-triton).

## Mode hosting
<a name="deploy-models-frameworks-triton-modes"></a>

Mode Hosting SageMaker AI berikut didukung oleh wadah Triton:
+ Titik akhir model tunggal
  + Ini adalah mode operasi default SageMaker AI. Dalam mode ini, wadah Triton dapat memuat satu model, atau model ansambel tunggal.
  + Nama model harus diteruskan sebagai properti lingkungan kontainer, yang merupakan bagian dari panggilan `CreateModel` SageMaker AI API. Variabel lingkungan yang digunakan untuk meneruskan nama model adalah`SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Titik akhir model tunggal dengan ansambel
  + Triton Inference Server mendukung *ansambel*, yang merupakan pipeline, atau DAG (grafik asiklik terarah) model. Sementara ansambel secara teknis terdiri dari beberapa model, dalam mode titik akhir model tunggal default, SageMaker AI dapat memperlakukan *ansambel dengan tepat* (meta-model yang mewakili pipa) sebagai model utama untuk dimuat, dan selanjutnya dapat memuat model terkait.
  + Nama model ansambel yang tepat harus digunakan untuk memuat model. Itu harus diteruskan sebagai properti lingkungan kontainer, yang merupakan bagian dari panggilan `CreateModel` SageMaker API. Variabel lingkungan yang digunakan untuk meneruskan nama model adalah`SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Titik akhir multi-model
  + Dalam mode ini, SageMaker AI dapat melayani beberapa model pada satu titik akhir. Anda dapat menggunakan mode ini dengan menentukan variabel lingkungan `‘MultiModel’: true` sebagai properti lingkungan kontainer, yang merupakan bagian dari panggilan `CreateModel` SageMaker API.
  + Secara default, tidak ada model yang dimuat saat instance dimulai. Untuk menjalankan permintaan inferensi terhadap model tertentu, tentukan `*.tar.gz` file model yang sesuai sebagai argumen ke `TargetModel` properti panggilan `InvokeEndpoint` SageMaker API.
+ Titik akhir multi-model dengan ansambel
  + Dalam mode ini, SageMaker AI berfungsi seperti yang dijelaskan untuk titik akhir multi-model. Namun, wadah SageMaker AI Triton dapat memuat beberapa model ansambel, yang berarti bahwa beberapa pipeline model dapat berjalan pada instance yang sama. SageMaker AI memperlakukan setiap ansambel sebagai satu model, dan ansambel yang tepat dari setiap model dapat dipanggil dengan menentukan arsip yang sesuai sebagai. `*.tar.gz` `TargetModel`
  + Untuk manajemen memori yang lebih baik selama memori dinamis `LOAD` dan`UNLOAD`, kami sarankan Anda menjaga ukuran ansambel kecil.

## Jenis muatan inferensi
<a name="deploy-models-frameworks-triton-payloads"></a>

Triton mendukung dua metode pengiriman muatan inferensi melalui jaringan - `json` dan `binary+json` (atau json yang dikodekan biner). Muatan JSON dalam kedua kasus mencakup tipe data, bentuk, dan tensor permintaan inferensi yang sebenarnya. Tensor permintaan harus berupa tensor biner.

Dengan `binary+json` formatnya, Anda harus menentukan panjang metadata permintaan di header untuk memungkinkan Triton mengurai muatan biner dengan benar. Dalam wadah SageMaker AI Triton, ini dilakukan dengan menggunakan `Content-Type` header khusus:. `application/vnd.sagemaker-triton.binary+json;json-header-size={}` Ini berbeda dengan menggunakan `Inference-Header-Content-Length` header pada Triton Inference Server yang berdiri sendiri karena header khusus tidak diizinkan di AI. SageMaker 

## Menggunakan config.pbtxt untuk mengatur konfigurasi model
<a name="deploy-models-frameworks-triton-config"></a>

Untuk Server Inferensi Triton pada SageMaker AI, setiap model harus menyertakan `config.pbtxt` file yang menentukan, setidaknya, konfigurasi berikut untuk model:
+ `name`: Meskipun ini opsional untuk model yang berjalan di luar SageMaker AI, kami menyarankan Anda selalu memberikan nama untuk model yang akan dijalankan di Triton SageMaker pada AI.
+ [`platform`dan/atau `backend`](https://github.com/triton-inference-server/backend/blob/main/README.md#backends): Menyetel backend sangat penting untuk menentukan jenis model. Beberapa backend memiliki klasifikasi lebih lanjut, seperti `tensorflow_savedmodel` atau. ` tensorflow_graphdef` Opsi tersebut dapat ditentukan sebagai bagian dari `platform` kunci selain `backend` kunci. Backend yang paling umum adalah`tensorrt`,,`onnxruntime`,`tensorflow`,,`pytorch`, `python` `dali``fil`, dan. `openvino`
+ `input`: Tentukan tiga atribut untuk input:`name`, `data_type` dan `dims` (bentuk).
+ `output`: Tentukan tiga atribut untuk output:`name`, `data_type` dan `dims` (bentuk).
+ `max_batch_size`: Atur ukuran batch ke nilai yang lebih besar dari atau sama dengan 1 yang menunjukkan ukuran batch maksimum yang harus digunakan Triton dengan model.

[Untuk detail lebih lanjut tentang konfigurasi`config.pbtxt`, lihat repositori Triton. GitHub ](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) Triton menyediakan beberapa konfigurasi untuk mengubah perilaku model. Beberapa opsi konfigurasi yang paling umum dan penting adalah:
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#instance-groups](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#instance-groups): Grup instance membantu menentukan nomor dan lokasi untuk model tertentu. Mereka memiliki atribut`count`,`kind`, dan `gpus` (`kind`digunakan kapan`KIND_GPU`). `count`Atributnya setara dengan jumlah pekerja. Untuk penyajian model reguler, setiap pekerja memiliki salinan modelnya sendiri. Demikian pula, di Triton, `count` menentukan jumlah salinan model per perangkat. Misalnya, jika `instance_group` jenisnya`KIND_CPU`, maka CPU memiliki `count` jumlah salinan model.
**catatan**  
Pada instance GPU, `instance_group` konfigurasi berlaku per perangkat GPU. Misalnya, `count` jumlah salinan model ditempatkan pada setiap perangkat GPU kecuali Anda secara eksplisit menentukan perangkat GPU mana yang harus memuat model.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher)dan [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models): Batching dinamis digunakan untuk model stateless, dan batch urutan digunakan untuk model stateful (di mana Anda ingin merutekan permintaan ke instance model yang sama setiap saat). Penjadwal batching mengaktifkan antrian per model, yang membantu meningkatkan throughput, tergantung pada konfigurasi batching.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models): Model ansambel mewakili *pipa* dari satu atau lebih model dan koneksi tensor input dan output antara model-model tersebut. Itu dapat dikonfigurasi dengan menentukan `platform` sebagai`ensemble`. Konfigurasi ansambel hanyalah representasi dari pipa model. Pada SageMaker AI, semua model di bawah ansambel diperlakukan sebagai tanggungan model ansambel dan dihitung sebagai model tunggal untuk SageMaker metrik AI, seperti. `LoadedModelCount`

## Menerbitkan metrik Triton default ke Amazon CloudWatch
<a name="deploy-models-frameworks-triton-metrics"></a>

NVIDIA Triton Inference Container memaparkan metrik pada port 8002 (dapat dikonfigurasi) untuk model yang berbeda dan GPUs yang digunakan di Triton Inference Server. Untuk detail lengkap metrik default yang tersedia, lihat GitHub halaman untuk metrik [Triton Inference](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/metrics.md) Server. Metrik ini dalam format Prometheus dan dapat dikikis menggunakan konfigurasi scraper Prometheus.

Dimulai dengan versi v23.07 dan seterusnya, wadah SageMaker AI Triton mendukung penerbitan metrik ini ke Amazon CloudWatch dengan menentukan beberapa variabel lingkungan. Untuk mengikis metrik Prometheus, wadah SageMaker AI Triton memanfaatkan agen Amazon. CloudWatch 

Variabel lingkungan yang diperlukan yang harus Anda tentukan untuk mengumpulkan metrik adalah sebagai berikut:


| Variabel lingkungan | Deskripsi | Nilai contoh | 
| --- | --- | --- | 
|  `SAGEMAKER_TRITON_ALLOW_METRICS`  |  Tentukan opsi ini untuk memungkinkan Triton mempublikasikan metrik ke titik akhir Prometheus-nya.  | “benar” | 
|  `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH`  |  Tentukan opsi ini untuk memulai pra-pemeriksaan yang diperlukan untuk menerbitkan metrik ke Amazon. CloudWatch  | “benar” | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP`  |  Tentukan opsi ini untuk menunjuk ke grup log tempat metrik ditulis.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest" | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE`  |  Tentukan opsi ini untuk menunjuk ke namespace metrik tempat Anda ingin melihat dan memplot metrik.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest" | 
|  `SAGEMAKER_TRITON_METRICS_PORT`  |  Tentukan ini sebagai 8002, atau port lainnya. Jika SageMaker AI belum memblokir port yang ditentukan, itu digunakan. Jika tidak, port lain yang tidak diblokir dipilih secara otomatis.  | “8002" | 

Saat menerbitkan metrik dengan Triton di SageMaker AI, ingatlah batasan berikut:
+ Meskipun Anda dapat menghasilkan metrik khusus melalui backend C-API dan Python (v23.05 dan seterusnya), metrik ini saat ini tidak didukung untuk dipublikasikan ke Amazon. CloudWatch
+ Dalam mode titik akhir multi-model SageMaker AI (MME), Triton berjalan di lingkungan yang mengharuskan ruang nama model diaktifkan karena setiap model (kecuali model ansambel) diperlakukan seolah-olah berada di repositori model mereka sendiri. Saat ini, ini menciptakan batasan untuk metrik. Saat ruang nama model diaktifkan, Triton tidak membedakan metrik antara dua model dengan nama yang sama milik ansambel yang berbeda. Sebagai solusinya, pastikan setiap model yang digunakan memiliki nama yang unik. Ini juga membuatnya lebih mudah untuk mencari metrik Anda. CloudWatch

## Variabel-variabel lingkungan
<a name="deploy-models-frameworks-triton-variables"></a>

Tabel berikut mencantumkan variabel lingkungan yang didukung untuk Triton pada SageMaker AI.


| Variabel lingkungan | Deskripsi | Tipe | Kemungkinan nilai | 
| --- | --- | --- | --- | 
| `SAGEMAKER_MULTI_MODEL` | Memungkinkan Triton beroperasi dalam mode titik akhir multi-model SageMaker AI. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME` | Tentukan model yang akan dimuat dalam mode model tunggal SageMaker AI (default). Untuk mode ansambel, tentukan nama ansambel yang tepat. | String | *<model\$1name>*seperti yang ditentukan dalam config.pbtxt | 
| `SAGEMAKER_TRITON_PING_MODE` | `'ready'`adalah mode default dalam mode model tunggal SageMaker AI, dan `'live'` merupakan default dalam mode titik akhir multi-model SageMaker AI. | String | `ready`, `live` | 
| `SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING` | Dalam wadah SageMaker AI Triton, ini diatur ke secara `true` default. | Boolean | `true`, `false` | 
| `SAGEMAKER_BIND_TO_PORT` | Sementara di SageMaker AI, port default adalah 8080. Anda dapat menyesuaikan ke port yang berbeda dalam skenario multi-kontainer. | String | *<port\$1number>* | 
| `SAGEMAKER_SAFE_PORT_RANGE` | Ini diatur oleh platform SageMaker AI saat menggunakan mode multi-kontainer. | String | *<port\$11>*–*<port\$12>* | 
| `SAGEMAKER_TRITON_ALLOW_GRPC` | Meskipun SageMaker AI tidak mendukung GRPC saat ini, jika Anda menggunakan Triton di depan proxy terbalik khusus, Anda dapat memilih untuk mengaktifkan GRPC. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_GRPC_PORT` | Port default untuk GRPC adalah 8001, tetapi Anda dapat mengubahnya. | String | *<port\$1number>* | 
| `SAGEMAKER_TRITON_THREAD_COUNT` | Anda dapat mengatur jumlah thread handler permintaan HTTP default. | String | *<number>* | 
| `SAGEMAKER_TRITON_LOG_VERBOSE` | `true`secara default pada SageMaker AI, tetapi Anda dapat menonaktifkan opsi ini secara selektif. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_INFO` | `false`secara default pada SageMaker AI. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_WARNING` | `false`secara default pada SageMaker AI. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_ERROR` | `false`secara default pada SageMaker AI. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE` | Tentukan ukuran shm untuk backend Python, dalam byte. Nilai defaultnya adalah 16 MB tetapi dapat ditingkatkan. | String | *<number>* | 
| `SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE` | Tentukan ukuran pertumbuhan shm untuk backend Python, dalam byte. Nilai default adalah 1 MB tetapi dapat ditingkatkan untuk memungkinkan peningkatan yang lebih besar. | String | *<number>* | 
| `SAGEMAKER_TRITON_TENSORFLOW_VERSION` | Nilai default-nya adalah `2`. Triton tidak lagi mendukung Tensorflow 2 dari Triton v23.04. Anda dapat mengonfigurasi variabel ini untuk versi sebelumnya. | String | *<number>* | 
| `SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT` | Batasi persentase memori GPU maksimum yang digunakan untuk pemuatan model, memungkinkan sisanya digunakan untuk permintaan inferensi. | String | *<number>* | 
| `SAGEMAKER_TRITON_ALLOW_METRICS` | `false`secara default pada SageMaker AI. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_METRICS_PORT` | Port default adalah 8002. | String | *<number>* | 
| `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH` | `false`secara default pada SageMaker AI. Setel variabel ini `true` untuk memungkinkan mendorong metrik default Triton ke Amazon. CloudWatch Jika opsi ini diaktifkan, Anda bertanggung jawab atas CloudWatch biaya saat metrik dipublikasikan ke akun Anda. | Boolean | `true`, `false` | 
| `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP` | Diperlukan jika Anda telah mengaktifkan penerbitan metrik. CloudWatch | String | *<cloudwatch\$1log\$1group\$1name>* | 
| `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE` | Diperlukan jika Anda telah mengaktifkan penerbitan metrik. CloudWatch | String | *<cloudwatch\$1metric\$1namespace>* | 
| `SAGEMAKER_TRITON_ADDITIONAL_ARGS` | Menambahkan argumen tambahan saat memulai Triton Server. | String | *<additional\$1args>* | 