서론: 왜 기존 LLM의 느린 생성 속도를 넘어서야 하는가?
LLM(Large Language Model)을 실제 서비스에 배포하다 보면 메모리 대역폭(Memory Bandwidth) 이라는 냉혹한 벽에 부딪히게 됩니다. 자회귀(Autoregressive) 모델은 한 번에 한 토큰씩 생성하며 매 스텝마다 모델 가중치를 메모리에서 불러와야 하기 때문에, GPU의 텐서 코어(Tensor Core) 활용률이 극도로 낮아집니다. 특히 로컬 서빙 환경에서는 GPU가 놀고 있는 시간이 많아지죠.
구글이 발표한 DiffusionGemma는 이 문제를 정면돌파합니다. Gemma 4 백본 위에 구축된 이 실험적 모델은 연산 집약적(Compute-bound) 병렬 생성 방식을 채택하여, 메모리 대역폭 병목을 연산 병목으로 전환합니다. 그 결과, GPU에서 최대 4배 빠른 토큰 생성 속도(NVIDIA GeForce RTX 5090 기준 초당 700+ 토큰, 단일 H100 기준 1000+ 토큰)를 달성했습니다.
이 글에서는 DiffusionGemma의 핵심 아키텍처, 실제 동작 방식, 그리고 Sudoku 풀이 예제를 통해 어떻게 파인튜닝하고 배포할 수 있는지 상세히 살펴보겠습니다. 또한 [국내 클라우드 환경에서의 적용 맥락]도 함께 고민해 봅니다.
참고: 이 글은 구글 공식 블로그의 DiffusionGemma 개발자 가이드를 기반으로 재구성했습니다.

본론 1: DiffusionGemma 아키텍처 — Uniform State Diffusion과 Block Autoregressive Denoising
1.1 Uniform State Diffusion: 무작위 토큰에서 시작하는 병렬 생성
전통적인 자회귀 모델은 "왼쪽에서 오른쪽"으로 순차적으로 토큰을 예측합니다. 반면 DiffusionGemma는 256개 토큰 캔버스(Canvas) 를 한 번에 생성하고, 이를 여러 번의 Denoising(잡음 제거) 과정을 통해 정제합니다.
- 초기화: 무작위 플레이스홀더(랜덤 토큰)로 채워진 256토큰 길이의 캔버스를 생성합니다.
- 병렬 Denoising: 각 Denoising 스텝에서 모든 토큰이 서로를 참조하며 확신도(Confidence)가 높은 토큰이 주변 위치를 점차 확정해 나갑니다.
- 반복 정제: 여러 스텝에 걸쳐 전체 시퀀스가 선명해집니다.
이 방식의 핵심은 양방향 어텐션(Bidirectional Attention) 입니다. 캔버스 상의 모든 토큰이 서로를 볼 수 있기 때문에, Sudoku처럼 복잡한 제약 조건이 있는 문제에서 전역 맥락(Global Context) 을 한 번에 파악할 수 있습니다.
1.2 Block Autoregressive Diffusion: 가변 길이 생성을 위한 하이브리드 방식
256토큰 이상의 긴 시퀀스를 생성해야 할 때는 어떻게 할까요? DiffusionGemma는 Block Autoregressive 방식을 사용합니다.
- 첫 번째 256토큰 블록이 완전히 Denoising되면, 해당 블록을 KV 캐시에 커밋합니다.
- 이전 컨텍스트를 조건으로 다음 256토큰 블록을 새 캔버스에 초기화합니다.
- 이 과정을 반복하여 긴 시퀀스를 안정적으로 생성합니다.
이 하이브리드 접근법은 블록 내 병렬성(Parallel) 과 블록 간 순차 안정성(Autoregressive) 을 동시에 확보합니다.
1.3 Serving: vLLM 통합으로 간편한 배포
DiffusionGemma는 vLLM 프레임워크에 통합되어 있습니다. 따라서 vLLM의 OpenAI 호환 로컬 서버를 통해 바로 서빙할 수 있습니다. Google Cloud Model Garden이나 NVIDIA NIM을 통해서도 배포 가능하며, RTX 4090/5090 같은 컨슈머 GPU부터 H100, Blackwell 서버까지 폭넓은 하드웨어 스택을 지원합니다.
# vLLM을 사용한 DiffusionGemma 서빙 예제 (파이썬)
from vllm import LLM, SamplingParams
# 모델 로드 (DiffusionGemma 26B MoE, 활성 파라미터 3.8B)
llm = LLM(model="google/diffusiongemma-26b", tensor_parallel_size=1)
# 샘플링 파라미터 설정 (Denoising 스텝 수 등)
sampling_params = SamplingParams(
temperature=0.7,
max_tokens=512, # 256 토큰 * 2 블록
# DiffusionGemma 전용: denoising_steps 파라미터 (vLLM 내부 처리)
)
# 프롬프트 입력
prompt = "Solve this Sudoku: ..53.....8......2..7..1.5..4....53...1..7...6..32...8..6.5....9..4....3......97.."
# 생성 실행
outputs = llm.generate([prompt], sampling_params)
for output in outputs:
print(output.outputs[0].text)
💡 국내 적용 팁: 한국 클라우드 환경(GCP, AWS, NCP)에서 DiffusionGemma를 사용할 때는 GPU 인스턴스의 메모리 대역폭을 반드시 확인하세요. RTX 5090급 이상의 GPU가 아니라면 초당 토큰 수가 기대보다 낮을 수 있습니다. 또한 vLLM 배포 시
tensor_parallel_size를 GPU 수에 맞게 조정해야 합니다.

