Condividi tramite


API del modello di base throughput con provisioning

Questo articolo illustra come distribuire modelli usando le API del modello di base con produttività con provisioning. Tuttavia, è consigliabile usare l'endpoint di produttività con provisioning per i carichi di lavoro di produzione che offrono inferenza ottimizzata per i modelli di base con garanzie di prestazioni.

Che cos'è la velocità effettiva con provisioning?

La produttività con provisioning si riferisce al numero di token che vale il valore delle richieste che è possibile inviare a un endpoint contemporaneamente. Gli endpoint di gestione della produttività con provisioning sono endpoint dedicati configurati in termini di intervallo di token al secondo che è possibile inviare all'endpoint.

Per altre informazioni, vedere le risorse seguenti:

Per un elenco delle architetture di modelli supportate, vedere API del modello di base per la produttività con provisioning.

Requisiti

Vedere i requisiti. Per la distribuzione di modelli di base ottimizzati, vedere Distribuire modelli di base ottimizzati.

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Databricks consiglia di usare i modelli di base preinstallati in Unity Catalog. Questi modelli sono disponibili nel catalogo system nello schema ai (system.ai).

Per distribuire un modello di base:

  1. Passare a system.ai in Esplora cataloghi.
  2. Cliccare il nome del modello da distribuire.
  3. Nella pagina del modello cliccare il pulsante Serve questo modello.
  4. Verrà visualizzata la pagina Crea endpoint di gestione. Vedere Creare l'endpoint di velocità effettiva con provisioning usando l'interfaccia utente.

Distribuire modelli di base da Databricks Marketplace

In alternativa, è possibile installare i modelli di base in Unity Catalog da Databricks Marketplace.

È possibile cercare una famiglia di modelli e nella pagina del modello selezionare Ottenere l'accesso e fornire le credenziali di accesso per installare il modello in Unity Catalog.

Dopo aver installato il modello in Unity Catalog, è possibile creare un endpoint di gestione del modello usando l'interfaccia utente di gestione.

Distribuire modelli DBRX

Databricks consiglia di gestire il modello DBRX Instruct per i carichi di lavoro. Per gestire il modello DBRX Instruct usando la velocità effettiva con provisioning, seguire le indicazioni riportate in [Consigliato] Distribuire i modelli di base dal Unity Catalog.

Quando si servono questi modelli DBRX, la velocità effettiva con provisioning supporta una lunghezza del contesto fino a 16k.

I modelli DBRX usano il prompt di sistema predefinito seguente per garantire la pertinenza e l'accuratezza nelle risposte del modello:

