실행 버튼을 누른 뒤 결과를 기다리는 동안, GPU 서버에서는 어떤 일이 벌어질까요? 나두바이오에서 구조 예측 작업 한 건을 따라가 보겠습니다. 입력을 준비하고, GPU에 자리를 잡고, 계산을 마친 파일이 결과 화면에 나타나기까지의 이야기입니다.
여기서 다루는 모델은 신약 연구에 쓰이는 구조 예측·단백질 설계 도구입니다. 계산으로 후보를 살펴보는 데 도움을 주며, 실제 효과는 실험에서 확인해야 합니다.
모델은 왜 GPU에서 돌아갈까
Boltz-2 같은 구조 예측 모델은 입력을 토큰 단위로 나눠 계산합니다. 단백질은 보통 아미노산 하나가 토큰 하나이고, 리간드(단백질에 붙는 작은 분자)는 원자 하나가 토큰 하나입니다. 모델은 토큰 하나하나뿐 아니라 토큰 두 개씩 짝지은 관계 전체를 표로 만들어 계산합니다. 토큰이 두 배가 되면 짝의 수는 네 배가 되는 셈이죠.
이 계산은 같은 형태의 곱셈과 덧셈을 엄청나게 많이 반복하는 일입니다. 이런 일에는 수천 개의 연산 장치가 동시에 일하는 GPU가 CPU보다 훨씬 빠릅니다. 다만 계산하는 동안 그 큰 표를 GPU 메모리에 올려 두어야 하므로, 필요한 메모리가 장치의 여유 공간을 넘으면 해당 설정으로는 실행하기 어렵습니다.
입력이 커지면 메모리는 얼마나 늘까
나두바이오는 도구별로 입력 크기에 따른 GPU 메모리 사용량을 직접 측정해 실행 기준을 정합니다. 아래는 2026년 10월 1일, NVIDIA RTX PRO 4000 Blackwell(24GB) 한 장에서 공개 구조(PDB 1UBQ, 4HHB, 6M0J, 6VXX)와 그 서열을 사용해 잰 값입니다.
표의 잔기는 단백질 사슬을 이루는 아미노산 단위입니다. 메모리는 실행 중 관측한 최대 GPU 사용량이며, 단위는 GiB(1,024MiB)입니다. 시간은 컨테이너 시작부터 종료 확인까지로, 준비 시간을 포함하지만 대기열에서 기다리는 시간은 포함하지 않습니다. 측정 당시 CPU는 4개 분량, 시스템 메모리는 16GiB로 제한했습니다.
도구 | 입력 | 최대 GPU 메모리 | 측정 실행 시간 |
|---|---|---|---|
Boltz-2 | 100토큰 | 2.6GiB | 22초 |
Boltz-2 | 600토큰 | 6.6GiB | 46초 |
Boltz-2 | 1,200토큰 | 19.0GiB | 2분 5초 |
ProteinMPNN | 793잔기, 서열 8개 | 0.8GiB | 8초 |
ProteinMPNN | 2,916잔기, 서열 100개 | 2.9GiB | 4분 38초 |
RFdiffusion | 275잔기 | 5.6GiB | 4분 30초 |
RFdiffusion | 698잔기 | 15.8GiB | 11분 10초 |
RFdiffusion의 15.8GiB·11분 10초도 RTX PRO 4000 Blackwell 한 장에서 총 698잔기 입력을 실행한 값입니다. GPU만 계산한 시간이 아니라 초기 준비까지 포함한 2026년 10월 1일 측정값입니다.
Boltz-2는 MSA 없이, 샘플 하나로 측정했습니다. MSA(같은 계열 단백질 서열을 정렬해 둔 자료)를 함께 넣거나 샘플 수를 늘리면 값이 달라집니다.
같은 GPU에서도 도구와 입력에 따라 필요한 자원이 꽤 다릅니다.
Boltz-2는 토큰이 12배(100→1,200) 늘 때 메모리가 7배 넘게 늘었습니다. 1,200토큰이면 24GB GPU의 80%를 씁니다.
ProteinMPNN(구조에 맞는 서열을 설계하는 모델)은 배치 크기를 1로 고정한 이번 측정에서 같은 입력으로 만들 서열 수를 8개에서 100개로 늘려도 최대 메모리가 같았습니다. 대신 실행 시간이 길어졌습니다.
RFdiffusion(새 단백질 뼈대를 설계하는 모델)은 길이가 늘수록 메모리와 시간이 빠르게 늘어납니다. 893잔기 입력은 첫 측정에서 15분 제한에 걸렸지만, 다음 날 컴파일 캐시를 적용한 측정에서는 776초(약 12분 56초)에 완료했습니다.
캐시는 실행에 필요한 GPU 코드를 한 번 준비해 두고 다시 쓰는 방식입니다. RFdiffusion은 이 준비에 시간이 꽤 들었고, 캐시를 적용한 뒤 줄어들었습니다. 위 표는 모든 실행의 예상 시간이 아니라 특정 입력과 환경에서 얻은 기록입니다. 698잔기의 캐시 적용 후 시간은 이 표에서 확인할 수 없습니다.
이런 측정은 실행 전 안내에도 쓰입니다. 예를 들어 Boltz-2는 확인된 토큰·샘플 수 한도를 계획을 만드는 단계에서 검사하고, 넘으면 줄일 항목을 알려 줍니다. 모든 입력의 메모리 부족을 미리 예측할 수는 없지만, 확인된 범위부터 안내하면 시행착오를 줄일 수 있습니다.
작업 한 건의 여정
1. 계획을 고정합니다
실행 계획에는 입력 파일, 설정, 사용할 도구 버전이 함께 묶여 고정됩니다. 도구 버전은 실행 환경 전체를 담은 컨테이너 이미지의 내용 해시로 지정하므로, 이름이 같아도 내용이 다른 이미지로는 실행되지 않습니다. 사람이 승인한 계획만 제출됩니다.
2. 대기열에서 기다립니다
제출된 작업은 대기열에 들어갑니다. GPU 서버가 모두 바쁘더라도 제출은 받고, 자리가 나면 차례로 실행합니다. 지금 바로 실행될지, 기다리게 될지는 실행 서버 현황으로 확인할 수 있습니다. 에이전트로 쓴다면 list_execution_options가 알려 줍니다.
3. GPU 서버의 워커가 작업을 가져갑니다
GPU 서버마다 워커라는 프로그램이 돌고 있습니다. 워커는 자기 GPU에 여유가 생기면 나두바이오 서버에 작업을 요청해 가져갑니다. 서버가 작업을 밀어 넣는 방식이 아니어서, 자리가 난 서버만 작업을 받습니다. 나두바이오 서버가 도구와 입력 크기로 메모리 예약량을 계산하면, 워커가 그만큼 여유가 있는 GPU에 작업을 배정합니다.
4. 격리된 컨테이너에서 실행합니다
작업은 매번 새 컨테이너에서 실행됩니다. 컨테이너는 네트워크가 차단되어 있어 외부와 통신할 수 없고, CPU 4개 분량과 시스템 메모리 16GiB로 사용량이 제한됩니다. 실행하는 동안 워커는 10초마다 서버에 진행 상황을 보고합니다. 워커가 아무 연락 없이 사라지면, 서버는 약 10분 뒤 그 작업을 실패로 정리하고 사용한 크레딧을 돌려줍니다. 워커를 다시 시작하더라도 실행 중인 작업을 이어 갈 수 있도록 개선하는 작업도 진행하고 있습니다.
5. 결과를 검증하고 공개합니다
결과 파일은 실행 시도마다 별도의 폴더에 저장되므로, 다시 실행하더라도 이전 시도의 파일과 섞이지 않습니다. 서버는 파일의 해시를 확인한 뒤 결과를 공개하고, 그때부터 결과 화면과 에이전트에서 볼 수 있습니다.
GPU 한 장을 여러 작업이 나눠 쓰기
작은 ProteinMPNN 작업은 이번 측정에서 GPU 메모리를 1GiB도 쓰지 않았습니다. 이런 작업에 GPU 한 장을 통째로 배정하면 메모리가 많이 남습니다. 나두바이오는 측정 근거가 있는 입력 구간에 대해 여유분을 포함한 메모리를 예약하고, 공간이 남으면 다른 작업도 함께 실행합니다. 측정 범위 밖의 작업에는 장치 한 장을 통째로 배정하기도 합니다.
그림은 메모리를 나눠 쓰는 개념을 보여 줍니다. 메모리 공간이 남는다고 연산 성능도 같은 비율로 남는 것은 아닙니다. 여러 작업이 동시에 계산하면 서로 영향을 받아 단독 실행보다 오래 걸릴 수 있습니다.
작업의 예약량보다 빈 공간이 작으면 그만큼의 자리가 날 때까지 기다립니다. 실행 서버 현황에 나오는 "한 장치에서 쓸 수 있는 가장 큰 여유"가 바로 이 값입니다.
결과를 볼 때
GPU에서 작업이 끝났다는 것은 계산이 끝났다는 뜻일 뿐입니다. 구조 신뢰도 같은 지표는 모델이 예측에 얼마나 자신 있는지를 나타내며, 실제 결합이나 실험 결과를 보장하지 않습니다. 같은 계획을 다시 실행해도 결과가 조금 다를 수 있습니다. 입력과 설정은 고정할 수 있지만, 모델 계산에는 무작위성이 들어가기 때문입니다.
결과 화면을 열었다면 구조와 지표를 살펴보고, 다음에 비교할 후보를 골라 보세요. 나두바이오는 어떤 입력과 버전으로 계산했는지도 함께 남깁니다. 나중에 다시 확인할 때 이 기록이 출발점이 됩니다. 결과를 읽는 방법은 결과 읽는 법에 정리해 두었습니다.