灵伴科技(Rokid)借助 Knative 实现 AI 应用云原生 Serverless 化

news2024/10/7 4:27:05

作者:朱炜栋、元毅、子白

公司介绍

Rokid 创立于 2014 年,是一家专注于人机交互技术的产品平台公司,2018 年即被评为国家高新技术企业。Rokid 作为行业的探索者、领跑者,目前致力于 AR 眼镜等软硬件产品的研发及以 YodaOS 操作系统为载体的生态构建。公司通过语音识别、自然语言处理、计算机视觉、光学显示、芯片平台、硬件设计等多领域研究,将前沿的 Al 和 AR 技术与行业应用相结合,为不同垂直领域的客户提供全栈式解决方案,有效提升用户体验、助力企业增效、赋能公共安全,其 Al、AR 产品已在全球八十余个国家和地区投入使用。

图片

业务场景

Rokid 在数字文化领域,围绕展陈导览解决方案,主要形成了三维建图,场景创作,场景体验三个业务模块,每个模块都有不同的后台平台支撑。

图片

三维建图: 制作展陈导览的第一步是取景,通过设备获取场地的真实布景,然后通过算法处理,进行三维建模,之后可以经过创作器进行下一步的内容创作。

场景创作: 在三维建模生成的视频流上创作,通过 Web3D 渲染引擎,将创作内容与场景紧密结合,结合硬件设备,在 AR 设备使用时,形成一体化的体验效果。

场景体验: AR 设备在使用时,根据定位服务,锚定在场景中的位置,根据位置的不同会显示不同的空间内容,达到扩展现实场景的效果。

未雨绸缪,磨刀不误砍柴工

在 AR 大潮的涌动中,Rokid 紧随时代脉搏,持续精进业务迭代与技术更新。我们深刻理解到,在构建稳定可靠、高效卓越且经得起市场严峻考验的 AR 部署解决方案时,必须秉持未雨绸缪的策略和工匠精神。

面对瞬息万变的场景体验领域,我们尤为关注 GPU 资源的依赖性,因其直接决定了用户通过扫描或小程序步入 AR 世界的实时服务品质。定位的即时性和准确性成为了衡量服务质量的关键指标。从具体的商业逻辑、研发挑战到技术选型层面,我们面临的核心问题聚焦于以下两点:

图片

初期的策略构想中,我们曾探讨过购置专用 GPU 机型以及采用 Kubernetes 社区原生的 Horizontal Pod Autoscaler 方案。然而,实践是检验真理的唯一标准,基于业务实际运行效果的反馈,我们意识到单一方案并不能满足所有需求。深信“工欲善其事,必先利其器”的理念,在历经数次实战探索及联合调试的过程中,Rokid 携手阿里云共同砥砺前行,最终在阿里云强大基础设施的支持下,打磨出一套更为高效、成熟且适应市场需求的实施方案。

基于 GPU 按需使用如何做

我们知道 GPU 资源很贵,按需使用尤为重要。K8s 社区提供的原生 HPA 方案基于 CPU、内存等静态阈值实现,如果要基于 GPU 使用率指标则需要通过自定义指标方式实现,配置繁琐,此外 GPU 使用率指标并不能最直接反馈业务请求负载情况,对于在线应用来说,通过请求流量的并发数、qps、rt 等指标,可以很好的衡量当前的服务质量,能否基于这些指标做到按需弹性。

如何快速发布迭代应用

在 K8s 中如果要做基于流量的蓝绿发布,首先需要创建对应的 K8s Service 与 Deployment,如果需要弹性,则还需要配置 HPA,然后在流量灰度发布时,要创建新的版本,最后通过 Ingress 设置对应的流量比例,最终实现流量灰度发布的功能。显然,在 K8s 要做基于流量的蓝绿发布,需要管理多种资源,并且随着版本的迭代,管理起来会更加复杂。

图片

弹性滞后

我们知道应用往往很难做到秒级启动,也使得基于 HPA 扩容存在较大的滞后性,带来真实业务的稳定性风险。如何减少弹性滞后带来的业务影响,是需要我们要解决的问题。

图片

GPU 资源不足的问题

云上 GPU 资源有限,如何保证常态下 GPU 资源供给,以及在突发业务场景下,及时扩容出 GPU 资源。

标准化