본론 2: Sudoku 풀이로 보는 DiffusionGemma의 진짜 강점
2.1 Sudoku: 왜 Diffusion 모델에 적합한가?
Sudoku는 다중 변수 제약 조건(Multi-variable Constraints) 을 가진 전형적인 문제입니다. 81자리 문자열(빈 칸은 마침표)로 표현되는 Sudoku는 가로, 세로, 3x3 박스의 모든 숫자가 중복되지 않아야 합니다.
자회귀 모델은 왼쪽에서 오른쪽으로만 생성하기 때문에, 첫 번째 칸의 숫자가 마지막 칸의 제약 조건에 영향을 준다는 사실을 고려하지 못합니다. 하지만 DiffusionGemma는 양방향 어텐션을 통해 모든 칸을 동시에 평가하고, Re-Noising 메커니즘으로 오류를 스스로 수정합니다.
2.2 Hackable Diffusion을 활용한 파인튜닝 레시피
구글은 DiffusionGemma의 커스터마이징을 위해 Hackable Diffusion이라는 JAX 기반 연구 툴박스를 공개했습니다. 다음은 Sudoku 데이터셋으로 SFT(Supervised Fine-Tuning)하는 간단한 레시피입니다.
# Hackable Diffusion을 사용한 SFT 파인튜닝 예제 (JAX)
import jax
import jax.numpy as jnp
from hackable_diffusion import DiffusionGemmaModel, SFTTrainer
# 모델 초기화 (DiffusionGemma 26B)
model = DiffusionGemmaModel.from_pretrained("google/diffusiongemma-26b")
# Sudoku 데이터셋 로드 (예: 10만 개의 퍼즐-정답 쌍)
train_dataset = load_sudoku_dataset("path/to/sudoku_dataset") # 가상 함수
# SFT 트레이너 설정
trainer = SFTTrainer(
model=model,
train_dataset=train_dataset,
learning_rate=1e-4,
num_denoising_steps=48, # 기본 Denoising 스텝
batch_size=8,
)
# 학습 실행 (약 1시간 소요, 단일 H100 기준)
trainer.train(num_epochs=3)
# 학습된 어댑터 저장
model.save_adapter("sudoku_adapter")
2.3 성능 비교: Base 모델 vs SFT 모델
| 항목 | Base DiffusionGemma | SFT Fine-tuned DiffusionGemma |
|---|---|---|
| Sudoku 정확도 | ~0% | 80% |
| 평균 Denoising 스텝 수 | 48 | 12 (조기 종료) |
| 생성 시간 (1퍼즐) | ~2초 | ~0.5초 |
SFT 모델은 조기 종료(Early Stopping) 가 가능해져서 추론 비용을 대폭 줄였습니다. 확신도가 높으면 더 이상 Denoising을 진행하지 않고 결과를 반환합니다.
2.4 주의사항 및 한계
- 실험적 모델: DiffusionGemma는 아직 연구 단계입니다. 프로덕션 환경에 바로 적용하기보다는 PoC 용도로 사용하는 것이 좋습니다.
- VRAM 요구량: 26B MoE 모델이지만 양자화(Quantization) 시 18GB VRAM에서 동작합니다. 하지만 기본 FP16 추론은 더 많은 메모리가 필요합니다.
- 긴 시퀀스 생성: Block Autoregressive 방식이지만, 블록 경계에서의 일관성 문제가 발생할 수 있습니다. 특히 한국어처럼 교착어는 블록 단위 분할이 까다로울 수 있습니다.

결론: DiffusionGemma가 가져올 병렬 생성의 미래
DiffusionGemma는 기존 자회귀 LLM의 근본적인 한계인 메모리 대역폭 병목을 연산 병목으로 전환하여, GPU 리소스를 훨씬 효율적으로 사용할 수 있는 길을 열었습니다. 특히 Sudoku와 같은 비순차적 문제에서 탁월한 성능을 보여주었고, SFT 파인튜닝을 통해 정확도를 80%까지 끌어올리면서 추론 비용도 절감했습니다.
실무에 적용할 때 고려할 점:
- 하드웨어 선택: RTX 5090, H100 이상의 GPU에서 최대 성능을 발휘합니다.
- 배포 전략: vLLM 통합으로 간단히 서빙할 수 있지만, 블록 크기(256토큰)를 고려한 프롬프트 설계가 필요합니다.
- 파인튜닝: Hackable Diffusion 툴박스를 사용하면 도메인 특화 모델을 쉽게 만들 수 있습니다.
다음 단계 학습 방향:
- Diffusion 모델의 기본 원리: "Denoising Diffusion Probabilistic Models (DDPM)" 논문 읽기
- JAX 기반 딥러닝: Hackable Diffusion 툴박스의 코드 분석
- 병렬 생성 응용: 코드 생성, 문장 교정, 데이터 증강 등 다양한 태스크에 적용해보기
함께 보면 좋은 글: