KV 캐시 최적화 전략¶
자기회귀 디코딩 단계의 실질적 성능 한계는 연산량이 아니라 KV 캐시의 메모리 대역폭 입니다. 본 페이지는 Gemma 3N E4B 타겟에서 pccx v002 가 KV 캐시를 어떻게 다루는지, 그리고 RTL / 드라이버 레벨에서 적용되는 3 대 지침을 정리합니다.
1. GEMV 지배성과 메모리 장벽¶
디코딩(토큰 1 개 생성) 단계에서 연산량의 85 ~ 98 % 이상이 GEMV 이며,
GQA Attention 부분만이 시퀀스 길이 L 에 비례하는 GEMM 을 수행합니다.
따라서 GEMV 유효 가동률이 TPS 에 직결됩니다.
반면 KV 캐시는 레이어마다 누적·재사용되므로, 시퀀스가 길어질수록 매 토큰 마다 읽어야 할 메모리 총량 이 선형으로 증가합니다.
시퀀스 길이 L |
토큰 당 KV |
누적 KV 크기 |
KV260 DDR4 (10–12 GB/s) 기준 예상 여유 |
|---|---|---|---|
1 K |
~40 KB |
~40 MB |
넉넉함 — MAC 이 병목 |
8 K |
~40 KB |
~320 MB |
빠듯함 — 대역폭 경쟁 시작 |
32 K |
~40 KB |
~1.31 GB |
대역폭 포화 — MAC 정지 |
32 K 컨텍스트 기준 1.31 GB 를 매 토큰마다 DDR4 에서 읽어야 하므로, 실효 대역폭 ~10 GB/s 에서 토큰 당 ~131 ms 의 메모리 전송 시간만으로도 TPS 가 8 이하로 떨어집니다.
참고
Gemma 3N 의 Cross-Layer Sharing 최적화(35 층 중 20 층만 KV 저장) 를
반영해도 토큰 당 40 KB 수준입니다. 이 값이 KV260 등 엣지 디바이스에서
L = 32 K 를 직접 수용할 수 없는 본질적 원인입니다.
2. 하드웨어 레벨 3 대 지침¶
pccx v002 는 RTL / NPU 메모리 컨트롤러 / 드라이버 계층에 다음 세 가지 기법을 우선 반영합니다.
flowchart TB
KV["토큰 당 40 KB<br/>KV 엔트리"]
Q["① <b>KV Quantization</b><br/>FP16 → INT8 / INT4<br/>×2 ~ ×4 대역폭 절감"]
E["② <b>Compression / Eviction</b><br/>Attention Sink + Local Window<br/>+ Google Turbo Quant"]
C["③ <b>Size Hard Cap</b><br/>Ring Buffer + 펌웨어 상한"]
OUT[("실효 Bandwidth<br/>관리 가능 수준")]
KV --> Q --> E --> C --> OUT
2.1 KV 캐시 양자화 (Quantization)¶
대상: 기존 FP16 로 저장하던 KV 엔트리를 INT8 또는 INT4 로 양자화하여 DRAM 에 적재.
효과:
FP16 → INT8: 2 배, FP16 → INT4: 4 배의 대역폭·용량 절감.
W4A8 연산 파이프라인과 포맷이 일치하여 dequantize 경로 재사용 가능.
구현 경로:
MEMCPY from_device=1, to_device=1명령어로 KV 쓰기 경로에 in-line 양자화 삽입 (activation-scale 공유).Per-head / per-channel scale 은 Constant Cache 에 MEMSET 으로 프리셋.
2.2 압축 및 폐기 (Compression / Eviction)¶
Attention Sink (프롬프트 선두 몇 개 토큰) + Local Window (최근 대화) 만 남기고 중간 토큰은 주기적으로 폐기(eviction) 하는 정책을 드라이버 레벨에서 관리.
Google Turbo Quant 류 실시간 재양자화와 결합 시, KV 의 유효 크기를 추가로 축소 가능.
Eviction 단위는 드라이버의 KV ring 인덱스 갱신으로 표현되며, 하드웨어는 “어느 인덱스까지 유효한가” 만 보고 실제 폐기 없이 논리적 삭제로 처리 합니다.
2.3 최대 크기 하드 캡 (Maximum Size Limit)¶
드라이버 초기화 시 KV ring buffer 의 최대 용량 을 하드코딩 — 예:
KV_MAX_TOKENS = 8192.한계 초과 시 가장 오래된 엔트리를 eviction 정책에 따라 덮어씀.
목적:
보드 가용 RAM(≲ 4 GB) 안에서 OOM 을 원천 차단.
대역폭 사용량을 사전에 예측 가능하게 고정.
3. 명령어 매핑¶
기법 |
주 명령어 |
비고 |
|---|---|---|
KV 양자화 |
|
dest/src 경로에 dequantize / requantize 조합. |
Eviction |
드라이버 전용 |
|
크기 제한 |
드라이버 전용 |
|
4. 성능 영향 요약¶
시나리오 |
대역폭 압박 |
MAC 활용도 |
비고 |
|---|---|---|---|
FP16 KV, 32 K |
극심 |
~10 % |
메모리 장벽 지배 |
INT8 KV, 32 K |
중간 |
~35 % |
기본 권장 설정 |
INT4 KV + Eviction, 32 K |
완화 |
~70 % |
Attention Sink + Window 정책과 결합 시 달성 |
INT4 KV + Turbo Quant, 32 K |
완화 |
~85 %+ |
추가 압축으로 cold 경로까지 가속 |
5. 열린 과제¶
정확도 영향 측정: INT4 KV 의 task-level 정확도 편차를 Gemma 3N eval suite 로 추적해야 합니다.
Eviction 정책의 모델 의존성: Attention Sink 수 / 윈도우 크기는 모델 고유 튜닝 값이며, 드라이버 설정 API 로 노출 필요.
동적 재양자화 레이턴시: Turbo Quant 류의 주기적 재양자화가 추가 될 경우,
CVO_SCALE경로의 스케줄링 슬롯 확보가 과제.
관련 드라이버 API 는 C API 개요 의 KV 관리 섹션 참조.