TECH 으로 돌아가기
TECH HACKER NEWS 7분 읽기 30 READS

지포스 RTX 3000번대의 봉인된 FP16 성능을 여는 리눅스 커널 모듈

지포스 RTX 3000번대의 봉인된 FP16 성능을 여는 리눅스 커널 모듈
SOURCE IMAGE · HACKER NEWS

엔비디아는 같은 암페어(Ampere) 실리콘을 쓰더라도 지포스(GeForce)와 전문가용 제품의 성능을 의도적으로 분리해 왔다. 그중 하나가 FP16·BF16 연산을 FP32로 누적하는 FMA 명령의 발행 속도(issue rate)다. 소비자용 카드에서는 이 속도가 절반으로 제한돼 있는데, 'gpu-unlock'은 GA102·GA103·GA104·GA106 칩을 쓰는 RTX 3000번대 카드에서 이 제한을 풀어 전문가용과 동일한 두 배 발행 속도로 끌어올리는 리눅스 커널 모듈이다. 코드에 담긴 기법 자체는 기존 CMP(채굴 전용 카드) 언락에서 쓰이던 V67/PLM 방식과 UEFI 접근법의 드라이버 선행 타이밍을 결합한 것으로, 완전히 새로운 발견이라기보다 기존 기법을 일반 사용 환경에 맞게 재조립한 결과에 가깝다.

왜 커널 모듈인가

이 도구의 핵심은 '언제' 개입하느냐에 있다. gpu-unlock은 UEFI 애플리케이션도, 패치된 엔비디아 드라이버도 아니다. 대신 리눅스 커널 모듈로서 부팅 과정 초기, 정규 엔비디아 드라이버가 카드를 점유(bind)하기 직전에 끼어든다. 언락을 수행하고 속도 선택자(speed selector)인 SS0에 0x88888888, 4비트 SS1에 0x8(IMLA4)을 기록해 완전한 BF16 발행 속도를 선택한 뒤 FLR(Function Level Reset)을 수행한다. 그러고 나면 수정되지 않은 순정 엔비디아 드라이버가 평소처럼 카드를 잡는다. 드라이버를 건드리지 않기 때문에, 엔비디아가 새 드라이버 버전을 낼 때마다 수동으로 패치를 다시 적용할 필요가 없다는 점이 실무적으로 가장 큰 장점이다. 패키지는 모듈과 펌웨어를 initramfs에 넣어 드라이버보다 먼저 로드되도록 구성하며, 부팅 후에 수동으로 모듈을 올려도 이미 드라이버가 점유한 카드에는 아무 효과가 없다.

어디서 빨라지고, 어디서 그대로인가

효과는 연산 성격에 따라 명확히 갈린다. 행렬 연산이 많은 작업이 수혜를 본다. 사용자들이 보고한 수치를 보면 LLM의 프리필(prefill) 단계에서 약 14~36%, 그리고 디퓨전 이미지 생성과 FlashAttention에서 속도 향상이 나타났다. 반면 메모리 대역폭에 묶이는 LLM 디코드(토큰 생성) 단계와 INT8 작업은 거의 변화가 없다. 연산 처리량이 아니라 데이터 이동이 병목인 작업에는 명령 발행 속도를 두 배로 올려도 이득이 없기 때문이다. 3090 Ti에서 450W로 측정한 8192³ 밀집 GEMM(FP32 누적, 5회 측정 중앙값) 같은 벤치마크가 대표 사례로 제시됐다. 다만 보고된 향상 폭들은 각 사용자가 서로 다른 벤치마크로 측정한 것이라 직접 비교하기 어렵고, 전력 제한의 영향이 크다. 225W로 제한한 카드에서는 +25%에 그쳐 가장 낮은 수치를 보였다.

중요한 점은 결과의 정합성이다. 언락 전후 출력을 비교한 보고들은 모두 비트 단위로 동일(bit-identical)했다고 전한다. 즉 이 기법은 정밀도를 희생해 속도를 얻는 방식이 아니라, 원래 하드웨어가 할 수 있던 발행 속도를 막아두었던 제한을 해제하는 것에 가깝다. 보고된 환경도 비교적 폭넓어서 한 머신에 최대 4장의 카드, 디스플레이를 출력 중인 카드, vfio-pci로 VM에 패스스루한 카드까지 포함한다.

운영상 고려할 점과 한계

동작 방식은 꽤 세심하게 설계돼 있다. 활성화는 커널 명령줄에 gpu_unlock.targets=all 같은 옵션을 명시적으로 추가해야만 이뤄지며, 대상은 lspci -D가 출력하는 전체 PCI 주소로 지정한다. 해당 칩이 아닌 카드는 로그만 남기고 무시하고, 이미 다른 드라이버가 초기화한 카드는 건드리지 않는다. 디스플레이 카드의 경우 리셋 시점부터 nvidia-drm이 화면을 넘겨받기 전까지 잠깐 검은 화면이 되는 점은 감안해야 한다. RAM 절전(S3)에서 복귀할 때는 전원이 끊기며 속도 선택자가 초기화되므로, 모듈이 엔비디아보다 먼저 다시 언락을 수행해 복귀 시간이 약 1초 늘어난다. 이 동작은 gpu_unlock.resume=0으로 끌 수 있다.

한계도 분명히 해두는 편이 좋다. 하이버네이션(디스크 절전)은 지원 범위에 들어 있지 않고, 펌웨어 단계가 끝나지 않는 예외 상황에서는 다음 전원 차단 때까지 DMA 버퍼를 유지한 채 로그만 남긴다. 빌드 과정은 고정된(pinned) 엔비디아·CachyOS 입력을 HTTPS로 내려받아 SHA-256으로 검증하지만, 배포되는 소스 아카이브에는 엔비디아 펌웨어가 포함되지 않으며 엔비디아 펌웨어는 여전히 자체 라이선스를 따른다. 커널 모듈과 패키징은 GPL-2.0 단일 라이선스다.

종합하면 이 프로젝트는 소비자용 암페어 카드로 LLM 프리필이나 디퓨전 같은 FP16/BF16 행렬 연산 워크로드를 돌리는 리눅스 사용자에게 의미가 있다. 다만 커널 명령줄과 initramfs를 다뤄야 하고, 보고된 호환성은 특정 사용자 환경에 국한된 표본이라는 점에서, 프로덕션 투입 전에는 자신의 카드와 워크로드에서 성능과 안정성을 직접 검증하는 과정이 필수적이다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/Zagitta/gpu-unlock
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...