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

ๆ–‡ไปถ
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

5.8 KiB

๋ง˜๋ฐ”mamba

๊ฐœ์š”overview

๋ง˜๋ฐ”(Mamba) ๋ชจ๋ธ์€ Albert Gu, Tri Dao๊ฐ€ ์ œ์•ˆํ•œ ๋ง˜๋ฐ”: ์„ ํƒ์  ์ƒํƒœ ๊ณต๊ฐ„์„ ์ด์šฉํ•œ ์„ ํ˜• ์‹œ๊ฐ„ ์‹œํ€€์Šค ๋ชจ๋ธ๋ง๋ผ๋Š” ๋…ผ๋ฌธ์—์„œ ์†Œ๊ฐœ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋ธ์€ state-space-models์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ ์ดํ•ด๋ฅผ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๊ณณ์„ ์ฐธ๊ณ  ํ•˜์„ธ์š”.

ํ•ด๋‹น ๋…ผ๋ฌธ์˜ ์ดˆ๋ก์ž…๋‹ˆ๋‹ค:

ํ˜„์žฌ ๋”ฅ๋Ÿฌ๋‹์—์„œ ํฅ๋ฏธ๋กœ์šด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์ดˆ ๋ชจ๋ธ๋“ค์€ ๊ฑฐ์˜ ๋ณดํŽธ์ ์œผ๋กœ ํŠธ๋žœ์Šคํฌ๋จธ ์•„ํ‚คํ…์ฒ˜์™€ ๊ทธ ํ•ต์‹ฌ ์–ดํ…์…˜ ๋ชจ๋“ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์„ ํ˜• ์–ดํ…์…˜, ๊ฒŒ์ดํŠธ๋œ ์ปจ๋ณผ๋ฃจ์…˜๊ณผ ์ˆœํ™˜ ๋ชจ๋ธ, ๊ตฌ์กฐํ™”๋œ ์ƒํƒœ ๊ณต๊ฐ„ ๋ชจ๋ธ(SSM) ๋“ฑ ๋งŽ์€ ์ค€์ด์ฐจ์‹œ๊ฐ„(subquadratic-time) ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ธด ์‹œํ€€์Šค์— ๋Œ€ํ•œ ํŠธ๋žœ์Šคํฌ๋จธ์˜ ๊ณ„์‚ฐ ๋น„ํšจ์œจ์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ, ์–ธ์–ด์™€ ๊ฐ™์€ ์ค‘์š”ํ•œ ์–‘์‹์—์„œ๋Š” ์–ดํ…์…˜๋งŒํผ ์„ฑ๋Šฅ์„ ๋‚ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋ธ์˜ ์ฃผ์š” ์•ฝ์ ์ด ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ์ ์ž„์„ ์•Œ๊ณ  ๋ช‡ ๊ฐ€์ง€๋ฅผ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, SSM ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ์˜ ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ด์‚ฐ ๋ชจ๋‹ฌ๋ฆฌํ‹ฐ(discrete modalities)์˜ ์•ฝ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด, ํ˜„์žฌ ํ† ํฐ์— ๋”ฐ๋ผ ์‹œํ€€์Šค ๊ธธ์ด ์ฐจ์›์„ ๋”ฐ๋ผ ์ •๋ณด๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ „ํŒŒํ•˜๊ฑฐ๋‚˜ ์žŠ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ํšจ์œจ์ ์ธ ์ปจ๋ณผ๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ˆœํ™˜ ๋ชจ๋“œ์—์„œ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ธ์‹ํ•˜๋Š” ๋ณ‘๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์„ ํƒ์  SSM์„ ์–ดํ…์…˜์ด๋‚˜ MLP ๋ธ”๋ก๋„ ์—†๋Š” ๋‹จ์ˆœํ™”๋œ ์ข…๋‹จ๊ฐ„ ์‹ ๊ฒฝ๋ง ์•„ํ‚คํ…์ฒ˜์ธ ๋ง˜๋ฐ”์— ํ†ตํ•ฉ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ๋ง˜๋ฐ”๋Š” ๋น ๋ฅธ ์ถ”๋ก (ํŠธ๋žœ์Šคํฌ๋จธ๋ณด๋‹ค 5๋ฐฐ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰)๊ณผ ์‹œํ€€์Šค ๊ธธ์ด์— ๋Œ€ํ•œ ์„ ํ˜• ํ™•์žฅ์„ฑ์„ ๋ˆ„๋ฆฌ๋ฉฐ, ๋ฐฑ๋งŒ ๊ธธ์ด ์‹œํ€€์Šค๊นŒ์ง€ ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์‹œํ€€์Šค ๋ชจ๋ธ ๋ฐฑ๋ณธ์œผ๋กœ์„œ ๋ง˜๋ฐ”๋Š” ์–ธ์–ด, ์˜ค๋””์˜ค, ์œ ์ „์ฒดํ•™๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์–‘์‹์—์„œ ์ตœ์ฒจ๋‹จ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์–ธ์–ด ๋ชจ๋ธ๋ง์—์„œ ์šฐ๋ฆฌ์˜ ๋ง˜๋ฐ”-3B ๋ชจ๋ธ์€ ๊ฐ™์€ ํฌ๊ธฐ์˜ ํŠธ๋žœ์Šคํฌ๋จธ๋ฅผ ๋Šฅ๊ฐ€ํ•˜๊ณ  ๋‘ ๋ฐฐ ํฌ๊ธฐ์˜ ํŠธ๋žœ์Šคํฌ๋จธ์™€ ๋งž๋จน๋Š” ์„ฑ๋Šฅ์„ ๋ณด์ด๋ฉฐ, ์‚ฌ์ „ ํ›ˆ๋ จ๊ณผ ๋‹ค์šด์ŠคํŠธ๋ฆผ ํ‰๊ฐ€ ๋ชจ๋‘์—์„œ ์„ฑ๋Šฅ์„ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํŒ:

  • ๋ง˜๋ฐ”๋Š” ๊ณ ์ „์ ์ธ ํŠธ๋žœ์Šคํฌ๋จธ์™€ ๊ฒฌ์ค„ ๋งŒํ•œ ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ณต๊ฐ„ ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ตฌ์กฐํ™”๋œ ์ƒํƒœ ๊ณต๊ฐ„ ๋ชจ๋ธ์˜ ๋ฐœ์ „ ์„ ์ƒ์— ์žˆ์œผ๋ฉฐ, ํ”Œ๋ž˜์‹œ์–ดํ…์…˜์˜ ์ •์‹ ์„ ๋”ฐ๋ฅด๋Š” ํšจ์œจ์ ์ธ ํ•˜๋“œ์›จ์–ด ์ธ์‹ ์„ค๊ณ„์™€ ๊ตฌํ˜„์„ ํŠน์ง•์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ง˜๋ฐ”๋Š” ์–ดํ…์…˜ ๋ ˆ์ด์–ด์™€ ๋™๋“ฑํ•œ ๋ฏน์„œ(mixer) ๋ ˆ์ด์–ด๋ฅผ ์Œ“์Šต๋‹ˆ๋‹ค. ๋ง˜๋ฐ”์˜ ํ•ต์‹ฌ ๋กœ์ง์€ MambaMixer ํด๋ž˜์Šค์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐ€์ง€ ๊ตฌํ˜„์ด ๊ณต์กดํ•ฉ๋‹ˆ๋‹ค: ํ•˜๋‚˜๋Š” ์ตœ์ ํ™”๋˜์–ด ๋น ๋ฅธ cuda์ปค๋„์„ ์‚ฌ์šฉํ•˜๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ ๋ชจ๋“  ์žฅ์น˜์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
  • ํ˜„์žฌ ๊ตฌํ˜„์€ ์›๋ณธ cuda์ปค๋„์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค: ๋ง˜๋ฐ”๋ฅผ ์œ„ํ•œ ํ”Œ๋ž˜์‹œ ์–ดํ…์…˜์˜ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์€ mamba-ssm์™€ causal_conv1d ์ €์žฅ์†Œ์— ํ˜ธ์ŠคํŒ…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ง€์›ํ•œ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ์„ค์น˜ํ•˜์„ธ์š”!
  • cuda ์ปค๋„์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ ๋ณด๋‹ค๋Š”, ๋‹จ์ˆœํ•˜์ง€๋งŒ ๋ชจ๋“  ์žฅ์น˜์—์„œ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋„๋กํ•˜๋Š” ๋ฐฉํ–ฅ์ธ '๋‹จ์ˆœ๊ตฌํ˜„'์˜ ์„ฑ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ์—ฌ๋ฅผ ๋” ํ™˜์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค—

