Udostępnij za pośrednictwem


Tworzenie generowania modelu sztucznej inteligencji obsługującego punkty końcowe

Z tego artykułu dowiesz się, jak utworzyć model obsługujący punkty końcowe, które wdrażają i obsługują modele generowania sztucznej inteligencji.

Usługa Mosaic AI Model Serving obsługuje następujące modele:

  • Najnowocześniejsze modele open foundation udostępniane przez interfejsy API modelu foundation. Te modele są nadzorowanymi architekturami modeli podstawowych, które obsługują zoptymalizowane wnioskowanie. Modele podstawowe, takie jak Llama-2-70B-chat, BGE-Large i Mistral-7B, są dostępne do natychmiastowego użycia z cenami płatności za token . Obciążenia produkcyjne, korzystając z podstawowych lub dostrojonych modeli, można wdrażać z gwarancjami wydajności przy użyciu aprowizowanej przepływności.
  • Modele zewnętrzne. Są to modele generowania, które są hostowane poza programem Databricks. Punkty końcowe obsługujące modele zewnętrzne mogą być centralnie zarządzane, a klienci mogą ustanowić limity szybkości i kontrolę dostępu dla nich. Przykłady obejmują generowanie modeli sztucznej inteligencji, takich jak GPT-4 openAI, Claude Anthropic i inne.

Obsługa modelu udostępnia następujące opcje tworzenia punktu końcowego obsługującego model:

  • Interfejs użytkownika obsługującego
  • Interfejs API REST
  • Zestaw SDK wdrożeń MLflow

Aby utworzyć punkty końcowe obsługujące tradycyjne modele uczenia maszynowego lub języka Python, zobacz Tworzenie niestandardowych punktów końcowych obsługujących model.

Wymagania

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Tworzenie podstawowego modelu obsługującego punkt końcowy

Możesz utworzyć punkt końcowy, który obsługuje dostosowane warianty modeli podstawowych udostępnianych przy użyciu aprowizowanych przepływności interfejsów API modelu foundation. Zobacz Tworzenie punktu końcowego aprowizowanej przepływności przy użyciu interfejsu API REST.

W przypadku modeli podstawowych, które są udostępniane przy użyciu interfejsów API modelu foundation pay-per-token, usługa Databricks automatycznie udostępnia określone punkty końcowe w celu uzyskania dostępu do obsługiwanych modeli w obszarze roboczym usługi Databricks. Aby uzyskać do nich dostęp, wybierz kartę Obsługa na lewym pasku bocznym obszaru roboczego. Interfejsy API modelu foundation znajdują się w górnej części widoku listy Punkty końcowe.

Aby wykonywać zapytania dotyczące tych punktów końcowych, zobacz Tworzenie zapytań dotyczących modeli podstawowych i modeli zewnętrznych.

Tworzenie zewnętrznego punktu końcowego obsługującego model

W poniższym artykule opisano sposób tworzenia punktu końcowego obsługującego generowanie modelu sztucznej inteligencji udostępnionego przy użyciu modeli zewnętrznych usługi Databricks.

Obsługa interfejsu użytkownika

  1. W polu Nazwa podaj nazwę punktu końcowego.
  2. W sekcji Obsługiwane jednostki
    1. Kliknij pole Jednostka, aby otworzyć formularz Wybierz obsługiwaną jednostkę.
    2. Wybierz pozycję Model zewnętrzny.
    3. Wybierz dostawcę modelu, którego chcesz użyć.
    4. Kliknij pozycję Potwierdź
    5. Podaj nazwę modelu zewnętrznego, którego chcesz użyć. Formularz jest dynamicznie aktualizowany na podstawie wybranego wyboru. Zobacz dostępne modele zewnętrzne.
    6. Wybierz typ zadania. Dostępne zadania to czat, ukończenie i osadzanie.
    7. Podaj szczegóły konfiguracji na potrzeby uzyskiwania dostępu do wybranego dostawcy modelu. Zazwyczaj jest to wpis tajny, który odwołuje się do osobistego tokenu dostępu, który ma być używany przez punkt końcowy do uzyskiwania dostępu do tego modelu.
  3. Kliknij pozycję Utwórz. Zostanie wyświetlona strona Obsługa punktów końcowych z stanem obsługującym punkt końcowy wyświetlany jako Nie wszystko gotowe.

Tworzenie punktu końcowego obsługującego model

Interfejs API REST

Ważne

Parametry interfejsu API REST do tworzenia punktów końcowych obsługujących modele zewnętrzne są dostępne w publicznej wersji zapoznawczej.

Poniższy przykład tworzy punkt końcowy, który obsługuje pierwszą wersję modelu dostarczonego text-embedding-ada-002 przez usługę OpenAI.

