[ollama] Ollama의 Gemma 4 모델 Flash Attention 비활성화: 성능 회귀(Regression) 해결 사례
PR 링크: ollama/ollama#15311 상태: Merged | 변경: +None / -None
들어가며
소프트웨어 엔지니어링, 특히 고성능 AI 추론 엔진을 개발할 때 '최신 기술이 항상 더 빠를 것'이라는 가정은 위험할 수 있습니다. 최근 Ollama 프로젝트에서 발생한 Gemma 4 모델의 Flash Attention 비활성화 사례는 이를 극명하게 보여줍니다.
Flash Attention은 메모리 대역폭 병목을 줄여 LLM 추론 속도를 획기적으로 개선하는 기법으로 알려져 있습니다. 하지만 Ollama 팀은 Gemma 4 모델에 이를 적용했을 때 오히려 심각한 성능 저하(Performance Regression)가 발생함을 확인했고, 이를 해결하기 위해 해당 기능을 다시 비활성화하는 결정을 내렸습니다. 이번 글에서는 구체적인 벤치마크 수치와 코드 변경 사항을 통해 왜 '기술적 후퇴'가 때로는 '성능적 진보'가 되는지 살펴보겠습니다.
코드 분석: Flash Attention 비활성화
이번 변경사항은 매우 단순하지만 영향력은 큽니다. fs/ggml/ggml.go 파일에서 Flash Attention을 지원하는 모델 목록 중 gemma4를 제거하는 작업입니다.
Before
// fs/ggml/ggml.go
func (f GGML) FlashAttention() bool {
return slices.Contains([]string{
"bert",
"gemma3",
"gemma4",
"glm4moelite",
"glmocr",
"gptoss", "gpt-oss",
// ... 생략
After
--- a/fs/ggml/ggml.go
+++ b/fs/ggml/ggml.go
@@ -890,7 +890,6 @@ func (f GGML) FlashAttention() bool {
return slices.Contains([]string{
"bert",
"gemma3",
- "gemma4",
"glm4moelite",
"glmocr",
"gptoss", "gpt-oss",
이 변경을 통해 Ollama는 Gemma 4 모델을 로드할 때 Flash Attention 커널 대신 표준 어텐션 메커니즘을 사용하도록 강제합니다.
왜 이게 좋은 최적화인가?
일반적으로 기능을 제거하는 것은 최적화라고 부르지 않지만, 이번 사례는 명확한 성능 데이터에 기반한 올바른 엔지니어링 의사결정입니다. PR 설명에 첨부된 벤치마크 결과를 분석해 보겠습니다.
1. 충격적인 성능 저하 확인
Flash Attention을 활성화했을 때(0.20.1-flash.log)와 비활성화했을 때(0.20.1-no-flash.log)의 차이는 극명합니다.
- Prefill 단계 (입력 처리): Gemma 4:e2b 모델 기준, Flash Attention 활성화 시 **-59.57%**의 성능 하락이 발생했습니다. (3.035k -> 1.227k token/sec)
- Generate 단계 (토큰 생성): 동일 모델에서 **-34.39%**의 성능 하락이 관찰되었습니다.
- 전체 기하평균(Geomean): Flash Attention 적용 시 성능이 약 41.80% 하락했습니다.
2. 원인 추론
Flash Attention이 왜 Gemma 4에서만 유독 느려졌을까요? 몇 가지 기술적 가능성이 있습니다.
- 커널 비호환성: Gemma 4의 아키텍처(Head Dimension, GQA 설정 등)가 현재 구현된 Flash Attention 커널의 최적화 경로와 맞지 않아 Fallback이 발생했을 가능성이 있습니다.
- 메모리 오버헤드: 특정 하드웨어 환경에서 Flash Attention의 타일링(Tiling) 전략이 Gemma 4의 텐서 레이아웃과 충돌하여 캐시 미스를 유발했을 수 있습니다.
3. 교훈: 데이터 기반의 Revert
엔지니어는 새로운 기술을 도입하고 싶어 하는 본능이 있습니다. 하지만 실제 운영 환경에서의 성능 지표가 가설과 다를 때, 과감하게 이전 상태로 되돌리는(Revert) 결정은 매우 중요합니다. Ollama 팀은 벤치마크를 통해 no-flash 상태가 기존 베이스라인 대비 약 1.67%의 성능 향상을 보인다는 점을 확인하고, 안정적인 사용자 경험을 위해 기능을 비활성화했습니다.
마무리하며
이번 PR은 "최신 기법이 항상 정답은 아니다"라는 중요한 교훈을 줍니다. 특히 하드웨어 가속과 밀접한 관련이 있는 LLM 추론 분야에서는 모델 아키텍처마다 최적의 경로가 다를 수 있습니다. 철저한 벤치마크와 데이터에 기반한 의사결정이야말로 시니어 엔지니어가 갖춰야 할 핵심 역량임을 다시 한번 확인시켜준 사례였습니다.
참고 자료
⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [sglang] SGLang DeepSeekV3 Router GEMM 최적화: FlashInfer 커널 도입 및 벤치마킹
- 현재글 : [ollama] Ollama의 Gemma 4 모델 Flash Attention 비활성화: 성능 회귀(Regression) 해결 사례
- 다음글 [sglang] SGLang에서 FA4(FlashAttention 4)와 Speculative Decoding의 완벽한 결합
댓글