다음을 통해 공유


Azure API Management를 사용하여 Python용 Azure OpenAI 크기 조정

애플리케이션에 엔터프라이즈급 부하 분산을 추가하여 Azure OpenAI 서비스 토큰 및 모델 할당량 제한을 초과하여 채팅 앱을 확장하는 방법을 알아봅니다. 이 방법은 Azure API Management를 사용하여 세 개의 Azure OpenAI 리소스 간에 트래픽을 지능적으로 전달합니다.

이 문서에서는 두 개의 별도 샘플을 배포해야 합니다.

  • 채팅 앱:
    • 부하 분산 장치 샘플이 배포된 후에 채팅 앱을 배포하십시오.
    • 채팅 앱을 이미 한 번 배포한 경우 부하 분산 장치에 대한 사용자 지정 엔드포인트를 지원하도록 환경 변수를 변경하고 다시 배포합니다.
  • Azure API Management를 사용하는 부하 분산 장치.

메모

이 문서에서는 문서의 예제 및 지침에 대한 기준으로 하나 이상의 AI 앱 템플릿을 사용합니다. AI 앱 템플릿은 배포하기 쉬운 잘 유지 관리되는 참조 구현을 제공합니다. AI 앱의 고품질 시작점을 보장하는 데 도움이 됩니다.

Azure API Management를 사용하여 Azure OpenAI 부하 분산을 위한 아키텍처

Azure OpenAI 리소스에는 특정 토큰 및 모델 할당량 제한이 있으므로 단일 Azure OpenAI 리소스를 사용하는 채팅 앱은 이러한 제한으로 인해 대화에 실패하는 경향이 있습니다.

Azure OpenAI 리소스가 강조 표시된 채팅 앱 아키텍처를 보여 주는 다이어그램

이러한 제한에 도달하지 않고 채팅 앱을 사용하려면 API Management에서 부하 분산 솔루션을 사용합니다. 이 솔루션은 API Management의 단일 엔드포인트를 채팅 앱 서버에 원활하게 노출합니다.

세 개의 Azure OpenAI 리소스 앞에서 Azure API Management를 사용한 채팅 앱 아키텍처를 보여 주는 다이어그램

API Management 리소스는 API 계층으로서 Azure OpenAI 리소스 집합 앞에 있습니다. API 계층은 정상 상태와 제한 상태의 두 가지 시나리오에 적용됩니다. 토큰 및 모델 할당량을 사용할 수 있는 일반 시나리오에서 Azure OpenAI 리소스는 API 계층 및 백 엔드 앱 서버를 통해 200을 다시 반환합니다.

세 개의 Azure OpenAI 엔드포인트 그룹이 있는 일반적인 시나리오를 보여 주는 다이어그램 두 엔드포인트의 첫 번째 그룹은 성공적인 트래픽을 가져옵니다.

할당량 제한으로 인해 리소스가 제한되지 경우 API 계층은 다른 Azure OpenAI 리소스를 즉시 다시 시도하여 원래 채팅 앱 요청을 수행할 수 있습니다.

클라이언트가 다시 시도할 때까지 기다려야 하는 시간을 초 단위로 나타내는 응답 헤더와 함께 429 오류 응답 코드가 있는 제약 시나리오를 보여주는 다이어그램.

필수 구성 요소

Azure API Management 로컬 로드 밸런서 샘플 앱 열다

GitHub Codespaces 웹 대한 Visual Studio Code를 사용자 인터페이스로 사용하여 GitHub에서 관리하는 개발 컨테이너를 실행합니다. 가장 간단한 개발 환경의 경우 이 문서를 완료하기 위해 올바른 개발자 도구와 종속성이 미리 설치되도록 GitHub Codespaces를 사용합니다.

GitHub Codespaces에서 엽니다.

중요하다

모든 GitHub 계정은 두 개의 핵심 인스턴스를 사용하여 매월 최대 60시간 동안 GitHub Codespaces를 사용할 수 있습니다. 자세한 내용은 GitHub Codespaces 월별 포함된 스토리지 및 코어 시간참조하세요.

Azure API Management의 로드 밸런서를 배포하세요

  1. Azure에 부하 분산 장치를 배포하려면 Azure Developer CLI(AZD)에 로그인합니다.

    azd auth login
    
  2. 로그인 지침 작성을 완료하세요.

  3. 부하 분산 장치 앱을 배포합니다.

    azd up
    

    배포에 대한 구독 및 지역을 선택합니다. 채팅 앱과 동일한 구독 및 지역이 될 필요는 없습니다.

  4. 계속하기 전에 배포가 완료되기를 기다립니다. 이 프로세스는 최대 30분이 걸릴 수 있습니다.

부하 분산 장치 엔드포인트 가져오기

