AI 뉴스허브

Llama 3 또는 기타 오픈 소스 모델을 미세 조정하는 데 필요한 유일한 가이드

Llama 3 또는 기타 오픈 소스 모델을 미세 조정하는 데 필요한 유일한 가이드

Llama 3 또는 기타 오픈 소스 모델을 미세 조정하는 데 필요한 유일한 가이드

Llama 3와 같은 대규모 언어 모델(LLM)을 미세 조정하려면 도메인별 데이터 세트를 사용하여 사전 학습된 모델을 특정 작업에 맞게 조정해야 합니다. 이 프로세스는 모델의 기존 지식을 활용하여 처음부터 학습하는 것보다 효율적이고 비용 효율적입니다. 이 가이드에서는 메모리 사용과 계산 비용을 최소화하는 매개변수 효율적인 방법인 QLoRA(양자화된 LoRA)를 사용하여 Llama 3를 미세 조정하는 단계를 살펴보겠습니다.

Fine-Tuning 개요

미세 조정에는 몇 가지 핵심 단계가 포함됩니다.

  1. 사전 훈련된 모델 선택: 원하는 아키텍처에 맞는 기본 모델을 선택하세요.
  2. 관련 데이터 세트 수집: 귀하의 작업에 맞는 데이터 세트를 수집하고 사전 처리합니다.
  3. 미세 조정: 데이터 세트를 사용하여 모델을 조정하여 특정 작업에 대한 성능을 개선합니다.
  4. 평가: 정성적, 정량적 지표를 모두 사용하여 미세 조정된 모델을 평가합니다.

개념 및 기술

대규모 언어 모델 미세 조정

전체 미세 조정

전체 미세 조정 모델의 모든 매개변수를 업데이트하여 새로운 작업에 맞게 구체화합니다. 이 방법은 상당한 계산 리소스가 필요하며 매우 큰 모델에는 종종 비실용적입니다.

매개변수 효율적 미세 조정(PEFT)

PEFT는 모델 매개변수의 하위 집합만 업데이트하여 메모리 요구 사항과 계산 비용을 줄입니다. 이 기술은 치명적인 망각을 방지하고 모델에 대한 일반적인 지식을 유지합니다.

저순위 적응(LoRA) 및 양자화된 LoRA(QLoRA)

LoRA는 몇 개의 저랭크 행렬만 미세 조정하는 반면, QLoRA는 이러한 행렬을 양자화하여 메모리 사용량을 더욱 줄입니다.

미세 조정 방법

  1. 전체 미세 조정: 여기에는 작업별 데이터 세트에서 모델의 모든 매개변수를 훈련하는 것이 포함됩니다. 이 방법은 매우 효과적일 수 있지만, 컴퓨팅 비용이 많이 들고 상당한 메모리가 필요합니다.
  2. 매개변수 효율적 미세 조정(PEFT): PEFT는 모델 매개변수의 하위 집합만 업데이트하여 메모리 효율성을 높입니다. Low-Rank Adaptation(LoRA) 및 Quantized LoRA(QLoRA)와 같은 기술이 이 범주에 속합니다.

LoRA란?

미세 조정 방법 비교: QLORA는 메모리 스파이크 관리를 위한 4비트 정밀 양자화 및 페이지 최적화기를 통해 LoRA를 향상시킵니다.

LoRA는 개선된 미세 조정 방법으로, 사전 훈련된 모델의 모든 가중치를 미세 조정하는 대신 더 큰 행렬을 근사하는 두 개의 더 작은 행렬을 미세 조정합니다. 이러한 행렬은 LoRA 어댑터를 구성합니다. 이 미세 조정된 어댑터는 사전 훈련된 모델에 로드되어 추론에 사용됩니다.

LoRA의 주요 장점:

양자화된 LoRA(QLoRA)란 무엇인가요?

QLoRA는 LoRA 어댑터의 가중치를 더 낮은 정밀도(예: 8비트 대신 4비트)로 양자화하여 LoRA를 한 단계 더 발전시킵니다. 이를 통해 비슷한 수준의 효과를 유지하면서 메모리 사용량과 저장 요구 사항을 더욱 줄일 수 있습니다.

QLoRA의 주요 장점:

업무별 적응

미세 조정 중에 모델의 매개변수는 새로운 데이터세트에 따라 조정되어 특정 작업에 관련된 콘텐츠를 더 잘 이해하고 생성하는 데 도움이 됩니다. 이 프로세스는 사전 학습 중에 얻은 일반적인 언어 지식을 유지하면서 모델을 대상 도메인의 뉘앙스에 맞게 조정합니다.