当前 Serverless 产品丰富多样,各个云厂商和开源社区都有。我们在技术选型时需要考虑尽可能通过标准化的方式使用 Serverless 能力,以满足多云、混合云等场景。

解决方案

从资源按需使用、GPU 供给、稳定性以及标准化等方面的考虑,我们选择了阿里云 ACK + Knative 的解决方案,保证弹性供给兼顾成本最优,整体方案如下:

图片

云原生 Serverless 框架 Knative

Knative 是一款基于 Kubernetes 的开源 Serverless 应用编排框架,其目标是制定云原生、跨平台的 Serverless 应用编排标准。其提供了基于请求数、并发等指标的自动弹性能力,并且通过多版本管理机制,可以方便的做到基于流量的灰度发布、快速回滚的功能。

图片

ACK 智能弹性(AHPA)

针对传统弹性能力所存在的问题,我们采用了 ACK 容器服务推出的 AHPA(Advanced Horizontal Pod Autoscaler)弹性预测 [ 1] ,可以根据历史 Pod 的 Ready Time 以及历史 Metrics 自动学习规律,在业务量上涨之前的一个 Ready Time 开始扩容,在业务量上涨时 Pod 已提前准备,可以及时供给资源,解决弹性滞后的问题。

AHPA 弹性预测根据历史数据自动规划未来 24 小时每一分钟的应用实例数,相当于进行 1440 个点(一天为 1440 分钟)的 CronHPA 定时配置。

ECS、ECI混部

弹性容器实例 ECI(Elastic Container Instance)是阿里云一款敏捷安全 Serverless 容器运行服务,用户无需管理底层服务器资源,同样也不需要关心运行过程中的容量规划,非常适合应对这种流量突发下业务场景。

但从弹性供给来看,ECI 并不能完全保证资源的供给,结合我们常态下业务使用情况,当前采取混合部署模式,兼顾成本及稳定性两方面的业务目标。如图所示,常态业务下我们使用 ECS 资源,在突发业务流量下,通过 ECI 提供按需使用资源。

图片

自定义弹性资源优先级调度

由于采用了 ECS 及 ECI 两种部署模式,在资源的调度策略上,我们期望应用扩容和缩容行为都是确定性的。那么,部署的服务优先调度顺序理论上依次为:ECS、弹性实例 ECI。同时在服务缩容时优先删除 ECI 上的 Pod,释放 ECI 的节点资源,然后删除 ECS 上的 Pod。这里我们采用了自定义弹性资源优先级调度策略:ResourcePolicy。

图片

对于不同类型的节点需通过打上不同节点标签实现,然后创建 ResourcePolicy 自定义节点池调度顺序。参考文档:自定义弹性资源优先级调度 [ 2] ;那么结合 Knative 使用的话只需要在 selector 指定相应的 Knative Service 名称即可。ResourcePolicy 配置示例如下:

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: xxx
  namespace: prod
spec:
  selector:
    serving.knative.dev/service: worker-go ## 此处指定Knative Service 名称即可
  strategy: prefer
  units:
  - resource: ecs
    max: 2
    nodeSelector:
      key: value
  - resource: eci

业务价值

在当前的实施中,我们已成功运用 ACK(阿里云容器服务)与 Knative 这一先进组合构建并部署了在线服务系统,籍由 Knative 出色的多版本管理特性,提升了我们的应用迭代效率。 同时,得益于其基于请求动态调节的自动扩缩容能力,能够实时响应突发业务需求,精准按需调配 GPU 资源,实现成本和性能之间的平衡。

本次合作实践,犹如 Rokid 与阿里云携手共舞,在赋能业务创新的同时,也有力推动了阿里云产品的深度优化。展望未来,身处 AR 技术引领的宏大计算新时代,Rokid 深信,以阿里云 Knative 结合 ECI 为代表的技术解决方案将在持续演进与迭代的过程中,不仅将为众多云计算使用者带来实质性收益,更将以卓越的架构设计和体验革新,逐渐渗透到更多前沿产品之中,构筑起强大而灵动的云上基础设施,进而惠及广大用户群体,共同见证并塑造云计算发展的新篇章。

Rokid 活动案例

钉钉×Rokid 发布「钉钉数字文化墙」,30 分钟打造 AR 数字展厅

图片

上海旅游节灵境 AR 花车巡游引爆城市级空间体验

