Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Sessions avec état avec les modèles Amazon SageMaker AI
Lorsque vous envoyez des demandes à un point de terminaison d’inférence Amazon SageMaker AI, vous pouvez choisir de les acheminer vers une session avec état. Au cours d’une session avec état, vous envoyez plusieurs demandes d’inférence à la même instance ML et l’instance facilite la session.
Normalement, lorsque vous invoquez un point de terminaison d’inférence, Amazon SageMaker AI achemine votre demande vers n’importe quelle instance ML parmi les multiples instances hébergées par le point de terminaison. Ce comportement de routage permet de minimiser la latence en répartissant uniformément votre trafic d’inférence. Cependant, l’une des conséquences du comportement de routage est que vous ne pouvez pas prévoir quelle instance répondra à votre demande.
Cette imprévisibilité constitue une limite si vous avez l’intention d’envoyer votre demande à un modèle avec état. Un modèle avec état possède un conteneur qui met en cache les données contextuelles qu’il reçoit des demandes d’inférence. Les données étant mises en cache, vous pouvez interagir avec le conteneur en envoyant plusieurs demandes et, pour chaque demande, vous n’avez pas besoin d’inclure le contexte complet de l’interaction. Le modèle puise plutôt dans les données contextuelles mises en cache pour éclairer ses prévisions.
Les modèles avec état sont idéaux lorsque les données contextuelles de l’interaction sont très volumineuses, par exemple lorsqu’elles incluent les éléments suivants :
-
Fichiers texte volumineux
-
Long historique des discussions
-
Données multimédia (images, vidéo et audio) pour les modèles multimodaux
Dans ces cas, si vous transmettez le contexte complet à chaque invite, la latence réseau de vos demandes est ralentie et la réactivité de votre application est diminuée.
Avant que votre point de terminaison d’inférence puisse prendre en charge une session avec état, il doit héberger un modèle avec état. La mise en œuvre du modèle avec état vous appartient. Amazon SageMaker AI vous permet d’acheminer vos demandes vers une session avec état, mais ne fournit pas de modèles avec état que vous pouvez déployer et utiliser.
Pour un exemple de bloc-notes et de conteneur de modèles illustrant comment les interactions avec état sont mises en œuvre, consultez Exemples d’implémentation.
Pour plus d’informations sur l’implémentation de modèles avec état avec TorchServe, consultez Inférence avec état
Comment fonctionnent les sessions avec état
Au cours d’une session avec état, votre application interagit avec votre conteneur de modèles de la manière suivante.
Pour démarrer une session avec état
-
Pour démarrer une session avec un modèle avec état hébergé par Amazon SageMaker AI, votre client envoie une demande
InvokeEndpointvia l’API SageMaker. Pour le paramètre de demandeSessionID, le client demande à SageMaker AI de démarrer une nouvelle session en spécifiant la valeurNEW_SESSION. Dans les données utiles de la demande, le client demande également au conteneur de démarrer une nouvelle session. La syntaxe de cette instruction varie en fonction de l’implémentation de votre conteneur. Cela dépend de la façon dont votre code de conteneur gère les données utiles de la demande.L’exemple suivant démarre une nouvelle session à l’aide du kit SDK pour 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") -
Votre conteneur de modèles gère la demande de votre client en démarrant une nouvelle session. Pendant la session, il met en cache les données que le client envoie dans les données utiles de la demande. Il crée également un ID de session et définit un horodatage TTL (time to live). Cet horodatage indique quand la session expire. Le conteneur doit fournir l’ID de session et l’horodatage à Amazon SageMaker AI en définissant l’en-tête HTTP suivant dans la réponse :
X-Amzn-SageMaker-Session-Id:session_id; Expires=yyyy-mm-ddThh:mm:ssZ -
Dans la réponse à la demande
InvokeEndpoint, Amazon SageMaker AI fournit l’ID de session et l’horodatage TTL pour le paramètre de réponseNewSessionID.L’exemple suivant extrait l’ID de session de la réponse
invoke_endpoint:session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
Pour poursuivre une session avec état
-
Pour utiliser la même session pour une demande d’inférence ultérieure, votre client envoie une autre demande
InvokeEndpoint. Pour le paramètre de demandeSessionID, il indique l’ID de session. Avec cet ID, SageMaker AI achemine la demande vers la même instance ML où la session a été démarrée. Comme votre conteneur a déjà mis en cache les données utiles de la demande d’origine, votre client n’a pas besoin de transmettre les mêmes données contextuelles que celles contenues dans la demande d’origine.L’exemple suivant poursuit une session en transmettant l’ID de session avec le paramètre de demande
SessionId:smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
Pour fermer une session avec état
-
Pour fermer une session, votre client envoie une dernière demande
InvokeEndpoint. Pour le paramètre de demandeSessionID, le client fournit l’ID de la session. Dans les données utiles du corps de la demande, votre client indique que le conteneur doit fermer la session. La syntaxe de cette instruction varie en fonction de l’implémentation de votre conteneur.L’exemple suivant ferme une session :
payload = { "requestType":"CLOSE" } payload = json.dumps(payload) closeSessionResponse = smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id) -
Lorsqu’il ferme la session, le conteneur renvoie l’ID de session à SageMaker AI en définissant l’en-tête HTTP suivant dans la réponse :
X-Amzn-SageMaker-Closed-Session-Id:session_id -
Dans la réponse à la demande
InvokeEndpointdu client, SageMaker AI fournit l’ID de session pour le paramètre de réponseClosedSessionId.L’exemple suivant extrait l’ID de la session fermée de la réponse
invoke_endpoint:closed_session_id = closeSessionResponse['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-closed-session-id'].split(';')[0]
Exemples d’implémentation
L’exemple de bloc-notes suivant montre comment implémenter le conteneur pour un modèle avec état. Il montre également comment une application cliente démarre, poursuit et ferme une session avec état.
Inférence avec état LLaVA avec SageMaker AI
Le bloc-notes utilise le modèle LLaVA : Large Language and Vision Assistant