Hugging Face로 모델 미세 조정

Llama 3 미세 조정(Fine-Tuning)

Francesca Donadoni

Curriculum Manager, DataCamp

미세 조정에 필요한 것

  1. 언어 모델 + 토크나이저(LLama 계열, 예: TinyLLama-v0)
  2. 학습 데이터세트(Bitext 고객 지원 데이터세트)
  3. 학습 인자
  4. 미세 조정 수행(TRLSFTTrainer)
  5. 평가 벤치마크 또는 데이터세트

훈련 루프. 학습은 학습 인자, 데이터, 모델이 필요하며, 미세 조정된 모델을 생성합니다. 평가는 미세 조정된 모델과 평가 데이터세트로 수행됩니다.

Llama 3 미세 조정(Fine-Tuning)

Auto 클래스로 모델과 토크나이저 불러오기

model_name="Maykeye/TinyLLama-v0"

model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

tokenizer.pad_token = tokenizer.eos_token
1 https://huggingface.co/docs/transformers/main/en/model_doc/auto
Llama 3 미세 조정(Fine-Tuning)

TrainingArguments로 학습 파라미터 정의하기

training_arguments = TrainingArguments(

per_device_train_batch_size=1,
learning_rate=2e-3,
max_grad_norm=0.3,
max_steps=200,
... gradient_accumulation_steps=2, save_steps=10,
)
1 https://huggingface.co/docs/transformers/v4.40.1/en/main_classes/trainer#transformers.TrainingArguments
Llama 3 미세 조정(Fine-Tuning)

SFTTrainer로 학습 설정하기

trainer = SFTTrainer(

model=model, tokenizer=tokenizer,
train_dataset=dataset, dataset_text_field='conversation',
max_seq_length=250,
args=training_arguments
)
Llama 3 미세 조정(Fine-Tuning)

SFTTrainer 결과 이해하기

trainer.train()
TrainOutput(global_step=200, training_loss=1.9401231002807617,
            metrics={'train_runtime': 142.5501, 
                     'train_samples_per_second': 2.806,
                     'train_steps_per_second': 1.403, 
                     'total_flos': 1461265827840.0, 
                     'train_loss': 1.9401231002807617, 
                     'epoch': 2.0})
Llama 3 미세 조정(Fine-Tuning)

ROUGE-1로 학습된 모델 평가하기

  • ROUGE-1: 기준 문장과 생성 문장의 단어 겹침 비율
import evaluate

rouge = evaluate.load('rouge')
predictions = ["hello there", "general kenobi"] references = ["hello there", "master yoda"]
results = rouge.compute(predictions=predictions, references=references) print(results)
{'rouge1': 0.5, 'rouge2': 0.5, 'rougeL': 0.5, 'rougeLsum': 0.5}
1 https://huggingface.co/spaces/evaluate-metric/rouge
Llama 3 미세 조정(Fine-Tuning)

ROUGE-1 점수 활용 방법

  1. evaluation_dataset의 평가 세트를 사용합니다
def generate_predictions_and_reference(dataset):
    predictions = []
    references = []
    for row in dataset:
        inputs = tokenizer.encode(row["instruction"], return_tensors="pt")

outputs = model.generate(inputs)
decoded_outputs = tokenizer.decode(outputs[0, inputs.shape[1]:], skip_special_tokens = True)
references += [row["response"]] predictions += [decoded_outputs] return references, predictions
Llama 3 미세 조정(Fine-Tuning)

평가 세트에서 ROUGE-1 실행하기

references, predictions = generate_predictions_and_reference(evaluation_dataset)
rouge = evaluate.load('rouge')
results = rouge.compute(predictions=predictions, references=references)
print(results)
Llama 3 미세 조정(Fine-Tuning)

미세 조정 vs 미적용

미세 조정함

{'rouge1': 0.22425812699023645,
 'rouge2': 0.039502543246449,
 'rougeL': 0.1501513006868983,
 'rougeLsum': 0.18685597710721613}

미세 조정 안 함

{'rouge1': 0.1310928764315105,
 'rouge2': 0.04581654122835097,
 'rougeL': 0.08415351421221628,
 'rougeLsum': 0.1224749866097021}
Llama 3 미세 조정(Fine-Tuning)

Ayo berlatih!

Llama 3 미세 조정(Fine-Tuning)

Preparing Video For Download...