Перейти к основному содержимому

Оптимизация потока запросов

Платформа Caila предоставляет встроенные инструменты для оптимизации потока запросов. Они помогут вашему сервису работать стабильнее и эффективнее, в том числе при высокой нагрузке.

к сведению

Все настройки обработки запросов применяются «на лету», без перезапуска сервиса.

Повторная отправка

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

Как настроить

  1. Выберите сервис и перейдите в Настройки.
  2. На вкладке Основные нажмите .
  3. Раскройте группу настроек Параметры перепосылки.
  4. Укажите максимальное количество повторных попыток для одного запроса. Это общий лимит для всех причин переотправки: как при отсутствии ответа, так и в случае ошибки.
  5. Задайте количество попыток на один инстанс. Рекомендуется указать значение 1, чтобы исключить повторную отправку запроса на перегруженный инстанс.
  6. Настройте таймауты — время ожидания ответа сервиса в миллисекундах, по истечении которого платформа отправит повторный запрос.
  7. Нажмите Сохранить.
примечание

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

Пример

При количестве попыток 3 и таймаутах [30, 100] поведение системы будет таким:

  1. Платформа получает запрос и передает его в ML-сервис.
  2. Если через 30 миллисекунд ответ сервиса не получен, отправляет запрос в другой инстанс (если он есть).
  3. Если еще через 70 миллисекунд (100 миллисекунд от изначального запроса) ответ все еще не получен, отправляет запрос еще раз.
  4. Если один из запросов завершился ошибкой, отправляет последний запрос.

Батчеризация

Батчеризация, то есть пакетная обработка запросов, повышает производительность системы и эффективность использования вычислительных ресурсов, особенно GPU. Платформа накапливает запросы до истечения заданного временного окна или достижения заданного размера батча, а затем отправляет его на обработку в сервис.

Предварительные условия

В сервисе должен быть реализован метод predictBatch, выполняющий обработку запросов в пакетном режиме. Если сервис разработан на основе MLP SDK, он предоставляет такой метод.

Сигнатура метода:


def predict_batch(self, data: List[BaseModel], config: BaseModel) -> List[BaseModel]

Где:

  • data — список объектов, содержащих данные для инференса.
  • config — конфигурация запроса.

Как настроить

  1. Выберите сервис и перейдите в Настройки.
  2. На вкладке Основные нажмите .
  3. Раскройте группу настроек Настройки батчеризации.
  4. Укажите максимальное количество запросов в батче.
  5. Чтобы не добавлять в батч слишком большие запросы, укажите максимальный размер запроса в байтах. Запросы свыше этого размера будут сразу переданы на обработку в сервис.
  6. Укажите максимальное время накопления батча в миллисекундах.
  7. Нажмите Сохранить.
предупреждение

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

Кэширование

Если сервис отвечает на вопросы, многие из которых повторяются, кэширование позволит мгновенно возвращать ответы, не нагружая сервис. Caila сначала проверяет наличие готового ответа в кэше, и только если не находит, передает запрос в сервис. Для формирования ключа объекта в кэше используется хэш от всех параметров запроса.

Предварительные условия

Для хранения кэша используется база данных MongoDB.

  1. Создайте базу в любом облачном сервисе, например Yandex Cloud, или обратитесь в поддержку для создания базы в Caila.
  2. Добавьте коллекцию для размещения кэша.

Как настроить

  1. Выберите сервис и перейдите в Настройки.

  2. На вкладке Основные нажмите .

  3. Раскройте группу настроек Кэширование.

  4. Активируйте переключатель.

  5. Укажите URL для соединения с MongoDB. Например:

    mongodb://user:password@mongourl:port/caila_model_cache

  6. Укажите имя коллекции.

  7. Укажите максимальное количество записей в кэше.

  8. Нажмите Сохранить.

Приоритетная очередь

Приоритет запроса можно повысить, чтобы платформа передала его в сервис быстрее остальных.

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

Как настроить

  1. Выберите сервис и перейдите в Настройки.

  2. На вкладке Основные нажмите .

  3. Раскройте группу настроек Приоритетная очередь.

  4. Активируйте переключатель.

  5. Укажите количество запросов для одновременной отправки в сервис.

    предупреждение

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

  6. Нажмите Сохранить.

  7. Передавайте приоритет в заголовке запроса Z-Priority. Значение должно быть целым числом. Чем больше число, тем выше приоритет запроса. По умолчанию приоритет равен 0.

    Например, платформа будет сначала передавать в сервис запросы с приоритетом Z-Priority: 1, затем запросы без указанного приоритета, а затем запросы с приоритетом Z-Priority: -1.