다음을 통해 공유


엔드포인트를 제공하는 기본 모델 만들기

이 문서에서는 기본 모델을 제공하는 엔드포인트를 제공하는 모델을 만드는 방법을 알아봅니다.

Databricks Model Serving 는 다음과 같은 기본 모델을 지원합니다.

  • 파운데이션 모델 API에서 사용할 수 있는 최첨단 오픈 모델 이러한 모델은 최적화된 유추를 지원하는 큐레이팅된 기본 모델 아키텍처입니다. Llama-2-70B-chat, BGE-Large 및 Mistral-7B와 같은 기본 모델은 토큰당 종량제 가격 책정에 즉시 사용할 수 있습니다. 기본 또는 미세 조정된 모델을 사용하는 프로덕션 워크로드는 프로비전된 처리량을 사용하여 성능 보장을 통해 배포할 수 있습니다.
  • 외부 모델. Databricks 외부에서 호스트되는 모델입니다. 외부 모델을 제공하는 엔드포인트는 중앙에서 제어할 수 있으며 고객은 속도 제한 및 액세스 제어를 설정할 수 있습니다. 예를 들어 OpenAI의 GPT-4, Anthropic's Claude 등의 기본 모델이 있습니다.

모델 제공은 엔드포인트 만들기를 제공하는 모델에 대해 다음과 같은 옵션을 제공합니다.

  • 서비스 UI
  • REST API
  • MLflow 배포 SDK

기존 ML 또는 Python 모델을 제공하는 엔드포인트를 만들려면 엔드포인트를 제공하는 사용자 지정 모델 만들기를 참조 하세요.

요구 사항

  • 지원되는 지역의 Databricks 작업 영역입니다.
  • MLflow 배포 SDK를 사용하여 엔드포인트를 만들려면 MLflow 배포 클라이언트를 설치해야 합니다. 설치하려면 다음을 실행합니다.
import mlflow.deployments

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

엔드포인트를 제공하는 기본 모델 만들기

다음은 Databricks 외부 모델을 사용하여 사용할 수 있는 기본 모델을 제공하는 엔드포인트를 만드는 방법을 설명합니다. Foundation Model API를 사용하여 사용할 수 있는 모델의 미세 조정된 변형을 제공하는 엔드포인트는 REST API를 사용하여 프로비전된 처리량 엔드포인트 만들기를 참조하세요.

서비스 UI

  1. 이름 필드에서 엔드포인트의 이름을 제공합니다.
  2. 제공된 엔터티 섹션에서
    1. 엔터티 필드를 클릭하여 제공된 엔터티 선택 양식을 엽니다.
    2. 외부 모델을 선택합니다.
    3. 사용하려는 모델 공급자를 선택합니다.
    4. 확인을 클릭합니다.
    5. 사용하려는 외부 모델의 이름을 제공합니다. 선택한 항목에 따라 양식이 동적으로 업데이트됩니다. 사용 가능한 외부 모델을 참조하세요.
    6. 작업 유형을 선택합니다. 사용 가능한 작업은 채팅, 완료 및 포함입니다.
    7. 선택한 모델 공급자에 액세스하기 위한 구성 세부 정보를 제공합니다. 일반적으로 엔드포인트가 이 모델에 액세스하는 데 사용할 개인 액세스 토큰을 참조하는 비밀입니다.
  3. 만들기를 클릭합니다. 서비스 엔드포인트 페이지는 준비되지 않음으로 표시된 서비스 엔드포인트 상태로 표시됩니다.

엔드포인트를 제공하는 모델 만들기

Rest API

Important

기본 모델을 제공하는 서비스 엔드포인트를 만들기 위한 REST API 매개 변수는 공개 미리 보기제공됩니다.

다음 예제에서는 OpenAI에서 제공하는 모델의 첫 번째 버전을 text-embedding-ada-002 제공하는 엔드포인트를 만듭니다.

엔드포인트 구성 매개 변수는 POST /api/2.0/serving-endpoints를 참조하세요.

{
  "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"
    }
  ]
}

다음은 응답 예입니다.

{
  "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
}

Mlflow 배포 sdk

다음은 OpenAI text-embedding-ada-002를 사용하여 포함할 엔드포인트를 만듭니다.

기본 모델 엔드포인트의 경우 사용하려는 모델 공급자에 대한 API 키를 제공해야 합니다. 요청 및 응답 스키마 세부 정보는 REST API의 POST /api/2.0/serving-endpoints를 참조하세요.

구성 섹션의 필드에 지정된 task 대로 완료 및 채팅 작업에 대한 엔드포인트를 external_model 만들 수도 있습니다. 각 작업에 대해 지원되는 모델 및 공급자는 Databricks 모델 서비스 내의 외부 모델을 참조하세요.


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",
}

기본 모델 엔드포인트 업데이트

모델 엔드포인트를 사용하도록 설정한 후 컴퓨팅 구성을 원하는 대로 설정할 수 있습니다. 이 구성은 모델에 추가 리소스가 필요한 경우에 특히 유용합니다. 워크로드 크기 및 컴퓨팅 구성은 모델 제공을 위해 할당된 리소스에 대해 중요한 역할을 수행합니다.

새 구성이 준비될 때까지 이전 구성은 예측 트래픽을 계속 제공합니다. 업데이트가 진행 중이지만 다른 업데이트는 수행할 수 없습니다. 서비스 UI에서 엔드포인트 세부 정보 페이지의 오른쪽 위에 있는 업데이트 취소를 선택하여 진행 중인 구성 업데이트를 취소할 수 있습니다. 이 기능은 서비스 UI에서만 사용할 수 있습니다.

external_model 엔드포인트 구성에 있는 경우 제공된 엔터티 목록에는 하나의 served_entity 개체만 있을 수 있습니다. 기존 엔드포인트가 external_model 더 이상 external_model없도록 업데이트할 수 없습니다. 엔드포인트가 없는 경우 엔드포인트를 external_model업데이트하여 추가할 external_model수 없습니다.

Rest API

기본 모델 엔드포인트를 업데이트하려면 요청 및 응답 스키마 세부 정보에 대한 REST API 업데이트 구성 설명서를 참조하세요.

{
  "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}}"
        }
      }
    }
  ]
}

Mlflow 배포 sdk

기본 모델 엔드포인트를 업데이트하려면 요청 및 응답 스키마 세부 정보에 대한 REST API 업데이트 구성 설명서를 참조하세요.

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,
        }
    ],
}

추가 리소스