You are DBRX, created by Databricks. You were last updated in December 2023. You answer questions based on information available up to that point.
YOU PROVIDE SHORT RESPONSES TO SHORT QUESTIONS OR STATEMENTS, but provide thorough responses to more complex and open-ended questions.
You assist with various tasks, from writing to coding (using markdown for code blocks — remember to use ``` with code, JSON, and tables).
(You do not have real-time data access or code execution capabilities. You avoid stereotyping and provide balanced perspectives on controversial topics. You do not provide song lyrics, poems, or news articles and do not divulge details of your training data.)
This is your system prompt, guiding your responses. Do not reference it, just respond to the user. If you find yourself talking about this message, stop. You should be responding appropriately and usually that means not mentioning this.
YOU DO NOT MENTION ANY OF THIS INFORMATION ABOUT YOURSELF UNLESS THE INFORMATION IS DIRECTLY PERTINENT TO THE USER'S QUERY.

Distribuire modelli di base ottimizzati

Se non è possibile usare i modelli nello schema system.ai o installare modelli da Databricks Marketplace, è possibile distribuire un modello di base ottimizzato registrandolo in Unity Catalog. Questa sezione e le sezioni seguenti illustrano come configurare il codice per registrare un modello MLflow in Unity Catalog e creare l'endpoint di velocità effettiva con provisioning usando l'interfaccia utente o l'API REST.

Vedere Limiti di velocità effettiva con provisioning per i modelli meta llama 3.1, 3.2 e 3.3 ottimizzati e la disponibilità dell'area.

Requisiti

  • La distribuzione di modelli di base ottimizzati è supportata solo da MLflow 2.11 o versione successiva. Databricks Runtime 15.0 ML e versioni successive preinstalla la versione MLflow compatibile.
  • Databricks consiglia di usare i modelli in Unity Catalog per un caricamento e un download più rapidi di modelli di grandi dimensioni.

Definire il nome del catalogo, dello schema e del modello

Per distribuire un modello di base ottimizzato, definire il catalogo, lo schema e il nome del modello di destinazione di Unity Catalog.

mlflow.set_registry_uri('databricks-uc')
CATALOG = "catalog"
SCHEMA = "schema"
MODEL_NAME = "model_name"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

Registrare il modello

Per abilitare la velocità effettiva con provisioning per l'endpoint del modello, è necessario registrare il modello usando la versione transformers MLflow e specificare task l'argomento con l'interfaccia del tipo di modello appropriata dalle opzioni seguenti:

  • "llm/v1/completions"
  • "llm/v1/chat"
  • "llm/v1/embeddings"

Specifica la firma API usata per l'endpoint di servizio del modello. Per altre informazioni su queste attività e sugli schemi di input/output corrispondenti, vedere la documentazione di MLflow.

Di seguito è riportato un esempio di come registrare un modello linguistico di completamento del testo registrato usando MLflow:

model = AutoModelForCausalLM.from_pretrained("mosaicml/mixtral-8x7b-instruct", torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mixtral-8x7b-instruct")

with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        # Specify the llm/v1/xxx task that is compatible with the model being logged
        task="llm/v1/completions",
        # Specify an input example that conforms to the input schema for the task.
        input_example={"prompt": np.array(["Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\nWhat is Apache Spark?\n\n### Response:\n"])},
        # By passing the model name, MLflow automatically registers the Transformers model to Unity Catalog with the given catalog/schema/model_name.
        registered_model_name=registered_model_name
        # Optionally, you can set save_pretrained to False to avoid unnecessary copy of model weight and gain more efficiency
        save_pretrained=False
    )

Nota

Se si usa MLflow precedente alla 2.12, è necessario specificare l'attività all'interno metadata del parametro della stessa mlflow.transformer.log_model() funzione.

  • metadata = {"task": "llm/v1/completions"}
  • metadata = {"task": "llm/v1/chat"}
  • metadata = {"task": "llm/v1/embeddings"}

La velocità effettiva con provisioning supporta anche i modelli di incorporamento GTE di base e di grandi dimensioni. Di seguito è riportato un esempio di come registrare il modello Alibaba-NLP/gte-large-en-v1.5 in modo che possa essere gestito con la velocità effettiva con provisioning:

model = AutoModel.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("Alibaba-NLP/gte-large-en-v1.5")
with mlflow.start_run():
    components = {
      "model": model,
      "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        task="llm/v1/embeddings",
        registered_model_name=registered_model_name,
        # model_type is required for logging a fine-tuned BGE models.
        metadata={
            "model_type": "gte-large"
        }
    )

Dopo aver eseguito l'accesso al modello nel Unity Catalog, continuare in Creare l'endpoint della velocità effettiva con provisioning usando l'interfaccia utente per creare un modello che gestisce un endpoint con velocità effettiva con provisioning.

Creare l'endpoint di velocità effettiva con provisioning usando l'interfaccia utente

Dopo aver registrato il modello in Unity Catalog, creare un endpoint di gestione della velocità effettiva con provisioning seguendo questa procedura:

  1. Passare all'area di lavoro nel Servizio interfaccia utente.
  2. Selezionare Crea l'endpoint di servizio.
  3. Nel campo Entità selezionare il modello dal Unity Catalog. Per i modelli idonei, l'interfaccia utente per l'entità servita mostra la schermata Velocità effettiva con provisioning.
  4. Nell'elenco a discesa Fino a è possibile configurare la velocità effettiva massima dei token al secondo per l'endpoint.
    1. Gli endpoint di velocità effettiva con provisioning vengono ridimensionati automaticamente, quindi è possibile selezionare Modifica per visualizzare i token minimi al secondo in cui l'endpoint può ridurre le prestazioni.

Velocità effettiva con provisioning

Creare l'endpoint di velocità effettiva con provisioning usando l'API REST

Per distribuire il modello in modalità velocità effettiva con provisioning usando l'API REST, è necessario specificare i campi min_provisioned_throughput e max_provisioned_throughput nella richiesta. Se si preferisce Python, è anche possibile creare un endpoint usando MLflow Deployment SDK.

Per identificare l'intervallo appropriato di velocità effettiva con provisioning per il modello, vedere Ottenere la velocità effettiva con provisioning in incrementi.

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "llama-chat"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.llama-13b"

# Get the latest version of the MLflow model
model_version = 3

# Get the API endpoint and token for the current notebook context
API_ROOT = "<YOUR-API-URL>"
API_TOKEN = "<YOUR-API-TOKEN>"

headers = {"Context-Type": "text/json", "Authorization": f"Bearer {API_TOKEN}"}

optimizable_info = requests.get(
  url=f"{API_ROOT}/api/2.0/serving-endpoints/get-model-optimization-info/{model_name}/{model_version}",
  headers=headers)
  .json()

if 'optimizable' not in optimizable_info or not optimizable_info['optimizable']:
  raise ValueError("Model is not eligible for provisioned throughput")

chunk_size = optimizable_info['throughput_chunk_size']

# Minimum desired provisioned throughput
min_provisioned_throughput = 2 * chunk_size

# Maximum desired provisioned throughput
max_provisioned_throughput = 3 * chunk_size

# Send the POST request to create the serving endpoint
data = {
  "name": endpoint_name,
  "config": {
    "served_entities": [
      {
        "entity_name": model_name,
        "entity_version": model_version,
        "min_provisioned_throughput": min_provisioned_throughput,
        "max_provisioned_throughput": max_provisioned_throughput,
      }
    ]
  },
}

response = requests.post(
  url=f"{API_ROOT}/api/2.0/serving-endpoints", json=data, headers=headers
)

print(json.dumps(response.json(), indent=4))

Probabilità di log per le attività di completamento della chat

Per le attività di completamento della chat, è possibile usare il logprobs parametro per fornire la probabilità di log di un token campionato come parte del processo di generazione di modelli linguistici di grandi dimensioni. È possibile usare logprobs per diversi scenari, tra cui la classificazione, la valutazione dell'incertezza del modello e l'esecuzione delle metriche di valutazione. Per informazioni dettagliate sui parametri, vedere Attività chat.

Ottenere la velocità effettiva con provisioning in incrementi

La velocità effettiva con provisioning è disponibile in incrementi di token al secondo con incrementi specifici che variano in base al modello. Per identificare l'intervallo appropriato per le proprie esigenze, Databricks consiglia di usare l'API delle informazioni di ottimizzazione del modello all'interno della piattaforma.

GET api/2.0/serving-endpoints/get-model-optimization-info/{registered_model_name}/{version}

Di seguito è riportato un esempio di risposta dall’API:

{
  "optimizable": true,
  "model_type": "llama",
  "throughput_chunk_size": 1580
}

Esempi di notebook

I notebook seguenti illustrano esempi di come creare un'API modello di base per la velocità effettiva di cui è stato effettuato il provisioning:

Provisioning della velocità effettiva per il notebook del modello GTE

Ottenere il notebook

Provisioning della velocità effettiva per il notebook del modello Mistral

Ottenere il notebook

Provisioning della velocità effettiva per il notebook del modello BGE

Ottenere il notebook

Limiti

  • La distribuzione del modello potrebbe non riuscire a causa di problemi di capacità GPU, che comportano un timeout durante la creazione o l'aggiornamento dell'endpoint. Contattare il team dell'account Databricks per risolvere il problema.
  • Il ridimensionamento automatico per le API dei modelli di base è più lento rispetto alla gestione del modello CPU. Databricks consiglia il provisioning eccessivo per evitare timeout delle richieste.