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评测实践的更多相关文章

  1. 基于 Docker 的微服务架构实践

    本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...

  2. 阿里云 CDN 业务基于边缘容器的云原生转型实践

    导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...

  3. 云知声 Atlas 超算平台: 基于 Fluid + Alluxio 的计算加速实践

    Fluid 是云原生基金会 CNCF 下的云原生数据编排和加速项目,由南京大学.阿里云及 Alluxio 社区联合发起并开源.本文主要介绍云知声 Atlas 超算平台基于 Fluid + Alluxi ...

  4. 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践

    对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...

  5. 网易云基于 Kubernetes 的深度定制化实践

    本文由  网易云发布. 2017 年,Kubernetes 超越 Mesos 和 Docker Swarm成为最受欢迎的容器编排技术.网易云从 2015 下半年开始向 Kubernetes 社区贡献代 ...

  6. 基于 koajs 的前后端分离实践

    一.什么是前后端分离? 前后端分离的概念和优势在这里不再赘述,有兴趣的同学可以看各个前辈们一系列总结和讨论: 系列文章:前后端分离的思考与实践(1-6) slider: 淘宝前后端分离实践 知乎提问: ...

  7. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  8. 基于OpenNetVM配置环境的发包实践

    参考: openNetVM 基于OpenNetVM配置环境的发包实践 注意:本文并未对OpenNetVM的服务链进行测试,而是在借助OpenNetVM脚本环境的情况下,分别对Pktgen和MoonGe ...

  9. 基于OVS的VLAN虚拟化简易实践方案

    基于OVS的VLAN虚拟化简易实践方案 前言 本实验基于ovs的vlan流表匹配,根据端口进行vlan标签插入.手工配置ovs,使其具有vlan虚拟化方案. 实验拓扑 ---- ---- | h1 | ...

随机推荐

  1. 013_go语言中的函数多返回值

    代码演示 package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b : ...

  2. C语言学习笔记之数据类型转换

    1.整数与整数相除,结果也为整数 2.不同类型的运算,精度低的向精度高的转化 整数与浮点数运算就是个很好的例子,只要有一方为浮点数,结果也是浮点数,这也体现出精度低向精度高转化 3.在赋值运算中,等号 ...

  3. Bytom Dapp 开发笔记(三):Dapp Demo前端源码分析

    本章内容会针对比原官方提供的dapp-demo,分析里面的前端源码,分析清楚整个demo的流程,然后针对里面开发过程遇到的坑,添加一下个人的见解还有解决的方案. 储蓄分红合约简述 为了方便理解,这里简 ...

  4. dom4j基本操作

    DOM4J与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml. ...

  5. 【LifecycleException】: org.apache.catalina.LifecycleException: A child container failed during start 解决

    看了好多种解决方案: 第一种:从tomcat remove project -> clean project -> reboot project; 第二种:说用到的 jasper jsp解 ...

  6. MySQL数据的增删改查查查查查查查查查查查查查查查查(查是真的多)

    一 数据的增加 主要是运用insert  into 语句. 格式: insert  into 表名称 values(数据,数据,数据)(要按顺序来,有没有数据的可以加null) 只增加某些字段里数据的 ...

  7. golang 整型

    目录 前言 整型 1.分类 2.类型 3.类型补充 4.补充: 跳转 前言 不做文字的搬运工,多做灵感性记录 这是平时学习总结的地方,用做知识库 平时看到其他文章的相关知识,也会增加到这里 随着学习深 ...

  8. 基于.NetCore3.1系列 —— 日志记录之自定义日志组件

    一.前言 回顾:日志记录之日志核心要素揭秘 在上一篇中,我们通过学习了解在.net core 中内置的日志记录中的几大核心要素,在日志工厂记录器(ILoggerFactory)中实现将日志记录提供器( ...

  9. CODING DevOps 代码质量实战系列最后一课,周四发车

    随着 ToB(企业服务)的兴起和 ToC(消费互联网)产品进入成熟期,线上故障带来的损失越来越大,代码质量越来越重要,而「质量内建」正是 DevOps 核心理念之一. <DevOps 代码质量实 ...

  10. Golang Gtk+3教程:Grid布局

    在上个例子中我们使用了box布局,现在让我们来学习另一种布局--grid.其实这几种布局都大同小异,如果你看懂了上一个例子,想必使用grid也不是难事. 程序运行效果: package main im ...