想象一家现代化的智能中央厨房:新鲜食材从进货口进来,自动传送带把它们送过一道道工序——清洗、切配、烹饪、装盘,每个环节都有机械臂自动作业,每道关卡都站着一位质检员。一旦发现食材不新鲜或出品不达标,传送带立刻停下,物品被自动退回。整条线从进货到出餐,几乎不需要人指挥。这套系统,就是AI工程里的CI/CD流水线;而模型测试,就是那些质检员的站位、标准和盖章机制。 在没有这条传送带之前,AI团队发布模型靠的是“手工接力”:训练完模型,手动跑几个指标,开会评审,再手动部署上线。一旦线上数据悄悄变化,模型性能悄然滑坡,等发现时用户早已怨声载道。CI/CD模型测试要解决的,正是“如何让模型发布又快又稳”。它把测试关卡焊进流水线:自动跑单元测试、集成测试、回归测试、漂移检测,最终由质量门禁决定放行还是拦截。本文就沿着这条“中央厨房传送带”的路径,带你完整走一遍模型测试的自动化集成方案。

岗位关联

掌握CI/CD模型测试集成,你就能把AI模型的发布从“手工惊险跳跃”升级为“自动平稳轨道”——这是MLOps工程师最核心的护城河。

目录
  1. 可视化演示
  2. CI/CD基础概念
  3. 测试嵌入策略
  4. 自动化测试Pipeline
  5. 模型回归测试
  6. 数据漂移检测
  7. 报告与质量门禁
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

CI/CD基础概念

想象一家智能中央厨房。传送带从进货口一路延伸到出餐口,食材自动经过清洗、切配、烹饪、装盘,每个环节都有传感器和机械臂盯着。没有这条传送带之前,后厨全靠师傅们扯着嗓子接力,谁快谁慢全靠经验磨合。AI团队发布模型也曾经历过类似的“手工接力”时代:训练完模型,手动跑几个指标,开会拍板,再手动部署上线。

所谓CI/CD,就是给这套接力装上自动传送带。CI(持续集成)让开发者的每个小改动都频繁合并进主干,每次合并都自动触发构建和测试,把“最后集成日才爆发冲突”的悲剧拆解到日常逐个解决。CD(持续交付)保证产物随时处于“可发布”状态;持续部署则更进一步,测试一通过就自动发布到生产环境。

传统CI/CD运的是代码和配置,AI模型的流水线却要搬动三种东西:代码、数据、权重参数。代码一行没改,数据一变,模型行为就可能面目全非。所以模型测试流水线要多出数据校验、模型评估、版本对比这些贴身关卡,这也是本文后续要一路展开的质检布局。

传送带骨架搭好了,接下来就要在关键位置安放质检关卡。关卡摆在哪、各自盯防什么,正是下一节“测试嵌入策略”要解决的问题。

部署频率=成功部署次数观察周期天数\displaystyle \text{部署频率} = \frac{\text{成功部署次数}}{\text{观察周期天数}}
部署频率是衡量流水线自动化成熟度的最直观指标:每天能成功发布几次,就说明传送带有多“顺滑”。
  1. 统计成功部署次数统计观察周期内线上环境成功完成部署的次数,这是公式中的分子。
    成功部署次数\text{成功部署次数}
  2. 界定观察周期选择一个统计窗口,通常取7天或30天,作为公式的分母。
    观察周期天数\text{观察周期天数}
  3. 求平均频率成功部署次数除以观察天数,得到每天平均部署次数,衡量流水线的自动化效率。
    成功部署次数观察周期天数\frac{\text{成功部署次数}}{\text{观察周期天数}}

测试嵌入策略

主厨布置质检,从不只在成品出锅时尝一口。原料入库要验农残,切配要看尺寸规格,烹饪要测中心温度,装盘要检查摆盘细节。每道关卡都便宜、快速、各管一段,坏掉的东西越早被拦下,浪费就越少。这套“层层设防”的思路,正是模型测试嵌入流水线的核心逻辑。

