반응형

이번엔 LLM을 로컬 환경에서 직접 Fine-tuning 하는 방법을 알려드릴게요. 이번 포스팅에선 AI 초보자가 Fine tuning이 무엇인지 이해하고, 간단하게 실습을 해보는데 초첨을 맞췄습니다. 잘 따라와 주세요.


LLM과 Fine-tuning의 기본 이해

대형 언어 모델(LLM)은 방대한 데이터를 학습하여 인간과 유사한 자연어 생성 및 이해를 가능하게 하는 AI 기술입니다. 그러나 사전 학습(pre-training)된 모델은 특정 도메인이나 사용자 요구에 맞춰 최적화되지 않을 수 있습니다. 이를 보완하기 위해 Fine-tuning을 진행하는데, Fine-tuning은 기존 모델을 추가 데이터로 재학습시켜 특정 작업에 더욱 특화된 성능을 발휘하도록 만드는 과정입니다. 이 과정은 모델의 활용도를 극대화하고, 보다 맞춤형 응용 프로그램 개발에 큰 도움을 줍니다. 


로컬 환경 구축의 필요성과 준비 사항

로컬에서 LLM 모델을 Fine-tuning 하려면 우선 개발 환경을 마련해야 합니다. 일반적으로 GPU가 장착된 컴퓨터와 Python, PyTorch 또는 TensorFlow와 같은 딥러닝 프레임워크가 필요합니다. 또한, 모델 학습에 필요한 라이브러리와 도구들을 미리 설치해 두어야 하며, 특히 메모리 용량과 연산 능력이 충분한지 확인하는 것이 중요합니다. 로컬 환경에서 Fine-tuning을 수행하면 클라우드 사용료 부담을 줄일 수 있고, 데이터 보안 측면에서도 유리합니다.


데이터 준비와 전처리 과정

Fine-tuning의 성공 여부는 학습 데이터의 품질에 크게 좌우됩니다. 우선, 도메인에 맞는 텍스트 데이터를 수집한 후, 이를 모델이 이해할 수 있는 형식으로 가공해야 합니다. 데이터 전처리 단계에서는 불필요한 문장이나 기호를 제거하고, 토큰화(tokenization), 정제(cleaning) 등의 작업을 수행합니다. 또한, 데이터의 양이 충분하지 않을 경우 데이터 증강(data augmentation) 기법을 활용해 학습용 데이터를 보충할 수 있습니다. 이렇게 준비된 데이터는 모델이 특정 작업에 대해 보다 정확한 예측을 할 수 있도록 돕습니다


Fine-tuning 프로세스의 단계별 진행

실제 Fine-tuning은 다음과 같은 단계로 진행됩니다. 첫째, 사전 학습된 LLM 모델을 불러옵니다. 둘째, 준비된 데이터를 모델에 입력하여 학습을 시작합니다. 이때, 학습률(learning rate)이나 배치 사이즈(batch size)와 같은 하이퍼파라미터를 적절히 조절하는 것이 중요합니다. 셋째, 학습 과정에서 발생하는 손실(loss)을 모니터링하며, 필요시 조기 종료(early stopping)나 가중치 조정 등의 기법을 적용합니다. 마지막으로, 학습이 완료된 모델의 성능을 평가하고, 실제 애플리케이션에 적용할 수 있도록 최적화합니다. 이러한 단계별 과정은 로컬 환경에서도 충분히 구현할 수 있으며, 단계마다 발생할 수 있는 문제점을 사전에 파악하고 해결하는 것이 성공적인 Fine-tuning의 열쇠입니다.


실습 예제와 코드 샘플

초보자도 쉽게 따라 할 수 있도록 간단한 코드 예제를 소개합니다. Python 기반의 PyTorch 프레임워크를 이용해 사전 학습된 LLM 모델을 불러오고, Fine-tuning을 수행하는 과정은 대략 다음과 같습니다.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments

# 모델과 토크나이저 로드
model_name = "your-pretrained-llm-model"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 데이터셋 준비 (예: 텍스트 파일을 읽어와 전처리)
def load_dataset(file_path):
    with open(file_path, "r", encoding="utf-8") as f:
        texts = f.readlines()
    # 간단한 전처리
    texts = [text.strip() for text in texts if text.strip()]
    return texts

train_texts = load_dataset("train_data.txt")
# 토큰화 및 데이터셋 구성
train_encodings = tokenizer(train_texts, truncation=True, padding=True)
train_dataset = torch.utils.data.TensorDataset(torch.tensor(train_encodings["input_ids"]))

# 학습 설정
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    save_steps=10,
    logging_steps=10,
)