์ด ๋ชจ๋ธ์€ ArthurZ์— ์˜ํ•ด ๊ธฐ์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์›๋ณธ ์ฝ”๋“œ๋Š” ์ด๊ณณ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ

๊ฐ„๋‹จํ•œ ์ƒ์„ฑ ์˜ˆ์ œ

from transformers import MambaConfig, MambaForCausalLM, AutoTokenizer
import torch

tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-130m-hf")
model = MambaForCausalLM.from_pretrained("state-spaces/mamba-130m-hf")
input_ids = tokenizer("Hey how are you doing?", return_tensors= "pt")["input_ids"]

out = model.generate(input_ids, max_new_tokens=10)
print(tokenizer.batch_decode(out))

Peft ํŒŒ์ธํŠœ๋‹

๋А๋ฆฐ ๋ฒ„์ „์€ ํ•™์Šต์—์„œ ์•„์ฃผ ์•ˆ์ •์ ์ด์ง„ ์•Š์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ๋ฒ„์ „์€ float32๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

from datasets import load_dataset
from trl import SFTConfig, SFTTrainer
from peft import LoraConfig

model_id = "state-spaces/mamba-130m-hf"
dataset = load_dataset("Abirate/english_quotes", split="train")
training_args = SFTConfig(dataset_text_field="quote")
lora_config =  LoraConfig(target_modules=["x_proj", "embeddings", "in_proj", "out_proj"])
trainer = SFTTrainer(
    model=model_id,
    args=training_args,
    train_dataset=dataset,
    peft_config=lora_config,
)
trainer.train()

MambaConfig

autodoc MambaConfig

MambaModel

autodoc MambaModel - forward

MambaLMHeadModel

autodoc MambaForCausalLM - forward