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


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

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

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

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

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

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

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

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

Заметка

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

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

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

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

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

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

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

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

Если ресурс находится в сценарии ограниченного использования из-за ограничений квоты, приложение контейнера может попробовать использовать другой ресурс 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 могут использовать GitHub Codespaces бесплатно до 60 часов в месяц, используя два экземпляра с двумя процессорными ядрами. Для получения дополнительной информации обратитесь к статье о ежемесячном включении хранилища и основных часов в 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. Используйте следующую команду, чтобы отобразить развернутую конечную точку для приложения-контейнера:

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

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

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

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

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

    azd auth login
    

    Завершите инструкцию по входу в систему.

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

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

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

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

    azd up
    

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

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

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

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

  3. Выберите «Мониторинг»>и «Поток журнала», чтобы просмотреть журнал.

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

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

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

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

Настроить квоту 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. Удаленные ресурсы немедленно очищаются, чтобы вы могли многократно использовать токены службы Azure OpenAI в течение каждой минуты.
  • force. Удаление выполняется автоматически, не требуя согласия пользователя.

Очистка GitHub Codespaces и Visual Studio Code

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

Важный

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

  1. Войдите в панель мониторинга GitHub Codespaces.

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

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

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

    снимок экрана, показывающий контекстное меню для одного пространства кода с выделенным параметром

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

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

Пример кода

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

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

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