| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- Kaggle
- CNN
- 파이썬
- 캐글
- 알파폴드
- ncbi
- 결정트리
- 서열정렬
- 인공신경망
- 바이오인포매틱스
- COVID
- 생물정보학
- BLaST
- SVM
- AP Computer Science A
- 시그모이드
- RNN
- 자바
- Java
- bioinformatics
- 인공지능
- AP
- 단백질 구조 예측
- 이항분포
- 바이오파이썬
- 오류역전파
- 딥러닝
- 생명정보학
- 로제타폴드
- 인공지능 수학
- Today
- Total
데이터 과학
단백질 구조 예측 시스템 구축에서의 문제점 본문
단백질 구조 예측을 하기 위한 시스템 구축에서 문제가 되었던 부분을 정리했습니다.
RTX 5050 호환성에 대한 GPU 부분에서 문제가 있어, CPU로 구동해야 하는 상황이어서 이에 대한 내용을 GPT를 사용해 정리해 보았습니다.
CPU만 구동해도 시간이 좀 걸리기는 해도 단백질 서열 정보가 나타납니다.
RoseTTAFold All-Atom(RFAA) 로컬 설치와 단백질 구조 예측 실습
1. RoseTTAFold All-Atom이란?
RoseTTAFold All-Atom(RFAA)은 단백질을 비롯한 다양한 생체분자의 3차원 구조를 예측하기 위해 개발된 딥러닝 기반 구조 예측 모델입니다.
기존 RoseTTAFold가 주로 단백질의 구조 예측에 초점을 맞추었다면, RoseTTAFold All-Atom은 단백질뿐만 아니라 DNA, RNA, 소분자 리간드 등 다양한 분자를 원자 수준에서 함께 표현하고 구조를 예측할 수 있도록 확장된 모델입니다.
RFAA에서 단백질 구조를 예측하는 전체 과정은 다음과 같이 이해할 수 있습니다.
아미노산 서열 → FASTA 파일 → HHblits / HHsearch → MSA 생성 및 Template 검색 → RoseTTAFold All-Atom 딥러닝 모델 → 원자의 3차원 좌표 예측 → PDB 파일 생성 → PyMOL을 이용한 구조 시각화
RFAA를 로컬 컴퓨터에 구축하면 단순히 구조 예측 결과만 확인하는 것이 아니라, 아미노산 서열이 MSA와 구조 template 검색을 거쳐 최종적인 3차원 구조로 변환되는 전체 생명정보학 과정을 직접 관찰할 수 있습니다.
2. 실제 구축한 RFAA 실행 환경
운영체제 : Ubuntu Linux
Python : Python 3.10
Conda : Miniforge
환경명 : RFAA
GPU : NVIDIA GeForce RTX 5050 Laptop GPU
VRAM : 약 8GB
PyTorch : 2.7.1+cu128
CUDA : 12.8
DGL : 1.1.2
Conda 환경을 활성화합니다.
conda activate RFAA
현재 사용되는 Python을 확인합니다.
which python
PyTorch와 CUDA 버전은 다음과 같이 확인할 수 있습니다.
python -c "import torch; print(torch.version, torch.version.cuda)"
DGL 버전과 설치 위치도 확인할 수 있습니다.
python -c "import dgl; print(dgl.version, dgl.file)"
3. RTX 5050에서 RFAA 설치가 까다로웠던 이유
이번 설치에서 가장 어려웠던 부분은 RFAA 자체보다 RTX 5050과 RFAA가 사용하는 구형 소프트웨어 구성 사이의 호환성 문제였습니다.
RTX 5050 Laptop GPU는 NVIDIA의 비교적 최신 GPU 세대에 속합니다. 반면 RFAA가 사용하는 일부 라이브러리, 특히 DGL 1.1.2는 상당히 이전에 개발된 버전입니다.
따라서 최신 GPU인 RTX 5050, CUDA 12.8, PyTorch 2.7.1+cu128, DGL 1.1.2, RFAA의 SE(3)-Transformer가 하나의 환경에 들어가게 됩니다.
여기에서 PyTorch는 RTX 5050과 CUDA 12.8을 정상적으로 사용할 수 있었지만, 설치되어 있던 DGL 1.1.2 바이너리는 CUDA 기능이 활성화된 상태가 아니었습니다.
4. PyTorch가 GPU를 인식한다고 모든 라이브러리가 GPU를 사용할 수 있는 것은 아니다
먼저 NVIDIA GPU 상태는 nvidia-smi로 확인할 수 있습니다.
nvidia-smi
PyTorch에서도 CUDA를 사용할 수 있는지 확인할 수 있습니다.
python -c "import torch; print(torch.cuda.is_available())"
GPU 이름도 확인할 수 있습니다.
python -c "import torch; print(torch.cuda.get_device_name(0))"
PyTorch가 CUDA를 정상적으로 사용한다고 해서 RFAA 전체가 GPU에서 정상적으로 실행되는 것은 아닙니다. RFAA 내부의 SE(3)-Transformer 계산에는 DGL(Deep Graph Library)도 사용됩니다.
즉 PyTorch의 CUDA 사용 가능 여부와 DGL의 CUDA 사용 가능 여부가 모두 충족되어야 합니다.
5. DGL이란 무엇인가?
DGL은 Deep Graph Library의 약자로 그래프 신경망(Graph Neural Network)을 구현하기 위한 라이브러리입니다.
단백질 구조에서는 아미노산이나 원자를 노드로 보고 이들 사이의 관계를 edge로 표현할 수 있기 때문에 그래프 구조가 매우 중요합니다. RFAA의 SE(3)-Transformer는 이러한 공간적 관계를 처리하면서 회전과 이동에 대해 일관된 3차원 정보를 학습하고 계산합니다.
따라서 RFAA에서는 PyTorch뿐만 아니라 DGL도 중요한 역할을 합니다.
6. 실제 발생했던 DGL CUDA 오류
DGL이 CPU에서는 정상적으로 동작했지만 graph를 CUDA로 이동시키면 다음과 같은 오류가 발생했습니다.
CUDA DGL FAILED
Device API cuda is not enabled.
Please install the cuda version of dgl.
이 메시지는 RTX 5050이나 CUDA 자체의 고장이 아니라 현재 설치된 DGL 라이브러리 자체가 CUDA backend를 사용할 수 없는 빌드라는 의미입니다.
정리하면 RTX 5050, NVIDIA Driver, CUDA 12.8, PyTorch CUDA는 정상이며 DGL CUDA만 사용할 수 없는 상태였습니다.
7. 왜 DGL 1.1.2를 CUDA 12.8용으로 다시 컴파일하기 어려웠는가?
DGL 1.1.2를 CUDA 12.8 환경에 맞게 소스에서 직접 컴파일하는 방법을 시도했지만, DGL 1.1.2는 최신 CUDA 12.8 환경을 전제로 만들어진 소프트웨어가 아니기 때문에 여러 오래된 dependency에서 문제가 발생했습니다.
문제가 나타난 대표 구성요소는 METIS, TensorPipe, libuv, dmlc-core, HugeCTR, CUDA host compiler, CMake compatibility입니다.
특히 최신 GCC, CMake, CUDA와 오래된 DGL 1.1.2 소스 코드 사이에서 호환성 문제가 연속적으로 발생했습니다.
8. METIS에서 발생한 문제
METIS의 오래된 C 코드가 최신 컴파일러에서 다음과 같은 경고를 발생시켰습니다.
‘iadjwgt’ may be used uninitialized
‘fadjwgt’ may be used uninitialized
문제는 단순한 warning으로 끝나지 않고 빌드 옵션에 -Werror가 적용되면서 warning이 error로 처리되었다는 것입니다.
즉 warning → -Werror → error → 컴파일 중단의 과정이 발생했습니다.
9. TensorPipe와 libuv에서 발생한 const 오류
또 다른 대표적인 오류는 다음과 같았습니다.
assignment discards ‘const’ qualifier from pointer target type
[-Werror=discarded-qualifiers]
실제로 libuv의 strrchr(), strchr() 사용 부분에서 최신 컴파일러가 const qualifier 문제를 발생시켰습니다. 여기에서도 -Werror 때문에 일반 compiler warning이 치명적인 compile error로 바뀌었습니다.
10. CUDA와 GCC에서도 추가 문제가 발생
CUDA 12.8의 NVCC는 사용할 수 있는 GCC 버전에 제한이 있습니다.
실제로 다음 오류도 발생했습니다.
unsupported GNU version!
gcc versions later than 14 are not supported!
또한 CUDA header와 시스템 C/C++ header 사이에서도 cospi, sinpi, rsqrt 등의 함수 선언 충돌이 발생했습니다.
결과적으로 DGL 1.1.2를 최신 CUDA 환경에서 직접 컴파일하는 것은 단순히 명령어 한두 개로 해결되는 문제가 아니었습니다.
11. 따라서 DGL을 계속 컴파일하지 않은 이유
목적은 DGL 자체를 개발하거나 최신 GPU용 DGL 패키지를 만드는 것이 아니라 RoseTTAFold All-Atom으로 단백질 구조를 예측하는 것입니다.
DGL 1.1.2의 소스를 수정하면서 METIS, TensorPipe, libuv, HugeCTR, CUDA 컴파일러 문제를 하나씩 해결하는 것은 가능할 수도 있지만 RFAA를 사용하는 목적에서는 지나치게 많은 시간과 유지보수 비용이 발생합니다.
따라서 현재 환경에서는 RFAA가 안정적으로 실행되는 경로를 우선 확보하는 방법을 선택했습니다.
12. 현재 사용한 해결 방법: RFAA를 CPU 모드로 실행
가장 간단한 방법은 RFAA 실행 프로세스에서 GPU를 보이지 않게 하는 것입니다.
export CUDA_VISIBLE_DEVICES=""
export DGLBACKEND=pytorch
export TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1
CUDA_VISIBLE_DEVICES=""는 현재 프로세스에서 CUDA GPU를 사용하지 않도록 합니다. 따라서 CUDA를 지원하지 않는 DGL 1.1.2가 GPU graph를 생성하려다가 실패하는 문제를 피할 수 있습니다.
DGLBACKEND=pytorch는 DGL의 tensor backend로 PyTorch를 사용하도록 지정합니다.
TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1은 RFAA의 기존 checkpoint 및 PyTorch 파일을 현재 PyTorch 환경에서 불러오는 과정에서 발생할 수 있는 torch.load() 호환성 문제를 완화하기 위해 사용했습니다.
13. CPU 모드의 의미
이 방법을 사용한다고 해서 RTX 5050이 고장났거나 CUDA 설치가 실패했다는 의미는 아닙니다.
현재 시스템은 RTX 5050과 PyTorch에서는 CUDA를 사용할 수 있지만 DGL 1.1.2에서는 CUDA를 사용할 수 없는 상태입니다. 따라서 RFAA를 CPU 모드로 실행하는 것입니다.
14. RTX 5050의 8GB VRAM도 고려해야 한다
DGL 문제와 별개로 또 하나의 현실적인 제한은 GPU 메모리입니다.
RTX 5050 Laptop GPU의 VRAM은 약 8GB입니다. 실제 GPU 실행을 시도했을 때 torch.OutOfMemoryError: CUDA out of memory 오류도 발생했습니다.
당시 GPU 전체 용량 약 7.53GiB 중 PyTorch가 약 6.65GiB를 할당하고 있었고, 남은 메모리는 약 417MiB였습니다. 추가로 약 740MiB를 할당하려다 실패했습니다.
RFAA는 단백질 길이가 증가하면 pair representation 등의 메모리 사용량이 크게 증가할 수 있기 때문에 8GB VRAM은 복잡하거나 긴 단백질을 분석하기에는 여유가 크지 않습니다.
15. 간단한 단백질 구조 예측 샘플 만들기
먼저 RFAA 디렉터리로 이동합니다.
conda activate RFAA
cd /data/rfaa/program/RoseTTAFold-All-Atom
샘플 디렉터리를 만듭니다.
mkdir -p examples/simple_test
FASTA 파일을 생성합니다.
cat > examples/simple_test/simple.fasta <<'EOF2'
simple_protein
MKTIIALSYIFCLVFADYKDDDDK
EOF2
16. RFAA 설정 파일 만들기
RFAA는 Hydra configuration system을 사용하므로 분석할 FASTA 파일을 YAML 파일에서 지정해야 합니다.
cat > rf2aa/config/inference/simple_test.yaml <<'EOF2'
defaults:
- base
- self
job_name: "simple_test"
protein_inputs:
A:
fasta_file: examples/simple_test/simple.fasta
loader_params:
MAXLAT: 32
MAXSEQ: 128
MAXCYCLE: 2
EOF2
job_name은 분석 작업의 이름이며 fasta_file에는 실제 분석할 단백질 FASTA 파일의 위치를 지정합니다.
17. 샘플 실행하기
현재 구축한 환경에서는 CPU 모드를 먼저 사용하는 것이 안정적입니다.
conda activate RFAA
cd /data/rfaa/program/RoseTTAFold-All-Atom
export CUDA_VISIBLE_DEVICES=""
export DGLBACKEND=pytorch
export TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1
그 다음 실행합니다.
python -m rf2aa.run_inference --config-name simple_test
설정 파일 이름이 simple_test.yaml이라도 실행 명령에서는 .yaml을 제외하고 simple_test만 입력합니다.
18. 실행 과정
RFAA를 실행하면 FASTA → SignalP → HHblits → MSA → PSIPRED → HHsearch → Template 정보 → RoseTTAFold All-Atom → 3차원 구조의 과정이 진행됩니다.
실행 중에는 다음과 같은 로그가 나타날 수 있습니다.
Running HHblits against UniRef30 with E-value cutoff 1e-10
Running HHblits against UniRef30 with E-value cutoff 1e-6
Running HHblits against UniRef30 with E-value cutoff 1e-3
Running HHblits against BFD with E-value cutoff 1e-3
Running PSIPRED
Running hhsearch
19. Failed to find XXXX in *_pdb.ffindex 메시지
실제 실행 과정에서 다음과 같은 메시지가 나타나기도 했습니다.
Failed to find 6qc0_B in *_pdb.ffindex
Failed to find 6qc0_D in *_pdb.ffindex
Failed to find 6qc0_F in *_pdb.ffindex
이 메시지만 보고 전체 예측이 실패했다고 판단할 필요는 없습니다. HHsearch가 template 후보를 찾았지만 현재 사용하는 구조 데이터에서 해당 template의 구조 정보를 불러오지 못했다는 의미일 수 있습니다.
가장 중요한 판단 기준은 최종 PDB 파일이 생성되었는가입니다.
실제 이번 테스트에서는 다음 파일이 생성되었습니다.
./simple_test.pdb
./simple_test_aux.pt
20. 생성된 결과 확인
find . -maxdepth 2 -type f ( -name "simple_test*.pdb" -o -name "simple_test*_aux.pt" ) -print
전체 파일 위치는 다음과 같습니다.
/data/rfaa/program/RoseTTAFold-All-Atom/simple_test.pdb
/data/rfaa/program/RoseTTAFold-All-Atom/simple_test_aux.pt
이 가운데 가장 중요한 결과는 simple_test.pdb입니다. 이 파일에는 RFAA가 예측한 단백질 원자의 3차원 좌표가 저장되어 있습니다.
21. PyMOL로 구조 확인하기
생성된 PDB 파일은 PyMOL에서 바로 확인할 수 있습니다.
pymol /data/rfaa/program/RoseTTAFold-All-Atom/simple_test.pdb
PyMOL에서 단백질을 cartoon 형태로 표현하려면 다음 명령을 사용할 수 있습니다.
hide everything
show cartoon
orient
원자 구조까지 자세히 보고 싶다면 show sticks를 사용할 수 있고, 단백질 표면은 show surface와 set transparency, 0.5로 표현할 수 있습니다.
22. 새로운 단백질을 분석하는 방법
환경 구축이 끝난 후에는 RFAA나 데이터베이스를 다시 설치할 필요가 없습니다.
새로운 아미노산 서열 → FASTA 작성 → YAML 작성 → RFAA 실행 → PDB 생성 → PyMOL 확인의 순서를 반복하면 됩니다.
예를 들어 두 번째 실험을 simple2_test라고 한다면 examples/simple2_test/simple2.fasta를 만들고 rf2aa/config/inference/simple2_test.yaml을 만든 후 다음과 같이 실행합니다.
python -m rf2aa.run_inference --config-name simple2_test
Cannot find primary config 'simple2_test' 오류가 나타난다면 대부분 rf2aa/config/inference/simple2_test.yaml 파일이 존재하지 않기 때문입니다.
23. RTX 5050 환경에서 RFAA를 사용하면서 확인한 점
이번 구축 과정에서 가장 중요한 점은 최신 GPU가 있다고 해서 오래된 생명정보학 딥러닝 프로그램이 자동으로 최신 GPU를 사용할 수 있는 것은 아니라는 사실입니다.
RFAA는 PyTorch, DGL, SE(3)-Transformer, HHblits, HHsearch, PSIPRED, SignalP 등 여러 구성요소가 연결된 프로그램입니다.
특히 이번 시스템에서는 RTX 5050 + CUDA 12.8 + PyTorch 자체는 정상적으로 작동했지만 DGL 1.1.2의 CUDA 지원이 가장 큰 호환성 문제였습니다.
또한 DGL 문제를 해결하더라도 RTX 5050 Laptop GPU의 약 8GB VRAM에서는 긴 단백질 분석 시 CUDA out of memory가 발생할 가능성이 있습니다.
따라서 현재 구성에서는 우선 CPU 모드로 RFAA의 전체 파이프라인이 정상적으로 작동하는 것을 확인하고, GPU 가속은 별도의 호환 환경을 구성하여 해결하는 것이 안정적인 방법입니다.
마무리
RoseTTAFold All-Atom의 로컬 설치는 일반적인 Python 프로그램보다 상당히 복잡합니다. 특히 최신 RTX 50 시리즈 GPU와 CUDA 환경에서는 RFAA가 개발될 당시 사용하던 DGL 및 여러 dependency와 현재 시스템 사이에 호환성 문제가 발생할 수 있습니다.
이번 구축에서는 이러한 문제를 확인하면서 최종적으로 간단한 단백질 서열에 대해 simple_test.pdb와 simple_test_aux.pt가 정상적으로 생성되는 것까지 확인했습니다.
따라서 RFAA의 전체 구조 예측 파이프라인 자체는 정상적으로 구축된 상태이며, 새로운 단백질을 분석할 때는 FASTA 작성 → YAML 설정 → RFAA 실행 → PDB 생성 → PyMOL 시각화의 과정을 반복하면 됩니다.
'생명정보학 & 화학정보학 > 알파폴드와 단백질 구조 예측' 카테고리의 다른 글
| Docker 설치 - 알파폴드3 구축 관련 (0) | 2026.08.26 |
|---|---|
| AlphaFold 3 , RoseTTAFold-All-Atom 서버 접속 및 사용 방법 (0) | 2026.08.13 |
| AlphaFold 3 설치 및 데이터베이스 구축하기 (0) | 2026.08.12 |
| 로제타폴드에 데이터베이스를 더 추가하면 좀 더 정확해 질까? (0) | 2026.08.12 |
| Google Colab에서 RoseTTAFold2가 작동하는 원리 (0) | 2026.08.11 |
