基于函数计算 + TensorFlow 的 Serverless AI 推理

本文涉及的产品
简介: 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。

前言概述

本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。

1.1 DEMO 概述

image

通过上传一个猫或者狗的照片, 识别出这个照片里面的动物是猫还是狗

开通服务

免费开通函数计算, 按量付费,函数计算有很大的免费额度。

免费开通文件存储服务NAS, 按量付费

1.2 解决方案

image

如上图所示, 当多个用户通过对外提供的 url 访问推理服务时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。

1.3. Serverless 方案与传统自建服务方案对比

1.3.1 卓越的工程效率

自建服务 函数计算 Serverless
基础设施 需要用户采购和管理
开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署
学习上手成本 可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码即可

1.3.2 弹性伸缩免运维

自建服务 函数计算 Serverless
弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维
监控报警查询 ECS 级别的 metrics 提供更细粒度的函数执行情况,每次访问函数执行的 latency 和日志等, 更加完善的报警监控机制

1.3.3 更低的成本

  • 函数计算 (FC) 固有自动伸缩和负载均衡功能,用户不需要购买负载均衡 (SLB) 和弹性伸缩。
  • 具有明显波峰波谷的用户访问场景(比如只有部分时间段有请求,其他时间甚至没有请求),选择按需付费,只需为实际使用的计算资源付费。

对于明显波峰波谷或者稀疏调用具有低成本优势, 同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本,同时财务成本增长配合预付费也能保持平滑。

假设有一个在线计算服务,由于是CPU 密集型计算, 因此在这里我们将平均 CPU 利用率作为核心参考指标对成本,以一个月为周期,10台 C5 ECS 的总计算力为例,总的计算量约为 30% 场景下, 各解决方案 CPU 资源利用率使用情况示意图大致如下:

image

由上图预估出如下计费模型:

  • 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5
  • ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元,按量: 446.4 元
  • 包月10 Mbps 的 SLB: 526.52 元(这里做了一定的流量假设), 弹性伸缩免费
  • 饱和使用下,函数计算按量付费的一台机器成本约为按量付费 C5 ECS 的2 倍
平均CPU利用率 计算费用 SLB 总计
函数计算组合付费 >=80% 738+X(246.27x3+X) <= 738+X
按峰值预留ECS <=30% 2190(10x219) 526.52 >=2716.52
弹性伸缩延迟敏感 <=50% 1314(10x219x3/5) 526.52 >= 1840.52
弹性伸缩成本敏感 <=70% 938.57 (10x219x3/7) 526.52 >= 1465.09

注:

  1. 这里假设函数逻辑没有公网公网下行流量费用, 即使有也是一致的, 这里成本比较暂不参与
  2. 延时敏感,当 CPU 利用率大于等于 50% 就需要开始进行扩容,不然更来不及应对峰值
  3. 成本敏感,当 CPU 利用率大约 80% 即开始进行扩容, 能容受一定几率的超时或者5XX

上表中, 其中函数计算组合付费中的 X 为按需付费的成本价,假设按需付费的计算量占整个计算量的 10%,假设 CPU 利用率为100%, 对应上表,那么需要 3 台 ECS 的计算能力即可。因此 FC 按量付费的成本 X = 3x446.4x10%x2 = 267.84 ( FC 按量付费是按量 ECS 的2倍),这个时候函数计算组合付费总计 1005.8 元。 在这个模型预估里面, 只要 FC 按量付费占整个计算量小于 20%, 即使不考虑 SLB, 单纯考虑计算成本, 都是有一定优势的。

1.3.4. 小结

基于函数计算进行 AI 推理等 CPU 密集型的主要优势:

  1. 上手简单, 只专注业务逻辑开发, 极大提高工程开发效率。

    • 自建方案有太多学习和配置成本,如针对不同场景,ESS 需要做各种不同的参数配置
    • 系统环境的维护升级等
  2. 免运维,函数执行级别粒度的监控和告警。
  3. 毫秒级弹性扩容,保证弹性高可用,同时能覆盖延迟敏感和成本敏感类型。
  4. 在 CPU 密集型的计算场景下, 通过设置合理的组合计费模式, 在如下场景中具有成本优势:

    • 请求访问具有明显波峰波谷, 其他时间甚至没有请求
    • 有一定稳定的负载请求, 但是有部分时间段请求量突变剧烈