실제에서의 미세 조정

전체 미세 조정 대 PEFT

구현 단계

  1. 환경 설정: 필요한 라이브러리를 설치하고 컴퓨팅 환경을 설정합니다.
  2. 데이터 세트 로드 및 사전 처리: 데이터 세트를 로드하여 모델에 적합한 형식으로 사전 처리합니다.
  3. 사전 훈련된 모델 로드: QLoRA를 사용하는 경우 양자화 구성으로 기본 모델을 로드합니다.
  4. 토큰화: 데이터 세트를 토큰화하여 학습에 대비합니다.
  5. 훈련: 준비된 데이터 세트를 사용하여 모델을 미세 조정합니다.
  6. 평가: 정성적, 정량적 측정 항목을 사용하여 특정 작업에 대한 모델의 성능을 평가합니다.

LLM 미세 조정을 위한 Steo 단계별 가이드

환경 설정하기

이 튜토리얼에서는 Jupyter 노트북을 사용합니다. 무료 GPU 사용을 제공하는 Kaggle이나 Google Colab과 같은 플랫폼은 이러한 실험을 실행하기에 이상적입니다.

1. 필요한 라이브러리 설치

먼저, 필요한 라이브러리가 설치되어 있는지 확인하세요.

!pip install -qqq -U bitsandbytes transformers peft accelerate datasets scipy einops evaluate trl rouge_score

2. 라이브러리 가져오기 및 환경 설정

import osimport torchfrom datasets import load_datasetfrom transformers import (    AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments,     pipeline, HfArgumentParser)from trl import ORPOConfig, ORPOTrainer, setup_chat_format, SFTTrainerfrom tqdm import tqdmimport gcimport pandas as pdimport numpy as npfrom huggingface_hub import interpreter_login# Disable Weights and Biases loggingos.environ['WANDB_DISABLED'] = "true"interpreter_login()

3. 데이터 세트 로드

이 튜토리얼에서는 DialogSum 데이터 세트를 사용하겠습니다.

적절한 템플릿을 적용하고 데이터 형식이 미세 조정에 적합한지 확인하는 것을 포함하여 모델 요구 사항에 따라 데이터 세트를 사전 처리합니다. (껴안는 얼굴)​​ (데이터캠프)​.

dataset_name = "neil-code/dialogsum-test"dataset = load_dataset(dataset_name)

데이터 세트 구조를 검사하세요.

print(dataset['test'][0])

4. BitsAndBytes 구성 생성

4비트 형식으로 모델을 로드하려면:

compute_dtype = getattr(torch, "float16")bnb_config = BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_quant_type='nf4',    bnb_4bit_compute_dtype=compute_dtype,    bnb_4bit_use_double_quant=False,)

5. 사전 훈련된 모델 로드

이 튜토리얼에서는 Microsoft의 Phi-2 모델을 사용합니다.

model_name = 'microsoft/phi-2'device_map = {"": 0}original_model = AutoModelForCausalLM.from_pretrained(    model_name,     device_map=device_map,    quantization_config=bnb_config,    trust_remote_code=True,    use_auth_token=True)

6. 토큰화

토크나이저 구성:

tokenizer = AutoTokenizer.from_pretrained(    model_name,     trust_remote_code=True,     padding_side="left",     add_eos_token=True,     add_bos_token=True,     use_fast=False)tokenizer.pad_token = tokenizer.eos_token

Llama 3 또는 기타 모델 미세 조정

Llama 3 또는 기타 최첨단 오픈소스 LLM과 같은 모델을 미세 조정할 때는 최적의 성능을 보장하기 위해 특정 고려 사항과 조정이 필요합니다. Llama 3, GPT-3, Mistral을 포함한 다양한 모델에 대해 이에 접근하는 방법에 대한 자세한 단계와 통찰력은 다음과 같습니다.

5.1 Llama 3 사용하기

모델 선택:

토큰화:

메모리 및 계산:

예:

model_name = 'meta-llama/Meta-Llama-3-8B'device_map = {"": 0}bnb_config = BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_quant_type="nf4",    bnb_4bit_compute_dtype=torch.float16,    bnb_4bit_use_double_quant=True,)original_model = AutoModelForCausalLM.from_pretrained(    model_name,     device_map=device_map,    quantization_config=bnb_config,    trust_remote_code=True,    use_auth_token=True)

