Model Details

Model Description

  • Developed by: κ°•μŠΉκ³€, μœ ν˜μ§„, 이도건
  • Model type: Casual Language Model
  • Language(s) (NLP): Korean
  • License: -
  • Finetuned from model [optional]: rtzr/ko-gemma-2-9b-it

Model Sources [optional]

Training Details

LoRA μ„€μ •

lora_config = LoraConfig(
    lora_alpha = 8,
    lora_dropout = 0.1,
    r=16,
    target_modules=["k_proj", "o_proj", "v_proj", "q_proj", "gate_proj", "up_proj", "down_proj"],
    bias="none",
    task_type="CAUSAL_LM",
)

lora_alpha = 8: lora_alphaλŠ” LoRA의 ν•™μŠ΅ 속도λ₯Ό μ‘°μ ˆν•˜λŠ” ν•˜μ΄νΌνŒŒλΌλ―Έν„°μž…λ‹ˆλ‹€. 큰 κ°’μΌμˆ˜λ‘ ν•™μŠ΅ 속도가 λŠλ €μ§€λ©°, μž‘μ€ 값은 더 λΉ λ₯΄κ²Œ ν•™μŠ΅λ©λ‹ˆλ‹€. 보톡 이 값은 LoRA의 μ—…λ°μ΄νŠΈ 강도λ₯Ό μ‘°μ ˆν•˜λŠ” μŠ€μΌ€μΌλ§ νŒ©ν„°λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

lora_dropout = 0.1: λ“œλ‘­μ•„μ›ƒ ν™•λ₯ μ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ“œλ‘­μ•„μ›ƒμ€ ν•™μŠ΅ 쀑 일뢀 λ‰΄λŸ°μ„ μž„μ‹œλ‘œ μ œκ±°ν•¨μœΌλ‘œμ¨ λͺ¨λΈμ˜ μΌλ°˜ν™” λŠ₯λ ₯을 ν–₯μƒμ‹œν‚€λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 0.1은 10%의 λ‰΄λŸ°μ„ λ“œλ‘­μ•„μ›ƒ ν•˜κ² λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

r = 16: r은 LoRAμ—μ„œ μ‚¬μš©λ˜λŠ” 저차원 ν–‰λ ¬μ˜ 랭크(rank)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이 값은 λͺ¨λΈμ— μΆ”κ°€λ˜λŠ” 저차원 ν–‰λ ¬μ˜ 크기λ₯Ό κ²°μ •ν•˜λ©°, μ„±λŠ₯κ³Ό λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. 일반적으둜 μž‘μ€ κ°’μΌμˆ˜λ‘ λ©”λͺ¨λ¦¬ νš¨μœ¨μ μž…λ‹ˆλ‹€.

target_modules=["k_proj", "o_proj", "v_proj", "q_proj", "gate_proj", "up_proj", "down_proj"]: LoRAκ°€ 적용될 λͺ¨λ“ˆ λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ "k_proj", "o_proj", "v_proj", "q_proj" 등은 트랜슀포머 λͺ¨λΈμ˜ λ‹€μ–‘ν•œ 투영(projection) λ ˆμ΄μ–΄λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 각각 ν‚€(key), κ°’(value), 쿼리(query) λ“± 주둜 μ–΄ν…μ…˜ λ©”μ»€λ‹ˆμ¦˜μ— μ‚¬μš©λ˜λŠ” λ ˆμ΄μ–΄λ“€μž…λ‹ˆλ‹€.

bias = "none": 편ν–₯(bias)을 μΆ”κ°€ν• μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” "none"으둜 μ„€μ •λ˜μ–΄ μžˆμ–΄ 편ν–₯이 μ μš©λ˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

task_type = "CAUSAL_LM": LoRAκ°€ μ μš©λ˜λŠ” μž‘μ—… μœ ν˜•μ„ μ •μ˜ν•©λ‹ˆλ‹€. "CAUSAL_LM"은 인과적 μ–Έμ–΄ λͺ¨λΈ(Causal Language Modeling)을 μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” GPT처럼 λ‹€μŒ 단어λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” λ°©μ‹μ˜ μ–Έμ–΄ λͺ¨λΈμ— ν•΄λ‹Ήν•©λ‹ˆλ‹€. rtzr/ko-gemma-2-9b-it Β· Hugging Face

λͺ¨λΈ μ„€μ •

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    formatting_func=generate_prompt,
    max_seq_length=512,
    args=TrainingArguments(
        output_dir="./output",
        num_train_epochs = 1,
        max_steps=3000,
        per_device_train_batch_size=1,
        gradient_accumulation_steps=4,
        optim="paged_adamw_8bit",
        warmup_steps=1,
        learning_rate=2e-4,
        fp16=True,
        logging_steps=100,
        push_to_hub=False,
        report_to='none',
    ),
    peft_config=lora_config
)

model=model: ν•™μŠ΅ν•  사전 ν›ˆλ ¨λœ λͺ¨λΈμ„ μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ model은 이전에 μ •μ˜λœ λͺ¨λΈ 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

