Interfejsy API modeli podstawowych z aprowizowaną produktywnością

W tym artykule pokazano, jak wdrażać modele przy użyciu aprowizowanych przepływności za pomocą interfejsów API modelu foundation. Usługa Databricks zaleca aprowizowaną przepływność dla obciążeń produkcyjnych i zapewnia zoptymalizowane wnioskowanie dla modeli podstawowych z gwarancjami wydajności.

Co to jest aprowizowana przepływność?

Aprowizowana przepływność odnosi się do liczby tokenów wartych żądań przesyłanych do punktu końcowego w tym samym czasie. Aprowizowanie punktów końcowych obsługujących przepływność to dedykowane punkty końcowe skonfigurowane pod względem zakresu tokenów na sekundę, które można wysłać do punktu końcowego.

Aby uzyskać więcej informacji, zapoznaj się z następującymi zasobami:

Zobacz Aprowizowanie interfejsów API modelu przepływności foundation, aby uzyskać listę obsługiwanych architektur modelu dla punktów końcowych aprowizowanej przepływności.

Wymagania

Zobacz wymagania. Aby wdrożyć dostosowane modele podstawowe, zobacz Wdrażanie dostosowanych modeli podstawowych.

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Usługa Databricks zaleca używanie wstępnie zainstalowanych modeli podstawowych w wykazie aparatu Unity. Te modele można znaleźć w katalogu system w schemacie ai (system.ai).

Aby wdrożyć model podstawowy:

  1. Przejdź do system.ai pozycji w Eksploratorze wykazu.
  2. Kliknij nazwę modelu do wdrożenia.
  3. Na stronie modelu kliknij przycisk Obsłużyć ten model .
  4. Zostanie wyświetlona strona Tworzenie obsługującego punkt końcowy . Zobacz Tworzenie punktu końcowego aprowizowanej przepływności przy użyciu interfejsu użytkownika.

Wdrażanie modeli podstawowych z witryny Databricks Marketplace

Alternatywnie możesz zainstalować modele podstawowe w katalogu aparatu Unity z witryny Databricks Marketplace.

Możesz wyszukać rodzinę modeli i na stronie modelu wybrać pozycję Uzyskaj dostęp i podać poświadczenia logowania, aby zainstalować model w katalogu aparatu Unity.

Po zainstalowaniu modelu w katalogu aparatu Unity można utworzyć punkt końcowy obsługujący model przy użyciu interfejsu użytkownika obsługującego usługę.

Wdrażanie modeli DBRX

Usługa Databricks zaleca obsługę modelu DBRX Poinstruowanie dla obciążeń. Aby obsłużyć model DBRX Poinstruuj model przy użyciu aprowizowanej przepływności, postępuj zgodnie ze wskazówkami w temacie [Zalecane] Wdrażanie modeli podstawowych z katalogu aparatu Unity.

W przypadku obsługi tych modeli DBRX aprowizowana przepływność obsługuje długość kontekstu do 16 tys.

Modele DBRX używają następującego domyślnego monitu systemowego, aby zapewnić istotność i dokładność odpowiedzi 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.

Wdrażanie dostosowanych modeli podstawowych

Jeśli nie możesz używać modeli w schemacie system.ai ani instalować modeli z witryny Databricks Marketplace, możesz wdrożyć dostosowany model podstawowy, rejestrując go w wykazie aparatu Unity. W tej sekcji i poniższych sekcjach pokazano, jak skonfigurować kod w celu rejestrowania modelu MLflow w katalogu aparatu Unity i tworzenia punktu końcowego aprowizowanej przepływności przy użyciu interfejsu użytkownika lub interfejsu API REST.

Wymagania

  • Wdrażanie dostosowanych modeli podstawowych jest obsługiwane tylko przez platformę MLflow 2.11 lub nowszą. Środowisko Databricks Runtime 15.0 ML i nowsze wersje wstępne instaluje zgodną wersję platformy MLflow.
  • W przypadku osadzania punktów końcowych model musi być małą lub dużą architekturą modelu osadzania BGE.
  • Usługa Databricks zaleca używanie modeli w wykazie aparatu Unity w celu szybszego przekazywania i pobierania dużych modeli.

Definiowanie nazwy wykazu, schematu i modelu

Aby wdrożyć dostosowany model podstawowy, zdefiniuj docelowy katalog aparatu Unity, schemat i wybraną nazwę modelu.

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

Rejestrowanie modelu

Aby włączyć aprowizowaną przepływność dla punktu końcowego modelu, należy zarejestrować model przy użyciu smaku platformy MLflow transformers i określić task argument z odpowiednim interfejsem typu modelu z następujących opcji:

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

