Azure AI 모델 추론

Azure AI 모델 추론

이 노트북은 Azure AI studio나 Azure Machine Learning에서 Azure AI 모델 추론 API로 배포된 모델과 함께 llama-index-llm-azure-inference 패키지를 사용하는 방법을 설명해요. 이 패키지는 GitHub Models (Preview) 엔드포인트도 지원해요.

%pip install llama-index-llms-azure-inference

Google Colab에서 이 노트북을 여는 경우라면 LlamaIndex 🦙 설치가 필요할 거예요.

%pip install llama-index

출처: 문서

본문

사전 준비사항 (Prerequisites)

Azure AI 모델 추론은 개발자가 일관된 스키마로 Azure AI에 호스팅된 다양한 모델에 접근할 수 있게 해주는 API예요. Azure AI serverless API 엔드포인트에 배포된 모델과 Managed Inference의 일부 모델을 포함해 이 API를 지원하는 모델과 함께 llama-index-llms-azure-inference 통합 패키지를 사용할 수 있어요. API 사양과 이를 지원하는 모델에 대해 더 읽으려면 Azure AI model inference API를 참고하세요.

이 튜토리얼을 실행하려면 다음이 필요해요.

  1. Azure 구독을 만드세요.

  2. How to create and manage an Azure AI Studio hub에 설명된 대로 Azure AI hub 리소스를 만드세요.

  3. Azure AI model inference API를 지원하는 모델 하나를 배포하세요. 이 예시에서는 Mistral-Large 배포를 사용해요.

대안으로 이 통합과 함께 GitHub Models 엔드포인트를 사용할 수 있는데, 무료 티어 경험도 포함돼요. GitHub models에 대해 더 읽어보세요.

환경 설정 (Environment Setup)

사용하려는 모델에서 필요한 정보를 얻으려면 다음 단계를 따르세요.

  1. 사용 중인 제품에 따라 Azure AI Foundry (이전 Azure AI Studio) 또는 Azure Machine Learning studio로 이동하세요.
  2. 배포(머신러닝에서는 엔드포인트)로 이동해 사전 준비사항에서 배포한 모델을 선택하세요.
  3. 엔드포인트 URL과 키를 복사하세요.

모델이 Microsoft Entra ID 지원으로 배포된 경우에는 키가 필요 없어요.

이 시나리오에서는 엔드포인트 URL과 키를 다음 환경 변수에 넣었어요.

import os


os.environ["AZURE_INFERENCE_ENDPOINT"] = "<your-endpoint>"
os.environ["AZURE_INFERENCE_CREDENTIAL"] = "<your-credential>"

배포와 엔드포인트에 연결하기

Azure AI studio나 Azure Machine Learning에 배포된 LLM을 사용하려면 연결할 엔드포인트와 자격 증명이 필요해요. Managed Online Endpoints처럼 단일 모델만 제공하는 엔드포인트에서는 model_name 파라미터가 필요 없어요.

from llama_index.llms.azure_inference import AzureAICompletionsModel
llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
)

대안으로 엔드포인트가 Microsoft Entra ID를 지원한다면 다음 코드로 클라이언트를 만들 수 있어요.

from azure.identity import DefaultAzureCredential


llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=DefaultAzureCredential(),
)

참고: Microsoft Entra ID를 사용할 때는 엔드포인트가 해당 인증 방식으로 배포되었고, 호출할 수 있는 권한이 있는지 확인하세요.

비동기 호출을 계획하고 있다면 자격 증명의 비동기 버전을 사용하는 것이 모범 사례예요.

from azure.identity.aio import (
    DefaultAzureCredential as DefaultAzureCredentialAsync,
)


llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=DefaultAzureCredentialAsync(),
)

GitHub Models이나 Azure AI Services처럼 엔드포인트가 둘 이상의 모델을 제공한다면 model_name 파라미터를 지정해야 해요.

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    model_name="mistral-large",  # change it to the model you want to use
)

모델 사용하기

텍스트 완성에는 complete 엔드포인트를 사용해요. complete 메서드는 chat-completions 유형의 모델에서도 여전히 사용할 수 있어요. 그 경우 입력 텍스트가 role="user"인 메시지로 변환돼요.

response = llm.complete("The sky is a beautiful blue and")
print(response)
response = llm.stream_complete("The sky is a beautiful blue and")
for r in response:
    print(r.delta, end="")

대화에는 chat 엔드포인트를 사용해요.

from llama_index.core.llms import ChatMessage


messages = [
    ChatMessage(
        role="system", content="You are a pirate with colorful personality."
    ),
    ChatMessage(role="user", content="Hello"),
]


response = llm.chat(messages)
print(response)
response = llm.stream_chat(messages)
for r in response:
    print(r.delta, end="")

매번 동일한 파라미터를 각 chat이나 completion 호출에 추가하는 대신, 클라이언트 인스턴스에서 설정할 수 있어요.

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    temperature=0.0,
    model_kwargs={"top_p": 1.0},
)
response = llm.complete("The sky is a beautiful blue and")
print(response)

Azure AI 모델 추론 API가 지원하지 않지만 기본 모델에는 있는 추가 파라미터는 model_extras 인자를 사용할 수 있어요. 다음 예시에서는 Mistral 모델에서만 사용 가능한 safe_prompt 파라미터를 전달하고 있어요.

llm = AzureAICompletionsModel(
    endpoint=os.environ["AZURE_INFERENCE_ENDPOINT"],
    credential=os.environ["AZURE_INFERENCE_CREDENTIAL"],
    temperature=0.0,
    model_kwargs={"model_extras": {"safe_prompt": True}},
)
response = llm.complete("The sky is a beautiful blue and")
print(response)

추가 자료 (Additional resources)

이 통합에 대해 더 배우려면 Getting starting with LlamaIndex and Azure AI를 방문하세요.

더 알아보기 (Learn more)