机器学习平台测试篇

在机器学习平台这样的项目上,质量如何保证,测什么、怎么测、QA如何实践?
在回答这些问题之前,先简单回顾一下机器学习平台是做什么的?(已了解的同学,可跳过这一节。)

机器学习平台是做什么的


用户旅程

机器学习平台是一款为数据科学家们高效、可视化地进行人工智能的工作平台。数据科学家的日常工作,用一句话概括就是把一个模糊的问题转化成一个具体的数据问题,运用数据科学的方法解决掉这个问题。举个例子:
广告投放部老大,要求数据科学家小博用模型去估计广告点击率,以便给什么用户推荐什么广告,增加用户的点击率。小博思考,广告被点击是1,没有被点击是0,这是个二分类问题,可以用简易的逻辑回归模型来预测用户点击的概率。小博开始行动如下图:


图1 CTR问题解决步骤

(1)数据收集:小博开始收集业务相关的数据,广告供应商的信息,广告本身的信息和用户信息等;
(2)预处理:对收集到的的上述原数据进行清洗,比如去除脏去重等;
(3)构造数据集:把经过预处理的业务数据,构造数据集;
(4)特征工程:对数据进行特征处理(如Onehot编码),提取特征(如信息增益),供LR模型使用;
(5)选择模型:选用Logistic Regression算法来预测广告点率;
(6)参数调优&评估:选择在离线数据集中性能评估值最好的参数组合;
(7)在线A/B测试:把上一步调出的最优模型上线,和原有模型进行A/B测试,如果新的模型性能表现更好,则替换掉旧模型,小博大功告成。

业务功能

机器学习平台就是帮助数据科学家工作变得更简单、高效。不仅集成了各种组件(算子)和算法,提供了友好的可视化界面,还可以通过简单的拖拉拽来构建复杂的Pipeline,使得数据科学家日常工作更简便、高效。机器学习平台主要业务包括:

(1)数据集:

  • 简单方便构建数据集、查看数据集样例。

(2)Pipeline:

  • 数据科学家可以通过可视化拖拉拽方式来构建Pipeline;
  • 支持了多种组件(如:分箱、PCA、OneHot、信息增益、相关性系数等);
  • 特征处理、提取、降维等;多个步骤的流水线式工作。

(3)建模实验:

  • 支持常用的各种算法。(如:LR、Decision Tree、SVM、FM、DFM、DNN等)
  • 可视化的方式建模、调参、评估,自动评选最优模型,一键发布。

(4)Notebook:

  • 集成了Notebook,一键创建启动Notebook的Runtime环境。支持各种不同的资源规格(如:CPU/GPU,16C/32C/64C,64G/128G)。同时、提供了各种内置安装包PySpark或 TensorFlow 等。

简单认识机器学习平台后,进入本文主题,机器学习平台测什么、怎么测?

机器学习平台测试什么


测什么?测机器学习平台的业务功能是否达到预期。功能、性能、安全、兼容!

机器学习平台的主要业务功能在“功能、性能、安全、兼容性”这四个维度有哪些测试关注点?见下图:

图2 机器学习平台测试类别

功能相关:

(1) 数据方面

  • 机器学习平台,数据是根本。机器学习平台主要功能是对数据集进行各种分析处理、训练。那么,最关键的大数据有哪些关注点?见图3。

数据测试点:存储格式、数据模型、数据类型、数据值、来源、量。

  • 数据类型:数据类型全部测试覆盖,简单的类型,如:int double string等,复杂的数据类型,如:map array struct等。

  • 数据值:正常、异常,空置、NULL、重复等。

  • 来源:通过数据仓库建立的数据、机器学习平台生成的数据、第三方在线数据。

  • 数据模型:内部表、外部表、分区、桶。

  • 数据体量:GB、TB、甚至PB,在超大数据量下的功能是否正常。

  • 存储格式:HDFS上支持的各种文件格式,以单文件还是整个目录为数据集。

  • 非功能性:数据的安全、性能在后边章节讲。

图3 大数据相关测试点

(2) Pipeline

