본문 바로가기

Data Science/ML & DL

[gemma3모델 사용하기] 멀티모달 vs 텍스트 only


Gemma3ForConditionalGenerationAutoProcessor를 > 멀티모달 사용(이미지 + 텍스트)을 염두에 둔 구성

면 내가 위에서 보여준 코드는 텍스트 전용 모델 로딩은 AutoModelforCausalLM 사용

 

 

TIP. 만약 huggingface에서 접근 권한이 필요한 모델이라면

hugging face웹사이트에서 모델 접근신청 > 토큰 다운 > 로그인코드에 토큰 입력먼저 해줘야함

(gemma 3 Model은 권한 신청 필요)

 

로그인 코드

import huggingface_hub
huggingface_hub.login()
# 위 코드 실행 후 나오는 창에 토큰 입력

# MY_HF_TOKEN = "내 토큰"
from huggingface_hub import login
login(token="내 토큰")  # Hugging Face의 개인 액세스 토큰

 

 

멀티모달용 코드 

[방법1]Auto~ 코드로 로드하는 방법

from transformers import AutoProcessor, Gemma3ForConditionalGeneration
from PIL import Image
import requests
import torch

model_id = "google/gemma-3-27b-it"

model = Gemma3ForConditionalGeneration.from_pretrained(
    model_id, device_map="auto"
).eval()

processor = AutoProcessor.from_pretrained(model_id)
  • Gemma3ForConditionalGeneration: 이미지+텍스트를 입력받아 텍스트를 생성하는 구조 (Image-to-Text, Text-to-Text 가능)
  • AutoProcessor: 이미지와 텍스트를 동시에 처리 가능한 멀티모달 전처리기

즉, 이 코드는 image-text-to-text 태스크나 텍스트+이미지 조건부 생성에 최적화된 구조

 

[방법2] Pipeline으로 편하게 로딩하는법

# Use a pipeline as a high-level helper
from transformers import pipeline

messages = [
    {"role": "user", "content": "Who are you?"},
]
pipe = pipeline("image-text-to-text", model="google/gemma-3-27b-it")
pipe(messages)

 

 

 

텍스트-only 코드

[방법1]Auto~ 코드로 로드하는 방법

from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "google/gemma-3-27b-it"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto").eval()
# 프롬프트 구성
prompt = "Explain the concept of artificial intelligence."
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

# 텍스트 생성
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

 

 

 

[방법2] Pipeline으로 편하게 로딩하는법

from transformers import pipeline

# 텍스트 생성용 파이프라인으로 전환
pipe = pipeline("text-generation", model="google/gemma-3-27b-it")

# 프롬프트 입력
prompt = "What is the meaning of life?"
output = pipe(prompt, max_new_tokens=50, do_sample=True)

print(output[0]['generated_text'])

 

 

 

멀티모달용, 텍스트 생성용 비교

항목 멀티모달용 텍스트 생성 전용
  Gemma3ForConditionalGeneration AutoModelForCausalLM
사용 목적 이미지+텍스트 → 텍스트 생성 텍스트 → 텍스트 생성
전처리기 AutoProcessor (이미지 포함 가능) AutoTokenizer (텍스트 전용)
모델 클래스 Gemma3ForConditionalGeneration AutoModelForCausalLM
입력 타입 이미지 + 텍스트 텍스트만
API 지원 태스크 image-to-text, image-text-to-text, text-generation 등 text-generation

 

 

pipeline() vs 직접 로딩 비교

항목 pipeline() 사용 AutoTokenizer + AutoModel 직접 사용
장점 - 빠르고 간편함
- 기본 설정 자동으로 구성됨
- 세밀한 제어 가능
- 고급 사용자에게 유리
단점 - 설정 제한적
- 고급 제어 어려움
- 코드 길어짐
- 초보자에겐 다소 복잡
사용 예시 - 간단한 텍스트 생성
- 데모용
- API 서버 구축 전 빠른 테스트
- 커스텀 파라미터 조정
- 프롬프트 포맷 제어
- 채팅형 구조, beam search 등 fine-grain 제어
속도/성능 거의 동일 (내부적으로 같은 모델 사용) 동일하지만 더 유연하게 최적화 가능
추천 대상 초중급 / 빠른 실험자 중고급 / 서비스 구축, 세밀한 튜닝 필요할 때

 

 

정리하면

✳️ 이미지 입력은 안 쓸 거라면, 더 가볍고 최적화된 구조인 AutoModelForCausalLM + AutoTokenizer 조합을 쓰는 게 좋음
✳️ 이미지를 나중에 쓸 여지도 있다면, 지금 코드도 충분히 유효해. 단, 텍스트-only generation에선 약간의 오버헤드가 생길 수 있음