Table of Contents
Running PhyloPythiaS+ (PPS+ or PPSP) under Ubuntu
개요
PPSP는 metagenomic sequence에 대한 자동적인 taxonomic binning을 실시하는 도구이다. 입력물은 contig/scaffold sequence, 혹은 1 kb 이상의 long read가 전부 가능하다. 원래 expert analysis를 필요로하는 PhyloPytiaS를 개선하여 이 과정을 자동화함과 동시에 marker gene에 의한 분석이 추가된 것이다.
- 논문(PhyloPythiaS+: a self-training method for the rapid reconstruction of low-ranking taxonomic bins from metagenomes. PeerJ 2016) Supporting Text S2 (installation instructions) Supporting Text S3 (tutorial)
- PPS+ 프로그램 다운로드(GitHub)
(주의) PPS+ 개발자는 Oracle VirtualBox용 가상머신 이미지를 제공하여 사용하는 것을 권장한다. 그러나 ova 파일을 다운로드할 수 있는 URL이 현재 유효하지 않은 것 같다. Reference DB 역시 그러하다.— Haeyoung Jeong 2017/05/02 15:59
Ubuntu 환경 준비
PPS+를 우분후 환경에 설치하는 것은 가상머신을 그대로 가져다 임포트하여 쓰는 것보다는 조금 불편하다. 대신 하드웨어 성능을 최대한으로 활용할 수 있다는 장점이 있다. 2012년 5월 도입하여 만 5년 동안 업무용으로 사용했던 컴퓨터(Intel Xeon E5520, 메모리 16 GB, NVIDIA GTS 450 그래픽스 카드)에 우분투 데스크탑 16.04 LTS를 설치한 후 PPS+를 설치하여 활용하고자 하였다. Installation instructions 문서에서는 우분투 12.04 LTS를 기준으로 기술하고 있다. 우분투 설치 직후에 한 일은 다음과 같다.
- 이더넷 어댑터 설정
- 업데이트(sudo apt-get update && sudo apt-get upgrade) 후 재부팅(update만 입력하면 실제 업그레이드는 되지 않는다. yum과는 좀 다름). sudo apt-get dist-upgrade는 어떤 명령어인가? 나중에 알아보자.
- SSH 설정(sudo apt-get install openssh-server; /etc/ssh/sshd_config를 편집하여 Port 변경; sudo systemctl restart sshd.service) ⇐ 12.04LTS에서는 sshd 서비스를 기동하는 명령이 약간 다르다.
실로 오랜만에 우분투가 설치된 컴퓨터(가상머신이 아닌)를 갖게 되었다. 내가 사용하는 모든 리눅스 서버에는 CentOS가 설치되어 있다.
우분투에 PPSP 설치하기
물리적 메모리와 swap의 합이 최소한 20 GB가 되는지 확인한다.
$ free --giga total used free shared buff/cache available Mem: 15 0 15 0 0 15 Swap: 15 0 15
필요한 패키지 설치하기
$ sudo apt-get install python-biopython $ sudo apt-get install ruby1.8 $ sudo apt-get install sqlite3 $ sudo apt-get install libsqlite3-dev $ sudo apt-get install rubygems (이것은 좀 이상함) $ sudo apt-get install ruby-sqlite3 $ sudo apt-get install libsqlite3-ruby1.8 (이것도 좀 이상함) $ sudo apt-get install p7zip-full $ sudo apt-get install vim $ sudo apt-get install git
rubygems과 libsqlite3-ruby1.8은 Ubuntu 12.04 LTS에서 설치할 때에는 아무런 오류 메시지 없이 지나갔었다. 어쩌면 Ununtu 16.04 LTS에서는 패키지들의 이름이 바뀌거나 다른 패키지에 해당 기능이 포함되었는지도 모른다. Ubuntu package search 사이트에서 약간의 힌트를 얻을 것으로 기대하였으나 rubygems 패키지는 무슨 용도인지 아직 파악하기 어렵다. python으로 치자면 pip와 유사한 것이라는 생각이 드는데…
- Package rubygems (12.04LTS): package management framework for Ruby libraries/applications
- Package rubygems (16.04LTS): Virtual package. Provided by ruby
- Package libsqlite3-ruby1.8 (12.04LTS): transitional package for ruby-sqlite3
디렉토리 구성
먼저 /mnt/host_shared 디렉토리를 만든다. 여기에는 모든 reference data가 복사될 것이다. 다른 곳에 압축을 푼 뒤 심볼릭 링크를 만들어도 무방하다. 압축파일로서 크기는 약 13 GB이다. 원래 PPS+ 프로그램을 설치한 다음 여기에 포함된 update -r <reference data> 명령으로 이를 다운로드하여 설치하는 것이 정석이다. 그러나 무슨 이유인지 update 명령이 작동하지 않는다. 아마도 서버의 주소에 문제가 생긴 것으로 보인다. 따라서 이전에 시험삼아 설치하였던 reference_NCBI2014513.tar.xz 파일을 이용하기로 하였다. xz는 다소 생소한 압축 파일 포맷이다.
$ sudo mkdir /mnt/host_shared $ cd /mnt/host_shared $ sudo cp path-to-reference/reference_NCBI2014513.tar.xz . $ sudo xz -d reference_NCBI2014513.tar.xz (상당한 시간이 소요됨) $ sudo tar xvf reference_NCBI2014513.tar (상당한 시간이 소요됨)
다음으로는 /apps/pps 디렉토리를 만들고, /mnt 아래에 /apps의 심볼릭 링크를 만든다. 약간 혼동스러우니 조심하여 실행한다.
$ sudo mkdir -p /apps/pps $ sudo ln -s /apps /mnt/apps (차라리 ln -s /apps /mnt라고 입력하는 것이 더 명확할 것이다)
이제 PPS+ 배포용 패키지를 가져다가 압축을 해제한 뒤 지정된 위치에 옮긴다.
$ git clone https://github.com/algbioi/ppsp.git $ cd ppsp $ sudo cp * /apps/pps $ cd /apps/pps $ sudo 7za x ppsp_distribution.7z (distr/ 아래에 압축이 풀림) $ sudo mv distr/* .
마지막으로 ~/.bashrc에 다음을 추가한다.
PATH=/apps/pps/sys:/apps/pps/tools:$PATH export PYTHONPATH=/apps/pps/sys:/apps/pps/tools/ppsplus:$PYTHONPATH
/apps/pps 디렉토리(하위 포함)의 소유주를 사용자로 바꾸면 매번 sudo를 하지 않아도 된다.
$ sudo chown -R hyjeong.hyjeong /apps/pps $ sudo chown -R hyjeong.hyjeong /mnt/host_shared/reference_NCBI20140513
업데이트는 필요하지 않다!
설치가 완료되면 update -s 및 update -t 명령으로 system tool과 패키지를 업데이트하라고 Installation instructions 파일(steps 6-7)에 나와있지만, 이미 최신 버전을 GitHub에서 받았으니 그럴 필요가 없다. 실제로 update 명령을 실행하면 에러만 나온다. 그리고 reference data도 이미 위에서 설치를 하였다.
Test running
설치 상태가 온전한지 확인하기 위한 테스트 러닝을 실시해 보자. 입력용 FASTA file, 출력물 디렉토리 및 모든 파라미터는 configuration file에서 지정한다. 프로그램 패키지에는 reference에 따라서 두 종류의 configuration 파일이 들어있다. 이번에 사용할 파일은 /apps/pps/tools/config_ppsp_vm_refNCBI20140513_example.cfg이다. 이 파일을 열어보면 입력용 파일과 결과/임시 데이터가 저장될 곳을 다음과 같이 지정하고 있다. 결과물용 디렉토리는 이미 만들어져 있어야 한다.
inputFastaFile=/apps/pps/samples/test_3strains/test_3strains.fna pipelineDir=/apps/pps/tests/test02
최초 실행하기
test_3strains.fna 파일이 수록한 유전체 서열 정보는 다음과 같다(total ~19 Mb). ambiguous base의 최대 크기는 nnnnnn(N=6)이다. 쉽게 말해서 sequence gap을 long 'nnnnn…n'으로 포함하지 않은, 순수한 contig sequence에 해당한다.
2825 19090046 52316 10355 6757 (count, total, max, n50, average)
$ time ppsp -c /apps/pps/tools/config_ppsp_vm_refNCBI20140513_example.cfg -n -g -o s16 mg -t -p c -r -s ... ------------------------------------------------- PPS "train" return code: 1 Traceback (most recent call last): File "/apps/pps/tools/ppsplus/algbioi/core/run.py", line 998, in <module> main() File "/apps/pps/tools/ppsplus/algbioi/core/run.py", line 508, in main raise Exception("PPS train returned with non-zero %s status: %s" % (trainProc.returncode, trainCmd)) Exception: PPS train returned with non-zero 1 status: /mnt/apps/pps/tools/PhyloPythiaS/1_3/scripts/train.rb /apps/pps/tests/test02/working/PPS_config_generated.txt real 7m23.628s user 9m19.720s sys 0m12.852s
실패의 원인은 무엇일까?
아무래도 ruby의 버전이 문제인 듯하다.
$ ruby -v ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]
ruby1.8을 설치했다고 믿었는데 그렇지가 않은 모양이다. 이젠 ruby까지 공부해야 하는가?
우분투 버전을 바꾸어서 해결하다
동일 서버에 Ubuntu 12.04LTS를 재설치하여 PPS+와 레퍼런스 데이터를 재설치한 뒤 테스트 러닝을 실시하니 무사히 끝났다. 요즘 기준으로 12.04LTS는 매우 오래된 배포판이지만 어쩔 도리가 없다. 설치 후 해야할 작업을 적어보자.
- SSH 데몬 구동
- NVIDIA GTS 540 드라이버 설치: sudo apt-get install nvidia-current
나머지 필요한 작업은 위에서 살펴본 우분투에 PPSP 설치하기를 그대로 적용하면 된다.
가상 머신을 이용한 활용 사례
64비트 Oracle VirtualBox(다운로드 링크)를 설치한 뒤 가상머신 파일(다운로드 링크)을 가져다가가 파일→가상 시스템 가져오기…로 불러서 임포트하면 된다. 문제는 2017년 5월 4일 현재 이 .ova 파일의 다운로드 링크가 유효하지 않다는 것이다. 가상머신을 최초로 부팅하기 전에 공유 폴더를 설정해야 한다. 가상머신 안에서 /mnt/host_shared로 마운트되는 영역을 실제 디스크 드라이브 내의 적정한 곳에 지정하라. 그 다음으로는 여기에 reference data를 풀어야 한다.
Windows 10
CentOS
macOS Sierra(10.12.4)
설치 환경은 VirtualBox 5.1.20이다. 가상머신을 임포트하여 공유 폴더를 설정한 뒤 부팅을 하니 /mnt/apps/ppa/tools/ 디렉토리가 없는 것을 발견하였다. ppsp 등 중요한 프로그램은 여기에 있어야 한다. GitHub에서 가져온 압축파일을 풀어서 해당 디렉토리를 복사해 넣었다. 테스트 러닝에는 약 두 시간이 소요되었다. 참고로 ppsp_output_screen출력 화면을 캡쳐하여 소개한다.