Ошибка файловой системы AWS lambda только для чтения, использование образа docker для хранения модели ML

#amazon-web-services #docker #aws-lambda

Вопрос:

Я использую образ контейнера docker на лямбде для запуска своей модели ML. Моя лямбда — функция имеет триггер S3 для извлечения изображений. Я пытаюсь запустить свою лямбда-функцию, но получаю эту ошибку. Кто-нибудь, пожалуйста, может мне помочь?

снимок экрана с ошибкой

PS — теперь я знаю, что /tmp-единственный доступный для записи каталог в lambda, но как решить эту проблему с помощью этого?

Ответ №1:

Как упоминали другие, /tmp это единственный доступный для записи каталог в любых средах AWS Lambda, как с использованием контейнеров, так и без них.

Сказав это, вы должны переместить всю свою библиотеку (во время выполнения lambda-время сборки образа контейнера не работает) в этот каталог, чтобы все оставалось подключенным в библиотеке, а затем ссылаться на свой новый каталог библиотеки в среде пути к библиотеке для Lambda: LD_LIBRARY_PATH

Ссылка на ваш новый каталог библиотеки в среде пути к библиотеке для Lambda должна быть выполнена , потому что Lambda /opt/ по умолчанию просматривает каталог; и поскольку вы только что переместили свою библиотеку /tmp , вам также следует обновить LD_LIBRARY_PATH ее, чтобы она содержала это местоположение. Это можно сделать в файле Dockerfile:

 # Set the LD_LIBRARY_PATH
ENV LD_LIBRARY_PATH="/opt/my-lib-folder/:$LD_LIBRARY_PATH"
 

или во время выполнения Лямбды:

 os.environ['LD_LIBRARY_PATH'] = '/tmp/my-lib-folder:'   os.environ['LD_LIBRARY_PATH']

def lambda_handler(event, context):
   # your code ...
 

Если все еще есть проблемы, это может быть связано с проблемами связывания вашей библиотеки или с тем, что вы неправильно обновили свою LD_LIBRARY_PATH .

ПРАВКА: Как указал @rok, вы не можете перемещать свои библиотеки во время создания образа контейнера, поскольку /tmp AWS автоматически удалит папку.

Комментарии:

1. Я хочу добавить, что я только что столкнулся с той же проблемой, и перемещение библиотек в /tmp во время сборки образа недопустимо, потому что AWS очищает эту папку при запуске экземпляра, и вы получаете пустую папку и ошибку «файл не найден». Я не нашел никаких ссылок на это в документах, но я испытал это, и мое решение состояло в том, чтобы использовать папку tmp только во время выполнения лямбды.

2. @rok Я этого не знал, так что спасибо, что поделились этим! Лично мне никогда не приходилось перемещать библиотеки в свою /tmp папку, потому что мне никогда не требовалось, чтобы они были доступны для записи, но приятно знать, что это не сработает. Я исправлю свой ответ.

Ответ №2:

Файловая система в среде Lambda доступна только для чтения, за исключением /tmp каталога.

Комментарии:

1. Хорошо, так можно ли переместить easyocr (библиотеку, которая, как я полагаю, вызывает ошибку) в каталог /tmp, чтобы устранить эту ошибку?

Ответ №3:

Эта ошибка, похоже, заключается в том, что он пытается создать свои папки конфигурации/кэша и терпит неудачу. По сути, вам нужно указать переменную MPLCONFIGDIR среды для вашего контейнера и установить значение в каталог внутри /tmp, который доступен для записи.

Комментарии:

1. Я пробовал это, но это помогает только с предупреждающим сообщением, ошибка все еще сохраняется