最经典的是测试金字塔:底层是大量单元测试,验证每个函数、每个接口的输入输出是否正确;中层是集成测试,验证特征管道、模型服务、下游调用能否协同工作;上层是系统测试和验收测试,站在用户视角评估端到端效果。金字塔越往底层跑得越快、数量越多,越往顶层越接近真实业务。

AI模型还有三个专属关卡嵌在流水线里:数据验证,检查输入数据的Schema、缺失率、取值范围,相当于“验收食材”;模型验证,用精度、召回率、F1等指标评估模型本身,相当于“试吃成品”;行为测试,用对抗样本和边界Case探测模型的鲁棒性,相当于“故意捣乱看它会不会翻车”。这些关卡分布在不同阶段,形成层层拦截的防线。

关卡设好了,传送带也装了,可总不能让师傅站在传送带旁边喊“下一道!”。让整条线自己跑起来,是下一节“自动化测试Pipeline”的功课。

测试覆盖率=NpassNtotal\displaystyle \text{测试覆盖率} = \frac{N_{\text{pass}}}{N_{\text{total}}}
测试覆盖率反映的是“有多少用例在为你把关”——覆盖率越高,漏网之鱼溜过质检关卡的概率越低。
  1. 统计通过用例数\( N_{\text{pass}} \) 表示整套测试用例中最终通过的用例数量。
    NpassN_{\text{pass}}
  2. 统计总用例数\( N_{\text{total}} \) 表示测试集中设计的所有用例总数,作为比较的基准。
    NtotalN_{\text{total}}
  3. 求覆盖率比值通过数除以总数,得到测试覆盖率的百分比,用于评估关卡本身的完整性。
    NpassNtotal\frac{N_{\text{pass}}}{N_{\text{total}}}

自动化测试Pipeline

传送带最大的价值不是“能传”,而是“自动传”。食材放上去,机器自己判断该走哪条支线、该在哪个工位停多久。厨房的自动化程度,取决于这条传送带能多大程度脱离人手干预——CI/CD里的Pipeline正是这个“自动传”的载体。

Pipeline是用编排工具(Jenkins、GitLab CI等)写成的自动化脚本,把“拉取代码→数据校验→训练→测试→打包→部署”串成一条链。开发者只需把代码推到指定分支,后面的事情交给机器按顺序执行。任何关卡失败,流水线自动中止并告警,绝不让不合格的产物流到下游。

设计流水线有三个关键点:触发机制,常见的有代码提交触发、定时触发、模型产物更新触发,选择哪种取决于你希望多快响应变化;环境管理,测试环境、预发布环境、生产环境必须隔离又一致,避免“在我机器上是好的”式翻车;幂等性,同一次提交无论跑多少遍,结果都应该一致,否则流水线就失去了可信度。

传送带自己会跑了,但厨房里有个隐患——食材会变质。放到模型身上,这就是数据漂移。如何盯紧它,是后面章节的戏份。

Tpipeline=Tbuild+Ttest+Tdeploy\displaystyle T_{\text{pipeline}} = T_{\text{build}} + T_{\text{test}} + T_{\text{deploy}}
流水线周期时间是端到端延迟的度量——它告诉团队:从提交代码到模型上线,传送带总共要转多久。
  1. 构建阶段耗时\( T_{\text{build}} \) 表示从源码到可部署产物的编译、打包耗时。
    TbuildT_{\text{build}}
  2. 测试阶段耗时\( T_{\text{test}} \) 表示运行全部自动化测试关卡的总耗时。
    TtestT_{\text{test}}
  3. 部署阶段耗时\( T_{\text{deploy}} \) 表示将产物发布到目标环境并完成健康检查的耗时。
    TdeployT_{\text{deploy}}
  4. 累加各阶段三个阶段求和得到整个流水线的周期时间,周期越短,响应变化越快。
    Tbuild+Ttest+TdeployT_{\text{build}} + T_{\text{test}} + T_{\text{deploy}}

