Condividi tramite


API del Modello di base per il Throughput con provisioning

Questo articolo illustra come distribuire modelli usando API del modello foundation velocità effettiva con provisioning. Databricks consiglia la larghezza di banda con provisioning per i carichi di lavoro di produzione e offre un'inferenza ottimizzata per i modelli di fondazione con garanzie di prestazioni.

Che cos'è la capacità di throughput predefinita?

Il throughput con provisioning si riferisce al numero di token corrispondenti alle richieste che si possono inviare simultaneamente a un endpoint. Gli endpoint con throughput provisionato sono endpoint dedicati configurati in termini di un intervallo di token al secondo che è possibile inviare all'endpoint.

Per altre informazioni, vedere le risorse seguenti:

Per un list di architetture del modello di velocità effettiva supportate per gli endpoint con provisioning della velocità effettiva, vedere API del modello di base con provisioning.

Requisiti

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

Importante

Questa funzionalità si trova in anteprima pubblica.

Databricks consiglia di usare i modelli di base preinstallati in Unity Catalog. È possibile trovare questi modelli sotto catalogsystem nel schemaai (system.ai).

Per distribuire un modello di base:

  1. Navigare fino a system.ai in Catalog Explorer.
  2. Fare clic sul nome del modello da distribuire.
  3. Nella pagina del modello, fare clic sul pulsante Serve questo modello .
  4. La pagina Crea endpoint di servizio viene visualizzata. Vedi Crea il tuo endpoint con capacità di throughput assegnata 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 è possibile selectGet accedere e fornire le credenziali di accesso credentials per installare il modello in Unity Catalog.

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

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 da Unity Catalog.

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

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 puoi usare i modelli nel system.aischema o installare modelli da Databricks Marketplace, puoi distribuire un modello di fondazione ottimizzato registrandolo in Unity Catalog. Questa sezione e le sezioni seguenti illustrano come set il codice per registrare un modello MLflow in Unity Catalog e creare l'endpoint della 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 compatibile di MLflow.
  • Databricks consiglia di usare i modelli in Unity Catalog per un caricamento e un download più rapidi di modelli di grandi dimensioni.

Definire catalog, schema e nome del modello

Per distribuire un modello di base ottimizzato, definire la destinazione Unity Catalogcatalog, schemae scegliere il nome del modello desiderato.

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 il throughput assegnato per l'endpoint del modello, è necessario registrare il modello utilizzando il flavor transformers di MLflow e specificare l'argomento task con l'interfaccia del tipo di modello appropriata tra le seguenti opzioni:

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

Questi argomenti specificano la firma API usata per l'endpoint di gestione del modello. Fare riferimento a la documentazione di MLflow per altri dettagli su queste attività e sugli schemi di input/output corrispondenti.

Di seguito è riportato un esempio di come registrare un modello linguistico di completamento del testo 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 utilizza una versione di MLflow precedente alla 2.12, è necessario specificare l'attività nel parametro metadata della funzione mlflow.transformer.log_model().

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

La larghezza di banda con provisioning supporta anche sia i modelli di embedding GTE di base che quelli 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 utilizzato con capacità di throughput predefinita.

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 in Unity Catalog, proseguire a per creare il tuo endpoint di servizio del modello utilizzando l'interfaccia utente con throughput provvisto.

Creare il tuo endpoint di throughput con provisioning usando l'interfaccia utente

Dopo aver registrato il modello in Unity Catalog, creare un endpoint di servizio con throughput provvisto seguendo questa procedura:

  1. Passare alla UI di Servizio dell'area di lavoro.
  2. Select Crea un endpoint di servizio.
  3. Nel campo Entità , il tuo modello da Unity selectCatalog. Per i modelli idonei, l'interfaccia utente per l'entità servita mostra la schermata Throughput provisionato.
  4. Nell'elenco a discesa Fino a è possibile configurare la velocità effettiva massima dei token al secondo per l'endpoint.
    1. Gli endpoint di throughput con provisioning vengono scalati automaticamente, così puoi selectmodificare per visualizzare il numero minimo di token al secondo al quale il tuo endpoint può ridursi.

velocità effettiva con provisioning

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

Per distribuire il tuo modello in modalità di throughput con provisioning usando l'API REST, è necessario specificare i campi min_provisioned_throughput e max_provisioned_throughput nella richiesta. Se preferisci Python, puoi anche creare un endpoint usando l'MLflow Deployment SDK.

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

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "prov-throughput-endpoint"

# Name of the registered MLflow model
model_name = "ml.llm-catalog.foundation-model"

# 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à logaritmica per le attività di completamento della chat

Per le attività di completamento della chat, è possibile usare il parametro logprobs per fornire la probabilità logaritmica che un token venga selezionato come parte del processo di generazione di modelli linguistici di ampia scala. È 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 l'attività Chat .

Get larghezza di banda predefinita a incrementi

La larghezza di banda fornita è disponibile in incrementi di token al secondo, con variazioni specifiche a seconda del 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 è riportata una risposta di esempio dell'API:

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

Esempi di notebook

I notebook seguenti illustrano esempi di come creare un'API del Modello Fondamentale con velocità di trasmissione provisionata:

Servizio di throughput per il notebook del modello GTE

Get portatile

Provisioning della velocità effettiva per il notebook del modello BGE

Get taccuino

Assegnazione della capacità per il notebook del modello Mistral

Get taccuino

Limitazioni

  • La distribuzione del modello potrebbe non riuscire a causa di problemi di capacità gpu, che comportano un timeout durante la creazione dell'endpoint o update. Contattare il team dell'account Databricks per aiutare a risolvere il problema.

  • Il ridimensionamento automatico per le API dei modelli di base è più lento rispetto alla gestione del modello CPU. Databricks consiglia il sovrapprovvigionamento per prevenire timeout delle richieste.

  • Sono supportate solo le architetture di modelli GTE v1.5 (inglese) e BGE v1.5 (inglese).

  • GTE v1.5 (inglese) non incorpora embeddings normalizzati generate.