실행 프로그램과 확장

FlashAttention과 PagedAttention 차이

하나는 어텐션 계산을 효율화하고, 다른 하나는 KV 캐시를 페이지처럼 관리합니다.

쉽게 말하면

FlashAttention은 AI가 긴 글을 읽는 계산을 효율화하는 기술이고, PagedAttention은 여러 대화의 기억 공간을 낭비 없이 나눠 쓰는 기술입니다. 이름은 비슷하지만 하는 일이 다릅니다.

장비를 고를 때

개인용 장비 구매에서는 지원 여부만 확인하면 충분합니다. 두 기술의 이름이 있다고 해서 짧은 채팅 속도가 크게 빨라진다고 보기는 어렵습니다.

이 글에서 확인할 내용

  • FlashAttention은 어텐션 커널의 메모리 이동을 줄입니다.
  • PagedAttention은 KV 캐시를 고정 블록으로 나눠 관리합니다.
  • 둘은 대체 관계가 아니며 동시에 쓰일 수 있습니다.

FlashAttention은 긴 글을 읽는 계산을 줄입니다

어텐션은 문장 안의 각 부분이 다른 부분과 어떤 관계가 있는지 계산하는 과정입니다. 긴 글에서는 중간 계산 결과를 메모리에 쓰고 다시 읽는 일이 많아 속도를 떨어뜨릴 수 있습니다.

FlashAttention은 계산 순서를 바꿔 중간 데이터를 덜 옮기도록 합니다. 긴 입력을 처음 읽는 프리필에서 도움이 될 수 있지만 모델, 장비와 실행 프로그램이 모두 지원해야 합니다.

PagedAttention은 대화용 메모리를 잘게 나눕니다

여러 대화를 동시에 처리하면 대화마다 길이가 달라 메모리 사이에 빈 공간이 생기기 쉽습니다. PagedAttention은 KV 캐시를 작은 블록으로 나눠 필요한 만큼만 배정합니다.

운영체제가 메모리 페이지를 관리하는 방식과 비슷합니다. 주된 목적은 여러 요청을 처리하는 서버에서 메모리 낭비를 줄이는 것입니다.

단일 GPU와 서로 통신하는 듀얼 GPU에서 여러 길이의 요청을 캐시 블록에 배치하는 과정을 비교한 그림
GPU를 늘리면 메모리와 처리량을 키울 수 있지만 장비 사이 통신이 추가됩니다. 여러 요청은 빈 캐시 블록을 나눠 쓰며 처리됩니다.

서로 대체하지 않습니다

FlashAttention은 한 번의 어텐션 계산을 어떻게 효율적으로 수행할지에 가깝고, PagedAttention은 여러 시퀀스의 과거 상태를 어떻게 배치하고 찾을지에 가깝습니다.

런타임은 프리필에 FlashAttention 계열 커널을 쓰면서 디코드와 배칭에 페이지형 KV 관리를 함께 사용할 수 있습니다. 기능 목록에서는 각각의 적용 구간을 확인해야 합니다.

단일 사용자와 서버의 차이

단일 사용자가 짧은 대화를 하는 환경에서는 복잡한 페이지 관리의 이득이 작을 수 있습니다. 긴 문맥이나 동시 요청이 많을수록 KV 블록을 유연하게 쓰는 가치가 커집니다.

FlashAttention도 짧은 단일 토큰 디코드보다 긴 프리필에서 차이가 잘 드러나는 편입니다. 서버 처리량 벤치마크를 개인 채팅의 tok/s 향상으로 그대로 해석하면 안 됩니다.

확인해야 할 지표

긴 입력의 프리필 tok/s와 피크 메모리, 동시 요청 수에 따른 처리량, KV 캐시 사용률과 TTFT를 따로 봅니다. 커널 이름보다 현재 모델과 양자화에서 실제로 선택된 백엔드가 중요합니다.

최신 런타임은 하드웨어와 문맥 길이에 따라 커널을 자동 선택하기도 합니다. 강제 옵션은 호환성이나 정확도 문제가 없는지 확인한 뒤 사용하세요.