想象一座大型图书馆:每天几万册书要采编、上架、借出、修补、下架,如果没有一套统一的编目系统和台账,管理员根本不知道手里这本书有几个版次、之前被谁借过、目前处于什么状态。AI 团队面对模型资产时,遇到的正是同样的麻烦——训练出好几个模型文件,散落在同事的笔记本和服务器目录里,谁也说不清哪个版本在生产线上跑着。 模型注册表,就是 AI 团队的「模型档案馆」。它不替你做训练,也不帮你做推理,而是专注做好四件事:把模型文件(artifact)管好、给模型打上版本号、登记完备的元数据、维护清晰的状态流转。版本、状态、元数据环环相扣,CI/CD 流水线才能自动发布新版本,线上出问题时才能在一分钟内追溯根因。

岗位关联

对 AI 从业者来说,模型注册表是 MLOps 的地基工程。掌握它,你才能把「我训练出了一个模型」升级为「我们治理着一整套模型资产」,这是模型交付稳定性与合规性的分水岭。

目录
  1. 可视化演示
  2. 注册表:模型的中央档案馆
  3. Artifact:一本书的完整构成
  4. 版本:图书的版次规则
  5. 状态:一本书的借阅之旅
  6. 元数据:图书的编目卡
  7. CI/CD:自动还书流水线
  8. 溯源:台账里的前世今生
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示ML模型注册流程、版本控制树与生命周期阶段管理,交互切换查看模型注册表核心功能。

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

模型注册流程 训练完成的模型经评估后注册到Model Registry 每个版本记录元数据、指标与血缘信息 Registry = Model + Version + Metadata + Stage 调节版本数查看注册规模变化

注册表:模型的中央档案馆

走进一座几千册藏书的图书馆,管理员能在五分钟内找到任意一本书,靠的不是过人的记忆力,而是那套编目系统:每本书有唯一索书号、有状态牌、有借阅台账。AI 团队训练出的模型数量爆炸式增长后,靠「我记得文件在谁机器上」来管理,迟早要出大乱子。

模型注册表就是 AI 团队的编目系统,是 MLOps 中专门负责模型生命周期的中心化服务。它自己不训练模型,也不跑推理,只回答三个问题:团队有哪些模型?每个模型有哪些版本?某个版本现在处于什么阶段?把这三个问题答清楚,模型资产就不再是散落各处的孤岛。

「中心化」是注册表的灵魂。所有团队的模型制品统一交到注册表登记,版本号、元数据、状态全部有唯一事实源,避免了「线上用的模型在你电脑上」这种经典事故。注册表通常提供 REST API 与命令行工具,让 CI/CD 流水线可以像访问数据库一样编程读写。

用图书馆的话说:一本书只有「书本体、版次、编目卡、状态牌」四者齐备,才算真正入馆;一个模型只有 artifact、version、metadata、state 四要素都登记在册,才算被团队正式管理起来。

Model_Registry={artifact, version, metadata, state}\mathrm{Model\_Registry} = \{ \mathrm{artifact},\ \mathrm{version},\ \mathrm{metadata},\ \mathrm{state} \}
注册表的本质是四元组:一个模型条目 = 制品 + 版本 + 元数据 + 状态。
  1. artifact(模型制品)模型实际交付的文件组合,相当于书本体,是注册表管理的实物对象。
    artifact={weights, config, preprocess}\mathrm{artifact} = \{ \mathrm{weights},\ \mathrm{config},\ \mathrm{preprocess} \}
  2. version(版本)给制品打的唯一编号,相当于图书的版次,用于区分不同迭代。
    version=major⋅minor⋅patch\mathrm{version} = \mathrm{major} \cdot \mathrm{minor} \cdot \mathrm{patch}
  3. metadata(元数据)描述模型身份、来源与质量的字段集合,相当于图书的编目卡。
    metadata={base, source, metrics}\mathrm{metadata} = \{ \mathrm{base},\ \mathrm{source},\ \mathrm{metrics} \}
  4. state(状态)模型当前所处的生命周期阶段,相当于书的状态牌。
    state∈{DRAFT, STAGED, PROD, ARCHIVED}\mathrm{state} \in \{ \mathrm{DRAFT},\ \mathrm{STAGED},\ \mathrm{PROD},\ \mathrm{ARCHIVED} \}

