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

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

公司介绍

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: xxxnamespace: prod
spec:selector:serving.knative.dev/service: worker-go ## 此处指定Knative Service 名称即可strategy: preferunits:- resource: ecsmax: 2nodeSelector: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.mzph.cn/news/664848.shtml

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

相关文章

数据结构—基础知识:哈夫曼编码

文章目录 数据结构—基础知识:哈夫曼编码哈夫曼编码的主要思想有关编码的概念哈夫曼编码满足两个性质: 数据结构—基础知识:哈夫曼编码 哈夫曼编码的主要思想 在进行数据压缩时,为了使压缩后的数据文件尽可能短,可采…

使用Python的turtle模块实现简单的烟花效果

import turtle import random import math# 设置窗口大小 width, height 800, 600 screen turtle.Screen() screen.title("Fireworks Explosion") screen.bgcolor("black") screen.setup(width, height)# 定义烟花粒子类 class Particle(turtle.Turtle):…

当程序员买了一台新 Mac

作为一名程序员,最趁手的“兵器”那还得是 MBP,有了一台新的 MBP 之后,肯定是要安装一大堆软件或工具的,把电脑装扮成自己喜欢的样子。 正好最近入手了一台新电脑,把安装软件的过程记录下来,下次再需要装环…

STM32控制DHT11温湿度传感器模块获取温湿度数据

时间记录:2024/1/29 一、DHT11引脚介绍 (1)VCC:电源引脚,3.3-5.5V (2)DATA:数据输入输出引脚 (3)NC:保留引脚,悬空即可 (…

颐和园龙纹珍宝展亮相,文物预防保护科技护航

在皇家园林颐和园的深处,一场独特的文化盛宴正静静上演。2月1日,“祥龙贺岁—颐和园藏龙纹题材文物特展”在德和园华丽揭幕。此次特展汇聚了66件珍贵文物,包括玉器、瓷器、书画、珐琅、家具等,每一件都是颐和园园藏的瑰宝。这些文…

Flink SQL Client 安装各类 Connector、组件的方法汇总(持续更新中....)

一般来说,在 Flink SQL Client 中使用各种 Connector 只需要该 Connector 及其依赖 Jar 包部署到 ${FLINK_HOME}/lib 下即可。但是对于某些特定的平台,如果 AWS EMR、Cloudera CDP 等产品会有所不同,主要是它们中的某些 Jar 包可能被改写过&a…

【Wireshark教程】流量分析,使用Wireshark寻找主机信息

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

力扣labuladong一刷day72天动态规划

力扣labuladong一刷day72天动态规划 文章目录 力扣labuladong一刷day72天动态规划一、343. 整数拆分二、96.不同的二叉搜索树 一、343. 整数拆分 题目链接:https://leetcode.cn/problems/integer-break/description/ 思路:本题为整数拆分,可…

clickhouse如何清除多个分区数据 alter table drop partition操作

官网drop partition操作 官网链接:https://clickhouse.com/docs/zh/sql-reference/statements/alter/partition#drop-partitionpart 官网上之有清除单个分区的例子,并没有对清除多个分区的场景进行描述,之前清除分区时也是按照官网例子进行…

MySQL系统配置

MySQL系统配置 内存相关 sort_buffer_size 定义了每个线程排序缓存区的大小,当索引无法满足需要的顺序信息时会用到,执行计划中出现using filesort,MySQL在有查询、需要做排序操作时才会为每个缓冲区分配内存(直接分配该参数的全部…

在 PyTorch 中动态构建和更新模型

1. PyTorch 中动态构建和更新模型 在 PyTorch 中,动态构建和更新模型是其核心特性之一。这意味着开发者无需预先定义完整的计算图,而是在运行时根据需要构建神经网络结构,并可以随时修改模型参数、添加或删除网络层等。这种动态图机制为研…

【AudioPolicy To AudioHAL笔记(二)】AudioPolicyAudioFliger To AudioHAL

/*****************************************************************************************************************/ 声明: 本博客内容均由https://blog.csdn.net/weixin_47702410原创,转载or引用请注明出处,谢谢! 创作不易,如果文章…

【Python】【完整代码】解析Excel文件内容,按每列首行元素名打印出某个字符串的统计占比(超详细)

目录 1.示例: 1.1 实现代码1:列数为常量 运行结果: 1.2 实现代码2:列数为变量 运行结果: 1.示例: 开发需求:读取Excel文件,统计第3列到第5列中每列的"False"字段占…

【新书推荐】5.1节 16位汇编语言学习环境

第五章 16位汇编学习环境 16位汇编语言的学习环境是建立在8086计算机的基础上的,我将借助于DosBox虚拟机来实现16位汇编语言学习环境的搭建。 5.1节 16位汇编语言学习环境 本节内容:16位汇编学习环境的搭建。 ■汇编语言程序设计编程调试过程&#xff1…

【React】react组件传参

【React】react组件传参 一、props:父组件向子组件传参1、将普通的参数作为props传递2、将jsx作为props传递(组件插槽) 二、自定义事件:子父组件向父组件传参三、context进行多级组件传参四、redux全局状态管理 一、props&#xf…

MySQL篇----第四篇

系列文章目录 文章目录 系列文章目录前言一、数据库的三范式是什么二、第一范式(1st NF - 列都是不可再分)三、第二范式(2nd NF- 每个表只描述一件事情)四、第三范式(3rd NF- 不存在对非主键列的传递依赖)五、数据库是事务前言 前些天发现了一个巨牛的人工智能学习网站,通…

C++迷宫游戏详解

个人主页:[PingdiGuo_guo] 收录专栏:[C干货专栏] 大家好呀,我是PingdiGuo_guo,今天我们来学习用C实现一个迷宫游戏。 目录 1.迷宫的具体步骤 1.1.迷宫的初始化 1.2.寻路算法 1.DFS算法 2.BFS算法 1.3.移动 2.总结 C迷宫游…

Javascript入门:第三个知识点:javascript里的数据类型、运算符

数字类型 123 //整数 123.1 //浮点数 1.123e3 //科学计数法 -10 //负数 NaN //not a number Infinity //无限大 以上的类型在javascript里都是数字类型 字符串类型 在开始之前,我需要先说明白两个知识点: console.log()是啥? let 与 v…

【C++初阶】C++入门(2)

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、函数重载1.1 函数重载的概念1.2 函数重载的种类1.3 C支持函数重载的原理 二…

服务器常遇的响应状态码

服务器常遇的响应状态码 状态码 500 表示服务器内部错误。 这种状态码意味着服务器在尝试执行请求时遇到了意外情况。在处理这种状态码时,我们需要联系服务器管理员或服务提供商以获取更多信息。 处理方法:联系服务器管理员或服务提供商以获取更多信息…