้กน็›ฎๆ–‡ไปถๅคน

ๆ–‡ไปถ
wehub-resource-sync e06fe8e8c6
Secret Leaks / trufflehog (push) Failing after 1s
Build documentation / build (push) Failing after 1s
Build documentation / build_other_lang (push) Failing after 0s
CodeQL Security Analysis / CodeQL Analysis (push) Failing after 0s
PR CI / pr-ci (push) Failing after 1s
Slow tests on important models (on Push - A10) / Get all modified files (push) Failing after 1s
Slow tests on important models (on Push - A10) / Model CI (push) Has been skipped
Self-hosted runner (benchmark) / Benchmark (aws-g5-4xlarge-cache) (push) Has been cancelled
New model PR merged notification / Notify new model (push) Has been cancelled
Update Transformers metadata / build_and_package (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:57:37 +08:00

7.8 KiB

์ด ๋ชจ๋ธ์€ 2025๋…„ 5์›” 20์ผ์— ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ, 2025๋…„ 6์›” 26์ผ์— Hugging Face Transformers์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

PyTorch SDPA

Gemma3ngemma3n

๊ฐœ์š”overview

Gemma3n์€ ์‚ฌ์ „ ํ›ˆ๋ จ๋œ ๋ฒ„์ „๊ณผ ๋ช…๋ น์–ด ๊ธฐ๋ฐ˜ ๋ฏธ์„ธ์กฐ์ • ๋ฒ„์ „์ด ์ œ๊ณต๋˜๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ๋ชจ๋ธ์ด๋ฉฐ, ๋ชจ๋ธ ํฌ๊ธฐ๋Š” E4B์™€ E2B ๋‘ ๊ฐ€์ง€๋กœ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜๋Š” ์ด์ „ Gemma ๋ฒ„์ „๊ณผ ๋งŽ์€ ๋ถ€๋ถ„์„ ๊ณต์œ ํ•˜์ง€๋งŒ ์ด๋ฒˆ ๋ฒ„์ „์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ธฐ๋ฒ•์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ๊ต์ฐจ ์—…๋ฐ์ดํŠธ(AltUp), ํ•™์Šต๋œ ์ฆ๊ฐ• ์ž”์—ฌ ๋ ˆ์ด์–ด(LAuReL), MatFormer, ๋ ˆ์ด์–ด๋ณ„ ์ž„๋ฒ ๋”ฉ, ํ†ต๊ณ„์  Top-k๋ฅผ ์ด์šฉํ•œ ํ™œ์„ฑํ™” ํฌ์†Œ์„ฑ(SPARk-Transformer), KV ์บ์‹œ ๊ณต์œ  ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Gemma 3n์€ Gemma 3์™€ ์œ ์‚ฌํ•œ ์–ดํ…์…˜ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ ์…€ํ”„ ์–ดํ…์…˜ ๋ ˆ์ด์–ด 1๊ฐœ๋งˆ๋‹ค ๋กœ์ปฌ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์…€ํ”„ ์–ดํ…์…˜ ๋ ˆ์ด์–ด 4๊ฐœ๋ฅผ ๊ต์ฐจ๋กœ ๋ฐฐ์น˜ํ•˜๋ฉฐ, ์ตœ๋Œ€ ์ปจํ…์ŠคํŠธ ๊ธธ์ด๋Š” 32k ํ† ํฐ๊นŒ์ง€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋น„์ „ ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ์—์„œ๋Š” MobileNet v5๋ฅผ ๋น„์ „ ์ธ์ฝ”๋”๋กœ ๋„์ž…ํ•˜์—ฌ ๊ธฐ๋ณธ ํ•ด์ƒ๋„๋ฅผ 768x768 ํ”ฝ์…€๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜ค๋””์˜ค ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ์—์„œ๋Š” Universal Speech Model(USM) ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กญ๊ฒŒ ํ•™์Šต๋œ ์˜ค๋””์˜ค ์ธ์ฝ”๋”๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์–ด ๊ธฐ๋ฐ˜ ๋ฏธ์„ธ์กฐ์ • ๋ฒ„์ „์€ ์ง€์‹ ์ฆ๋ฅ˜์™€ ๊ฐ•ํ™” ํ•™์Šต์„ ํ†ตํ•ด ํ›„์ฒ˜๋ฆฌ ํ•™์Šต ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Gemma 3n์˜ ์›๋ณธ ์ฒดํฌํฌ์ธํŠธ๋Š” [Gemma 3n][gemma3n-collection] ์ถœ์‹œ ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tip

์˜ค๋ฅธ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”์— ์žˆ๋Š” Gemma 3n ๋ชจ๋ธ์„ ํด๋ฆญํ•˜๋ฉด, Gemma๋ฅผ ๋‹ค์–‘ํ•œ ๋น„์ „, ์˜ค๋””์˜ค, ์–ธ์–ด ์ž‘์—…์— ์ ์šฉํ•˜๋Š” ๋” ๋งŽ์€ ์˜ˆ์‹œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ๋Š” [Pipeline] ๋˜๋Š” [AutoModel] ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

import torch
from transformers import pipeline

pipeline = pipeline(
    task="image-text-to-text",
    model="google/gemma-3n-e4b",
    device=0,
    dtype=torch.bfloat16
)
pipeline(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg",
    text="์ด ์ด๋ฏธ์ง€์— ๋ฌด์—‡์ด ๋ณด์ด๋‚˜์š”?"
)
import torch
from transformers import AutoProcessor, Gemma3nForConditionalGeneration

model = Gemma3nForConditionalGeneration.from_pretrained(
    "google/gemma-3n-e4b-it",
    dtype=torch.bfloat16,
    device_map="auto",
    attn_implementation="sdpa"
)
processor = AutoProcessor.from_pretrained(
    "google/gemma-3n-e4b-it",
    padding_side="left"
)

messages = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "๋‹น์‹ ์€ ๋„์›€์ด ๋˜๋Š” ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค."}
        ]
    },
    {
        "role": "user", "content": [
            {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"},
            {"type": "text", "text": "์ด ์ด๋ฏธ์ง€์— ๋ฌด์—‡์ด ๋ณด์ด๋‚˜์š”?"},
        ]
    },
]
inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
).to(model.device)