Artifact:一本书的完整构成

图书管理员眼中的「一本书」,从来不只是装订起来的那叠纸,还包括排版源文件、封面设计稿、印刷参数。AI 团队口中的「模型 artifact」同样是组合体——只有一个 .pkl 权重文件是远远不够的。

一个完整的模型 artifact 至少包含四部分:权重文件、配置文件、预处理逻辑、推理封装代码。权重文件是模型的「血肉」,配置文件记录了网络结构和超参数,预处理逻辑决定了输入数据如何被喂给模型,推理封装则定义了模型对外提供服务的接口。少了任何一块,模型都无法真正部署。

权重文件动辄几百 MB,不适合塞进 Git 仓库,通常放进对象存储,注册表只保存一个「指针」引用。而配置、预处理逻辑、推理代码这些文本型内容,应当像普通代码一样进入 Git 仓库做版本管理。Artifact 与代码同管,流水线才能从一次提交里复现出完整可用的模型。

这就像出版社要重印一本书,光有印刷正文还不够,还得有封面设计稿和排版参数。AI 工程师拿到一份权重却不知道预处理怎么写,模型就像一个没有排版稿的文稿,别人根本没法把它「印出来」跑上生产线。

Model_Artifact={weights, config, preprocess_code, inference_code}\mathrm{Model\_Artifact} = \{ \mathrm{weights},\ \mathrm{config},\ \mathrm{preprocess\_code},\ \mathrm{inference\_code} \}
完整的模型制品是「权重 + 配置 + 预处理 + 推理」四个部分的集合,缺一不可。
  1. weights(权重文件)模型训练得到的参数,是制品的核心载体,体积通常最大。
    weights=params(model)\mathrm{weights} = \mathrm{params}(\mathrm{model})
  2. config(配置文件)记录模型结构、超参数、训练环境,是复现与调优的依据。
    config={arch, lr, batch}\mathrm{config} = \{ \mathrm{arch},\ \mathrm{lr},\ \mathrm{batch} \}
  3. preprocess_code(预处理逻辑)输入数据从原始形态到模型输入的转换步骤,必须与训练时保持一致。
    input_tensor=fpre(raw_data)\mathrm{input\_tensor} = f_{\mathrm{pre}}(\mathrm{raw\_data})
  4. inference_code(推理封装)把模型包成可调用的服务接口,供线上系统加载。
    prediction=model(input_tensor)\mathrm{prediction} = \mathrm{model}(\mathrm{input\_tensor})

版本:图书的版次规则

图书馆上架新书时,最怕遇到「书名相同、作者相同、内容却不一样」的两本书。图书靠版次区分,模型靠版本号区分。

业界通行的是语义化版本:MAJOR.MINOR.PATCH。主版本号在不兼容变更时递增——比如模型的输入输出协议改了,老代码调用会出错;次版本号在向后兼容的新功能增加时递增——比如新增了一个可选的预测接口;补丁版本号在向后兼容的缺陷修复时递增——比如修复了某些边界条件下的数值溢出。三个数字合起来,就是一个版本的「身份证号」。

版本还有一个更关键的纪律:不可变性。一旦某个版本被打上 PROD 状态并被线上使用,它的 artifact 和元数据就进入只读状态。发现模型有问题,正确的做法是训练一个新版本并递增版本号,而不是偷偷修改线上文件。这个纪律保证了「线上跑的东西」与「注册表登记的东西」永远一致,也是后续审计追溯的前提。