Zobacz POST /api/2.0/serving-endpoints , aby uzyskać parametry konfiguracji punktu końcowego.

{
  "name": "openai_endpoint",
  "config":{
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model":{
          "name": "text-embedding-ada-002",
          "provider": "openai",
          "task": "llm/v1/embeddings",
          "openai_config":{
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        }
      }
    ]
  },
  "rate_limits": [
    {
      "calls": 100,
      "key": "user",
      "renewal_period": "minute"
    }
  ],
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ]
}

Poniżej znajduje się przykładowa odpowiedź.

{
  "name": "openai_endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1699617587000,
  "last_updated_timestamp": 1699617587000,
  "state": {
    "ready": "READY"
  },
  "config": {
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model": {
          "provider": "openai",
          "name": "text-embedding-ada-002",
          "task": "llm/v1/embeddings",
          "openai_config": {
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        },
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1699617587000
      }
  ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "openai_embeddings",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ],
  "id": "69962db6b9db47c4a8a222d2ac79d7f8",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

Zestaw SDK wdrożeń MLflow

Poniżej przedstawiono sposób tworzenia punktu końcowego na potrzeby osadzania za pomocą interfejsu OpenAI text-embedding-ada-002.

W przypadku punktów końcowych modelu zewnętrznego należy podać klucze interfejsu API dla dostawcy modelu, którego chcesz użyć. Zobacz POST /api/2.0/serving-endpoints w interfejsie API REST, aby uzyskać szczegółowe informacje o schemacie żądania i odpowiedzi. Aby zapoznać się z przewodnikiem krok po kroku, zobacz Samouczek: tworzenie zewnętrznych punktów końcowych modelu w celu wykonywania zapytań dotyczących modeli OpenAI.

Punkty końcowe można również tworzyć na potrzeby uzupełniania i zadań czatu, jak określono w task polu w external_model sekcji konfiguracji. Aby zapoznać się z obsługiwanymi modelami i dostawcami dla każdego zadania, zobacz Modele zewnętrzne w usłudze Mosaic AI Model Serving .


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="chat",
    config={
        "served_entities": [
            {
                "name": "completions",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

Aktualizowanie punktów końcowych obsługujących model

Po włączeniu punktu końcowego modelu można ustawić konfigurację obliczeniową zgodnie z potrzebami. Ta konfiguracja jest szczególnie przydatna, jeśli potrzebujesz dodatkowych zasobów dla modelu. Rozmiar obciążenia i konfiguracja obliczeniowa odgrywają kluczową rolę w zasobach przydzielonych do obsługi modelu.

Dopóki nowa konfiguracja nie będzie gotowa, stara konfiguracja będzie obsługiwać ruch przewidywania. Chociaż trwa aktualizacja, nie można wprowadzić innej aktualizacji. W interfejsie użytkownika obsługującego możesz anulować aktualizację konfiguracji w toku, wybierając pozycję Anuluj aktualizację w prawym górnym rogu strony szczegółów punktu końcowego. Ta funkcja jest dostępna tylko w interfejsie użytkownika obsługującego.

Jeśli element external_model znajduje się w konfiguracji punktu końcowego, lista obsługiwanych jednostek może mieć tylko jeden obiekt served_entity. Nie można zaktualizować istniejących punktów końcowych z elementem external_model , aby nie mieć już elementu external_model. Jeśli punkt końcowy jest tworzony bez elementu external_model, nie można go zaktualizować, aby dodać element external_model.

Interfejs API REST

Aby zaktualizować model podstawowy lub punkt końcowy modelu zewnętrznego, zobacz dokumentację konfiguracji aktualizacji interfejsu API REST, aby uzyskać szczegółowe informacje o schemacie żądania i odpowiedzi.

{
  "name": "openai_endpoint",
  "served_entities":[
    {
      "name": "openai_chat",
      "external_model":{
        "name": "gpt-4",
        "provider": "openai",
        "task": "llm/v1/chat",
        "openai_config":{
          "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
        }
      }
    }
  ]
}

Zestaw SDK wdrożeń MLflow

Aby zaktualizować model podstawowy lub punkt końcowy modelu zewnętrznego, zobacz dokumentację konfiguracji aktualizacji interfejsu API REST, aby uzyskać szczegółowe informacje o schemacie żądania i odpowiedzi.

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.update_endpoint(
    endpoint="chat",
    config={
        "served_entities": [
            {
                "name": "chats",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chats",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
  }

rate_limits = client.update_endpoint(
    endpoint="chat",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 10,
            }
        ],
    },
)
assert rate_limits == {
    "rate_limits": [
        {
            "key": "user",
            "renewal_period": "minute",
            "calls": 10,
        }
    ],
}

Dodatkowe zasoby