상세 컨텐츠

본문 제목

openai api Fine-tuning으로 미세조정 해보기

카테고리 없음

by citykim 2023. 4. 10. 20:54

본문

이번 포스팅에는 window환경에서 간단하게 openai의 Fine tuning을 활용하여 언어모델의 미세조정을 해보려고한다

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

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

미세조정은 현재 davinci, curie, babbage모델만 가능하고 해당 모델은 학습 후 아무런 조정이 없는 모델이라서 현재로써는 크게 기대할 수 있는 능력은 없는편이지만 추후 다른 모델에 적용되었을때 활용하기 위해서 간단하게 진행해보도록 하자

 

 


 

 

 

Fine-tuning은 curl로도 충분히 지원할 수 있을 것 같은데 현재로써는 오직 파이썬에만 지원하고있다

스탭은 다음과같다

  1. JSONL로 미세조정할 데이터를 만든다 https://jsonlines.org/
  2. python의 openai 라이브러리의 create를 활용하여 미세조정한 모델을 만든다
  3. playground에서 테스트해본다

 

 

 


 

 

 

우선 파이썬을 설치해준다

https://www.python.org/

다운로드

 

설치는 기본옵션대로하고 이때 path설정만 추가해준다

포스팅기준 버전은 3.11이다

 

 

 


 

 

 

별다른 작업없이 직접 실행할 것이기 때문에 탐색기에서 아래폴더로 이동한다

C:\Users\ctkim\AppData\Local\Programs\Python\Python311\Scripts

 

 

 

path설정만하고 설치하였으면 보통 폴더는 아래와 같은모양이다

폴더의 모습

 

 

 

window 터미널에서 해당 폴더로 이동해준다

cmd에 pip를 입력

이후 cmd에 pip를 입력하면 위와같이 뜰 것이다 (안된다면 path설정을 해보자)

 

 

 

그리고 메뉴얼대로 openai패키지를 설치해준다

pip install --upgrade openai

 

 

 

설치후에 해당 폴더내에 test.jsonl 파일을 생성해준다

파일생성

 

 

그리고 테스트를 위해 다음과같이 입력해주었다

// test.jsonl
{"prompt": "김일이", "completion": "개발자"}
{"prompt": "김이삼", "completion": "개발자"}
{"prompt": "김삼사", "completion": "개발자"}
{"prompt": "김사오", "completion": "개발자"}
{"prompt": "김오육", "completion": "개발자"}
{"prompt": "김육칠", "completion": "개발자"}

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

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

openai에서는 위와같은 사례 또는 고급 사용 법으로 작성메뉴얼이 있는데 종료토큰과 최소 500개의 예제 및 json line 하나가 2048을 넘지 않는등 조건이 있지만 단순이 경험을 위해서 위와같이만 입력한다

 

 

 

이후 cmd 경로내에서 아래와같이 실행하는데

openai --api-key=<YOUR_KEY> api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>

YOUR_KEY에는 openai api secret key를

TRAIN_FILE_ID_OR_PATH에는 조정할 파일을(여기서는 test.jsonl)

BASE_MODEL은 davinci, curie, babbage 중 하나를 (여기서는 davinci를 사용했다)

 

 

 

위와같이 진행되며 파일id, cost, queue대기등 정보를 볼 수 있다 파일 업로드 후에는 백그라운드로 진행된다

종료된후 잠시 기다린후 playground로 이동하면 모델이 업로드된걸 확인할 수 있다

 

모델이 생성되었다

 

 

 


 

 

 

모델이 생성되었으면 테스트를 해보자

davinci

davinci 모델을 사용한 결과

 

 

 

tuning

학습된결과 🤔

 

 

 

아무런 목적없이 그냥 prompt를 completion으로 치환만 하도록 하였더니 위와같이 적절하게 치환은 했지만 썩 바람직한 모습은 아니게 나왔다

 

 

 

사실 미세조정을 소개하기위해 아무렇게나 작성한 것이지 원래 미세모델은

특정 프롬프트를 yes 또는 no로 설정하여 오기를 줄이거나

{"prompt": "Company: <Our company> helps sell cars", "completion": " yes"}
{"prompt": "Company: <Our company> supports the sale of groceries", "completion": " no"}

 

특정 문구에 대하여 감정을 변경할 수도 있으며

{"prompt": "Company foo's products are inexpensive and perform well", "completion": " positive"}
{"prompt": "Company foo is a mess", "completion": " negative"}

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

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

다양한 사례를 통하여 모델을 학습시킬 수 있다

 

 

 

현재로써는 davinci 모델만 지원하기에 아주 매끄럽다 싶은 결과는 얻을 수 없지만 추후 다른 모델의 미세조정을 지원할때 더 효과적인 결과를 얻을 수 있을 것으로 생각된다

댓글 영역