图书的版本纪律同样严格:一本再版的《史记》,出版社会在版权页清清楚楚标注「第 3 版第 2 次印刷」,绝不会悄悄把第 1 版的内容改掉再当新版卖。模型的版本号规则和不可变约束,守住的正是「凡是发布的,都可追溯」这条底线。

v=major⋅minor⋅patch\mathrm{v} = \mathrm{major} \cdot \mathrm{minor} \cdot \mathrm{patch}
语义化版本号由主版本、次版本、补丁版本三段组成,每一段都承载着明确的兼容性语义。
  1. major(主版本号)存在不兼容变更时加一,旧代码调用方需要适配。
    major↑  ⟺  breaking_change\mathrm{major} \uparrow \iff \mathrm{breaking\_change}
  2. minor(次版本号)新增向后兼容的功能时加一,旧调用方不受影响。
    minor↑  ⟺  new_feature∧compatible\mathrm{minor} \uparrow \iff \mathrm{new\_feature} \wedge \mathrm{compatible}
  3. patch(补丁号)修复缺陷且保持兼容时加一,不改接口只改内部实现。
    patch↑  ⟺  bug_fix∧compatible\mathrm{patch} \uparrow \iff \mathrm{bug\_fix} \wedge \mathrm{compatible}

状态:一本书的借阅之旅

图书馆里的每本书都有流动状态:采编中、可借、在馆、下架。模型的旅程同样是一条状态链。

模型注册表定义了四个标准状态:DRAFT(起草)、STAGED(候选)、PROD(生产)、ARCHIVED(归档)。刚训练出来的模型进入 DRAFT,相当于初稿入库;通过离线评估后晋升为 STAGED,相当于候选图书进入待上架区;经过在线验证和业务审批后进入 PROD,正式对外提供服务;当新版本完全接管流量后,旧版本进入 ARCHIVED,只保留档案不再更新。

状态不是想跳就能跳的,每一次流转都必须满足门禁并经过授权。从 DRAFT 到 STAGED 需要评估报告达标;从 STAGED 到 PROD 需要人工审批和发布窗口;从 PROD 到 ARCHIVED 需要确认线上流量已全部切走。状态机把这些规则固化下来,任何非法跳转都会被系统拒绝。

书从采编到上架再到下架,每一步背后都有管理员的签收记录;模型从 DRAFT 到 ARCHIVED,每一步背后都有门禁结果和审批日志。状态机让模型的生命周期像图书借阅流程一样清晰可控。

DRAFT→STAGED→PROD→ARCHIVED\mathrm{DRAFT} \rightarrow \mathrm{STAGED} \rightarrow \mathrm{PROD} \rightarrow \mathrm{ARCHIVED}
状态机规定了模型生命周期的单向流转方向,每一步流转都受门禁与权限约束。
  1. DRAFT(起草)模型训练完成刚登记,允许反复修改 artifact 和元数据。
    DRAFT→eval_passSTAGED\mathrm{DRAFT} \xrightarrow{\mathrm{eval\_pass}} \mathrm{STAGED}
  2. STAGED(候选)模型通过评估待发布,进入预生产验证阶段。
    STAGED→approvalPROD\mathrm{STAGED} \xrightarrow{\mathrm{approval}} \mathrm{PROD}
  3. PROD(生产)模型上线服务线上流量,版本进入只读状态。
    PROD→traffic_drainARCHIVED\mathrm{PROD} \xrightarrow{\mathrm{traffic\_drain}} \mathrm{ARCHIVED}
  4. ARCHIVED(归档)模型退役只留档案,不再承担推理任务。
    ARCHIVED=readonly_snapshot\mathrm{ARCHIVED} = \mathrm{readonly\_snapshot}

元数据:图书的编目卡

图书馆的编目卡上写着索书号、作者、出版社、入库时间,管理员扫一眼就知道这本书的基本身份。模型注册表里的元数据就是模型的编目卡。

