API del Modello di Base per il Throughput Provisionato
Questo articolo illustra come distribuire modelli usando Foundation Model APIs con throughput approvvigionato. 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 fornito si riferisce al numero di token di richieste che si possono inviare simultaneamente su un endpoint. Gli endpoint con throughput preconfigurato sono endpoint dedicati configurati in base a un numero predefinito di token che possono essere inviati all'endpoint ogni secondo.
Per altre informazioni, vedere le risorse seguenti:
- Che cosa significano gli intervalli di token al secondo nel throughput previsto?
- Condurre un benchmarking degli endpoint LLM personalizzato
Vedere Provisioned throughput per un elenco delle architetture di modelli supportate per gli endpoint di Provisioned throughput.
Requisiti
Vedi requisiti. Per la distribuzione di modelli di base ottimizzati, vedere Distribuire modelli di base ottimizzati.
[Consigliato] Distribuire modelli di base dal catalogo unity
Importante
Questa funzionalità si trova in anteprima pubblica.
Databricks consiglia di usare i modelli di base preinstallati in Unity Catalog. È possibile trovare questi modelli nel catalogo system
nello schema ai
(system.ai
).
Per distribuire un modello fondazionale:
- Passare a
system.ai
in Esplora Catalogo. - Fare clic sul nome del modello da distribuire.
- Nella pagina del modello, fare clic sul pulsante Distribuisci questo modello.
- La pagina Crea endpoint di servizio viene visualizzata. Vedi Crea il tuo endpoint con capacità di throughput assegnata usando l'interfaccia utente.
Nota
Per distribuire un modello Meta Llama da system.ai
in Unity Catalog, è necessario scegliere la versione applicabile Istruzione. Le versioni di base dei modelli Meta Llama non sono supportate per la distribuzione da system.ai
in Unity Catalog. Consultare Limiti di throughput con provisioning.
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 selezionare Ottenere l'accesso e specificare 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 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 su Unity Catalog e creare l'endpoint con velocità effettiva fornita usando l'interfaccia utente o l'API REST.
Consulta Limiti di velocità effettiva con provisioning per i modelli Meta Llama 3.1, 3.2 e 3.3 ottimizzati e la disponibilità della regione.
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 il nome del catalogo, dello schema e del modello
Per distribuire un modello di base ottimizzato, definire il catalogo di Unity Catalog, lo schema e il nome del modello di tua scelta.
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 capacità di throughput fornita supporta anche i modelli di embedding 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 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 che il modello è stato registrato in Unity Catalog, continua su creare il tuo endpoint di servizio modello con larghezza di banda fornita utilizzando l'interfaccia utente.
Crea il tuo endpoint con il throughput previsto usando l'interfaccia utente
Dopo aver registrato il modello in Unity Catalog, creare un endpoint di servizio con throughput allocato seguendo questa procedura:
- Vai all'Interfaccia di Servizio dell'area di lavoro.
- Seleziona Crea endpoint di servizio.
- Nel campo Entity, selezionare il modello dal catalogo Unity. Per i modelli idonei, l'interfaccia utente per l'entità servita mostra la schermata Velocità di trasferimento provisionata.
- Nell'elenco a discesa Fino a è possibile configurare la velocità effettiva massima dei token al secondo per l'endpoint.
- Gli endpoint con throughput configurato si adattano automaticamente, consentendoti di selezionare Modifica per visualizzare il numero minimo di token al secondo a cui l'endpoint può ridursi.
Crea il tuo endpoint di throughput assegnato usando l'API REST
Per distribuire il tuo modello in modalità di throughput previsto usando l'API REST, devi 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 di velocità effettiva con provisioning appropriato per il tuo modello, vedere Ottenere la velocità effettiva di 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. Vedere attività Chat per maggiori dettagli sui parametri.
Impostare la velocità effettiva fornita in 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 preconfigurato per notebook del modello GTE
Servizio di larghezza di banda assegnata per il notebook del modello BGE
Il seguente notebook mostra come scaricare e registrare il modello distillato Llama DeepSeek R1 nel Catalogo Unity, in modo da poterlo distribuire utilizzando un endpoint di throughput fornito dalle API dei modelli fondamentali.
Servizio di velocità di trasmissione per il notebook del modello Llama distillato DeepSeek R1
Limitazioni
- 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. Contatta il tuo team dell'account Databricks per ricevere assistenza nella risoluzione del 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.
- GTE v1.5 (inglese) non genera incorporamenti normalizzati.