[AWS] Deploy Tensorflow for AWS Lambda
这里提到一个概念:AWS Lambda Layers
1. 使用AWS Lambda 的“层 (Layer) ”功能实现依赖包管理
2. AWS lambda with OpenCV via Layers 上集
3. Image processing - OpenCV with AWS Lambda via Layer 下集
一、何为 '层'
现在 AWS Lambda 新增了“层( Layer )” 功能使得可以单独上传并集中管理 Lambda 的依赖包了。
可共享:可以跨 AWS 账户共享代码和依赖包,可以通过 Policy 控制只共享给某个账户,或者共享给所有账户都能分享你的代码成果。
-
创建“layer”
注意目录结构, 1) python 的要放在 python 目录下,2) 然后对 python 目录进行 zip 。
所以新建一个 python 目录,打包后的目录结构是这样的:
share_package.zip
python/test2.py
注意:打包的目录结构有“规定”!要按照规定打包。
然后 "上传zip包" 即可,可以看到若干版本。
-
引用“layer”
Lambda函数设置时,选择层,并指定对应的版本。
二、OpenCV Layer
-
构建zip
创建一个EC2,有了纯净的开发环境。
先按照常规模式安装 opencv-python。
(1) 安装依赖以及基本packages。
sudo apt install python3-pip
sudo apt install awscli
(2) 安装到指定的路径,待后续打包。
~$ mkdir -p build/python/lib/python3.6/site-packages ~$ pip3 install opencv-python -t build/python/lib/python3.6/site-packages --system
安装后的文件们。
(3) 打包 得到 package.zip。
~/build$ sudo apt install zip ~/build$ zip -r package.zip .
~/build$ ls
package.zip python
-
上传s3
建立一个s3 bucket: layers-opencv,然后上传zip到bucket上。
[可选]
加上ec2的s3可访问权限。
Roles --> EC2 --> policies (Amazons3FullAccess) --> 创建了一个 role。
-
配置Layer
上传 zip 到 layer(name: opencv-layer),Layer configuration 如下。这是一个公共的layer。
-
创建Function
权限设置(name: opencv-lambda),Lambda要有 “可读 from s3” 的permissions。
-
添加layer到Function
点击“Add a layer”按键,添加后即可使用导入:
import cv
-
实现Function
实现正常cv的编程。
Serverless Deep Learning with TensorFlow and AWS Lambda
实践一
Ref: https://www.youtube.com/playlist?list=PLTgRMOcmRb3N2LnfIddBi74FSt-xa_m7K
Ref: https://subscription.packtpub.com/video/big_data_and_business_intelligence/9781789618679【video book】
该链接意义不大,sqs 和 step function 可以瞧一瞧。
大概的思路:讲tf的zip上传到s3,然后在lambda上指定zip的位置。
实践二
Ref: 如何利用 AWS Lambda 和 Tensorflow 部署深度学习模型
涉及以下 AWS 服务:
- AWS Lambda、
- Amazon Simple Storage Service (S3)、
- AWS CloudFormation、
- Amazon CloudWatch
- AWS Identity and Access Management (IAM)。
安装tf等,可运行如下程序:
classify_image.py
imagenet/
----classify_image_graph_def.pb
----imagenet_2012_challenge_label_map_proto.pbtxt
----imagenet_synset_to_human_label_map.txt
----LICENSE
/* implement */