让“不确定性”变得有“弹性”?基于弹性容器的AI评测实践
0. 前言
AI的场景丰富多彩,AI的评价方法百花齐放,这对于设计一套更通用的评测框架来说,是一个极大的挑战,需要兼顾不同的协议,不同的模型环境,甚至是不同的操作系统。本文分享了我们在AI评测路上的一些实践经验,重点介绍了我们在解决执行环境的不确定性方面所做的一些尝试。弹性容器是我们当前最合适的解决方案,期望对大家也有所启发。
1. AI评测是什么?
在当前的AI产品研发中,需要经常回答类似这样的问题。比如哪一款智能音箱更好一些,哪一款引擎更加厉害,或者是哪一个机器学习算法更适合我去用。
诸如此类,要回答这样的问题,我们就需要有一个度量的尺子,这个尺子就是评测。我们需要设计指标是什么,能够用什么数据出这些指标,每一类指标所体现出来的优缺点又是什么,怎么才能有效提升指标,这就是评测所做的事情。

2. AI评测怎么做?
AI评测平台架构
以下是平台的一个整体架构,分为接入层、逻辑层、数据层和存储层。这个架构是一个纯云原生系统,所有的服务部署以及所应用的一些存储资源全部都是基于云上边的。

3. 评测任务的不确定性
下面是评测任务的一个流程图,我们有流水线、任务调度、有任务封装这样的重要环节。我们发现要调度和执行的任务会有一个极大的挑战,那就是这些任务要支持到多种对象。每一种任务又是协同开发的一种方式,这就导致任务执行的一个环境是不确定的,还有就是任务在执行时所消耗的资源也是不确定的。

这里举一些不同场景的特点:
评测服务的多样性
比如我们要去评服务,可能面临多种请求协议和返回的内容。

评测模型的复杂性
我们要去评模型,会面临不同的深度学习框架,比如基于tensorflow的,基于pytorch的。

评测算法的多样性
我们要评算法,可能又会面临不同格式的一些数据。

4. 任务执行架构的演进之路
那么怎么解决这些不确定性呢?我们其实做了几种不同的尝试,接下来就跟大家分享一下我们所做的几步尝试。
专门的任务运行服务
最开始的方案就是用一套专门的服务来支持所有的场景。所有功能和环境集成在一起,最明显的一个问题就是任务间耦合特别高,维护起来特别麻烦,很难做到共同开发,因为我们评服务、评模型、评算法有可能是不同的团队或者不同的同学,如果把所有的服务都封装在一个服务里面,实际上在每一层之间都有一个特别大的影响,其实也会导致整个的复用性特别低。

独立且固定的容器服务
我们又探索了第二种方案,就是将一类的服务独立出来,在一定程度上解决了服务的复杂性,但是复杂度还是较高,因为同一类服务里边,比如以模型评测为例,不同的模型的框架是不一样的,如果还是封装在同一个服务里面,实际上要兼容不同的框架在同一个服务里边也是一个特别复杂的事情。

方案二有一个好处,各种服务功能相对独立,但是还是有一个问题,同一类服务复杂度较高,另外服务是常驻的,不同业务即使是同一种类型的评测,它的频率是不一样的,甚至是相差特别大,那么就导致服务空载比较多,资源利用率是不高的。
弹性的容器任务
在EKS[1]推出后,作为公司内首批吃螃蟹的业务,我们真正面向客户的一个业务,开始进行了另一种方案的探索,就是用弹性容器任务的方式进行一个评测任务。我们确实感觉它是一个真香的,将所有的任务完全隔离,然后现在的一个维护成本是非常低的,不用自己部署服务,也不用自己管理资源的事情。

对每一个评测任务的开发者也是一个很好的福利,开发者甚至可以为所欲为地去做一些事情,不用担心平台的框架不支持,另外也不用担心他所做的事情会影响到其他业务。当然对整个平台设计来说,最大的好处就是用完就释放,非常合理地利用资源。
几种解决方案的对比
以下是三个方案的一个对比,也是EKS带给我们的一些收益。

在方案一的时候虽然可以统一维护,但是确实要实现一个服务要得到评测对象的各种依赖是非常难的,同时任务间的耦合也特别高,导致只能支持有限的场景。
方案二,虽然做到的一定的隔离,任务间的耦合相对也是比较低的。但是每一个服务的忙闲状态是不一样的,我们的资源空耗是特别多的,就像这个图所示,可能有的服务还是比较规律,忙一段闲一段。有的服务就会一直忙,然后有的服务就特别零散地忙一下,然后就长期处于一个闲置的状态。
基于弹性的容器任务,可以做到任务可以随启随销,维护成本低,资源能够达到一个合理利用。
5. 评测任务的“弹性”
以下是基于EKS后的整体任务调度流程,我们会把任务封装到一个镜像库,然后调度镜像部署到一个EKS仓库中进行执行,这个就是解决评测任务所面临的不确定性的问题。

EKS评测任务的发布过程
这是一个更具像化的过程,任务的开发者只需要把开发代码提交到代码库,我们会有一套标准流程将代码封装到镜像里面,在具体流水线调度的时候,会将这个镜像启动到EKS的调度中调度执行,这个执行结果会返回到开发者这边,他就可以及时地知道这一次任务执行的一个效果是怎么样的。

