RTX 3090 Ti에서 BF16 행렬곱이 88에서 157 TFLOPS로 올랐다는 숫자는 인상적입니다. 하지만 로컬 LLM을 돌리는 사람이 체감하는 것은 대개 이 숫자가 아니라 프롬프트 처리 시간과 초당 토큰 수입니다. 이 둘은 병목이 다릅니다.

gpu-unlock 저장소는 10월 18일 생성됐고 이후 빠르게 변하고 있습니다(10월 27일 "Release 2.0" 커밋). 10월 25일 GeekNews 화제는 발견 경로일 뿐입니다. 이 글은 README와 커밋 이력을 근거로 하며, 장비에 설치하거나 벤치마크를 실행하지는 않았습니다. 아래 계산은 제가 만든 어림 모델입니다.

이 도구가 하는 일

README에 따르면 gpu-unlock은 GeForce 카드에서 FP32 누산을 쓰는 FP16/BF16/TF32 텐서 연산에 걸린 절반 속도 제한을 푸는 Linux 커널 모듈입니다. 패치된 드라이버나 VBIOS 플래시가 아니라, 부팅 시 NVIDIA 드라이버가 로드되기 전에 실행됩니다. 출력은 전후 비트 단위로 동일하고 속도만 바뀐다고 합니다.

브리핑은 RTX 30 시리즈 일부로 소개했지만 현재 README는 Ampere(RTX 30)를 "안정"(사용자 보고 100건 이상), Ada(RTX 40)와 Turing(RTX 20)을 "실험적", Blackwell(RTX 50)을 미지원으로 적습니다. 지원 범위가 며칠 사이에 넓어졌으니 설치 전에 최신 README를 다시 확인하세요.

157이라는 숫자의 조건

브리핑에는 "87.50→157.41 TFLOPS, 450W, 8192³ GEMM, FP32 누산, 5회 중앙값"이라는 조건이 있었습니다. 제가 읽은 현재 README의 표는 "88 TFLOPS → 157 TFLOPS(+80%)", 조건은 "dense matrix multiply, FP32 누산, 스톡 전력 제한"까지만 적고 GEMM 크기와 반복 횟수는 적지 않습니다. 대신 사용자 호환성 보고 이슈에 상세 벤치마크가 있다고 안내합니다. 소수 둘째 자리 수치와 8192³ 조건은 2차 보도에서 확인되지만 현재 README에서는 찾지 못했습니다. 이 글에서는 반올림된 값만 1차 근거로 쓰고, 세부 조건은 미확인으로 둡니다.

산술 검증도 해 두었습니다. 157/88은 +78.4%이고, 87.50→157.41은 +79.9%입니다. README의 +80%는 반올림 전 값에서 나온 것으로 보입니다.

README는 카드별 BF16 표도 싣습니다. 3060 12GB는 27→51, 3090은 75→125(+65%), 4090은 165→329(+100%, 이론적 최대 연산률)입니다. 4090은 전력이 먼저 한계에 닿아 큰 GEMM에서는 이득이 훨씬 작다고 README 스스로 적었습니다.

프리필은 빨라지고 디코드는 그대로인 이유

LLM 추론은 두 단계입니다. 프롬프트를 한꺼번에 처리하는 프리필은 연산 위주이고, 토큰을 하나씩 생성하는 디코드는 매 토큰마다 가중치를 메모리에서 읽는 메모리 대역폭 위주입니다. README의 실제 작업 표도 이 구분과 일치합니다. 프리필 +25~55%, 첫 토큰까지의 시간 25~30% 감소, 디코드는 변화 없음, INT8·FP8·INT4 모델도 변화 없음입니다. 양자화 GGUF를 쓰는 llama.cpp·Ollama는 0~15%라고 합니다. 이 수치는 사용자 보고를 모은 것이며 제가 재현하지 않았습니다.

아래는 이 병목 차이를 어림하는 제 스크립트(gpu_prefill_decode.py)의 실행 결과입니다. 8B 밀집 모델, BF16 가중치, 달성 효율 50%라는 가정이며 대역폭 1008GB/s는 NVIDIA 공개 사양값입니다. 측정이 아닙니다.

before: prefill 4096 tok ~1.49s, decode upper bound ~63 tok/s
after: prefill 4096 tok ~0.83s, decode upper bound ~63 tok/s
GEMM share 90% -> overall 1.65x
GEMM share 50% -> overall 1.28x
GEMM share 20% -> overall 1.10x

연산 성능이 1.78배가 돼도 디코드 상한은 같습니다. 전체 시간 중 GEMM 비중이 20%면 종합 이득은 1.10배에 그칩니다. 로컬 LLM 챗봇처럼 짧은 프롬프트에 긴 응답을 만드는 작업이라면 체감은 작을 것이고, RAG처럼 긴 문서를 매번 프리필하거나 BF16 LoRA 학습, 이미지 생성처럼 GEMM 비중이 큰 작업이라면 의미가 큽니다.

설치 전에 확인할 것

  • 부팅 설정 변경: 커널 명령줄에 gpu_unlock.targets=all을 넣고 initramfs에 모듈을 포함합니다. 부트로더별 절차가 다르고 잘못 만지면 부팅 문제가 생길 수 있습니다. 되돌리려면 명령줄에서 옵션을 제거합니다.
  • 전원 상태 의존: GPU가 완전히 꺼지면 설정이 풀립니다. 노트북에서는 효과가 불안정할 수 있고, 절전(RAM) 복귀 때는 재적용하지만 하이버네이션은 다루지 않습니다.
  • 발열·전력: README는 손상 가능성이 "매우 낮다"고 하지만 더 많은 연산으로 카드가 더 뜨거워질 수 있고 정상적인 스로틀링은 유지된다고 합니다. 24/7 서버라면 온도와 전력 모니터링을 병행하세요.
  • 정책과 보증: 제조사 보증, 클라우드·사내 규정, 운영 서버에서의 사용 가능 여부는 이 글에서 검토하지 않았습니다. 확인되지 않은 사항입니다.
  • 출처: Windows용은 저자가 관리하지 않고 제3자 포트가 있다고만 하며 설치기를 주의하라고 합니다. 저장소 외 다운로드를 신뢰하지 마세요.

개발자 관점의 결론

가장 유용한 읽기 방법은 "내 작업의 시간 중 몇 %가 BF16 행렬곱인가"를 먼저 재 보는 것입니다. 프로파일링으로 프리필 비중이 높다고 확인되고, 전용 개발 장비에서 부팅 설정을 되돌릴 수 있다면 시험해 볼 만합니다. 디코드 속도가 목적이거나 INT4·GGUF 위주라면 이득을 기대하기 어렵고, 운영 환경이나 단일 작업용 데스크톱에는 위험 대비 이득을 따져야 합니다. 설치한다면 전후로 같은 모델·같은 프롬프트 길이에서 프리필 시간과 디코드 토큰/초를 따로 기록하세요.