Nanopore作为三代测序的代表之一,虽然其错误率非常让人蛋疼,但是价格相对亲民(一万的测序仪不香么)且具有实时测序实时分析的特点,对于不具有大型测序仪测序条件的地方有其独有的优势。Nanopore测序检测的是通过微孔的若干个碱基的电压变化信号(测序原理请自行了解)。因此,为了获得每个碱基的具体组成(即basecalling),需要解析电信号,涉及到机器学习等方面的算法应用。目前Nanopore官方推荐的basecalling工具为Guppy,其有两种主要模式:一种是CPU模式,即利用CPU进行Basecalling;另一种是GPU模式,即利用GPU进行Basecalling。GPU模式比CPU模式要快很多很多很多。根据一份benchmark(https://esr-nz.github.io/gpu_basecalling_testing/gpu_benchmarking.html#gpu_ram_usage37),使用高性能的GPU进行Basecalling和CPUbasecalling比起来可以说是一个在天上一个在地下。

0e6d2fb7757a7e7ab3a507f41bb8b3e4.png

########################想看正确姿势的这部分可以跳过###################

手头有一DELL T630,然后淘了一块NVIDIA的Tesla M40 24G的GPU,剩下的应该很EASY了。毕竟找到了一份保姆级教程(https://blog.csdn.net/Lucifer_zzq/article/details/88997018)。开干!

1、服务器安装Ubuntu16.04,/var目录单独挂载一个大的盘(>1TB)或将全部容量都挂载在根目录(/)下。

2、重启后从cuda中安装GPU驱动和CUDA,并不用单独安装GPU驱动,但是为了避免出错,我是单独安装的。cuda8下载地址位于

https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run

下载cuda8和GPU驱动

wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run

wget https://download.nvidia.com/XFree86/Linux-x86_64/450.80.02/NVIDIA-Linux-x86_64-450.80.02.run

先要关闭lightdm,也就是图形界面:

sudo service lightdm stop

安装显卡驱动

sudo sh NVIDIA-Linux-x86_64-450.80.02.run

安装时有三个选项需要选

有错误,直接继续安装

531508acb4e9bf249731b24764a32067.png

DKMS注册到内核,否

400b78ed10de7bb6e5f7322407744fa3.png

是否安装32位驱动,是否都行

fa33c66876a57f3b50203bcbee30ddbb.png

安装cuda

sudo sh ./cuda_8.0.61_375.26_linux-run

注意选择不安装驱动和opencl

3、测试

输入nvidia-smi查看显卡安装情况,

然鹅,duang,出现了问题!

$nvidia-smi

Killed

讲道理网上说安装好了出来的都是这种。 同时安了guppy也无法开始basecalling。

2018c0c1ebfc6096d494934cd286d419.png

    我这个貌似不太对!经过反复更换系统版本、更换系统内核版本、更换GPU驱动和CUDA版本依然没有解决这个问题,折腾了三四天之后实在不行了。同时,注意到Nanopre官方说需要算力大于6.1的GP

U,这块M40明显也不够啊。只有借助金钱的力量了。

9ae3657c8ec5b0586012f6245fcd7625.png

#####################折腾结束的分割线############################

    在我漫长的折腾里面发现了一个令人痛苦的事情,那就是显卡型号、显卡驱动版本、CUDA版本、系统内核版本和Guppy版本这几者是环环相扣的。这不禁让我想到了在某个github里看到的那句让人内牛满面话:

8dcaaccb7f20cee2d8d6a0ec100567be.png

EXTREMELY DIFFICULT!!!

    后来我意识到其实根本不需要服务器,所以为了一劳永逸的解决问题去配了一台普通PC,大概的配置如下:

CPU:十代酷睿i7

GPU:NVIDIA GeForce RTX3080 10GB

内存:32G

硬盘:4TB

    选择RTX3080的原因是3090太贵,而且从算力上来说是一样的(那你为什么不买3070?)。

3fb935fcdac62034d1390eaefc971a3b.png

    后续就是安装Ubuntu 18.04,安装18.04的原因是Nanopre技术支持说他们在逐步放弃对16.04的支持,所以为了避免意外选择了18.安装好ubuntu。进入系统进行一个升级。

sudo apt-get update

sudo apt-get upgrade

    安装GPU驱动,可以手动安装也可以用cuda11安装。我是分开安装的

sudo apt-get install nvidia-driver-455

    重启后输入nvidia-smi,显示正常

    然后安装CUDA11.1,先去https://developer.nvidia.com/zh-cn/cuda-downloads根据你的操作系统选择要下的cuda,选择runfile wget下载再丢到服务器上去或者直接wget下载。

666ab02c6927552db25ad54385238bfa.png

sudo sh./cuda_11.1.0_455.23.05_linux.run

    等待片刻解压之后开始安装。出现一个用户须知之后输入accept,

    取消勾选安装GPU driver然后直接看是install。安装好后要把cuda的bin和lib加入环境变量,用vim打开 ~/.bashrc

vim ~/.bashrc

    在文件的最末加上如下内容:

export CUDA_HOME=/usr/local/cuda-11.1

export PATH=PATH:" role="presentation" style=" font-size: 15px; overflow-wrap: normal; display: inline; line-height: normal; text-align: left; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">PATH:PATH:CUDA_HOME/bin

export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64{LD_LIBRARY_PATH:+:" role="presentation" style=" font-size: 15px; overflow-wrap: normal; display: inline; line-height: normal; text-align: left; word-spacing: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">{LD_LIBRARY_PATH:+:{LD_LIBRARY_PATH:+:{LD_LIBRARY_PATH}}

    保存退出(vim不知道的朋友自行百度)

source ~/.bashrc

    生效,重启一下系统之后测试一下cuda是否安装成功。

    进入

cd NVIDIA_CUDA-11.1_Samples/1_Utilities/deviceQuery

    编译

make

    运行

./deviceQuery

    显示pass即安装成功。

    最后安装guppy可以有三种方式,1、直接下编译好的文件;2、deb包安装;3、从源apt安装,方法见nanopore官网

    如果是编译好的文件运行:

~/ont-guppy/bin/guppy_basecaller -i ~/data/fast5_pass/ -s ./fastq/--flowcell FLO-MIN106 --kit SQK-LSK109 -x cuda:0

    deb包或从源安装运行:

guppy_basecaller -i ~/data/fast5_pass/ -s ./fastq/--flowcell FLO-MIN106 --kit SQK-LSK109 -x cuda:0

    然鹅又报错了

[guppy/error] Common::LoadModuleFromFatbin: Loading fatbin file shared.fatbin failed with: CUDA error at /builds/ofan/ont_core_cpp/ont_core/common/cuda_common.cpp:54: CUDA_ERROR_NO_BINARY_FOR_GPU

    驱动和cuda都没问题了,你guppy还有问题那就是你的问题了。在nanopore的community上发现guppy的编译涉及到cuda版本的问题,有可能官方发布的guppy不是用11编译的。这种事情明显超出我能解决的范围了,所以我直接去找了技术支持。不得不说nanopore的技术支持还是很迅速和专业的,等了几分钟后一个技术小姐姐出现了,果然她告诉我目前的4.2.2是cuda10.1的,所以结论是你的显卡太新了(黑人问号)。不过没关系,我同事用cuda11做了一个demo版本的,链接(https://mirror.oxfordnanoportal.com/software/analysis/ont-guppy_4.2.2_linux64_cuda11.tar.gz)给你你去用吧。因为是编译好的二进制文件,所以不用安装了,直接用就完事。

再次运行:

~/ont-guppy/bin/guppy_basecaller -i ~/data/fast5_pass/ -s ./fastq/--flowcell FLO-MIN106 --kit SQK-LSK109 -x cuda:0

    正常开始运行,总共花了大概70分钟就完成了400多个fast5文件的高精度(HAC)basecalling,相对于CPU的龟速(大概10多个小时,还是fast模式)真的是太快了。

60a66fa38c0c4afa2cdcef4c39022f77.png

输入watch -n 1 nvidia-smi,一秒一刷新看一下GPU运行情况,正常!

ea3782841d23885181ace4408a83c079.png

所以,没事还是要多去调戏技术小姐姐。接下来就是进行序列质控和分析了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