추론 처리량 계산기
입력
| 파라미터 수 | 70 |
|---|---|
| 가중치 정밀도 | 16비트 (2바이트) |
| 메모리 대역폭 | 3,350 |
추론 처리량 계산기
모델 크기, 가중치 정밀도, 가속기 메모리 대역폭으로부터 LLM 디코딩 속도의 메모리 대역폭 한계, 즉 단일 스트림의 초당 토큰 루프라인을 추정합니다.
입력
모델
하드웨어
결과
값을 입력하면 계산 결과가 표시됩니다.
세부 정보
추론 처리량
추론 처리량은 언어 모델이 초당 토큰을 몇 개 생성할 수 있는지를 뜻한다. 단일 요청에서 그 상한은 가속기의 원시 산술 성능이 아니라 모델 가중치를 메모리에서 얼마나 빨리 읽을 수 있는가로 정해진다. 이 계산기는 모델 크기, 가중치 정밀도, 하드웨어의 메모리 대역폭을 그 상한, 즉 하나의 디코딩 스트림에 대한 초당 토큰 루프라인으로 변환한다.
디코딩이 메모리 제한인 이유
자기회귀적으로 텍스트를 생성한다는 것은 토큰 하나를 만든 다음 그것을 다시 입력으로 넣어 다음 토큰을 만든다는 뜻이다. 이 단계들은 각각 새 토큰 하나를 계산하기 위해 모델의 모든 가중치를 읽어야 한다. 배치 크기가 1일 때 가속기는 읽어 들이는 바이트마다 매우 적은 산술 연산만 수행하므로, 곱셈보다 가중치를 옮기는 데 거의 모든 시간을 쓴다. 따라서 토큰 속도는 메모리 대역폭이 좌우한다. (프롬프트 프리필은 그 반대로, 모든 프롬프트 토큰을 함께 처리하며 연산에 의해 제한된다.)
공식
먼저 가중치가 차지하는 메모리를 구한 다음, 사용 가능한 대역폭을 그 값으로 나눈다.
Mv=N×b=MBW여기서 은 십억 단위의 파라미터 수, 는 파라미터당 저장되는 바이트 수, 은 기가바이트 단위의 모델 크기, 는 초당 기가바이트 단위의 메모리 대역폭, 는 초당 토큰 단위의 처리량 한계이다. 십억 바이트가 약 한 기가바이트에 해당하므로, 파라미터를 십억 단위로 입력하면 크기가 곧바로 기가바이트로 나온다. 가중치 정밀도 는 16비트 가중치에서 두 바이트, 8비트에서 한 바이트, 4비트에서 0.5바이트이다.
계산 예시
3,350 GB/s 메모리 대역폭을 가진 가속기에서 16비트 정밀도로 서빙되는 700억 파라미터 모델을 생각해 보자.
Mv=70×2=140 GB=1403350≈23.9 tokens/s따라서 단일 스트림은 초당 24개 토큰 부근에서 한계에 이른다. 같은 모델을 4비트로 양자화하면 크기가 35 GB로 줄고 상한이 초당 약 96개 토큰으로 올라가는데, 이는 토큰당 읽는 바이트가 4분의 1로 줄어든 것을 그대로 반영한 네 배의 향상이다.
결과 읽기
이 수치는 약속이 아니라 상한이다. 가중치를 스트리밍하는 트래픽만 계산하므로, 키-값 캐시, 어텐션 연산, 커널 오버헤드가 모두 이 값을 깎아내려 실제 단일 스트림은 보통 루프라인의 절반에서 4분의 3 사이에 도달한다. 여러 요청을 배치로 서빙하면 가중치를 그룹 전체에 대해 한 번만 읽으므로 집계 처리량이 단일 스트림 수치를 훨씬 웃돌게 된다. 이에 대해서는 배치 추론 처리량 계산기를 참고하면 된다. 토큰 속도를 사용자가 체감하는 대기 시간으로 변환하려면 추론 지연 시간 계산기와 함께 쓰고, 하드웨어의 연산이 얼마나 잘 활용되는지 가늠하려면 모델 FLOP 활용도 계산기를 참고하면 된다.
자주 묻는 질문 (FAQ)
디코딩이 연산이 아니라 메모리 대역폭에 의해 제한되는 이유는 무엇인가
자기회귀 디코딩에서 모델은 한 번에 토큰 하나씩 생성하며, 각 단계는 다음 토큰을 계산하기 위해 모든 가중치를 메모리에서 읽어야 한다. 배치 크기가 1일 때는 읽어 들이는 바이트당 산술 연산이 매우 적어서, 가속기는 곱셈보다 가중치를 옮기는 데 대부분의 시간을 쓴다. 따라서 토큰 속도는 최대 부동소수점 처리량이 아니라 메모리를 얼마나 빨리 읽을 수 있는가로 결정된다. 프롬프트 전체를 한 번에 처리하는 프리필은 그 반대로, 연산에 의해 제한된다.
서버가 실제로 이 수치에 도달하는가
도달하지 않는다. 이 수치는 메모리 트래픽이 가중치뿐이라고 가정한 깔끔한 상한이다. 실제로는 키-값 캐시, 어텐션 연산, 커널 실행 오버헤드, 불완전한 메모리 활용이 모두 이 값을 깎아내리므로, 단일 스트림은 보통 루프라인의 절반에서 4분의 3 사이에 도달한다. 여러 요청을 배칭하면 가중치를 배치 전체에 대해 한 번만 읽으므로, 집계 처리량은 단일 스트림 한계를 훨씬 웃돌게 된다.
양자화는 처리량을 얼마나 높이는가
처리량은 모델 크기에 반비례하므로, 파라미터당 바이트 수를 절반으로 줄이면 한계가 대략 두 배가 된다. 16비트 가중치를 8비트로 옮기면 토큰당 읽는 바이트가 절반이 되고, 4비트는 다시 절반이 된다. 양자화는 출력 품질을 떨어뜨릴 수 있으므로, 속도 향상은 해당 작업에서의 정확도 저하와 견주어 따져 봐야 한다.
면책조항
이것은 가중치 메모리 트래픽만 계산하고 단일 스트림 디코딩을 가정한 1차 근사 루프라인이다. 실제 처리량은 서빙 스택, 배치 크기, 시퀀스 길이, 키-값 캐시에 따라 달라지며 보통 이 한계의 일부에 그친다. 용량 계획을 확정하기 전에 대상 하드웨어에서 벤치마크하는 것이 좋다.