Aracılığıyla paylaş


Sağlanan aktarım hızı Temel Model API'leri

Bu makalede, sağlanan aktarım hızına sahip Temel Model API'lerini kullanarak modellerin nasıl dağıtılacağı gösterilmektedir. Databricks, üretim iş yükleri için sağlanan aktarım hızını önerir ve performans garantili temel modeller için iyileştirilmiş çıkarım sağlar.

Desteklenen model mimarilerinin listesi için bkz . Sağlanan aktarım hızı Temel Model API'leri .

Gereksinimler

Bkz . gereksinimler.

hassas temel modelleri dağıtmak için,

  • Modelinizin MLflow 2.11 veya üzeri, OR Databricks Runtime 15.0 ML veya üzeri kullanılarak günlüğe kaydedilmesi gerekir.
  • Databricks, büyük modellerin daha hızlı yüklenmesi ve indirilmesi için Unity Kataloğu'ndaki modellerin kullanılmasını önerir.

Önemli

Bu özellik Genel Önizlemededir.

Databricks, Unity Kataloğu'nda önceden yüklenmiş olan temel modellerin kullanılmasını önerir. Bu modelleri şemadaki ai (system.ai) katalog system altında bulabilirsiniz.

Temel modeli dağıtmak için:

  1. Katalog Gezgini'nde adresine system.ai gidin.
  2. Dağıtılacak modelin adına tıklayın.
  3. Model sayfasında Bu modele hizmet et düğmesine tıklayın.
  4. Sunum uç noktası oluştur sayfası görüntülenir. Bkz . Kullanıcı arabirimini kullanarak sağlanan aktarım hızı uç noktanızı oluşturma.

Databricks Market'ten temel modelleri dağıtma

Alternatif olarak, Temel modelleri Databricks Market'ten Unity Kataloğu'na yükleyebilirsiniz.

Bir model ailesi arayabilir ve model sayfasından Erişim al'ı seçebilir ve modeli Unity Kataloğu'na yüklemek için oturum açma kimlik bilgilerini sağlayabilirsiniz.

Model Unity Kataloğu'na yüklendikten sonra, Sunma kullanıcı arabirimini kullanarak uç noktaya hizmet veren bir model oluşturabilirsiniz.

DBRX modellerini dağıtma

Databricks, iş yükleriniz için DBRX Yönergesi modelinin sunulmasını önerir. Sağlanan aktarım hızını kullanarak DBRX Instruct modeline hizmet vermek için [Önerilen] Unity Kataloğu'ndan temel modelleri dağıtma başlığındaki yönergeleri izleyin.

Bu DBRX modellerini sunarken sağlanan aktarım hızı 16 bine kadar bağlam uzunluğunu destekler.

DBRX modelleri, model yanıtlarında ilgi ve doğruluk sağlamak için aşağıdaki varsayılan sistem istemini kullanır:

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.

ayrıntılı temel modelleri günlüğe kaydetme

Şemadaki system.ai modelleri kullanamıyorsanız veya Databricks Market'ten model yükleyemiyorsanız, Unity Kataloğu'nda günlüğe yazarak ince ayarlı bir temel modeli dağıtabilirsiniz. Aşağıda, bir MLflow modelini Unity Kataloğu'nda günlüğe kaydetmek için kodunuzun nasıl ayarlanacağı gösterilmektedir:

mlflow.set_registry_uri('databricks-uc')
CATALOG = "ml"
SCHEMA = "llm-catalog"
MODEL_NAME = "mpt" # or "bge"
registered_model_name = f"{CATALOG}.{SCHEMA}.{MODEL_NAME}"

MLflow transformers türünü kullanarak modelinizi günlüğe kaydedebilir ve aşağıdaki seçeneklerden uygun model türü arabirimiyle görev bağımsız değişkenini belirtebilirsiniz:

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

Bu bağımsız değişkenler, uç noktaya hizmet veren model için kullanılan API imzasını belirtir ve bu şekilde günlüğe kaydedilen modeller sağlanan aktarım hızı için uygundur.

Paketten günlüğe sentence_transformers kaydedilen modeller, uç nokta türünün tanımlanmasını "llm/v1/embeddings" da destekler.

