DeepMind这个月8号放出AlphaGenome Atlas——90亿个单碱基变异,1PB,全预计算好,网页上点一下就出结果。
我第一反应不太体面:这得烧掉多少张卡。第二反应才回到正题,因为这事的骨架我太熟了——把贵的计算提前跑完存起来,做成查表。我以前给团队的内部工具做过一个迷你版,背后是跑一次要等十几分钟的模型,我把常见输入的输出提前烧好、包成接口,省得每次有人真去跑。上线那天反馈很好,一个字,快。
一周之后有人来说结果不对。查了半天,不是数据脏了——是他把接口返回的那个分数当成了结论,跳过了它本该触发的一步判断。
画外音:工具没变,是它变太好用了。
Atlas把同一个思路推到了顶。人类基因组30亿个碱基对,每个位置3种替换可能,乘出来约90亿个变异,他们全算了。以前这条路怎么走——自己挑要测的变异,写代码,跑AlphaGenome,等。de Boer的原话是模型慢、吃算力,他没参与这个项目:AlphaGenome是该领域领先的模型,但速度慢、计算密集。所以Atlas对那些没新硬件的人是真能用上,至少省掉一堆重复模拟。
这个价值我不否定。门槛从"你得有卡"降到了"你得有浏览器"。
顺手说个工程上的细节,我看到的时候停了一下:项目初期,团队自己觉得按计算量硬跑完整套Atlas几乎不可能,早期估计要把速度提大约80倍才挤得进合理时间。最后靠模型蒸馏、GPU内核优化、消除冗余计算硬做出来了。Avsec说为此做了大量思考和工程工作——这话说得挺克制,80倍不是调个参、换张卡能出来的东西。我拆过类似的优化,知道每一层压榨后面都跟着一堆跑不完的回归测试。
真正让我坐下来想的是Atlas默认给你看的那个东西。
界面第一眼露在外面的,是一个数——单数值影响评分。模型本身有11种输出类型,展开能看更多,但初始展示就是把这堆预测压成一个值。de Boer对这个评分的评价是用途明确但容易被误读,因为背后系统复杂、变量多。
这话我认一半。它确实用途明确。麻烦不在于"容易被误读"——哪种模型的输出不容易被误读?问题在于它被设计成了一个太容易被当成结论的东西。一个数摆在页面正中间,周围没有定性解释、没有置信区间、没有"这个值在什么情况下不可靠",那它在这个界面里的角色就注定了:它就是答案。
我前面那个内部工具翻车翻在同一个地方。返回的分数本意是做排序——分数高的先看。结果有人直接设了个阈值,过线就处理,没过就归档。这个用法在接口层面完全合法,我没法说它错。错的是那个分数背后模型的适用边界:输入长度有限、对某类模式基本没反应。这些我写在文档里,但没人会为了用一个查表分数去翻文档 😅
# 我原本想让它被这样用:排序,人工看前100个
candidates = sorted(variants, key=score, reverse=True)[:100]
# 实际上被这样用了:阈值一刀切
hit = score > 0.7
Atlas那个评分面对的是同类问题,只是后果重得多。你拿它筛变异,筛掉的可能是一个和疾病相关、但模型视野没覆盖到的调控效应。
说到视野,这是个Atlas解决不了、也藏不住的硬边界:模型看的是变异周围约100万碱基对的窗口。有些叫增强子的序列能在很远的距离外调控基因,超出这个范围,效应就预测不了。多基因关联的疾病更是这样,一个变异单独看意义本来有限。这不是AlphaGenome独有的毛病,是这类方法的固有范围。但封装成"查一下就有数"的接口以后,用的人更不容易想起还有个边界在那儿。
这部分我没完全想明白该站哪边。把边界公开写出来、做成可查询的结果,肯定比让每个人自己踩坑再回去翻论文强;可那个"点一下就出数"的交互本身,就是在鼓励你不去想边界。两个说法我都站得住,真要说的话我偏后者多一点——因为我自己就是被"好用"带沟里过一次的那种人。但这么讲没什么硬证据,先搁着。
另外提一句,这套流程不是第一次了。AlphaFold 2020年根据氨基酸序列预测蛋白质三维结构;2023年AlphaMissense把约7100万个改变蛋白质的变异算了个遍,结论进了公共库;现在轮到基因组调控。模型先出来,过一两年做全量预计算、打包成数据库、开放使用。这套节奏挺健康的,比逼着每个实验室重复跑同一个模型强太多。但每这么打包一次,中间那层东西就被抹平一次——模型为什么这么输出、在什么输入下会失灵、那个汇总分数是怎么从11种输出里挤出来的。
对算力不够的人来说,这是净收益,我举双手赞成。对算力够的那部分人,这笔账没那么直白:你省下的时间,和你失去的中间层,是不是等价交换,取决于你到底想拿这个结果干什么。
前几天有人问我Atlas那个评分能不能直接用。我的回答挺拧巴的:能,但你先想清楚你要它干嘛。如果你只是想知道"这个变异值不值得进实验室验证",那它就是个筛选器,排序、人工看前N个,问题不大。如果你要拿它下结论,那它不够,它从来没打算够。
顺便,我把那个内部工具的接口改了。现在默认返回排序和原始的多维输出,那个单一分数要主动展开才看得到,旁边挂一行字写清楚它不适用于哪些输入。做起来有点讨人嫌,但那次之后我没再听过类似的问题。
Atlas那个评分我不会直接用。不是因为它错——它可能比我自己盯着原始输出瞎猜准得多——是因为我太清楚一个数放在那儿,人(包括我自己)会怎么用它。
本期缴税:一次"方便"换来一次"被方便带走"。下次见。
