Python/NLP Code

ChatGPT 모델 fine-tuning 진행하는 방법 파이썬 코드 예제

jimmy_AI 2024. 11. 10. 22:15
반응형

안녕하세요.

OpenAI에서 제공하는 GPT 모델에 원하는 데이터를 직접 학습시키는 과정이 가능한데요.

Python으로 간단하게 파인튜닝을 진행하는 예제 코드를 살펴보도록 하겠습니다.

 

참고로, 해당 과정에 대한 상세한 내용은 아래의 OpenAI 공식 document를 참고하세요.

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

 

이 글에서는 전반적인 감만 잡을 수 있는 매우 간단한 코드 스니펫 예시를 다룰 예정입니다.

 

 

데이터 준비

우선, 데이터는 각 줄마다 하나의 대화로 구성된 jsonl 파일로 준비되어야 합니다.
예시 파일의 포맷은 다음과 같습니다.

{"messages": [{"role": "system", "content": "당신은 나라 이름을 대면 수도를 알려주는 어시스턴트입니다."}, {"role": "user", "content": "대한민국"}, {"role": "assistant", "content": "서울"}]}
{"messages": [{"role": "system", "content": "당신은 나라 이름을 대면 수도를 알려주는 어시스턴트입니다."}, {"role": "user", "content": "미국"}, {"role": "assistant", "content": "워싱턴 D.C."}]}
{"messages": [{"role": "system", "content": "당신은 나라 이름을 대면 수도를 알려주는 어시스턴트입니다."}, {"role": "user", "content": "일본"}, {"role": "assistant", "content": "도쿄"}]}

 

물론, multi-turn 대화의 학습도 가능하며,

이 경우에는 각 대화에 대한 weight 지정이 가능합니다.

예제는 위에서 첨부한 OpenAI의 공식 document를 참고하세요.

 

만일, Vision 정보를 포함한 fine-tune을 진행하고 싶다면

다음과 같은 jsonl 파일 양식으로 각 line의 정보를 지정해주시면 됩니다.

{
  "messages": [
    { "role": "system", "content": "당신은 동물 사진을 인식하는 어시트턴트입니다." },
    { "role": "user", "content": "이 사진에 강아지와 고양이가 몇 마리씩 있나요." },
    { "role": "user", "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "<image url>"
          }
        }
      ]
    },
    { "role": "assistant", "content": "강아지 2마리, 고양이 2마리." }
  ]
}

 

 

GPT 모델 미세 조정 코드

학습할 데이터가 모인 jsonl 파일이 준비되었다면,

우선 다음과 같은 코드로 OpenAI client를 선언해주고, 파일을 등록합니다.

from openai import OpenAI

# 1. 클라이언트 선언
OPENAI_API_KEY = "sk-xxxx" # 사용할 OpenAI API Key
client = OpenAI(api_key=OPENAI_API_KEY)

# 2. 학습 데이터 등록
result = client.files.create(
  file=open("mydata.jsonl", "rb"),
  purpose="fine-tune"
)
print(result) # 여기서 file id 확인

 

파일이 등록되었다면, 아래와 같은 코드로 학습을 진행하고,

학습 결과를 확인해볼 수 있습니다.

# 3. 학습 진행
client.fine_tuning.jobs.create(
  training_file="file-abc123", # 위에서 찾은 파일 id
  model="gpt-4o-2024-08-06" # 모델 종류 지정
)

# 4. 학습 결과 조회
result = client.fine_tuning.jobs.list(limit=10) # 최근 10개의 학습 결과 조회
print(result) # 여기서 model id 확인

 

학습이 완료되었다면, 학습된 모델의 id가 결과 내에 조회될 것이고,

추후에 OpenAI API 호출을 진행할 때, model 파라미터

기존 모델 이름 대신 학습된 모델의 id를 지정해주시면 사용이 가능합니다.

 

이 글이 GPT 미세 조정 과정에 대한 감을 잡는 데에 도움이 되셨기를 기원하겠습니다.

잘 봐주셔서 감사드립니다.