# Trainer 객체 생성 및 학습 시작
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
)
trainer.train()

이 코드는 단순 예제이므로, 실제 데이터와 하이퍼파라미터 조정은 상황에 맞게 변경해야 합니다. 코드 실행 전 반드시 환경 설정과 데이터 형식을 재확인해야 하며, 발생할 수 있는 오류에 대비해 디버깅을 충분히 진행하는 것이 좋습니다.


Fine-tuning 후 모델 평가 및 적용

Fine-tuning이 완료되면, 모델의 성능을 평가하는 과정이 필요합니다. 평가 데이터셋을 별도로 준비해 모델이 학습한 내용을 얼마나 잘 일반화하는지 확인하고, 실제 사용 사례에 맞게 최종 성능을 검증합니다. 평가 결과가 만족스럽지 않을 경우, 데이터 품질 개선, 하이퍼파라미터 조정, 또는 추가 학습 등의 방법을 통해 모델을 개선할 수 있습니다. Fine-tuning 후의 모델은 특정 도메인에 최적화되어, 일반 사전 학습 모델보다 훨씬 높은 정확도와 유연성을 보입니다.


문제 해결과 최적화 전략

로컬 환경에서 Fine-tuning을 진행하다 보면 메모리 부족, 과적합(over fitting), 학습 속도 저하 등의 문제가 발생할 수 있습니다. 이를 해결하기 위해 배치 사이즈를 조정하거나, Gradient Accumulation, Mixed Precision Training 등의 기법을 활용할 수 있습니다. 또한, 학습 데이터를 다양화하고 정제하는 과정이 필요하며, 하이퍼파라미터 튜닝을 반복적으로 수행해 최적의 모델 상태를 찾는 것이 중요합니다. 이러한 최적화 전략들은 실제 프로젝트 경험을 통해 점차 축적되며, Fine-tuning 작업의 성공률을 높여줍니다.


맺음말: 로컬 환경에서 Fine-tuning의 미래

이번 튜토리얼에서는 LLM 모델을 로컬 환경에서 직접 Fine-tuning 하는 방법과 그 과정을 단계별로 설명했습니다. Fine-tuning은 사전 학습된 모델을 특정 도메인에 맞게 재조정하는 강력한 기법으로, 사용자가 직접 실습으로 AI 모델의 성능을 극대화할 수 있는 기회를 제공합니다. 클라우드 자원에 의존하지 않고 로컬에서 실험함으로써 데이터 보안과 비용 절감의 이점을 누릴 수 있으며, 지속적인 학습과 최적화를 통해 더욱 정교한 모델을 구축할 수 있습니다. 앞으로 Fine-tuning 기술은 다양한 산업 분야에서 맞춤형 AI 솔루션 개발에 핵심 역할을 하게 될 것이며, 여러분의 프로젝트에도 큰 변화를 가져다줄 것입니다.

반응형
반응형

지난 포스팅에서 Deepseek-R1 을 Local에서 실행하는 방법(LINK)을 알려줬는데요, 이번에는 LLM model을 쉽고 간편하게 관리하는 방법을 알려드릴게요. ollama만으로는 기존 채팅 이력을 찾기도 힘들고, 모델을 관리하기도 힘들 거에요. 기존 채팅 이력이나, 모델을 관리하는 데는 OpenWebUI 라는 프로그램을 쓰면 아주 편리하답니다. 설치하는 방법은 어렵지 않습니다. 아래 방법대로 따라오세요!

 


STEP 1. Docker 설치

Docker 사이트(LINK)에 접속해서, 'Download Docker Desktop'을 클릭하고, 운영체제에 맞는 설치 파일을 다운로드하고 설치해 주세요. 

 

아래처럼 Docker 프로그램이 실행되면 정상적으로 설치된 것입니다. 저는 open-webui까지 미리 세팅해 놓아서 Containters에 보이는데 원래는 아무것도 없는 것이 정상입니다.

 

STEP 2. OpenWebUI 설치하기

github 페이지를 통해서 OpenWebUI를 설치할 겁니다. 이 LINK에서 밑으로 쭉 내려가면 아래처럼 Installation 방법이 있는데 저희는 ollama가 설치되어 있기 때문에 첫 번째 방법으로 진행할 겁니다. 오른쪽의 복사 버튼을 누르시고, 명령 프롬프트를 열어서 복사한 code를 붙여 넣고 실행해주세요.

 

이후에 자동으로 설치가 진행될 텐데, 저는 이미 설치를 진행했기 때문에, 아래 화면처럼 나오네요. 처음 설치하신다면 완료될 때 까지 기다려 주시면 됩니다.

 

