基于函数计算实现AI推理

本场景基于函数计算建立一个TensorFlow Serverless AI推理平台。

场景体验目标

本场景将介绍使用函数计算产品 Function Compute 部署深度学习 AI 推理平台的最佳实践,基于函数计算 Function Compute 建立一个TensorFlow Serverless AI 推理平台。

让人工智能领域开发者可以更专注于算法模型的训练与业务逻辑的开发,将计算集群的运维交予函数计算处理,提高工作效率。

最终效果:通过上传一个猫或狗的照片, 识别出这个照片里面的动物是猫还是狗。

背景知识

什么是函数计算 Function Compute?

函数计算 Function Compute 是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询、性能监控和报警等功能。函数计算帮助您无需管理服务器(Serverless),仅专注于函数代码就能快速搭建应用。函数计算能够弹性地伸缩,您只需要按使用量付费。

基于函数计算的 Serverless 方案与传统自建服务方案对比

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

弹性伸缩免运维

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

更低的成本

  • 函数计算 (FC) 固有自动伸缩和负载均衡功能,用户不需要购买负载均衡 (SLB) 和弹性伸缩。
  • 具有明显波峰波谷的用户访问场景(比如只有部分时间段有请求,其他时间甚至没有请求),选择按需付费,只需为实际使用的计算资源付费。
对于明显波峰波谷或者稀疏调用具有低成本优势, 同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本,同时财务成本增长配合预付费也能保持平滑。

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

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

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

  • 自建方案有太多学习和配置成本,如针对不同场景,ESS 需要做各种不同的参数配置
  • 系统环境的维护升级等。

2. 免运维,函数执行级别粒度的监控和告警。

3. 毫秒级弹性扩容,保证弹性高可用,同时能覆盖延迟敏感和成本敏感类型。

4. 在 CPU 密集型的计算场景下, 通过设置合理的组合计费模式, 在如下场景中具有成本优势:

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

实验详情

连接ECS服务器

1.打开系统自带的终端工具。

  • Windows:CMD或Powershell。
  • MAC:Terminal。

2.在终端中输入连接命令ssh [username]@[ipaddress]。您需要将其中的username和ipaddress替换为第1小节中创建的ECS服务器的登录名和公网地址。例如:

ssh root@123.123.123.123

命令显示结果如下:

3.输入yes。

4.同意继续后将会提示输入登录密码。 密码为已创建的云服务的ECS的登录密码。

登录成功后会显示如下信息。

开通函数计算和日志服务

1.在页面左侧资源栏点击 一键复制登录url,打开浏览器隐身窗口(无痕模式)输入已复制的登录链接。

2.在控制台登录页面,输入云产品资源提供的 子用户名称 和 子用户密码 ,并点击 【登录】 。

3.在阿里云管理控制台,点击顶部【产品与服务】 ,然后点击【函数计算】 ,进入服务开通页面。

4.选择资源提供的 地域 ,勾选函数计算服务协议,点击【立即开通】。

开通成功页面如下。

5.  同理,开通日志服务。

开通成功页面如下。

安装Fun工具

Fun 是一个用于支持Serverless应用部署的工具,能帮助您便捷地管理函数计算、API 网关和日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建和部署操作。

1.将Fun的安装包下载到本地。请将下面的FUN_VERSION变量的值设置为最新版本号,最新版本号请参见Releases。以下操作将在ECS服务器上安装和配置Fun。

FUN_VERSION="v3.6.1"
curl -o fun-linux.zip https://gosspublic.alicdn.com/fun/fun-$FUN_VERSION-linux.zip

2.安装解压工具unzip,并使用unzip将下载的Fun安装包解压到当前目录。

yum -y install unzip
unzip fun-linux.zip

3.将解压出来的可执行文件移动到系统路径。

mv fun-*-linux /usr/local/bin/fun

4.配置Fun关联的阿里云账号和调用SDK的超时时间等信息。

fun config

