Поделиться через


Масштабирование Azure OpenAI для чата .NET с помощью RAG с приложениями контейнеров Azure

Узнайте, как добавить балансировку нагрузки в ваше приложение, чтобы расширить возможности чата, превышая пределы токена Azure OpenAI и квоты модели. Этот подход использует приложения контейнеров Azure для создания трех конечных точек Azure OpenAI, а также основного контейнера для направления входящего трафика в одну из трех конечных точек.

В этой статье требуется развернуть два отдельных примера:

  • Приложение чата

    • Если вы еще не развернули приложение чата, дождитесь развертывания примера подсистемы балансировки нагрузки.

    • Если вы уже развернули приложение чата один раз, вы измените переменную среды для поддержки пользовательской конечной точки для подсистемы балансировки нагрузки и повторно разверните ее.

    • Приложение чата доступно на следующих языках:

  • Приложение подсистемы балансировки нагрузки

Заметка

В этой статье используется один или несколько шаблонов приложений ИИ в качестве основы для примеров и рекомендаций в этой статье. Шаблоны приложений ИИ предоставляют вам хорошо поддерживаемые и простые в развертывании эталонные реализации, которые помогают обеспечить высококачественную отправную точку для приложений ИИ.

Архитектура балансировки нагрузки Azure OpenAI с помощью приложений контейнеров Azure

Так как ресурс Azure OpenAI имеет определенные ограничения на токены и квоты модели, в приложении для чата, использующем один ресурс Azure OpenAI, могут происходить сбои в общении вследствие этих ограничений.

диаграмма, показывающая архитектуру приложения для чата с выделенным ресурсом Azure OpenAI.

Чтобы использовать приложение чата без достижения этих ограничений, используйте решение с балансировкой нагрузки с помощью приложений контейнеров Azure. Это решение беспрепятственно открывает доступ к единой конечной точке из контейнерных приложений Azure к серверу вашего приложения чата.

Диаграмма, отображающая архитектуру чатового приложения с Azure Container Apps перед тремя ресурсами Azure OpenAI.

Контейнерное приложение Azure расположено перед набором ресурсов Azure OpenAI. Приложение-контейнер решает две задачи: обычный режим и ограниченный режим. В обычном сценарии, где доступна квота маркера и модели, ресурс Azure OpenAI возвращает 200 обратно через приложение контейнера и сервер приложений.

схема, отображающая обычный сценарий. Обычный сценарий показывает три группы конечных точек Azure OpenAI с первой группой двух конечных точек, получая успешный трафик.

Если ресурс находится в режиме регулирования, например из-за ограничений квот, приложение контейнера Azure может повторить другой ресурс Azure OpenAI, чтобы выполнить исходный запрос приложения чата.

схема, отображающая сценарий регулирования с кодом ошибки 429 и заголовке ответа указано, сколько секунд клиенту нужно подождать перед повторной попыткой.

Необходимые условия

  • Подписка Azure. Создайте один бесплатно

  • Доступ, предоставленный Azure OpenAI в требуемой подписке Azure.

    В настоящее время доступ к этой службе предоставляется только приложением. Вы должны подать заявку на доступ к Azure OpenAI.

  • контейнеры разработки доступны для обоих примеров, со всеми зависимостями, необходимыми для выполнения этой статьи. Контейнеры разработки можно запускать в GitHub Codespaces (в браузере) или локально с помощью Visual Studio Code.

Пример приложения локального балансировщика для приложений в контейнерах

GitHub Codespaces запускает контейнер разработки, управляемый GitHub, с Visual Studio Code в веб-версии в качестве пользовательского интерфейса. Для наиболее простой среды разработки используйте GitHub Codespaces, чтобы у вас были правильные средства разработчика и зависимости, предварительно установленные для выполнения этой статьи.

Открыть этот проект в GitHub Codespaces

Важный

Все учетные записи GitHub могут использовать Codespaces до 60 часов бесплатно каждый месяц с экземплярами на 2 ядра. Для получения дополнительной информации обратитесь к статье о ежемесячном включении хранилища и основных часов в GitHub Codespaces.

Развертывание подсистемы балансировки нагрузки для приложений контейнеров Azure

  1. Войдите в интерфейс командной строки разработчика Azure, чтобы обеспечить проверку подлинности для шагов подготовки и развертывания.

    azd auth login --use-device-code
    
  2. Установите переменную среды для использования аутентификации Azure CLI после этапа предоставления ресурсов.

    azd config set auth.useAzCliAuth "true"
    
  3. Разверните приложение подсистемы балансировки нагрузки.

    azd up
    

    Вам потребуется выбрать подписку и регион для развертывания. Они не должны быть той же подпиской и регионом, что и приложение чата.

  4. Дождитесь завершения развертывания, прежде чем продолжить.

Получите конечную точку развертывания

  1. Используйте следующую команду, чтобы отобразить развернутую конечную точку для приложения контейнера Azure.

    azd env get-values
    
  2. Скопируйте значение CONTAINER_APP_URL. Вы будете использовать его в следующем разделе.