打包代码ZIP包和部署函数

开通服务

免费开通函数计算, 按量付费,函数计算有很大的免费额度。

免费开通文件存储服务NAS, 按量付费

2.1 安装第三方包到本地并上传到NAS

2.1.1 安装最新的Fun

  • 完成 Fun 的安装
  • 完成 Fun 的第一次配置

  Fun 安装配置指引

说明:后续关于安装依赖包和部署函数的具体操作也可以参考 FUN 操作简明视频教程 作为辅助。

2.1.2 Clone 工程 & Fun 一键安装第三方库到本地

  • git clone https://github.com/awesome-fc/cat-dog-classify.git
  • 可选操作: 复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息
  • 执行 fun install -v, fun 会根据 Funfile 中定义的逻辑安装相关的依赖包

    image

    root@66fb3ad27a4c: ls .fun/nas/auto-default/classify
    model  python
    root@66fb3ad27a4c: du -sm .fun
    697     .fun

根据 Funfile 的定义:

  • 将第三方库下载到 .fun/nas/auto-default/classify/python 目录下
  • 本地 model 目录移到 .fun/nas/auto-default/model 目录下

安装完成后,从这里我们看出, 函数计算引用的代码包解压之后已经达到了 670 M, 远超过 50M 代码包限制, 解决方案是 NAS 详情可以参考: 挂载NAS访问,幸运的是 FUN 工具一键解决了 nas 的配置和文件上传问题。

2.1.3. 将下载的依赖的第三方代码包上传到 NAS

fun nas init
fun nas info
fun nas sync
fun nas ls nas://classify:/mnt/auto/

依次执行这些命令,就将本地中的 .fun/nas/auto-default 中的第三方代码包和模型文件传到 NAS 中, 依次看下这几个命令的做了什么事情:

  • fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas
  • fun nas info: 可以查看本地 NAS 的目录位置, 对于此工程是 $(pwd)/.fun/nas/auto-default/classify
  • fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/classify)上传到 NAS 中的 classify 目录
  • fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS

登录 NAS 控制台 https://nas.console.aliyun.com 和 VPC 控制台 https://vpc.console.aliyun.com
可以观察到在指定的 region 上有 NAS 和 相应的 vpc 创建成功

2.2 本地调试函数

在 template.yml 中, 指定了这个函数是 http 类型的函数, 所以根据 fun 的提示:

Tips for next step
======================
* Invoke Event Function: fun local invoke
* Invoke Http Function: fun local start
* Build Http Function: fun build
* Deploy Resources: fun deploy

执行 fun local start, 本地就会启动一个 http server 来模拟函数的执行, 然后我们 client 端可以使用 postman, curl 或者浏览器, 比如对于本例:

image

image

2.3 部署函数到FC平台

本地调试OK 后,我们接下来将函数部署到云平台:

  1. 通过以下操作将函数部署到云平台:

    • 修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可,有两处地方需要更改

    image

    • 执行 fun deploy
  2. 登录控制台 https://fc.console.aliyun.com,可以看到 service 和 函数已经创建成功, 并且 service 也已经正确配置。
  3. 通过浏览器打开 Fun 临时生成的域名, 比如本例中的 12720569-1986114430573743.test.functioncompute.com

当然您再这里也可以修改yml中域名的设置, 不使用 Auto, 而使用您已有的域名, 中国国内的域名需要备案, 海外的则不需要

至此,就完成了一个 AI 推理的部署操作,在这里,我们发现第一次打开页面访问函数的时候,执行环境实例冷启动时间非常长, 如果是一个在线AI推理服务,对响应时间非常敏感,冷启动引起的毛刺对于这种类型的服务是不可接受的,下一小节我们讲解如何利用函数计算的预留模式来消除冷启动带来的负面影响。

