안녕하세요.
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 미세 조정 과정에 대한 감을 잡는 데에 도움이 되셨기를 기원하겠습니다.
잘 봐주셔서 감사드립니다.
'Python > NLP Code' 카테고리의 다른 글
파이썬 챗봇 개발 라이브러리 Llama Index 예제 및 장점 정리 (0) | 2024.12.17 |
---|---|
OpenAI GPT API에서 structured output 구조로 대답을 받도록 설정하는 방법 정리(pydantic 기능 활용) (2) | 2024.11.05 |
파이썬 OPENAI 텍스트 임베딩 모델 사용 및 유사도 구하기 예제 (2) | 2024.02.14 |