Сжатие AWS пакета развертывания Lambda с CFLAGS и PIP для соответствия sklearn - PullRequest
1 голос
/ 06 марта 2020

Я загружаю маринованную модель машинного обучения с помощью моего Lambda-обработчика, поэтому мне нужно sklearn (я получаю «ModuleNotFoundError: нет модуля с именем« sklearn », если он не включен)

Поэтому я создал новое развертывание» пакет в Docker со склеарном.

Но когда я попытался загрузить новый файл lambda.zip, я не смог сохранить функцию lambda. Я получаю сообщение об ошибке: размер распакованного файла должен быть меньше, чем 262144000 байт

. Я сделал поиск в Google и нашел два предложения: (1) с использованием CLFAG с PIP и (2) с использованием Lambda Слои .

Не думаю, что слои будут работать. Перемещение частей моего пакета развертывания в слои не приведет к уменьшению общего размера (и в AWS документации указано «общий размер функции в разархивированном виде, и все слои не могут превышать ограничение на размер разархивированного пакета развертывания, равное 250 МБ ".

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

Я пытаюсь добавить флаги: -Os -g0 -Wl,--strip-all

Pre-CLFAGS моя docker команда pip была: pip3 install requests pandas s3fs datetime bs4 sklearn -t ./

Сначала я попробовал: pip3 install requests pandas s3fs datetime bs4 sklearn -t -Os -g0 -Wl,--strip-all ./

Это привело к ошибкам из-за разновидности "no such option: -g"

Тогда я попробовал CFLAGS = -Os -g0 -Wl,--strip-all pip3 install requests pandas s3fs datetime bs4 sklearn -t ./ и CFLAGS = -Os -g0 -Wl,--strip-all

Но они выдавали ошибку "CFLAGS: команда не найдена"

Может кто-нибудь помочь мне понять, как использовать CFLAGS?

Кроме того, я знаком с поговоркой «нищие не могут быть выбирающими», поэтому любой совет будет оценен.

Тем не менее, я немного новичок, так что если вы может помочь мне с CFLAGS в контексте моего Docker рабочего процесса пакета развертывания, это было бы очень ценно. * 10 40 *

Мой docker рабочий процесс:

  1. docker run -it olivierhervieu / amazon linux -python36-onbuild
  2. mkdir deploy
  3. cd deploy
  4. запросы на установку pip3 pandas s3fs datetime bs4 sklearn -t ./
  5. zip -r lambda.zip *

1 Ответ

1 голос
/ 09 марта 2020

Это своего рода ответ (я смог сжать пакет развертывания и развернуть Lambda), а не ответ (я все еще не знаю, как использовать CFLAGS).

Многие поиски в конечном итоге привели меня к этой статье , в которой содержалась ссылка на этот список модулей, предустановленных в AWS Lambda Python окружающая обстановка.

Мой пакет развертывания содержал несколько модулей, которые уже существуют в среде AWS Lambda и, следовательно, не должны включаться в пакеты развертывания.

Модули, которые сэкономили больше всего места для меня, были Boto3 и Botocore. Я не добавил их явно в моей среде Docker, но они все равно попали в мой пакет развертывания (я предполагаю, что S3FS зависит от этих модулей и при установке S3FS они также добавляются).

Мне также удалось удалить множество небольших модулей (datetime, dateutil, documentstils, six и т. Д. c). После удаления этих модулей мой пакет находился под пределом 250 МБ, и я смог развернуть.

Если бы я все еще не был ограничен - я не был уверен, будет ли этого достаточно - я собирался попробовать другое предложение из приведенной выше статьи: удаление файлов .py из пакета развертывания (вам не нужны файлы .py c и .py).

Надеюсь, это поможет с размером пакета развертывания Lambda!

...