추론 서버가 배치를 통째로 기다리지 않고 토큰 한 스텝마다 끝난 요청은 빼고 새 요청을 넣는 방식
GPU를 쉬지 않게 해서 처리량이 크게 올라간다
iteration-level scheduling
가장 긴 요청이 끝날 때까지 배치가 묶여 있지 않고 끝나는 sequence 에는 다른놈 채움
Requirement
- PagedAttention: KV cache를 작은 블록 단위로 관리해 길이가 제각각인 요청을 넣고 빼도 메모리가 조각나지 않는다.
- padding 없는 일렬 배치: 모든 요청의 토큰을 한 줄로 이어 붙이고 varlen attention으로 요청끼리 경계를 나눈다. Sequence Packing
Varlen attention: variable-length
길이가 다른 시퀀스들을 padding 없이 attention하는 kernel. 토큰을 한 줄로 이어 붙여 텐서를 만들고, 경계 위치 인덱스만 넘김. kernel은각 구간 안에서만 attention을 계산 Flash Attention. varlen은 그렇게 이어 붙인 줄을 샘플끼리 섞이지 않게 계산하는 kernel.
이게 가능한 이유는 Transformer에서 토큰끼리 섞이는 곳은 attention 하나뿐이고 masking 으로 나눠서 서로 영향 안주기도 가능. position index 만 반영해주면 댐. 상대거리쓰는 RoPE 는 더 쉽고
다만 MoE의 expert capacity에서 expert마다 받을 수 있는 토큰 수에 상한을 두거나 하는 식에서 구현이 복잡해지거나 불가능할수도 있다. Mamba 같은 SSM이나 conv 층과 BatchNorm이 들어가면 구현이 막히는데 LLM에서는 거의 사용안함.

Seonglae Cho