[Python]GPT 3.5 model Fine-tuning

JUNYOUNG·2024년 4월 8일
post-thumbnail

GPT Fine-tuning 기록


키발급: https://platform.openai.com/api-keys

파인튜닝을 위한 환경 설정 및 데이터 준비

파인튜닝 과정을 시작하기 전에 필요한 라이브러리를 설치하고 기본 환경을 설정해야 합니다. Google Colab 노트북에서는 datasetsopenai 라이브러리를 설치하여 OpenAI API와 상호작용할 수 있습니다.

!pip install datasets
!pip install openai

데이터셋을 정의하여 파인튜닝에 사용할 학습 데이터를 생성합니다. 예시로, 사용자 질문과 시스템 답변을 포함하는 간단한 데이터셋을 사용합니다.

import os
import json

dataset = {
    "system": "You are a helpful assistant",
    "train": [
        {"instruction": "가장 가까운 커피숍이 어디에 있나요?", "output": "가장 가까운 커피숍은 5분 거리에 있는 메인 스트리트에 있습니다."},
        # 나머지 데이터 항목...
    ]
}

학습 데이터 생성

학습 데이터는 대화 형식으로 구성되며, 시스템, 사용자, 보조자 간의 인터랙션을 나타냅니다.

list_message = []
num_data = len(dataset["train"])

for i in range(num_data):
    instruction = dataset["train"][i]["instruction"]
    output = dataset["train"][i]["output"]
    message = [
        {"role": "system", "content": dataset["system"]},
        {"role": "user", "content": instruction},
        {"role": "assistant", "content": output},
    ]
    list_message.append(message)

with open("output1.jsonl", "w", encoding='utf-8') as file:
    for messages in list_message:
        json_line = json.dumps({"messages": messages}, ensure_ascii=False)
        file.write(json_line + '\n')

파일 업로드 및 모델 생성

파인튜닝 파일을 OpenAI에 업로드하고, 이를 사용하여 새 모델을 학습합니다.

from openai import OpenAI
client = OpenAI(api_key="API_KEY")

# 파일 업로드
client.files.create(
    file=open("output1.jsonl", "rb"),
    purpose="fine-tune"
)

# 모델 생성
client.fine_tuning.jobs.create(
    training_file="FILE_ID",
    model="gpt-3.5-turbo"
)

실행 후 openai > fine-tuning 에 들어가보면 이처럼 학습 중인 걸 확인 가능

학습 결과 확인

학습된 모델을 사용하여 입력 데이터에 대한 응답을 생성하고 결과를 확인합니다.

import pprint
results = []
for item in dataset["train"]:
    completion = client.chat.completions.create(
        model="MODEL-NAME",
        messages=[
            {"role": "user", "content": item['instruction']}
        ]
    )
    results.append({
        "input": item["instruction"],
        "output": completion.choices[0].message.content
    })

# 결과를 구조화하여 출력
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(results)

colab code

https://colab.research.google.com/drive/1QXhRflNbFgNAWut8LbXzur6mMt062WcK?usp=sharing

결과 비교

학습 전학습 후

Ref

https://platform.openai.com/docs/guides/fine-tuning/use-a-fine-tuned-model
https://cookbook.openai.com/examples/chat_finetuning_data_prep
https://platform.openai.com/docs/api-reference/fine-tuning
https://www.youtube.com/watch?v=WsMB0hOEosI&t=326s

profile
Onward, Always Upward - 기록은 성장의 증거

0개의 댓글