Share via


Come distribuire modelli linguistici di grandi dimensioni con Studio AI della piattaforma Azure

Importante

Alcune funzionalità descritte in questo articolo potrebbero essere disponibili solo in anteprima. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro 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.

La distribuzione di un modello linguistico di grandi dimensioni (LLM) lo rende disponibile per l'uso in un sito Web, in un'applicazione o in altri ambienti di produzione. Solitamente, la distribuzione comporta l'hosting del modello in un server o nel cloud, nonché la creazione di un'API o di un'altra interfaccia per consentire agli utenti di interagire con il modello. È possibile richiamare la distribuzione per l'inferenza in tempo reale di applicazioni di intelligenza artificiale generativa, ad esempio chat e copilota.

Questo articolo illustra come distribuire modelli linguistici di grandi dimensioni in Studio AI della piattaforma Azure. È possibile distribuire i modelli dal catalogo modelli o dal progetto. Inoltre, si possono distribuire i modelli utilizzando l'SDK di Azure Machine Learning. L'articolo illustra anche come eseguire l'inferenza nel modello distribuito.

Distribuire ed eseguire l’inferenza di un modello con codice API serverless

Distribuzione di un modello

I modelli API serverless possono essere distribuiti con la fatturazione con pagamento in base al consumo. Tra gli esempi sono inclusi Phi-3, Llama-2, Command R, Mistral Large, e altri. Per i modelli API serverless, viene addebitata solo l'inferenza, a meno che non si scelga di ottimizzare il modello.

Ottenere l'ID modello

È possibile distribuire i modelli utilizzando l'SDK API di Azure Machine Learning, ma in primo luogo è necessario sfogliare il catalogo dei modelli e ottenere l'ID modello necessario per la distribuzione.

  1. Accedere a Studio AI della piattaforma Azure e passare alla Home page.

  2. Selezionare Catalogo modelli nella barra laterale sinistra.

  3. Nel filtro Opzioni di distribuzione selezionare API serverless.

    Screenshot che illustra come applicare il filtro per modelli API serverless nel catalogo.

  4. Seleziona un modello.

  5. Copiare l'ID modello dalla pagina dei dettagli del modello selezionato. Verrà visualizzata una schermata simile alla seguente: azureml://registries/azureml-cohere/models/Cohere-command-r-plus/versions/3

Installare Azure Machine Learning SDK

Successivamente, è necessario installare l'SDK di Azure Machine Learning. Eseguire i comandi seguenti nel terminale:

pip install azure-ai-ml
pip install azure-identity

Distribuire il modello API serverless

In primo luogo, è necessario eseguire l'autenticazione in Azure per intelligenza artificiale.

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import MarketplaceSubscription, ServerlessEndpoint

# You can find your credential information in project settings.
client = MLClient(
    credential=DefaultAzureCredential(),
    subscription_id="your subscription name goes here",
    resource_group_name="your resource group name goes here",
    workspace_name="your project name goes here",
)

In secondo luogo, si fa riferimento all'ID modello individuato in precedenza.

# You can find the model ID on the model catalog.
model_id="azureml://registries/azureml-meta/models/Llama-2-70b-chat/versions/18" 

Per poter utilizzare il modello, i modelli API serverless dei provider di modelli di terze parti richiedono una sottoscrizione di Azure Marketplace. A questo punto si deve creare una sottoscrizione di Marketplace.

Nota

È possibile ignorare questa parte se si distribuisce un modello API serverless da Microsoft, ad esempio Phi-3.

# You can customize the subscription name.
subscription_name="Meta-Llama-2-70b-chat" 

marketplace_subscription = MarketplaceSubscription(
    model_id=model_id,
    name=subscription_name,
)

marketplace_subscription = client.marketplace_subscriptions.begin_create_or_update(
    marketplace_subscription
).result()

Infine, si deve creare un endpoint serverless.


endpoint_name="Meta-Llama-2-70b-chat-qwerty" # Your endpoint name must be unique

serverless_endpoint = ServerlessEndpoint(
    name=endpoint_name,
    model_id=model_id
)

created_endpoint = client.serverless_endpoints.begin_create_or_update(
    serverless_endpoint
).result()

Ottenere l'endpoint e le chiavi dell'API serverless

endpoint_keys = client.serverless_endpoints.get_keys(endpoint_name)
print(endpoint_keys.primary_key)
print(endpoint_keys.secondary_key)

Eseguire l'inferenza della distribuzione

Per eseguire l'inferenza, si usa il codice per soddisfare in modo speecifico i diversi tipi di modelli e SDK in uso. È possibile trovare esempi di codice nel repository di esempio Azure/azureml-examples.

Distribuire ed eseguire l’inferenza di una distribuzione di calcolo gestita con codice

Distribuzione di un modello

Il catalogo modelli di Studio AI offre più di 1.600 modelli; il modo più comune per distribuirli è l'opzione di distribuzione di calcolo gestita, nota anche come distribuzione online gestita.

Ottenere l'ID modello

