Sdílet prostřednictvím


Rozhraní API pro základní modely s přidělenou propustností

Tento článek ukazuje, jak nasadit modely pomocí rozhraní API modelu Foundation zřízenou propustnost. Databricks doporučuje zřízenou propustnost pro produkční úlohy a poskytuje optimalizované odvozování základních modelů se zárukami výkonu.

Co je zřízená propustnost?

Zřízená propustnost odkazuje na počet požadavků, které můžete odeslat do koncového bodu najednou. Koncové body s vyhrazenou propustností jsou dedikované koncové body nakonfigurované v rámci rozsahu tokenů za sekundu, které můžete odeslat na koncový bod.

Další informace najdete v následujících zdrojích informací:

Viz rozhraní API základního modelu zřízené propustnostilist podporovaných architektur modelu pro zřízené koncové body propustnosti.

Požadavky

Viz požadavky . Informace o nasazení jemně vyladěných základních modelů najdete v tématu Nasazení jemně vyladěných základních modelů.

Důležitý

Tato funkce je ve verzi Public Preview.

Databricks doporučuje používat základní modely, které jsou předinstalované v Unity Catalog. Tyto modely najdete pod catalogsystem v schemaai (system.ai).

Nasazení základního modelu:

  1. V Průzkumníku Catalog přejděte na system.ai.
  2. Klikněte na název modelu, který chcete nasadit.
  3. Na stránce modelu klikněte na tlačítko Obsluha tohoto modelu.
  4. Zobrazí se stránka Vytvořit obslužný koncový bod. Viz Vytvoření zřízeného koncového bodu propustnosti pomocíuživatelského rozhraní .

Nasazení základních modelů z Marketplace Databricks

Alternativně můžete nainstalovat základní modely do Unity Catalog z Databricks Marketplace.

Můžete vyhledat řadu modelů a na stránce modelu, můžete selectGet získat přístup k a poskytnout přihlašovací credentials pro instalaci modelu do Unity Catalog.

Po instalaci modelu do Unity Catalogmůžete vytvořit model obsluhující koncový bod pomocí uživatelského rozhraní obsluhy.

Nasazení modelů DBRX

Databricks doporučuje obsluhovat model DBRX Instruct pro vaše úlohy. Pokud potřebujete nasadit model DBRX Instruct pomocí zřízené propustnosti, postupujte podle pokynů v [Doporučeno] Nasazení základních modelů z Unity Catalog.

Při poskytování těchto modelů DBRX podporuje přednastavená propustnost délku kontextového okna až 16 tisíc.

Modely DBRX používají následující výchozí výzvu k zajištění relevance a přesnosti v odpovědích modelu:

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.

Nasazení jemně vyladěných základních modelů

Pokud nemůžete použít modely v system.aischema nebo nainstalovat modely z Webu Databricks Marketplace, můžete nasadit jemně vyladěný základní model tak, že ho přihlásíte do Unity Catalog. Tato část a následující části ukazují, jak set upravit kód pro protokolování modelu MLflow do Unity Catalog a jak vytvořit koncový bod se zajištěnou propustností pomocí uživatelského rozhraní nebo rozhraní REST API.

Viz Omezení zřízené propustnosti podporované modely Meta Llama 3.1, 3.2 a 3.3 a jejich dostupnost v jednotlivých oblastech.

Požadavky

  • Nasazení jemně vyladěných základních modelů podporuje pouze MLflow 2.11 nebo novější. Databricks Runtime 15.0 ML a vyšší předinstaluje kompatibilní verzi MLflow.
  • Databricks doporučuje používat modely v Unity Catalog pro rychlejší nahrávání a stahování velkých modelů.

Definování catalog, schema a názvu modelu

Pokud chcete nasadit jemně vyladěný základní model, definujte cílovou platformu Unity Catalogcatalog, schemaa název modelu podle vašeho výběru.

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

Zaznamenejte svůj model

Pokud chcete povolit zřízenou propustnost koncového bodu modelu, musíte model protokolovat pomocí příchutě transformers MLflow a zadat argument task s odpovídajícím rozhraním typu modelu z následujících možností:

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