图片

3D 经典奥特曼全国 AR 首展

图片

携手央博&阿里云,全球首个李白数字展亮相云栖大会

图片

全国首个 AR 商业化剧目亮相乌镇戏剧节

图片

相关链接:

[1] AHPA(Advanced Horizontal Pod Autoscaler)弹性预测

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ahpa-overview-1?spm=a2c4g.11186623.0.i0

[2] 自定义弹性资源优先级调度

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/configure-priority-based-resource-scheduling

点击此处了解更多阿里云 Knative 产品相关信息!

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

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

相关文章

【SpringBoot3】Spring 请求处理流程,自定义返回类型处理(HttpMessageConverter)

一、Spring Boot 请求处理 1、请求处理流程 Spring Boot 的接口请求处理流程主要基于 Spring MVC 架构,以下是详细的请求处理流程: 客户端发送请求:客户端发送HTTP请求到Spring Boot应用的URL。 DispatcherServlet 接收请求:Sp…

《C程序设计》上机实验报告(五)之一维数组二维数组与字符数组

实验内容&#xff1a; 1.运行程序 #include <stdio.h> void main( ) { int i,j,iRow0,iCol0,m; int x[3][4]{{1,11,22,33},{2,28,98,38},{3,85,20,89}}; mx[0][0]; for(i0;i<3;i) for(j0;j<4;j) if (x[i][j]>m) { mx[i][j]; iRowi…

QT学习日记 | 信号与槽

目录 前言 一、初始信号与槽 1、信号与槽的本质 2、信号与槽的使用 3、内置信号、内置槽函数与自定义信号、自定义槽函数 &#xff08;1&#xff09;文档查询 &#xff08;2&#xff09;自定义信号与内置槽函数的使用 4、信号与槽函数关联关系 5、带参数的信号与槽函数…

17- OpenCV:图像矩(Image Moments)和点多边形测试

目录 一、图像矩 1、矩的概念介绍 2、相关的API 3、代码演示 二、点多边形测试 1、概念介绍-点多边形测试 2、cv::pointPolygonTest 3、代码演示 一、图像矩 引言 在数字图像处理、计算机视觉与相关领域中&#xff0c;图像矩(Image moments)是指图像的某些特定像素灰…

如何搭建良好的软件测试环境?有什么作用?

在软件开发过程中&#xff0c;测试环境是非常重要的一环。它为软件测试提供了一个模拟真实生产环境的平台&#xff0c;以确保软件的质量和稳定性。那么如何搭建良好的测试环境呢?测试环境又有什么作用呢?卓码软件测评小编将进行以下解答。 软件测试环境是指在软件测试过程中…

Windows10更新失败 错误 0x80070643、KB5034441的解决方法之二

Windows10更新失败 错误 0x80070643、KB5034441 在知乎Windows10更新失败 错误 0x80070643、KB5034441的原因分析和几个解决方法 - 知乎 参考文章进行操作&#xff0c;更详细信息自己看上面链接。 我电脑的硬盘是mbr格式&#xff0c;而且没有划分恢复分区。 Microsoft Windo…

HDFS HA 之 HA 原理

1 ZKFC解析 HA(High Availability)是HDFS支持的一个重要特性,可以有效解决Active Namenode遇到故障时,将可用的Standby节点变成新的Active状态的问题,使集群能够正常工作。目前支持冷切换和热切换两种方式。冷切换通过手动触发,缺点是不能够及时恢复集群。实际生产中以应用…

【数据结构与算法】之排序系列-20240201

【数据结构与算法】之排序系列-20240201 一、88. 合并两个有序数组二、169. 多数元素三、217. 存在重复元素四、242. 有效的字母异位词五、268. 丢失的数字六、349. 两个数组的交集七、350. 两个数组的交集 II 一、88. 合并两个有序数组 简单 给你两个按 非递减顺序 排列的整数…

Linux网络状态查看与防火墙管理

网络状态查看 netstat [选项] Netstat是一款命令行工具&#xff0c;用于显示Linux系统中网络的状态信息&#xff0c;可以显示网络连接、路由表、连接的数据统计等信息。 使用 选项 -a&#xff1a;显示所有选项&#xff0c;包括监听和未监听的端口。 -t&#xff1a;仅显示tc…