模型回归测试

主厨研发出一款新酱料,头一轮试吃惊艳全场。但他不会立刻批量生产,而是连着几周每天用同一套标准反复试吃,确认它不比现役酱料差。这份“不比旧版差”的坚持,就是回归测试的魂——模型回归测试的核心,就是让新版本模型在一组固定的基准数据集上,性能不能明显低于当前线上模型。

为什么要专门设一道关卡防“变差”?因为AI领域最常见的翻车方式,恰恰是“更新反而退步”。新模型在新采集的数据上看着很好,一上线面对老场景却哑火了。被新数据带偏、过拟合到噪声上、特征分布理解错位,都可能让一次看似升级的发布变成事故。

跑好回归测试需要四样东西配合:基准数据集要稳定、有代表性,并且和线上数据分布保持一致;性能基线取当前线上模型在基准集上的指标作为“及格线”;阈值设定上,经验做法是允许小幅度波动,比如不低于基线的98%,太严会频繁误伤,太松又形同虚设;失败回滚机制保证一旦闯关失败,流水线自动切回上一版本,线上永远有可用模型兜底。

口味守住了,可别忘了食材的新鲜度。再好的菜谱,遇上发蔫的食材也白搭——模型面对的数据会漂移,这就轮到下一节的漂移检测登场。

Rregression=MnewMbaseline\displaystyle R_{\text{regression}} = \frac{M_{\text{new}}}{M_{\text{baseline}}}
性能保持率大于1说明新模型有提升,小于1说明有退步——回归测试就是看它有没有跌穿你设的那条“口味底线”。
  1. 取出新模型指标\( M_{\text{new}} \) 表示待发布的模型在基准数据集上测得的性能分数。
    MnewM_{\text{new}}
  2. 取出基线模型指标\( M_{\text{baseline}} \) 表示当前线上模型在同一基准集上的同口径分数。
    MbaselineM_{\text{baseline}}
  3. 计算保持率新模型分数除以基线分数,得到性能保持率,与预设阈值比较判定是否放行。
    MnewMbaseline\frac{M_{\text{new}}}{M_{\text{baseline}}}

数据漂移检测

再好的菜谱也怕食材变质。菜谱没变、厨师没换,但今天的番茄不如上周新鲜,端上桌的味道就是不对。模型同理:权重没变、代码没改,可线上数据悄悄变了,预测自然越来越离谱。所谓数据漂移,指的就是模型在生产环境接收到的数据分布,与训练时学到的分布逐渐“分家”。

漂移的诱因在现实中比想象中更常见:购物推荐模型遇到换季,用户行为模式明显改变;信贷风控模型碰上政策调整,客群结构一夜变天。这些变化不会在代码层面暴露,却会在模型效果上露出马脚。更麻烦的是它往往缓步累积,等人工发现时已经造成大量错误预测。

最常用的漂移检测指标是PSI(群体稳定性指数)。做法是把特征值分箱成若干区间,逐个对比“实际数据落在每箱的占比”与“训练数据落在每箱的占比”,差异越大说明漂移越严重。经验约定:PSI小于0.1表示稳定,0.1到0.25表示需要关注,大于0.25表示显著漂移。在CI/CD流水线里,漂移检测通常做成定时任务,每天轮询线上特征,一旦超阈值立即告警,并自动触发重新训练和回归验证。

漂移监测到了,警报也响了,然后呢?所有测试结果要汇总成一份报告,由最终的质量门禁拍板:放行、还是打回。这就是守门员的故事。