È possibile distribuire modelli di calcolo gestiti usando l'SDK di Azure Machine Learning, ma prima si deve esplorare il catalogo modelli e ottenere l'ID modello necessario per la distribuzione.

  1. Accedere a Studio AI della piattaforma Azure e passare alla Home page.

  2. Selezionare Catalogo modelli nella barra laterale sinistra.

  3. Nel filtro Opzioni di distribuzione selezionare Calcolo gestito.

    Screenshot che illustra come filtrare in base ai modelli di calcolo gestiti nel catalogo.

  4. Seleziona un modello.

  5. Copiare l'ID modello dalla pagina dei dettagli del modello selezionato. Verrà visualizzata una schermata simile alla seguente: azureml://registries/azureml/models/deepset-roberta-base-squad2/versions/16

Installare Azure Machine Learning SDK

Per questo passaggio, è necessario installare l'SDK di Azure Machine Learning.

pip install azure-ai-ml
pip install azure-identity

Distribuire il modello

In primo luogo, è necessario eseguire l'autenticazione in Azure per intelligenza artificiale.

from azure.ai.ml import MLClient
from azure.identity import InteractiveBrowserCredential

client = MLClient(
    credential=InteractiveBrowserCredential,
    subscription_id="your subscription name goes here",
    resource_group_name="your resource group name goes here",
    workspace_name="your project name goes here",
)

Distribuire il modello.

Per l'opzione di distribuzione calcolo gestito, è necessario creare un endpoint prima della distribuzione di un modello. Si consideri l'endpoint come un contenitore in grado di ospitare più distribuzioni di modelli. I nomi degli endpoint devono essere univoci all'interno di un'area, quindi in questo esempio si usa il timestamp per creare un nome endpoint univoco.

import time, sys
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
    ProbeSettings,
)

# Make the endpoint name unique
timestamp = int(time.time())
online_endpoint_name = "customize your endpoint name here" + str(timestamp)

# Create an online endpoint
endpoint = ManagedOnlineEndpoint(
    name=online_endpoint_name,
    auth_mode="key",
)
workspace_ml_client.begin_create_or_update(endpoint).wait()

Creare una distribuzione. È possibile trovare l'ID modello nel catalogo modelli.

model_name = "azureml://registries/azureml/models/deepset-roberta-base-squad2/versions/16" 

demo_deployment = ManagedOnlineDeployment(
    name="demo",
    endpoint_name=online_endpoint_name,
    model=model_name,
    instance_type="Standard_DS3_v2",
    instance_count=2,
    liveness_probe=ProbeSettings(
        failure_threshold=30,
        success_threshold=1,
        timeout=2,
        period=10,
        initial_delay=1000,
    ),
    readiness_probe=ProbeSettings(
        failure_threshold=10,
        success_threshold=1,
        timeout=10,
        period=10,
        initial_delay=1000,
    ),
)
workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()
endpoint.traffic = {"demo": 100}
workspace_ml_client.begin_create_or_update(endpoint).result()

Eseguire l'inferenza della distribuzione

Per testare l'inferenza sono necessari dei dati JSON di esempio. Creare sample_score.json con l’esempio seguente.

{
  "inputs": {
    "question": [
      "Where do I live?",
      "Where do I live?",
      "What's my name?",
      "Which name is also used to describe the Amazon rainforest in English?"
    ],
    "context": [
      "My name is Wolfgang and I live in Berlin",
      "My name is Sarah and I live in London",
      "My name is Clara and I live in Berkeley.",
      "The Amazon rainforest (Portuguese: Floresta Amaz\u00f4nica or Amaz\u00f4nia; Spanish: Selva Amaz\u00f3nica, Amazon\u00eda or usually Amazonia; French: For\u00eat amazonienne; Dutch: Amazoneregenwoud), also known in English as Amazonia or the Amazon Jungle, is a moist broadleaf forest that covers most of the Amazon basin of South America. This basin encompasses 7,000,000 square kilometres (2,700,000 sq mi), of which 5,500,000 square kilometres (2,100,000 sq mi) are covered by the rainforest. This region includes territory belonging to nine nations. The majority of the forest is contained within Brazil, with 60% of the rainforest, followed by Peru with 13%, Colombia with 10%, and with minor amounts in Venezuela, Ecuador, Bolivia, Guyana, Suriname and French Guiana. States or departments in four nations contain \"Amazonas\" in their names. The Amazon represents over half of the planet's remaining rainforests, and comprises the largest and most biodiverse tract of tropical rainforest in the world, with an estimated 390 billion individual trees divided into 16,000 species."
    ]
  }
}

Eseguire l'inferenza con sample_score.json. Modificare il percorso in base alla posizione cui è stato salvato il file JSON di esempio.

scoring_file = "./sample_score.json" 
response = workspace_ml_client.online_endpoints.invoke(
    endpoint_name=online_endpoint_name,
    deployment_name="demo",
    request_file=scoring_file,
)
response_json = json.loads(response)
print(json.dumps(response_json, indent=2))

Eliminare l'endpoint di distribuzione

Per eliminare le distribuzioni in Studio AI, selezionare il pulsante Elimina nel pannello superiore della pagina dei dettagli della distribuzione.

Considerazioni sulla quota

Per distribuire ed eseguire l'inferenza di endpoint in tempo reale, si utilizza la quota di core della macchina virtuale (VM) assegnata alla sottoscrizione in base all'area. Quando ci si iscrive a Studio AI, si riceve una quota di macchina virtuale predefinita per le diverse famiglie di VM disponibili nell'area. È possibile continuare a creare distribuzioni fino a raggiungere il limite di quota. A questo punto è possibile richiedere un aumento della quota.

Passaggi successivi