上个月我用手头一个膜蛋白复合物的冷冻电镜数据集,从RELION 4.1迁移到5.0把单颗粒分析的完整流程重新跑了一遍。这个版本跟以前所有RELION都不一样——它不是在旧框架上打补丁,而是把底层的算法逻辑和工作流设计都换了一套。这篇就把我这段时间用RELION 5.0的经验整理成一份教程总结,从它的核心原理、安装迁移,到标准单颗粒流程的完整跑法,再到实际运行中遇到的几个坑和解决办法,一次性讲清楚。无论你是正在犹豫要不要升级的老用户,还是打算直接从5.0上手的新手,这篇应该都能帮你省下不少摸索时间。
1. RELION 5.0到底改了什么:为什么这次更新值得关注
先说结论:5.0不是换了界面的小版本迭代,而是把整个数据建模方式重写了。我一开始打开5.0的界面,第一反应是“这怕不是打开错了软件”,但真正跑完一轮流程之后,才意识到这套新逻辑解决了老版本好几个老大难问题。理解这几点,后面操作起来就不会一头雾水。
1.1 从实空间密度图到傅里叶空间连续表征
老版本RELION的核心流程继承自传统单颗粒分析思路:把三维密度图离散成实空间的网格体素,每次迭代通过FFT在实空间和傅里叶空间之间来回切换,计算投影像与实验图像的比对误差。这套思路经过十多年验证,本身没什么毛病,但它有一个绕不开的瓶颈——网格化的表示方式会限制结构变化的表达。柔性区域或者需要连续形变的构象状态,在固定网格上拟合起来非常吃力。
5.0最根本的变化在于:分子结构不再用实空间网格来表示,而是直接表达成傅里叶空间中的连续结构因子。投影计算在傅里叶域里本身就是一条采样线,这一步在数学上天然简洁,省掉了大量正逆变换的开销。说一个我能直接感受到的差异:用4.1版本跑3D精修的时候,柔性区域经常出现“糊成一片”或者出现网格伪影的情况,5.0跑出来的密度图明显更干净,边缘轮廓更锐利。
用一个不那么严谨但容易理解的类比:老版本像用坐标纸上的点阵去描一条曲线,点阵越密越精细,但始终有点状感;5.0直接用一个函数去描述这条曲线,连续性好、细节表现力强,尤其在描述“变化”这件事上有天然优势。
1.2 采样策略:从随机摸索到梯度引导
老版本的3D分类和多构象分析,本质上依赖预设分类数加随机采样的策略。你告诉软件分4类,它就试着把你的一组粒子往4个方向去分,状态之间靠随机扰动慢慢探索。这种做法不是不能用,但它严重依赖你对样品的预判——分类数设多了容易把同一状态拆成碎片,设少了又分不开真正不同的构象。为了找一个合适的分类数,我过去常常要跑好几轮试错。
5.0的采样器引入了梯度信息。每一轮迭代更新参数时,算法会判断“往哪个方向走,后验概率改善最快”,然后优先朝那个方向迈步,同时保留MCMC的随机性来避免掉进局部最优。说人话就是:以前采样是蒙着眼在构象空间里摸,现在带了个指南针,效率自然不一样。
这个改变最直接的价值在于,自动构象分析不再需要你拍脑袋定分类数。软件会根据数据本身的分布特征,自己决定学到多少个状态。我测下来发现它对细微构象差异的感知很敏锐,有些以前靠经验才能发现的小变化,5.0直接就能给出来。
1.3 界面和工作流的重新设计
5.0的GUI换了框架,整体布局和4.x差异很大。所有任务模块都收进左侧导航栏,操作路径比以前短,几步就能从一个模块切到另一个模块。它还内置了几个模板化的工作流,比如完整的单颗粒分析流程和自动多构象分析流程。这点对新用户比较友好,但我的建议是:新手别一上来就直接跑组合工作流,先把运动校正、CTF估计、粒子提取、2D分类这些独立模块分别跑通一遍,搞清楚每一步的输入输出是什么。组合工作流出问题的时候,定位故障步骤会容易很多。
2. 安装与迁移:最容易翻车的几个环节
RELION 5.0的安装方式和4.x总体一致,但依赖项明显变多、版本要求更严格。我这次在新服务器上从零编译了一次,中间踩了几个不大不小的坑,这里把要点整理出来。
2.1 源码编译的依赖选择
我推荐源码编译安装,因为它能针对你的显卡架构做优化,预编译包经常跑不满GPU性能。编译前需要确认这几项:
- 操作系统:Ubuntu 20.04/22.04,或者Rocky Linux 8以上
- 编译器:GCC 9.3以上,推荐GCC 10或11
- CUDA:11.8或12.2以上,显卡驱动必须对应升级
- 依赖库:FFTW3、FLTK 1.3以上、TIFF、libpng、Python 3.8以上、PyTorch 2.0以上
CMake配置里最容易翻车的是CMAKE_CUDA_ARCHITECTURES这个参数。它必须和显卡的计算能力精确匹配,A100是8.0,RTX 3090是8.6,RTX 4090是8.9,H100是9.0。填错了编译过程可能不报错,但运行时会直接提示找不到可用的kernel image。我这次就是一开始没指定,结果编译完一跑就崩,重新编了一遍才解决。
cmake -DCMAKE_INSTALL_PREFIX=/path/to/relion5 \ -DCMAKE_CUDA_ARCHITECTURES=8.6 \ -DCMAKE_BUILD_TYPE=Release .. make -j 16编译时间取决于CPU核心数,通常40到80分钟。建议编译的时候去干点别的,不用一直盯着。
2.2 从旧版本迁移数据的兼容性问题
如果你手上正好有4.0或4.1跑到一半的项目,star文件是可以直接导入5.0继续处理的,基本兼容。但有几个细节需要注意:
- 老版本star文件里某些参数名的拼写和5.0不完全一致,打开时会提示警告,一般不影响计算,但建议先跑一个快速的2D分类任务验证数据链路是否正常。
- 从老版本拿到的实空间密度图作为5.0的初始模型,直接放进去就能用,不需要转格式。不过如果重建图分辨率很低,建议先在RELION里做一次低通滤波,平滑到20到30埃再作为起点。
- box size的影响比我想象中大。老版本提取的粒子若box size偏大(360甚至448),导入5.0后显存占用可能直接翻倍。条件允许的话先用bin2或bin3的数据测试,等流程跑通了再换全分辨率。
2.3 并行调度和GPU绑定
5.0的多进程并行和GPU绑定关系比4.x更敏感。最常见的错误是MPI的多条进程默认把工作都砸到同一块GPU上,导致显存溢出,其他卡闲着。
单卡运行时,我的mpirun参数是这样的:
mpirun -np 2 relion_refine_mpi --o job001/run1 --gpu "0:0""0:0"的意思是第一个MPI进程绑定0号卡,第二个进程也绑定0号卡。多卡环境按顺序写就行,比如"0:1:2:3"对应四张卡。
用SLURM提交任务时还要注意,--gres=gpu:N声明的显卡数量和mpirun的进程数要匹配,否则会出现“GPU not available”的报错。我自己的习惯是先在命令行前台跑一个小任务确认绑定没问题,再丢到队列里跑大规模任务。
3. 标准单颗粒流程在5.0里的完整走法
从导入微图到最后拿到锐化密度图,标准流程在5.0里的整体顺序跟老版本是一样的,但每一步的操作细节都有变化。我把完整走法按顺序拆开讲一遍。
3.1 预处理:运动校正与CTF估计
5.0内置的运动校正模块可以直接处理beam-induced motion,基于patch的方式对大多数数据集的校正效果不输MotionCor2。我用下来感觉内置模块的参数更少、更好调,对新手更友好。当然,如果你习惯在MotionCor2里跑完再导入微图,也完全可以跳过这一步,直接把微图目录导进5.0就行。
CTF估计这块,5.0依然走CTFFIND4或Gctf接口。提醒一个小坑:每次新建处理项目时,“像素大小”和“加速电压”这两个基础参数务必人工核对一遍。它俩错了的话后面所有步骤都会连锁出错,而且错误结果往往看起来还挺合理,很难及时发现。
3.2 粒子挑选与2D分类
5.0自带的Laplacian-of-Gaussian模块适合挑选轮廓比较完整的球形或近球形颗粒。但膜蛋白复合物、纤维状样品这类形状不规则的样本,LoG效果就一般了。我目前的做法还是先用Topaz或CryoLO做一轮初步挑选,再导入RELION 5.0做后续处理。
粒子提取后会先做一轮2D分类,这一步几乎是样品质量的试金石。5.0的2D分类速度比4.x快,但它的默认分类数偏大,50类对于动辄几十万粒子的大数据集没问题,但如果你的粒子总数只有几万,建议把分类数降到20到30类,否则很容易出现大量空类。
分类完成后挑类族的时候,我的标准是:看类平均图有没有清晰二级结构、轮廓是否完整、背景干不干净。这几个条件都满足的类族合起来进下一步。
3.3 初始模型与3D精修
初始模型可以用内置的Initial model模块从头生成,也可以拿已知的PDB模型或者以前算出的低分辨率密度图低通滤波后作为起点。5.0对初始模型的质量要求比4.x宽容一些,只要初始模型的大致形状和真实结构没有方向性错误,后续精修基本能纠正过来。
3D精修模块对应的就是3D auto-refine,核心参数和4.x类似,无非是对称性、像素大小、mask直径这几项。但有一个明显区别:5.0不再要求你手动设置角度采样步长这类细化参数,软件会根据收敛情况自动调整,不需要老手靠在GUI上反复试。如果你是抱着“找回掌控感”的心态来的,可能得花点时间适应这种“新式托管”的节奏。
精修结束后,第一件事是打开FSC曲线看收敛程度。如果FSC在低分辨率区就开始往下掉,多半不是精修参数的问题,而是初始模型或输入粒子本身有问题。
3.4 后处理与分辨率评估
后处理模块包含mask生成、B因子锐化和FSC计算,基本用法和4.x一致。差异在于5.0的mask可视化工具更好用,可以直接在三维切片上实时调整mask的大小和边界。
这里分享一个我踩过几次坑后总结出的经验:mask不要收得太紧。很多刚接触冷冻电镜处理的人以为mask贴着密度边缘做,分辨率数字会好看,但实际上紧mask更容易引入噪声相关性,导致FSC虚高,这个数字自欺欺人没有意义。我的做法是mask边缘离目标密度留出8到12个像素的缓冲,这样算出来的分辨率更真实,后续做原子模型搭建也更稳。
3.5 用5.0的自动多构象分析处理柔性区域
这是5.0最让人兴奋的新功能,也是我迁移到5.0的直接原因。操作上不复杂:准备好一组对齐过的粒子,给一个初始模型,启动多构象分析工作流,设置期望的状态数上限和迭代轮数,就可以跑起来了。
跑完后软件会返回一组不同构象的密度图以及对应的粒子分布比例。需要特别提醒一点:算法给出来的“状态”应该被当作一种数据驱动线索,而不是最终结论。我遇到过算法把一个小loop区域的细微摆动识别成独立状态,把本来连续的构象变化切成了两段这种情况。判断哪个状态真正具备生物学意义,还是得结合结构知识来做,必要时把相似状态的粒子合并后重新精修一轮,效果通常更干净。
4. 实战中真实遇到的问题与处理方式
用了这段时间的RELION 5.0,我积累了四五个比较典型的实战问题,在这分享出来,每一个我都确认过解决办法,可以直接参考。
4.1 显存占用比想象中高,怎么解
我第一次用5.0跑3D精修就遇到显存溢出。对比4.x,同样粒子数和box size,5.0的显存占用高出30%到50%——它的傅里叶空间表征需要缓存大量中间系数,这是新算法为了效率增加的正常开销。解决思路从便宜到贵排序:
- 调小batch size。参数面板里的
mini-batch size默认是128,降到64或者32,显存压力显著下降,收敛速度损失不大。 - 减小box size。从360降到256,分辨率损失不一定看得出,显存释放是实打实的。
- 多卡分担。
--gpu参数把不同进程分散到多张卡上。
实测下来,一张24G显存的RTX 3090,处理box size 256、20万粒子的数据集是没问题的。box size超过320,建议直接上多卡。
4.2 自动构象分析收敛到冗余状态
这是多构象分析里最常遇到的问题:算法输出8个状态,但仔细看里面有三对状态差异极小,可能就一两个loop的摆动幅度不同。根源在于5.0的采样器足够灵敏,能捕捉到极细微的差异,但“差异”不等于“不同构象”,后者需要生物学意义来支撑。
处理方式:先把各状态的中心区域密度图并排看一遍,同时看它们对应的粒子子集比例。如果两个状态占比接近、差异区域集中在某一柔性loop,且其他部分完全一致,就手动把它们合并,再跑新一轮精修。别怕这一步“手动干预”,自动构象分析负责帮你发现潜在状态,而确认状态合理性本来就是人的工作。
4.3 与CryoDRGN等深度学习工具的衔接问题
RELION 5.0的自动构象分析确实强,但它和CryoDRGN擅长的事情不完全一样。CryoDRGN能在连续潜在空间里展示完整的构象变化轨迹,更适合研究构象变化路径;RELION 5.0输出的离散状态密度图,更适合直接进入原子模型搭建和结构分析流程。
目前我个人的处理流程是:先用RELION 5.0跑离散多构象分析,拿到几个高质量状态密度图,再根据具体问题用CryoDRGN看连续过渡区域。两者互补,没有谁替代谁的问题。
4.4 GPU利用率低,怎么定位问题
如果跑任务时发现GPU利用率只有30%到50%,大概率不是算力不够,而是IO瓶颈或者进程绑定问题。我的排查顺序是:
先用nvidia-smi确认GPU实际计算负载,再用mpstat看CPU状态。如果CPU跑满而GPU空闲,黄灯先亮给数据读取路径——把中间文件放在机械硬盘上几乎必然导致这个问题。把输出目录和临时文件挪到SSD或NVMe盘上,GPU利用率可以轻松提升20个百分点以上。
如果CPU负载不高、GPU也不满,问题大概率出在MPI进程和GPU绑定上,按2.3小节的绑定方式重新配置就好。
5. 给准备入坑5.0的同行几句实在话
如果你正打算从老版本迁到RELION 5.0,我的建议是:别把正在进行的重大项目直接一次性切过来,先拿一小批粒子把流程完整跑一遍,确认参数和输出都符合预期,再大规模迁移。我见过不止一个同事急着换新版,结果花了三天找兼容性问题,最后又退回老版本。
还有一个小技巧:每跑完一个关键任务,就在GUI里把参数界面截图或者把参数存成文本记下来。5.0的运行日志会记录参数,但不会记你当时的想法——比如“这一步为什么把分类数设成20而不是30”。我当时踩过这个坑,后面专门建了个实验记录文件,每一轮处理写两三句备注,回看时省了大量时间。
最后说说纯个人的体会:用5.0跑完这一整轮之后,最大的收获其实不是速度变快了多少,而是构象分析这件事终于不那么玄学了。以前靠猜分类数、靠经验判断收敛的日子过去了,算法本身就能给出清晰线索。但反过来说,它对使用者的结构生物学判断力要求更高了——软件能自动找到差异,你能不能判断这些差异意味着什么,才是决定一篇论文质量的关键。工具越智能,人的判读能力越不能丢。