
上个月我用手头一个膜蛋白复合物的冷冻电镜数据集从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或11CUDA11.8或12.2以上显卡驱动必须对应升级依赖库FFTW3、FLTK 1.3以上、TIFF、libpng、Python 3.8以上、PyTorch 2.0以上CMake配置里最容易翻车的是CMAKE_CUDA_ARCHITECTURES这个参数。它必须和显卡的计算能力精确匹配A100是8.0RTX 3090是8.6RTX 4090是8.9H100是9.0。填错了编译过程可能不报错但运行时会直接提示找不到可用的kernel image。我这次就是一开始没指定结果编译完一跑就崩重新编了一遍才解决。cmake -DCMAKE_INSTALL_PREFIX/path/to/relion5 \ -DCMAKE_CUDA_ARCHITECTURES8.6 \ -DCMAKE_BUILD_TYPERelease .. 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:00:0的意思是第一个MPI进程绑定0号卡第二个进程也绑定0号卡。多卡环境按顺序写就行比如0:1:2:3对应四张卡。用SLURM提交任务时还要注意--gresgpu: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 size5.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跑完这一整轮之后最大的收获其实不是速度变快了多少而是构象分析这件事终于不那么玄学了。以前靠猜分类数、靠经验判断收敛的日子过去了算法本身就能给出清晰线索。但反过来说它对使用者的结构生物学判断力要求更高了——软件能自动找到差异你能不能判断这些差异意味着什么才是决定一篇论文质量的关键。工具越智能人的判读能力越不能丢。