토큰화:

특정 사용 사례 및 모델 요구 사항에 따라 중복 설정 없이 올바른 토크나이저 구성을 보장합니다. 예를 들어, use_fast=True 더 나은 성능을 위해 권장됩니다. (껴안는 얼굴)​​ (가중치 및 편향)​.

tokenizer = AutoTokenizer.from_pretrained(    model_name,     trust_remote_code=True,     padding_side="left",     add_eos_token=True,     add_bos_token=True,     use_fast=False)tokenizer.pad_token = tokenizer.eos_token

5.2 다른 인기 모델 사용(예: GPT-3, Mistral)

모델 선택:

토큰화:

메모리 및 계산:

GPT-3의 예:

model_name = 'openai/gpt-3'device_map = {"": 0}bnb_config = BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_quant_type="nf4",    bnb_4bit_compute_dtype=torch.float16,    bnb_4bit_use_double_quant=True,)original_model = AutoModelForCausalLM.from_pretrained(    model_name,     device_map=device_map,    quantization_config=bnb_config,    trust_remote_code=True,    use_auth_token=True)

미스트랄의 예:

model_name = 'mistral-7B'device_map = {"": 0}bnb_config = BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_quant_type="nf4",    bnb_4bit_compute_dtype=torch.float16,    bnb_4bit_use_double_quant=True,)original_model = AutoModelForCausalLM.from_pretrained(    model_name,     device_map=device_map,    quantization_config=bnb_config,    trust_remote_code=True,    use_auth_token=True)

토큰화 고려 사항: 각 모델에는 고유한 토큰화 요구 사항이 있을 수 있습니다. 토크나이저가 모델과 일치하고 올바르게 구성되었는지 확인하십시오.

Llama 3 Tokenizer 예시:

tokenizer = AutoTokenizer.from_pretrained(    model_name,     trust_remote_code=True,     padding_side="left",     add_eos_token=True,     add_bos_token=True,     use_fast=False)tokenizer.pad_token = tokenizer.eos_token

GPT-3 및 Mistral Tokenizer 예:

tokenizer = AutoTokenizer.from_pretrained(    model_name,     use_fast=True)

7. Zero-Shot Inferencing으로 모델 테스트

샘플 입력으로 기본 모델 평가:

from transformers import set_seedset_seed(42)index = 10prompt = dataset['test'][index]['dialogue']formatted_prompt = f"Instruct: Summarize the following conversation.n{prompt}nOutput:n"# Generate outputdef gen(model, prompt, max_length):    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)    outputs = model.generate(**inputs, max_length=max_length)    return tokenizer.batch_decode(outputs, skip_special_tokens=True)res = gen(original_model, formatted_prompt, 100)output = res[0].split('Output:n')[1]print(f'INPUT PROMPT:n{formatted_prompt}')print(f'MODEL GENERATION - ZERO SHOT:n{output}')

8. 데이터 세트 사전 처리

대화 요약 쌍을 프롬프트로 변환:

def create_prompt_formats(sample):    blurb = "Below is an instruction that describes a task. Write a response that appropriately completes the request."    instruction = "### Instruct: Summarize the below conversation."    input_context = sample['dialogue']    response = f"### Output:n{sample['summary']}"    end = "### End"        parts = [blurb, instruction, input_context, response, end]    formatted_prompt = "nn".join(parts)    sample["text"] = formatted_prompt    return sampledataset = dataset.map(create_prompt_formats)

포맷된 데이터세트를 토큰화합니다.

def preprocess_batch(batch, tokenizer, max_length):    return tokenizer(batch["text"], max_length=max_length, truncation=True)max_length = 1024train_dataset = dataset["train"].map(lambda batch: preprocess_batch(batch, tokenizer, max_length), batched=True)eval_dataset = dataset["validation"].map(lambda batch: preprocess_batch(batch, tokenizer, max_length), batched=True)

9. QLoRA를 위한 모델 준비

매개변수 효율적 미세 조정을 위한 모델 준비:

original_model = prepare_model_for_kbit_training(original_model)

하이퍼파라미터와 그 영향

