AWS Lambda долго работает http запросов

У меня есть лямбда-функция AWS, которая вызывает функцию глубокого обучения по алгоритму, выполняет некоторую постобработку результатов и затем возвращает некоторые данные. Algorithmia предоставляет Python-клиент, который я использую, который немного упрощает отправку запроса в алгоритм на платформе Algorithmia.

Проблема заключается в следующем: когда функция Algorithmia не вызывается некоторое время, она выгружается, и первый вызов для ее разогрева (холодный запуск) занимает некоторое время, возможно, 30 секунд. Если моя лямбда-функция будет ожидать ответа в течение 30 секунд всякий раз, когда она запускает функцию алгоритма с холодного запуска, это будет очень дорого и расточительно.

Есть ли какой-нибудь способ отправить HTTP-запрос в Lambda, и когда запрос будет завершен, результаты будут переданы в новую функцию Lambda, чтобы не требовать, чтобы функция Lambda ожидала все время и тратила ресурсы? Я бы не ожидал, так как не уверен, как это будет работать на практике - есть ли у кого-нибудь другие идеи относительно того, как избежать ожидания ответа и тратить ресурсы Lambda?

Редактировать: В большинстве случаев (за исключением тех случаев, когда алгоритм Algorithmia загружается с "холодного старта", очевидно, что задержка является проблемой, и я не могу позволить себе увеличить задержку, выполняя какой-то обходной метод с функцией Algorithmia, записывая свою реакцию на S3 (например), а затем запуск функции лямбда.

2 ответа

Многие функции алгоритма, которые выводят файл, позволяют вам указать выходное местоположение (часто output параметр ввода JSON). Если это предположение верно для вашего случая, то вы можете сделать так, чтобы функция Algorithmia записывала напрямую в сегмент S3, а S3 запускала отдельную лямбда-функцию. Процесс будет выглядеть так:

  • Добавьте источник данных S3 в свою учетную запись Algorithmia и настройте разрешения в соответствии с вашими потребностями.

  • При вызове алгоритма установите выходной параметр для использования этого источника данных S3, например "output": "s3://algorithm-name/sample-0001.png"

  • Сконфигурируйте клиент Python Algorithmia, чтобы игнорировать вывод. Это приводит к немедленному возвращению запроса вместо ожидания завершения функции:

from Algorithmia.algorithm import OutputType

client.algo("username/algoname")
    .set_options(output=OutputType.void)
    .pipe(input)

Вы можете создать лямбда-функцию только для того, чтобы время от времени вызывать Algorithmia API, просто чтобы "согреться" для вашей основной функции обработки. Вы можете использовать Lambda запланированное событие для этого.

Другие вопросы по тегам