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ů.
[Doporučeno] Nasazení základních modelů z katalogu Unity
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:
- Přejděte do
system.ai
Průzkumníka katalogu. - Klikněte na název modelu, který chcete nasadit.
- Na stránce modelu klikněte na tlačítko Obsluha tohoto modelu .
- 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 task
metadata
task
hodnotu klíče automaticky. task
Pokud jsou argumenty a metadata
task
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:
- Přejděte do uživatelského rozhraní obsluhy ve vašem pracovním prostoru.
- Vyberte Vytvořit koncový bod obsluhy.
- 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.
- V rozevíracím seznamu Nahoru můžete pro svůj koncový bod nakonfigurovat maximální propustnost tokenů za sekundu.
- 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.
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řízená propustnost obsluhující poznámkový blok modelu Mistral
Zřízená propustnost obsluhující poznámkový blok modelu BGE
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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro