실행 프로그램과 확장

최종 업데이트

3090 언락하면 로컬 LLM이 빨라질까? 프리필·배치·디코드

한 요청의 디코드보다 프리필·동시 요청·파인튜닝에서 차이가 날 수 있어요.

RTX 3090의 BF161 언락은 행렬 연산 처리량2을 올리지만, 한 요청의 토큰3 생성은 메모리 대역폭4에 묶여 있어요. 긴 문서를 한 번에 읽는 프리필5, 여러 요청을 묶는 배치, LoRA6 파인튜닝은 연산 비중이 커서 영향이 나타날 수 있어요. 다만 3090 자체의 공개 측정값이 아직 없어서, 기대치를 정하고 직접 재는 것이 먼저예요.

실행 조건과 핵심 내용
  • 디코드는 936GB/s 대역폭에 묶여 있어 BF16 처리량이 올라도 거의 변하지 않아요.
  • 프리필·배치·LoRA는 연산 비중이 커서 언락의 영향이 나타날 수 있어요.
  • 측정할 때는 전력 상한과 모델·양자화를 고정하고, 전후를 같은 조건으로 비교해야 해요.

디코드는 연산이 아니라 대역폭이 병목이에요

토큰을 하나씩 만들 때 모델은 매 단계마다 가중치를 메모리에서 읽어요. RTX 3090의 936GB/s 대역폭은 이 읽기를 기다리는 시간을 정하지, BF16 행렬 연산 유닛의 처리량이 속도를 정하지 않습니다. 그래서 언락으로 연산률이 올라도 한 요청의 tok/s는 거의 그대로예요.

사이트에 공개한 3090 측정도 같은 방향이에요. Qwen3.8 27B UD-Q4_K_XL, MTP7 n-max 3 조건에서 350W일 때 68.9 tok/s, 250W일 때 51.0 tok/s였어요. 전력 상한을 낮추면 느려지지만, 이는 연산이 아니라 클록과 전력의 문제입니다.

RTX 3090가 꽂힌 케이스에서 색 블록이 컨베이어를 따라 선반으로 이동하고, 네트워크 그림이 그려진 카드가 놓인 작업 공간
디코드 속도는 메모리 대역폭에 묶여 있어 연산 언락만으로는 크게 변하지 않아요.

프리필은 연산 병목이라 달라질 수 있어요

긴 문서를 한 번에 읽는 프리필은 입력 토큰 전체에 대해 행렬 곱을 수행해요. 이 구간은 연산 처리량의 영향을 받습니다. BF16 프리필을 쓰는 런타임8이라면 언락 후 첫 토큰까지의 시간이 줄어들 여지가 있어요. 다만 llama.cpp의 양자화9 커널처럼 BF16 행렬 곱을 쓰지 않는 경로에는 영향이 작습니다.

어느 런타임이 BF16 프리필을 쓰는지는 모델과 커널에 따라 달라요. 같은 모델이라도 vLLM과 llama.cpp가 같은 경로를 쓰지 않으니, 프리필 이득을 계산하려면 쓰는 런타임의 커널부터 확인하세요.

동시 요청과 배치에서 차이가 커져요

여러 요청을 동시에 처리하면 같은 가중치를 여러 번 재사용해 대역폭 부담이 줄고, 연산 비중이 커져요. 이때는 BF16 처리량이 전체 처리량을 좌우할 수 있습니다. vLLM처럼 연속 배칭을 쓰는 서버에서 언락의 효과가 더 크게 나타날 수 있는 이유예요.

반대로 한 사람이 한 번에 한 요청만 보내는 환경에서는 배치가 만들어지지 않아 이 이점이 거의 없어요. 서버 운영자인지, 개인 PC 사용자인지에 따라 기대치가 달라집니다.

파인튜닝과 이미지 생성은 별도로 봐요

LoRA 파인튜닝은 BF16 행렬 곱을 많이 쓰기 때문에 언락의 이득이 이론적으로 가장 큰 작업이에요. 하지만 3090의 24GB VRAM10이 배치 크기11와 시퀀스 길이를 제한해서, 연산률보다 메모리가 먼저 걸립니다. 큰 배치를 돌리는 사람일수록 효과를 볼 여지가 있어요.

이미지 생성은 모델·해상도·스텝 수에 따라 연산과 메모리 비중이 달라져요. FP1612 행렬 곱이 많은 구간에서는 도움이 될 수 있지만, 고해상도에서는 VRAM과 대역폭이 먼저 걸립니다. 이미지 생성의 전후 차이는 모델·해상도·스텝 수 조합마다 달라지므로, 쓰는 설정에서 그대로 재는 편이 빠릅니다.

팬이 하나인 짧은 그래픽카드와 팬이 두 개인 긴 그래픽카드가 나란히 놓인 그림
같은 24GB 카드라도 세대와 대역폭이 달라, 언락과 별개로 비교해야 해요.

