23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
최근 Gemma 3n 모델이 발표되었습니다.
이번 모델의 특징 중 하나는 멀티모달에 대한 부분입니다.
텍스트, 이미지 뿐만 아니라 오디오도 입력받을 수 있게 되었습니다.
이미 이미지나 오디오를 입력 받아서 처리하는 모델은 많지 않냐고요?
중요한건 Gemma 3n은 On-device 모델이라는 겁니다.
인터넷에 연결되어 있지 않아도, 민감한 정보를 서버에 올리지 않아도, 서버 운영에 대한 추가비용 없이도 사용할 수 있습니다.
다른 특징으로는 파라미터 최적화와 성능향상을 들 수 있습니다.
LMArena의 Elo Score(상대적인 비교평가 지수)에서도 다른 거대모델들과 비교해서도 상당히 높다는 것을 확인할 수 있습니다.
Gemma 3n은 E2B 모델과 E4B 모델이 존재하는데 각각 5B, 8B 파라미터를 2B, 4B 모델과 유사한 메모리 사용량으로 실행 가능합니다.
그 밖에도 아래와 같은 특징들을 가지고 있습니다.
MatFormer 아키텍처
마트료시카(Matryoshika) 인형처럼 큰 모델 안에 완전한 작은 모델을 갖추고 있음.
E4B 모델 학습 과정에서 E2B 모델이 동시에 최적화됨. 일부 레이어를 선택적으로 건너뛰어 최적의 모델 크기를 도출할 수 있음
레이어별 임베딩 (PLE)
파라미터의 상당 부분은 CPU에서 로드되고 핵심 트랜스포머 가중치만 GPU/TPU에 로드됨
KV 캐시 공유
KV(Key-Value) 캐시 공유 기능을 도입하여 긴 시퀀스 입력을 이전보다 더 빠르게 처리함
이제 한번 실행해보도록 하죠.
참고로 아래 코드는 Macbook Pro M3에서 jupyter notebook을 통해 실행되었습니다.
사전 준비 작업으로 pytorch, transformers와 pytorch image models 라이브러리를 최신버전으로 설치해주셔야 합니다.
# Pytorch 설치 (Mac용)
%pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
# 또는 (2.8.0버전 정식 릴리즈 후)
# %pip install "torch>=2.8.0" torchvision torchaudio
# Transformers 설치
%pip install "transformers>=4.53.0"
# PyTorch Image Models 설치
%pip install "timm>=1.0.16"전처리기와 모델을 불러옵니다.
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
GEMMA_MODEL_ID = "google/gemma-3n-E2B-it" # 또는 "google/gemma-3n-E4B-it"
processor = AutoProcessor.from_pretrained(GEMMA_MODEL_ID, device_map="auto")
model = AutoModelForImageTextToText.from_pretrained(
GEMMA_MODEL_ID, torch_dtype="auto", device_map="auto")이제 오디오를 입력으로 받아서 처리해 보겠습니다.
%%time
messages = [
{
"role": "user",
"content": [
{"type": "audio", "audio": "https://ai.google.dev/gemma/docs/audio/roses-are.wav"}, # 오디오 URL 또는 Path
{"type": "text", "text": "Transcribe this audio and complete the statement"}, # 프롬프트 입력
]
}
]
input_ids = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True, return_dict=True,
return_tensors="pt",
)
input_ids = input_ids.to(model.device, dtype=model.dtype)
outputs = model.generate(**input_ids, max_new_tokens=64) # 최대 생성 토큰 수
text = processor.batch_decode(
outputs,
skip_special_tokens=False,
clean_up_tokenization_spaces=False
)
print(text[0])아래는 출력 결과입니다. 예제는 영어로된 음성을 입력했는데 한국어 음성을 넣어도 결과가 잘 나옵니다. 하지만 영어보다는 인식하는 성능이 쫌 떨어지는 것 같아요.
<bos><start_of_turn>user
<start_of_audio><audio_soft_token><audio_soft_token><audio_soft_token>
...
<audio_soft_token><audio_soft_token><audio_soft_token><end_of_audio>
Transcribe this audio and complete the statement<end_of_turn>
<start_of_turn>model
Roses are red, violets are blue.
<end_of_turn>
CPU times: user 1.54 s, sys: 600 ms, total: 2.14 s
Wall time: 3.26 s다음은 이미지를 입력해보겠습니다.
%%time
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": "https://ai.google.dev/gemma/docs/capabilities/vision/images/surprise.png"}, # 이미지 URL 또는 Path
{"type": "text", "text": "이 사진에 제목을 달아줘"}, # 프롬프트 입력
]
}
]
input_ids = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True, return_dict=True,
return_tensors="pt",
)
input_ids = input_ids.to(model.device, dtype=model.dtype)
outputs = model.generate(**input_ids, max_new_tokens=128) # 최대 생성 토큰 수
text = processor.batch_decode(
outputs,
skip_special_tokens=False,
clean_up_tokenization_spaces=False
)
print(text[0])이미지도 오디오 입력과 거의 동일하고 messages 정의 부분만 수정해주시면 됩니다.
입력된 이미지와 결과입니다. 다양한 스타일로 제목을 달아주었는데요. 어떠신가요?
max_new_tokens 값을 수정하여 출력 길이를 조정할 수 있습니다.

<bos><start_of_turn>user
<start_of_image><image_soft_token><image_soft_token><image_soft_token>
...
<image_soft_token><image_soft_token><image_soft_token><end_of_image>
이 사진에 제목을 달아줘<end_of_turn>
<start_of_turn>model
다음은 사진에 대한 몇 가지 제목 제안입니다.
**간결하고 직접적인 제목:**
* 고양이
* 귀여운 고양이
* 큰 눈을 가진 고양이
**더 표현적인 제목:**
* 궁금한 고양이
* 반짝이는 눈의 고양이
* 카메라를 응시하는 고양이
* 포즈를 취하는 고양이
**재미있는 제목:**
* 깜짝 놀란 고양이
* 눈을 크게 뜨고 빤히 보는 고양이
어떤 제목이 가장 마음에 드시나요?<end_of_turn>
CPU times: user 7.98 s, sys: 1.39 s, total: 9.36 s
Wall time: 11.2 s오디오와 이미지를 입력으로 받을 수 있게 되면서 더욱 다양한 방식으로 활용될 수 있을겁니다.
구글에 있는 예제들을 보면 아래와 같은 것들도 가능하죠.
이미지에 대한 질문 답변하기
두 개의 이미지를 비교하기
이미지에 있는 물체들 인식하기
이미지의 분위기 설명하기
비디오 분석하기 (이미지 리스트와 오디오를 입력)
여러 이미지를 입력하고 시나리오 작성하기
흥미롭게 읽으셨나요? 상상력을 발휘해서 다양한 분야에 활용해보시면 좋겠습니다.
읽어주셔서 감사드립니다.
Introducing Gemma 3n: The developer guide - https://developers.googleblog.com/en/introducing-gemma-3n-developer-guide/
Gemma 3n model - https://deepmind.google/models/gemma/gemma-3n/
Gemma 3n model overview - https://ai.google.dev/gemma/docs/gemma-3n
Audio data processing - https://ai.google.dev/gemma/docs/capabilities/audio
Visual data processing - https://ai.google.dev/gemma/docs/capabilities/vision/prompt-with-visual-data
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.