使用预留模式消除冷启动毛刺

函数计算具有动态伸缩的特性, 根据并发请求量,自动弹性扩容出执行环境来执行环境,在这个典型的深度学习示例中,import keras 消耗的时间很长 , 在我们设置的 1 G 规格的函数中, 并发访问的时候耗时10s左右, 有时甚至20s+

start = time.time()
from keras.models import model_from_json
print("import keras time = ", time.time()-start)

3.1 函数计算设置预留

预留操作简明视频教程

image

image

一次压测结果

image
image

从上面图中我们可以看出,当函数执行的请求到来时,优先被调度到预留的实例中被执行, 这个时候是没有冷启动的,所以请求是没有毛刺的, 后面随着测试的压力不断增大(峰值TPS 达到 1184), 预留的实例不能满足调用函数的请求, 这个时候函数计算就自动进行按需扩容实例供函数执行,此时的调用就有冷启动的过程, 从上面我们可以看出,函数的最大 latency 时间甚至达到了 32s,如果这个web AP是延时敏感的,这个 latency 是不可接受的。

总结

  • 函数计算具有快速自动伸缩扩容能力
  • 预留模式很好地解决了冷启动中的毛刺问题
  • 开发简单易上手,只需要关注具体的代码逻辑, Fun 工具助您一键式部署运用
  • 函数计算具有很好监控设施, 您可以可视化观察您函数运行情况, 执行时间、内存等信息

image

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3天前
|
人工智能 监控 算法
函数计算助力领健信息为“看牙”注入 AI 活力
口腔治疗+函数计算=效率提升🚀 领健作为业界领先的口腔机构,面向口腔诊所提供正畸算法,但早期的算法部署遇到较多问题,因此在对比了阿里云的多个云产品之后,最终选择了函数计算。 通过将 GPU 计算负载放到函数计算,领健技术团队达到了很好的降本效果,相比早前的按月持有 GPU 资源,函数计算的费用降低了 90% 左右,并大大提升了使用体验,实现了前所未有的敏捷性和效率。
|
7天前
|
机器学习/深度学习 人工智能 算法
Python 与 TensorFlow2 生成式 AI(一)(4)
Python 与 TensorFlow2 生成式 AI(一)
37 0
|
7天前
|
机器学习/深度学习 人工智能 TensorFlow
Python 与 TensorFlow2 生成式 AI(一)(3)
Python 与 TensorFlow2 生成式 AI(一)
35 0
|
7天前
|
机器学习/深度学习 人工智能 算法
Python 与 TensorFlow2 生成式 AI(五)(3)
Python 与 TensorFlow2 生成式 AI(五)
29 0
|
7天前
|
机器学习/深度学习 人工智能 算法
Python 与 TensorFlow2 生成式 AI(五)(2)
Python 与 TensorFlow2 生成式 AI(五)
24 0
|
7天前
|
机器学习/深度学习 存储 人工智能
Python 与 TensorFlow2 生成式 AI(五)(1)
Python 与 TensorFlow2 生成式 AI(五)
32 0
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
OpenAI 推出 GPT-4o,免费向所有人提供GPT-4级别的AI ,可以实时对音频、视觉和文本进行推理,附使用详细指南
GPT-4o不仅提供与GPT-4同等程度的模型能力,推理速度还更快,还能提供同时理解文本、图像、音频等内容的多模态能力,无论你是付费用户,还是免费用户,都能通过它体验GPT-4了
50 1
|
9天前
|
运维 Serverless 应用服务中间件
Serverless 应用引擎产品使用之在阿里云Serverless中函数计算FC nginx 部署上去之后放置静态页面如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
268 0
|
9天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使数据库和阿里云函数计算位于同一个内网中如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
1069 0
Serverless 应用引擎产品使用之在阿里函数计算中,使数据库和阿里云函数计算位于同一个内网中如何解决
|
9天前
|
运维 监控 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,在response.send()之后继续执行其它代码如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
185 0

热门文章

最新文章

相关产品

  • 函数计算