Udostępnij za pośrednictwem


Interfejsy API modeli podstawowych z aprowizowaną produktywnością

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

Aby uzyskać listę obsługiwanych architektur modelu modelu, zobacz Interfejsy API modelu aprowizowania 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/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",
        # 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ż małe i duże modele osadzania BGE. Poniżej przedstawiono przykład rejestrowania modelu BAAI/bge-small-en-v1.5 w celu zapewnienia jej obsługi z aprowizowaną przepływnością:

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="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": "bge-large"  # Or "bge-small"
        }
    )

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 w interfejsie użytkownika obsługiwanej jednostki jest wyświetlany 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.

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

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

Dodatkowe zasoby