PSI=∑i=1n(Pa,i−Pe,i)×ln⁡(Pa,iPe,i)\displaystyle \text{PSI} = \sum_{i=1}^{n} (P_{a,i} - P_{e,i}) \times \ln\left(\frac{P_{a,i}}{P_{e,i}}\right)
PSI像是给数据分布做“体检查血”:把每个区间实际占比和预期占比的差距累加起来,数值越大说明数据状态越“亚健康”。
  1. 分箱计算占比将特征取值范围分成 \( n \) 个区间,统计每个区间内实际数据与训练数据的样本占比。
    Pa,i,Pe,iP_{a,i}, \quad P_{e,i}
  2. 计算占比差值用实际占比减去预期占比,得到每个区间上的正向或负向偏移。
    Pa,i−Pe,iP_{a,i} - P_{e,i}
  3. 计算对数比率实际占比除以预期占比再取自然对数,用来放大微小差异。
    ln⁡(Pa,iPe,i)\ln\left(\frac{P_{a,i}}{P_{e,i}}\right)
  4. 逐箱累加求和每个区间的差值乘对数比率后全部累加,得到最终的PSI值。
    ∑i=1n(Pa,i−Pe,i)×ln⁡(Pa,iPe,i)\sum_{i=1}^{n} (P_{a,i} - P_{e,i}) \times \ln\left(\frac{P_{a,i}}{P_{e,i}}\right)

报告与质量门禁

中央厨房每批出品都要填一张质检单:食材来源、农残结果、中心温度、试吃评分,一项项写清楚。主厨只看质检单就能决定“出库放行”还是“退回重做”。模型测试报告做的事一模一样:把各关卡结果汇总成结构化文档——JSON给机器消费、HTML给人阅读、趋势图给管理者决策。

报告内容通常包括各关卡通过状态、关键指标数值(精度、召回率、PSI等)、与基线的对比、失败日志摘要。没有报告,出了问题只能靠猜;有了报告,每一版模型为什么被放行、为什么被拦截,都能翻出实证。报告还天然支持追溯——这是事后复盘和根因分析的第一手材料。

质量门禁就是基于这份报告的自动判定规则:所有关卡结果汇入判定器,按预设阈值给出“放行”或“拦截”。规则可以完全自动化,也可以在关键节点插入人工审核——比如新模型涉及重大业务方向变化时,门禁亮黄灯转交评审委员会。门禁判定依据的阈值并非一成不变,需要随业务阶段定期评审调整,才能既控风险又不挡迭代。

至此,传送带、质检关卡、自动运转、口味坚持、食材保鲜、出门把关,全部串成了一条完整的“模型发布流水线”。从手工接力的惊险一跳,到自动质检的平稳输送——这就是CI/CD模型测试给AI团队带来的范式转变。

Qquality=∑i=1nwi×m^i\displaystyle Q_{\text{quality}} = \sum_{i=1}^{n} w_i \times \hat{m}_i
综合质量分把多个维度的指标加权成一把统一标尺,让门禁可以“一票权衡”而不是只看单一指标。
  1. 确定指标权重\( w_i \) 表示第 \( i \) 个质量指标在整体评价中的重要程度,由业务方约定。
    wiw_i
  2. 归一化指标值\( \hat{m}_i \) 表示将不同量纲的原始指标缩放到统一区间,便于横向比较。
    m^i\hat{m}_i
  3. 加权求和每个权重与对应归一化指标相乘后累加,得到综合质量分,与门禁阈值比较后决定放行或拦截。
    ∑i=1nwi×m^i\sum_{i=1}^{n} w_i \times \hat{m}_i

AI 应用场景

金融风控反欺诈模型的自动发布

阶段:模型部署与监控

解决的问题:某银行信用卡反欺诈模型每次迭代都要人工跑测试、填评审单、走发布流程,一次上线耗时一周。更棘手的是,欺诈模式变化快,模型更新慢一步,损失就多一分。引入CI/CD流水线后,新模型训练完成自动触发单元测试、回归测试和漂移检测,质量门禁全绿即自动发布,发布周期从一周压缩到数小时。

