Condividi tramite


Creare endpoint di gestione del modello di base

Questo articolo illustra come creare endpoint di gestione dei modelli che distribuiscono e gestiscono modelli di base.

Mosaic AI Model Serving supporta i modelli seguenti:

  • Modelli esterni. Si tratta di modelli di base ospitati all'esterno di Databricks. Gli endpoint che servono modelli esterni possono essere regolati in maniera centralizzata e i clienti ne possono stabilire limiti di velocità e controlli di accesso. Alcuni esempi includono modelli di base come GPT-4 di OpenAI, Claude di Anthropic e altri.

  • Modelli di base aperti all’avanguardia resi disponibili dalle API del modello foundation. Questi modelli sono architetture di modelli di base curate che supportano l'inferenza ottimizzata. I modelli di base, come Meta-Llama-3.1-70B-Instruct, GTE-Large e Mistral-7B sono disponibili per un uso immediato con prezzi con pagamento per token . I carichi di lavoro di produzione, che usano modelli di base o ottimizzati, possono essere distribuiti con garanzie di prestazioni usando la velocità effettiva con provisioning.

La gestione dei modelli offre le opzioni seguenti per la creazione di endpoint del modello:

  • Interfaccia utente di servizio
  • REST API
  • MLflow Deployments SDK

Per la creazione di endpoint che servono modelli di Machine Learning o Python tradizionali, consultare la sezione Creare endpoint di gestione di modelli personalizzati.

Requisiti

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Creare un endpoint di gestione di un modello di base

È possibile creare un endpoint che gestisce varianti ottimizzate dei modelli di base resi disponibili usando la velocità effettiva con provisioning delle API del modello di base. Consultare la sezione Creare l’endpoint di velocità effettiva con provisioning usando l'API REST.

Per i modelli di base resi disponibili tramite le API del modello di base con pagamento in base al token, Databricks fornisce automaticamente endpoint specifici per accedere ai modelli supportati nell'area di lavoro di Databricks. Per accedervi, selezionare la scheda Serving nella barra laterale sinistra dell'area di lavoro. Le API del modello di base si trovano nella parte superiore della visualizzazione elenco Endpoint.

Per eseguire query su questi endpoint, vedere Modelli di base di query.

Creare un endpoint di gestione di un modello esterno

Di seguito viene descritto come creare un endpoint che esegue query su un modello di base reso disponibile usando i modelli esterni di Databricks.

Serving interfaccia utente

  1. Nel campo Nome immettere un nome per il calendario.
  2. Nella sezione Entità servite
    1. Fare clic nel campo dell'entità per aprire il modulo di selezione dell'entità servita .
    2. Seleziona modello esterno.
    3. Selezionare il provider di modelli da usare.
    4. Fare clic su Conferma
    5. Specificare il nome del modello esterno da usare. Il modulo viene aggiornato dinamicamente in base alla selezione. Consultare i modelli esterni disponibili.
    6. Selezionare il tipo di attività. Le attività disponibili sono chat, completamenti e incorporamenti.
    7. Specificare i dettagli di configurazione per l'accesso al provider di modelli selezionato. Si tratta in genere del segreto che fa riferimento al token di accesso personale da usare per l'accesso a questo modello.
  3. Cliccare su Crea. La pagina “Gestione degli endpoint” viene visualizzata con lo Stato dell’endpoint di servizio visualizzato come Non pronto.

Creare un endpoint di gestione dei modelli

REST API

Importante

I parametri dell'API REST per la creazione di endpoint che servono modelli esterni si trovano in anteprima pubblica.

Nell'esempio seguente viene creato un endpoint che gestisce la prima versione del text-embedding-ada-002 modello fornito da OpenAI.

Vedere post /api/2.0/serving-endpoints per i parametri di configurazione degli endpoint.

