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