一份完整的模型元数据 schema 通常包含四大类。第一类基础信息:模型 ID、名称、版本号、所有者、创建时间,回答「这是什么模型」;第二类训练来源:训练数据集版本、特征工程代码提交号、训练脚本 commit、基础镜像,回答「这个模型怎么来的」;第三类评估指标:AUC、准确率、延迟、模型大小等,回答「这个模型好不好」;第四类治理属性:审批人、合规标签、数据敏感级、发布记录,回答「谁批准它上线的」。

Schema 设计要在团队早期就统一。字段命名、类型、必填约束一旦确定,各团队就按同一套规范登记。如果每个团队各写各的字段名,注册表就会退化成一堆无法检索的散乱标签,编目系统也就名存实亡了。

没有编目卡的书等于不在馆藏体系里,读者检索不到它;没有元数据的模型也等于不存在,别人无法检索、无法评估、无法放心使用。把编目卡写清楚,模型资产才能被整个组织共享。

meta={base, source, metrics, governance}\mathrm{meta} = \{ \mathrm{base},\ \mathrm{source},\ \mathrm{metrics},\ \mathrm{governance} \}
元数据由基础信息、训练来源、评估指标、治理属性四大类构成,是模型可检索、可对比、可追溯的前提。
  1. base(基础信息)标识模型身份的核心字段,包含 ID、名称、版本与创建时间。
    base={id, name, version, created_at}\mathrm{base} = \{ \mathrm{id},\ \mathrm{name},\ \mathrm{version},\ \mathrm{created\_at} \}
  2. source(训练来源)记录训练数据与代码的血缘入口,用于复现训练过程。
    source={dataset, code_commit, env}\mathrm{source} = \{ \mathrm{dataset},\ \mathrm{code\_commit},\ \mathrm{env} \}
  3. metrics(评估指标)量化模型质量的数值集合,是门禁判断的输入。
    metrics={auc, acc, latency}\mathrm{metrics} = \{ \mathrm{auc},\ \mathrm{acc},\ \mathrm{latency} \}
  4. governance(治理属性)审批与合规信息,记录谁在何时批准了哪些操作。
    governance={owner, approver, policy}\mathrm{governance} = \{ \mathrm{owner},\ \mathrm{approver},\ \mathrm{policy} \}

CI/CD:自动还书流水线

现代图书馆的采购系统已经高度自动化:出版社的书目数据进入系统,自动查重、自动生成索书号、自动安排上架。模型注册表与 CI/CD 的集成,正是要把这种自动化复制到模型管理里。

在集成流水线中,训练任务跑完后会自动调用注册表 API 登记新版本,并自动上传评估指标,这就是自动注册。流水线的下一个阶段把 artifact 推进到 STAGED,触发预生产环境自动部署验证,这就是环境同步——部署平台不再手动拷贝文件,而是按注册表中的版本号拉取制品。最关键的是发布门禁:流水线只有在注册表确认「评估指标达标 + 审批通过」后,才允许版本晋级。

自动化流水线让「人找书」变成「书自动归位」。训练脚本一结束,注册表自动登记;指标一达标,状态自动流转;部署环境一就绪,版本自动拉取。每个环节都有自动记录,大大减少了人为传文件和口头通知带来的失误。

Gate: ACC≥θ ∧ Baseline_Ratio≥β\mathrm{Gate}:\ \mathrm{ACC} \geq \theta \ \wedge\ \mathrm{Baseline\_Ratio} \geq \beta
发布门禁是 CI/CD 与注册表之间的守门员:新版本必须同时满足绝对指标阈值和与线上基线的相对对比,才能进入生产。
  1. ACC ≥ θ(绝对指标门槛)新模型自身的核心指标必须达到预设阈值。
    ACC≥θ\mathrm{ACC} \geq \theta
  2. Baseline_Ratio ≥ β(相对基线的约束)新模型相对线上基线的提升比例不能低于阈值。
    metricnewmetricbase≥β\frac{\mathrm{metric_{new}}}{\mathrm{metric_{base}}} \geq \beta
  3. ∧(与关系)两个条件必须同时满足,缺一不可。
    Pass=(ACC≥θ)∧(Baseline_Ratio≥β)\mathrm{Pass} = (\mathrm{ACC} \geq \theta) \wedge (\mathrm{Baseline\_Ratio} \geq \beta)