Tyto argumenty určují podpis rozhraní API použitý pro koncový bod obsluhy modelu. Další podrobnosti o těchto úlohách a odpovídajících schématech vstupu a výstupu najdete v dokumentaci k MLflow.

Následuje příklad protokolování jazykového modelu pro dokončování textu zaprotokolovaný pomocí 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
    )

Poznámka

Pokud používáte MLflow starší než 2.12, musíte místo toho zadat úlohu v rámci metadata parametru stejné funkce mlflow.transformer.log_model().

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

Zřízená propustnost také podporuje základní i velké vkládací modely GTE. Následuje příklad protokolování modelu Alibaba-NLP/gte-large-en-v1.5, aby se mohl obsluhovat se zřízenou propustností:

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"
        }
    )

Po přihlášení modelu v Unity Catalogpokračujte Vytvoření zřízeného koncového bodu propustnosti pomocí uživatelského rozhraní k vytvoření modelu obsluhujícího koncový bod se zřízenou propustností.

Vytvoření zřízeného koncového bodu propustnosti pomocí uživatelského rozhraní

Po zaznamenání modelu v Unity Catalogvytvořte obsluhující koncový bod s předem určenou propustností pomocí následujícího postupu:

  1. Přejděte do uživatelského rozhraní obsluhy ve vašem pracovním prostoru.
  2. Select Vytvořit servisní koncový bod.
  3. V poli Entityselect model z Unity Catalog. U způsobilých modelů uživatelské rozhraní obsluhované entity zobrazuje obrazovku Zřízená propustnost.
  4. V rozevíracím seznamu můžete pro koncový bod nakonfigurovat maximální propustnost tokenů za sekundu.
    1. Zřízené koncové body propustnosti se automaticky škálují, takže můžete selectupravit a zjistit minimální počet tokenů za sekundu, na který se váš koncový bod může zredukovat.

zřízená propustnost

Vytvoření zřízeného koncového bodu propustnosti pomocí rozhraní REST API

Pokud chcete model nasadit v režimu zřízené propustnosti pomocí rozhraní REST API, musíte v požadavku zadat min_provisioned_throughput a max_provisioned_throughput pole. Pokud dáváte přednost Pythonu, můžete také vytvořit koncový bod pomocí sady SDK pro nasazení MLflow.

Informace o vhodném rozsahu zřízené propustnosti pro váš model najdete v tématu Get zřízená propustnost v přírůstcích.

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))

Logaritmická pravděpodobnost pro úkoly dokončování chatu

U úloh dokončení chatu můžete pomocí parametru logprobs poskytnout log pravděpodobnost výběru tokenu během procesu generování velkého jazykového modelu. logprobs můžete použít pro různé scénáře, včetně klasifikace, posouzení nejistoty modelu a spouštění metrik vyhodnocení. Podrobnosti o parametrech najdete v úkolu chatu .

Get nárokovaná propustnost po přírůstcích

Zřízená propustnost je dostupná v přírůstcích tokenů za sekundu s konkrétními přírůstky, které se liší podle modelu. K identifikaci vhodného rozsahu pro vaše potřeby doporučuje Databricks používat rozhraní API pro optimalizaci modelů v rámci platformy.

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

Následuje příklad odpovědi z rozhraní API:

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

Příklady poznámkových bloků

Následující poznámkové bloky ukazují příklady vytvoření rozhraní API základního modelu zřízené propustnosti:

Nastavená propustnost podporující poznámkový blok modelu GTE

Get poznámkový blok

Předem nakonfigurovaná propustnost pro poznámkový blok modelu BGE

poznámkového bloku

Zajištěná propustnost pro notebook modelu Mistral.

Get poznámkového bloku

Omezení

  • Nasazení modelu může selhat kvůli nedostatku kapacity GPU, což vede k překročení časového limitu při nastavování koncového bodu nebo update. Obraťte se na svůj tým podpory Databricks, aby vám pomohl s řešením.

  • Automatické škálování pro API základových modelů je pomalejší než obsluha modelů na CPU. Databricks doporučuje nadměrné nastavení kapacity, aby se předešlo překročení časových limitů.

  • Podporují se pouze architektury modelu GTE v1.5 (angličtina) a BGE v1.5 (angličtina).

  • GTE v1.5 (angličtina) nepoužívá generate normalizované vektory.