GLM-5 대규모 서비스 중 발견한 race condition 버그 수정기 — Coding Agent 추론 인프라의 Scaling Pain
·2026.04.30 10:40
GLM-5 대규모 서비스에서 KV Cache race condition 수정과 LayerSplit 최적화를 공개했다.
GLM-5 기반 Coding Agent를 하루 수억 건 규모로 서비스하면서, 고동시성·장문맥 환경에서만 나타나는 출력 이상을 추적했다.
이상 신호는 Speculative Decoding 지표로 잡았다. 생성 토큰이 128개를 넘은 뒤 spec_accept_length < 1.4 또는 spec_accept_rate > 0.96이면 요청을 중단하고 로드밸런서에 재시도하도록 했다.
- Bug Fix #1: PD(Prefill-Decode) 분리 구조에서 abort 신호가 Prefill에 전달되지 않아, 회수된 KV Cache가 새 요청에 덮어쓰이던 race condition을 수정했다.
- 이 수정으로 이상 출력 비율은 0.1% → 0.03% 미만으로 감소했다.
- Bug Fix #2: HiCache에서 Load Stream과 Forward Stream 사이의 동기화가 빠져 read-before-ready가 발생하던 문제를 고쳤다.
- 이 변경은 SGLang PR #22811로 커뮤니티에 기여됐다.
- LayerSplit: Context Parallelism 환경에서 레이어별 KV Cache를 분산 저장해 GPU당 메모리 부담을 줄이고, 브로드캐스트와 indexer 연산을 겹쳐 통신 오버헤드를 숨겼다.
- 90% cache hit rate 조건에서 40K~120K 토큰 요청의 처리량이 10%~132% 개선됐다.
결론적으로, 이 글은 대규모 LLM serving에서 단순한 처리량·지연 최적화를 넘어, 생성 결과의 정확성까지 시스템 차원에서 보장해야 한다는 점을 강조한다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.