Sesi stateful dengan model Amazon SageMaker - Amazon SageMaker

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

Sesi stateful dengan model Amazon SageMaker

Saat mengirim permintaan ke titik akhir SageMaker inferensi Amazon, Anda dapat memilih untuk merutekan permintaan ke sesi stateful. Selama sesi stateful, Anda mengirim beberapa permintaan inferensi ke instance ML yang sama, dan instance memfasilitasi sesi.

Biasanya, saat Anda memanggil titik akhir inferensi, Amazon SageMaker merutekan permintaan Anda ke salah satu instance ML di antara beberapa instance yang dihosting endpoint. Perilaku perutean ini membantu meminimalkan latensi dengan mendistribusikan lalu lintas inferensi Anda secara merata. Namun, salah satu hasil dari perilaku perutean adalah Anda tidak dapat memprediksi instance mana yang akan melayani permintaan Anda.

Ketidakpastian ini adalah batasan jika Anda berniat mengirim permintaan Anda ke model stateful. Model stateful memiliki wadah yang menyimpan data konteks yang diterimanya dari permintaan inferensi. Karena data di-cache, Anda dapat berinteraksi dengan penampung dengan mengirimkan beberapa permintaan, dan dengan setiap permintaan, Anda tidak perlu menyertakan konteks penuh interaksi. Sebaliknya, model mengambil dari data konteks cache untuk menginformasikan prediksinya.

Model stateful ideal ketika data konteks untuk interaksi sangat besar, seperti ketika mencakup yang berikut:

  • File teks besar

  • Sejarah obrolan panjang

  • Data multimedia (gambar, video, dan audio) untuk model multimodal

Dalam kasus ini, jika Anda melewati konteks lengkap dengan setiap prompt, latensi jaringan permintaan Anda diperlambat, dan respons aplikasi Anda berkurang.

Sebelum titik akhir inferensi Anda dapat mendukung sesi stateful, itu harus menjadi tuan rumah model stateful. Implementasi model stateful dimiliki oleh Anda. Amazon SageMaker memungkinkan Anda untuk merutekan permintaan Anda ke sesi stateful, tetapi tidak menyediakan model stateful yang dapat Anda terapkan dan gunakan.

Untuk contoh notebook dan wadah model yang menunjukkan bagaimana interaksi stateful diimplementasikan, lihat. Contoh implementasi

Untuk informasi tentang penerapan model stateful dengan TorchServe, lihat Inferensi Stateful di repositori. TorchServe GitHub

Cara kerja sesi stateful

Selama sesi stateful, aplikasi Anda berinteraksi dengan wadah model Anda dengan cara berikut.

Untuk memulai sesi stateful
  1. Untuk memulai sesi dengan model stateful yang di-host oleh Amazon SageMaker, klien Anda mengirimkan InvokeEndpointpermintaan dengan. SageMaker API Untuk parameter SessionID permintaan, klien memberitahu SageMaker untuk memulai sesi baru dengan menentukan nilaiNEW_SESSION. Dalam payload permintaan, klien juga memberi tahu penampung untuk memulai sesi baru. Sintaks pernyataan ini bervariasi berdasarkan implementasi container Anda. Itu tergantung pada bagaimana kode kontainer Anda menangani payload permintaan.

    Contoh berikut memulai sesi baru dengan menggunakan SDK untuk Python (Boto3):

    import boto3 import sagemaker import json payload = { "requestType":"NEW_SESSION" } payload = json.dumps(payload) smr = boto3.client( 'sagemaker-runtime', region_name="region_name", endpoint_url="endoint_url") create_session_response = smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId="NEW_SESSION")
  2. Container model Anda menangani permintaan klien Anda dengan memulai sesi baru. Untuk sesi, itu menyimpan data yang dikirim klien dalam payload permintaan. Ini juga membuat ID sesi, dan menetapkan waktu untuk live (TTL) stempel waktu. Stempel waktu ini menunjukkan kapan sesi berakhir. Container harus menyediakan ID sesi dan stempel waktu ke Amazon SageMaker dengan menyetel HTTP header berikut dalam respons:

    X-Amzn-SageMaker-Session-Id: session_id; Expires=yyyy-mm-ddThh:mm:ssZ
  3. Dalam menanggapi InvokeEndpoint permintaan, Amazon SageMaker menyediakan ID sesi dan TTL stempel waktu untuk parameter NewSessionID respons.

    Contoh berikut mengekstrak ID sesi dari invoke_endpoint respon:

    session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
Untuk melanjutkan sesi stateful
  • Untuk menggunakan sesi yang sama untuk permintaan inferensi berikutnya, klien Anda mengirimkan InvokeEndpoint permintaan lain. Untuk parameter SessionID permintaan, ini menentukan ID sesi. Dengan ID ini, SageMaker merutekan permintaan ke instance ML yang sama di mana sesi dimulai. Karena container Anda telah men-cache payload permintaan asli, klien Anda tidak perlu meneruskan data konteks yang sama seperti yang ada di permintaan asli.

    Contoh berikut melanjutkan sesi dengan meneruskan ID sesi dengan parameter SessionId permintaan:

    smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
Untuk menutup sesi stateful
  1. Untuk menutup sesi, klien Anda mengirimkan InvokeEndpoint permintaan akhir. Untuk parameter SessionID permintaan, klien memberikan ID sesi. Dalam payload di badan permintaan, klien Anda menyatakan bahwa kontainer harus menutup sesi. Sintaks pernyataan ini bervariasi berdasarkan implementasi container Anda.

    Contoh berikut menutup sesi:

    payload = { "requestType":"CLOSE" } payload = json.dumps(payload) closeSessionResponse = smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
  2. Saat menutup sesi, wadah mengembalikan ID sesi SageMaker dengan menyetel HTTP header berikut dalam respons:

    X-Amzn-SageMaker-Closed-Session-Id: session_id
  3. Dalam menanggapi InvokeEndpoint permintaan dari klien, SageMaker berikan ID sesi untuk parameter ClosedSessionId respons.

    Contoh berikut mengekstrak ID sesi tertutup dari invoke_endpoint respons:

    closed_session_id = closeSessionResponse['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-closed-session-id'].split(';')[0]

Contoh implementasi

Contoh notebook berikut menunjukkan bagaimana menerapkan container untuk model stateful. Ini juga menunjukkan bagaimana aplikasi klien memulai, melanjutkan, dan menutup sesi stateful.

LLaVAinferensi stateful dengan SageMaker

Notebook menggunakan model LLaVA: Large Language and Vision Assistant, yang menerima petunjuk gambar dan teks. Notebook mengunggah gambar ke model, dan kemudian mengajukan pertanyaan tentang gambar tanpa harus mengirim ulang gambar untuk setiap permintaan. Wadah model menggunakan TorchServe kerangka kerja. Ini menyimpan data gambar dalam GPU memori.