灵伴科技(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: 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 产品相关信息!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8s 集群可观测性-数据分流最佳实践

简介 在微服务架构下,一个 k8s 集群中经常会部署多套业务,同时也意味着不同团队、不同角色、不同的业务会在同一集群中,需要将不同业务的数据在不同的空间进行管理和查看。 在传统的主机环境下,这个是可以通过不同的主机部署 Da…

力扣每日一题 ---- 1906. 查询差绝对值的最小值

本题中,我们的题目求的是差值的最小值,我们考虑一个因素,当前题目中给出的数组是没有排序过的,那么想要求的差值,是不是要两两配对进行判断差值最小值。这里我们就很费时间了, O(N^2)的时间复杂度&#xf…

学习笔记:超详解换根法(换根DP)(匠心之作)

一.换根DP的概念 1.换根DP是什么? 换根DP,又叫二次扫描,是树形DP的一种。 2.换根DP能解决什么问题? 换根DP能解决不指定根结点,并且根节点的变化会对一些值产生影响的问题。例如子结点深度和、点权和等。如果要 暴力…

【数据库】分区的优点和缺点

​ 🍎个人博客:个人主页 🏆个人专栏:数据库 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 优点: 缺点: 结语 我的其他博客 ​ 前言 数据库中的分区技术为处理大规模数据提供了一种有效的手段…

C++:输入流/输出流

C流类库简介 C为了克服C语言中的scanf和printf存在的缺点。,使用cin/cout控制输入/输出。 cin:表示标准输入的istream类对象,cin从终端读入数据。cout:表示标准输出的ostream类对象,cout向终端写数据。cerr&#xff…

如何远程操控vm虚拟机(finalshell版)

你是否因为虚拟机命令行操作不便而头疼?是否因为难以复制粘贴而烦恼?是否因为无法快速上传文件而烦躁? 别急!现在有一个简单便捷的软件能够实现上述你所述说的所有烦恼,请听我细细道来~ 一、查看虚拟机的ip地址 a.首…

Unity C#高级特性 Partial 详细使用案例

文章目录 实例 1:分隔UI逻辑实例 2:Unity编辑器自动生成代码实例 3:数据模型分割实例 4:序列化扩展实例 5:多视图架构实例 6:Unity编辑器自定义 inspectors 在Unity中,部分类(Partia…

Java多线程--生产者与消费者问题

文章目录 一、生产者与消费者问题(1)概要(2)案例1、案例描述及需要明确的问题2、整体框架构思3、生产者和消费者的数据共享问题4、对Clerk类里面方法的设计5、测试6、唤醒机制7、两个消费者 二、是否释放锁的操作(1&am…

PMP备考的三个阶段及学习方法分享

PMP证书是项目管理必备的关键技能证书,是具备进行项目管理的重要技能体现。无论升职加薪,还是从事项目管理工作,都非常重要。 个人主要从事产品开发工作,开始逐渐承担一些项目经理角色,但目前项目管理知识薄弱&#x…

探讨深浅拷贝在js加密中的运用

深浅拷贝是JavaScript中常用的概念,用于复制对象或数组。它们在处理数据时有不同的用途,适用于不同的场景。在本文中,我们将详细介绍深浅拷贝的概念,提供案例代码,并探讨它们在JavaScript中的应用场景,以及…

@JsonFormat 和 @@DateTimeFormat 时间格式化注解详解(一篇带你解决问题)

前后数据交互过程中,Date类型的数据经常会出现类型映射转换的错误,为了达到业务的目标时间格式,通常会使用JsonFormat 和 DateTimeFormat,但是这两者有什么区别呢? 一、示例代码 先准备一个POJO,拥有Date类…

PPT录屏功能在哪?一键快速找到它!

在现代办公环境中,ppt的录屏功能日益受到关注,它不仅能帮助我们记录演示文稿的播放过程,还能将操作过程、游戏等内容完美录制下来。可是很多人不知道ppt录屏功能在哪,本文将为您介绍ppt录屏的打开方法,以帮助读者更好地…

本体论(ontology)在工业4.0中的应用

信息技术中的本体与哲学的本体论是不同的,它代表了某个专业领域的基本概念,它们在智能制造和工业4.0 中具有不可或缺的作用,为了实现人与机器,机器与机器之间的确定性操作。一个标准化的,精确定义的本体服务是非常重要…

【XR806开发板试用】xr806使用tcp socket与手机通信

本文为极术社区XR806开发板活动试用文章。 参考:基于星辰处理器的全志XR806开源鸿蒙开发板上手体验 搭建环境。并成功编译。 项目源码 : https://gitee.com/kingwho/smart-home 在同一个局域网中,手机与xr806连接后,手机 APP 每隔…

【开源】JAVA+Vue+SpringBoot实现就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

【对象属性拷贝】⭐️按照需要转换的类型反射设置拷贝后对象的属性

背景: 小伙伴们大家好,最近开发的时候遇到一种情况,项目引入了全局序列化器来实现Date,LocalDateTime类型的字段根据时区转换,总体来说接口没什么要改动的,只要原来字段的属性是以上两种就行,但…

Linux/Uinx 系统编程:进程管理(3)

Linux/Uinx 系统编程:进程管理(3) 本章来讲解进程管理的最后一部分内容。 文章目录 Linux/Uinx 系统编程:进程管理(3)I/O重定向原理FILE结构体的内部结构重定向的实现过程 scanf 与 printfscanfprintf 重定…

linux 组建和卸载raid1、raid0详细操作

组raid的最好是相同容量和型号的硬盘,否则会有木桶效应 linux下组raid有很多细节 一、安装raid软件 deb包 apt-get install mdadm或dnf包 dnf install mdadm二、组raid1-镜像,组raid0-并列 raid1和raid0只有在madam命令时一点点不同,其他…

了解野指针与assert断言 拿捏指针的使用!

目录 1.野指针 野指针的成因: 2.规避野指针 3.assert断言 创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 1.野指针 概念:野指针就是指针指向的位置是不可知的(随机的、不正确的…

重写Sylar基于协程的服务器(5、IO协程调度模块的设计)

重写Sylar基于协程的服务器(5、IO协程调度模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、…