具体案例:MLOps工程师在Jenkins中配置了一条流水线:代码提交→数据校验→模型训练→单元与集成测试→基准集回归→PSI监控→门禁判定→灰度部署。某次新模型在回归测试中性能保持率只有0.96,被门禁自动拦截并回滚到旧版本,避免了线上事故。

电商推荐系统的换季漂移告警

阶段:模型监控与自动重训

解决的问题:电商推荐模型在换季时用户行为模式剧变,传统做法靠用户投诉和业务报表反推,发现滞后严重。将数据漂移检测做成定时任务嵌入CI/CD后,系统每日自动巡检线上特征分布。

具体案例:双十一前夕,某服饰类目推荐模型的特征PSI突破0.25,漂移监控触发告警,自动拉起一条重训流水线。新模型在回归测试中以1.08的保持率通过门禁,上线后点击率恢复平稳。整个流程无需人工介入,监控、训练、验证、发布全自动完成。

Python 演示

python67 行
# -*- coding: utf-8 -*-"""CI/CD流水线中模型测试集成模拟: 展示四级测试关卡与质量门禁""" import jsonimport random  class ModelTestPipeline:    """模拟CI/CD流水线中的模型测试编排器"""     def __init__(self, baseline_score=0.92):        self.baseline_score = baseline_score        self.results = {}     def run_unit_tests(self, code_ok=True):        """单元测试: 检查模型代码与数据接口是否正常"""        self.results["unit"] = "passed" if code_ok else "failed"        return self.results["unit"]     def run_integration_tests(self, schema_ok=True):        """集成测试: 检查特征管道与预测服务是否连通"""        self.results["integration"] = "passed" if schema_ok else "failed"        return self.results["integration"]     def run_regression_test(self, new_score):        """回归测试: 新模型性能保持率不低于98%"""        ratio = new_score / self.baseline_score        self.results["regression_ratio"] = round(ratio, 4)        self.results["regression"] = "passed" if ratio >= 0.98 else "failed"        return self.results["regression"]     def run_drift_check(self, psi_value):        """数据漂移检测: PSI低于0.1视为分布稳定"""        self.results["psi"] = psi_value        self.results["drift"] = "passed" if psi_value < 0.1 else "failed"        return self.results["drift"]     def evaluate_gate(self):        """质量门禁: 所有关卡通过才允许进入发布阶段"""        gates = ["unit", "integration", "regression", "drift"]        all_passed = all(self.results.get(g) == "passed" for g in gates)        self.results["gate"] = "released" if all_passed else "blocked"        return self.results["gate"]     def generate_report(self):        """生成JSON格式测试报告"""        return json.dumps(self.results, indent=2, ensure_ascii=False)  if __name__ == "__main__":    random.seed(42)    pipeline = ModelTestPipeline(baseline_score=0.92)    new_model_score = 0.935    psi = random.uniform(0.03, 0.15)     pipeline.run_unit_tests()    pipeline.run_integration_tests()    pipeline.run_regression_test(new_model_score)    pipeline.run_drift_check(psi)    pipeline.evaluate_gate()     print("CI/CD model test report:")    print(pipeline.generate_report())    if pipeline.results["gate"] == "released":        print(">>> quality gate passed. model ready to deploy.")    else:        print(">>> quality gate blocked. please fix and resubmit.")
目的:模拟一条CI/CD流水线中的模型测试编排,依次执行单元测试、集成测试、回归测试、漂移检测,最后通过质量门禁判定是否放行发布。
  1. class ModelTestPipeline:定义流水线编排器类,集中管理所有测试关卡的状态与执行顺序
  2. self.results = {}用字典记录每个关卡的通过/失败结果,后续报告直接引用
  3. def run_regression_test(self, new_score):定义模型回归测试关卡,评估新模型相对基线的性能保持率
  4. ratio = new_score / self.baseline_score计算新模型相对当前线上模型的性能保持率
  5. self.results["regression"] = "passed" if ratio >= 0.98 else "failed"保持率低于98%即判定该关卡失败
  6. psi = random.uniform(0.03, 0.15)模拟线上特征分布漂移检测值,用于演示门禁的两种走向
  7. all_passed = all(self.results.get(g) == "passed" for g in gates)四个关卡全部通过才允许发布
  8. print(pipeline.generate_report())输出结构化JSON测试报告,支撑后续追溯与分析

