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