output = model.generate(**inputs, max_new_tokens=50, cache_implementation="static")
print(processor.decode(output[0], skip_special_tokens=True))

์ฐธ๊ณ ์‚ฌํ•ญnotes

  • [Gemma3nForConditionalGeneration] ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€-์˜ค๋””์˜ค-ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€-ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€-์˜ค๋””์˜ค, ์˜ค๋””์˜ค-ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€ ๋‹จ๋…, ์˜ค๋””์˜ค ๋‹จ๋… ์ž…๋ ฅ์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Gemma 3n์€ ํ•œ ๋ฒˆ์˜ ์ž…๋ ฅ์— ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ํ”„๋กœ์„ธ์„œ์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ์ด๋ฏธ์ง€๋“ค์ด ๋ฐฐ์น˜ ๋‹จ์œ„๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฌถ์—ฌ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฐฐ์น˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

    url_cow = "https://media.istockphoto.com/id/1192867753/photo/cow-in-berchida-beach-siniscola.jpg?s=612x612&w=0&k=20&c=v0hjjniwsMNfJSuKWZuIn8pssmD5h5bSN1peBd1CmH4="
    url_cat = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
    
    messages =[
        {
            "role": "system",
            "content": [
                {"type": "text", "text": "๋‹น์‹ ์€ ๋„์›€์ด ๋˜๋Š” ์–ด์‹œ์Šคํ„ดํŠธ์ž…๋‹ˆ๋‹ค."}
            ]
        },
        {
            "role": "user",
            "content": [
                {"type": "image", "url": url_cow},
                {"type": "image", "url": url_cat},
                {"type": "text", "text": "์–ด๋–ค ์ด๋ฏธ์ง€๊ฐ€ ๋” ๊ท€์—ฝ์Šต๋‹ˆ๊นŒ?"},
            ]
        },
    ]
    
  • ํ”„๋กœ์„ธ์„œ์— ์ „๋‹ฌ๋˜๋Š” ํ…์ŠคํŠธ์—๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‚ฝ์ž…ํ•ด์•ผ ํ•˜๋Š” ์œ„์น˜์— <image_soft_token> ํ† ํฐ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Gemma 3n์€ ์ž…๋ ฅ๋‹น ์ตœ๋Œ€ ํ•˜๋‚˜์˜ ํƒ€๊นƒ ์˜ค๋””์˜ค ํด๋ฆฝ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ํ“จ์ƒท ํ”„๋กฌํ”„ํŠธ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ค๋””์˜ค ํด๋ฆฝ์„ ํ•จ๊ป˜ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ”„๋กœ์„ธ์„œ์— ์ „๋‹ฌ๋˜๋Š” ํ…์ŠคํŠธ์—๋Š” ์˜ค๋””์˜ค ํด๋ฆฝ์„ ์‚ฝ์ž…ํ•ด์•ผ ํ•˜๋Š” ์œ„์น˜์— <audio_soft_token> ํ† ํฐ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์„ธ์„œ์—๋Š” ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ๋ชจ๋ธ ์ž…๋ ฅ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ž์ฒด ๋ฉ”์„œ๋“œ์ธ [~ProcessorMixin.apply_chat_template]๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Gemma3nAudioFeatureExtractortransformers.Gemma3nAudioFeatureExtractor

autodoc Gemma3nAudioFeatureExtractor

Gemma3nProcessortransformers.Gemma3nProcessor

autodoc Gemma3nProcessor

Gemma3nTextConfigtransformers.Gemma3nTextConfig

autodoc Gemma3nTextConfig

Gemma3nVisionConfigtransformers.Gemma3nVisionConfig

autodoc Gemma3nVisionConfig

Gemma3nAudioConfigtransformers.Gemma3nAudioConfig

autodoc Gemma3nAudioConfig

Gemma3nConfigtransformers.Gemma3nConfig

autodoc Gemma3nConfig

Gemma3nTextModeltransformers.Gemma3nTextModel

autodoc Gemma3nTextModel - forward

Gemma3nModeltransformers.Gemma3nModel

autodoc Gemma3nModel - forward

Gemma3nForCausalLMtransformers.Gemma3nForCausalLM

autodoc Gemma3nForCausalLM - forward

Gemma3nForConditionalGenerationtransformers.Gemma3nForConditionalGeneration

autodoc Gemma3nForConditionalGeneration - forward