GPU-unlock: 엔비디아 3000번대 카드의 FP/BF16 명령어 발행 속도 제한 풀기

GPU-unlock: FP/BF16 instruction issue rate on Nvidia 3000's cards

github.com/Zagitta ▲ 185 댓글 61 fragebogen

요약

GPU-unlock은 엔비디아 RTX 3000번대 카드가 절반으로 묶어 둔 FP16·BF16 연산 속도를 풀어 줍니다.

개발자 Zagitta가 공개한 리눅스 커널 모듈입니다. 엔비디아는 전문가용·데이터센터 카드에서는 이 명령어를 최고 속도로 내보내지만, 게이밍 카드에서는 발행 속도를 절반으로 제한합니다.

왜 중요한가

  • 엔비디아 드라이버를 고치지 않으므로 드라이버가 새로 나올 때마다 다시 패치할 필요가 없습니다.
  • RTX 3090 같은 카드로 언어 모델을 돌리는 사람은 장비를 바꾸지 않고 입력 처리 속도를 높일 수 있습니다.

핵심 내용

  • RTX 3090 Ti 행렬 곱셈에서 BF16(AI 연산에 쓰는 16비트 실수 형식)은 87.5에서 157.4테라플롭스로 약 80% 빨라졌습니다.
  • 이용자 보고로는 카드별 BF16 성능이 25~81% 올랐고, 전력을 225W로 묶은 3090이 가장 적게 올랐습니다.
  • 언어 모델 프리필(입력 처리)은 14~36% 빨라졌지만, 메모리 대역폭에 묶인 토큰 생성은 거의 그대로입니다.
  • 엔비디아 드라이버가 카드를 잡기 전에 속도 선택 레지스터 두 개를 바꾸고 카드를 재설정하는 방식입니다.
  • 절전 후 깨어나면 설정이 초기화되어 다시 풀어야 하고, 3080 Ti OEM 카드처럼 효과가 없는 사례도 있습니다.

HN 반응

  • 효과를 다 보려면 전력을 450W로 올리고 냉각을 보강해야 한다는 주장에, 전력 한도를 그대로 둬도 됐다는 반론이 나왔고 작성자는 작업마다 다르다고 답했습니다.
  • RTX 4090용 포크로 작업 시간이 30% 줄었다는 경험담이 나왔고, 작성자는 Hopper·Blackwell 세대는 보안 체계가 달라 이 방식이 통하기 어렵다고 했습니다.

댓글