溯源:台账里的前世今生

档案馆最珍贵的往往不是书本身,而是那本记录了每册书来龙去脉的台账:这本书什么时候进馆、经谁手、被谁借阅过。模型注册表里的血缘关系,就是模型的台账。

血缘关系(lineage)记录了一个模型从数据到部署的完整依赖链:训练用的数据集版本、特征工程代码、训练脚本、评估报告、部署环境。一旦线上模型出现问题,工程师顺着血缘链就能快速定位是数据回流出错、特征代码变更还是训练配置漂移。可复现性则依赖元数据的完整程度——只要把血缘链上的每一个版本号和提交号重新拉出来,就能在另一个环境里复现出相同的模型。

权限与审计是治理的最后一环:谁能注册新版本、谁能批准晋级、谁能归档旧版本,都要有明确的权限控制;每一次状态变更和审批操作都要写入审计日志。无痕操作在模型治理里是不可接受的,因为审计需求往往来自外部合规而不是内部自觉。

台账越清晰,出问题时的排查就越快。模型注册表把血缘链条完整记录下来,相当于给每个模型建立了一份永不丢失的档案卷宗——谁来了、谁走了、谁改动过,白纸黑字,一目了然。

Lineage: data→train→eval→deploy\mathrm{Lineage}:\ \mathrm{data} \rightarrow \mathrm{train} \rightarrow \mathrm{eval} \rightarrow \mathrm{deploy}
血缘关系是一条从数据到部署的依赖链,连通的每一步都指向具体的版本号与提交号。
  1. data(数据节点)训练与评估所使用的数据集版本,是血缘链的起点。
    data=dataset_version\mathrm{data} = \mathrm{dataset\_version}
  2. train(训练节点)训练脚本、超参数与基础环境版本,决定模型如何生成。
    train=code_commit+hyperparams\mathrm{train} = \mathrm{code\_commit} + \mathrm{hyperparams}
  3. eval(评估节点)评估集与指标报告,证明模型质量的依据。
    eval=eval_set+metrics_report\mathrm{eval} = \mathrm{eval\_set} + \mathrm{metrics\_report}
  4. deploy(部署节点)上线环境与部署时间,标志版本正式对外生效。
    deploy=env+release_time\mathrm{deploy} = \mathrm{env} + \mathrm{release\_time}

AI 应用场景

场景一:模型上线发布门禁

阶段:模型上线与发布

解决的问题:传统方式是算法工程师手动把权重文件发给平台组,口头告知评估结果,很容易拿错版本、漏掉评估报告。AI 通过注册表与 CI/CD 集成,让流水线自动登记评估指标,门禁不通过就不允许晋级。

具体案例:某银行的流失预测模型每周自动重训。CI 流水线训练结束后自动将新 artifact 和 AUC 写入注册表,只有 AUC 不低于 0.85 且与线上基线对比达标,版本才会被置为 STAGED;人工审批通过后进入 PROD,线上服务自动拉取 v1.2.3 完成发布。

场景二:线上事故快速溯源

阶段:模型监控与排障

解决的问题:线上指标骤降时,传统靠翻聊天记录找「当时用的哪个模型文件」,费时且不可靠。AI 借助注册表的血缘关系和元数据,一键拉出线版本的全部依赖信息。

具体案例:推荐系统点击率突降,工程师打开注册表查看 v2.1.0 的血缘链,发现训练数据版本 dataset@2024-03-08 存在异常,立即回滚到 v2.0.3 并重新训练,整个定位过程不到半小时。

场景三:季度模型资产盘点与合规审计

阶段:模型治理与审计

解决的问题:审计时被要求说明「生产环境现在跑着哪些模型、谁审批的、数据来自哪里」,传统靠人工整理 Excel 容易遗漏。AI 通过注册表直接导出结构化的模型资产清单。