Pipeline测试点:每个组件的逻辑、组合后逻辑(分解、分步、分层)测试。

  • 分层是检测后端存储结果是否正确,顶层展示是否正确。

  • 每个组件(算子)的逻辑单独测试。不仅关注上边提到的数据的六个方面,还要考虑当前算子有哪些参数较验、不同的参数设置,不同的计算结果。

  • 多个组件(算子)组合时,要分步验证。把组合中的每一个算子每一步计算结果都要测试。检查结果要分层看,后端存储结果要检测,前端可视化的样例要测。全部算子组一起;常见算子组合方式;不同类型算子组合;常遇BUG的算子组合。

  • Pipeline单分支、多分支测试。对于复杂有多分支的Pipeline,先分解。(对于大部分机器学习平台的Pipeline都支持多分支多输出,如图4)

  • 数据仓库静态数据,还有Pipeline运行中才产生的数据。比如:Pipeline第三个算子输入特征列选择的是第二个算子生成的新特征列。

  • 多Pipeline并行运行,确保运行正常、结果正确。


    图4 Pipeline样例

(3) 模型实验

模型测试点:数据集、数据集拆分、算法、调参、评估、发布服务

  • 模型数据集:Hive、hdfs文件,libsvm、dummy。

  • 目标/特征列选择:对于Hive数据集,测试目标列与特征列选择各种【不同数据类型、,如:数值型、向量等。

  • 数据集拆分:独立训练集/验证集/测试集;同一数据集下拆分训练集/验证集/测试集的不同拆分方式或拆分比例。

  • 训练调参:模型算法各参数的默认值,各种组合测试。

  • 模型评估:算法对应评估指标验证,每类算法都对应多个评估指标,评估值显示在正常区间,评估指标的图表展示正确。比如性能越好的模型其AOC曲线下包的面积(AUC)越大。

  • 分布模型 :模型发布成功后,在推理平台上,预测结果性能如何。发布时,设定资源、版本等。

图5 模型实验步骤

(4)Notebook

  • 机器学习平台基本都有集成Notebook, 验证镜像规格(如:CPU 32C 256G,GPU 16C 128G),当没有资源时的情况等。
  • 预安装包:平台提供Notebook预安装哪些包。比如Python, PySpark。启动后写一段小程序测试相应包安装并可用。
  • NoteBook可读取数据集。直接从集群上访问数据建模进行训练等,访问机器学习平台上构建的数据集、包括Pipeline生成数据集。
  • 权限:只读不可下载数据,没有权限查看访问的数据做异常处理。

兼容性:

(1)支持常用浏览器、分辨率,在各浏览器上功能正常,特别是对Pipeline画布拖拉拽界面操作的兼容性。

(2)工具:很多端对端自动化工具支持多浏览器,如:Testcafe。

安全性:

机器学习平台安全测试点:数据安全、代码安全、业务安全。

除了与传统项目共同的测试点外,数据安全方面考虑以下几方面:
(1)数据权限不仅从数据表或整个文件,还会从数据行、列两个维度设置权限。
(2)数据读取、下载、管理权限管控。数据不能拿出集群,机器学习平台不可下载或存储等。
(3)考虑各公司或地区政策定义的数据保密项,哪些数据不得泄漏,需做加密再展示。
(4)代码安全通过行业常用安全扫描工具检测。
(5)业务安全:业务上的隔离(如:租户隔离项目)、登陆有效期等。
(6)推荐工具:Fortify Scan、OWASP ZAP、Checkmarx、Burp Suite、Veracode等。

性能:

机器学习平台处理的是大数据,数据流向经过的地方都存在性能风险。

机器学习平台性能:大数据集、Pipeline性能、训练性能、预测性能。

(1)构建数据集,创建、查询大数据集的性能。
(2)数据通道Pipeline的性能,单个组件(算子)性能,组合组件(算子)性能。
(3)模型训练集、数据集拆分性能。
(4)模型训练、模型预测(离线、在线)性能。
(5)推荐工具:Jmeter、Postman、自编写性能测试小工具。
了解完机器学习平台测什么之后,来看怎么测试。

机器学习平台怎么测


高质量不是测出来的,要通过更好的预防和反馈机制保障的。

自动化策略

自动化策略:像拆积木一样分解,每个最小单元测试,拼接后测试。

机器学习平台系统架构(见下图),三层架构,顶、中、底。
(1)最顶层:UI可视化层,各种表、图、界面参数等。
(2)中间层:后端代码,平台的各种API以及算子、算法逻辑代码。
(3)最底层:存储与计算引擎,数据的存储与计算都是在这一层完成的。


图6 机器学习平台架构图

先给每层代码加上单元测试,然后、不同层连通测试,如图7:
(1)前后端逻辑测试点主要由UT覆盖,所有逻辑最先由UT覆盖。
(2)后端集成由API集成测试覆,每类业务场景一个Case覆盖。比如,数据集有一条happy path;Pipeline把各类不同算子组合一起覆盖Happy Path;模型实验每类算法模型覆盖一条Happy Path。
(3)少量的UI端对端测试覆盖前后端集成。由于,项目前期UI变化频繁,尽量少写UI端对端。

