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 zřízené propustnosti. 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. Zřízené koncové body obsluhy propustnosti jsou vyhrazené koncové body nakonfigurované z hlediska rozsahu tokenů za sekundu, které můžete odeslat do koncového bodu.

Další informace najdete v následujících materiálech:

Seznampodporovanýchch rozhraní API modelu pro základní zřízené propustnosti najdete v tématu Rozhraní API pro základní modely zřízené propustnosti.

Požadavky

Viz požadavky. 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 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.

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

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. Tato část a následující části ukazují, jak nastavit kód pro protokolování modelu MLflow do katalogu Unity a vytvoření zřízeného koncového bodu propustnosti pomocí uživatelského rozhraní nebo rozhraní REST API.

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.
  • Pro vkládání koncových bodů musí být model buď malou, nebo velkou architekturou modelu pro vkládání BGE.
  • Databricks doporučuje používat modely v katalogu Unity pro rychlejší nahrávání a stahování velkých modelů.

Definování katalogu, schématu a názvu modelu

Pokud chcete nasadit jemně vyladěný základní model, definujte cílový katalog katalogu Unity, schéma a 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}"

Protokolování modelu

Pokud chcete povolit zřízenou propustnost koncového bodu modelu, musíte model protokolovat pomocí příchutě MLflow transformers a zadat task argument 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 úkol v rámci metadata parametru stejné mlflow.transformer.log_model() funkce.

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

Zřízená propustnost podporuje také základní i velké modely vkládání GTE. Tady je příklad, jak model protokolovat 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 do katalogu Unity pokračujte vytvořením zřízeného koncového bodu propustnosti pomocí uživatelského rozhraní a vytvořte model obsluhující koncový bod se zřízenou propustností.

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. 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 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 = "<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))

Protokolování pravděpodobnosti pro úkoly dokončení chatu

U úloh dokončení chatu logprobs můžete pomocí parametru poskytnout pravděpodobnost protokolu tokenu, který se vzorkuje jako součást procesu generování rozsáhlého jazykového modelu. Můžete použít logprobs pro různé scénáře, včetně klasifikace, posouzení nejistoty modelu a spouštění metrik vyhodnocení. Podrobnosti o parametrech najdete v části Úloha chatu.

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 GTE

Získat poznámkový blok

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ů.