30개 표시 · 전체 61개
  1. Zagitta HN

    이거 제가 만든 겁니다. 다만 익스플로잇 같은 건 제 아이디어가 전혀 아니고요. 엔비디아 드라이버를 직접 패치하는 번거로움 없이, 이 모든 걸 훨씬 덜 귀찮은 패키지 하나로 묶었을 뿐입니다. 원래는 OS로 체인로딩되는 독립 실행형 UEFI 모듈로 돌아가는 CMP90/50 윈도 언락에서 영감을 받았습니다.

    궁금한 점 있으면 편하게 물어보세요!

  2. aunty_helen HN

    정말 감사합니다. 27b는 제가 제일 좋아하는 모델인데, 어젯밤에 개발자가 벤치마크를 돌렸더니 133tks, 약 3.2배가 나왔어요. 경제성 자체가 달라집니다.

  3. xenonite HN

    잘됐네요. 양자화는 뭘로, KV 양자화와 KV 크기는 어떻게 쓰고 계세요? llama.cpp인가요?

  4. jacquesm HN

    정말 잘 만드셨네요. 모든 모드가 이런 방식이면 좋겠어요. 패치한 드라이버는 골칫거리거든요. 카드 종류가 여러 개면 특히 그렇고요. 감사합니다.

    추신: 이제 4090도 해주세요 ;)

  5. Zagitta HN

    네, 저도 패치된 드라이버는 질색입니다. CMP170도 갖고 있는데, 드라이버 패치를 아예 안 하거나 최소한만 하고도 똑같은 방식으로 완전히 동작하게 만들 방법이 있는지 찾아볼 생각입니다.

    4000번대는 작업 중입니다. 포크에서는 이미 언락했고요. 저는 여러 제품군을 더 잘 지원하도록 리팩터링하는 중이라, 그게 끝나면 옮겨 오겠습니다 :-)

  6. jacquesm HN

    기대됩니다. 저는 48G로 개조한 Ada 4090이 두 장 있고 기본 Blackwell 4000이 네 장 있습니다(Blackwell 쪽은 그렇게 쉽지 않을 것 같지만요). 4090만이라도 성능이 올라가면 정말 대단할 거예요. 제 주력 장비라서, 거기서 개선되는 만큼 곧바로 하루 작업량이 늘어나거든요. 테스트에 도움이 필요하시면 제 프로필에 이메일이 있습니다.

  7. Zagitta HN

    Blackwell과 Hopper는 부팅 과정이 완전히 새로워서, 제가 본 바로는 당분간 뚫릴 가능성이 낮습니다.

    4090이 못 기다릴 만큼 급하시면, 언락이 되는 것처럼 보이는 포크를 올려 둔 사람이 있어요 :D

  8. jacquesm HN

    네, 그런데 그건 제가 쓸 수 없는 드라이버 버전에 묶여 있어요. 그래서 이 방식이 가장 좋다고 보는 겁니다.

    저는 CPU 하나에 GPU 8장을 붙여 쓰는데, 가능한 한 많은 카드 사이에서 P2P를 돌리려면 그 드라이버가 꼭 필요합니다. 개조 4090이 문제인 이유는 BAR1이 보고하는 크기(32G)가 VRAM보다 작아서 모든 소프트웨어가 쓸 수 있는 게 아니기 때문입니다(48G 하나가 아니라 메모리 세그먼트 두 개가 있어야 돌아갑니다). 그 드라이버가 이 문제를 푸는 데 한몫하고요.

  9. Tiberium HN

    참고로 gpu unlock ada 저장소는 드라이버 버전에 묶여 있지 않아요. 저는 Codex로 그냥 컴파일했는데, 포크는 610.x용인데도 제 615.xx 드라이버에서 잘 돌아갑니다. 저장소가 그 버전의 펌웨어를 쓰는 것뿐인 듯해요. 제 GPU는 4070ti super입니다.

  10. jacquesm HN

    좋아요, 해보겠습니다. 저는 48G 4090을 쓰려고 상당히 많이 수정한 590.48.01을 쓰는데, 동작은 하지만 손이 좀 가요. 핵심 문제는 BAR1이 충분히 크지 않고 32G로 제한된다는 겁니다.

    하하, 됐습니다. 정말 감사합니다!!

    전체 소요 시간이 30% 줄었어요. 꽤 괜찮네요(아직 최대 전력으로는 안 돌리고 있어요. 그 빈약한 커넥터에 450 W는 좀 부담스러워서요).

  11. SlavikCA HN

    저도 VRAM 48GB로 개조한 RTX 4090이 두 장 있습니다. 그런데 기본 드라이버를 쓰고 있어요. 거의 48GB를 꽉 채우는 모델도 돌리고 있고요.

    이제 궁금해졌는데, 제가 놓친 설정이 있을까요? 그 BAR 관련해서 확인해야 할 게 있나요?

  12. jacquesm HN

    그럼 P2P를 안 쓰고 계실 가능성이 높습니다. NV 개발 패키지에 들어 있는 p2pbandwidthtest를 돌려서 쓰는지 아닌지 확인해 보세요.

  13. Zagitta HN

    제 저장소에서 갈라져 나온 포크라면 어떤 드라이버 버전에 고정해 뒀든 상관없습니다. 그 고정은 사실 AI(clanker)가 만든 군더더기예요. 실제로는 알맞은 booter 펌웨어를 추출해서 로드하는 데만 쓰이는데, booter 부분은 엔비디아 드라이버에 넘기기 전에 전부 리셋되기 때문에 버전이 전혀 맞지 않아도 됩니다.

  14. jacquesm HN

    그 포크가 맞는 것 같은데, 컴파일도 되고 설치도 되지만 아직은 성능 개선이 안 보입니다. 계속 붙들고 해볼게요.

  15. marcosscriven HN
  16. jacquesm HN

    그건 GP(원작자) 작업물의 포크예요.

  17. mietek HN

    5090은요?

  18. Zagitta HN

    Hopper와 Blackwell은 보안 체인이 완전히 달라서, 적어도 이 방식으로는 범위 밖입니다.

    다만 중국이 5090을 엄청나게 사들여서 개조하는 것 같다는 보도를 보면, 뭔가 방법을 찾아냈을 것 같긴 합니다.

  19. jacquesm HN

    그 부분을 많이 찾아봤는데, 성능보다는 패키징 쪽 이야기가 대부분인 것 같아요. 제가 아는 한 '개선된' 5090이 어느 정도 물량으로 팔리는 일은 없고, 제가 아는 개조품(64G와 96G 버전)도 어떤 이유에선지 양산까지 가지 못했습니다. 꼭 나왔으면 좋겠지만요.

  20. Zagitta HN

    48GB 4090처럼 VRAM이 더 큰 버전용 vbios를 손에 넣은 건 아닐까요?

  21. jacquesm HN

    추측은 많은데 확실히 아는 사람은 없는 것 같습니다. 하드웨어가 지원하기만 하면 이론상 언락은 가능하지만, 48G 4090처럼 이상한 부작용이 생길 수 있어요. 예를 들어 개조된 카드인지는 P2P를 쓰기 전까지 알 수 없다가, P2P를 쓰는 순간 갑자기 다 무너집니다. P2P가 되려면 한 카드의 메모리 공간을 다른 카드의 메모리 공간에 매핑해야 하는데, BAR1이 전체 VRAM보다 작으면 그 블록의 끝(TOP)을 넘어서는 순간 크래시가 나기 때문입니다. 그 전까지는 이 방법이 통하고요.

    5090을 팔 수 있는 수준으로 개조하는 건 4090보다 훨씬 어려울 것 같습니다.

  22. marcosscriven HN
  23. verdverm HN

    GB10(DGX Spark)에서도 비슷한 일이 벌어지고 있고 같은 처리가 필요한지 아시나요?

    추신: 설령 그렇더라도 중국이 해내서 세상에 선심을 써주지 않는 이상 당분간은 어렵다고 이미 밝혀 주셨네요.

  24. RachelF HN

    다소 관련 있는 얘기인데, 카드를 여러 장 쓰는 분들을 위한 패치가 있습니다. 이 라이브러리를 쓰면 소비자용 GPU에서 카드 간 속도를 20% 정도 끌어올릴 수 있어요.

    https://github.com/aikitoria/open-gpu-kernel-modules

    하드웨어는 원래 지원하는데, 엔비디아가 드라이버에서 더 저렴한 카드를 감지하면 이 기능을 꺼 버립니다. 이 패치는 엔비디아가 건 그 속도 제한을 우회합니다.

  25. jacquesm HN

    맞아요, 저도 앞에서 올리긴 했는데 이건 최상위 댓글로 올릴 만한 내용입니다.

  26. jacquesm HN

    이건 진짜입니다. 다만 몇 가지 단서가 붙어요.

    • 생각보다 카드를 더 뜨겁게 돌려야 합니다

    • (일부 카드는) 제대로 효과를 보려면 최대 전력을 450W까지 올려야 하는 것 같습니다(아래 스레드 참고)

    • 기본 쿨러가 감당하도록 설계된 수준을 한참 넘으니 냉각을 좀 더 보강하는 편이 좋습니다

    좋은 점은, 한동안 나와 있던 p2p 모드 위에(정확히는 이쪽이 먼저 로드되니까 그 아래에) 이걸 겹쳐 쓸 수 있다는 겁니다. 둘이 서로 간섭하지 않는 것 같아요.

  27. Zagitta HN

    꽤 미묘한 문제입니다. 요약하면 이 언락은 엔비디아가 프로페셔널·데이터센터 카드에서만 풀 레이트로 열어 둔 특정 명령을, 코어가 얼마나 자주 발행할 수 있는지를 절반으로 깎는 2비트를 뒤집을 뿐입니다.

    당연히 연산을 더 하면 전력이 더 들지만, 전력을 맞추려고 카드가 주파수 곡선에서 아래쪽으로 내려갑니다. 그러니 말씀하신 대로 기본 전력 제한에서는 풀 발행 속도에 못 미치는 상한에 걸리는데, 전력 여유가 얼마나 남는지는 워크로드에 따라 크게 달라요.

    주파수 곡선은 발열도 고려하기 때문에, 대체로 카드가 조금 더 뜨거워지는 대신 성능이 꽤 올라가는 결과가 됩니다.

    저는 3090 두 장에 이걸 한 달째 쓰는데 문제없어요. 다만 수냉이긴 합니다 :-)

  28. jacquesm HN

    아, 그건 생각도 못 했네요. 제 GPU는 전부 공랭이거든요. 수냉이면 한계에 부딪히기 전까지 GPU에서 더 많은 성능을 뽑아낼 수 있겠군요.

  29. BoorishBears HN

    3090은 오버클럭의 시대에 나온 카드라서, 레퍼런스 디자인만 아니면 공랭이어도 괜찮을 거예요(커넥터 3개짜리 모델이라면 더더욱요).

    제 EVGA는 기본 펌웨어가 420W에서 시작해서 500W까지 허용했는데, 물론 500W는 게임에서 아무 소용이 없었죠.

  30. Tiberium HN
    • 생각보다 카드를 더 뜨겁게 돌려야 합니다

    이 부분 설명해 주실 수 있나요? 제 GPU는 전력 제한을 바꿀 필요가 없었거든요. 물론 카드가 최대 전력 사용 상태에 머무는 시간은 더 길어지겠지만, 그래도 제한 안에서 움직이니까요.

Hacker News에서 보기 ↗