6. 总结
EKS确实在我们支持不同的场景的评测任务时起到了非常大的一个助力,这样对于我们拓展自己的评测场景起到了非常好的帮助。
在之前,我们要解决不同场景的评测,很多时候就需要靠我们自己平台的开发者跟具体任务的开发者不断地适配,这次任务需要什么环境,我需要帮你准备好,然后让我的任务能够给你提供一个比较好的环境,也能够去执行。
自从有了EKS之后,我们可以只关注平台架构的一个设计,任务里面需要依赖什么环境,需要什么包,完全都交给任务的一个开发者去设计,然后我们将他所需要的包、环境都打到一个镜像里边,各个任务的镜像又相互独立,然后我就可以很好地通过EKS调度执行,这样对整个平台的架构的一个可扩展性以及我们自己能力的拓展都有了一个很好的助力。
参考资料
[1]EKS: https://cloud.tencent.com/product/eks
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!
让“不确定性”变得有“弹性”?基于弹性容器的AI评测实践的更多相关文章
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 阿里云 CDN 业务基于边缘容器的云原生转型实践
导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...
- 云知声 Atlas 超算平台: 基于 Fluid + Alluxio 的计算加速实践
Fluid 是云原生基金会 CNCF 下的云原生数据编排和加速项目,由南京大学.阿里云及 Alluxio 社区联合发起并开源.本文主要介绍云知声 Atlas 超算平台基于 Fluid + Alluxi ...
- 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...
- 网易云基于 Kubernetes 的深度定制化实践
本文由 网易云发布. 2017 年,Kubernetes 超越 Mesos 和 Docker Swarm成为最受欢迎的容器编排技术.网易云从 2015 下半年开始向 Kubernetes 社区贡献代 ...
- 基于 koajs 的前后端分离实践
一.什么是前后端分离? 前后端分离的概念和优势在这里不再赘述,有兴趣的同学可以看各个前辈们一系列总结和讨论: 系列文章:前后端分离的思考与实践(1-6) slider: 淘宝前后端分离实践 知乎提问: ...
- 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉 ...
- 基于OpenNetVM配置环境的发包实践
参考: openNetVM 基于OpenNetVM配置环境的发包实践 注意:本文并未对OpenNetVM的服务链进行测试,而是在借助OpenNetVM脚本环境的情况下,分别对Pktgen和MoonGe ...
- 基于OVS的VLAN虚拟化简易实践方案
基于OVS的VLAN虚拟化简易实践方案 前言 本实验基于ovs的vlan流表匹配,根据端口进行vlan标签插入.手工配置ovs,使其具有vlan虚拟化方案. 实验拓扑 ---- ---- | h1 | ...
随机推荐
- 数据结构中的树(二叉树、二叉搜索树、AVL树)
数据结构动图展示网站 树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>=1)个有限节点组成一个具有 ...
- 关于Linux目录访问函数总结
Linux下目录访问函数总结,主要是涉及到的函数,以及所在头文件. 获得工作目录: #include <unistd.h> char *getcwd(char *buf,s ...
- Android Studio--家庭记账本(一)
今天通过观看视频,根据老师所讲内容,编译代码.实现了Android Studio记账本里面的增加功能 源代码如下: CostBean.java: package com.example.family; ...
- 用 Python 写个坦克大战
坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍生类的游戏,但这款游戏仍然受到了相当一部分人的欢迎,本文我们看一下如何使用 Python 来 ...
- 用Python绘制一套“会跳舞”的动态图形给你看看
在读技术博客的过程中,我们会发现那些能够把知识.成果讲透的博主很多都会做动态图表.他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法. 看这优美的舞姿 很多人学 ...
- 我搭的神经网络不work该怎么办!看看这11条新手最容易犯的错误
1. 忘了数据规范化 2. 没有检查结果 3. 忘了数据预处理 4. 忘了正则化 5. 设置了过大的批次大小 6. 使用了不适当的学习率 7. 在最后一层使用了错误的激活函数 8. 网络含有不良梯度 ...
- Zookeeper学习(二)
一.Znode节点属性 dataVersion 数据版本, 每次当 Znode 中的数据发生变化的时候, dataVersion都会自增一下cversion 节点版本, 每次当 Znode 的节点发生 ...
- C#LeetCode刷题之#811-子域名访问计数(Subdomain Visit Count)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3814 访问. 一个网站域名,如"discuss.lee ...
- Broken 2020: 1 靶机
这个靶机的作者脑洞太大了 扫描下端口,就普通的ssh http服务 扫描下目录,发现了一个2个cms目录 进来cms发现是个安装界面,但是后面安装失败,无意返回cms发现出现了一个flag 进入/cm ...
- 面试不知如何回答这六大知识点,你还敢说熟悉MySQL?
文章目录 一.事务 1. 什么是事务 2. 事务的四大特性 3. 事务的并发问题 ① 事务并发问题什么时候发生? ② 事务的并发问题有哪些? ③ 如何避免事务的并发问题? 二.索引 1. 什么是索引 ...
