Devotd Github
새 소식추론/서빙

flashinfer-ai/flashinfer — Cake GQA 학습 어텐션 경계 검사 수정

FlashInfer가 Cake의 가변 길이 GQA 학습 어텐션에서 호스트 경계 검증 누락, int32 타일 카운터 되돌림, apply 인자 수 문제를 고친 정확성 수정 커밋을 게시했다.

저장소 정보flashinfer-ai/flashinfer ↗

FlashInfer가 Cake의 가변 길이 GQA 학습 어텐션에서 호스트 경계 검증 누락, int32 타일 카운터 되돌림, apply 인자 수 문제를 고친 정확성 수정 커밋을 게시했다.

GitHub 설명: FlashInfer: Kernel Library for LLM Serving

스타
★ 6.6K
포크
1.6K
언어
Cuda
라이선스
Apache-2.0
최신 릴리스
v0.7.2
원문 보기 ↗GitHub에서 보기 ↗

flashinfer-ai/flashinfer의 최신 커밋(2026-11-08)은 LLM 서빙용 커널 라이브러리 FlashInfer에서 `cake_gqa_nondet_train` 경로의 세 가지 경계 검사 결함을 고친 수정이다. 이 경로는 헤드 차원 256용으로 만든 Cake의 가변 길이 인과 GQA 학습 어텐션으로, 서로 길이가 다른 시퀀스를 한 묶음으로 처리한다. 이번 변경은 커널과 실행 계획을 바꾸지 않는 정확성 수정이다.

고쳐진 세 가지는 모두 입력 경계의 검증이다. backward는 호스트 측 시퀀스 경계 목록인 `cu_seqlens_q_host`과 `cu_seqlens_k_host`가 둘 다 주어지거나 둘 다 없는지, 그리고 피연산자 크기와 맞는지를 메모리 할당과 query·key가 없는 조기 반환보다 앞에서 확인한다. 디바이스 타일 카운터는 int32라 2^31 타일을 넘으면 값이 돌아가는데, 범위 검사가 이 경우 int64로 경계 표를 다시 만들어 잘못된 범위를 걸러낸다. 마지막으로 `host_boundaries`의 기본값을 `None`으로 두고 backward가 forward 인자마다 그라디언트를 하나씩 돌려주도록 해 인자가 9개인 `apply` 호출이 계속 동작하게 했다. 테스트 쪽에는 130줄이 추가되어 접힌 int32 타일 테이블에 대한 검사를 자식 프로세스로 돌려 본다.

성능 변화는 없다. 9개 형태 × 3가지 연산(전방·후방·스텝)을 GB200, GB300, R200에서 FlashInfer main과 같은 모드로 비교했을 때 모든 행이 A/A 노이즈 밴드 안에 들었고(GB200 ±0.69%–±3.34%, GB300 ±0.12%–±1.19%, R200 ±0.27%–±9.94%), 의도는 정확성 수정이었다.

다만 증거가 닿는 범위는 좁다. int64 경로는 측정된 형태에서 한 번도 발동하지 않았고, 2^31 타일까지 커질 수 있는 형태의 동작은 측정으로 확인되지 않았다. 작은 호출 8개 레이아웃에서도 GB300 전방 두 행(`tails_small` 0.950x, `tile_edges` 0.980x)이 ±3.21%, ±0.91% 밴드를 벗어났으나 전방 코드를 건드리지 않은 변경이라 14~31 us 호출의 측정 노이즈로 보고된다. 참고로 결정적 Cake 패키지(`cake_gqa_det_train`, PR #9121) 대비 스텝은 0.992x–1.039x, 행마다 가장 빠른 동일 정밀도 비-Cake 구현 대비 스텝은 1.050x–1.262x 범위였다. 즉 이 커밋은 속도 경쟁이 아니라 잘못된 범위를 걸러내는 안전장치에 가깝다.