train_dataset=dataset: ν•™μŠ΅μ— μ‚¬μš©ν•  데이터셋을 μ§€μ •ν•©λ‹ˆλ‹€. 이 데이터셋(dataset)μ—λŠ” 미리 μ€€λΉ„λœ ν•™μŠ΅μš© 데이터가 ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

formatting_func=generate_prompt: ν•™μŠ΅ λ°μ΄ν„°μ…‹μ—μ„œ 각 μƒ˜ν”Œμ„ μ–΄λ–»κ²Œ ν¬λ§·νŒ…ν• μ§€λ₯Ό μ •μ˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ generate_promptλΌλŠ” ν•¨μˆ˜κ°€ 각 데이터 μƒ˜ν”Œμ„ μ μ ˆν•œ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λͺ¨λΈ μž…λ ₯으둜 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

max_seq_length=512: 각 μž…λ ₯ μƒ˜ν”Œμ˜ μ΅œλŒ€ μ‹œν€€μŠ€ 길이λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” μ΅œλŒ€ 512개의 ν† ν°μœΌλ‘œ μ‹œν€€μŠ€ 길이λ₯Ό μ œν•œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 즉, ν•˜λ‚˜μ˜ μž…λ ₯이 512개 μ΄μƒμ˜ ν† ν°μœΌλ‘œ 이루어진 경우 잘리게 λ©λ‹ˆλ‹€.

num_train_epochs=1: 전체 데이터셋을 λͺ‡ 번 λ°˜λ³΅ν•˜μ—¬ ν•™μŠ΅ν• μ§€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

max_steps=3000: 총 ν•™μŠ΅ μŠ€ν… 수λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

per_device_train_batch_size=1: ν•œ λ²ˆμ— 각 λ””λ°”μ΄μŠ€(GPU λ˜λŠ” CPU)μ—μ„œ ν•™μŠ΅ν•  배치 크기λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

gradient_accumulation_steps=4: κ·ΈλΌλ””μ–ΈνŠΈλ₯Ό μΆ•μ ν•˜λŠ” μŠ€ν… 수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 배치 크기가 μž‘μ„ λ•Œ μœ μš©ν•˜λ©°, 4번의 λ°°μΉ˜μ— λŒ€ν•΄ κ·ΈλΌλ””μ–ΈνŠΈλ₯Ό μΆ•μ ν•œ ν›„, μ—…λ°μ΄νŠΈκ°€ 이루어지도둝 μ„€μ •λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ€„μ΄λ©΄μ„œλ„ 효과적인 ν•™μŠ΅μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

optim="paged_adamw_8bit": μ΅œμ ν™” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ paged_adamw_8bitλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” 8λΉ„νŠΈ AdamW μ΅œμ ν™” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ€„μ—¬μ£Όλ©΄μ„œλ„ 효율적인 ν•™μŠ΅μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

warmup_steps=1: ν•™μŠ΅ μ΄ˆκΈ°μ— μ›Œλ°μ—… μŠ€ν…μ„ 1둜 μ„€μ •ν•˜μ—¬ ν•™μŠ΅ 초기 λ‹¨κ³„μ—μ„œ ν•™μŠ΅ 속도λ₯Ό 천천히 μ¦κ°€μ‹œν‚€λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.

learning_rate=2e-4: ν•™μŠ΅λ₯ μ„ μ„€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” 2e-4둜 맀우 μž‘μ€ 값을 μ‚¬μš©ν•˜μ—¬ μ•ˆμ •μ μΈ ν•™μŠ΅μ΄ μ§„ν–‰λ˜λ„λ‘ ν•©λ‹ˆλ‹€.

fp16=True: ν˜Όν•© 정밀도 ν•™μŠ΅μ„ μ‚¬μš©ν•˜κ² λ‹€λŠ” μ„€μ •μž…λ‹ˆλ‹€. FP16 (16-bit 뢀동 μ†Œμˆ˜μ )을 μ‚¬μš©ν•˜μ—¬ ν•™μŠ΅ 속도λ₯Ό 높이고, GPU λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

logging_steps=100: 100 μŠ€ν…λ§ˆλ‹€ ν•™μŠ΅ 둜그λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

push_to_hub=False: λͺ¨λΈμ„ Hugging Face ν—ˆλΈŒλ‘œ μ—…λ‘œλ“œν•˜μ§€ μ•Šκ² λ‹€λŠ” μ„€μ •μž…λ‹ˆλ‹€.

report_to='none': ν•™μŠ΅ 쀑에 보고할 νˆ΄μ„ μ„€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” 아무 보고 νˆ΄λ„ μ‚¬μš©ν•˜μ§€ μ•Šκ² λ‹€λŠ” 의미둜 'none'으둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

peft_config=lora_config: LoRA(저차원 ν•™μŠ΅) 섀정을 μ μš©ν•©λ‹ˆλ‹€. lora_configλŠ” 이전에 μ •μ˜λœ LoraConfig 객체둜, LoRAλ₯Ό μ΄μš©ν•˜μ—¬ λ©”λͺ¨λ¦¬ 효율적인 ν•™μŠ΅μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.

데이터

Reference

μ‚¬μ£ΌνŒ”μž

Downloads last month
7
Safetensors
Model size
9B params
Tensor type
F16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for 5KLetsGo/saju-naming

Quantizations
1 model