Optimalizált nagy nyelvi modell (LLM) szolgáltatás
Fontos
Ez a funkció a nyilvános előzetes verzióban érhető el.
Fontos
Az útmutatóban szereplő kód példák elavult API-kat használnak. A Databricks a kiosztott átviteli sebesség használatát javasolja az LLM-k optimalizált következtetéséhez. Lásd: A végpontokat kiszolgáló, optimalizált LLM migrálása a kiosztott átviteli sebességre.
Ez a cikk bemutatja, hogyan engedélyezheti a nagyméretű nyelvi modellek (LLM-ek) optimalizálását a Mozaik AI-modell-szolgáltatásban.
Az optimalizált LLM-szolgáltatás a hagyományos kiszolgálási módszerekhez képest 3-5-ször jobb átviteli sebességet és késést biztosít. Az alábbi táblázat összefoglalja a támogatott LLM-családokat és azok változatait.
A Databricks azt javasolja, hogy telepítsen alapmodelleket a Databricks Marketplace használatával. Megkeresheti a modellcsaládot, és a modelloldalon válassza a Hozzáférés kérése lehetőséget, és adja meg a bejelentkezési hitelesítő adatokat a modell Unity-katalógusba való telepítéséhez.
Modellcsalád | Telepítés a Marketplace-ről |
---|---|
Láma 2 | Láma 2 modellek |
TCT | |
Misztrál | Mistral modellek |
Követelmények
Az optimalizált LLM-szolgáltatás a GPU-üzemelő példányok nyilvános előzetes verziójának részeként támogatott.
A modellt az MLflow 2.4-es vagy újabb verziójával vagy a Databricks Runtime 13.2 ML-es vagy újabb verziójával kell naplózni.
A modellek üzembe helyezésekor elengedhetetlen, hogy a modell paramétermérete és a megfelelő számítási méret egyezzen. Az 50 milliárd vagy több paraméterrel rendelkező modellek esetében forduljon az Azure Databricks-fiók csapatához a szükséges GPU-k eléréséhez.
Modellparaméter mérete Javasolt számítási méret Számítási feladat típusa 7 milliárd 1xA100 GPU_LARGE
13 milliárd 1xA100 GPU_LARGE
30-34 milliárd 1xA100 GPU_LARGE
70 milliárd 2xA100 GPU_LARGE_2
Nagy nyelvi modell naplózása
Először naplózza a modellt az MLflow-ízzel transformers
, és adja meg a feladatmezőt az MLflow metaadatai között a következővel metadata = {"task": "llm/v1/completions"}
: . Ez a végpontot kiszolgáló modellhez használt API-aláírást adja meg.
Az optimalizált LLM-szolgáltatás kompatibilis az Azure Databricks AI Gateway által támogatott útvonaltípusokkal; jelenleg. llm/v1/completions
Ha olyan modellcsaládot vagy feladattípust szeretne kiszolgálni, amely nem támogatott, forduljon az Azure Databricks-fiók csapatához.
model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-instruct",torch_dtype=torch.bfloat16, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-instruct")
with mlflow.start_run():
components = {
"model": model,
"tokenizer": tokenizer,
}
mlflow.transformers.log_model(
artifact_path="model",
transformers_model=components,
input_example=["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"],
metadata={"task": "llm/v1/completions"},
registered_model_name='mpt'
)
A modell naplózása után regisztrálhatja a modelleket a Unity Katalógusban a következőkkel, ahol lecserélheti CATALOG.SCHEMA.MODEL_NAME
a modell háromszintű nevét.
mlflow.set_registry_uri("databricks-uc")
registered_model_name=CATALOG.SCHEMA.MODEL_NAME
A végpontot kiszolgáló modell létrehozása
Ezután hozza létre a végpontot kiszolgáló modellt. Ha a modellt optimalizált LLM-szolgáltatás támogatja, az Azure Databricks automatikusan létrehoz egy optimalizált modell-kiszolgáló végpontot, amikor megpróbálja kiszolgálni.
import requests
import json
# Set the name of the MLflow endpoint
endpoint_name = "llama2-3b-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
# Specify the type of compute (CPU, GPU_SMALL, GPU_LARGE, etc.)
workload_type = "GPU_LARGE"
# Specify the scale-out size of compute (Small, Medium, Large, etc.)
workload_size = "Small"
# Specify Scale to Zero (only supported for CPU endpoints)
scale_to_zero = False
# 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()
# send the POST request to create the serving endpoint
data = {
"name": endpoint_name,
"config": {
"served_models": [
{
"model_name": model_name,
"model_version": model_version,
"workload_size": workload_size,
"scale_to_zero_enabled": scale_to_zero,
"workload_type": workload_type,
}
]
},
}
headers = {"Context-Type": "text/json", "Authorization": f"Bearer {API_TOKEN}"}
response = requests.post(
url=f"{API_ROOT}/api/2.0/serving-endpoints", json=data, headers=headers
)
print(json.dumps(response.json(), indent=4))
Bemeneti és kimeneti séma formátuma
Az optimalizált LLM-kiszolgáló végpont olyan bemeneti és kimeneti sémákkal rendelkezik, amelyeket az Azure Databricks vezérel. Négy különböző formátum támogatott.
dataframe_split
JSON-szerializált Pandas Dataframe asplit
tájolásban.{ "dataframe_split":{ "columns":["prompt"], "index":[0], "data":[["Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instructions:\nWhat is Apache Spark?\n\n### Response:\n"]] }, "params": { "temperature": 0.5, "max_tokens": 100, "stop": ["word1","word2"], "candidate_count": 1 } }
dataframe_records
JSON-szerializált Pandas Dataframe arecords
tájolásban.{ "dataframe_records": [{"prompt": "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instructions:\nWhat is Apache Spark?\n\n### Response:\n"}], "params": { "temperature": 0.5, "max_tokens": 100, "stop": ["word1","word2"], "candidate_count": 1 } }
példányok
{ "instances": [ { "prompt": "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instructions:\nWhat is Apache Spark?\n\n### Response:\n" } ], "params": { "temperature": 0.5, "max_tokens": 100, "stop": ["word1","word2"], "candidate_count": 1 } }
Bemenetek
{ "inputs": { "prompt": "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instructions:\nWhat is Apache Spark?\n\n### Response:\n" }, "params": { "temperature": 0.5, "max_tokens": 100, "stop": ["word1","word2"], "candidate_count": 1 } }
A végpont lekérdezése
Miután a végpont elkészült, lekérdezheti egy API-kéréssel. A modell méretétől és összetettségétől függően a végpont előkészítése akár 30 percet is igénybe vehet.
data = {
"inputs": {
"prompt": [
"Hello, I'm a language model,"
]
},
"params": {
"max_tokens": 100,
"temperature": 0.0
}
}
headers = {"Context-Type": "text/json", "Authorization": f"Bearer {API_TOKEN}"}
response = requests.post(
url=f"{API_ROOT}/serving-endpoints/{endpoint_name}/invocations", json=data, headers=headers
)
print(json.dumps(response.json()))
Korlátozások
- A GPU-n kiszolgált modellekre vonatkozó megnövekedett telepítési követelmények miatt a GPU-kiszolgáló tárolólemezképének létrehozása hosszabb időt vesz igénybe, mint a cpu-kiszolgáló rendszerképének létrehozása.
- A modell mérete a képlétrehozásra is hatással van. A 30 milliárd paramétert vagy annál több paramétert tartalmazó modellek létrehozása például legalább egy órát igénybe vehet.
- A Databricks ugyanazt a tárolót használja újra a modell ugyanazon verziójának következő üzembe helyezésekor, így a későbbi üzembe helyezés kevesebb időt vesz igénybe.
- A GPU-kiszolgáló automatikus skálázása hosszabb időt vesz igénybe, mint a CPU-kiszolgálás esetében, mivel a GPU-számításra szolgáló modellek beállítási ideje megnő. A Databricks a kérések időtúllépésének elkerülése érdekében túlkiépítést javasol.