자습서: OpenAI 모델을 쿼리하는 외부 모델 엔드포인트 만들기

이 페이지에서는 완성, 채팅 및 포함을 위해 OpenAI 모델을 제공하는 외부 모델 엔드포인트를 구성하고 쿼리하기 위한 단계별 지침을 제공합니다. MLflow 배포 SDK를 사용하여 엔드포인트를 만들고 OpenAI 클라이언트를 사용하여 쿼리합니다. 자세한 내용은 외부 모델을 참조하세요.

엔드포인트를 만든 후 Databricks는 사용량 추적, 페이로드 로깅, 가드레일 및 속도 제한과 같은 거버넌스 기능을 추가하도록 Unity AI Gateway를 구성하는 것이 좋습니다. 모델 서비스를 통해 제공되는 모든 외부 모델은 OpenAI 호환 API를 사용하여 쿼리되므로 공급자 간에 단일 클라이언트를 사용할 수 있습니다. Unity AI 게이트웨이를 참조하세요.

서비스 UI를 사용하여 이 작업을 수행하려면 엔드포인트를 제공하는 외부 모델 만들기를 참조하세요.

요구 사항

  • Databricks Runtime 버전 13.0 ML 또는 그 이상.
  • MLflow 2.9 이상
  • OpenAI API 키.
  • Databricks CLI 버전 0.205 이상을 설치합니다.

(선택 사항) 0단계: Databricks 비밀 CLI를 사용하여 OpenAI API 키 저장

3단계에서 또는 Azure Databricks 비밀을 사용하여 API 키를 일반 텍스트 문자열로 제공할 수 있습니다.

OpenAI API 키를 비밀로 저장하려면 Databricks 비밀 CLI(버전 0.205 이상)를 사용할 수 있습니다. 비밀에 REST API를 사용할 수도 있습니다.

다음은 my_openai_secret_scope라는 비밀 범위를 만든 후, 해당 범위에 비밀 openai_api_key을 만듭니다.

databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key

1단계: 외부 모델 지원을 사용하여 MLflow 설치

다음을 사용하여 외부 모델 지원을 사용하여 MLflow 버전을 설치합니다.

%pip install mlflow[genai]>=2.9.0

2단계: 외부 모델 엔드포인트 만들기 및 관리

중요한

이 섹션의 코드 예제에서는 공개 미리 보기 MLflow 배포 CRUD SDK를 사용하는 방법을 보여 줍니다.

LLM(대규모 언어 모델)에 대한 외부 모델 엔드포인트를 만들려면 MLflow 배포 SDK의 메서드를 사용합니다 create_endpoint() . 서비스 UI에서 외부 모델 엔드포인트를 만들 수도 있습니다.

다음 코드 조각은 구성 섹션에 지정된 대로 OpenAI gpt-3.5-turbo-instructserved_entities 대한 완성 엔드포인트를 만듭니다. 엔드포인트에는 nameopenai_api_key을 각각의 필드에 고유한 값으로 꼭 채워야 합니다.

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
    name="openai-completions-endpoint",
    config={
        "served_entities": [{
            "name": "openai-completions",
            "external_model": {
                "name": "gpt-3.5-turbo-instruct",
                "provider": "openai",
                "task": "llm/v1/completions",
                "openai_config": {
                    "openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
                }
            }
        }]
    }
)

다음 코드 조각에서는 위와 동일한 완성 엔드포인트를 만드는 다른 방법을 위해 OpenAI API 키를 일반 텍스트 문자열로 제공하는 방법을 보여 줍니다.

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
    name="openai-completions-endpoint",
    config={
        "served_entities": [{
            "name": "openai-completions",
            "external_model": {
                "name": "gpt-3.5-turbo-instruct",
                "provider": "openai",
                "task": "llm/v1/completions",
                "openai_config": {
                    "openai_api_key_plaintext": "sk-yourApiKey"
                }
            }
        }]
    }
)

Azure OpenAI를 사용하는 경우 구성 섹션에서 Azure OpenAI 배포 이름, 엔드포인트 URL 및 API 버전을 openai_config 지정할 수도 있습니다.

client.create_endpoint(
    name="openai-completions-endpoint",
    config={
        "served_entities": [
          {
            "name": "openai-completions",
            "external_model": {
                "name": "gpt-3.5-turbo-instruct",
                "provider": "openai",
                "task": "llm/v1/completions",
                "openai_config": {
                    "openai_api_type": "azure",
                    "openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}",
                    "openai_api_base": "https://my-azure-openai-endpoint.openai.azure.com",
                    "openai_deployment_name": "my-gpt-35-turbo-deployment",
                    "openai_api_version": "2023-05-15"
                },
            },
          }
        ],
    },
)