{
  "name": "openai_endpoint",
  "config":
  {
    "served_entities":
    [
      {
        "name": "openai_embeddings",
        "external_model":{
          "name": "text-embedding-ada-002",
          "provider": "openai",
          "task": "llm/v1/embeddings",
          "openai_config":{
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        }
      }
    ]
  },
  "rate_limits": [
    {
      "calls": 100,
      "key": "user",
      "renewal_period": "minute"
    }
  ],
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ]
}

Di seguito è riportato un esempio di risposta.

{
  "name": "openai_endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1699617587000,
  "last_updated_timestamp": 1699617587000,
  "state": {
    "ready": "READY"
  },
  "config": {
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model": {
          "provider": "openai",
          "name": "text-embedding-ada-002",
          "task": "llm/v1/embeddings",
          "openai_config": {
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        },
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1699617587000
      }
  ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "openai_embeddings",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ],
  "id": "69962db6b9db47c4a8a222d2ac79d7f8",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

MLflow Deployments SDK

Di seguito viene creato un endpoint per gli incorporamenti con OpenAI text-embedding-ada-002.

Per gli endpoint del modello esterno, è necessario specificare le chiavi API per il provider di modelli che si vuole usare. Vedere POST /api/2.0/serving-endpoints nell'API REST per informazioni dettagliate sullo schema di richiesta e risposta. Per una guida dettagliata, consultare Esercitazione: Creare endpoint di modello esterni per eseguire query sui modelli OpenAI.

È anche possibile creare endpoint per i completamenti e le attività di chat, come specificato dal task campo nella external_model sezione della configurazione. Vedere Modelli esterni in Mosaic AI Model Serving per i modelli e i provider supportati per ogni attività.


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="chat",
    config={
        "served_entities": [
            {
                "name": "completions",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

Aggiornare i modelli di gestione degli endpoint

Dopo aver abilitato un endpoint del modello, è possibile impostare la configurazione di calcolo in base alle esigenze. Questa configurazione è particolarmente utile se sono necessarie risorse aggiuntive per il modello. Le dimensioni del carico di lavoro e la configurazione di calcolo svolgono un ruolo chiave nelle risorse allocate per gestire il modello.

Fino a quando la nuova configurazione non è pronta, la configurazione precedente continua a gestire il traffico di stima. Mentre è in corso un aggiornamento, non è possibile eseguire un altro aggiornamento. Nell'interfaccia utente di gestione è possibile annullare un aggiornamento della configurazione in corso selezionando Annulla aggiornamento nella parte superiore destra della pagina dei dettagli dell'endpoint. Questa funzionalità è disponibile solo nell'interfaccia utente Di servizio.

Quando un external_model è presente in una configurazione dell'endpoint, l'elenco delle entità servite può avere un solo oggetto served_entity. Gli endpoint esistenti con un external_model oggetto non possono essere aggiornati per non avere più un oggetto external_model. Se l'endpoint viene creato senza un external_model, non è possibile aggiornarlo per aggiungere un external_model.

REST API

Per aggiornare l'endpoint, vedere la documentazione relativa alla configurazione degli aggiornamenti api REST per informazioni dettagliate sullo schema di richiesta e risposta.

{
  "name": "openai_endpoint",
  "served_entities":
  [
    {
      "name": "openai_chat",
      "external_model":{
        "name": "gpt-4",
        "provider": "openai",
        "task": "llm/v1/chat",
        "openai_config":{
          "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
        }
      }
    }
  ]
}

MLflow Deployments SDK

Per aggiornare l'endpoint, vedere la documentazione relativa alla configurazione degli aggiornamenti api REST per informazioni dettagliate sullo schema di richiesta e risposta.

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.update_endpoint(
    endpoint="chat",
    config={
        "served_entities": [
            {
                "name": "chats",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chats",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
  }

rate_limits = client.update_endpoint(
    endpoint="chat",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 10,
            }
        ],
    },
)
assert rate_limits == {
    "rate_limits": [
        {
            "key": "user",
            "renewal_period": "minute",
            "calls": 10,
        }
    ],
}

Risorse aggiuntive