Technology issues/TensorFlow

Llama 3.2 모델 파인 튜닝으로 한국어 능력 향상을 위한 파이썬 코드 구성 방법 #5

pauls 2025. 2. 17. 14:51
반응형

오늘은 지금까지 살펴보고 정리한 모든 내용을 가지고 실제로 파인 튜닝을 실행하기 위해 파이썬 코드를 구성해 보도록 하겠습니다.

Llama 3.2 모델 파인 튜닝
Llama 3.2 모델 파인 튜닝

 

 

Llama 3.2 1b 모델 파인 튜닝

파인 튜닝도 역시 시스템의 성능이 중요합니다. 가지고 있는 PC가 워낙 오래된 저사양 PC라서 실제로 문제없이 잘 진행될지도 의문이지만 한번 해 보도록 하겠습니다.

프로세서: AMD Ryzen 3 3300X 4-Core Processor 3.79 GHz
RAM : 16.0GB
그래픽: NVIDIA GeForce GTX 1650

 

Llama 모델 중에서도 llama 3.2 1B를 선택한 이유가 처음에는 3B 모델을 튜닝해 보고 싶었으나 사전 테스트해 보니 실제로 워낙 낮은 사양이라 3B 모델은 시작도 안되던 경험을 했습니다.

 

반응형

 

  파인 튜닝 모델 준비

이제까지는 ollama 플랫폼을 이용한 Llama 모델들을 비교해 보고 검토해 봤습니다. 그런데, 여기서 문제가 Ollama 플랫폼은 학습이나 파인 튜닝을 위한 어떤 옵션을 제공하고 있지 않습니다. 때문에 원본 모델을 직접 확보해야 하는데, Meta에서 직접 모델을 다운로드하거나, Hugging face에서 해당 모델을 다운로드해야만 합니다.

 

Hugging face를 통해 llama 3.2 1b 모델을 다운로드 합니다. (mode.safetensors, config.json, tokenizer.json 은 필수로 다운로드합니다.)

다음과 같이 코드를 구성합니다.

from transformers import AutoModelForCausalLM, AutoTokenizer

file_path = "C:/llama3.2-1b/"
model = AutoModelForCausalLM.from_pretrained(file_path, use_safetensors=True)
tokenizer = AutoTokenizer.from_pretrained(file_path)
  • AutoModelForCausalLM.from_pretrained()을 사용하여 safetensors 형식의 모델 가중치를 로드.
  • AutoTokenizer.from_pretrained()을 사용하여 토크나이저를 로드.
  • 이후, modeltokenizer를 사용하여 텍스트 생성, 파인튜닝, 평가 등 다양한 작업 수행 가능.

use_safetensors=True로 지정하여 조금이라도 메모리 관리에 영향을 주기 위해 활성화.

메모리 사용량을 최소화하기 위해 아래와 같이 설정해 둡니다.

model.gradient_checkpointing_enable()
model.config.use_cache = False

 

 

 

 

 

 

 

 

  데이터셋 로드

한국어 능력을 높이기 위한 데이터셋을 활용하는 것이므로 SFT(Supervised Fine-Tuning, 지도 학습 기반 파인튜닝) 방식으로 적용합니다. AI-허브에서 사전 준비한 데이터셋에는 SFTlabel.json 이 있습니다. 이를 사용합니다.

class CustomSet(Dataset):
	......

    def __getitem__(self, idx):
        question, answer = self.pairs[idx]

        inputs = self.tokenizer(
            question,
            text_pair=answer,
            padding='max_length',
            truncation=True,
            max_length=self.max_length,
            return_tensors="pt"
        )
        inputs = {key: value.squeeze() for key, value in inputs.items()}
        inputs["labels"] = inputs["input_ids"].clone()
        return inputs

# 데이터셋 생성
train_dat = CustomSet(tokenizer, train_pairs)
val_dat = CustomSet(tokenizer, val_pairs)

 

 

 

 

 

 

 

 

  학습 옵션 설정

이제, Hugging face에서 제공하는 TraininArguments 클래스를 사용하여 튜닝에 필요한 학습 방법과 리소스 관련 설정을 해 보도록 하겠습니다. 

training_args = TrainingArguments(
    output_dir="./results",
    eval_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=1,  # 배치 크기를 1로 유지
    gradient_accumulation_steps=32, 
    per_device_eval_batch_size=1,
    num_train_epochs=3,
    weight_decay=0.01,
    logging_dir='./logs',
    logging_steps=10
)

학습 설정 관련은 eval_strategy, learning_rate, num_train_epochs, weight_decay부분입니다.

예를 들어 위 코드에서 eval_strategy="epoch"로 설정했는데, 이것은 학습 데이터 전체를 한번 학습한 후에 평가를 실행하다는 의미입니다.

 

 

 

 

 

 

 

 

자, 이제 파인 튜닝을 실행합니다.

Llama 모델 중 가장 작은 모델이지만, 그럼에도 총 실행 시간이 84시간 이상 걸린다고 나옵니다. 이제 이 PC는 꼬박 4일 정도 다른 작업을 할 수 없고 오직 파인 튜닝만 실행하게 될 것입니다. 중간에 중단 없이 끝까지 수행되어 결과를 출력할 수 있기를 바라며 기다려 봐야겠습니다.

 


 

AI허브 데이터셋으로 Llama 3.2 모델 한국어 파인 튜닝을 위한 준비 작업 #4

 

AI허브 데이터셋으로 Llama 3.2 모델 한국어 파인 튜닝을 위한 준비 작업 #4

오늘은 ollama 플랫폼으로 생성한 모델의 한국어 능력 상태를 확인해 보고 한글 파인 튜닝을 위한 준비 작업의 세 번째 이야기로 데이터셋 확보 방법을 정리해 보려 합니다.한국어 파인 튜닝을 

paulsmedia.tistory.com

Transformer 라이브러리와 파인 튜닝을 활용한 자연어 처리 #3

 

Transformer 라이브러리와 파인 튜닝을 활용한 자연어 처리 #3

오늘은 파인튜닝을 위한 준비 작업의 세 번째 이야기로, Transformers 라이브러리에 대해 이야기해 보려 합니다.Transformers는 Hugging Face에서 발표한 오픈소스 라이브러리입니다. 이 라이브러리는 다

paulsmedia.tistory.com

파인 튜닝을 위한 준비 작업 #2 - GGUF 파일을 Ollama에 이식하기

 

파인 튜닝을 위한 준비 작업 #2 - GGUF 파일을 Ollama에 이식하기

오늘은 지난번 변환했던 GGUF 파일을 Ollama 플랫폼에 이식하는 방법에 대해 알아보겠습니다. GGUF 파일 변환 이유와 방법에 대해서는 바로 이전 글에서 자세히 다뤄봤으니, 오늘은 바로 다음 이야

paulsmedia.tistory.com

Llama 3.2 모델 파인 튜닝 - 튜닝을 위한 준비 작업 #1 (GGUF 형식 변환)

 

Llama 3.2 모델 파인 튜닝 - 튜닝을 위한 준비 작업 #1 (GGUF 형식 변환)

오늘은 Llama 3.2 모델의 파인 튜닝을 위한 준비 작업인 인공지능 모델 다운 및 설치에 관해 이야기해 보려 합니다.   Llama 3.2 모델 파인 튜닝을 위한 준비 작업 이전 글에서 llama 3.1 모델을 다운로

paulsmedia.tistory.com

 

 

 

반응형