请参考以下信息输入您的阿里云账号ID、AccessKeyID和AccessKey密钥等信息。

  • Aliyun Account ID:子用户名称中@符号后面部分就是给您分配的主账号ID,例如u-zftb79nc@105997185439****中包含的账号ID为105997185439****
  • Aliyun Access Key ID和Aliyun Access Key Secret:请使用平台提供给您的子账号AK ID和AK Secret。

  • The timeout in seconds for each SDK client invoking:建议将超时时间设置长一点(例如10000),防止在上传部署包时发生超时中断。

正确设置如下所示:

安装Docker

1.安装Docker的依赖库。

yum install -y yum-utils device-mapper-persistent-data lvm2

2.添加docker-ce的软件源信息。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装docker-ce。

yum makecache fast
yum -y install docker-ce

4.启动Docker服务。

systemctl start docker

创建NAS文件系统挂载点

1.返回管理控制台,搜索NAS,然后单击【文件存储NAS】,登录NAS控制台。

2.选择【文件系统】 > 【文件系统列表】。

3.选择资源所在地域,找到资源信息栏中的NAS文件系统ID对应的文件系统,单击【更多】 > 【添加挂载点】。

4.在【添加挂载点】页面,配置如下参数。

5.查看挂载点地址,如下图。

下载项目代码

1.安装Git工具并使用Git克隆项目代码到本地。

yum -y install git
git clone https://github.com/awesome-fc/cat-dog-classify.git

2.编辑项目中FUN的部署模板文件template.yml,修改日志服务项目名称和NAS存储挂载配置。

a. 使用vim打开模板文件。

cd cat-dog-classify
vim template.yml

b. 输入以下命令全局替换日志服务项目名称。

:%s/log-ai-pro/log-ai-test/g

命令中log-ai-test为修改后的项目名称,您可以替换为您的自定义项目名称。

c. 修改NAS挂载配置。默认auto方式将会自动创建NAS文件系统,这里我们修改填写为平台预创建好的NAS文件系统的信息。

      VpcConfig:
        VpcId: 'vpc-uf6u8*****zf1r4'
        VSwitchIds: [ 'vsw-uf6******038fy' ]
        SecurityGroupId: 'sg-uf6e******w6qz'
      NasConfig:
        UserId: 10003
        GroupId: 10003
        MountPoints:
          - ServerAddr: '33****u83.cn-shanghai.nas.aliyuncs.com:/'
        MountDir: '/mnt/auto'

修改的参数说明如下:

  • VpcConfig中的VpcId、VSwitchId和SecurityGroupId信息请登录ECS控制台后在实例详情页查看。

  • ServerAddr的值修改为第6小节中的挂载点地址。

修改后如下图所示:

将依赖文件上传到NAS

1.执行以下命令初始化NAS。

fun nas init

2.查看本地NAS的目录位置。

fun nas info

命令输出如下所示:

3.执行以下命令安装相关依赖。

fun install -v

命令执行成功结果如下所示。

该命令将根据Funfile文件中的定义:

  • 将依赖下载到.fun/nas/auto-default/classify/python目录中。
  • 将model中的模型文件拷贝到.fun/nas/auto-default/classify/model/目录中。

4.将本地NAS目录同步到阿里云NAS存储中。

fun nas sync

命令执行结果如下所示。

5.查看文件是否上传到远程NAS目录。

fun nas ls nas://classify:/mnt/auto/

部署到函数计算平台

执行以下操作将函数部署到函数计算平台:

fun deploy -y

执行结果如下图所示,图中19176540-18576685985*****.test.functioncompute.com为函数计算平台分配的临时域名,有效期10天,每天有1000次的调用限制。

测试预测服务

1.部署完成后,等待30秒钟左右,在浏览器打开临时域名,如下图所示。

2.上传一张猫或狗的图片。

3.单击【Predict】按钮,查看预测识别结果。

函数计算具有动态伸缩的特性, 根据并发请求量,自动弹性扩容出执行环境来执行环境。当预留的实例不能满足调用函数的请求时, 函数计算就自动进行按需扩容实例供函数执行,此时的调用就有冷启动的过程。使用预留模式可以消除冷启动毛刺问题,详情请参见预留实例

原文地址:https://www.cnblogs.com/tu240302975/p/13410155.html