2022년 2월 16일 수요일

PyTorch를 이용하여 long read binner(LRBinner) 실행하기 - 일단은 실패!

Nanopore read 혹은 이를 대상으로 만들어진 조립물에 대하여 직접적으로 사용할 수 있는 metagenomics binning tool이 없을까? 지금까지 알려진 대부분의 도구는 short read를 대상으로 하였다. 이를 long read 혹은 그로부터 만들어진 assembly에 적용하기에는 무리가 있다. 왜냐하면 거의 필수 정보로 여겨지는 coverage information을 long read에 대해서 얻는 것은 - 불가능한 것은 아니지만 - 적합하지 않기 때문이다.

비교적 초창기에 개발된 소프트웨어인 MyCC를 잠시 테스트해 본 일이 있다. Coverage information을 주지 않고도 썩 잘 작동한다고 알려져 있지만, 요즘에는 사용자들의 관심 밖으로 밀려난 것만 같은 느낌이 든다. 계속 검색을 해 보니 MetaBCC-LR이라는 것이 눈에 뜨였다. 논문을 찾아서 읽어 보았다. k-mer와 trinucleotide composition 등 다양한 자료를 수집하여 bin 수립을 위한 모델을 만들어서 read를 분류한 뒤, 이를 별도로 조립하면('partitioned assembly') 샘플 속에 섞인 다양한 미생물의 유전체를 나누어서 재구성할 수 있다는 것이다.

이를 테스트하려고 소스를 컴파일하면서 잘 안되는 부분을 해결하려 애쓰다가 MetaBCC-LR의 저자 4명 중에서 3명이 모여 만들어낸 LRBinner라는 것까지 발견하게 되었다. 이는 MetaBCC-LR의 개선판으로서, read뿐만 아니라 contig도 입력물로 사용할 수 있다고 하였다. 개별 연구실에서 nanopore 장비를 직접 구입하여 응용의 폭을 점점 넓혀가는 요즘 시대에 아주 적절한 도구가 아닐 수 없다.

GitHub를 참조하여 conda에 환경을 만든 뒤 파이썬 소스를 클론하여 빌드를 하였다. 개발자가 제공하는 샘플 데이터를 이용하여 테스트 실행을 하는데 '--cuda'라는 옵션이 말썽을 부린다.

"raise AssertionError("Torch not compiled with CUDA enabled")"

그러면 이 옵션을 빼고 실행하면 되지 않겠나... 성공적으로 실행을 완료하였다. 

자, 그러면 최근 구입한 GeForce RTX 3080 장착 컴퓨터에 이를 설치하면 GPU를 이용한 계산이 되지 않을까? GitHub에서 알려준 방법 그대로 새 컴퓨터에 LRBinner를 설치하여 테스트 데이터를 분석해 보았다. 역시 같은 문제가 발생하였다. nvidia-cuda-toolkit 패키지가 설치되지 않았다는 사실을 발견하고 apt로 이를 설치한 뒤 LRBinner를 깔았으나 역시 마찬가지의 문제가 발생하였다. Guppy basecaller 실행에는 nvidia-driver-510을 설치하는 것으로 충분하였기에(이때 자동으로 cuda driver도 설치되는 것으로 알고 있음) 그때는 잘 몰랐었다.

PyTorch는 요즘 인기를 얻고 있는 오픈소스 머신 러닝 라이브러리로서, GPU 사용이 가능하다. 사실 Pytorch라는 것이 있다는 것도 오늘 처음 알았다! 윈도우에 PyTorch 설치, GPU 설정, 자세하게라는 글을 참조하여 다음과 같이 실행해 보았다.

$ conda create -n lrbinner -y python=3.7 numpy scipy seaborn h5py tabulate hdbscan gcc openmp tqdm biopython # 일단은 pytorch를 포함시키지 않음
$ conda activate lrbrenner
(lsbinner) $ conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
$ python
Python 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:21) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.get_device_name(0) 
'NVIDIA GeForce RTX 3090'
>>> torch.cuda.is_available() 
True
>>> torch.__version__
'1.4.0'
>>> quit()
(lrbinner) $ git clone https://github.com/anuradhawick/LRBinner.git
(lrbinner) $ cd LRBinner; python setup.py build

LRBinner가 잘 돌아갈 수 있게 PyTorch가 깔린 것 같다. 그런데 이번에는 다른 에러가 난다.

RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED

으으으... 이건 또 뭔가? 어쩔 도리가 없이 '--cuda' 옵션을 제거한 뒤 다시 LRBinner를 실행하여 결과를 얻을 수 있었다.

기왕 장착한 GPU를 이용하여 더 많은 일을 해 보고자 하였는데 처음부터 완벽할 수는 없을 것이다. 일단 guppy는 잘 돌아가고 있고, 비록 GPU를 쓰는 상황은 못 되었지만 long read(or assembly)를 대상으로 하는 최신의 metagenomics binning tool을 쓰게 되었으니 완벽한 실패는 아닌 셈이다.


댓글 없음: