안녕하세요, 모두 잘 지내시길 바랍니다. 긴 글이 될 것 같지만, 이 정보를 꼭 말씀드리고 싶어서 직접 손으로 작성했습니다(웃음). 최근 논란이 되고 있는 GPU 언락에 대해 몇 가지 설명하고 싶습니다. 이 GPU 언락은 무엇을 하는 것일까요? NVIDIA는 시장 세분화를 목적으로 FP32 누적(FP16, BF16, FP8 및 TF32 입력이 FP32로 누적되는 과정, 대부분의 AI/LLM/ML 작업에서 사용됨)을 사용할 때 텐서 코어 성능을 의도적으로 약화시킵니다. 일반적인 CUDA 코어에서의 FP32는 (텐서 코어가 없음) 영향을 받지 않습니다. 소비자용 및 프로슈머 GPU는 정확히 같은 다이(예: 5090과 6000 PRO 사이의 GB202, 4090과 6000 Ada 사이의 AD102, 또는 심지어 3090 Ti와 A6000 간에 물리적으로 1:1인 경우도 있으며, 둘 다 동일한 코어 수와 84 SM을 가짐)를 사용합니다. 작동 방식은 다음과 같습니다. 각 종류의 텐서 연산 속도는 공장에서 심어진 퓨즈(fuses)에 의해 결정됩니다. 소비자용 카드에서는 'FP16/BF16과 FP32 누적'에 대한 퓨즈가 HALF_SPEED라고 되어 있고, 프로 카드에서는 FULL_SPEED라고 되어 있습니다. 이 퓨즈들은 회로를 자르는 것이 아니며, GPU는 부팅 시 이를 읽어 해당 속도로 작동할 뿐입니다. 또한 GPU에는 이들을 FULL_SPEED로 되돌릴 수 있는 오버라이드 레지스터(override register)가 있지만, 이는 PC에서는 접근할 수 없고 NVIDIA의 가장 특권적인 펌웨어만이 쓸 수 있도록 잠겨 있습니다. 언락은 그 잠금을 해제하고 오버라이드에 FULL_SPEED를 기록합니다. 이를 통해 소비자용 카드들은 NVIDIA가 약화시킨 모든 성능을 얻게 됩니다. 이것이 SM이나 VRAM 등을 더 많이 제공하는 것은 아닙니다. 4090은 여전히 4090이지만, 프로 카드와 동일한 속도로 해당 명령어를 실행할 뿐입니다. 왜 Turing, Ampere, Ada는 언락될 수 있을까요? 그리고 이 카드들에서 무엇이 언락되는 걸까요? 이 세대에서는 NVIDIA 드라이버 자체가 GPU 내부의 보안 마이크로컨트롤러(SEC2, 'Falcon')에
2026년 6월, Jon Pry는 "A Canary in the Crypto Mine"이라는 논문을 발표하며 최신 드라이버의 Booter에 버퍼 오버플로우(buffer overflow) 취약점이 있음을 보여주었습니다. 이 취약점은 사용자가 제어하는 길이로 '서명(signature)' 데이터를 복사하는 과정에서 발생하여, 스택을 초과할 수 있습니다 (이때 원래는 정확히 이러한 상황을 막도록 설계된 스택 카나리(stack canary)도 포함됨). 이를 통해 실행 중인 Booter의 제어권을 탈취할 수 있습니다. 서명 검사는 여전히 통과하는데, 이는 NVIDIA 자체 서명이 적용된 코드가 실행되고 있기 때문이며, 버그는 그 내부에서 발생합니다. 이 기술을 이용한 언락(unlock)은 NVIDIA 자체 Booter의 명령어를 재사용하여 잠금을 해제하고, 오버라이드(override)에 FULL_SPEED를 기록하며, 카드를 리셋시킨 후 정상적인 NVIDIA 드라이버가 로드되도록 합니다. 이 언락은 리셋과 드라이버 재로딩을 견디지만, 전원을 끄면 사라지기 때문에, NVIDIA 드라이버가 로드되기 전에 매번 부팅 시 실행되어야 합니다. 이는 처음에는 채굴 카드(CMP 170HX: FP32를 1/32에서 최대 속도로, VRAM 용량을 10GB에서 80GB로)에 적용되었고, 이후 GeForce에 포팅되었습니다: Turing: https://github.com/haohervchb/Turing-unlock (UEFI, Linux), Ampere: https://github.com/Zagitta/gpu-unlock (Linux 커널 모듈), Ada: https://github.com/JustAResearcher/gpu-unlock-ada (커널 모듈을 사용하는 Linux). 언락되는 기능들: FP32 누적과 함께 사용 가능한 FP16 (Turing, Ampere, Ada), FP32 누적과 함께 사용 가능한 BF16 (Ampere, Ada; Turing는 BF16 지원 안 함), TF32 (Ampere, Ada), FP32 누적과 함께 사용 가능한 FP8 (Ada; Turing와 Ampere는 FP8 미지원). 해당 저장소들에서 가져온 일부 수치: 4090의 FP16/BF16은 FP32 누적을 통해 165 TFLOPS에서 331 TFLOPS로 증가합니다(순수 명령어 속도 기준). 3090 Ti의 BF16 GEMM은 87 TFLOPS에서 157 TFLOPS로 증가했습니다. 2080 Ti의 FP16은 FP32 누적을 통해 47 TFLOPS에서 94 TFLOPS로 증가했습니다. 실제 환경에서의 GEMM 성능 향상은 2배 미만인데, 이는 카드가 전력 제한(power limit)에 도달하기 때문입니다 (자세한 내용은 아래 참조). 그렇다면 소비자용 Blackwell은 왜 언락할 수 없을까요? 흥미로운 점은 Blackwell의 경우에도 제한 사항이 정확히 동일하다는 것입니다: 같은 퓨즈(fuses), 같은 오버라이드 레지스터를 사용합니다. 제가 직접 확인해 본 결과, 5090/5080/5070 Ti 모델에는 FP32 누적 퓨즈가 설정되어 있지만, 6000 PRO/4000 PRO 모델에는 그렇지 않았습니다. 따라서 여기에도 하드웨어적인 차이는 없습니다.
바뀐 것은 문(door)입니다. Hopper부터 소비자용 Blackwell에 이르기까지, GPU의 신뢰 근원지(root of trust)는 FSP (Foundation Security Processor), 즉 RISC-V 코어이며, 이는 드라이버가 로드되기 전에 GPU 전원이 켜지는 즉시 자체 ROM에서 부팅됩니다.
Blackwell의 경우: 악용할 수 있는 Booter가 없습니다. 드라이버는 단순히 FSP에 다음 펌웨어의 해시(hash)와 RSA-3K 서명을 포함한 메시지를 보내고, FSP가 이를 검증하고 부팅합니다. 리눅스 커널 문서는 문자 그대로 "SEC2 개입 없음, Booter ucode 없음, FWSEC-FRTS 단계 없음"이라고 명시합니다. 저도 직접 확인했습니다: NVIDIA의 615 드라이버 소스에서 Booter는 Turing, Ampere 및 Ada (TU102, TU116, GA100, GA102, AD102)에만 존재하며, RTX 50 VBIOS에는 구형 카드들이 가지고 있던 Falcon 펌웨어(FWSEC)가 포함되어 있지 않습니다.
드라이버가 Blackwell용으로 제공하는 펌웨어는 암호화되어 있으며, 디버그 이미지와 프로덕션 이미지는 정확히 동일한 암호화된 바이트로 구성됩니다. Ada 페이로드(payload)는 복호화된 디버그 Booter 분석을 통해 구축되었지만, Blackwell에서는 그러한 지름길이 없습니다. NVIDIA는 가장 중요한 RISC-V 펌웨어가 런타임 오류가 없음을 증명하기 위해 SPARK (공식적으로 검증 가능한 프로그래밍 언어)를 사용했다고 밝혔으며, 구형 카드에서 사용된 것과 같은 버퍼 오버플로우(buffer overflow)는 정확히 그러한 종류의 오류입니다. 따라서 오늘날 알려진 정보로는 불가능합니다. '영원히 불가능하다'는 의미는 아니지만, 누군가는 훨씬 더 어려운 목표를 가진 완전히 새로운 취약점을 찾아야 할 것입니다.
그리고 만약 누군가가 그 지점에 도달한다 하더라도, 언락 자체는 아마도 동일한 몇 개의 레지스터 쓰기(register writes)일 것입니다. FP4는 영향을 받지 않지만, 나머지 모든 것(FP16/BF16/FP8/TF32와 FP32 누적)은 영향을 받습니다.
어떤 작업에서 언락의 효과가 가장 큰가요? 저는 6000 PRO 대 5090을 비교하여 몇 와트 전력 사용량(각각 400W 및 600W)에서 성능에 얼마나 영향이 미치는지 예시를 제시하겠습니다. NVIDIA의 제한 조치(neutering) 때문에 발생하는 차이입니다.
학습: LoRA, 파인튜닝(finetuning) 등과 같습니다. 예시: 25GB VRAM을 사용하여 확산 모델 LoRA를 학습하는 경우, 제 6000 PRO는 5090보다 70~90% 더 빠릅니다.
Diffusion: txt2img, txt2vid, img2img, img2vid, txt2aud 등 다양한 모델을 다룹니다. 예를 들어, fp16 누적(accumulation)을 사용하지 않는 6000 PRO는 5090보다 약 30~40% 빠릅니다. 만약 fp16 누적을 사용한다면 15% 더 빠릅니다.
LLM의 Prefill: 이 부분 역시 크게 영향을 받습니다. 모델이 'int8' 또는 'mixed precision' 등으로 표시되어 있더라도, GPU가 사용하는 추론(inference) 부분에는 명시적으로 사용하지 않도록 설정되지 않는 한 FP32 누적 부분이 포함되기 때문입니다. 예를 들어, 5090에 맞는 모델을 vLLM으로 구동하는 경우, 6000 PRO는 5070% 더 빠릅니다. 반면 llamacpp에서는 약 3040% 더 빠릅니다.
대규모 배치(big batching)를 사용한 TG: 단일 배치를 사용하는 TG는 주로 대역폭 제한(bandwidth bound)에 의해 결정되며, FP32 누적 명령을 사용하지만, 이는 필요한 대역폭 요구량에 비해 매우 적기 때문에 병목 현상은 아닙니다. 반면에 배치 크기 2, 4, 8 등을 사용할 경우 컴퓨팅(compute)이 다시 병목 현상(bottleneck)이 되면서 성능 저하가 발생합니다. 예시는 이전 지점과 동일한 결과를 보입니다.
언락이 차이를 만들지 않는 작업: 배치 크기 1을 사용한 TG: 거의 전적으로 대역폭 제한에 의해 결정됩니다. 텐서 코어(tensor cores)가 없는 CUDA 컴퓨팅 (일반 FP32). INT4/INT8 텐서 연산. Blackwell의 FP4 (애초에 제한되지 않음). 대신 fp16 누적을 사용하는 GEMM 연산이지만, 이 경우는 자주 사용되지 않습니다.
게이밍: 카드 언락으로 인해 카드가 타거나(burning), 충돌하는 등의 위험이 있나요? 짧은 대답은 '아니요'. 그리고 다시 한번 '아니요'입니다. 제발 여러분들, 이런 헛소리는 그만 반복하세요. 이 카드들은 여전히 최대 전력 제한에 의해 제한됩니다. 언락을 한다고 해서 갑자기 사용 가능한 전력 예산의 200%를 마법처럼 사용할 수는 없습니다. 단지 코어들을 더 효율적으로 사용하는 것일 뿐입니다. 제가 설명해 드리겠습니다. 만약 3090이 300W로 전력 제한되어 있고, 언락 없이 사용할 때는 250W만 사용하고 있었다고 가정합시다. 하지만 언락 후에는 300W를 사용하게 됩니다. 이것은 언락 기능이 카드에 악의적인 일을 했기 때문이 아닙니다. 카드가 이제 힘을 내어 더 많은 작업을 수행할 수 있도록 전력을 사용할 수 있게 되었기 때문입니다.
Ada 레포지토리의 실제 예시를 들자면, 언락된 4090이 동일한 GEMMs 연산을 수행했을 때 최대 전력 소모가 스톡(stock) 대비 313W에서 346W까지 치솟았지만, 여전히 설정된 450W 제한치 이하는 유지했습니다. 만약 최대 TDP보다 낮은 Y 값에서 X 성능을 얻고 있었는데, 이제 최대 TDP에서 X보다 더 높은 성능을 얻게 된다면, 당연히 카드가 더 뜨거워지겠지만, 그것은 당신이 설정한 전력 한계(POWER LIMIT)를 초과하는 것이 아니라 그 범위 내에 있는 것입니다. 전력 스파이크(Power spikes): 이는 모든 카드에서 정상적인 현상이며, 만약 카드의 최대 성능을 최대한 활용한다면 더 자주 발생할 수 있습니다. 이것들이 위험한가요? 아닙니다. NVIDIA가 GPU당 권장하는 와트(wattage)를 가진 PSU(Power Supply Unit)만 있다면 말입니다. 그렇다면 실제 위험 요소는 무엇일까요? 그것은 카드 자체가 아니라 언락 과정에 관한 것입니다. 드라이버가 로드되기 전에 NVIDIA의 펌웨어(firmware)에 익스플로잇(exploit)을 실행합니다. 중간에 무언가 실패하면 도구가 멈추고, 다시 시도하기 위해서는 완전한 전원 차단이 필요합니다 (재부팅만으로는 충분하지 않습니다). 특히 노트북이나 다중 GPU 환경에서는 레포지토리의 지침을 읽으세요. NVIDIA는 향후 드라이버에서 이를 패치하거나, 심지어 구형 Booter가 더 이상 허용되지 않도록 안티-롤백 퓨즈(anti-rollback fuses)를 태울 수도 있습니다. 그것은 카드를 손상시키는 것이 아니라, 그저 영구적으로 문을 닫는 것일 뿐입니다.
"하지만 NVIDIA는 프로슈머(prosumer) 측에서는 24/7 작동하도록 다이(die)를 비닝(binning)하는데 소비자용 제품에는 그렇지 않아서 잠겨 있는 거예요!!!11" 이것 역시 잘못된 정보입니다. NVIDIA는 소비자용 GPU와 프로슈머용 GPU에 정확히 동일한 다이를 사용하며, FP32 누적 속도는 비닝과는 아무 관계가 없습니다. 3090 Ti와 A6000은 완전히 동일한 사양을 가지고 있습니다. 절반의 속도라는 것은 단순히 펌웨어가 읽는 퓨즈에 기록된 값일 뿐입니다. 카드를 언락한다고 해서 더 빨리 고장 나거나 다이가 깨지지는 않습니다.
이것을 거듭 반복해야 하는 것이 죄송하지만, 이런 댓글들을 읽고 느끼는 순수한 분노 때문에 이렇게 하게 되었습니다. 게임 성능에 영향을 주나요? 현재로서는 알려진 바가 없습니다. 다만 NVIDIA가 DLSS나 FG(Frame Generation)를 위해 FP32 누적을 사용하는 경우를 제외하고요. 저는 그들이 FP16 누적(또는 더 낮은 정밀도)을 사용한다고 확신합니다. 왜냐하면 만약 FP32 누적을 사용한다면 소비자용 카드에서는 성능 저하가 엄청날 것이기 때문입니다.
제가 사용하는 모델이 Q8, 또는 FP6, 또는 4bit, 또는 INT4 등 FP32를 언급하지 않는다고 해도 영향을 받나요? 이는 양자화(quant)의 이름보다는 GPU가 실제로 수학 연산을 수행하는 방식에 달려 있습니다. 만약 커널이 가중치(weights)를 FP16/BF16으로 역양자화(dequantizes)한 후 텐서 코어(tensor cores)에서 FP32 누적을 사용하여 곱셈을 한다면, 영향을 받습니다. 이는 FP16/BF16 모델과 대부분의 vLLM 경로(path), AWQ/GPTQ에 Marlin 커널이 포함되는 경우에도 해당됩니다 (가중치는 INT4이지만 수학 연산은 FP16이며 FP32 누적이 이루어집니다). FP8 (W8A8) 역시 FP32로 누적되므로 영향을 받습니다 (Ada 및 Blackwell 모두). 만약 커널이 정수 텐서 수학(integer tensor math, INT8 x INT8)을 사용한다면, 영향을 받지 않습니다. llama.cpp의 많은 양자화된 행렬 곱셈(matmuls)이 이와 유사하게 작동하며, 이것이 vLLM보다 llama.cpp가 더 작은 격차를 보이는 이유 중 하나입니다. 어텐션 메커니즘(Attention, 예: FlashAttention)은 거의 항상 FP16/BF16과 FP32 누적을 사용하므로, 양자화된 모델에서도 긴 컨텍스트는 영향을 받습니다. Blackwell의 FP4 (NVFP4/MXFP4): 영향 없음. 예시: 48GB로 개조된 4090에서 추론 서버에 올라간 양자화 MoE(Mixture-of-Experts) 모델은 언락 후 전혀 이득이 없었습니다 (8K 프리필 기준 0.98배), 반면 FP16/BF16 행렬 곱셈은 두 배가 되었습니다. 현재 제가 아는 내용은 여기까지이며, 궁금한 점이 있다면 알려주세요! 제출자: /u/panchovix [링크] [댓글]