Te argumenty określają sygnaturę interfejsu API używaną dla punktu końcowego obsługującego model. Aby uzyskać więcej informacji na temat tych zadań i odpowiednich schematów wejściowych/wyjściowych, zapoznaj się z dokumentacją platformy MLflow.

Poniżej przedstawiono przykład rejestrowania modelu języka uzupełniania tekstu zarejestrowanego przy użyciu biblioteki 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
    )

Uwaga

Jeśli używasz biblioteki MLflow wcześniejszej niż 2.12, musisz określić zadanie w metadata parametrze tej samej mlflow.transformer.log_model() funkcji.

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

Aprowizowana przepływność obsługuje również podstawowe i duże modele osadzania GTE. Poniżej przedstawiono przykład rejestrowania modelu Alibaba-NLP/gte-large-en-v1.5 w celu zapewnienia jej obsługi z aprowizowaną przepływnością:

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 zalogowaniu modelu w katalogu aparatu Unity przejdź do sekcji Tworzenie punktu końcowego aprowizowanej przepływności przy użyciu interfejsu użytkownika, aby utworzyć model obsługujący punkt końcowy z aprowizowaną przepływnością.

Tworzenie punktu końcowego aprowizowanej przepływności przy użyciu interfejsu użytkownika

Po zarejestrowaniu modelu w katalogu aparatu Unity utwórz aprowizowany punkt końcowy obsługujący przepływność, wykonując następujące kroki:

  1. Przejdź do interfejsu użytkownika obsługującego w obszarze roboczym.
  2. Wybierz pozycję Utwórz punkt końcowy obsługujący.
  3. W polu Jednostka wybierz model z katalogu aparatu Unity. W przypadku kwalifikujących się modeli interfejs użytkownika obsługiwanej jednostki zawiera ekran Aprowizowana przepływność .
  4. Na liście rozwijanej Maksymalnie do możesz skonfigurować maksymalną przepływność tokenów na sekundę dla punktu końcowego.
    1. Aprowizowanie punktów końcowych przepływności jest automatycznie skalowane, dzięki czemu można wybrać pozycję Modyfikuj , aby wyświetlić minimalne tokeny na sekundę, do których punkt końcowy może być skalowany w dół.

Aprowizowana przepływność

Tworzenie punktu końcowego aprowizowanej przepływności przy użyciu interfejsu API REST

Aby wdrożyć model w trybie aprowizowanej przepływności przy użyciu interfejsu API REST, należy określić min_provisioned_throughput pola i max_provisioned_throughput w żądaniu. Jeśli wolisz język Python, możesz również utworzyć punkt końcowy przy użyciu zestawu MLflow Deployment SDK.

Aby zidentyfikować odpowiedni zakres aprowizowanej przepływności dla modelu, zobacz Uzyskiwanie aprowizowanej przepływności w przyrostach.

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

Prawdopodobieństwo rejestrowania zadań ukończenia czatu

W przypadku zadań ukończenia czatu można użyć parametru logprobs w celu zapewnienia prawdopodobieństwa dziennika tokenu, który jest próbkowany w ramach procesu generowania modelu języka dużego. Można użyć w logprobs różnych scenariuszach, w tym klasyfikacji, ocenie niepewności modelu i uruchomieniu metryk oceny. Aby uzyskać szczegółowe informacje o parametrach, zobacz Zadanie czatu.

Uzyskiwanie aprowizowanej przepływności w przyrostach

Aprowizowana przepływność jest dostępna w przyrostach tokenów na sekundę z określonymi przyrostami różniącymi się w zależności od modelu. Aby zidentyfikować odpowiedni zakres dla Twoich potrzeb, usługa Databricks zaleca korzystanie z interfejsu API informacji o optymalizacji modelu w obrębie platformy.

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

Poniżej przedstawiono przykładową odpowiedź z interfejsu API:

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

Przykłady notesów

W poniższych notesach przedstawiono przykłady tworzenia aprowizowanego interfejsu API modelu modelu foundation przepływności:

Aprowizowanie przepływności dla notesu modelu GTE

Pobierz notes

Aprowizowanie przepływności dla notesu modelu Llama2

Pobierz notes

Aprowizowanie przepływności dla notesu modelu Mistral

Pobierz notes

Aprowizowana przepływność obsługująca notes modelu BGE

Pobierz notes

Ograniczenia

  • Wdrażanie modelu może zakończyć się niepowodzeniem z powodu problemów z pojemnością procesora GPU, co powoduje przekroczenie limitu czasu podczas tworzenia lub aktualizowania punktu końcowego. Skontaktuj się z zespołem ds. kont usługi Databricks, aby rozwiązać ten problem.
  • Skalowanie automatyczne dla interfejsów API modeli podstawowych jest wolniejsze niż obsługa modelu procesora CPU. Usługa Databricks zaleca nadmierną aprowizację, aby uniknąć przekroczenia limitu czasu żądania.