使用函数计算三步实现深度学习 AI 推理在线服务

目前深度学习应用广发, 其中 AI 推理的在线服务是其中一个重要的可落地的应用场景。本文将为大家介绍使用函数计算部署深度学习 AI 推理的最佳实践,  其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。

1.1 DEMO 概述

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

  • DEMO 示例效果入口: http://sz.mofangdegisn.cn
  • DEMO 示例工程地址: https://github.com/awesome-fc/cat-dog-classify

开通服务

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

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

1.2 解决方案

如上图所示, 当多个用户通过对外提供的 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 资源利用率使用情况示意图大致如下:

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

  • 函数计算预付费 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.27*3+X)<= 738+X
按峰值预留ECS<=30%2190(10*219)526.52>=2716.52
弹性伸缩延迟敏感<=50%1314(102193/5)526.52>= 1840.52
弹性伸缩成本敏感<=70%938.57 (102193/7)526.52>= 1465.09

注:

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

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

1.3.4. 小结

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

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

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

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

打包代码ZIP包和部署函数

FUN 操作简明视频教程

开通服务

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

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

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

2.1.1 安装最新的Fun

  • 安装版本为8.x 最新版或者10.x 、12.x nodejs
  • 安装 funcraf

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 中定义的逻辑安装相关的依赖包

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 或者浏览器, 比如对于本例:

2.3 部署函数到FC平台

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

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

fun deploy

注意:  template.yml 注释的部分为自定义域名的配置, 如果想在 fun deploy 中完成这个部署工作:

  • 先去域名解析, 比如在示例中, 将域名 sz.mofangdegisn.cn 解析到 123456.cn-hangzhou.fc.aliyuncs.com, 对应的域名、accountId 和 region 修改成自己的
  • 去掉 template.yml 中的注释, 修改成自己的域名
  • 执行 fun deploy

这个时候如果没有自定义域名, 直接通过浏览器访问访问http trigger 的url, 比如 https://123456.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/classify/cat-dog/ 会被强制下载.

原因:https://help.aliyun.com/knowledge_detail/56103.html#HTTP-Trigger-compulsory-header

登录控制台https://fc.console.aliyun.com,可以看到service 和 函数已经创建成功, 并且 service 也已经正确配置。

在这里,我们发现第一次打开页面访问函数的时候,执行环境实例冷启动时间非常长, 如果是一个在线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 函数计算设置预留

预留操作简明视频教程

  • 在 FC 控制台,发布版本,并且基于该版本创建别名 prod,并且基于别名 prod 设置预留, 操作过程请参考:https://help.aliyun.com/document_detail/138103.html
  • 将该函数的 http trigger 和 自定义域名的设置执行 prod 版本

一次压测结果

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

总结

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


原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仅用 2 年过渡到自研 ARM 芯片,苹果的底气从何而来?

作者 | Steven Sinofsky译者 | 弯月&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;今年 WWDC 2020 上&#xff0c;苹果宣布自研 ARM 芯片——Apple Silicon&#xff0c;对于苹果而言&#xff0c;Apple Silicon很…

Flink SQL 如何实现数据流的 Join?

无论在 OLAP 还是 OLTP 领域&#xff0c;Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句。对于离线计算而言&#xff0c;经过数据库领域多年的积累&#xff0c;Join 语义以及实现已经十分成熟&#xff0c;然而对于近年来刚兴起的 Streaming SQL 来说 Join 却处于刚起步…

小程序开发(9)-之地图组件map、导航

map用起来真的一言难尽呀&#xff0c;按照官方文档说是可以支持传入一个setting&#xff0c;来配置所以的属性的。。&#xff0c;但是我试了没效果&#xff0c;经纬度更新了&#xff0c;调试代码看到的wxml经纬度也变化了&#xff0c;但是map上的经纬度却没变化&#xff0c;后来…

惊魂48小时,阿里工程师如何紧急定位线上内存泄露?

阿里妹导读&#xff1a;云计算场景下的大规模分布式系统中&#xff0c;网络异常、磁盘IO异常、时钟跳变、操作系统异常乃至软件本身可能存在bugs等&#xff0c;均给分布式系统正确运行带来了挑战。持续的监控报警完善是打造稳定高可用分布式系统过程中非常重要的工作&#xff0…

我的程序跑了 60 多小时,就是为了让你看一眼 JDK 的 BUG 导致的内存泄漏

来源 | why技术荒腔走板大家好&#xff0c;我是 why&#xff0c;老规矩&#xff0c;先来一个简短的荒腔走板&#xff0c;给冰冷的技术文注入一丝色彩。上面图片中这个正在奔跑的少年&#xff0c;是正在参加校运会的我&#xff0c;那一年我 18 岁&#xff0c;高三。参加的项目是…

Flutter+Serverless端到端研发架构实践

Serverless&#xff08;无服务架构&#xff09;被誉为下一代云计算&#xff0c;自概念推出以来&#xff0c;因为能带来研发交付速度提升与成本的降低在业内异常火爆。闲鱼客户端基于Flutter进行架构演进与创新&#xff0c;通过Flutter统一Android和iOS双端提升研发效能之后&…

Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)

导读&#xff1a;从问题本身出发&#xff0c;不局限于 Go 语言&#xff0c;探讨服务器中常常遇到的问题&#xff0c;最后回到 Go 如何解决这些问题&#xff0c;为大家提供 Go 开发的关键技术指南。我们将以系列文章的形式推出《Go 开发的关键技术指南》&#xff0c;共有 4 篇文…

