Sdílet prostřednictvím


Rozhraní API základního modelu zřízené propustnosti

Tento článek ukazuje, jak nasadit modely pomocí rozhraní API základního modelu se 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.

Seznam podporovaných architektur modelů najdete v tématu Rozhraní API základního modelu zřízené propustnosti.

Požadavky

Viz požadavky.

Pro nasazení jemně vyladěných základních modelů:

  • Váš model musí být protokolován pomocí MLflow 2.11 nebo vyšší, NEBO Databricks Runtime 15.0 ML nebo vyšší.
  • Databricks doporučuje používat modely v katalogu Unity pro rychlejší nahrávání a stahování velký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 katalogu Unity. Tyto modely najdete v katalogu system ve schématu ai (system.ai).

Nasazení základního modelu:

  1. Přejděte do system.ai Průzkumníka katalogu.
  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

Další možností je nainstalovat základní modely do katalogu Unity z Databricks Marketplace.

Můžete vyhledat řadu modelů a na stránce modelu vybrat Získat přístup a zadat přihlašovací údaje pro instalaci modelu do katalogu Unity.

Po instalaci modelu do katalogu Unity můž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 chcete model DBRX Instruovat pomocí zřízené propustnosti, postupujte podle pokynů v tématu [Doporučeno] Nasazení základních modelů z katalogu Unity.

Při poskytování těchto modelů DBRX podporuje zřízená propustnost délku kontextu 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.

Jemně vyladěné základní modely protokolů

Pokud nemůžete použít modely ve schématu system.ai nebo nainstalovat modely z Webu Databricks Marketplace, můžete nasadit jemně vyladěný základní model tím, že ho zahlásíte do katalogu Unity. Následující příklad ukazuje, jak nastavit kód pro protokolování modelu MLflow do katalogu Unity:

mlflow.set_registry_uri('databricks-uc')
CATALOG = "ml"
SCHEMA = "llm-catalog"
MODEL_NAME = "mpt" # or "bge"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

Model můžete protokolovat pomocí příchutě MLflow transformers a zadat argument úlohy s odpovídajícím rozhraním typu modelu z následujících možností:

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

Tyto argumenty určují podpis rozhraní API používaný pro koncový bod obsluhy modelu a modely zaprotokolované tímto způsobem mají nárok na zřízenou propustnost.

Modely zaprotokolované z sentence_transformers balíčku také podporují definování typu koncového "llm/v1/embeddings" bodu.

U modelů zaprotokolovaných pomocí MLflow 2.12 nebo vyšší nastaví log_model argument taskmetadatatask hodnotu klíče automaticky. task Pokud jsou argumenty a metadatatask argument nastaveny na různé hodnoty, je vyvolánaException.

Následuje příklad protokolování jazykového modelu dokončování textu protokolovaného pomocí MLflow 2.12 nebo vyšší:

model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-instruct",torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-instruct")
with mlflow.start_run():
    components = {
        "model": model,
        "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        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"])},
        task="llm/v1/completions",
        registered_model_name=registered_model_name
    )

Pro modely protokolované pomocí MLflow 2.11 nebo vyšší můžete zadat rozhraní pro koncový bod pomocí následujících hodnot metadat:

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

Následuje příklad protokolování jazykového modelu pro dokončování textu zaprotokolovaný pomocí MLflow 2.11 nebo vyšší:

model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-instruct",torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-instruct")
with mlflow.start_run():
    components = {
        "model": model,
        "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="model",
        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"])},
        task="llm/v1/completions",
        metadata={"task": "llm/v1/completions"},
        registered_model_name=registered_model_name
    )

Zřízená propustnost také podporuje malý i velký model vkládání BGE. Následuje příklad, jak model protokolovat, BAAI/bge-small-en-v1.5 takže ho můžete obsluhovat se zřízenou propustností pomocí MLflow 2.11 nebo vyšší:

model = AutoModel.from_pretrained("BAAI/bge-small-en-v1.5")
tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-small-en-v1.5")
with mlflow.start_run():
    components = {
        "model": model,
        "tokenizer": tokenizer,
    }
    mlflow.transformers.log_model(
        transformers_model=components,
        artifact_path="bge-small-transformers",
        task="llm/v1/embeddings",
        metadata={"task": "llm/v1/embeddings"},  # not needed for MLflow >=2.12.1
        registered_model_name=registered_model_name
    )

Při protokolování jemně vyladěného modelu BGE musíte také zadat model_type klíč metadat:

metadata={
    "task": "llm/v1/embeddings",
    "model_type": "bge-large"  # Or "bge-small"
}

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

Po přihlášení modelu v katalogu Unity vytvořte zřízenou propustnost obsluhující koncový bod pomocí následujícího postupu:

  1. Přejděte do uživatelského rozhraní obsluhy ve vašem pracovním prostoru.
  2. Vyberte Vytvořit koncový bod obsluhy.
  3. V poli Entita vyberte model z katalogu Unity. U způsobilých modelů se v uživatelském rozhraní obsluhované entity zobrazuje obrazovka Zřízená propustnost.
  4. V rozevíracím seznamu Nahoru můžete pro svůj koncový bod nakonfigurovat maximální propustnost tokenů za sekundu.
    1. Zřízené koncové body propustnosti se automaticky škálují, takže můžete vybrat Možnost Upravit a zobrazit minimální tokeny za sekundu, na kterou se koncový bod může vertikálně snížit.

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 pole a max_provisioned_throughput pole.

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

import requests
import json

# Set the name of the MLflow endpoint
endpoint_name = "llama2-13b-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 = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiUrl().get()
API_TOKEN = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().get()

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

Získání zřízené propustnosti v 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:

Zřízená propustnost obsluhující poznámkový blok modelu Llama2

Získat poznámkový blok

Zřízená propustnost obsluhující poznámkový blok modelu Mistral

Získat poznámkový blok

Zřízená propustnost obsluhující poznámkový blok modelu BGE

Získat poznámkový blok

Omezení

  • Nasazení modelu může selhat kvůli problémům s kapacitou GPU, což vede k vypršení časového limitu při vytváření nebo aktualizaci koncového bodu. S řešením vám pomůže váš tým účtu Databricks.
  • Automatické škálování pro rozhraní API základních modelů je pomalejší než obsluha modelu procesoru. Databricks doporučuje nadměrné zřizování, aby nedocházelo k vypršení časových limitů požadavků.

Další materiály