본문 바로가기
데이터&AI

Python API를 활용하여 OpenAI 교육(파인튜닝, Fine tuning)하기

by 일등박사 2023. 3. 4.

안녕하세요!!!!

 

최근 OpenAI에서 새로운 GPT 모델인 gpt-3.5-turbo를 출시하였습니다!!

하지만 아쉽게도  GPT를 교육할 수 있는 fine-tuning 모델은 아직 기존 모델로만 가능한데요~!

 

 

이번 포스팅에서는 python 의 api방식을 활용하여

GPT의 Fine-tuning model을 작동시키는 방법을 알아보겠습니다!!

 


1. API 세팅

- 우선 openai의 패키지를 불러온 뒤, api 기반으로 세팅을 끝내줍니다!

(api 키 받는 방법은 아래 글을 참고해주세요!)

2023.03.04 - [일등박사의 생각/데이터분석] - OpenAI의 ChatGPT를 파이썬 API로 이용하기(gpt-3.5-turbo)

 

OpenAI의 ChatGPT를 파이썬 API로 이용하기(gpt-3.5-turbo)

안녕하세요!!! 미국시간 3/1일! OpenAI사에서 드디어 최신의 GPT를 API서비스로 오픈했습니다!! gpt-3.5-turbo라는 이 신규 API는 1K토큰당 0.002$로, 기존의 GPT api였던 text-davinci-003($0.0200 / 1K tokens) 의 1/10 수

drfirst.tistory.com

 

import pandas as pd
import openai
API_KEY = '{나만의 API키}'
openai.api_key = API_KEY

2. 데이터 준비!

- gpt에 교육시키고자 하는  내용을 Pandas DataFrame의 형태로 불러옵니다.

- 이번에는 일등박사어를 교육시킨다는 목표로 진행해보겠습니다!

df = pd.DataFrame({
    'questions':['일등과 박사로 구성된 언어는 무엇인가?','일등박사어에서 만날때하는말은?','일등박사어에서 해어질때하는말은?','만나서 하는말. 일등','해어지는 상황에서 하는말. 박사'],
    'answers':['일등박사어','일등','박사','일등','박사'],
})

df_gpt = df[['questions','answers']]
df_gpt.columns = ['prompt','completion']
df_gpt

 

다음으로는 csv로 저장하고, openai의 cli를 활용하여 json 파일을 만들어줍니다!

#saving the new csv file
df_gpt.to_csv('drfirst.csv')

!yes | openai tools fine_tunes.prepare_data -f 'drfirst.csv'

 

위 코드를 실행하면 해당 디렉토리에 {원래파일명}_prepared.jsonl 이라는파일이 생깁니다.

 

위 과정은 단순히 다음과 같이 데이터프레임을 바꾸어주는것입니다!!

drfirst_prepared.jsonl는 아래와 같아요~~!

{"prompt":"일등과 박사로 구성된 언어는 무엇인가? ->","completion":" 일등박사어\n"}
{"prompt":"일등박사어에서 만날때하는말은? ->","completion":" 일등\n"}
{"prompt":"일등박사어에서 해어질때하는말은? ->","completion":" 박사\n"}
{"prompt":"만나서 하는말. 일등 ->","completion":" 일등\n"}
{"prompt":"해어지는 상황에서 하는말. 박사 ->","completion":" 박사\n"}

 

해당 파일을 열어줍니다.

#creating a file id from the jsonl file
with open("drfirst_prepared.jsonl") as f:
    response = openai.File.create(file=f, purpose='fine-tune')
    print(response)

 

이제!! openai에 api를 통하여 모델 생성을 요청합니다!

davinci 모델을 사용할게요!!

#the file id is then used to create finetune model
response = openai.FineTune.create(training_file=response['id'], model='davinci')
print(response)

이젠!! 모델이 잘 만들어졌는지 확인해봅니다!

response = openai.FineTune.retrieve(id=response['events'][0]['message'].split(':')[1].replace(' ',''))
print(response['status'])
print(response)

처음 만들고 2~3분 정도가 걸린다고 공식 사이트에 나와있네요!

아직은 pending status입니다!!

기다리다보면 다음 그림과 같이 success 라는것을 확인할 수 있습니다!!

 

 

 

모델명을 확인해볼까요!?

response['fine_tuned_model']

모델이 잘 생성되었다!!

openai의 API usage 메뉴에서도 해당 모델을 확인할 수 있습니다1!

 

이제, 모델이 잘 학습하였는지 물어볼까요!??

ft_model = response['fine_tuned_model']
res = openai.Completion.create(model=ft_model, prompt="일등과 박사로 구성된 언어?", max_tokens=18, temperature=0.4)
print(res['choices'][0]['text'])

알려준 대로 잘 대답을 합니다!^^

(계속 돌려보면 이상한 답을 할떄도 있습니다!)

 

이 모델을 활용하여 만들고 싶은 내용을 학습시킬 수 있겠네요!^^

댓글