측정은 전력을 고정하고 전후를 비교해요

먼저 같은 모델·양자화·문맥 길이·전력 상한에서 기준선을 재세요. 그다음 언락 후 콜드 부팅으로 같은 조건을 반복합니다. 디코드13만 재면 차이가 거의 보이지 않으니, 프리필 시간과 동시 요청 처리량을 함께 기록해야 해요.

작업별 병목과 언락 기대치
작업병목기대
한 요청 디코드메모리 대역폭거의 없음
긴 문서 프리필행렬 연산런타임 커널에 따라 다름
동시 요청행렬 연산배치가 클수록 큼
LoRA 파인튜닝행렬 연산, VRAMVRAM이 먼저 걸림

그래서 사야 하나

언락은 이미 가진 3090의 연산 여유를 확인하는 실험이에요. 새로 카드를 사는 이유로는 약하고, 디코드가 목적이라면 5090이나 48GB 개조처럼 다른 선택지를 봐야 합니다. 3090의 강점은 24GB 용량과 가격이지 연산률이 아니에요.

판단은 측정에서 나와요. 같은 카드에서 전후를 재고 나서 결정하세요.

RTX 3090의 350W·300W·275W·250W 전력 상한별 디코드 68.9·65.3·62.3·51.0 tok/s와 실제 GPU 전력 347.7·298.7·274·249.5W를 막대로 비교한 차트
전력 상한을 낮추면 디코드 속도가 줄어요. 전후 비교에서도 전력을 고정해야 해요.

용어 각주

  1. BF16 — 모델 수치를 저장하고 계산하는 16비트 부동소수점 형식입니다. FP32와 같은 폭의 지수부를 써 넓은 값 범위를 표현합니다.

    본문으로 돌아가기
  2. 처리량 — 일정 시간 동안 처리하거나 생성한 작업량입니다. 토큰/초, 요청/초처럼 단위를 함께 확인해야 비교할 수 있습니다.

    본문으로 돌아가기
  3. 토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.

    본문으로 돌아가기
  4. 메모리 대역폭 — 메모리와 프로세서 사이에서 단위 시간에 전송할 수 있는 데이터 양입니다. 보통 초당 바이트(B/s)로 나타냅니다.

    본문으로 돌아가기
  5. 프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.

    본문으로 돌아가기
  6. LoRA — 기본 모델의 동작을 조정하는 작은 추가 가중치를 학습·적용하는 방식입니다. 기본 모델에 어댑터를 함께 적용하며, 스타일 조정이나 적은 단계의 생성 등에 쓰입니다.

    본문으로 돌아가기
  7. MTP — 한 번에 여러 미래 토큰을 예측하도록 학습하는 목표 또는 이를 수행하는 모델 구성입니다. 추측 디코딩에서는 이 예측을 후보 토큰으로 제안할 수 있습니다.

    본문으로 돌아가기
  8. 런타임 — 프로그램이 실행될 때 필요한 기능을 제공하는 소프트웨어 환경입니다. 로컬 AI에서는 모델을 실행하는 엔진을 가리키기도 합니다.

    본문으로 돌아가기
  9. 양자화 — 모델의 가중치나 계산값을 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 방법입니다. 표현 단계가 거칠어져 정확도에도 영향을 줄 수 있습니다.

    본문으로 돌아가기
  10. VRAM — 그래픽카드의 GPU가 사용하는 메모리입니다. 모델 가중치와 계산 중간값을 저장합니다.

    본문으로 돌아가기
  11. 배치 크기 — 한 번의 처리 묶음에 함께 넣는 입력 또는 요청의 수입니다.

    본문으로 돌아가기
  12. FP16 — 16비트 부동소수점 수치 형식입니다. BF16과 비트 수는 같지만 지수부와 유효숫자 배분이 다릅니다.

    본문으로 돌아가기
  13. 토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
RTX 3090의 BF16 언락은 행렬 연산 처리량을 올리지만, 한 요청의 토큰 생성은 메모리 대역폭에 묶여 있어요. 긴 문서를 한 번에 읽는 프리필, 여러 요청을 묶는 배치, LoRA 파인튜닝은 연산 비중이 커서 영향이 나타날 수 있어요. 다만 3090 자체의 공개 측정값이 아직 없어서, 기대치를 정하고 직접 재는 것이 먼저예요.
필요한 메모리는 어느 정도인가요?
토큰을 하나씩 만들 때 모델은 매 단계마다 가중치를 메모리에서 읽어요. RTX 3090의 936GB/s 대역폭은 이 읽기를 기다리는 시간을 정하지, BF16 행렬 연산 유닛의 처리량이 속도를 정하지 않습니다. 그래서 언락으로 연산률이 올라도 한 요청의 tok/s는 거의 그대로예요.