クイズ: KV キャッシュが減らす計算量
한국어 원문으로 표시합니다.
KV 캐시가 없을 때 토큰 하나를 더 만들면 무엇이 되풀이되는가?
- 소프트맥스만 문맥 길이만큼 다시 계산된다
- 가중치 행렬 자체가 자리마다 새로 만들어진다
- 앞 문맥 모든 자리의 k·v 가 처음부터 다시 만들어진다
- 마지막 토큰의 q 가 자리마다 한 번씩 다시 만들어진다
캐시의 이득을 잴 때 시간 대신 곱셈 횟수를 세는 이유로 가장 정확한 것은?
- 같은 입력이면 늘 같은 수라 길이에 대한 증가 모양이 그대로 보인다
- 곱셈이 덧셈보다 훨씬 느려서 시간을 대신할 수 있다
- 파이썬에서는 시간을 재는 표준 방법이 따로 없기 때문이다
- 곱셈 횟수가 메모리 사용량과 비례하기 때문이다
문맥 길이 n, 차원 d 에서 캐시를 쓸 때 길이에 비례해 계속 자라는 몫은 무엇인가?
- 새 토큰의 q·k·v 투영 몫이 자란다
- 가중치 행렬을 읽는 몫이 자란다
- 소프트맥스의 지수 계산 몫만 자란다
- 질의가 n 개의 키와 값을 보는 어텐션 몫이 자란다
앞 자리의 k·v 를 그대로 재사용해도 답이 달라지지 않는 근거는?
- 소프트맥스가 합을 1 로 맞춰 차이를 흡수하기 때문이다
- 인과 마스크 때문에 각 자리가 자기 앞만 보아 뒤가 붙어도 값이 안 바뀐다
- k 와 v 가 가중치 행렬만으로 정해져 입력과 무관하기 때문이다
- 부동소수점 허용 오차 안이면 달라져도 같다고 보기 때문이다
캐시가 먹는 원소 수를 옳게 적은 것은?
- 층 수 × 헤드 수 × 문맥 길이 (K 와 V 는 한 벌로 센다)
- 2 × 층 수 × 문맥 길이 × 어휘 크기
- 2 × 층 수 × 헤드 수 × 문맥 길이 × 헤드 차원
- 2 × 헤드 수 × 헤드 차원 (길이와는 무관하다)
캐시를 켰을 때와 껐을 때 출력이 달라졌다면 무엇을 의심해야 하는가?
- 캐시는 근사이므로 이 정도 차이는 정상이다
- 구현이 틀렸다 — 캐시는 답을 바꾸지 않아야 한다
- 문맥이 길어져 소프트맥스가 포화된 것이다
- 허용 오차를 더 넓게 잡아 통과시키면 된다