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. 一、elasticsearch部署

    Elasticsearch官网: https://www.elastic.co/products/elasticsearch 一.Linux单节点部署 1. 解压elasticsearch-5.6.1 ...

  2. Spring Boot 自定义数据源 DruidDataSource

    https://blog.csdn.net/wangmx1993328/article/details/81865153 springboot 使用DruidDataSource 数据源   一.添加 ...

  3. MyBatisPlus分页查询,删除操作

    分页查询 分页查询在网页使用十分之多 原始的limit进行分页 pageHelper第三方插件 3. MP内置的分页插件 导入配置 如何使用,官网的代码如下 //分页插件 @Bean public P ...

  4. JavaFX桌面应用-为什么应用老是“未响应”

    日常使用软件的过程中,偶尔会遇到软件突然卡住,再点击几次就变成"未响应"的情况. 在JavaFX应用中同样也会出现这种情况,在开发过程中应该尽量避免这种情况的出现. >> ...

  5. 【Mysql】SpringBoot阿里Druid数据源连接池配置

    一.pom.xml添加 <!-- 配置数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> &l ...

  6. Visual-platform,基于Vue的可视化大屏开发GUI框架

    visual-platform 基于Vue的可视化大屏开发GUI框架 ------ CreatedBy 漆黑小T 构建用于开发可视化大屏项目的自适应布局的GUI框架. github仓库: https: ...

  7. 2020-04-29:现在你有个秒杀抢购的app,用户不断大量增加,技术层面,你要怎么做

    2020-04-29:现在你有个秒杀抢购的app,用户不断大量增加,技术层面,你要怎么做,才能既满足用户需求,又能扛住压力,还能帮公司合理支出?福哥答案2020-04-29: 限流(杀部分用户祭天). ...

  8. C#LeetCode刷题之#717-1比特与2比特字符( 1-bit and 2-bit Characters)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3740 访问. 有两种特殊字符.第一种字符可以用一比特0来表示.第 ...

  9. Flutter 容器(3) - AnimatedPadding

    AnimatedPadding : 会产生动画效果的padding,在给定时间内缩放到指定padding import 'package:flutter/material.dart'; class A ...

  10. JMeter软件测试工具介绍及基本安装教程

    一.工具介绍 (一)简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试 ...