医疗 AI 的难题不只是把模型准确率做高,还要证明它能在不同医院、设备和患者群体上稳定工作。问题在于,真实患者数据不能随意离开医院,模型开发者也不愿交出代码和权重。MLCommons MedPerf 与 Google Cloud 的合作给出了一条可操作的路径:让数据与模型在硬件隔离的可信执行环境中相遇,只输出经过批准的评测结果。
真正困难的是跨机构验证
脑胶质母细胞瘤等脑肿瘤相对罕见,单个医院往往难以积累足够多、足够多样的 MRI 数据。即使模型在开发机构表现很好,换到另一家医院也可能因为患者构成、扫描协议、设备型号或图像预处理方式不同而明显退化。
这正是联邦评测要解决的问题。与集中上传数据不同,MedPerf 将评测工作送到数据所在机构,在各站点执行统一基准,并汇总允许公开的指标。来源材料给出的例子很直观:同一个模型可能在某一站点达到 95% 的准确率,在另一站点却只有 63%。如果只报告平均值,这种临床上重要的性能缺口很容易被掩盖。
因此,医疗 AI 基准至少需要回答三类问题:
- 模型是否在不同医院保持稳定,而不只是总体指标好看;
- 评测期间,医院能否避免向模型提供方暴露患者数据;
- 模型提供方能否避免向医院、其他参与者或云平台暴露权重和代码。
传统隔离容器无法完整回答这些问题。容器主要提供进程和文件系统边界,云主机管理员或底层基础设施仍可能处于信任范围内。机密计算进一步缩小了这个范围。
CPU、GPU 与远程证明组成安全洁净室
Google Cloud Confidential Space 使用经过强化的虚拟机和硬件隔离的可信执行环境(TEE),保护使用中的内存。MedPerf 在其中运行经过批准的评测工作负载,使医院数据和专有模型不必以明文形式暴露给其他参与方或云平台。
医学影像推理通常依赖 GPU,仅保护 CPU 内存还不够。该方案使用配备 NVIDIA H100 GPU 的 A3 机器系列,将 CPU 侧的 Intel TDX 与 GPU 侧的 NVIDIA Confidential Computing 结合起来,保护 GPU 加速推理期间的模型权重和患者数据。
整个流程的关键不是“启动了一台机密虚拟机”,而是先证明它值得信任,再释放秘密:
- 调度经过批准的 MedPerf 评测工作负载;
- TEE 生成包含硬件身份、启动状态和工作负载度量值的证明材料;
- 数据保管方和模型保管方分别验证证明;
- 只有代码、硬件和安全策略都匹配时,才释放数据解密密钥与模型密钥;
- 工作负载在受保护环境中完成推理,只导出获准的聚合指标。
远程证明把信任从“某个人承诺环境没有被修改”转换为可验证的密码学证据。它也保护基准完整性:未经批准的代码不能先读取患者数据,再伪装成正常评测程序。
可以这样实践:在密钥释放前增加证明策略门
下面是一个可运行的简化示例,用来演示证明策略的基本决策逻辑。它不是 Google Cloud 或 MedPerf 的正式 API,也不能替代其证明验证库;实际项目必须验证签名、证书链、令牌时效和防重放字段,并按平台文档替换字段名称。
将以下内容保存为 attestation_gate.py,然后使用 Python 3.10 或更高版本运行:
import json
import sys
from pathlib import Path
POLICY = {
"expected_workload_digest": "sha256:approved-medperf-evaluator-v1",
"allowed_tee": "intel-tdx",
"required_gpu_mode": "nvidia-confidential-computing",
"require_debug_disabled": True,
}
def authorize(claims: dict) -> tuple[bool, list[str]]:
failures = []
if claims.get("workload_digest") != POLICY["expected_workload_digest"]:
failures.append("workload digest is not approved")
if claims.get("tee") != POLICY["allowed_tee"]:
failures.append("unexpected TEE type")
if claims.get("gpu_mode") != POLICY["required_gpu_mode"]:
failures.append("GPU confidential mode is not enabled")
if POLICY["require_debug_disabled"] and claims.get("debug_enabled", True):
failures.append("debug mode must be disabled")
if not claims.get("token_signature_valid", False):
failures.append("attestation token signature is invalid")
return not failures, failures
def main() -> int:
claims = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
allowed, failures = authorize(claims)
if not allowed:
print(json.dumps({"release_key": False, "reasons": failures}, indent=2))
return 1
# 生产环境应在此调用 KMS,并把密钥只封装给已证明的工作负载。
print(json.dumps({"release_key": True}, indent=2))
return 0
if __name__ == "__main__":
if len(sys.argv) != 2:
raise SystemExit("usage: python attestation_gate.py claims.json")
raise SystemExit(main())
创建一份模拟的证明结果并执行策略门:
cat > claims.json <<'JSON'
{
"workload_digest": "sha256:approved-medperf-evaluator-v1",
"tee": "intel-tdx",
"gpu_mode": "nvidia-confidential-computing",
"debug_enabled": false,
"token_signature_valid": true
}
JSON
python attestation_gate.py claims.json
预期输出为:
{
"release_key": true
}
可以把 workload_digest 改成未批准的值,验证程序会拒绝释放密钥。真实系统还应把策略扩展到镜像摘要、启动参数、区域、服务账号、最低固件版本、证明时效和一次性随机数,并将“验证证明”与“调用 KMS 解封密钥”放在同一个受控服务中。
指标也可能泄露信息
TEE 解决的是运行时机密性和工作负载完整性,但不会自动解决医疗 AI 的全部风险。落地时还要处理以下边界:
- 输出控制:按医院、稀有病种或小样本亚组输出过细指标,可能造成成员推断或患者重识别风险;
- 模型攻击:恶意模型可能把输入编码到输出中,因此必须限制网络访问、输出格式和结果大小;
- 供应链安全:被批准的镜像本身仍可能包含漏洞,需要可复现构建、依赖扫描、签名和镜像摘要固定;
- 统计有效性:隐私保护不能弥补样本偏差,应同时报告各站点样本量、置信区间和预先定义的失败标准;
- 治理责任:TEE 不是患者授权、伦理审查、数据使用协议或监管验证的替代品。
对于脑肿瘤分割,还应避免只看单一准确率。Dice 系数、Hausdorff 距离、不同肿瘤区域的敏感度以及站点间方差,通常更能反映模型是否具有临床可用性。具体指标应由临床团队在评测前确定,不能看到结果后再挑选有利指标。
采用时从威胁模型和失败条件开始
MedPerf 与机密计算的组合,价值不在于让医疗数据“更容易共享”,而在于让机构不必直接共享数据,也能完成跨站点验证。它为脑肿瘤等稀有疾病研究提供了扩大样本覆盖面的现实路径,同时保护患者隐私、模型知识产权和基准完整性。
准备采用类似架构时,可以用这份清单做设计评审:
- 明确数据方、模型方、云平台和评测协调方各自不应看到什么;
- 固定并签名评测镜像,用远程证明约束密钥释放;
- 同时覆盖 CPU、GPU、磁盘、网络和结果导出通道;
- 预先定义站点级指标、最低样本量与模型淘汰条件;
- 对证明失败、固件升级、任务中断和密钥轮换进行演练;
- 保留可审计记录,但避免日志包含影像、患者标识或模型输出明细。
只有把密码学隔离、统计设计和临床治理放进同一套评测流程,跨医院性能才会从一张漂亮的平均分报表,变成医生、研究者和监管机构能够检查的证据。