Service
GitHub - Zagitta/gpu-unlock: Unlock FP/BF16 instruction issue rate on Nvidia 3000's cards to their professional equivalents
zagitta
2026.10.25
·GitHub·by igor#BF16#FP16#GPU#Linux Kernel#Nvidia
핵심 포인트
- 1gpu-unlock은 Linux 커널 모듈을 활용하여 NVIDIA 3000 시리즈 GPU의 제한된 FP/BF16 명령어 처리 속도를 전문가용 그래픽 카드 수준으로 잠금 해제합니다.
- 2이 기술은 NVIDIA 드라이버가 로드되기 전에 커널 수준에서 직접 속도 선택기(SS0, SS1)를 설정하고 FLR을 수행함으로써 드라이버 업데이트마다 패치를 적용할 필요가 없습니다.
- 3해당 모듈을 사용하면 GA102, GA103, GA104, GA106 칩셋 기반 카드에서 FP/BF16 연산 성능이 크게 향상되어 LLM 및 행렬 연산 작업의 효율성을 높일 수 있습니다.
본 문서는 NVIDIA GeForce 3000 시리즈 GPU(GA102, GA103, GA104, GA106)의 FP16/BF16 연산 성능을 전문가용 제품군 수준으로 잠금 해제하는 Linux 커널 모듈 gpu-unlock에 관한 기술적 개요를 담고 있습니다.
핵심 기술 및 방법론
이 모듈은 하드웨어 수준에서 제한된 FP/BF16 명령어 발행 속도(issue rate)를 향상시키기 위해, CMP(Crypto Mining Processor) 모델의 잠금 해제 기술인 V67/PLM 기법과 UEFI 기반의 초기 타이밍 제어 방식을 결합했습니다. 구체적인 동작 원리는 다음과 같습니다.- 초기화 단계: NVIDIA 공식 드라이버가 GPU를 바인딩하기 이전에 커널 모듈이 개입하여 하드웨어 상태를 수정합니다.
- 레지스터 제어: 하드웨어의 속도 선택기(Speed Selectors)를 강제로 설정합니다.
- SS0(BF16 전체 속도 선택):
0x88888888 - SS1(IMLA4 4비트 설정):
0x8
- SS0(BF16 전체 속도 선택):
- FLR 수행: 수정 후 FLR(Function Level Reset)을 실행하여 드라이버 로드 전 하드웨어 설정을 확정합니다.
- 드라이버 독립성: 기존 UEFI 패치나 드라이버 바이너리 자체를 수정(patching)하는 방식이 아니므로, NVIDIA의 드라이버 업데이트 시마다 재작업할 필요가 없는 장점이 있습니다.
성능 향상
해당 작업을 통해 FP/BF16 FMA 연산의 명령어 발행 속도가 대폭 향상되며, 3090 Ti 기준 벤치마크 결과는 다음과 같습니다:- BF16: 약 +68~80% 성능 향상
- FP16: 약 +35% 이상의 성능 향상
- TF32: 약 +94% 성능 향상
설치 및 운용
- 설치:
make install을 통해 커널 모듈과 initramfs drop-in 설정을 자동화합니다. - 커널 파라미터: 부팅 시 또는 특정 PCI ID를 지정하여 활성화합니다.
- 재개(Resume) 처리: Suspend to RAM 이후에도 전원 상태에 따른 속도 선택기 초기화 문제를 방지하기 위해, NVIDIA 드라이버보다 먼저 호출되는 suspend/resume 알림 기능을 내장하고 있습니다.
주의사항
- 본 모듈은 드라이버가 이미 바인딩된 상태에서는 동작하지 않으며, 부팅 초기 단계에서 적용되어야 합니다.
- 성능 향상은 전력 제한(Power Limit)에 크게 의존하며, LLM 프리필(prefill) 및 딥러닝 가속 등 행렬 연산 중심 작업에 효과적입니다. 반면, 메모리 대역폭 의존도가 높은 LLM 디코드(decode) 작업이나 INT8 연산에는 영향이 적습니다.