Gemma 3n 완전 활용 가이드 - 2B/4B 멀티모달 모델 실전 배포까지
Google의 Gemma 3n은 2B/4B 파라미터로 멀티모달 기능을 제공하는 경량 AI 모델입니다. 선택적 파라미터 활성화 기술을 통해 모바일 환경에서도 높은 성능을 발휘할 수 있어, 온디바이스 AI 구현에 최적화되어 있습니다.
이 가이드에서는 Gemma 3n 모델 선택부터 실전 배포까지 개발자가 알아야 할 모든 것을 다룹니다.
Gemma 3n 라인업 완전 분석
모델 선택 가이드
모델 이름 | 파라미터(효과치) | 튜닝 여부 | 특징 | 대표 용도 |
---|---|---|---|---|
google/gemma-3n-E2B |
2B | Base | 가장 가볍고 빠름 | 자체 파인튜닝용(엣지·모바일 추론, 작은 연구 실험) |
google/gemma-3n-E2B-it |
2B | Instruct | 2B 속도 + 대화식 사용 준비 완료 | 챗봇, 간단한 이미지 질문답변, 앱 내 어시스턴트 |
google/gemma-3n-E4B |
4B | Base | 더 높은 정확도·맥락 이해 | 고품질 파인튜닝(문서 요약, 특화 서비스 백엔드) |
google/gemma-3n-E4B-it |
4B | Instruct | 4B 성능 + 즉시 대화 가능 | 고성능 멀티모달 챗봇, 리서치 프로토타입 |
E2B/E4B는 Selective Parameter Activation 덕분에 실제로는 더 큰 모델이지만 2B·4B만 활성화해도 동작합니다. 덕분에 모바일·노트북에서도 원활하게 실행할 수 있습니다.
-it(instruction-tuned)는 추가로 “사람 말을 따라 하는 법”을 학습해 바로 ChatGPT처럼 대화할 수 있게 만들어 둔 버전입니다.
Base vs Instruct 선택 기준
구분 | Base(미가공) | Instruct(완제품) |
---|---|---|
기본 동작 | “다음 토큰 예측” 중심, 거친 출력 | 질문하면 친절히 답변, 포맷·안전성 정제 |
주 용도 | • 내 데이터로 파인튜닝 • 특수 태스크(분류, 요약 등) 백엔드 컴포넌트 |
• 바로 쓰는 챗봇/비서 • 프로토타입, PoC, 데모 |
장점 | • 자유도 높음 • 작은 데이터로 재학습 용이 |
• 학습 없이도 바로 사용 • 거부·안전 필터 포함 |
주의점 | • 프롬프트만으로는 말 안 들을 수 있음 • 안전필터 없음 |
• 출력이 과하게 정중할 수도 있음 • 세밀한 제어엔 한계 |
개발 환경 구축하기
huggingface-gemma-recipes 활용
Hugging Face에서 제공하는 huggingface-gemma-recipes
리포지토리는 Gemma 3n 모델을 위한 원스톱 스타터 킷입니다.
git clone https://github.com/huggingface/huggingface-gemma-recipes.git
cd huggingface-gemma-recipes
pip install -r requirements.txt
리포지토리 구조
경로 | 내용 | 중요도 |
---|---|---|
README.md | 설치, 단일 함수 추론 데모, 모달리티 예제, Colab 튜너 링크 | 로컬 테스트 가장 빠른 방법 |
notebooks/ | T4에서 Gemma 3n 파인튜닝, 이미지 파인튜닝, 오디오 파인튜닝, 이미지 TRL 파인튜닝 | 바로 실행 가능한 레시피 |
scripts/ | 노트북을 미러링하는 CLI 래퍼 | CI나 클라우드 트레이너에서 사용 |
requirements.txt | transformers>=4.51 , timm , trl , peft , bitsandbytes |
모든 레시피를 동일한 의존성으로 유지 |
빠른 시작 코드
from transformers import AutoProcessor, AutoModelForImageTextToText
model_id = "google/gemma-3n-e4b-it" # 또는 -e2b-it for 2B
proc = AutoProcessor.from_pretrained(model_id)
model = AutoModelForImageTextToText.from_pretrained(model_id).to("cuda")
def chat(messages):
inputs = proc.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_tensors="pt"
).to(model.device)
out = model.generate(**inputs, max_new_tokens=32)
return proc.decode(out[0], skip_special_tokens=True)
# 사용 예시
messages = [{"role": "user", "content": "프랑스의 수도는 어디인가요?"}]
print(chat(messages))
멀티모달 프롬프팅 팁
- Gemma 3n(Transformers ≥ 4.53)에서는
<image_soft_token>
을 사용합니다. proc.apply_chat_template(...)
을 사용하여 모델이 튜닝된 role tags를 볼 수 있도록 합니다.- 고해상도 이미지의 경우
do_pan_and_scan=True
를 활성화하여 대형 이미지를 자동으로 자릅니다.
파인튜닝 레시피
노트북별 특징
노트북 | GPU 요구사항 | 방법 | 하이라이트 |
---|---|---|---|
T4_SFT.ipynb | 16GB T4 | LoRA/QLoRA | 무료 Colab에서 텍스트 전용 또는 혼합 채팅 튜닝 |
vision_sft.ipynb | 4×A100 | LoRA | 새로운 비전 스킬 추가; mm_tokens_per_image 설정 방법 |
audio_sft.ipynb | 1×A100 | LoRA | 음성 청크로 전사 및 지시 튜닝 |
vision_TRL.ipynb | 1×T4 | TRL+LoRA | 이미지에 대한 RLHF 스타일 보상 튜닝 |
공통 훈련 루프 패턴
from peft import LoraConfig, get_peft_model
peft_cfg = LoraConfig(
r=16,
lora_alpha=32,
target_modules="q_proj,k_proj,v_proj"
)
model = get_peft_model(model, peft_cfg) # 훈련 가능한 어댑터 추가
trainer = SFTTrainer(model=model, dataset=ds, ...)
trainer.train()
trainer.push_to_hub("my-gemma-3n-custom")
프로덕션 배포: GGUF 활용
Unsloth GGUF 패키지
Unsloth가 공개한 gemma-3n-E4B-it-GGUF
패키지는 다양한 환경에서 바로 실행할 수 있는 올인원 배포판입니다.
핵심 스펙
- 모델 계열: Gemma 3n E4B-it (4B 활성 파라미터, 현재 텍스트 입력만 지원)
- 컨텍스트: 32,000 토큰 (장문 PDF 한 권도 처리 가능)
- 채팅 템플릿:
<bos><start_of_turn>user\n…<end_of_turn>\n<start_of_turn>model\n
- 권장 설정:
temperature 1.0
,top_k 64
,top_p 0.95
양자화 옵션별 가이드
양자화 | 파일 크기 | RAM 요구량 | 추천 환경 |
---|---|---|---|
Q4_K_M | 4.2GB | ≈8.5GB | 권장 - 24GB VRAM 이하 GPU |
Q5_K_M | 4.9GB | ≈10GB | 균형형 (정확도 우선) |
Q6_K | 5.7GB | ≈12GB | 6-bit, 균형형 (속도↑) |
Q8_0 | 7.35GB | ≈16GB | 8-bit, 정확도 손실 미미 |
Q3_K_M | 3.2GB | ≈6GB | 라즈베리 Pi급 환경 |
UD-Q4_K_XL | 4.8GB | ≈9GB | Unsloth Dynamic 2.0 (층별 자동 조정) |
실행 방법
Ollama (가장 간단)
ollama run hf.co/unsloth/gemma-3n-E4B-it-GGUF:Q4_K_XL
llama.cpp
./main -m gemma-3n-E4B-it-Q4_K_M.gguf \
-ngl 32 \
-c 32000 \
--temp 1.0 --top-k 64 --top-p 0.95
Transformers
from transformers import pipeline
pipe = pipeline(
"image-text-to-text",
model="unsloth/gemma-3n-E4B-it-GGUF",
model_kwargs={"low_cpu_mem_usage": True}
)
prompt = pipe.tokenizer.apply_chat_template(
[{"role": "user", "content": "안녕 Gemma!"}],
add_generation_prompt=True
)
result = pipe(prompt, max_new_tokens=64)
print(result["generated_text"])
실전 활용 시나리오
용도별 모델 선택
- 앱에 바로 집어넣을 대화형 AI
- 채팅 지원, 이미지 질의응답, 간단 Q&A
- → E2B-it (저전력 기기) 또는 E4B-it (정확도 우선)
- 사내/도메인 특화 모델 개발
- 보험 약관 요약, 의료 리포트 분석, 코드 자동화
- → E2B(메모리 제한) 또는 E4B(성능 중시)를 LoRA·QLoRA로 파인튜닝
- 모바일 앱 오프라인 추론
- → 먼저
E2B
로 파인튜닝 후 MLX·Llama.cpp GGUF로 양자화
- → 먼저
- 서버 사이드 고품질 챗봇
- →
E4B-it
을 vLLM·Transformers에 올려 서비스, 필요시 RAG 추가
- →
프레임워크 지원 현황
프레임워크 | 지원 상태 | 비고 |
---|---|---|
Transformers ≥4.50 | ✅ | AutoProcessor + Gemma3ForConditionalGeneration |
vLLM 0.4+ | ✅ | 서버 대규모 배치 추론 |
MLX 0.8+ (Apple) | ✅ | iPhone/Mac 온디바이스 |
Llama.cpp / GGUF | ✅ | int8·int4 양자화, Raspberry Pi/Jetson 등 |
실전 워크플로우
엔드투엔드 개발 과정
- 로컬 드라이런: README 헬퍼로 프롬프트 검증
- 노트북 선택: 모달리티에 맞는 노트북을 Colab에 포크, HF 토큰 설정
- 데이터셋 교체: 도메인별 데이터셋 로더로 교체
- 어댑터 푸시: Hub에 어댑터를 푸시하고 동일한
chat()
헬퍼로 재테스트 - 프로덕션 배포: GGUF로 익스포트하거나 vLLM으로 로드
실전 팁
- Vision·Audio 입력은 아직 GGUF 컴파일 미지원 → 텍스트 전용 스킬부터 구축
- 컨텍스트 32K 이상 요청 시 VRAM 급증 → Q5 이하 양자화 권장
- 템플릿 오류로 EOS 토큰이 빠지면 답변 중단 →
<end_of_turn>
뒤 개행 유지 - Dynamic 2.0 양자화(UD-)는 고정 Q4_K 대비 정확도 10% 향상
마무리
Gemma 3n은 32K 컨텍스트·4B 성능을 8GB RAM에서도 돌릴 수 있는 멀티모달 모델로, 채팅용 즉시 사용과 LoRA 즉시 튜닝이 모두 가능합니다.
핵심 선택 기준:
- “-it는 지금 바로 대화, Base는 내 입맛대로 재단”
- 2B는 경량화, 4B는 고정확도
- GGUF는 배포 최적화, Transformers는 개발 유연성
이제 원하는 양자화 파일을 다운로드하고 위 예시 명령만 복사하면 바로 로컬 챗봇을 실행할 수 있습니다. Gemma 3n으로 더 스마트한 AI 애플리케이션을 구축해보세요!