Threading은 1994년 1회 단백질 구조 예측대회(CASP)때, 그 효과를 인정받은 구조인식 알고리듬의 별명이다.
더 공식적인 이름은 구조인식(fold recognition)이다. 구조인식이란 서열을 가지고, 그 서열이 속할 것 같은 구조를 인식해 낸다는 뜻이다. 그러므로, 서로 완전히 다른 객체인 서열과 구조를 서로 서로 비교한다는 것이 특징이다. 보통 생정보학에서는 같은 종류의 서열-서열, 구조-구조를 많이 비교한다. 서열비교는 상동성을 다이내믹프로그래밍과 같은 방법을 계산해내는 것이고, 구조 비교는 3차원 좌표를 서로 비교해서, 유클리디안거리(Euclidian distance)가 얼마나 차이가 나는 가를 계산하는 것이다. 그러면, 서로 상이한 객체인 서열과 구조는 어떻게 비교를 할수 있을까?
실꿰기의 핵심은 서열정보의 아미노산은 일정한 3차원 구조를 이미 가지고 있어서, 이것들은 알려진 3차원 단백질 구조에 구슬를 꿰듯이 한칸씩 밀어넣으면서 화학적 안정성을 계산하는 것이다. 만약 한 서열과 한 구조가 정말로 같은 조상에서 나왔고, 비슷한 3차원 구조를 가진다면, 그 비교점수가 높게 나올 것이다. 아미노산은 매우 작은 분자이므로, 우리는 오래전에 중요한 20개의 아미노산 3차구조를 X-ray로 모두 해석해 냈다.
완벽한 실꿰기는 자신의 구조에 자신의 서열을 꿰어보는 것이다 (The best threading result is to thread a sequence to its own 3D structure)
세상에서 가장 완벽한 구조인식은 자신의 서열에 자신의 구조를 꿰어 보는 것이다. 그럴 때 나온 화학 안정성 점수는 그 크기의 단백질이 가지는 정상적인 원래의 안정성 점수이다.
완벽한 실꿰기: 자신의 서열에 자신의 구조를 꿰는것
> MVRTYKLSFPGPRQWE (구조) => 점수: 100 점
MVRTYKLSFPGPRQWE (서열)
그러면, 최학의 실꿰기는 어떤 경우인가? (What is the worst case for threading?)
그런 경우는 어렵지 않게 상상할수 있다. 단백질은 크게 3종류의 2차구조를 가지고 있다.
이 2차구조는 2차원의 평평한 구조가 아니고, 일종의 조그만 조각들을 말한다.
단백질은 알파나선(alpha helix)와 비타(beta sheet)판으로 주로 되어 있다. 그러므로,
서로 매우 다른 2차구조를 가지고, 3차원 전체 구조가 매우 다른 구조를 가진
단백질을 서로 실꿰기로 비교하면, 아주 나뿐 점수를 얻을수 있다.
실꿰기 단백질 구조인식 절차(Protein threading procedure) 실제 사용자와 컴퓨터는 어떤 과정을 거쳐서 구조인식을 할까?
실꿰기 단백질 구조인식의 절차는 다음과 같다.
1) 구조를 알고싶은 서열을 가져와서 3D-PSSM (http://www.sbg.bio.ic.ac.uk/3dpssm/)과 같은 구조인식 서버를 통해 입력한다.
2) 구조인식프로그램은 서열을 서버내부에 미리 구축되어 있는 3차원 단백질 틀(Template)과 하나씩 비교를 한다.
MVRTYKLMMPPGPRQWE(구조) => 점수: 5점
MAKTMKVMKGQM (서열)
MVRTYKLMMPPGPRQWE(구조) => 점수: 10점
MAKTMKVMKGQ (서열)
MVRTYKLMMPPGPRQWE(구조) => 점수: 15 점
MAKTMKVMKGQ (서열)
MVRTYKLMMPPGPRQWE(구조) => 점수: 20 점
MAKTMKVMKGQ (서열)
MVRTYKLMMPPGPRQWE(구조) => 점수: 25 점
MAKTMKVMKGQ (서열)
MVRTYKLMMPPGPRQWE(구조) => 점수: 30 점
MAKTMKVMKGQ (서열)
MVRTYKLMMPPGPRQWE(구조) => 점수: 35 점
MAKTMKVMKGQ (서열)
3) 이때, 아미노산 조각하나씩을 3차원 구조에 밀어 넣으면서 안정성을 계산한다.
그리고, 만약 한 서열과 구조가 정말로 같은 조상에서 나왔으면, 비슷한 3차원 구조를 가질 확률이 높아서, 점수가 높게 나올것이다. 4) 만약 100개의 아미노산을 가진 서열과 150개의 아미노산을 가진 3차원구조틀과 빅교를 한다면, 최소한 150개의 가능한 쌍 혹은 정렬이 나온다. 그러나, 문제는 두개의 유사성을 비교할때 아미노산 사이사이에 틈이 들어갈 수 있다는 것이다. 특히, 진화상으로 많은 거리를 가진 것들이 그렇다. 그러므로, 실제로 가능한 정렬 쌍의 수는 매우 많을 수 있다.
MVR---TYKLSFPGPRQWE (구조) => 점수: 80 점
PAATCMVRKGQTDK-SFP (서열)
5) 모든 가능한 비교가 끈나면, 그중에서 가장 점수가 높은 쌍의 정렬과 점수를 얻게 된다.
6) 사용자는 점수가 높게 나온 쌍들을 보고, 그 중에서, 가장 기능적으로 맞다고 생각되는 것을 선택한다. 그 선택은 사람에 따라 다를수 있으나, 진짜 짝을 찾으면, 누구나 쉽게 그것을 알수 있다.
7) 필요하면, 사용자는 구조인식에서 나온 정력을 사용하여, 사용했던 서열의 3차원 구조 모델링을 할수 있다.
8) 구조 모델링을 한 구조와 점수가 높게 나온 틀(template)의 구조를 3차원적으로(구조-구조) 비교를 하면, 그 두 구조사이의 3차원적 유사성도 알수가 있다. 이때, 쓰이는 방법을 영어로 structure superimposition 이라고 한다. 9) 구조인식의 최종 점수는 모델링된 구조와, 누군가 실험을 통해서 해석해낸 서열의 진짜 구조를 비교할때 도출된다.
구조인식알고리듬의 성능비교는 이런식으로 된다.
실꿰기 단백질 구조인식 점수구하기 (Protein threading procedure)
일단 실꿰기를 통해서 구조들의 유사성들이 들어나면, 그것을 기반으로하여, 이종간의 서열들의 유사성을 수치로 나타낼수 있다. 이때, 이 수치는 score라고 할수 있는데, 생정보학에서 모든 스코어는 크게 두가지로 나뉜다. 하나는 알고리듬에 고유한 방법에 의해 나오는 계산된 절대적 점수들이다. 예를 들면, 인간 단백질 p53의 실꿰기에 의한 점수가 PDB의 한 3차원 구조의 유사성이 화학에너지 함수에 의해서, -30,34 kCal 이 나왔고, 이 것은 친족성이 없는 것보다 상당히 높다는 것이 그 화학함수를 만든 사람들의 의견이면, 그것은 높은 절대 값이다. 그러나, 만얀, p53 서열과 비슷한 점수를 가지는 3차원 구조가 몇 백개가 나오고, 비교해야할 단백질의 3차원 구조가 원래 매우 크다면, 통계적으로 볼때, -30.34 kcal이 나올 확율이 높아진다. 이럴 경우, 친족성의 통계적 유의성이 떨어지므로, 새로운 통계적인 점수를 만들어서, 그 절대치 점수가, 진짜로 의미 있다는 것을 보여줄 필요가 있다. 이런 통계적 점수는 주로, P-value, E-value등으로 표시된다.
실꿰기는 많은 전산력을 필요로 한다(Threading requires much computing)
단백질 실꿰기 알고리듬은 매우 많은 전산량을 요구하는 알고리듬이다. 한 서열과 한 구조를 비교하는데, 예날에서 몇분씩이나 걸렸다. 그러면, 3000개의 3차원 구조와 10,000개의 구조를 모두 비교하려면, 3000 곱하기 10,000 번의 계산을 하고 하나에 2분씩 걸린다면, 6천만분의 시간이 필요하다. 그래서, 필연적으로 생정보학자들은 어떻게든 많은 CPU를 확보하고, 또, 최적화를 시켜서 각각의 계산 속도를 줄여야 할 필요가 생겼다. 그렇게 하는 가장 첫번째 방법이 클러스터를 쓰는 것이다.
CPU 농장운영 (Running CPU farm) CPU 농장(CPU farm)을 만들어서 많은 CPU를 동시에 사용하여 60,000,000 번의 계산을 10,000 개의 CPU로 한다면, 약 6000 분이면 충분하다. 이렇게 CPU를 동시에 사용하는 것을 병렬화 전산(parellel computing)이라고 하고, 2000년대 이전에는 병렬화 프로그래밍(parallel programming)을 하여, 여러개의 CPU를 생정보학 프로그램들이 활용토록 하였다.
병렬화 프로그래밍(parallel programming)
단백질 실꿰기 구조인식등에 쓰이는 병렬화 프로그래밍은 전산작업의 여러단계에서 이루어진다. 가장 좋은 병렬화는 CPU수준의 하드웨어에서 일어나는 것이다. 인텔, AMD등의 회사에서는 이제는 4개의 CPU를 한 칩에 넣어서 판매를 하는데, 이렇게 많은 CPU를 하드웨어에서 알아서 활용하도록 해준다면, 생정보학 프로그래머는 많은 시간을 절약할수 있다. 그러나, 일반적으로 생정보학자들이 만드는 프로그램은 그런식의 병렬화에 적합하지 못한 경우가 많다. 그래서, 생정보학자는 PVM, MPI등의 병렬화에 필요한 C 언어 라이브러리를 사용하여서, 프로그램수준에서 알아서 CPU를 찾아서 병렬로 돌아가도록 해야한다. PVM은 1990년대 중반에 많이 이용되었고, FASTA알고리듬도 PVM을 지원토록 되었었다.
큐잉 (줄세우기) 병렬화 방법(Processor Queuing)
단백질 구조인식에서는 PVM이나 MPI가 잘 사용될수 있으나, 그런 라이브러리는 시간이 가면 변하고, 또, 하드웨어와 운영시스템에서 지속적으로 관리를 해줄 필요가 있다. 이 불편함 때문에, 많은 생정보학자들이 더 쉽고 간단한 방법으로 병렬로 구조인식 알고리듬을 돌리는데, 그것은 여러대의 Linux컴퓨터등을 줄세우기(queuing)의 방법으로 지속적으로 일거리를 맏기는 것이다. 이것은 간단한 펄프로그램등으로도 만들수 있고, 많은 종류의 큐잉프로그램들이 나와 있다. 가장 많이 쓰이는 것들은 PBS(Portable Batch System), Maui (http://www.supercluster.org/)등이다. 이것들은 job schedular라는 것들이 있어서, 여러대의 컴퓨터중에서 일거리가 작은 놈들에게 일를 주고, 많은 것들에게는 덜 주는 등의 분배역할을 한다. PBS는 유닉스에서 많이 쓰이는 것으로, 터미널에서나 혹은 GUI (예: xpbs)에서 명령들을 쳐 넣어야 하는데, 다음과 같은 명령프로그램들을 쓴다. • qstat - show status of PBS batch jobs, queues, or a batch server • qdel - delete PBS batch job • qmove - move PBS batch job from one queue to another one • qalter - modifies the attributes of the job
큰파일을 쓰는 전산알고리듬 큐잉처리(Queuing for algorithms that use big files)
생정보학에서 가장 많이 쓰는 블라스트 같은 알고리듬들은 큰 데이터베이스를 읽어들인다. 그러므로, 큐잉을 하는 컴퓨터 그룹의 I/O에 많은 부하를 준다. 그래서, 가능하면, 이런 알고리듬을 돌릴경우, 클러스터의 각각의 컴퓨터 노드에 사용하는 큰 파일을 아예 저장해 두고, 각각의 컴퓨터가 자신의 저장장소에서 큰 파일들을 읽을수 있도록하는게, I/O의 부하를 많이 줄이는 방법이다.
댓글 0