엔드포인트에서 속도 제한, 사용량 추적, 페이로드 로깅 또는 가드레일을 구성하려면 Unity AI Gateway를 사용합니다. Unity AI Gateway를 통해 속도 제한을 구성하면 쿼리 기반(QPM) 및 TPM(토큰 기반) 제한을 모두 지원하며 사용자별, 그룹별 및 엔드포인트 전체 제한을 설정할 수 있습니다.

속도 제한 및 기타 Unity AI 게이트웨이 기능을 추가하도록 엔드포인트를 업데이트하는 프로그래밍 방식 예제는 엔드포인트를 제공하는 모델 에서 Unity AI Gateway 구성을 참조하세요.

Note

최상위 client.update_endpoint() 필드가 있는 이전에 문서화된 rate_limits 패턴은 더 이상 사용되지 않습니다. 대신 엔드포인트에서 Unity AI 게이트웨이 구성을 사용합니다.

3단계: 외부 모델 엔드포인트에 요청 보내기

Databricks는 OpenAI 클라이언트를 사용하여 외부 모델 엔드포인트를 쿼리하는 것이 좋습니다. Model Serving는 공급자 간에 통합된 OpenAI 호환 API를 노출하므로 기본 모델이 OpenAI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI 또는 사용자 지정 공급자에서 온 것이든 동일한 클라이언트 코드가 작동합니다.

컴퓨팅에 OpenAI 클라이언트를 설치합니다.

%pip install openai

다음은 OpenAI 채팅 모델을 제공하는 엔드포인트에 채팅 완료 요청을 보냅니다. base_url 값을 Azure Databricks 작업 영역 URL로 바꾸고, api_key에 대해 Azure Databricks 개인용 액세스 토큰을 제공하세요. 매개 변수를 model 엔드포인트를 제공하는 모델의 이름으로 설정합니다.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("DATABRICKS_TOKEN"),
    base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)

response = client.chat.completions.create(
    model="openai-chat-endpoint",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the capital of France?"}
    ],
    max_tokens=128,
    temperature=0.1,
)
print(response.choices[0].message.content)

완료 요청을 태스크에 대해 구성된 엔드포인트로 보내려면 다음을 llm/v1/completions 사용합니다 client.completions.create().

response = client.completions.create(
    model="openai-completions-endpoint",
    prompt="What is the capital of France?",
    max_tokens=10,
    temperature=0.1,
    n=2,
)
print(response)

llm/v1/embeddings 작업으로 구성된 엔드포인트에 임베딩 요청을 보내려면 client.embeddings.create()을 사용하세요:

response = client.embeddings.create(
    model="openai-embeddings-endpoint",
    input="Databricks is a unified analytics platform.",
)
print(response.data[0].embedding)

Azure Databricks Notebook 내에서 OpenAI 클라이언트를 실행하는 경우 인증 및 작업 영역 기본 URL을 자동으로 구성하는 databricks-openai 도우미를 사용할 수 있습니다. 자세한 내용은 기본 모델 사용을 참조하세요.

4단계: 다른 공급자의 모델 비교

모델 제공은 Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI 등을 비롯한 많은 외부 모델 공급자를 지원합니다. 공급자 간에 LLM을 비교할 수 있으므로 AI Playground사용하여 애플리케이션의 정확도, 속도 및 비용을 최적화할 수 있습니다.

다음 예제에서는 Anthropic claude-2 에 대한 엔드포인트를 만들고 해당 응답을 OpenAI gpt-3.5-turbo-instruct를 사용하는 질문과 비교합니다. 두 응답 모두 표준 형식이 같으므로 쉽게 비교할 수 있습니다.

Anthropic claude-2에 대한 엔드포인트 만들기

import mlflow.deployments

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

client.create_endpoint(
    name="anthropic-completions-endpoint",
    config={
        "served_entities": [
            {
                "name": "claude-completions",
                "external_model": {
                    "name": "claude-2",
                    "provider": "anthropic",
                    "task": "llm/v1/completions",
                    "anthropic_config": {
                        "anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
                    },
                },
            }
        ],
    },
)

각 엔드포인트의 응답 비교

모든 외부 모델 엔드포인트는 OpenAI 호환 API를 노출하므로 매개 변수를 해당 엔드포인트 이름으로 전환하여 model 동일한 OpenAI 클라이언트로 두 엔드포인트를 쿼리할 수 있습니다.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("DATABRICKS_TOKEN"),
    base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)

prompt = "How is Pi calculated? Be very concise."

openai_response = client.completions.create(
    model="openai-completions-endpoint",
    prompt=prompt,
)
anthropic_response = client.completions.create(
    model="anthropic-completions-endpoint",
    prompt=prompt,
)

print("OpenAI:", openai_response.choices[0].text)
print("Anthropic:", anthropic_response.choices[0].text)

추가 리소스