常见误区

误区模型是“训练出来的”不是“开发出来的”,训练好了直接部署就行,没必要像软件一样走繁琐的CI/CD流程。

正解模型也有版本、依赖和副作用,还比普通代码多一个数据维度。训练只是“做菜”那一步,之前的食材验收、配方管理,之后的试吃确认、保鲜监控,全都要流程管控。没有流水线,模型更新就是一场凭感觉的赌博。

为何常见:模型不像代码那样有清晰的编译报错,性能好坏不是一眼能看穿的,容易让人觉得“不测试也能上线”。

误区这个版本的模型跟上个版本一模一样,为什么每次流水线还要重跑回归测试?纯属浪费时间。

正解模型权重文件可能没变,但训练环境、依赖库、上游特征管道都可能变化,数据也在时刻流动。每次流水线重跑回归,不是重复劳动,而是确认“当前环境下的模型行为仍然达标”。

为何常见:把模型当成静态文件,忽略了数据和环境的动态性——就像以为酱料配方没变就能永远保证味道不变。

误区PSI越接近0越好,最好等于0,说明数据完全没有漂移,监控可以撤了。

正解PSI等于0也可能因为采样异常或分箱过于粗糙,把真实的分布变化掩盖掉了。监控不仅要看数值,还要看特征分布直方图和业务语义。PSI是“体检报告”而非“健康保证书”。

为何常见:把单一监控指标当成绝对真理,忽略了指标本身也有盲区。

误区门禁都自动放行了,说明规则完美,人不再需要介入,出了问题也是系统的责任。

正解门禁只是把关卡机械化,业务语义上的风险判断仍然需要人工抽查。门禁规则本身也会过时——业务变了、数据分布变了,原来的阈值可能不再合理,需要定期评审更新。

为何常见:自动化成功之后容易过度自信,忘了规则本身也是需要“测试”的。

误区报告就是流程上的一道手续,打印出来存档就完事了,对实际工作没帮助。

正解报告是事后追溯和根因分析的唯一证据链。没有报告,出了线上事故只能靠猜。报告还直接支撑门禁判定和定期评审,是“审计师”而不是“装饰品”。

为何常见:只看结果不看过程,等遇到线上事故想找证据时才后悔当初没留档。

面试题

Q1. CI/CD中“持续集成”的核心含义是什么?

单选题 · easy

  • A.每天由专人手动跑一遍全部测试
  • B.频繁自动合并代码并自动运行测试← 正确答案
  • C.只在发版前做一次完整的冒烟测试
  • D.用人工评审完全取代自动化测试环节

答案:B。持续集成的关键是“频繁自动合并+自动验证”,让问题在每天的小步提交中暴露,而不是攒到发版日爆发。A依赖人工且不频繁,C只覆盖发版前一次,D完全背离自动化方向。

Q2. 模型回归测试的核心目的是什么?

单选题 · mid

  • A.提高模型在训练集上的精度表现
  • B.验证新模型性能不低于线上基线模型← 正确答案
  • C.降低模型推理服务的响应延迟
  • D.增加自动化测试用例的覆盖率

答案:B。回归测试的“回归”不是提升,而是防退步——确保新版本不比线上旧版本差。A训练集精度高不代表泛化好,C是性能优化不是测试目标,D是测试覆盖度问题而非回归。

Q3. PSI超过哪个数值通常视为数据分布发生显著漂移?

