가속기 메모리 한 장을 가중치와 KV 캐시가 나눠 쓴다. 남는 용량이 배치를 정하고, 배치가 연산강도를 정한다. 시퀀스 길이와 정밀도를 바꿔 가며 용량 제약이 어떻게 대역폭 효율까지 누르는지 본다.
KV/시퀀스 = 2 · L · S · d · bkv · Bsz = ⌊(M − P·b − 예비) / KV⌋ · tok/s ≲ B / (P·b) × Bsz
메모리 한 장의 배분
가중치예비(활성화·단편화)KV 캐시 (한 칸이 시퀀스 하나)남는 자리
칩
가중치 정밀도
KV 캐시 정밀도
어텐션 (KV 헤드 수)
가중치
KV / 시퀀스
KV에 쓸 수 있는 용량
최대 배치
처리량 상한
연산 이용률 ≈ Bsz/I*
시퀀스가 길어질수록 배치는 얼마나 줄어드나
지금 고른 칩·KV 정밀도·어텐션·예비 비율에서 가중치 정밀도 세 가지의 최대 배치를 그렸다. 점선은 지붕에 닿으려면 필요한 배치(Bsz ≈ I*)다.
풀이표와 대조 ()
H100 80GB, S = 4,096, KV fp16, 예비 0%. 「풀이」 열은 2회차 실습 3과 3회차 실습 3 풀이표의 반올림 값이다.
항목
계산
풀이
이 계산이 빼놓은 것
이용률은 Bsz / I*(BF16)로 셌다. 연산도 가중치와 같은 정밀도로 한다고 보면 실제 연산강도 2Bsz/b 와 그 정밀도의 리지 포인트 (2/b)·I* 가 함께 늘어, 두 값의 비가 이 값과 같다(2회차 실습 3 풀이 표). 가중치만 저정밀로 읽고 BF16으로 연산하면 연산강도가 2/b 배가 되어 이용률이 그만큼 높게 나온다(루프라인 실험대의 정밀도 단추가 이 경우다).
처리량 상한은 대역폭 쪽만 셌다. 배치가 리지 포인트를 넘으면 연산 바운드로 넘어가므로 이 식은 상한을 과대평가한다. 페이지가 그 경우를 따로 알린다.
KV 캐시를 읽는 트래픽은 빠져 있다. 문맥이 길면 매 스텝 KV도 읽어야 해서 실제 속도는 더 낮다.
모든 시퀀스가 최대 길이 S까지 찬다고 보았다. PagedAttention처럼 쓰는 만큼만 잡는 방식에서는 평균 길이가 기준이 된다.