小程序开发(10)-之热力图解决方案、手绘图

原本是用别人用canvas画的热力图的https://github.com/rover95/wxapp-heatmap&#xff0c;但是问题有点多&#xff0c;热力图的颜色&#xff0c;卡顿、叠加、渲染失败等&#xff0c;所以就弃用了&#xff0c;也找了好久&#xff0c;好像大家都没有更好的提议&#xff0c;自己也…

windows下mysql8.x配置远程连接

文章目录1. 现象2. 登录mysql3.先查看下当前的用户&#xff0c;具有什么权限4.创建新的用户之后再查权限5. 赋予权限6.刷新权限&#xff0c;然后就可远程访问了1. 现象 Host ‘192.168.0.103’ is not allowed to connect to this MySQL server mysql8.x配置远程连接 2. 登…

Spark整合Ray思路漫谈

什么是Ray 之前花了大概两到三天把Ray相关的论文&#xff0c;官网文档看了一遍&#xff0c;同时特意去找了一些中文资料看Ray当前在国内的发展情况&#xff08;以及目前国内大部分人对Ray的认知程度&#xff09;。 先来简单介绍下我对Ray的认知。 首先基因很重要&#xff0c…

建设数据中台之前,建议先看这份企业数据能力测评 | 大咖说中台

作者 | 耿立超来源 | 《大数据平台架构与原型实现&#xff1a;数据中台建设实战》“我的企业目前在数据应用上处于什么水平&#xff1f;接下来应该朝哪个方向努力&#xff1f;”本文试图帮助企业决策者和IT负责人解答这一问题。今天&#xff0c;数据之于企业的重要性已经勿须多…

如何让 python 处理速度翻倍?内含代码

阿里妹导读&#xff1a;作为在日常开发生产中非常实用的语言&#xff0c;有必要掌握一些python用法&#xff0c;比如爬虫、网络请求等场景&#xff0c;很是实用。但python是单线程的&#xff0c;如何提高python的处理速度&#xff0c;是一个很重要的问题&#xff0c;这个问题的…

Zipkin 存储追踪数据至 MySQL

下载zipkin-mysql数据库脚本 https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/mysql-v1/src/main/resources 创建数据库名称为zipkin&#xff0c;字符集编码&#xff1a;utf8mb4 初始化脚本 -- -- Copyright 2015-2019 The OpenZipkin Authors -- -- Licen…

Spring Cloud Alibaba 新一代微服务解决方案

本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇&#xff0c; 每期文章会在公众号「架构进化论」进行首发更新&#xff0c;欢迎关注。 1、Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案&#xff0c;是阿里巴巴开源中间件…

它估值25亿!被马云领投,是华为“老战友”,网友:也许股价能超茅台!

最近一条新闻被炒的沸沸扬扬&#xff1a;十年以来中国最大IPO&#xff0c;中芯国际将融资532亿元&#xff01;何为IPO&#xff1f;翻译即为一家公司第一次向全社会公开售出它的股份。买的人越多&#xff0c;代表着社会对其信心越大。为什么2020年&#xff0c;能爆发这样1场最大…

RabbitMQ 最新版安装 (Linux环境)

文章目录一、Erlang1. Erlang下载2. Erlang 上传并解压3. 验证rabbitmq依赖是否安装4. 安装rabbitmq依赖5. Erlang 编译、安装6. Erlang 配置环境变量7. Erlang 验证二、RabbitMQ2.1. RabbitMQ 下载2.2. RabbitMQ 上传并解压2.3. RabbitMQ 配置2.4. 配置环境变2.5. 启动 Rabbit…

双11 背后的全链路可观测性:阿里巴巴鹰眼在“云原生时代”的全面升级

导读&#xff1a;作为一支深耕多年链路追踪技术 (Tracing) 与性能管理服务 (APM) 的团队&#xff0c;阿里巴巴中间件鹰眼团队的工程师们见证了阿里巴巴基础架构的多次升级&#xff0c;每一次的架构升级都会对系统可观测性能力 (Observability) 带来巨大挑战&#xff0c;而这次的…

一切转型始于数据和模型 | 2020 MATLAB EXPO 中国线上用户大会:即将上线

2020 MATLAB EXPO 中国线上用户大会一切转型始于数据和模型2020 年 7 月 21-24 日 | 线上直播MATLAB 和 Simulink&#xff0c;作为业界普遍使用的科学计算与模型仿真软件&#xff0c;已被全球的工程师和科学家们广泛应用于加快汽车、航空、电子、金融服务、生物医药以及其他行业…

Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

从编程开发的角度来说&#xff0c;Apache Dubbo &#xff08;以下简称 Dubbo &#xff09;首先是一款 RPC 服务框架&#xff0c;它最大的优势在于提供了面向接口代理的服务编程模型&#xff0c;对开发者屏蔽了底层的远程通信细节。同时 Dubbo 也是一款服务治理框架&#xff0c;…

Zipkin 基于MQ存 储链路信息至 MySQL

RabbitMQ 最新版安装 (Linux环境) https://gblfy.blog.csdn.net/article/details/120498390 启动rabbitmq 队列是空的 数据库表是无数据的 启动nacos 应用集成rabbitMQ 父工程导入依赖 <!-- 消息队列通用依赖 --><dependency><groupId>org.springframewo…