C++(17)——list的模拟实现

前面的文章中&#xff0c;介绍了&#xff0c;的模拟实现&#xff0c;本篇文章将介绍对于的模拟实现。 目录 1. list的基本结构&#xff1a; 2. list功能实现&#xff1a;尾部插入元素&#xff1a; 3. list迭代器的实现&#xff1a; 4. list功能实现&#xff1a;在任意位置前…

从零开始训练 RT-DETR模型最新版本教程说明(包含Mac、Windows、Linux端 )同之前的项目版本代码有区别

从零开始训练 RT-DETR- 最新8.1版本教程说明 本文适用Windows/Linux/Mac:从零开始使用Windows/Linux/Mac训练 RT-DETR 算法项目 《芒果 RT-DETR 目标检测算法 改进》 适用于芒果专栏改进 RT-DETR 算法 文章目录 U版 RT-DETR 算法第一步 配置环境1.1 系列配置1.2 代码执行第…

react-virtualized实现行元素不等高的虚拟列表滚动

前言&#xff1a; 当一个页面中需要接受接口返回的全部数据进行页面渲染时间&#xff0c;如果数据量比较庞大&#xff0c;前端在渲染dom的过程中需要花费时间&#xff0c;造成页面经常出现卡顿现象。 需求&#xff1a;通过虚拟加载&#xff0c;优化页面渲染速度 优点&#xff1…

探索组合模式的魅力:探索树形结构的艺术与科学

设计模式专栏&#xff1a;http://t.csdnimg.cn/nolNS 在面对层次结构和树状数据结构的软件设计任务时&#xff0c;我们如何优雅地处理单个对象与组合对象的一致性问题&#xff1f;组合模式&#xff08;Composite Pattern&#xff09;为此提供了一种简洁高效的解决方案。通过本…

网络协议 UDP协议

网络协议 UDP协议 在之前的文章中有对UDP协议套接字的使用进行讲解&#xff0c;本文主要对UDP协议进行一些理论补充。 文章目录 网络协议 UDP协议1. 概念2. UDP协议格式2.1 数据报长度2.2 校验和/检验和2.2.1 CRC校验2.2.2 MD5算法 1. 概念 UDP&#xff0c;即User Datagram P…

[office] excel2010双向条形图制作 #经验分享#微信

excel2010双向条形图制作 本教程为大家介绍一下excel2010中excel2010双向条形图制作方法。 1.选中工作区域 2.点击插入-->图表,选择条形图 3.为美观可将中间竖线可去掉 4.方法是选中竖线,右击-->删除 5.接下来将图例靠上,选中图例,右击-->设置图例格式-->图例选项…

排序算法-选择/堆排序(C语言)

1基本思想&#xff1a; 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的 数据元素排完 。 2 直接选择排序: 在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素…

【C/C++ 07】词频统计

一、题目 读入一篇英文短文&#xff0c;去除介词、连词、冠词、副词、代词等非关键性单词后&#xff0c;统计每个单词出现的次数&#xff0c;并将单词按出现次数的降序和单词字符的升序进行显示5个单词。 二、算法 1. 通过<fstream>库创建fstream流对象&#xff0c;并从…

数学建模 - 线性规划入门:Gurobi + python

在工程管理、经济管理、科学研究、军事作战训练及日常生产生活等众多领域中&#xff0c;人们常常会遇到各种优化问题。例如&#xff0c;在生产经营中&#xff0c;我们总是希望制定最优的生产计划&#xff0c;充分利用已有的人力、物力资源&#xff0c;获得最大的经济效益&#…

idea docker 镜像生成太慢太大问题

文章目录 前言一、更小的jdk基础镜像二、服务瘦包&#xff08;thin jar&#xff09;2.1 maven2.2 修改dockerfile2.3 container run options 三、 基础jdk镜像入手&#xff1f;总结 前言 idea docker 内网应用实践遗留问题 idea docker插件 build 服务镜像太慢服务镜像太大 …

【网络】端口号范围

一、端口号的几个范围 在计算机网络中&#xff0c;一个端口号是一个16位的无符号整数&#xff0c;意味着端口号的范围是从0到65535。不过&#xff0c;并非所有端口都可以随意使用。根据惯例和技术标准&#xff0c;端口号被分为几个范围&#xff1a;1. 系统或保留端口&#xff…