use*_*965 4 python amazon-web-services aws-lambda tensorflow tensorflow-lite
我正在尝试在 AWS Lambda 上托管一个我编译为 .tflite 的小模型。使用 tensorflow 网站上提供的 python 3.6 或 python 3.7 tflite 轮文件,我压缩了我的包/代码,然后上传到 S3 并链接到 lambda 并留出空间。但是,当我测试我的函数时,它在尝试加载 tflite 时崩溃了。最初,它无法加载共享对象文件。这是错误
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_predict': No module named '_interpreter_wrapper')
Run Code Online (Sandbox Code Playgroud)
我找到了这个共享对象文件并将其移动到本地目录中,然后又出现了另一个错误
Unable to import module 'lambda_predict': /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /var/task/_interpreter_wrapper.so)
Run Code Online (Sandbox Code Playgroud)
我的基本系统是 Ubuntu (Bionic Beaver) 这两个错误都来自导入 tflite
tpa*_*611 13
好的,我今天解决了这个问题。
我的 github 上 amazonlinux/aws lambda 的完整解决方案和编译依赖项:https : //github.com/tpaul1611/python_tflite_for_amazonlinux
所以问题是 aws lambda 在 amazonlinux 上运行,这显然需要与 tensorflow目前在其网站上提供的不同的 tflite _interpreter_wrapper编译。https://www.tensorflow.org/lite/guide/python
我的解决方案是使用 docker 和 tensorflow 在其 git repo 中提供的脚本在 amazonlinux 上本地编译它。 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/tools/pip_package
我创建了一个 Dockerfile:
FROM amazonlinux
WORKDIR /tflite
RUN yum groupinstall -y development
RUN yum install -y python3.7
RUN yum install -y python3-devel
RUN pip3 install numpy wheel
RUN git clone --branch v2.2.0-rc0 https://github.com/tensorflow/tensorflow.git
RUN sh ./tensorflow/tensorflow/lite/tools/pip_package/build_pip_package.sh
RUN pip3 install tensorflow/tensorflow/lite/tools/pip_package/gen/tflite_pip/python3/dist/tflite_runtime-2.2.0rc0-cp37-cp37m-linux_x86_64.whl
CMD tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)
然后运行以下命令:
docker build -t tflite_amazonlinux .
docker run -d --name=tflite_amazonlinux tflite_amazonlinux
docker cp tflite_amazonlinux:/usr/local/lib64/python3.7/site-packages .
docker stop tflite_amazonlinux
Run Code Online (Sandbox Code Playgroud)
这些命令输出一个名为site-packages的文件夹,其中包含为 amazonlinux 正确编译的 tflite python 依赖项,因此也包含 aws lambda。
如果您当前尝试在本地压缩并上传 zip,您的二进制文件可能无法在 lambda 运行的同一操作系统上运行。
您可能想按照 @Yann 的建议尝试 SAM,因为它可以为您构建部署包;但是,我不确定这是否可以获得您需要的正确二进制文件。
为了获得 lambda 正确的二进制文件,我通常会启动一个 ec2 实例,该实例的 ami 与 lambda 在后台使用的 ami 相同,然后将其下载到那里。然后可以导出到s3,下载到本地,然后打包。
有关在 lambda 上使用二进制文件的信息: https://aws.amazon.com/premiumsupport/knowledge-center/lambda-linux-binary-package/
有关 ec2 使用什么 ami 的信息:https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
| 归档时间: |
|
| 查看次数: |
1971 次 |
| 最近记录: |