具体案例:某金融机构季度合规审计中,平台团队从注册表导出模型台账:38 个 PROD、12 个 STAGED、4 个 DRAFT,每个模型都关联 owner、审批记录、评估报告与数据血缘,审计一次性通过。

Python 演示

python62 行
class ModelRegistry:    """极简模型注册表: 版本登记 + 元数据 + 状态流转 + 血缘记录."""     def __init__(self):        self.store = {}        self.gc_count = 0     def register(self, name, version, artifact_path, owner):        if name not in self.store:            self.store[name] = {}        if version in self.store[name]:            raise ValueError("version already exists: " + version)        self.store[name][version] = {            "artifact_path": artifact_path,            "owner": owner,            "state": "DRAFT",            "meta": {},            "lineage": [],        }     def add_source(self, name, version, data_key, data_version):        record = self.store[name][version]        record["lineage"].append((data_key, data_version))     def set_metric(self, name, version, metric, value):        record = self.store[name][version]        record["meta"][metric] = value     def promote(self, name, version, target_state):        record = self.store[name][version]        allowed = {            "DRAFT": ["STAGED"],            "STAGED": ["PROD"],            "PROD": ["ARCHIVED"],        }        if record["state"] not in allowed:            raise ValueError("unknown state: " + record["state"])        if target_state not in allowed[record["state"]]:            raise ValueError("illegal transition: " + record["state"] + " -> " + target_state)        record["state"] = target_state     def list_versions(self, name):        result = []        for version, record in self.store[name].items():            result.append((version, record["state"]))        return sorted(result)     def get_lineage(self, name, version):        record = self.store[name][version]        chain = " -> ".join(k + "@" + v for k, v in record["lineage"])        return chain or "(no lineage)"  if __name__ == "__main__":    reg = ModelRegistry()    reg.register("churn_cls", "v1.0.0", "artifacts/churn_v1.zip", "alice")    reg.add_source("churn_cls", "v1.0.0", "churn_train", "2024-01-10")    reg.set_metric("churn_cls", "v1.0.0", "auc", 0.871)    reg.promote("churn_cls", "v1.0.0", "STAGED")    reg.promote("churn_cls", "v1.0.0", "PROD")    print(reg.list_versions("churn_cls"))    print(reg.get_lineage("churn_cls", "v1.0.0"))
目的:用约 60 行代码实现一个简化的模型注册表,演示版本登记、元数据记录、状态机约束与血缘查询,代码可直接运行。
  1. self.store[name][version] = { ... }每个版本对应一条馆藏记录,包含路径、负责人和初始状态。
  2. "state": "DRAFT"新登记的版本一律从起草状态开始,不允许直接注册为生产状态。
  3. record["lineage"].append((data_key, data_version))记录训练依赖的数据版本,构建血缘链的起点。
  4. allowed[record["state"]]状态机以字典定义合法流转方向,DRAFT 只能到 STAGED。
  5. raise ValueError("illegal transition")非法跳转直接拒绝,把状态纪律写进系统逻辑。
  6. sorted(result)按版本号排序输出清单,模拟注册表的版本列表查询。

常见误区

误区我以为模型注册表就是一个大存储空间,把训练好的模型文件传上去、记个链接就算完事了,和用网盘存文件差不多。

正解注册表的本质是「编目系统 + 台账」,而不是单纯的存储。它要管理版本号、状态流转、元数据和血缘关系。文件存储只是 artifact 管理很小的一部分,如果只存文件不登记元数据,那就是个网盘,而不是模型注册表。网盘只回答「文件在哪」,注册表要回答「这个模型是什么、怎么来的、能不能上线」。

为何常见:因为训练完第一眼看到的只有模型文件本身,直觉上认为「管模型」就是「存文件」,忽略了背后的信息管理。

误区我给模型起的版本号就是 v1、v2、v3,甚至叫 final、final2、final3,反正能区分新旧就行。

