Come distribuire i modelli della famiglia Jamba di AI21 con studio di Azure Machine Learning
Importante
Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate.
Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Questo articolo illustra come usare lo studio di Azure Machine Learning per distribuire i modelli della famiglia Jamba di AI21 come API serverless con fatturazione con pagamento in base al consumo.
I modelli della famiglia Jamba rappresentano il modello linguistico di grandi dimensioni (LLM) di AI21 basato su Mamba e adatto alla produzione che sfrutta l'architettura Mamba-Transformer ibrida di AI21. Si tratta di una versione ottimizzata per istruzioni del modello Jamba Transformer SSM (State Space Model) strutturato ibrido di AI21. I modelli della famiglia Jamba sono stati progettati per un uso commerciale affidabile a livello di qualità e prestazioni.
Suggerimento
Vedere gli annunci relativi ai modelli della famiglia Jamba di AI21 ora disponibili nel catalogo modelli di Azure per intelligenza artificiale pubblicati tramite blog di AI21 e blog di Microsoft Tech Community.
Distribuire i modelli della famiglia Jamba come API serverless
Alcuni modelli nel catalogo modelli possono essere distribuiti come API serverless con fatturazione con pagamento in base al consumo, in modo da consentire di utilizzarli come API senza ospitarli nella sottoscrizione, mantenendo al contempo la sicurezza aziendale e la conformità richieste dalle organizzazioni. Questa opzione di distribuzione non richiede la quota dalla sottoscrizione.
Il modello AI21-Jamba 1.5 Large distribuito come API serverless con fatturazione con pagamento in base al consumo è offerto da AI21 tramite Microsoft Azure Marketplace. AI21 può modificare o aggiornare le condizioni per l'utilizzo e i prezzi di questo modello.
Per iniziare a usare Jamba 1.5 Large distribuito come API serverless, esplorare le integrazioni con LangChain, LiteLLM, OpenAI e l'API di Azure.
Prerequisiti
Una sottoscrizione di Azure con un metodo di pagamento valido. Le sottoscrizioni di Azure gratuite o di valutazione non funzioneranno. Se non si dispone di una sottoscrizione di Azure, è possibile creare un account Azure gratuito per iniziare.
Un'area di lavoro di Azure Machine Learning e un'istanza di ambiente di calcolo. Se non sono disponibili, seguire la procedura descritta nell'articolo Avvio rapido: Creare risorse dell'area di lavoro per crearle. L'offerta di distribuzione modello come API serverless per i modelli della famiglia Jamba è disponibile solo con le aree di lavoro create in queste aree geografiche:
- Stati Uniti orientali
- Stati Uniti orientali 2
- Stati Uniti centro-settentrionali
- Stati Uniti centro-meridionali
- Stati Uniti occidentali
- Stati Uniti occidentali 3
- Svezia centrale
Per un elenco delle aree disponibili per ognuno dei modelli che supportano distribuzioni di endpoint API serverless, vedere Disponibilità dell'area per i modelli negli endpoint API serverless.
I controlli degli accessi in base al ruolo di Azure vengono usati per concedere l'accesso alle operazioni in Azure Machine Learning. Per eseguire la procedura descritta in questo articolo, è necessario che all'account utente sia assegnato il ruolo di proprietario o collaboratore per la sottoscrizione di Azure. In alternativa, all'account può essere assegnato un ruolo personalizzato con le autorizzazioni seguenti:
Nella sottoscrizione di Azure, per sottoscrivere l'area di lavoro all'offerta di Azure Marketplace, una volta per ogni area di lavoro, per offerta:
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
Nel gruppo di risorse, per creare e usare la risorsa SaaS:
Microsoft.SaaS/resources/read
Microsoft.SaaS/resources/write
Nell'area di lavoro, per distribuire gli endpoint (il ruolo data scientist di Azure Machine Learning contiene già queste autorizzazioni):
Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*
Per altre informazioni sulle autorizzazioni, vedere Gestire l'accesso a un'area di lavoro di Azure Machine Learning.
Creare una nuova distribuzione
Questi passaggi illustrano la distribuzione dei modelli AI21 Jamba 1.5 Large
o AI21 Jamba 1.5 Mini
. Per creare una distribuzione:
Passare ad Azure Machine Learning Studio.
Selezionare l'area di lavoro in cui distribuire i modelli. Per usare l'offerta di distribuzione modello come API serverless, l'area di lavoro deve appartenere a una delle aree supportate elencate nei prerequisiti.
Cercare e selezionare un modello di AI21 come
AI21 Jamba 1.5 Large
,AI21 Jamba 1.5 Mini
oAI21 Jamba Instruct
dal catalogo dei modelli.In alternativa, è possibile avviare la distribuzione passando all'area di lavoro e selezionando Endpoint>Endpoint serverless>Crea.
Nella pagina di panoramica del modello nel catalogo modelli selezionare Distribuisci e quindi API serverless con Sicurezza dei contenuti di Azure AI.
Nella distribuzione guidata selezionare il collegamento a Condizioni di Azure Marketplace per altre informazioni sulle condizioni per l'utilizzo.
È anche possibile selezionare la scheda Dettagli sull'offerta in Marketplace per informazioni sui prezzi per il modello selezionato.
Se è la prima volta che si distribuisce il modello nell'area di lavoro, è necessario sottoscrivere l'area di lavoro per l'offerta specifica da Azure Marketplace. Questo passaggio richiede che l'account abbia le autorizzazioni per la sottoscrizione di Azure e le autorizzazioni del gruppo di risorse elencate nei prerequisiti. Ogni area di lavoro ha una propria sottoscrizione all'offerta di Azure Marketplace, che consente di controllare e monitorare la spesa. Selezionare Sottoscrivi e distribuisci. Attualmente è possibile avere una sola distribuzione per ogni modello all'interno di un'area di lavoro.
Dopo la registrazione dell’area di lavoro a una determinata offerta di Azure Marketplace, le distribuzioni successive della stessa offerta nello stesso progetto non richiedono una nuova sottoscrizione. Quindi non è necessario disporre delle autorizzazioni a livello di sottoscrizione per le distribuzioni successive. Se questo scenario si applica all'utente, selezionare Continua a distribuire.
Assegnare un nome alla distribuzione. Questo nome diventa parte dell'URL dell'API di distribuzione. Questo URL deve essere univoco in ogni area di Azure.
Seleziona Distribuisci. Attendere il completamento della distribuzione e si viene reindirizzati alla pagina endpoint serverless.
Selezionare l'endpoint per aprire la relativa pagina Dettagli.
Selezionare la scheda Test per iniziare a interagire con il modello.
È anche possibile prendere nota dell'URL Target e della Chiave segreta per chiamare la distribuzione e generare completamenti.
È sempre possibile trovare i dettagli, l'URL e le chiavi di accesso dell'endpoint passando a Area di lavoro>Endpoint>Endpoint serverless.
Per informazioni sulla fatturazione per i modelli della famiglia AI21-Jamba distribuiti come API serverless con fatturazione basata su token con pagamento in base al consumo, vedere Considerazioni sui costi e sulle quote per la famiglia di modelli Jamba distribuita come API serverless.
Usare i modelli della famiglia Jamba come API serverless
È possibile utilizzare i modelli della famiglia Jamba come indicato di seguito:
- Nell'area di lavoro, selezionare Endpoint>Endpoint serverless.
- Trovare e selezionare la distribuzione di creata.
- Copiare l'URL Target e i valori del token Chiave.
- Effettuare una richiesta API usando l'API di inferenza del modello di intelligenza artificiale di Azure nella route
/chat/completions
o nel client di Azure di AI21 in/v1/chat/completions
.
Per altre informazioni sull'uso delle API, vedere la sezione di riferimento.
Riferimento per i modelli della famiglia Jamba distribuiti come un'API serverless
I modelli della famiglia Jamba accettano entrambe queste API:
- API di inferenza del modello di intelligenza artificiale di Azure [API di inferenza del modello di intelligenza artificiale di Azure] nella route
/chat/completions
per la chat a più turni o la risposta a domande a turno singolo. Questa API è supportata perché i modelli della famiglia Jamba sono ottimizzati per il completamento della chat. - Client di Azure di AI21. Per altre informazioni sull'endpoint REST chiamato, vedere la documentazione REST di AI21.
API di inferenza del modello di Azure per intelligenza artificiale
Lo schema dell'API di inferenza del modello di Azure per intelligenza artificiale è disponibile nell'articolo di riferimento sui completamenti delle chat. È inoltre possibile ottenere una specifica OpenAPI dall'endpoint stesso.
La chat a turno singolo e la chat a più turni hanno lo stesso formato di richiesta e risposta, ad eccezione del fatto che la risposta alle domande (a turno singolo) implica solo un singolo messaggio utente nella richiesta, mentre la chat a più turni richiede l'invio dell'intera cronologia dei messaggi di chat in ogni richiesta.
In una chat a più turni il thread di messaggi ha gli attributi seguenti:
- Include tutti i messaggi dell'utente e del modello, ordinati dal meno recente al più recente.
- I messaggi si alternano tra messaggi del ruolo
user
eassistant
- Facoltativamente, il thread di messaggi inizia con un messaggio di sistema per fornire il contesto.
Il p-code seguente è un esempio dello stack di messaggi per la quarta chiamata in una richiesta di chat che include un messaggio di sistema iniziale.
[
{"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 di Azure di AI21
Usare il metodo POST
per inviare la richiesta alla route /v1/chat/completions
:
Richiedi
POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json
Schema della richiesta
Il payload è una stringa in formato JSON contenente i parametri seguenti:
Chiave | Type | Obbligatorio/Predefinito | Valori consentiti | Descrizione |
---|---|---|---|---|
model |
string |
Y | jamba-instruct o AI21 Jamba 1.5 Large o AI21 Jamba 1.5 Mini |
|
messages |
list[object] |
Y | Elenco di oggetti, uno per messaggio, dal meno recente al più recente. Il messaggio meno recente può essere del ruolo system . Tutti i messaggi successivi devono alternarsi tra i ruoli utente e assistente. Vedere la definizione dell'oggetto messaggio di seguito. |
|
max_tokens |
integer |
N4096 |
0 - 4096 | Numero massimo di token da consentire per ogni messaggio di risposta generato. In genere il modo migliore per limitare la lunghezza dell'output consiste nel fornire un limite di lunghezza nel prompt di sistema (ad esempio, "limitare le risposte a tre frasi") |
temperature |
float |
N1 |
0,0 - 2,0 | Quantità di variazione da fornire in ogni risposta. L'impostazione di questo valore su 0 garantisce ogni volta la stessa risposta alla stessa domanda. L'impostazione di un valore più alto incoraggia una maggiore variazione. Modifica la distribuzione da cui vengono campionati i token. È consigliabile modificare questo o top_p , ma non entrambi. |
top_p |
float |
N1 |
0 <valore<=1.0 | Limita il pool di token successivi in ogni passaggio al percentile N superiore dei token possibili, dove 1,0 indica il pool di tutti i token possibili e 0,01 indica solo il pool di token successivi più probabili. |
stop |
string O list[string] |
N |
"" | Stringa o elenco di stringhe contenenti una o più parole in corrispondenza delle quali l'API deve interrompere la generazione dell'output. Le nuove righe sono consentite come "\n". Il testo restituito non conterrà la sequenza di interruzione. |
n |
integer |
N1 |
1 - 16 | Numero di risposte da generare per ogni richiesta. Con il playground dello studio AI della piattaforma Azure, n=1 perché il playground per più risposte è ancora in fase di sviluppo. |
stream |
boolean |
NFalse |
True O False |
Indica se abilitare lo streaming. Se true, i risultati vengono restituiti un token alla volta. Se impostato su true, n deve essere 1, ovvero il valore impostato automaticamente. |
L'oggetto messages
ha i campi seguenti:
role
: [stringa, obbligatorio] autore o scopo del messaggio. Uno dei valori seguenti:user
: input fornito dall'utente. Tutte le istruzioni fornite qui che sono in conflitto con le istruzioni fornite nella richiestasystem
hanno la precedenza sulle istruzioni della richiestasystem
.assistant
: risposta generata dal modello.system
: istruzioni iniziali per fornire indicazioni generali sul tono e sulla voce del messaggio generato. Un messaggio di sistema iniziale è facoltativo, ma è consigliato per fornire indicazioni sul tono della chat. Ad esempio, "Sei un chatbot utile con un background nelle scienze della terra e un affascinante accento francese".
content
: [stringa, obbligatorio] contenuto del messaggio.
Esempio di richiesta
Esempio a turno singolo
{
"model": "jamba-instruct",
"messages": [
{
"role":"user",
"content":"Who was the first emperor of rome?"}
],
"temperature": 0.8,
"max_tokens": 512
}
Esempio di chat (quarta richiesta contenente la risposta del terzo utente)
{
"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
}
Schema della risposta
La risposta dipende leggermente dal fatto che il risultato venga trasmesso o meno.
In un risultato non trasmesso tutte le risposte vengono recapitate insieme in una singola risposta, che include anche una proprietà usage
.
In un risultato trasmesso,
- Ogni risposta include un singolo token nel campo
choices
. - La struttura dell'oggetto
choices
è diversa. - Solo l'ultima risposta include un oggetto
usage
. - L'intera risposta viene sottoposta a wrapping in un oggetto
data
. - L'oggetto risposta finale è
data: [DONE]
.
Il payload della risposta è un dizionario con i campi seguenti.
Chiave | Type | Descrizione |
---|---|---|
id |
string |
Identificatore univoco per la richiesta. |
model |
string |
Nome del modello usato. |
choices |
list[object ] |
Testo della risposta generato dal modello. Per una risposta non in streaming, si tratta di un elenco con elementi n . Per una risposta in streaming, si tratta di un singolo oggetto contenente un singolo token. Vedere la descrizione dell'oggetto di seguito. |
created |
integer |
Timestamp Unix (in secondi) di quando è stato creato il completamento. |
object |
string |
Il tipo di oggetto, che è sempre chat.completion . |
usage |
object |
Statistiche di utilizzo per la richiesta di completamento. Per informazioni dettagliate, vedi di seguito. |
L'oggetto risposta choices
contiene la risposta generata dal modello. L'oggetto ha i campi seguenti:
Chiave | Type | Descrizione |
---|---|---|
index |
integer |
Indice in base zero del messaggio nell'elenco dei messaggi. Potrebbe non corrispondere alla posizione nell'elenco. Per i messaggi trasmessi questo valore è sempre zero. |
message O delta |
object |
Messaggio generato (o token in una risposta in streaming). Stesso tipo di oggetto descritto nella richiesta con due modifiche: - In una risposta non in streaming questo oggetto viene chiamato message . - In una risposta in streaming viene chiamato delta e contiene message o role , ma non entrambi. |
finish_reason |
string |
Motivo per cui il modello ha interrotto la generazione di token: - stop : il modello ha raggiunto un punto di arresto naturale o una sequenza di interruzione specificata. - length : è stato raggiunto il numero massimo di token. - content_filter : la risposta generata ha violato un criterio di IA responsabile. - null : solo streaming. In una risposta in streaming tutte le risposte ad eccezione dell'ultima saranno null . |
L'oggetto risposta usage
contiene i campi seguenti.
Chiave | Type | Valore |
---|---|---|
prompt_tokens |
integer |
Numero di token nel prompt. Si noti che il conteggio dei token di richiesta include token aggiuntivi aggiunti dal sistema per formattare l'elenco di richieste in una singola stringa come richiesto dal modello. Il numero di token aggiuntivi è in genere proporzionale al numero di messaggi nel thread e deve essere relativamente piccolo. |
completion_tokens |
integer |
Numero di token generati nel completamento. |
total_tokens |
integer |
Token totali. |
Esempio di risposta non in 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
}
}
Esempio di risposta in 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]
Costi e quote
Considerazioni su costi e quote per i modelli della famiglia Jamba distribuiti come API serverless
I modelli della famiglia Jamba sono distribuiti come API serverless e sono offerti da AI21 tramite Azure Marketplace e integrato con Studio AI della piattaforma Azure per l'uso. È possibile trovare i prezzi di Azure Marketplace durante la distribuzione o l'ottimizzazione dei modelli.
Ogni volta che un'area di lavoro sottoscrive un'offerta di modello specifica da Azure Marketplace, viene creata una nuova risorsa per tenere traccia dei costi associati al consumo. La stessa risorsa viene usata per tenere traccia dei costi associati all'inferenza e all'ottimizzazione; tuttavia, sono disponibili più contatori per tenere traccia di ogni scenario in modo indipendente.
Per altre informazioni su come tenere traccia dei costi, vedere Monitorare i costi per i modelli offerti tramite Azure Marketplace.
La quota viene gestita per distribuzione. Ogni distribuzione ha un limite di frequenza di 200.000 token al minuto e 1.000 richieste API al minuto. Attualmente, tuttavia, viene limitata una distribuzione per ogni modello per ogni progetto. Contattare il supporto tecnico di Microsoft Azure se i limiti di frequenza correnti non sono sufficienti per gli scenari in uso.
Filtri dei contenuti
I modelli distribuiti come API serverless sono protetti dalla Sicurezza dei contenuti di Azure AI. Con la sicurezza dei contenuti di Intelligenza artificiale di Azure abilitata, sia il prompt che il completamento passano attraverso un insieme di modelli di classificazione volti a rilevare e impedire l'output di contenuto dannoso. Il sistema di filtro del contenuto (anteprima) rileva e agisce su categorie specifiche di contenuto potenzialmente dannoso sia nelle richieste di input che nei completamenti di output. Altre informazioni su Sicurezza dei contenuti di Azure per intelligenza artificiale.