다음 Bash 명령을 실행하여 배포의 환경 변수를 확인합니다. 이 정보는 나중에 필요합니다.

azd env get-values | grep APIM_GATEWAY_URL

부하 분산 장치 엔드포인트를 사용하여 채팅 앱 다시 배포

이러한 예제는 채팅 앱 샘플을 사용하여 완료됩니다.

  1. 다음 선택 항목 중 하나를 사용하여 채팅 앱 샘플의 개발 컨테이너를 엽니다.

    언어 GitHub Codespaces (GitHub 코드스페이스) 비주얼 스튜디오 코드
    닷넷 GitHub Codespaces에서 열기 Dev Containers 열기
    JavaScript GitHub Codespaces에서 열기 Dev Containers 열기
    파이썬 GitHub Codespaces에서 열기 Dev Containers 열기
  2. Azure Developer CLI(AZD)에 로그인합니다.

    azd auth login
    

    로그인 지침 작성을 완료하세요.

  3. AZD같은 이름으로 chat-app 환경을 만듭니다.

    azd env new <name>
    
  4. Azure OpenAI 요청에 대한 사용자 지정 URL을 사용하도록 채팅 앱의 백 엔드에 지시하는 다음 환경 변수를 추가합니다.

    azd env set OPENAI_HOST azure_custom
    
  5. 이 환경 변수를 추가하여 채팅 앱의 백 엔드에 Azure OpenAI 요청에 대한 사용자 지정 URL을 알릴 수 있습니다.

    azd env set AZURE_OPENAI_CUSTOM_URL <APIM_GATEWAY_URL>
    
  6. 채팅 앱 배포:

    azd up
    

TPM 할당량 구성

기본적으로 부하 분산 장치의 각 Azure OpenAI 인스턴스는 TPM(분당 30,000개 토큰)의 용량으로 배포됩니다. 할당량이 부족할 염려 없이 여러 사용자에게 확장할 수 있다는 확신을 가지고 채팅 앱을 사용할 수 있습니다. 다음과 같은 경우 이 값을 변경합니다.

  • 배포 용량 오류가 발생하면, 값을 낮추십시오.
  • 더 높은 용량이 필요합니다. 값을 올리세요.
  1. 다음 명령을 사용하여 값을 변경합니다.

    azd env set OPENAI_CAPACITY 50
    
  2. 부하 분산 장치를 다시 배포합니다.

    azd up
    

리소스 정리

채팅 앱 및 부하 분산 장치를 완료하면 리소스를 정리합니다. 이 문서에서 만든 Azure 리소스는 Azure 구독에 청구됩니다. 나중에 이러한 리소스가 필요하지 않은 경우 더 많은 요금이 발생하지 않도록 해당 리소스를 삭제합니다.

채팅 앱 리소스 정리

채팅 앱 문서로 돌아가서 해당 리소스를 정리합니다.

부하 분산 장치 리소스 정리

Azure 리소스를 삭제하고 소스 코드를 제거합니다.

azd down --purge --force

스위치는 다음을 제공합니다.

  • purge: 삭제된 리소스는 즉시 제거됩니다. 분당 Azure OpenAI 토큰을 다시 사용할 수 있습니다.
  • force: 삭제는 사용자 동의 없이 자동으로 수행됩니다.

리소스 정리

GitHub Codespaces 환경을 삭제하면 계정에 대해 받을 수 있는 무료 코어별 시간 할당량을 최대화할 수 있습니다.

중요하다

GitHub 계정의 자격에 관한 더 많은 정보를 보려면 GitHub Codespaces에 매달 포함된 스토리지 및 코어 시간을 참조하세요.

  1. GitHub Codespaces 대시보드에 로그인하세요.

  2. GitHub 리포지토리 azure-samples/openai-apim-lb에서 제공된 현재 실행 중인 코드스페이스를 찾아보세요.

    상태 및 템플릿을 포함하여 실행 중인 모든 코드스페이스를 보여 주는 스크린샷

  3. GitHub Codespaces 항목에 대한 상황에 맞는 메뉴를 열고 삭제을 선택합니다.

    삭제 옵션이 강조 표시된 단일 코드스페이스의 상황에 맞는 메뉴를 보여 주는 스크린샷

도움 받기

Azure API Management 부하 분산 장치를 배포하는 데 문제가 있는 경우 리포지토리의 문제 웹 페이지에 문제를 추가합니다.

샘플 코드

이 문서에 사용된 샘플은 다음과 같습니다.

  • RAG를 사용한 Python 채팅 앱
  • Azure API Management 사용하여 Azure Load Balancer
  • Azure API Management의 진단 데이터를 Azure Monitor에서 봅니다.
  • Azure Load Testing을 사용하여 채팅 앱의 로드 테스트를 수행합니다.