Azure Container Apps에서 RAG를 사용하여 Java 채팅을 위한 Azure OpenAI를 확장하기
Azure OpenAI Service 토큰 및 모델 할당량 제한을 초과하여 채팅 앱을 확장하기 위해 애플리케이션에 부하 분산을 추가하는 방법을 알아봅니다. 이 방법은 Azure Container Apps를 사용하여 세 개의 Azure OpenAI 엔드포인트와 기본 컨테이너를 만들어 들어오는 트래픽을 세 개의 엔드포인트 중 하나로 전달합니다.
이 문서에서는 두 개의 별도 샘플을 배포해야 합니다.
채팅 앱
채팅 앱을 아직 배포하지 않은 경우 부하 분산 장치 샘플이 배포될 때까지 기다립니다.
채팅 앱을 이미 한 번 배포한 경우 부하 분산 장치에 대한 사용자 지정 엔드포인트를 지원하도록 환경 변수를 변경하고 다시 배포합니다.
채팅 앱은 다음 언어로 제공됩니다.
부하 분산 장치 앱
메모
이 문서에서는 예제와 지침을 위해 AI 앱 템플릿 하나 이상을 사용합니다. AI 앱 템플릿은 배포하기 쉬운 잘 유지 관리되는 참조 구현을 제공합니다. AI 앱의 고품질 시작점을 보장하는 데 도움이 됩니다.
Azure Container Apps를 사용하여 Azure OpenAI 부하 분산을 위한 아키텍처
Azure OpenAI 리소스에는 특정 토큰 및 모델 할당량 제한이 있으므로 단일 Azure OpenAI 리소스를 사용하는 채팅 앱은 이러한 제한으로 인해 대화에 실패하는 경향이 있습니다.
Azure OpenAI 리소스가 강조 표시된 채팅 앱 아키텍처를 보여 주는
이러한 제한에 도달하지 않고 채팅 앱을 사용하려면 Container Apps에서 부하 분산 솔루션을 사용합니다. 이 솔루션은 Container Apps에서 채팅 앱 서버로 단일 엔드포인트를 원활하게 노출합니다.
세 개의 Azure OpenAI 리소스 앞에서 Azure Container Apps를 사용한 채팅 앱 아키텍처를 보여 주는
컨테이너 앱은 Azure OpenAI 리소스 집합 앞에 있습니다. 컨테이너 앱은 정상적인 시나리오와 조절된 시나리오의 두 가지를 해결합니다. 토큰 및 모델 할당량을 사용할 수 있는
일반적인 시나리오를 보여 주는
리소스가 할당량 제한으로 인해
429 실패 응답 코드와 클라이언트가 다시 시도하기 위해 대기해야 하는 시간(초)의 응답 헤더가 있는 제한 시나리오를 보여 주는
필수 구성 요소
Azure 구독. 무료로 하나 만들기
원하는 Azure 구독에서 Azure OpenAI에 부여된 액세스 권한. 현재 이 서비스에 대한 액세스 권한은 애플리케이션에서만 부여됩니다. https://aka.ms/oai/access양식을 작성하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다.
두 샘플 모두에 사용할 수 있는 개발 컨테이너 는 이 문서를 완료하는 데 필요한 모든 종속성을 포함하고 있습니다. 브라우저의 GitHub Codespaces에서 또는 Visual Studio Code를 사용하여 로컬로 개발 컨테이너를 실행할 수 있습니다.
- GitHub 계정.
Container Apps 부하 분산 장치 샘플 앱 열기
중요하다
모든 GitHub 계정은 두 개의 핵심 인스턴스를 사용하여 매월 최대 60시간 동안 GitHub Codespaces를 사용할 수 있습니다. 자세한 내용은 GitHub Codespaces 월별 포함된 스토리지 및 코어 시간참조하세요.
Azure Container Apps 부하 분산기 배포
Azure 개발자 CLI에 로그인하여 프로비전 및 배포 단계에 대한 인증을 제공합니다.
azd auth login --use-device-code
프로비전 후 단계에 Azure CLI 인증을 사용하도록 환경 변수를 설정합니다.
azd config set auth.useAzCliAuth "true"
부하 분산 장치 앱을 배포합니다.
azd up
배포에 대한 구독 및 지역을 선택합니다. 채팅 앱과 동일한 구독 및 지역이 될 필요는 없습니다.
계속하기 전에 배포가 완료되기를 기다립니다.
배포 엔드포인트 가져오기
다음 명령을 사용하여 컨테이너 앱에 대해 배포된 엔드포인트를 표시합니다.
azd env get-values
CONTAINER_APP_URL
값을 복사합니다. 다음 섹션에서 사용합니다.
부하 분산 장치 엔드포인트를 사용하여 채팅 앱 다시 배포
이 예제들은 채팅 앱 샘플에서 완료된 것입니다.
다음 선택 항목 중 하나를 사용하여 채팅 앱 샘플의 개발 컨테이너를 엽니다.
언어 GitHub Codespaces 비스쥬얼 스튜디오 코드 .NET JavaScript 파이썬 Azure Developer CLI(
AZD
)에 로그인합니다.azd auth login
로그인 지침을 완료하세요.
chat-app
같은 이름으로AZD
환경을 만듭니다.azd env new <name>
Azure OpenAI 요청에 대한 사용자 지정 URL을 사용하도록 채팅 앱의 백 엔드에 지시하는 다음 환경 변수를 추가합니다.
azd env set OPENAI_HOST azure_custom
다음 환경 변수를 추가합니다. 이전 섹션의 URL에서 일부를
<CONTAINER_APP_URL>
으로 대체합니다. 이 작업은 채팅 앱의 백 엔드에 Azure OpenAI 요청에 대한 사용자 지정 URL의 값을 알려줍니다.azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
채팅 앱 배포:
azd up
이제 할당량이 부족하지 않으며, 여러 사용자에게 맞춰 확장될 수 있도록 설계된 채팅 앱을 안심하고 사용할 수 있습니다.
로그를 스트리밍하여 부하 분산 장치 결과 보기
Azure Portal에서 리소스 그룹을 검색합니다.
그룹의 리소스 목록에서 Azure Container Apps 리소스를 선택합니다.
모니터링>로그 스트림을 선택하여 로그를 확인하세요.
채팅 앱을 사용하여 로그에 트래픽을 생성합니다.
Azure OpenAI 리소스를 참조하는 로그를 찾습니다. 세 리소스 각각에는
Proxying to https://openai3
시작하는 로그 주석의 숫자 ID가 있습니다. 여기서3
세 번째 Azure OpenAI 리소스를 나타냅니다.로그 주석을 보여 주는 두 개의 로그 줄이 강조 표시된 Azure Container Apps 스트리밍 로그를 보여 주는
부하 분산 장치가 요청이 할당량을 초과하는 상태를 받으면 부하 분산 장치가 자동으로 다른 리소스로 회전합니다.
TPM 할당량 구성
기본적으로 부하 분산 장치의 각 Azure OpenAI 인스턴스는 TPM(분당 30,000개 토큰)의 용량으로 배포됩니다. 할당량이 부족하지 않고 많은 사용자 간에 확장하도록 빌드되었다는 확신을 가지고 채팅 앱을 사용할 수 있습니다. 다음과 같은 경우 이 값을 변경합니다.
- 배포 용량 오류가 발생합니다. 값을 낮추세요.
- 더 높은 용량이 필요합니다. 값을 올립니다.
다음 명령을 사용하여 값을 변경합니다.
azd env set OPENAI_CAPACITY 50
부하 분산 장치를 다시 배포합니다.
azd up
리소스 정리
채팅 앱 및 부하 분산 장치를 완료하면 리소스를 정리합니다. 이 문서에서 만든 Azure 리소스는 Azure 구독에 청구됩니다. 나중에 이러한 리소스가 필요하지 않은 경우 더 많은 요금이 발생하지 않도록 해당 리소스를 삭제합니다.
채팅 앱 리소스 정리
채팅 앱 문서로 돌아가서 리소스를 정리합니다.
업로드 분산 장치 리소스 정리
다음 Azure Developer CLI 명령을 실행하여 Azure 리소스를 삭제하고 소스 코드를 제거합니다.
azd down --purge --force
스위치는 다음을 제공합니다.
-
purge
: 삭제된 리소스는 즉시 제거되므로 분당 Azure OpenAI 서비스 토큰을 다시 사용할 수 있습니다. -
force
: 삭제는 사용자 동의 없이 자동으로 수행됩니다.
GitHub Codespaces 및 Visual Studio Code 정리
GitHub Codespaces 환경을 삭제하면 귀하의 계정에 대해 얻을 수 있는 코어당 무료 시간 권한을 최대화할 수 있습니다.
중요하다
GitHub 계정의 사용 권한에 대한 자세한 내용은 GitHub Codespaces 월별 포함된 스토리지와 코어 시간을 참조하세요.
GitHub Codespaces 대시보드에 로그인하세요.
azure-samples/openai-aca-lb GitHub 리포지토리에서 제공되는 현재 실행 중인 코드스페이스를 찾습니다.
코드스페이스의 상황에 맞는 메뉴를 연 다음 삭제를 선택합니다.
도움말 보기
Azure API Management 부하 분산 장치를 배포하는 데 문제가 있는 경우 리포지토리의 문제 웹 페이지에 문제를 추가합니다.
샘플 코드
이 문서에서는 다음 샘플을 사용합니다.
- RAG 사용하여 Java 채팅 앱
- Azure Container Apps를 사용한 Load Balancer
다음 단계
- Azure Load Testing을 사용하여 채팅 앱을 로드 테스트합니다.