AWS Lambda с использованием пакета lightFM - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть функция AWS Lambda, использующая python и lightFM для получения рекомендаций по продукту. Он структурирован следующим образом:

  • Загрузка модели lightFM с использованием маринада
  • Получение параметров через AWS API Gateway
  • Выполняет вывод по полученным параметрам
  • Вернуть наиболее вероятные продукты этому конкретному пользователю

Проблема заключается в том, что при вызове метода «прогнозировать» из класса LightFM он завершает процесс со следующей ошибкой в ​​AWS CloudWatch без трассировки стека:

REPORT RequestId: 31be3ec0-b04a-11e8-9805-e5d84a21cf93  Duration: 180.45 ms Billed Duration: 200 ms Memory Size: 1024 MB    Max Memory Used: 162 MB   
RequestId: 31be3ec0-b04a-11e8-9805-e5d84a21cf93 Process exited before completing request

Что еще хуже, иногда функция Lambda работает идеально.

Эту ошибку можно вызвать один раз, посылая множество запросов к функции Lambda последовательно асинхронно (если все вызовы синхронны, ошибки нет).

И после того, как в первый раз выдает ошибку, он перестает работать, пока я снова не загрузю функцию Lambda и не внесу некоторые изменения в конфигурацию памяти функции Lambda.

Кто-нибудь знает, есть ли проблемы с Cython и Pickle, или что-то подобное? Любая помощь приветствуется. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

0 голосов
/ 05 сентября 2018

Линия,

Процесс завершен до завершения запроса

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

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

Способ, как правило, исправить это, используя обещание и ждать определенное время, обрабатывать время ожидания и вызывать context.done или обратный вызов для завершения функции.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...