๐ค PEFT - ํ๋ผ๋ฏธํฐ ํจ์จ์ ์ธ ๋ฏธ์ธ ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ธ ์๊ฐ
ํ๋ก์ ํธ ๊ฐ์
**PEFT (Parameter-Efficient Fine-Tuning)**๋ Hugging Face์์ ๊ฐ๋ฐํ ์ต์ฒจ๋จ ํ๋ผ๋ฏธํฐ ํจ์จ์ ์ธ ๋ฏธ์ธ ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ์ด ํ๋ก์ ํธ๋ ๋๊ท๋ชจ ์ฌ์ ํ๋ จ ๋ชจ๋ธ์ ๋ฏธ์ธ ์กฐ์ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋์ ๊ณ์ฐ ๋น์ฉ๊ณผ ๋ง๋ํ ์ ์ฅ ๊ณต๊ฐ ์๊ตฌ ์ฌํญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
GitHub ์ฃผ์: https://github.com/huggingface/peft
ํต์ฌ ๊ฐ์น ๋ฐ ์ฅ์
1. ๋น์ฉ ํจ์จ์ฑ
- ๊ณ์ฐ ๋น์ฉ ๋ํญ ์ ๊ฐ: ๊ธฐ์กด์ ์ ์ฒด ํ๋ผ๋ฏธํฐ ๋ฏธ์ธ ์กฐ์ ์ ๋นํด PEFT ๋ฐฉ๋ฒ์ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ์ ์์ฃผ ์์ ๋ถ๋ถ๋ง ํ๋ จํฉ๋๋ค.
- ์ ์ฅ ๊ณต๊ฐ ์๊ตฌ ์ฌํญ ํ์ ํ ๊ฐ์: ๋ฏธ์ธ ์กฐ์ ๋ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ๋ช GB๊ฐ ์๋ ๋ช MB์ ๋ถ๊ณผํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ต์ ํ: ๋์ผํ ํ๋์จ์ด ์กฐ๊ฑด์์ ๋ ํฐ ๋ชจ๋ธ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
2. ์ฑ๋ฅ ์ ์ง
- ์ ์ฒด ํ๋ผ๋ฏธํฐ ๋ฏธ์ธ ์กฐ์ ์ ํ์ : ๋๋ถ๋ถ์ ์์
์์ ์์ ํ ๋ฏธ์ธ ์กฐ์ ๊ณผ ๊ฑฐ์ ๋์ผํ ์ฑ๋ฅ์ ๋ฌ์ฑํฉ๋๋ค.
- ์ฌ์์ ๋ง๊ฐ ๋ฐฉ์ง: ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๊ธฐ์กด ์ง์์ ๋ณดํธํ๊ณ ๊ณผ์ ํฉ ์ํ์ ์ค์
๋๋ค.
3. ์ ์ฐ์ฑ ๋ฐ ํธ์์ฑ
- ๋ค์ค ์์
์ ์: ๋ค์ํ ์์
์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ๊ฒฝ๋ ์ด๋ํฐ๋ฅผ ํ๋ จํ ์ ์์ต๋๋ค.
- ์ํํ ํตํฉ: Transformers, Diffusers, Accelerate ๋ฑ ์ํ๊ณ์ ์๋ฒฝํ๊ฒ ํตํฉ๋ฉ๋๋ค.
์ง์๋๋ ๋ฏธ์ธ ์กฐ์ ๋ฐฉ๋ฒ
์ฃผ์ PEFT ๊ธฐ์
- LoRA (Low-Rank Adaptation)
- ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํ๋ผ๋ฏธํฐ ํจ์จ์ ์ธ ๋ฏธ์ธ ์กฐ์ ๋ฐฉ๋ฒ
- ์ ๋ญํฌ ํ๋ ฌ ๋ถํด๋ฅผ ํตํด ํ๋ จ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ ๋ํญ ๊ฐ์
- ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค์์ ์๋ณธ ํ๋ผ๋ฏธํฐ์ 0.1%-1%๋ง ํ๋ จ
- AdaLoRA
- LoRA์ ๊ฐ์ ๋ฒ์
- ์ ์์ ์ผ๋ก ๋ญํฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ฌ ํจ์จ์ฑ ๋์ฑ ์ต์ ํ
- Prefix Tuning
- ์
๋ ฅ ์ํ์ค ์์ ํ์ต ๊ฐ๋ฅํ ์ ๋์ฌ ์ถ๊ฐ
- ์์ฑ ์์
์ ์ ํฉ
- P-Tuning v2
- ๊ฐ์ ๋ ํ๋กฌํํธ ํ๋ ๋ฐฉ๋ฒ
- ์ฌ๋ฌ ๋ ์ด์ด์ ํ์ต ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ ์ถ๊ฐ
- IAยณ (Infused Adapter by Inhibiting and Amplifying Inner Activations)
- ๋ด๋ถ ํ์ฑํ๋ฅผ ์ต์ ํ๊ณ ์ฆํญํ์ฌ ๋ชจ๋ธ์ ์ ์
์ค์ ์ ์ฉ ํจ๊ณผ
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋น๊ต (A100 80GB GPU)
๋ชจ๋ธ |
์ ์ฒด ํ๋ผ๋ฏธํฐ ๋ฏธ์ธ ์กฐ์ |
PEFT-LoRA |
PEFT-LoRA + DeepSpeed CPU ์คํ๋ก๋ |
T0_3B (30์ต ํ๋ผ๋ฏธํฐ) |
47.14GB GPU / 2.96GB CPU |
14.4GB GPU / 2.96GB CPU |
9.8GB GPU / 17.8GB CPU |
mt0-xxl (120์ต ํ๋ผ๋ฏธํฐ) |
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ |
56GB GPU / 3GB CPU |
22GB GPU / 52GB CPU |
bloomz-7b1 (70์ต ํ๋ผ๋ฏธํฐ) |
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ |
32GB GPU / 3.8GB CPU |
18.1GB GPU / 35GB CPU |
์ฑ๋ฅ
Twitter ๋ถ๋ง ๋ถ๋ฅ ์์
์ ์ ํ๋ ๋น๊ต:
- ์ธ๊ฐ ๊ธฐ์ค์ : 89.7%
- Flan-T5: 89.2%
- LoRA-T0-3B: 86.3%
์ค์น ๋ฐ ๋น ๋ฅธ ์์
์ค์น
pip install peft
๊ธฐ๋ณธ ์ฌ์ฉ ์์
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
# PEFT ๊ตฌ์ฑ
model_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig(
task_type=TaskType.SEQ_2_SEQ_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1
)
# ๋ชจ๋ธ ๋ก๋ ๋ฐ ๋ํ
model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
# ํ๋ จ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ ํ์ธ
model.print_trainable_parameters()
# ์ถ๋ ฅ: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19
์ถ๋ก ์ฌ์ฉ
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
# ๋ฏธ์ธ ์กฐ์ ๋ ๋ชจ๋ธ ๋ก๋
model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora").to("cuda")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")
# ์ถ๋ก ์ํ
model.eval()
inputs = tokenizer("๋น์ ์ ์
๋ ฅ ํ
์คํธ", return_tensors="pt")
outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
์ํ๊ณ ํตํฉ
1. Transformers ํตํฉ
- ๋ค์ํ ์ฌ์ ํ๋ จ ๋ชจ๋ธ ์ํคํ
์ฒ ์ง์
- ์ํํ ํ๋ จ ๋ฐ ์ถ๋ก ํ๋ก์ธ์ค
- ์๋ ๋ชจ๋ธ ๊ตฌ์ฑ ๋ฐ ์ต์ ํ
2. Diffusers ํตํฉ
- ํ์ฐ ๋ชจ๋ธ์ ํจ์จ์ ์ธ ๋ฏธ์ธ ์กฐ์ ์ง์
- ์ด๋ฏธ์ง ์์ฑ, ํธ์ง ๋ฑ ์์
์ ์ ํฉ
- ํ๋ จ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ ํ์ ํ ๊ฐ์
3. Accelerate ํตํฉ
- ๋ถ์ฐ ํ๋ จ ์ง์
- ๋ค์ค GPU, TPU ํ๋ จ ์ต์ ํ
- ์๋น์ ๋ฑ๊ธ ํ๋์จ์ด ์นํ์
4. TRL (Transformer Reinforcement Learning) ํตํฉ
- RLHF (์ธ๊ฐ ํผ๋๋ฐฑ ๊ฐํ ํ์ต) ์ง์
- DPO (์ง์ ์ ํธ๋ ์ต์ ํ)
- ๋๊ท๋ชจ ๋ชจ๋ธ ์ ๋ ฌ ํ๋ จ
์์ฉ ๋ถ์ผ
1. ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ ๋ฏธ์ธ ์กฐ์
- ๋ช
๋ น์ด ๋ฏธ์ธ ์กฐ์
- ๋ํ ์์คํ
์ต์ ํ
- ํน์ ๋๋ฉ์ธ ์ ์
2. ๋ฉํฐ๋ชจ๋ฌ ๋ชจ๋ธ
- ์๊ฐ-์ธ์ด ๋ชจ๋ธ ๋ฏธ์ธ ์กฐ์
- ์ค๋์ค ์ฒ๋ฆฌ ๋ชจ๋ธ ์ ์
3. ํ์ฐ ๋ชจ๋ธ
- Stable Diffusion ๊ฐ์ธํ
- DreamBooth ํ๋ จ
- ์คํ์ผ ๋ณํ
4. ๊ฐํ ํ์ต
- ์ ์ฑ
๋ชจ๋ธ ๋ฏธ์ธ ์กฐ์
- ๋ณด์ ๋ชจ๋ธ ํ๋ จ
- ์ธ๊ฐ ์ ํธ๋ ์ ๋ ฌ
๊ธฐ์ ์ ์ฅ์ ๋ฐ ํ์ ํฌ์ธํธ
1. ํ๋ผ๋ฏธํฐ ํจ์จ์ฑ
- ์๋ณธ ํ๋ผ๋ฏธํฐ์ 0.1%-1%๋ง ํ๋ จ
- 95% ์ด์์ ์ฑ๋ฅ ์ ์ง
- ์ฒดํฌํฌ์ธํธ ํ์ผ ํฌ๊ธฐ๋ฅผ ์๋ ํฌ๊ธฐ์ 1/100๋ก ์ถ์
2. ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
- GPU ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ ๋ํญ ๊ฐ์
- ์๋น์ ๋ฑ๊ธ ํ๋์จ์ด์์ ๋๊ท๋ชจ ๋ชจ๋ธ ํ๋ จ ์ง์
- ๊ทธ๋ผ๋์ธํธ ์ฒดํฌํฌ์ธํธ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์ฑ ์ต์ ํ
3. ์์ํ ํธํ์ฑ
- 8bit, 4bit ์์ํ์ ์๋ฒฝํ๊ฒ ๊ฒฐํฉ
- QLoRA ๊ธฐ์ ์ง์
- ํ๋์จ์ด ์ฅ๋ฒฝ ๋์ฑ ๋ฎ์ถค
4. ๋ชจ๋์ ์ค๊ณ
- ๋ค์ํ PEFT ๋ฐฉ๋ฒ ์ง์
- ์ ์ฐํ ๊ตฌ์ฑ ์ต์
- ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅ
์ปค๋ฎค๋ํฐ ๋ฐ ์ํ๊ณ
๊ณต์ ์๋ฃ
์์ฝ
๐ค PEFT๋ ํ์ ์ ์ธ ํ๋ผ๋ฏธํฐ ํจ์จ์ ์ธ ๋ฏธ์ธ ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์, ๋๊ท๋ชจ ๋ชจ๋ธ ๋ฏธ์ธ ์กฐ์ ์ ๋น์ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ ๋ฟ๋ง ์๋๋ผ ๋ฐ์ด๋ ์ฑ๋ฅ์ ์ ์งํฉ๋๋ค. ์ฐ๊ตฌ์๋ ์ฐ์
๊ณ ๊ฐ๋ฐ์๋ PEFT๋ ๊ฒฝ์ ์ ์ด๊ณ ํจ์จ์ ์ธ ๋๊ท๋ชจ ๋ชจ๋ธ ๋ง์ถคํ ์๋ฃจ์
์ ์ ๊ณตํ์ฌ AI ๊ธฐ์ ์ ๋ฏผ์ฃผํ๋ฅผ ์ถ์งํฉ๋๋ค.