[GPT]GPT-3.5 Turbo Fine Tuning 시켜보기

2024. 3. 9. 01:05DL

얼마전 Open AI의 API를 활용하여 간단한 체팅을 구현해보는 글을 올렸었는데요 이번에는 그 GPT모델을 내가 직접 Fine Tuning해보도록 하겠습니다.

 

먼저 GPT의 Fine Tuning은 다음과 같을 때 하게됩니다.

 

Introduction

Fine-tuning lets you get more out of the models available through the API by providing:

  • Higher quality results than prompting
  • Ability to train on more examples than can fit in a prompt
  • Token savings due to shorter prompts
  • Lower latency requests

OpenAI's text generation models have been pre-trained on a vast amount of text. To use the models effectively, we include instructions and sometimes several examples in a prompt. Using demonstrations to show how to perform a task is often called "few-shot learning."

Fine-tuning improves on few-shot learning by training on many more examples than can fit in the prompt, letting you achieve better results on a wide number of tasks. Once a model has been fine-tuned, you won't need to provide as many examples in the prompt. This saves costs and enables lower-latency requests.

출처 : https://platform.openai.com/docs/guides/fine-tuning

 

다음과같이 Open AI에서는 설명하고 있습니다. 

 

저는 이 케이스들 중 Higher quality results than prompting 이것에 집중하여 Fine tuning을 진행하고자 했습니다.

 

GPT Fine Tuning 

 

방법은 다음과 같습니다.

 

1. GPT에게 내가 원하는 질문을 해본다.

2. 만약 정상적인 답변을 지원하지 않는다면 나는 내가 질문한 내용을 프롬프르트로 만들어 GPT에게 전달합니다.

3. 내가 전달한 정보를 바탕으로 Open AI에서 제공하는 Fine Tuning을 위한 JSONL 포맷에 맞는 데이터를 생성하기를 요청합니다.

4. 생성된 데이터를 JSONL 파일로 생성하고 아래 코드를 따라 진행합니다.

 

from openai import OpenAI

client = OpenAI(
  organization='YOUR ORG',
  api_key='YOUR API KEY'
  )

# 학습용 데이터 전송
client.files.create(
  file=open("training.jsonl", "rb"),
  purpose="fine-tune"
)

# validation 데이터 전송
client.files.create(
  file=open("val_data.jsonl", "rb"),
  purpose="fine-tune"
)

 

이렇게 데이터를 전송하고 나면 아래 그림처럼 Storage 항목에 내가 보낸 데이터가 저장되게 됩니다. 

open ai api관리 페이지에 Storage에 생성된 학습용 데이터

저장된 데이터를 선택하면 File ID라는것이 있는데 이것을 누르면 자동으로 복사가 됩니다!

 

client.fine_tuning.jobs.create(
  training_file="training_file_id", 
  validation_file="validation_file_id",
  hyperparameters={
      "n_epochs":  "3"
  },
  model="gpt-3.5-turbo"
)

이제 이 코드를 사용하여 Fine Tuning을 실행시킵니다. 이렇게 진행시킨 튜닝모델은 마찬가지로 Open AI api관리 페이지에서 볼 수 있습니다.

학습된 Tuning Model

이 모델도 역시 ID가 부여되어 있고 실제로 이전글에서 만들어둔 쳇 코드에 Model 부분에 해당 Model_ID를 입력하여 학습된 모델을 사용가능합니다.(아래 링크 첨부)
https://todaycodeplus.tistory.com/62

 

[GPT]GPT API를 사용하여 간단한 쳇 시스템 만들어보기

최근들어서 GPT를 활용하여 할 수 있는 일들이 늘어나고 있습니다. 가령 내가 코드를 작성하더라도, 디버깅에 어려움을 겪고 있는경우에도, 작성한 쿼리가 정말 최적화가 돼 있는지 등 다양한 방

todaycodeplus.tistory.com

 

그럼 이제 문제점을 알아볼까요?

1. Fine Tuning은 거의 노가다의 영역처럼 느껴졌습니다.

  • 데이터를 Fine tuning 한다고 해서 무조건적으로 학습이 완벽하게 일어나지 않는다.
    그래서 Open AI에서도 권장하는 방법은 다양한 종류의 학습데이터셋을 10~50개 단위로 나누고 Fine Tuning을 시켜서 효과가 있는 방향을 찾아야한다고 했습니다.
  • 데이터 셋을 만드는데 괴랄한 노력이 들어간다. 
    ML, DL을 하는 사람은 모두 들어본 그 말 Garbage in Garbage out 데이터셋이 정말 내가 만들고자 하는 데이터가 잘 정제되어야만 가능합니다. <- 필자가 보기에는 이 영역이 가장 중요

    생각했던 방법은 내가 직접 쳇봇인양 대화를 생성하고 그것을 GPT를 활용하여 Data Argumentation하고 유효성을 검증하고 다시 DA 이것을 반복하며 첫번째 항목을 시행하면서 맞는 방향을 찾아내는것 

2. 실제로 많은 사람들이 Fine Tuning에서 효과를 못봄.. 

  • 물론.. 더 잘하면 잘 나오겠지만.. 우선 저는 구글링에 의존해서 하다보니 실제로 결과를 명확하게 얻은 경우를 찾기가 어려웠습니다.

 

결론

DL구축을 쉽게 해준다고 해서 혹했는데, 데이터 엔지니어링의 극한을 맛봐야할 것 같습니다.