正解无规则的版本号在模型数量少时还能凑合,一旦多个模型并行迭代,就无法从版本号判断兼容性和重要性。语义化版本 MAJOR.MINOR.PATCH 让版本号本身携带语义:主版本变更是破坏性的,次版本是兼容新功能,补丁是修 bug。更关键的是版本一旦发布就不可修改,这样每次发布都有确凿的记录可回溯。

为何常见:因为模型不受软件 API 兼容性约束的感觉很强,很多人觉得「能跑就行」,直到线上事故需要回滚才发现版本号根本对不上。

误区线上模型效果变差,我直接把模型文件替换掉,改改参数重新上传,以为这样最省事,不需要走流程。

正解注册表的不可变原则恰恰禁止这种行为。线上 PROD 版本是只读快照,任何修改都会破坏「注册表记录的」与「线上运行的」之间的一致性。正确做法是训练新版本、走状态流转、通过门禁后再发布,让旧版本按流程归档。这样每次变更都有审计记录,出了问题能明确知道是哪个版本的行为。

为何常见:因为直接改动看起来解决问题最快,但代价是失去了可追溯性,等真正出事故时连「线上到底跑的是哪份文件」都说不清。

误区我觉得模型训练完成、准备上线前,再把它传到注册表存档就可以了,平时训练阶段不需要管。

正解注册表应该嵌入整个 MLOps 流水线,从训练脚本启动那一刻就开始工作:自动注册 artifact、写入训练来源、记录评估指标、触发门禁判断。如果只在最后手动登记一次,中间所有版本、指标、血缘信息都丢失了,也就失去了治理的意义。

为何常见:因为把注册表理解成了「存档工具」而不是「流水线环节」,没有意识到自动化登记越早介入,信息越完整。

面试题

Q1. 模型注册表最核心的职责是什么?

单选题 · easy

  • A.训练模型并对超参调优
  • B.集中管理模型生命周期← 正确答案
  • C.替代特征存储与数据管道
  • D.替代线上推理服务完成打分

答案:B。模型注册表像图书馆的编目系统,负责登记、分类和状态管理,而不是写书或借书。训练模型是「写书」,推理服务是「借书」,特征存储是「资料室」,它们都不是注册表的职责。选项 B 精准概括了注册表的核心价值:集中管理模型从创建到归档的完整生命周期。

Q2. 语义化版本 v2.3.1 中「3」代表什么含义?

单选题 · easy

  • A.主版本号标识不兼容变更
  • B.次版本号标识新增兼容功能← 正确答案
  • C.补丁版本号标识缺陷修复
  • D.构建次数由流水线自动生成

答案:B。v2.3.1 中 2 是主版本号(major),3 是次版本号(minor),1 是补丁号(patch)。次版本号在新增向后兼容功能时递增,就像图书再版时加了新附录但不改动原章节。主版本对应不兼容重构,补丁对应小修小补,与构建次数无关。

Q3. 模型状态从 STAGED 晋级到 PROD 意味着什么?

单选题 · easy

  • A.模型权重被自动删除以释放空间
  • B.模型通过验收并投入线上服务← 正确答案
  • C.模型进入训练流程的等待队列
  • D.模型登记记录被重置为初始状态

答案:B。STAGED 相当于图书进入待上架区,PROD 表示图书正式上架开放借阅。晋级 PROD 意味着模型通过了门禁与审批,开始服务线上流量。删除权重、等待训练、重置记录都与状态流转的含义相反,属于对状态机的错误理解。

Q4. 模型注册表中「训练数据集版本」属于哪类元数据?

单选题 · mid

  • A.基础标识信息描述模型身份
  • B.训练来源信息支撑血缘回溯← 正确答案
  • C.评估指标数值衡量模型质量
  • D.治理属性字段记录权限归属