MLflow 2.12 veya üzeri kullanılarak günlüğe kaydedilen modeller için bağımsız değişken task anahtarıntasklog_modelmetadatadeğerini otomatik olarak ayarlar. task Bağımsız değişken ve metadatatask bağımsız değişken farklı değerlere ayarlanırsa, bir Exception oluşturulur.

Aşağıda, MLflow 2.12 veya üzeri kullanılarak günlüğe kaydedilen bir metin tamamlama dili modelini günlüğe kaydetme örneği verilmiştir:

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
    )

MLflow 2.11 veya üzeri kullanılarak günlüğe kaydedilen modeller için aşağıdaki meta veri değerlerini kullanarak uç nokta arabirimini belirtebilirsiniz:

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

Aşağıda, MLflow 2.11 veya üzeri kullanılarak günlüğe kaydedilen bir metin tamamlama dil modelini günlüğe kaydetme örneği verilmiştir:

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
    )

Sağlanan aktarım hızı hem küçük hem de büyük BGE ekleme modelini de destekler. MLflow 2.11 veya üzeri kullanılarak sağlanan aktarım hızıyla hizmet verilmesi için modelin BAAI/bge-small-en-v1.5 nasıl günlüğe kaydedilebileceğini gösteren bir örnek aşağıda verilmiştir:

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
    )

ayrıntılı bir BGE modelini günlüğe kaydettiğinizde meta veri anahtarını da belirtmeniz model_type gerekir:

metadata={
    "task": "llm/v1/embeddings",
    "model_type": "bge-large"  # Or "bge-small"
}

Kullanıcı arabirimini kullanarak sağlanan aktarım hızı uç noktanızı oluşturma

Günlüğe kaydedilen model Unity Kataloğu'na girdikten sonra, aşağıdaki adımlarla uç noktaya hizmet veren bir sağlanan aktarım hızı oluşturun:

  1. Çalışma alanınızda Sunma kullanıcı arabirimine gidin.
  2. Sunum uç noktası oluştur'u seçin.
  3. Varlık alanında Unity Kataloğu'ndan modelinizi seçin. Uygun modeller için, Sunulan Varlık kullanıcı arabirimi Sağlanan Aktarım Hızı ekranını gösterir.
  4. Yukarı açılan listesinde uç noktanız için saniye başına maksimum belirteç aktarım hızını yapılandırabilirsiniz.
    1. Sağlanan aktarım hızı uç noktaları otomatik olarak ölçeklendirilir, böylece Değiştir'i seçerek uç noktanızın ölçeğini azaltabileceği saniye başına en düşük belirteçleri görüntüleyebilirsiniz.

Sağlanan İşleme Hızı

REST API kullanarak sağlanan aktarım hızı uç noktanızı oluşturma

MODELInizi REST API kullanarak sağlanan aktarım hızı modunda dağıtmak için isteğinizde ve max_provisioned_throughput alanlarını belirtmeniz min_provisioned_throughput gerekir.

Modelinize uygun sağlanan aktarım hızı aralığını belirlemek için bkz . Sağlanan aktarım hızını artımlı olarak alma.

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

Sağlanan aktarım hızını artımlı olarak alma

Sağlanan aktarım hızı, modele göre değişen belirli artışlarla saniye başına belirteç artışlarıyla kullanılabilir. Databricks, ihtiyaçlarınıza uygun aralığı belirlemek için platformdaki model iyileştirme bilgileri API'sini kullanmanızı önerir.

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

Aşağıda API'den örnek bir yanıt verilmiştir:

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

Not defteri örnekleri

Aşağıdaki not defterlerinde sağlanan aktarım hızı Temel Modeli API'si oluşturma örnekleri gösterilmektedir:

Llama2 model not defteri için sağlanan aktarım hızı

Not defterini alma

Mistral model not defteri için sağlanan aktarım hızı

Not defterini alma

BGE model not defteri için sağlanan aktarım hızı

Not defterini alma

Sınırlamalar

  • Model dağıtımı GPU kapasitesi sorunları nedeniyle başarısız olabilir ve bu da uç nokta oluşturma veya güncelleştirme sırasında zaman aşımına neden olabilir. Çözüme yardımcı olması için Databricks hesap ekibinize ulaşın.
  • Temel Modeller API'leri için otomatik ölçeklendirme, CPU modeli sunma işleminden daha yavaştır. Databricks, istek zaman aşımlarını önlemek için aşırı sağlama önerir.

Ek kaynaklar