다음을 통해 공유


Azure Container Apps에서 RAG를 사용하여 Python용 Azure OpenAI 채팅 크기 조정

Azure OpenAI 토큰 및 모델 할당량 한도를 넘어 채팅 앱을 확장하기 위해 애플리케이션에 부하 분산을 추가하는 방법을 알아봅니다. 이 방식은 Azure Container Apps를 사용하여 3개의 Azure OpenAI 엔드포인트를 만들고, 들어오는 트래픽을 3개의 엔드포인트 중 하나로 전달하는 기본 컨테이너를 만듭니다.

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

  • 채팅 앱

    • 아직 채팅 앱을 배포하지 않은 경우 부하 분산 장치 샘플이 배포될 때까지 기다립니다.

    • 채팅 앱을 이미 한 번 배포한 경우 부하 분산 장치에 대한 사용자 지정 엔드포인트를 지원하도록 환경 변수를 변경하고 다시 배포합니다.

    • 다음 언어로 사용할 수 있는 채팅 앱:

  • 부하 분산 장치 앱

참고 항목

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

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

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

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

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

세 개의 Azure OpenAI 리소스 앞에 Azure Container Apps가 포함된 채팅 앱 아키텍처를 보여 주는 다이어그램.

Azure 컨테이너 앱은 Azure OpenAI 리소스 집합 앞에 위치합니다. 컨테이너 앱은 정상 및 제한이라는 두 가지 시나리오를 해결합니다. 토큰 및 모델 할당량을 사용할 수 있는 일반적인 시나리오 동안 Azure OpenAI 리소스는 컨테이너 앱 및 앱 서버를 통해 200을 다시 반환합니다.

일반적인 시나리오를 표시하는 다이어그램. 일반적인 시나리오에서는 두 개의 엔드포인트로 구성된 첫 번째 그룹이 성공적인 트래픽을 가져오는 세 개의 Azure OpenAI 엔드포인트 그룹을 보여 줍니다.

할당량 한도 등으로 인해 리소스가 제한된 시나리오에 있는 경우 Azure 컨테이너 앱은 다른 Azure OpenAI 리소스를 즉시 다시 시도하여 원래 채팅 앱 요청을 완료할 수 있습니다.

429 실패 응답 코드와 클라이언트가 다시 시도를 위해 기다려야 하는 시간(초)에 대한 응답 헤더가 포함된 제한 시나리오를 표시하는 다이어그램.

필수 조건

  • Azure 구독. 무료로 계정 만들기

  • 원하는 Azure 구독의 Azure OpenAI에 대한 액세스 권한.

    현재 이 서비스에 대한 액세스 권한은 애플리케이션에서만 부여됩니다. https://aka.ms/oai/access에서 양식을 작성하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다.

  • 개발 컨테이너는 두 샘플 모두에 사용할 수 있으며 이 문서를 완료하는 데 필요한 모든 종속성이 포함되어 있습니다. GitHub Codespaces(브라우저)에서 개발 컨테이너를 실행하거나 Visual Studio Code를 사용하여 로컬로 실행할 수 있습니다.

    • GitHub 계정

Container Apps 로컬 밸런서 샘플 앱 열기

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

GitHub Codespaces에서 이 프로젝트 열기

Important

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

Azure Container Apps 부하 분산 장치 배포

  1. Azure Developer CLI에 로그인하여 프로비전 및 배포 단계에 대한 인증을 제공하세요.

    azd auth login --use-device-code
    
  2. 프로비전 후 단계에 Azure CLI 인증을 사용하도록 환경 변수를 설정합니다.

    azd config set auth.useAzCliAuth "true"
    
  3. 부하 분산 장치 앱을 배포합니다.

    azd up
    

    배포할 구독과 지역을 선택해야 합니다. 채팅 앱과 동일한 구독 및 지역일 필요는 없습니다.

  4. 배포가 완료될 때까지 기다린 후 계속합니다.

배포 엔드포인트 가져오기

  1. 다음 명령을 사용하여 Azure Container App에 대해 배포된 엔드포인트를 표시합니다.

    azd env get-values
    
  2. CONTAINER_APP_URL 값을 복사합니다. 다음 섹션에서 이 값을 사용합니다.

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