单选题 · mid

  • A.小于0.1即视为稳定分布
  • B.介于0.1到0.25之间需关注
  • C.大于0.25则为显著漂移← 正确答案
  • D.如何取值都不影响模型

答案:C。行业经验约定PSI<0.1稳定,0.1~0.25需关注,>0.25显著漂移。A描述的是稳定区间,B是需要关注的区间,D完全错误——漂移会直接影响模型表现。

Q4. 质量门禁在CI/CD流水线中的核心作用是什么?

单选题 · easy

  • A.限制团队开发人员的数量编制
  • B.依据测试结果自动决定放行或拦截← 正确答案
  • C.降低流水线运行的算力开销
  • D.取代人工审查测试结果的环节

答案:B。质量门禁是把测试报告转化为发布决策的自动关卡:达标放行、不达标拦截。A与质量无关,C是资源优化,D说反了——门禁恰恰能保留人工审核接口。

Q5. 以下哪个最适合作为模型更新的自动化触发条件?

单选题 · mid

  • A.每周一早上由人工手动点击触发
  • B.训练任务产出新模型文件时自动触发← 正确答案
  • C.等业务方口头通知后再去手动触发
  • D.仅在季度评审会议上统一安排触发

答案:B。模型更新应紧扣“新模型文件产出”这个事件,实现训练到测试的无缝衔接。A和C依赖人工,D频率太低,都无法快速响应数据变化。

Q6. 模型回归测试中“性能保持率”的正确计算方式是什么?

单选题 · hard

  • A.用基线模型分数减新模型分数
  • B.用新模型分数除基线模型分数← 正确答案
  • C.用基线模型分数除新模型分数
  • D.用新模型分数乘基线模型分数

答案:B。性能保持率 = 新模型指标 ÷ 基线模型指标,大于1说明有提升。A得到的是差值而非比率,C把分子分母颠倒了,D的乘积没有比较意义。

Q7. 数据漂移检测中PSI小于0.1通常意味着什么?

单选题 · easy

  • A.线上数据分布与训练分布稳定← 正确答案
  • B.线上模型已经完全失去预测能力
  • C.流水线必须立刻停止发布新版本
  • D.训练数据已经出现大规模的缺失

答案:A。PSI小于0.1是行业公认的稳定区间,说明线上数据和训练时基本一致。B、C是严重漂移才可能出现的情况,D描述的是训练数据质量问题,与漂移无直接关系。

Q8. 以下哪些属于CI/CD流水线中模型测试的常见关卡?

多选题 · mid

  • A.单元测试← 正确答案
  • B.集成测试← 正确答案
  • C.回归测试← 正确答案
  • D.竞品分析

答案:ABC。单元、集成、回归是模型测试流水线的标准关卡,前两者构成测试金字塔底座,回归负责防退步。D是业务调研活动,不属于自动化测试关卡。

Q9. 检测到数据漂移后,合适的应对措施包括哪些?

多选题 · hard

  • A.使用新采样的数据重新训练模型← 正确答案
  • B.提高数据漂移监控的检查频率← 正确答案
  • C.直接删除所有历史训练用的数据
  • D.触发告警并暂停依赖模型的线上服务← 正确答案

答案:ABD。漂移后正确的组合拳是重训模型、加密监控、必要时暂停服务止损。C删除历史数据是毁灭性操作,历史数据是回归测试的基准,绝不能随意删除。

Q10. 测试报告在CI/CD模型测试中发挥哪些作用?

多选题 · easy

  • A.记录各个测试关卡的通过状态← 正确答案
  • B.为质量门禁提供判定所需依据← 正确答案
  • C.替代模型训练和验证的全部工作
  • D.追溯模型性能随版本变化的趋势← 正确答案

答案:ABD。报告的核心作用就是留痕、判据、追溯三大项。C完全错误——报告是验证的结果记录,永远替代不了训练和验证本身。