gpt4 book ai didi

amazon-web-services - 减少 aws lambda 部署的 scipy 和 numpy 的大小

转载 作者:行者123 更新时间:2023-12-03 15:15:05 27 4
gpt4 key购买 nike

我正在尝试在 aws lambda 上部署一个 python 应用程序。它有几个大型的 python 依赖项,最大的是 scipy 和 numpy。结果是我的应用程序明显大于允许的 250MB。

在试图找到减小尺寸的方法时,我遇到了此处详述的方法:

https://github.com/szelenka/shrink-linalg

本质上,在使用 pip 安装时,在 scipy & numpy cython 编译期间,可以将标志传递给 c 编译器,这将忽略已编译的 c 二进制文件中的调试信息。结果是 scipy 和 numpy 缩小到原始大小的 50% 左右。我能够在本地运行它(ubuntu 16.04),并且创建了没有问题的二进制文件。使用的命令是:

CFLAGS="-g0 -I/usr/include:/usr/local/include -L/usr/lib:/usr/local/lib" pip install numpy scipy --compile --no-cache-dir --global-option=build_ext --global-option="-j 4"

问题在于,为了在 aws lambda 上运行,二进制文件必须在与运行 lambda 的环境类似的环境中编译。可以在此处找到环境图像:

https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html

在 ec2 实例上加载图像后,我尝试在安装一些依赖项后运行相同的 pip 安装
sudo yum install python36 python3-devel blas-devel atlas atlas-devel lapack-devel atlas-sse3-devel gcc gcc-64 gcc-gfortran gcc64-gfortran libgfortran, gcc-c++ openblas-devel python36-virtualenv

numpy 编译得很好,但 scipy 不是。 cython 没有引起任何问题,但 fortran 编译是。我收到以下错误:
error: Command "/usr/bin/gfortran -Wall -g -Wall -g -shared build/temp.linux-x86_64-3.6/build/src.linux-x86_64-3.6/scipy/integrate/_test_odeint_bandedmodule.o build/temp.linux-x86_64-3.6/build/src.linux-x86_64-3.6/build/src.linux-x86_64-3.6/scipy/integrate/fortranobject.o build/temp.linux-x86_64-3.6/scipy/integrate/tests/banded5x5.o build/temp.linux-x86_64-3.6/build/src.linux-x86_64-3.6/scipy/integrate/_test_odeint_banded-f2pywrappers.o -L/usr/lib64/atlas -L/usr/lib/gcc/x86_64-amazon-linux/6.4.1 -L/usr/lib/gcc/x86_64-amazon-linux/6.4.1 -L/usr/lib64 -Lbuild/temp.linux-x86_64-3.6 -llsoda -lmach -llapack -lptf77blas -lptcblas -latlas -lptf77blas -lptcblas -lpython3.6m -lgfortran -o build/lib.linux-x86_64-3.6/scipy/integrate/_test_odeint_banded.cpython-36m-x86_64-linux-gnu.so -Wl,--version-script=build/temp.linux-x86_64-3.6/link-version-scipy.integrate._test_odeint_banded.map" failed with exit status 1

我尝试重新安装 gfortran 以及整个 gcc 集合,但没有任何运气。不幸的是,我对 fortran 编译器的经验非常有限。如果有人有任何想法,或者有 C 二进制文件的编译版本,我将不胜感激。

最佳答案

使用 serverless-python-requirements包裹在 Serverless帮助我简化了整个过程并减小了包装尺寸。肯定会建议检查一下。
This is the guide that I followed
Serverless python-requirements plugin
请务必留下 strip标志到 false避免剥离导致问题“ELF 加载命令地址/偏移量未正确对齐”的二进制文件,
这是我最后的 serverless.yml出来的结果给了我我想将 sklearn + cv2 打包为一个层的结果:

custom:
pythonRequirements:
dockerizePip: true
useDownloadCache: true
useStaticCache: false
slim: true
strip: false
layer:
name: ${self:provider.stage}-cv2-sklearn
description: Python requirements lambda layer
compatibleRuntimes:
- python3.8
allowedAccounts:
- '*'

关于amazon-web-services - 减少 aws lambda 部署的 scipy 和 numpy 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53274271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com