在机器学习平台这样的项目上,质量如何保证,测什么、怎么测、QA如何实践?
在回答这些问题之前,先简单回顾一下机器学习平台是做什么的?(已了解的同学,可跳过这一节。)
机器学习平台是做什么的
用户旅程
机器学习平台是一款为数据科学家们高效、可视化地进行人工智能的工作平台。数据科学家的日常工作,用一句话概括就是把一个模糊的问题转化成一个具体的数据问题,运用数据科学的方法解决掉这个问题。举个例子:
广告投放部老大,要求数据科学家小博用模型去估计广告点击率,以便给什么用户推荐什么广告,增加用户的点击率。小博思考,广告被点击是1,没有被点击是0,这是个二分类问题,可以用简易的逻辑回归模型来预测用户点击的概率。小博开始行动如下图:
(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 等。
简单认识机器学习平台后,进入本文主题,机器学习平台测什么、怎么测?
机器学习平台测试什么
测什么?测机器学习平台的业务功能是否达到预期。功能、性能、安全、兼容!
机器学习平台的主要业务功能在“功能、性能、安全、兼容性”这四个维度有哪些测试关注点?见下图:
功能相关:
(1) 数据方面
- 机器学习平台,数据是根本。机器学习平台主要功能是对数据集进行各种分析处理、训练。那么,最关键的大数据有哪些关注点?见图3。
数据测试点:存储格式、数据模型、数据类型、数据值、来源、量。
数据类型:数据类型全部测试覆盖,简单的类型,如:int double string等,复杂的数据类型,如:map array struct等。
数据值:正常、异常,空置、NULL、重复等。
来源:通过数据仓库建立的数据、机器学习平台生成的数据、第三方在线数据。
数据模型:内部表、外部表、分区、桶。
数据体量:GB、TB、甚至PB,在超大数据量下的功能是否正常。
存储格式:HDFS上支持的各种文件格式,以单文件还是整个目录为数据集。
非功能性:数据的安全、性能在后边章节讲。
(2) Pipeline
Pipeline测试点:每个组件的逻辑、组合后逻辑(分解、分步、分层)测试。
分层是检测后端存储结果是否正确,顶层展示是否正确。
每个组件(算子)的逻辑单独测试。不仅关注上边提到的数据的六个方面,还要考虑当前算子有哪些参数较验、不同的参数设置,不同的计算结果。
多个组件(算子)组合时,要分步验证。把组合中的每一个算子每一步计算结果都要测试。检查结果要分层看,后端存储结果要检测,前端可视化的样例要测。全部算子组一起;常见算子组合方式;不同类型算子组合;常遇BUG的算子组合。
Pipeline单分支、多分支测试。对于复杂有多分支的Pipeline,先分解。(对于大部分机器学习平台的Pipeline都支持多分支多输出,如图4)
数据仓库静态数据,还有Pipeline运行中才产生的数据。比如:Pipeline第三个算子输入特征列选择的是第二个算子生成的新特征列。
-
多Pipeline并行运行,确保运行正常、结果正确。
(3) 模型实验
模型测试点:数据集、数据集拆分、算法、调参、评估、发布服务
模型数据集:Hive、hdfs文件,libsvm、dummy。
目标/特征列选择:对于Hive数据集,测试目标列与特征列选择各种【不同数据类型、,如:数值型、向量等。
数据集拆分:独立训练集/验证集/测试集;同一数据集下拆分训练集/验证集/测试集的不同拆分方式或拆分比例。
训练调参:模型算法各参数的默认值,各种组合测试。
模型评估:算法对应评估指标验证,每类算法都对应多个评估指标,评估值显示在正常区间,评估指标的图表展示正确。比如性能越好的模型其AOC曲线下包的面积(AUC)越大。
分布模型 :模型发布成功后,在推理平台上,预测结果性能如何。发布时,设定资源、版本等。
(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)最底层:存储与计算引擎,数据的存储与计算都是在这一层完成的。
先给每层代码加上单元测试,然后、不同层连通测试,如图7:
(1)前后端逻辑测试点主要由UT覆盖,所有逻辑最先由UT覆盖。
(2)后端集成由API集成测试覆,每类业务场景一个Case覆盖。比如,数据集有一条happy path;Pipeline把各类不同算子组合一起覆盖Happy Path;模型实验每类算法模型覆盖一条Happy Path。
(3)少量的UI端对端测试覆盖前后端集成。由于,项目前期UI变化频繁,尽量少写UI端对端。
QA实践
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环境的资源不足。
机遇很多,未来可期。愿我们在人类科技发展的道路上都留下过美丽的足迹。