하이퍼파라미터는 모델의 성능을 최적화하는 데 중요한 역할을 합니다. 고려해야 할 핵심 하이퍼파라미터는 다음과 같습니다.

  1. 학습률: 모델이 매개변수를 업데이트하는 속도를 제어합니다. 높은 학습률은 더 빠른 수렴으로 이어질 수 있지만 최적 솔루션을 초과할 수 있습니다. 낮은 학습률은 안정적인 수렴을 보장하지만 더 많은 에포크가 필요할 수 있습니다.
  2. 배치 크기: 모델이 매개변수를 업데이트하기 전에 처리된 샘플 수입니다. 배치 크기가 클수록 안정성이 향상되지만 더 많은 메모리가 필요합니다. 배치 크기가 작을수록 학습 프로세스에서 노이즈가 더 많아질 수 있습니다.
  3. 그래디언트 축적 단계: 이 매개변수는 매개변수 업데이트를 수행하기 전에 여러 단계에 걸쳐 그래디언트를 축적하여 더 큰 배치 크기를 시뮬레이션하는 데 도움이 됩니다.
  4. 에포크 수: 전체 데이터 세트가 모델을 통과하는 횟수입니다. 에포크가 많을수록 성능이 향상될 수 있지만 적절하게 관리하지 않으면 과적합으로 이어질 수 있습니다.
  5. 체중 감소: 큰 가중치에 대한 패널티를 부여하여 과잉적합을 방지하기 위한 정규화 기술입니다.
  6. 학습률 스케줄러: 성능과 수렴성을 개선하기 위해 훈련 중 학습률을 조정합니다.

특정 모델 및 작업 요구 사항에 따라 학습률, 배치 크기, 그래디언트 축적 단계와 같은 하이퍼파라미터를 조정하여 학습 구성을 사용자 정의합니다. 예를 들어, Llama 3 모델은 더 작은 모델과 비교하여 다른 학습률이 필요할 수 있습니다. (가중치 및 편향)​​ (깃허브)

예시 훈련 구성

orpo_args = ORPOConfig(learning_rate=8e-6,lr_scheduler_type="linear",max_length=1024,max_prompt_length=512,beta=0.1,per_device_train_batch_size=2,per_device_eval_batch_size=2,gradient_accumulation_steps=4,optim="paged_adamw_8bit",num_train_epochs=1,evaluation_strategy="steps",eval_steps=0.2,logging_steps=1,warmup_steps=10,report_to="wandb",output_dir="./results/",)

10. 모델 학습

트레이너를 설정하고 훈련을 시작하세요:

trainer = ORPOTrainer(model=original_model,args=orpo_args,train_dataset=train_dataset,eval_dataset=eval_dataset,tokenizer=tokenizer,)trainer.train()trainer.save_model("fine-tuned-llama-3")

미세 조정된 모델 평가

학습 후에는 정성적, 정량적 방법을 모두 사용하여 모델의 성능을 평가합니다.

1. 인간의 평가

생성된 요약을 사람이 쓴 요약과 비교하여 품질을 평가합니다.

2. 양적 평가

ROUGE와 같은 지표를 사용하여 성과를 평가하세요.

from rouge_score import rouge_scorerscorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)scores = scorer.score(reference_summary, generated_summary)print(scores)

일반적인 과제와 해결책

1. 메모리 제한

QLoRA를 사용하면 모델 가중치를 4비트로 양자화하여 메모리 문제를 완화하는 데 도움이 됩니다. 배치 크기와 모델 크기를 처리할 수 있는 충분한 GPU 메모리가 있는지 확인하세요.

2. 과적합

과적합을 방지하기 위해 검증 지표를 모니터링합니다. 조기 중단 및 가중치 감소와 같은 기술을 사용합니다.

삼. 느린 훈련

배치 크기, 학습률을 조정하고 그래디언트 축적을 사용하여 학습 속도를 최적화합니다.

4. 데이터 품질

데이터 세트가 깨끗하고 사전 처리가 잘 되었는지 확인하세요. 데이터 품질이 좋지 않으면 모델 성능에 상당한 영향을 미칠 수 있습니다.

결론

LLM을 미세 조정하는 방법 ing QLoRA는 대규모 사전 훈련된 모델을 컴퓨팅 비용을 절감하여 특정 작업에 적응시키는 효율적인 방법입니다. 이 가이드를 따르면 PHI, Llama 3 또는 기타 오픈 소스 모델을 미세 조정하여 특정 작업에서 높은 성능을 달성할 수 있습니다.

게시물 Llama 3 또는 기타 오픈 소스 모델을 미세 조정하는 데 필요한 유일한 가이드 처음 등장 유나이트.AI.

Exit mobile version