Home
Login

๐Ÿค— PEFT๋Š” Hugging Face์—์„œ ๊ฐœ๋ฐœํ•œ ๊ณ ๊ธ‰ ํŒŒ๋ผ๋ฏธํ„ฐ ํšจ์œจ์  ๋ฏธ์„ธ ์กฐ์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, LoRA, AdaLoRA ๋“ฑ์˜ ๊ธฐ์ˆ ์„ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์˜ ์ €๋น„์šฉ ๋ฏธ์„ธ ์กฐ์ •์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Apache-2.0Python 18.8khuggingface Last Updated: 2025-06-19

๐Ÿค— PEFT - ํŒŒ๋ผ๋ฏธํ„ฐ ํšจ์œจ์ ์ธ ๋ฏธ์„ธ ์กฐ์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ธ ์†Œ๊ฐœ

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

**PEFT (Parameter-Efficient Fine-Tuning)**๋Š” Hugging Face์—์„œ ๊ฐœ๋ฐœํ•œ ์ตœ์ฒจ๋‹จ ํŒŒ๋ผ๋ฏธํ„ฐ ํšจ์œจ์ ์ธ ๋ฏธ์„ธ ์กฐ์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๋Œ€๊ทœ๋ชจ ์‚ฌ์ „ ํ›ˆ๋ จ ๋ชจ๋ธ์˜ ๋ฏธ์„ธ ์กฐ์ • ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋†’์€ ๊ณ„์‚ฐ ๋น„์šฉ๊ณผ ๋ง‰๋Œ€ํ•œ ์ €์žฅ ๊ณต๊ฐ„ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

GitHub ์ฃผ์†Œ: https://github.com/huggingface/peft

ํ•ต์‹ฌ ๊ฐ€์น˜ ๋ฐ ์žฅ์ 

1. ๋น„์šฉ ํšจ์œจ์„ฑ

  • ๊ณ„์‚ฐ ๋น„์šฉ ๋Œ€ํญ ์ ˆ๊ฐ: ๊ธฐ์กด์˜ ์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฏธ์„ธ ์กฐ์ •์— ๋น„ํ•ด PEFT ๋ฐฉ๋ฒ•์€ ๋ชจ๋ธ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์•„์ฃผ ์ž‘์€ ๋ถ€๋ถ„๋งŒ ํ›ˆ๋ จํ•ฉ๋‹ˆ๋‹ค.
  • ์ €์žฅ ๊ณต๊ฐ„ ์š”๊ตฌ ์‚ฌํ•ญ ํ˜„์ €ํžˆ ๊ฐ์†Œ: ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ ํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ช‡ GB๊ฐ€ ์•„๋‹Œ ๋ช‡ MB์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์ ํ™”: ๋™์ผํ•œ ํ•˜๋“œ์›จ์–ด ์กฐ๊ฑด์—์„œ ๋” ํฐ ๋ชจ๋ธ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์„ฑ๋Šฅ ์œ ์ง€

  • ์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฏธ์„ธ ์กฐ์ •์— ํ•„์ : ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์—์„œ ์™„์ „ํ•œ ๋ฏธ์„ธ ์กฐ์ •๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ์•™์  ๋ง๊ฐ ๋ฐฉ์ง€: ๊ธฐ๋ณธ ๋ชจ๋ธ์˜ ๊ธฐ์กด ์ง€์‹์„ ๋ณดํ˜ธํ•˜๊ณ  ๊ณผ์ ํ•ฉ ์œ„ํ—˜์„ ์ค„์ž…๋‹ˆ๋‹ค.

3. ์œ ์—ฐ์„ฑ ๋ฐ ํŽธ์˜์„ฑ

  • ๋‹ค์ค‘ ์ž‘์—… ์ ์‘: ๋‹ค์–‘ํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฝ๋Ÿ‰ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ›ˆ๋ จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›ํ™œํ•œ ํ†ตํ•ฉ: Transformers, Diffusers, Accelerate ๋“ฑ ์ƒํƒœ๊ณ„์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๋ฏธ์„ธ ์กฐ์ • ๋ฐฉ๋ฒ•

์ฃผ์š” PEFT ๊ธฐ์ˆ 

  1. LoRA (Low-Rank Adaptation)
  • ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ํšจ์œจ์ ์ธ ๋ฏธ์„ธ ์กฐ์ • ๋ฐฉ๋ฒ•
  • ์ €๋žญํฌ ํ–‰๋ ฌ ๋ถ„ํ•ด๋ฅผ ํ†ตํ•ด ํ›ˆ๋ จ ๊ฐ€๋Šฅํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋Œ€ํญ ๊ฐ์†Œ
  • ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์›๋ณธ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ 0.1%-1%๋งŒ ํ›ˆ๋ จ
  1. AdaLoRA
  • LoRA์˜ ๊ฐœ์„  ๋ฒ„์ „
  • ์ ์‘์ ์œผ๋กœ ๋žญํฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ํšจ์œจ์„ฑ ๋”์šฑ ์ตœ์ ํ™”
  1. Prefix Tuning
  • ์ž…๋ ฅ ์‹œํ€€์Šค ์•ž์— ํ•™์Šต ๊ฐ€๋Šฅํ•œ ์ ‘๋‘์‚ฌ ์ถ”๊ฐ€
  • ์ƒ์„ฑ ์ž‘์—…์— ์ ํ•ฉ
  1. P-Tuning v2
  • ๊ฐœ์„ ๋œ ํ”„๋กฌํ”„ํŠธ ํŠœ๋‹ ๋ฐฉ๋ฒ•
  • ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด์— ํ•™์Šต ๊ฐ€๋Šฅํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€
  1. 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 ๋ฐฉ๋ฒ• ์ง€์›
  • ์œ ์—ฐํ•œ ๊ตฌ์„ฑ ์˜ต์…˜
  • ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅ

์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ์ƒํƒœ๊ณ„

๊ณต์‹ ์ž๋ฃŒ

  • ๋ฌธ์„œ: https://huggingface.co/docs/peft
  • ๋ชจ๋ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: https://huggingface.co/PEFT
  • ์˜ˆ์ œ ๋…ธํŠธ๋ถ: ๋‹ค์–‘ํ•œ ์‘์šฉ ๋ถ„์•ผ ํฌํ•จ
  • ๋ธ”๋กœ๊ทธ ํŠœํ† ๋ฆฌ์–ผ: ์ž์„ธํ•œ ๊ธฐ์ˆ  ์„ค๋ช… ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€

์š”์•ฝ

๐Ÿค— PEFT๋Š” ํ˜์‹ ์ ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ ํšจ์œจ์ ์ธ ๋ฏธ์„ธ ์กฐ์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ, ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ ๋ฏธ์„ธ ์กฐ์ •์˜ ๋น„์šฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์ž๋“  ์‚ฐ์—…๊ณ„ ๊ฐœ๋ฐœ์ž๋“  PEFT๋Š” ๊ฒฝ์ œ์ ์ด๊ณ  ํšจ์œจ์ ์ธ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ ๋งž์ถคํ™” ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜์—ฌ AI ๊ธฐ์ˆ ์˜ ๋ฏผ์ฃผํ™”๋ฅผ ์ถ”์ง„ํ•ฉ๋‹ˆ๋‹ค.