Guide pratique pour déployer les modèles de la famille Jamba d’AI21 avec Azure Machine Learning studio
Important
Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge.
Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.
Dans cet article, vous apprenez à utiliser Azure Machine Learning studio pour déployer les modèles de la famille Jamba d’AI21 en tant qu’API serverless dans le cadre d’une facturation de paiement à l’utilisation.
Les modèles de famille Jamba sont le modèle Mamba de grande langue basé sur la production d’AI21, qui tire parti de l’architecture hybride Mamba-Transformer d’AI21. Il s’agit d’une version paramétrée par des instructions du modèle SSM (State Space Model) Jamba Transformer hybride structuré d’AI21. Les modèles de famille Jamba sont conçus pour une utilisation commerciale fiable en ce qui concerne la qualité et la performance.
Conseil
Consultez nos annonces sur les modèles de famille Jamba d’AI21 disponibles maintenant sur le catalogue de modèles AZURE AI via le blog de AI21 et blog Microsoft Tech Community.
Déployer les modèles de famille Jamba en tant qu’API serverless
Certains modèles du catalogue de modèles peuvent être déployés en tant qu’API serverless avec une facturation basée sur le paiement à l’utilisation, ce qui permet de les consommer en tant qu’API sans les héberger sur votre abonnement, tout en conservant le niveau de sécurité professionnel et la conformité dont les organisations ont besoin. Cette option de déploiement ne nécessite pas de quota à partir de votre abonnement.
Le modèle AI21-Jamba 1.5 Large déployé en tant qu’API serverless avec facturation de paiement à l’utilisation est proposé par AI21 via la Place de marché Microsoft Azure. AI21 peut modifier ou mettre à jour les conditions d’utilisation et la tarification de ce modèle.
Pour commencer à utiliser Jamba 1.5 en tant qu’API serverless, explorez nos intégrations avec LangChain, LiteLLM, OpenAI et l’API Azure.
Prérequis
Un abonnement Azure avec un moyen de paiement valide. Les abonnements Azure gratuits ou d’essai ne fonctionnent pas. Si vous ne disposez pas d’un abonnement Azure, commencez par créer un compte Azure payant.
Un espace de travail Azure Machine Learning et une instance de calcul. Si vous ne les avez pas, suivez les étapes dans l’article Démarrage rapide : Créer des ressources d’espace de travail pour les créer. L’offre de modèle de déploiement d’API serverless pour la famille de modèles Jamba est disponible uniquement avec les espaces de travail créés dans ces régions :
- USA Est
- USA Est 2
- Centre-Nord des États-Unis
- États-Unis - partie centrale méridionale
- USA Ouest
- USA Ouest 3
- Suède Centre
Pour obtenir la liste des régions disponibles pour chacun des modèles prenant en charge les déploiements de points de terminaison d’API serverless, consultez Disponibilité des régions pour les modèles dans les points de terminaison d’API serverless.
Les contrôles d’accès en fonction du rôle Azure (Azure RBAC) sont utilisés pour accorder l’accès aux opérations dans Azure Machine Learning. Pour effectuer les étapes décrites dans cet article, votre compte d’utilisateur doit avoir le rôle Propriétaire ou Contributeur pour l’abonnement Azure. Une autre possibilité est que votre compte dispose d’un rôle personnalisé avec les autorisations suivantes :
Sur l’abonnement Azure – pour abonner l’espace de travail à l’offre de la Place de marché Azure, une fois pour chaque espace de travail, par offre :
Microsoft.MarketplaceOrdering/agreements/offers/plans/read
Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
Microsoft.SaaS/register/action
Sur le groupe de ressources – pour créer et utiliser la ressource SaaS :
Microsoft.SaaS/resources/read
Microsoft.SaaS/resources/write
Sur l’espace de travail – pour déployer des points de terminaison (le rôle Scientifique des données Azure Machine Learning a déjà ces autorisations) :
Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*
Pour plus d’informations sur les autorisations, consultez Gérer l’accès à un espace de travail Azure Machine Learning.
Créer un déploiement
Ces étapes illustrent le déploiement de modèles AI21 Jamba 1.5 Large
ou AI21 Jamba 1.5 Mini
. Pour créer un déploiement :
Accédez à Azure Machine Learning Studio.
Sélectionnez l’espace de travail dans lequel vous voulez déployer vos modèles. Pour utiliser l’offre de modèle de déploiement d’API serverless, votre espace de travail doit appartenir à l’une des régions prises en charge répertoriées dans les prérequis.
Recherchez et sélectionnez un modèle AI21 comme
AI21 Jamba 1.5 Large
,AI21 Jamba 1.5 Mini
ouAI21 Jamba Instruct
à partir du catalogue de modèles.Vous pouvez également lancer le déploiement en accédant à votre espace de travail et en sélectionnant Points de terminaison>Points de terminaison serverless>Créer.
Dans la page de vue d’ensemble du modèle, sélectionnez Déployer, puis API serverless avec Azure AI Sécurité du Contenu.
Dans l’Assistant Déploiement, sélectionnez le lien vers les Conditions d’utilisation de la Place de marché Azure pour en savoir plus sur les conditions d’utilisation.
Vous pouvez également sélectionner l’onglet Détails de l’offre de la Place de marché pour en savoir plus sur la tarification du modèle sélectionné.
Si vous déployez le modèle pour la première fois dans l’espace de travail, vous devez abonner votre espace de travail à l’offre spécifique à partir de la Place de marché Azure. Cette étape nécessite que votre compte dispose des autorisations sur l’abonnement Azure et sur le groupe de ressources qui sont répertoriées dans les prérequis. Chaque espace de travail a de son propre abonnement à l’offre particulière de la Place de marché Azure, ce qui vous permet de contrôler et de surveiller les dépenses. Sélectionnez S’abonner et se Déployer. Vous ne pouvez actuellement avoir qu’un seul déploiement pour chaque modèle au sein d’un espace de travail.
Une fois que vous avez inscrit l’espace de travail pour l’offre particulière de la Place de marché Azure, les déploiements suivants de la mêmeoffre dans le même espace de travail ne nécessitent pas de s’abonner à nouveau. Par conséquent, vous n’avez pas besoin des autorisations au niveau de l’abonnement pour les déploiements suivants. Si ce scénario s’applique à vous, sélectionnez Continuer à déployer.
Donnez un nom au déploiement. Ce nom va faire partie de l’URL de l’API de déploiement. Cette URL doit être unique dans chaque région Azure.
Sélectionnez Déployer. Attendez que le déploiement soit terminé : vous êtes alors redirigé vers la page des points de terminaison serverless.
Sélectionnez le point de terminaison pour ouvrir sa page Détails.
Sélectionnez l’onglet Test pour commencer à interagir avec le modèle.
Vous pouvez également prendre note de l’URL de la Cible et de la Clé secrète pour appeler le déploiement et générer des complétions.
Vous pouvez toujours trouver les détails, l’URL et les clés d’accès du point de terminaison en accédant à Espace de travail>Points de terminaison>Points de terminaison serverless.
Pour découvrir la facturation des modèles de la famille AI21-Jamba déployés en tant qu’API serverless avec facturation basée sur le paiement à l’utilisation, consultez Considérations relatives au coût et au quota pour la famille de modèles Jamba déployées en tant qu’API serverless.
Consommer des modèles de famille Jamba en tant qu’API serverless
Vous pouvez consommer des modèles de famille Jamba comme suit :
- Dans l’espace de travail, sélectionnez Points de terminaison>Points de terminaison serverless.
- Recherchez et sélectionnez le déploiement que vous avez créé.
- Copiez l’URL de la Cible et les valeurs de jeton de la Clé.
- Effectuez une requête d’API en utilisant l’API Inférence de modèle Azure AI sur la route
/chat/completions
ou le client Azure d’AI21 sur/v1/chat/completions
.
Pour plus d’informations sur l’utilisation des API, consultez la section Référence.
Référence pour les modèles de famille Jamba déployés en tant qu’API serverless
Les modèles de famille Jamba acceptent les deux API suivantes :
- L’API Inférence de modèle Azure AI [API Inférence de modèle Azure AI] sur la route
/chat/completions
pour la conversation multitour ou la réponse aux questions à tour unique. Cette API est prise en charge, car les modèles de famille Jamba sont affinés pour la saisie semi-automatique des conversations. - Client Azure d’AI21. Pour plus d’informations sur le point de terminaison REST appelé, consultez la documentation REST d’AI21.
API Inférence de modèle Azure AI
Le schéma API Inférence du modèle Azure AI est disponible dans l’article référence de saisie semi-automatique des conversations et une spécification OpenAPI peut être obtenue à partir du point de terminaison lui-même.
Les conversations à tour unique et multitour ont le même format de demande et de réponse, sauf que la réponse aux questions (à tour unique) n’implique qu’un seul message utilisateur dans la demande, tandis que la conversation multitour nécessite que vous envoyiez l’intégralité de l’historique des messages de conversation dans chaque demande.
Dans une conversation multitour, le thread de message a les attributs suivants :
- Inclut tous les messages de l’utilisateur et du modèle, classés du plus ancien au plus récent.
- Les messages alternent entre les messages de rôle
user
etassistant
. - Le thread de message commence éventuellement par un message système pour fournir le contexte.
Le pseudocode suivant est un exemple de la pile de messages pour le quatrième appel dans une demande de conversation qui inclut un message système initial.
[
{"role": "system", "message": "Some contextual information here"},
{"role": "user", "message": "User message 1"},
{"role": "assistant", "message": "System response 1"},
{"role": "user", "message": "User message 2"},
{"role": "assistant"; "message": "System response 2"},
{"role": "user", "message": "User message 3"},
{"role": "assistant", "message": "System response 3"},
{"role": "user", "message": "User message 4"}
]
Client Azure d’AI21
Utilisez la méthode POST
pour envoyer la requête à l’itinéraire /v1/chat/completions
:
Requête
POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json
Schéma de requête
La charge utile est une chaîne au format JSON contenant les paramètres suivants :
Clé | Type | Obligatoire/Par défaut | Valeurs autorisées | Description |
---|---|---|---|---|
model |
string |
Y | jamba-instruct ou AI21 Jamba 1.5 Large ou AI21 Jamba 1.5 Mini |
|
messages |
list[object] |
Y | Liste d’objets, un par message, du plus ancien au plus récent. Le message le plus ancien peut être le rôle system . Tous les messages ultérieurs doivent alterner entre les rôles user et assistant. Consultez la définition de l’objet de message ci-dessous. |
|
max_tokens |
integer |
N 4096 |
0 – 4 096 | Nombre maximal de jetons à autoriser pour chaque message de réponse généré. En règle générale, la meilleure façon de limiter la longueur de sortie consiste à fournir une limite de longueur dans le prompt système (par exemple, « limitez vos réponses à trois phrases ») |
temperature |
float |
N 1 |
0,0 – 2,0 | Quantité de variantes à fournir dans chaque réponse. La définition de cette valeur sur 0 garantit la même réponse à la même question à chaque fois. La définition d’une valeur plus élevée encourage davantage de variantes. Modifie la distribution à partir de laquelle les jetons sont échantillonnés. Nous recommandons de modifier ceci ou top_p , mais pas les deux. |
top_p |
float |
N 1 |
0 <valeur<=1,0 | Limitez le pool de jetons suivants à chaque étape au N centile supérieur des jetons possibles, où 1,0 signifie le pool de tous les jetons possibles, et 0,01 signifie le pool des seuls jetons suivants les plus probables. |
stop |
string OU list[string] |
N |
"" | Chaîne ou liste de chaînes contenant le ou les mots où l’API doit cesser de générer la sortie. Les nouvelles lignes sont autorisées en tant que "\n". Le texte retourné ne contient pas la séquence d’arrêt. |
n |
integer |
N 1 |
1 – 16 | Nombre de réponses à générer pour chaque prompt. Avec le terrain de jeu d’Azure AI studio, n=1 car nous travaillons sur le terrain de jeu multi-réponse. |
stream |
boolean |
N False |
True OU False |
Indique s’il faut activer le streaming. Si la valeur est true, les résultats sont retournés un jeton à la fois. Si la valeur est true, n doit être 1, qui est automatiquement défini. |
L’objet messages
contient les champs suivants :
role
: [chaîne, obligatoire] Auteur ou objectif du message. Une des valeurs suivantes :user
: entrée fournie par l’utilisateur. Toutes les instructions fournies ici qui entrent en conflit avec les instructions fournies dans le promptsystem
sont prioritaires par rapport aux instructions de promptsystem
.assistant
: réponse générée par le modèle.system
: instructions initiales pour fournir des conseils généraux concernant le ton et la voix du message généré. Un message système initial est facultatif, mais recommandé pour fournir des conseils concernant le ton de la conversation. Par exemple, « Vous êtes un chatbot utile avec des connaissances en sciences de la terre et un charmant accent anglais. »
content
: [chaîne, obligatoire] Contenu du message.
Exemple de requête
Exemple (tour unique)
{
"model": "jamba-instruct",
"messages": [
{
"role":"user",
"content":"Who was the first emperor of rome?"}
],
"temperature": 0.8,
"max_tokens": 512
}
Exemple de conversation (quatrième demande contenant la troisième réponse de l’utilisateur)
{
"model": "jamba-instruct",
"messages": [
{"role": "system",
"content": "You are a helpful genie just released from a bottle. You start the conversation with 'Thank you for freeing me! I grant you one wish.'"},
{"role":"user",
"content":"I want a new car"},
{"role":"assistant",
"content":"🚗 Great choice, I can definitely help you with that! Before I grant your wish, can you tell me what kind of car you're looking for?"},
{"role":"user",
"content":"A corvette"},
{"role":"assistant",
"content":"Great choice! What color and year?"},
{"role":"user",
"content":"1963 black split window Corvette"}
],
"n":3
}
Schéma de réponse
La réponse dépend légèrement du fait que le résultat est diffusé en streaming ou non.
Dans un résultat non diffusé en streaming, toutes les réponses sont fournies ensemble dans une réponse unique, qui inclut également une propriété usage
.
Dans un résultat diffusé en streaming :
- Chaque réponse inclut un seul jeton dans le champ
choices
. - La structure d’objet
choices
est différente. - Seule la dernière réponse inclut un objet
usage
. - La réponse entière est encapsulée dans un objet
data
. - L’objet de réponse final est
data: [DONE]
.
La charge utile de réponse est un dictionnaire avec les champs suivants.
Clé | Type | Description |
---|---|---|
id |
string |
Identificateur unique de la requête. |
model |
string |
Nom du modèle utilisé. |
choices |
list[object ] |
Texte de réponse généré par le modèle. Pour une réponse sans streaming, il s’agit d’une liste avec des éléments n . Pour une réponse avec streaming, il s’agit d’un objet unique contenant un seul jeton. Consultez la description de l’objet ci-dessous. |
created |
integer |
Horodatage Unix (en secondes) de la création de l’achèvement. |
object |
string |
Le type d’objet, qui est toujours chat.completion . |
usage |
object |
Statistiques d’utilisation pour la demande d’achèvement. Voir les détails ci-dessous. |
L’objet de réponse choices
contient la réponse générée par le modèle. L’objet contient les champs suivants :
Clé | Type | Description |
---|---|---|
index |
integer |
Index de base zéro du message dans la liste des messages. Peut ne pas correspondre à la position dans la liste. Pour les messages diffusés en streaming, il s’agit toujours de zéro. |
message OU delta |
object |
Message généré (ou jeton dans une réponse avec streaming). Même type d’objet que décrit dans la demande, avec deux changements : - Dans une réponse sans streaming, cet objet est appelé message . - Dans une réponse avec streaming, il est appelé delta , et contient message ou role , mais jamais les deux. |
finish_reason |
string |
La raison pour laquelle le modèle a cessé de générer des jetons : - stop : le modèle a atteint un point d’arrêt naturel, ou une séquence d’arrêt fournie. - length : le nombre maximal de jetons a été atteint. - content_filter : la réponse générée a enfreint une stratégie d’IA responsable. - null : streaming uniquement. Dans une réponse avec streaming, toutes les réponses à l’exception de la dernière seront null . |
L’objet de réponse usage
contient les champs suivants.
Clé | Type | Value |
---|---|---|
prompt_tokens |
integer |
Nombre de jetons dans l’invite. Notez que le nombre de jetons de prompt inclut des jetons supplémentaires ajoutés par le système pour mettre en forme la liste de prompts en une chaîne unique, comme requis par le modèle. Le nombre de jetons supplémentaires est généralement proportionnel au nombre de messages dans le thread, et doit être relativement faible. |
completion_tokens |
integer |
Nombre de jetons générés lors de la saisie semi-automatique. |
total_tokens |
integer |
Nombre total de jetons. |
Exemple de réponse sans streaming
{
"id":"cmpl-524c73beb8714d878e18c3b5abd09f2a",
"choices":[
{
"index":0,
"message":{
"role":"assistant",
"content":"The human nose can detect over 1 trillion different scents, making it one of the most sensitive smell organs in the animal kingdom."
},
"finishReason":"stop"
}
],
"created": 1717487036,
"usage":{
"promptTokens":116,
"completionTokens":30,
"totalTokens":146
}
}
Exemple de réponse avec streaming
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"role": "assistant"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": ""}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " The"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " first e"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "mpe"}, "created": 1717487336, "finish_reason": null}]}
... 115 responses omitted for sanity ...
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "me"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "."}, "created": 1717487336,"finish_reason": "stop"}], "usage": {"prompt_tokens": 107, "completion_tokens": 121, "total_tokens": 228}}
data: [DONE]
Coûts et quotas
Considérations relatives au coût et au quota pour les modèles de famille Jamba déployés en tant qu’API serverless
Les modèles de famille Jamba sont déployés en tant qu’API serverless et sont proposés par AI21 via la Place de marché Azure et intégrés à Azure AI Studio pour une utilisation. Vous trouverez la tarification de la Place de marché Azure lors du déploiement ou de l’optimisation des modèles.
Chaque fois qu’un espace de travail s’abonne à une offre de modèle donnée provenant de la Place de marché Azure, une nouvelle ressource est créée pour suivre les coûts associés à sa consommation. La même ressource est utilisée pour suivre les coûts associés à l’inférence et à l’optimisation ; plusieurs compteurs sont cependant disponibles pour suivre chaque scénario indépendamment.
Pour plus d’informations sur le suivi des coûts, consultez Surveiller les coûts des modèles proposés via la Place de marché Azure.
Le quota est géré par déploiement. Chaque déploiement a une limite de débit de 200 000 jetons par minute et 1 000 requêtes d’API par minute. Toutefois, nous limitons actuellement un déploiement par modèle par projet. Contactez le Support Microsoft Azure si les limites de débit actuelles ne suffisent pas pour vos scénarios.
Filtrage du contenu
Les modèles déployés en tant qu’API serverless sont protégés par Azure AI Sécurité du Contenu. Avec Azure AI Sécurité du Contenu activé, l’invite et la complétion sont soumises à un ensemble de modèles de classification visant à détecter et à empêcher la production d’un contenu nuisible. Le système de filtrage de contenu (préversion) détecte et prend des mesures sur des catégories spécifiques de contenu potentiellement dangereux dans les invites d’entrée et les exécutions de sortie. En savoir plus sur Azure AI Sécurité du Contenu.