答案:B。训练数据集版本回答的是「这个模型是用什么数据训练出来的」,属于训练来源这一类别,是血缘链的起点。基础信息描述模型叫什么,评估指标说明模型好不好,治理属性记录谁批准的,三者都与「数据来源」这一语义不符。

Q5. 为什么注册表强制要求已发布的 PROD 版本不可修改?

单选题 · mid

  • A.节省存储空间避免重复拷贝文件
  • B.保证线上行为与审计结果可复现← 正确答案
  • C.防止推理服务频繁冷启动和重启
  • D.让版本号可以自动完成递增任务

答案:B。不可变性是模型治理的基石。就像图书馆存档的珍本不允许读者在上面涂改,PROD 版本一旦发布就冻结,任何线上行为都能精确对应到某个版本的 artifact 和元数据。这样事故复盘、合规审计和结果复现才有依据,与存储空间、服务重启或版本号自动递增无关。

Q6. 发布门禁(Gate)在注册表中的核心判断逻辑是什么?

单选题 · mid

  • A.磁盘空间是否足够容纳新版本制品
  • B.评估指标与线上基线对比是否达标← 正确答案
  • C.模型文件命名是否符合团队规范
  • D.训练日志是否完整打印输出完毕

答案:B。门禁相当于图书入库前的质检:既要看新书本身质量(绝对指标达标),也要对比馆内已有版本(相对基线对比)。磁盘空间、命名规范、日志输出都属于工程细节,不是模型能否晋级生产的关键判断标准。

Q7. 注册表中两个不同版本可同时处于 PROD 状态,常见原因是什么?

单选题 · extreme

  • A.数据库主键冲突导致的数据双写
  • B.灰度发布需要新旧版本流量共存← 正确答案
  • C.用户重复上传且系统未做去重
  • D.模型归档操作误改了状态位字段

答案:B。PROD 状态不要求「唯一版本」,灰度发布时新版本逐步接管流量,旧版本仍承载部分请求,所以两个版本会同时处于 PROD。这是刻意设计的发布策略,而不是数据冲突、重复上传或归档误操作。注册表通过状态记录支持这种多版本共存的场景。

Q8. 下列哪些属于模型注册表的核心能力?

多选题 · mid

  • A.模型文件的中心化存储管理← 正确答案
  • B.版本号登记与版本状态流转← 正确答案
  • C.元数据与血缘信息登记查询← 正确答案
  • D.负责训练算力的自动调度扩容

答案:ABC。注册表的四大能力是 artifact 管理、版本管理、元数据管理和状态流转,对应 A、B、C 三个选项。训练算力调度属于集群资源管理系统的职责,就像图书馆的编目系统不负责盖新楼一样,注册表也不负责分配 GPU。

Q9. 模型从 DRAFT 推进到 PROD 通常需要满足哪些条件?

多选题 · mid

  • A.评估指标达到预设的绝对阈值← 正确答案
  • B.STAGED 环境完成预发布验证← 正确答案
  • C.删除全部旧的模型版本文件
  • D.负责人审批通过并登记变更← 正确答案

答案:ABD。DRAFT 到 PROD 的旅程需要过两关:门禁(评估指标达标)和审批(负责人确认),同时 STAGED 阶段的预发布验证也不可缺少。旧版本文件不需要删除,而是按流程进入 ARCHIVED,因此选项 C 错误。

Q10. 关于模型注册表与 CI/CD 流水线的集成,以下说法正确的有哪些?

多选题 · hard

  • A.训练脚本结束后自动调用 API 注册新版本← 正确答案
  • B.部署平台按注册表版本号拉取指定制品← 正确答案
  • C.注册表负责调度流水线中的容器资源
  • D.发布门禁的判定结果写回注册表状态字段← 正确答案

答案:ABD。注册表与 CI/CD 的集成体现在三个环节:训练结束自动注册(A)、部署环境从注册表拉版本(B)、门禁结果驱动状态流转(D)。容器资源调度是 Kubernetes 等编排系统的职责,注册表只登记和判定,不负责分配算力。