Повторное развертывание чат-приложения с конечной точкой балансировщика нагрузки

Они завершены на примере приложения чата.

  1. Откройте контейнер разработки приложения чата с помощью одного из следующих вариантов.

    Язык Кодспейсы Visual Studio Code
    .СЕТЬ Открыть в GitHub Codespaces Открыть в контейнерах разработки
    JavaScript Открыть в GitHub Codespaces Открыть в контейнерах разработки
    Питон Открыть в GitHub Codespaces Открыть в контейнерах разработки
  2. Войдите в Azure Developer CLI (AZD).

    azd auth login
    

    Завершите выполнение инструкций для входа.

  3. Создайте среду AZD с именем, например chat-app.

    azd env new <name>
    
  4. Добавьте следующую переменную среды, которая сообщает серверной части приложения Чата использовать настраиваемый URL-адрес для запросов OpenAI.

    azd env set OPENAI_HOST azure_custom
    
  5. Добавьте следующую переменную среды, заменив <CONTAINER_APP_URL> на URL-адрес из предыдущего раздела. Это действие сообщает серверной части приложения чата, что такое значение настраиваемого URL-адреса для запроса OpenAI.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Разверните приложение чата.

    azd up
    

Теперь вы можете использовать приложение чата с уверенностью в том, что оно создано для масштабирования для многих пользователей без превышения квоты.

Трансляция журналов для просмотра результатов балансировщика нагрузки

  1. На портале Azureвыполните поиск по группе ресурсов.

  2. В списке ресурсов в группе выберите ресурс контейнерного приложения.

  3. Выберите Мониторинг —> Поток журналирования для просмотра журнала.

  4. Используйте приложение чата для создания трафика в журнале.

  5. Поищите журналы, которые ссылаются на ресурсы Azure OpenAI. Каждый из трех ресурсов имеет свое числовое удостоверение в комментарии журнала, начиная с Proxying to https://openai3, где 3 указывает третий ресурс Azure OpenAI.

    Снимок экрана, показывающий потоковые журналы приложения Azure Container App с двумя выделенными строками, иллюстрирующими комментарий к журналу.

  6. При использовании приложения для чата, когда подсистема балансировки нагрузки получает статус о превышении квоты запроса, она автоматически переключается на другой ресурс.

Настроить квоту TPM

По умолчанию каждый экземпляр Azure OpenAI в балансировщике нагрузки развёртывается с возможностью обработки 30 000 токенов в минуту (TPM). Вы можете использовать приложение чата с уверенностью в том, что оно создано для масштабирования на множество пользователей без исчерпания квоты. Измените это значение, если:

  • Вы получаете ошибки емкости развертывания: понизьте значение.
  • Вам нужна большая емкость: увеличьте значение.
  1. Чтобы изменить значение, используйте следующую команду:

    azd env set OPENAI_CAPACITY 50
    
  2. Повторно разверните подсистему балансировки нагрузки:

    azd up
    

Очистка ресурсов

Когда вы закончите работу с приложением чата и подсистемой балансировки нагрузки, очистите ресурсы. Ресурсы Azure, созданные в этой статье, списываются с вашей подписки Azure. Если вы не ожидаете, что эти ресурсы потребуются в будущем, удалите их, чтобы избежать дополнительных расходов.

Очистка ресурсов приложения чата

Вернитесь в статью о приложении чата, чтобы очистить эти ресурсы.

Очистка ресурсов подсистемы балансировки нагрузки

Выполните следующую команду Командной строки разработчика Azure, чтобы удалить ресурсы Azure и удалить исходный код:

azd down --purge --force

Переключатели предоставляют:

  • purge: удаленные ресурсы немедленно удаляются. Это позволяет повторно использовать TPM Azure OpenAI.
  • force. Удаление выполняется автоматически, не требуя согласия пользователя.

Очистка GitHub Codespaces

Удаление среды GitHub Codespaces гарантирует, что вы можете максимально увеличить объем бесплатных прав на базовые часы, которые вы получаете для вашей учетной записи.

Важный

Дополнительные сведения о правах вашей учетной записи GitHub см. в ежемесячно включаемом объеме хранилища и основных часах для GitHub Codespaces.

  1. Войдите на панель мониторинга GitHub Codespaces (https://github.com/codespaces).

  2. Найдите экземпляры Codespaces, находящиеся в данный момент в работе и созданные из репозитория azure-samples/openai-aca-lb GitHub.

    снимок экрана всех выполняемых Codespaces, включая их состояния и шаблоны.

  3. Откройте контекстное меню пространства кода и выберите Удалить.

    снимок экрана контекстного меню для одного пространства кода с выделенным параметром удаления.

Получите помощь

Если у вас возникли проблемы с развертыванием балансировщика нагрузки Azure API Management, отправьте вашу проблему в раздел Issues репозитория .

Пример кода

Примеры, используемые в этой статье, включают:

Следующий шаг

  • Используйте Azure Load Testing для нагрузочного тестирования вашего приложения чата