STEP 3. OpenWebUI 실행하기

다시 docker로 되돌아가면 아래처럼 Containers에 OpenWebUI가 생겼을 텐데 Port에서 '3000:8080'을 클릭하면 아래처럼  새로운 브라우저 창이 뜨면서 OpenWebUI가 실행됩니다.

 

이제 끝이 다 왔습니다. 새로운 페이지가 뜨면 회원가입도 해주시고, 로그인까지 하면 ChatGPT와 매우 유사한 인터페이스가 보입니다. 실제 사용 방법도 유사합니다. 왼쪽에선 기존 채팅 이력을 볼 수 있고, 위쪽에서는 LLM model을 선택하고, 가운데에서 채팅을 진행하면 됩니다. 테스트로 deepseek-r1(14b)와 대화를 나눠봤는데 정상적으로 실행되네요.

 

FINAL. 마무리

사용하면서 느낀 거지만 local로 LLM을 돌리기 위해선 컴퓨터 사양이 매우 중요한 것 같습니다. 제 컴퓨터 사양이 그렇게 좋지 못하여, 14b model 쓰면 답변에 30~60초 가량 걸려 좀 답답하더라고요. 그렇다고 더 낮은 model을 쓰기엔 답변이 맘에 들지 않고 참 난감합니다. 이번에 5000번 대 그래픽카드가 나온다고 하는데, 한 번 업그레이드를 고려해 봐야겠습니다.

반응형
반응형

이번에 Deepseek사에서 R1이라는 새로운 추론형 모델을 공개했는데, 아주 핫합니다.

추론형 모델인데 성능이 OpenAI의 추론형 모델인 O1에 밀리지 않고, 가장 중요한 건 오픈소스에 무료로 사용 가능하다는 것이지요.

 

deepseek-r1을 이용하는 방법으로 온라인/오프라인 두 가지가 있는데, 온라인으로 사용하는 건 간단합니다. Deepseek 사이트(LINK)에서 바로 회원가입 후 이용할 수 있습니다. 오프라인으로는 오픈소스를 다운받아 설치 후 간단하게 이용할 수 있습니다. 굳이 왜 번거롭게 local로 사용하냐고 생각할 수 있지만, 몇 가지 장점이 있습니다.

1. 개인 LOCAL 서버/PC에서 실행하여 개인정보 보호

2. API 호출 비용이 없어 장기적 비용 절감(하지만 초기 하드웨어엔 투자 필요..)

3. 모델 수정/최적화 자유로워 개인 업무에 맞게 파인튜닝 가능

 

개인 사용자라면 컴퓨터 사양이 좋아야겠지만, 성능만 괜찮다면 개인정보도 보호할 수 있고, 용도에 맞게 튜닝할 수 있기 때문에 충분히 해볼 만한 가치가 있습니다. Local 설치하는 방법은 어렵지 않은데 아래 방법대로 따라와 주시면 됩니다!


 

STEP 1. Ollama 설치

아래 링크에서 Ollama를 설치해 주세요. (LINK)

회원가입 없이 Download 하여 Install 하면 됩니다.

 

Ollama

Get up and running with large language models.

ollama.com

 

 

STEP 2. Deepseek-R1 설치

Ollama 사이트도 돌아가서 'deepseek-r1' 을 검색하여 클릭하고, 원하는 용량을 선택하세요.

테스트 용도로는 1.5b가 적당하고, 실제로 사용하려면 8b 이상을 추천해 드립니다.

본인 컴퓨터 사양에 맞게 고르고 옆의 코드를 복사합니다. (1.5b라면 'ollama run deepseek:r1:1.5b')

프톰프트 창을 실행하여 복사한 텍스트를 넣어 실행하면 자동으로 다운로드 됩니다.

 

STEP 3. 끝! Deepseek-R1과 대화

download가 끝나면 자동으로 실행이 되고, 마음껏 대화하면 됩니다.

저는 1.5b, 8b를 두 가지 모두 설치해 봤는데, 1.5b는 한국어를 이해는 하나 정상적으로 답변을 하지 못하여 8b와 대화를 하였습니다. 처음엔 영어로 답변하였는데, 한국어로 답변해달라고 요청하니 이후 질문에 대해서는 한국어로 답변해 주더라구요. 문법은 약간 어색하지만, 중간에 <think>로 되어 있는 추론하는 과정이 흥미롭네요. deepseek가 실제로 어떻게 생각하고 답변하는 알 수 있고, 이를 활용하면 더 model을 잘 활용할 수 있을 것으로 보입니다.

 

 

 

 

반응형

+ Recent posts