图7 自动化测试

QA实践

QA实践:贯彻【尽早参与、提前预防、尽早测试反馈】最高原则。

把你的项目流程分解,在项目全生命周期的每一环尽早介入,依据上一章节的测什么思考,提前预防、测试反馈。参见下图:

图8 QA实践

(1) 在Review Story环节,QA除了解业务价值与故事场景,对于支持的各类算子或模型算法还要去官网熟悉更多细节。另外,就像机器学习平台测什么章节提到的几个方面的验证点,QA会在故事卡上写下QA Checklist备忘。
(2)故事卡启动(KickOff),BA、UX、QA、Dev各角色一起就故事卡的业务价值场景理解达成一致,同时、QA和DEV(DE)可以补充一些算法模型验证细节、浏览QA Checklist,拉通UT、Api集成覆盖场景。
(3)故事卡验收(SignOff),BA、UX、QA、Dev各角色验收故事卡场景以及QA Checklist验证点,同时会Review UT、集成测试等。在这里,QA可以协助Dev提前准备好各类测试数据,尤其是大数据测试点。在实际操作中我们提前准备了常用测试数据集,构建pipeline和模型实验。
(4)QA环境下的QA(In QA),CICD流水线上的自动化测试运行通过,自动部署QA环境,在QA环境端对端探索测试,检验产品质量。如,发现bug,会把遗漏逻辑case加到自动化测试中。
(5) ShowCase环节,一些关键场景会提前与PO约ShowCase,目的就是为了提前收集反馈。
(6) BugBash环节,每个迭代结束,全员进行BugBash,团队集体找Bug的同时,更重要的一点是让大家试用产品、感受产品,毕竟机器学习平台组员很多是数据工程师、数据分析师等。可以提出更好的反馈。
(7) QA in Production,发布部署后,QA要在线上进行验证回归,同时,关注监控、日志,收集问题和反馈等。问题或反馈带入到新一迭代的改进完善当中,形成闭环。
(8) Bug Analysis环节,全员参与上个迭代缺陷统计分析,集体回顾上个迭代质量、讨论规避措施以及改进方案。

测试难点

(1)机器学习领域太多的算法,QA难以短期内熟悉所有算子与算法;有些组件(算子)计算原理复杂,超出QA的计算能力,比如:PCA。这种情况,怎么测正确性?

  • 自已在Notebook写代码直接调用Spark或Angel算子,传入同样数据集,通过对比结果验证。

(2)PipeLine模块,组合场景太多,难以覆盖全。怎么办?

请用二八原则做选择,挑那些收益更高的组合来覆盖。

  • 每个组件(算子)单独测试,然后,再全部算子组合一起验证。

  • 与数据科学家、PO沟通,常用组件组合验证。

  • 不同类组件(算子)组合验证。

  • 逻辑复杂容易出错的组合。

    以上这些Case构建自动化,或在Local或QA上备份,每增加一个新组件(算子),除了单测新组件逻辑,然后,在原有的Case上追加新算子。

(3)数据类型太多、数据值各样。场景太多怎么测?

  • 在大数据项目上,数据即Case,准备脚本,集群上创建好包含了所有数据类型与不同数据值的数据集。比如,每次SignOff时,一个数据集搞定全部场景。

(4)模型训练结果没有确定的答案,怎么测。

  • 通过模型性能指标来检验模型结果的好坏。比如:准确率、精确率、召回率、AOC曲线、F1-Score。

(5)每个不同模型算法的训练数据集与测试数据集怎么准备。当数据集准备的不好时,直接影响模型训练结果。

  • 寻找业务方真实业务数据(脱敏)。

  • 网上下载数据集,比如:比较流行的数据集Iris、Adult、Wine、Car Evaluation,各大官网的数据集(如:Spark data、Angel data)。

(6)QA不是数据科学家,调参不专业,评估指标结果一直很差,无法判断是调参问题还是代码有问题?怎么办?

  • 官网上下载相应数据集,依照官网给定样例调参。

  • 实在不行,找数据科学家寻求帮助。

机器学习平台挑战机遇

有挑战才有机遇,哪里有挑战哪里便是升仙池。

(1)如何简单快速构建真实复杂场景的大数据集。(比如:构建预测房价模型的大数据集)
(2)在集群上的运行耗时,导致集成测试运行慢,比如:训练一个模型几十分钟。
(3)资源问题,大数据训练耗资源,常遇QA环境的资源不足。

机遇很多,未来可期。愿我们在人类科技发展的道路上都留下过美丽的足迹。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容