ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

GeneMark-ES/ET/EP安装实战:从许可证配置到三种运行模式详解

GeneMark-ES/ET/EP安装实战:从许可证配置到三种运行模式详解 1. 安装前先搞清楚ES、ET、EP 到底选哪个我最早接触 GeneMark-ES/ET/EP 是在做某个无参考基因组物种的从头注释时导师丢给我一个基因组草图和一句话“去把基因结构预测跑出来。”我当时第一反应是——这不是有 AUGUSTUS 吗为什么还要用 GeneMark后来踩了一串坑才明白GeneMark 这一套工具在真核基因组注释里扮演的角色远不是“多一个预测软件”那么简单尤其是 ES 模型几乎是后续所有基因结构预测工作的“地基”。很多人第一次看到 GeneMark-ES/ET/EP 这个名字会误以为它是一个软件的三个版本其实不是。ES、ET、EP 是同一套框架下的三种不同运行模式区别主要在“有没有外部证据”以及“怎么利用外部证据”。ESEukaryotic Self-training完全无监督的自训练模式输入只有基因组序列本身软件自己从头训练模型、识别基因结构。适合没有任何转录组、蛋白质证据的“裸基因组”。ETEukaryotic Transcript-based需要提供 RNA-seq 比对结果通过转录组证据优化基因结构特别是外显子边界和可变剪切的预测会准很多。EPEukaryotic Protein-based需要提供同源蛋白质序列利用保守蛋白做证据对注释基因的完整性和保守结构域识别很有帮助。ETEP 组合模式两个证据同时上条件允许的情况下一般是最稳的选择。所以安装之前你得先想清楚一个问题我到底要跑哪种模式这不仅影响你对依赖包的准备比如 ET 需要额外准备 RNA-seq 比对文件也会影响你验证安装是否成功的方式。这篇博文会把安装过程和三种模式的运行准备一起讲透保证你按顺序走完就能跑起来不再被网上各种残缺教程带偏。适合谁来参考生信初学者、刚接手基因组注释项目的同学以及所有被 GeneMark 官网下载页面和许可申请流程搞得一头雾水的朋友。我下面写的每一步都是自己在服务器上真实执行过、踩过坑、又填平了的流程。2. 环境准备依赖、用户和目录别在这步省时间2.1 系统与账号的基本要求GeneMark-ES/ET/EP 官方提供的是 Linux 64 位版本建议在 Ubuntu 20.04/22.04 或 CentOS/Rocky Linux 上安装macOS 和 Windows 下面跑需要额外折腾虚拟机或 Docker个人不建议在生产环境这么干。你要是有服务器直接用 Linux只有本地电脑的话装个 Ubuntu 虚拟机也行但后续跑大型基因组预测时会很吃力因为内存和CPU核数直接决定运行时间。安装前老规矩先建一个非 root 用户来跑别用 root 安装。这不是矫情是 GeneMark 的脚本会产生大量临时文件和结果目录用 root 跑万一出问题清理起来极其麻烦而且权限错乱会影响后续其他工具调用。我一般是这么建用户sudo useradd -m gmark sudo passwd gmark su - gmark然后确认系统里有基础的编译工具和 Perl 环境。GeneMark 主程序其实是编译好的二进制但安装脚本和运行脚本都是 Perl所以 Perl 必须得有。绝大多数 Linux 发行版自带 Perl 5不过有些模块可能需要你额外装。2.2 依赖模块Parallel::ForkManager 这类 Perl 模块GeneMark-ES/ET/EP 的运行脚本尤其是 gmes_petap.pl依赖几个 Perl 模块最常见的是 Parallel::ForkManager用于多线程并行调度。如果没有这个模块你在跑多核任务时会直接报错或者根本起不来。我建议在安装 GeneMark 之前就把依赖装好方法很简单用 CPAN 或者系统包管理器都行# Ubuntu/Debian sudo apt install libparallel-forkmanager-perl # CentOS/RHEL sudo yum install perl-Parallel-ForkManager也可以用 cpan 手动装cpan Parallel::ForkManager装完之后验证一下perl -MParallel::ForkManager -e print qq(ok\n)能输出ok就说明没问题。2.3 Java 环境的坑版本不是越新越好GeneMark-ES/ET/EP 的核心预测程序依赖 Java安装脚本也会调用 Java 来跑一些训练步骤。我实测下来OpenJDK 8 和 OpenJDK 11 都没问题但如果你系统默认装的是 Java 17 以上很有可能会遇到奇怪的类加载错误或者内存参数不识别的问题。所以如果你服务器上没有 Java我直接推荐装 OpenJDK 8sudo apt install openjdk-8-jre-headless装完以后检查一下版本然后建议把 JAVA_HOME 写进~/.bashrc因为安装脚本可能会自动检测 Java 路径检测不到就会报错。export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$JAVA_HOME/bin:$PATH有一点要注意装 Java 和装 GeneMark 建议用同一个用户操作不然安装时检测到的 Java 路径和运行时用户的环境变量对不上后面调用会出问题。2.4 磁盘和内存心里有数GeneMark 本身安装包不大但真正跑起来耗的是临时空间和内存。ES 模式在训练阶段会生成大量中间文件一个 1GB 左右的基因组临时文件占个 20-30GB 是很常见的事。所以安装前用df -h看一下当前分区剩余空间尽量确保有 50GB 以上的可用空间不然跑一半磁盘满了你会想砸键盘的。内存方面ES 模式下每个核心大约需要 2-4GB 内存具体看基因组大小和复杂度。我通常跑 16 核任务时至少预留 64GB 内存小基因组可以适当降低但别天真地以为 8GB 内存跑 2G 基因组会顺利结束。3. 许可证申请与配置90% 的安装失败都卡在这3.1 为什么要申请许可证是不是付费的GeneMark-ES/ET/EP 对学术用户是免费的但你必须去官网申请一个许可证文件key file没有这个 key安装脚本就算跑完了真正运行预测程序时也会立刻报错退出。这也是我在好几个交流群里看到的最常见问题——软件明明装好了一运行就提示无法找到许可密钥。申请流程并不复杂但有一个关键点特别容易忽略许可证 key 和你机器的 hostname、用户名是绑定的。换句话说你在 A 服务器上申请的 key拿到 B 服务器上用是不行的。所以申请之前先确认你要在哪台机器上跑而且要用最终跑任务的用户来申请防止后续切换环境导致 key 失效。3.2 具体申请步骤打开 GeneMark 官网找到 GeneMark-ES/ET/EP 的下载页面页面里会有一个许可申请入口。你需要填写的基本信息包括姓名、单位、邮箱、用途学术/商业以及机器的 hostname在终端里输hostname就能查到。提交之后通常稍等片刻就能在邮箱里收到一封包含 license key 的邮件有的版本是直接给一个.key文件有的则是把 key 内容写在邮件正文里需要你自行保存为文件。这里有个细节你会收到两个 key一个是用于 32 位系统的一个是用于 64 位系统的。千万别拿错现在的服务器基本都是 64 位文件名通常类似gm_key_64.gz或gm_key_64解压后得到一个.gm_key文件。3.3 key 文件到底该放哪这是整个安装过程中最容易出问题的一步。根据官方文档和我的实际测试key 文件需要放到运行用户的 home 目录下并且文件名必须是.gm_key注意前面有个点是隐藏文件。下面是标准操作cd ~ # 如果你下载的是压缩格式 gunzip gm_key_64.gz mv gm_key_64 .gm_key chmod 600 .gm_key如果你收到的 key 文件名已经就是.gm_key那直接把它放到~下再改权限即可。放好后可以验证一下ls -la ~/.gm_key必须确保这个文件存在且只有当前用户可读权限过松有时候也会触发安全校验问题。另外有些文档提到可以把 key 放在 GeneMark 安装目录下但我个人建议统一放在 home 目录因为安装脚本默认搜索顺序里 home 目录优先级最高最不容易出幺蛾子。注意不要试图通过修改 hostname 来“凑合”匹配 key。一旦你改了系统 hostnamekey 就失效了只能重新申请。最稳妥的做法是申请前就确认好机器名之后不要随便改。4. 正式安装下载、解压、跑脚本、验证4.1 获取安装包官网下载页面会根据你填的系统信息给出对应的下载链接一般是一个 tar.gz 压缩包名字类似gmes_linux_64.tar.gz或更新版本的gmes_petap_linux_64.tar.gz。下载后用tar解压mkdir -p ~/software cd ~/software wget https://url/to/gmes_linux_64.tar.gz tar -zxvf gmes_linux_64.tar.gz解压后你会看到一个目录比如gmes_linux_64里面就是全部程序和脚本。这里建议把目录改个简洁的名字比如genemark并且不要有空格和中文路径后续调用方便很多mv gmes_linux_64 genemark4.2 运行安装脚本进入解压目录运行安装脚本cd ~/software/genemark ./install.sh安装脚本会自动检查系统里的 Perl、Java、依赖模块、license 文件等。如果哪一项缺失它会明确提示。我遇到过的最常见情况就是 Java 检测不到多半是因为 JAVA_HOME 没设置好回到前面的步骤检查一下即可。脚本运行过程中可能会问你安装路径之类的选项按默认回车就好除非你有特殊的目录规划。安装完成后看一下目录下是否生成了可执行文件比如gmes_petap.pl这是最重要的主脚本。4.3 配置文件与环境变量GeneMark 的脚本内部会自己定位安装目录但为了保险起见我习惯把它加到环境变量里同时把主脚本所在目录加入 PATH方便在任何目录下直接调用export GENEMARK_PATH~/software/genemark export PATH$GENEMARK_PATH/bin:$GENEMARK_PATH:$PATH把这两行写进~/.bashrc然后source ~/.bashrc。注意bin目录是否存在取决于你下载的版本有些版本主程序直接在根目录有些则在bin下你解压后看一眼目录结构就知道了。4.4 验证安装是否成功验证安装最简单的方式是查看版本文本信息gmes_petap.pl --version如果看到版本号输出说明核心脚本能正常调用。接下来更关键的一步是确认许可 key 是否被正确识别。你可以用帮助命令先看看也可以直接跑一个极小测试。我一般建议直接用一个很小的基因组 fasta 文件几 MB 就行试跑 ES 模式确认能完成训练并输出预测结果这才算真正的“安装成功”。小测试命令类似gmes_petap.pl --ES --sequence small_test.fa --cores 4这个测试最好在解压目录下的test目录里做没有也没关系自己造一个随机序列文件就行。实测几十个基因的序列片段ES 模式也能跑出结果整个过程不会太长。如果系统提示找不到许可证重新检查一下.gm_key的位置和权限如果提示 Java 相关问题重新检查 Java 版本和JAVA_HOME。这一步过关了后面的使用就顺了。5. 三种模式怎么跑ES、ET、EP 最小命令与关键参数安装只是开始真正让你觉得“这软件值了”的是把它跑起来。下面我把三种模式的最小可用命令和关键参数讲透避免你在参数海洋里迷路。5.1 ES 模式无证据从头预测ES 模式是最基础也最常用的它适合没有任何转录组和蛋白数据的物种。命令格式非常简单gmes_petap.pl --ES \ --sequence genome.fasta \ --cores 16 \ --soft_mask 1这里解释几个参数--sequence你的基因组序列fasta 格式。建议提前把染色体名称改成纯字母数字不要有|、空格、逗号等特殊符号否则程序可能在解析序列名时出错。--cores并行核心数根据你的机器配置来别贪多留几个给系统其他进程。--soft_mask如果基因组已经做了重复序列软屏蔽小写字母表示重复区加上这个参数会让 GeneMark 在训练时更合理地区分编码区和重复区。如果你的基因组没有做屏蔽可以先不加。跑的过程中会输出大量日志看到类似 “GeneMark.hmm training completed” 的提示说明训练阶段完成。最终结果会生成一个.gtf文件里面是预测的基因结构。5.2 ET 模式用转录组证据修正基因结构ET 模式需要你提供 RNA-seq 比对到基因组的 BAM 文件。注意GeneMark-ET 对输入文件格式有特定要求标准做法是先用比对软件比如 HISAT2、STAR把转录组 reads 比对到基因组上然后转换成 unsorted BAM 格式最后通过bam2hints工具生成 hints 文件。这个bam2hints工具通常在 GeneMark 安装目录的工具子目录下。完整流程大概是这样# 1. 用 STAR/HISAT2 比对得到 BAM # 2. 按基因名排序不需要直接用工具提取 hints ~/software/genemark/tools/bam2hints \ --in rnaseq.bam \ --out hints.et.gff然后运行 ET 模式gmes_petap.pl --ET hints.et.gff \ --sequence genome.fasta \ --cores 16跟 ES 相比ET 模式在预测外显子边界和可变剪切位点时准确率明显更高。如果你的物种有对应的转录组数据强烈建议优先跑 ET。没有的高通量数据也不强求ES 照样能给出一个不错的从头预测结果。5.3 EP 模式用同源蛋白数据提高保守基因预测EP 模式适合有近缘物种蛋白质组学数据的场景它的核心思路是用已知蛋白来辅助识别保守基因编码区。需要准备一个蛋白序列文件fasta 格式gmes_petap.pl --EP proteins.fasta \ --sequence genome.fasta \ --cores 16EP 模式对蛋白文件的要求是不要太冗余建议先用软件做去冗余比如 CD-HIT相似度阈值 90% 左右文件太大时计算量会非常恐怖。你也可以把 ET 和 EP 组合使用gmes_petap.pl --ET hints.et.gff --EP proteins.fasta \ --sequence genome.fasta \ --cores 16这种组合方式在已经有转录组和近缘蛋白数据的项目里几乎是无脑首选预测结果的质量比单跑 ES 高一个档次。5.4 结果文件怎么看跑完之后目录下会生成多个文件最重要的有两个output.gtf预测的基因/转录本结构注释标准 GTF 格式可以直接导入 IGV 查看也可以作为后续 AUGUSTUS 或 BRAKER 的输入。一个run目录或日志目录里面存放运行日志和中间文件出问题时先翻这里。如果是用 ET/EP 模式还会生成对应的 hints 文件和统计信息。建议拿到结果后先不要急着用先看看预测的基因数量是否在合理范围。比如一个 500MB 左右的典型真核基因组预测基因数通常在 1.5 万到 2.5 万之间如果结果给你预测出几十万个基因那大概率是参数或者序列有问题赶紧检查不要直接进入下游分析。6. 常见问题与排查技巧实录这部分是我最想写的因为网上很多教程到这里就断了而大家真正需要的恰恰是“遇到了怎么办”。我把这几年里用户群里出现频率最高的问题整理成一个速查表现象可能原因解决办法运行时报错找不到许可文件key 文件没放到~/.gm_key或 hostname 不匹配把 key 放到 home 目录设权限 600确认 hostname 是否与申请时一致安装脚本卡在 Java 检测JAVA_HOME 未设置或 Java 版本过新安装 OpenJDK 8/11将 JAVA_HOME 写入~/.bashrcET 模式报错 BAM 文件格式不对BAM 未排序或工具版本不匹配重新生成 BAM用samtools检查格式确认 bam2hints 版本跑 ES 模式时内存直接撑爆--cores给太多或者基因组太大降低核数给小基因组先测试有条件的加内存结果里基因数量异常多重复序列未屏蔽或序列污染严重先用 RepeatModeler/RepeatMasker 做重复序列屏蔽再跑 ES预测结果里 链和 - 链比例失衡基因组组装存在反向污染检查组装结果必要时用 BUSCO 评估完整性多线程跑的时候日志特别乱Perl 并行模块版本不一致卸载重装 Parallel::ForkManager确保所有节点模块版本一致6.1 许可证相关问题的终极排查许可证相关报错是最多的我再展开一下。如果你确认 key 文件已经放在 home 目录、hostname 也没变还是报许可证错误可以试试把 key 放到 GeneMark 安装目录下并在环境变量里增加一个指向 key 的变量。不同版本的环境变量名不完全一样最粗暴的办法是看安装目录下的gmes_petap.pl脚本开头搜索key相关字样你能直接看到脚本默认读哪个路径。这个办法对任何版本都适用比盲猜快得多。6.2 临时文件清理跑废了千万别直接删目录GeneMark 跑废了之后目录里会留下一堆中间文件下次运行可能因为旧文件残留而报一些莫名其妙的错误。最简单的处理方式是把运行目录里除输入文件之外的所有文件删掉尤其是tmp目录和output相关文件然后重新运行。不要直接在原目录里覆盖跑隐藏的旧配置会让你怀疑人生。6.3 关于“改 hostname”的惨痛教训我曾经在一个客户服务器上遇到过一件事安装的时候好好的过了一段时间再跑就提示许可证无效。排查了一圈才发现是云服务商重启后 hostname 被还原了跟申请 key 时不一致导致 key 失效。从那以后我学乖了申请 key 之前先确认 hostname 是否稳定如果云服务器的 hostname 会被系统重置最好先用命令手动固定 hostname再申请许可。6.4 遇到“perl: warning: Setting locale failed”这个报错很常见通常是因为服务器缺少语言环境变量解决方法也很简单export LC_ALLC export LANGC把这两行写进~/.bashrc即可。虽然不影响功能但每次跑脚本都刷一堆 warning看着烦而且有些远程任务管理工具会把 warning 当作报错信息抓取误导判断。7. 安装完之后一次完整的小型测试复盘前面步骤都走完我建议你拿出半天时间跑一个完整的小型测试不要直接拿全基因组上去试错。我一般是这么做测试的从参考基因组里随机截取一段 10-20MB 的区域保存为test.fa。如果有转录组数据随机抽取一部分 reads 比对生成一个 test.bam。分别跑 ES、ET、EP 三种模式各看一遍日志输出和结果文件。用gffread或者 IGV 手动看一下几个预测基因的坐标确认结果合理。测试不是为了获得生物学结论而是为了把环境里的隐患全部暴露出来。比如有些服务器上 Java 有多个版本测试时 ES 模式正常但 EP 模式报错这种问题只有提前试过才能发现。我通常还会在测试阶段顺手跑一个 BUSCO 评估。虽然 BUSCO 是另一个工具但它的作用不可替代——它能快速评估你的基因组完整度从而判断 GeneMark 的预测结果是否可信。如果 BUSCO 完整度只有 20%那 GeneMark 预测出的基因数量再多也意义不大问题不在软件而在输入基因组本身。这里我不想展开 BUSCO 的用法但你至少要知道GeneMark 跑出来的 GTF 文件不要直接拿去注释最好再用 AUGUSTUS 做一轮预测然后通过 EVidenceModeler 整合证据得到一个更可靠的 consensus 注释。GeneMark 在整个流程里是“种子模型”不是“最终答案”。8. 最后再分享一点个人体会如果让我只说一个最实用的建议那就是安装之前先花半小时把官网文档和 test 目录看一遍不要急着下载、解压、运行。GeneMark-ES/ET/EP 这个工具本身并不难装难的是很多人跳过了“确认运行模式”和“准备许可证”这两步结果反复在同一个坑里打转。我自己后来凡是给新服务器部署这套流程都会把下面这几件事做成 checklist确认 hostname 并提前固定再申请 key。装好 OpenJDK 8/11写进环境变量。装好 Parallel::ForkManager用测试命令验证。key 文件放到~/.gm_key权限 600。解压后先跑--version再跑小测试最后才上全基因组。始终用非 root 用户操作目录不要有中文和空格。这套流程看着啰嗦但能帮你省掉大量的排错时间。GeneMark 跑大基因组动辄一两天与其在运行到一半时发现环境问题不如在最开始就把每个环节都验证一遍。你对环境多一分敬畏你的服务器就少一分深夜崩溃的可能。
返回列表