이는 채팅 앱 샘플에서 완료됩니다.

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

    언어 Codespaces Visual Studio Code
    .NET GitHub Codespaces에서 열기 Dev 컨테이너에서 열기
    JavaScript GitHub Codespaces에서 열기 Dev 컨테이너에서 열기
    Python GitHub Codespaces에서 열기 Dev 컨테이너에서 열기
  2. AZD(Azure 개발자 CLI)에 로그인합니다.

    azd auth login
    

    로그인 지침을 완료합니다.

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

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

    azd env set OPENAI_HOST azure_custom
    
  5. 이전 섹션의 URL을 <CONTAINER_APP_URL>로 대체하여 다음 환경 변수를 추가합니다. 이 작업은 OpenAI 요청에 대한 사용자 지정 URL 값이 무엇인지 채팅 앱의 백 엔드에 알려 줍니다.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. 채팅 앱을 배포합니다.

    azd up
    

이제 할당량을 초과하지 않고 많은 사용자에게 크기 조정되도록 빌드된 채팅 앱을 안심하고 사용할 수 있습니다.

로그를 스트리밍하여 부하 분산 장치 결과 보기

  1. Azure Portal에서 리소스 그룹을 검색합니다.

  2. 그룹의 리소스 목록에서 컨테이너 앱 리소스를 선택합니다.

  3. 로그를 보려면 모니터링 -> 로그 스트림을 선택합니다.

  4. 채팅 앱을 사용하여 로그에 트래픽을 생성합니다.

  5. Azure OpenAI 리소스를 참조하는 로그를 찾습니다. 세 리소스 각각은 로그 주석에서 Proxying to https://openai3으로 시작하는 숫자 ID를 갖습니다. 여기서 3은 세 번째 Azure OpenAI 리소스를 나타냅니다.

    로그 설명을 보여 주는 두 개의 로그 줄이 강조 표시된 Azure 컨테이너 앱 스트리밍 로그를 보여 주는 스크린샷.

  6. 채팅 앱을 사용할 때 부하 분산 장치가 요청이 할당량을 초과했다는 상태를 수신하면 부하 분산 장치는 자동으로 다른 리소스로 회전됩니다.

TPM(분당 토큰) 할당량 구성

기본적으로 부하 분산 장치의 각 OpenAI 인스턴스는 30,000TPM(분당 토큰) 용량으로 배포됩니다. 할당량을 초과하지 않고 많은 사용자에 걸쳐 크기 조정할 수 있도록 빌드된 채팅 앱을 안심하고 사용할 수 있습니다. 다음과 같은 경우 이 값을 변경합니다.

  • 배포 용량 오류가 발생하면 해당 값을 낮추세요.
  • 더 높은 용량을 계획하면 가치가 높아집니다.
  1. 값을 변경하려면 다음 명령을 사용합니다.

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

    azd up
    

리소스 정리

채팅 앱과 부하 분산 장치를 모두 완료하면 리소스를 정리합니다. 이 문서에서 만들어진 Azure 리소스는 Azure 구독에 요금이 청구됩니다. 앞으로 이러한 리소스가 필요하지 않을 것으로 예상되는 경우 추가 요금이 발생하지 않도록 삭제합니다.

채팅 앱 리소스 정리

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

업부하 분산 장치 리소스 정리

다음 Azure 개발자 CLI 명령을 실행하여 Azure 리소스를 삭제하고 소스 코드를 제거합니다.

azd down --purge --force

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

  • purge: 제거된 리소스는 즉시 제거됩니다. 이를 통해 Azure OpenAI TPM을 재사용할 수 있습니다.
  • force: 삭제는 사용자 동의 없이 자동으로 수행됩니다.

GitHub Codespaces 정리

GitHub Codespaces 환경을 삭제하면 계정에 대해 얻을 수 있는 코어당 무료 사용 권한을 최대화할 수 있습니다.

중요

GitHub 계정의 자격에 대한 자세한 내용은 GitHub Codespaces 월별 포함된 스토리지 및 코어 시간을 참조하세요.

  1. GitHub Codespaces 대시보드(https://github.com/codespaces)에 로그인합니다.

  2. azure-samples/openai-aca-lb GitHub 리포지토리에서 제공된 현재 실행 중인 Codespaces를 찾습니다.

    상태 및 템플릿을 포함하여 실행 중인 모든 Codespaces의 스크린샷.

  3. codespace에 대한 상황에 맞는 메뉴를 열고 삭제를 선택합니다.

    삭제 옵션이 강조 표시된 단일 codespace에 대한 상황에 맞는 메뉴의 스크린샷

도움말 보기

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

샘플 코드

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

다음 단계