https://khw063011.tistory.com/77
지지난번에 파인튜닝에 대해서 포스팅 한적이 있다...
오늘은 파인튜닝을 직접 해보고자 한다.
챗봇 대화 화면을 만들고 싶은데
좀 더 내가 원하는 정보에 맞게끔 gpt 를 파인튜닝하는 것이 목적이다.
1. 가상 환경 만들기
VS code 에서 pip install 을 했더니 이러한 오류가 나왔다 으허허 ㅠㅠ
읽어보니... 내가 지금 Homebrew 로 관리되고 있기 때문에 직접 pip install 로 설치를 하지 못해서 생긴 문제인것같았다. 🤔
따라서 가상환경을 사용하여 독립적인 패키지 환경에서 실행을 하도록 했다.
1-1. venv 로 가상환경 만들어주기
python3 -m venv myenv
1-2. 가상환경 활성화 해주기
source myenv/bin/activate
내 프롬프트에 myenv 라는 가상환경이 생긴것이 보인다. 😍
나이스다.
** 아참 파이썬으로 가상환경을 만들어서 코드를 작성하고 있던거라면 가상환경을 꺼주는 것도 작성해줘야함!
deactivate
2. open ai 설치
pip install openai
알록달록 예쁘게 설치되었담
3. open api 발급받고 데이터 준비
3-1. open api 발급
3-2 . open api 터미널에서 연결해준다.
export OPEN_API_KEY = "자신만의 open_api_key"
3-3. data.jsonl 파일을 준비하는 코드
openai tools fine_tunes.prepare_data -f data.jsonl
3-4. 파일이 잘 저장되어있는지를 보기 위해 cat 명령어 입력해보자
cat data.jsonl
오우 굿 파일이 아주 잘 저장되어있다! 이렇게 jsonl 형식의 파일이 아주 잘 저장되어있는 것을 확인할 수 있다..
3-5. open api 에 파일이 잘 올라갔는지도 확인해보자
openai api files.list
들어가있는 것이 확인이 되었다. ‼️
이 부분을 하나씩 뜯어서 확인 좀 해보자.
각 파일이 뭐 어떻게 구성되어있는지!
id = 각 파일의 고유 ID,
bytes = 파일 크기 (바이트 단위),
created_at : 파일이 생성된 시간,
filename: 업로드된 파일의 이름
object: 객체타입(file),
purpose : 파일의 용도 (fine-tune = 파인튜닝에 사용된다.),
status : 파일의 상태 나타냄 (processed = 처리 완료되었다! ),
status_detail : 상태에 대한 추가 세부사항
4. 모델 파인튜닝 시작
4-1. 데이터 형태 정확히 하기
파인튜닝 코드를 입력했더니 이러한 오류가 나왔다. 😵
찾아보니... 유효하지 않은 training file 이라고 한다.
나는 기존에 prompt: completion 으로 이루어진 jsonl 파일로 파인튜닝을 진행하고 있었는데 이게 올바르지 않다는 것이었다.
🥲 이 부분은 gpt-3.5-turbo 와 gpt-4o 에만 해당이 되는 것 같으니 참고하자.
다른 것들..아마 davinci 이런 모델은 prompt: completion 으로 이루어진 jsonl 형태로도 충분한데
우리는 gpt-4o-mini 모델을 사용할 것이기 때문에 대화형태로 되어있는 애들을 작성해야한다.
공식문서에도 꼼꼼히 읽어보니... gpt-4o-mini 와 gpt-3.5 turbo 는 대화형식(Chat) 으로 작성해야 한다는 게 명시되어 있었다..
(머쓱 ㅎㅎ );;;
jsonl 파일을 올리기 전이라면 Chat 형식으로 올리도록 하자.
하지만 나는 이미 jsonl 파일을 올린 상태였으므로!!!
기존의 jsonl 파일을 Chat 으로 바꾸는 코드를 작성하는 게 더효율적이었다.
아참 그리고 공식문서에는 검증데이터도 올리라고 했으나...
현재 나는 별도의 검증이 필요없는 prompt 를 만들것이기 때문에 별도의 검증 데이터는 올리지 않았다.
jsonl -> Chat 형식으로 바꾸기
import json
# 기존 데이터 파일을 읽기
with open("data_prepared.jsonl", "r", encoding="utf-8") as file:
lines = file.readlines()
# 새 파일에 Chat 형식으로 데이터 저장
with open("data_prepared_chat.jsonl", "w", encoding="utf-8") as file:
for line in lines:
data = json.loads(line)
chat_format = {
"messages": [
{"role": "user", "content": data["prompt"]},
{"role": "assistant", "content": data["completion"]}
]
}
file.write(json.dumps(chat_format, ensure_ascii=False) + "\n")
오호라 공식문서에 있는 파일형식과 거의 비슷하게 나왔다. 나이스다 ㅎ
4-2. fine tunning 실행해보자!
import openai
# API 키 설정
openai.api_key = "본인 API "
# Chat 형식 데이터 파일 업로드
training_file = openai.File.create(
file=open("data_prepared_chat.jsonl", "rb"),
purpose="fine-tune"
)
# Fine-Tuning 작업 생성
fine_tune_job = openai.FineTuningJob.create(
training_file=training_file['id'],
hyperparameters={
"n_epochs": 3,
},
model="gpt-4o-mini-2024-07-18"
)
여기서 주의할점이 있다!
우리는 가격이 합리적이여서 gpt-4o-mini 를 하자고 했는데 자꾸 gpt-4o-mini 로 모델을 넣으면...
그런 모델 없다는 오류가 떴었다.. 🤔
따라서 모델의 종류를 나타내는 공식문서를 열심히 읽어보니...
gpt-4o-mini 는 gpt-4o-mini-2024-07-18 을 나타내는 것이므로 이 버전을 사용하고 있다는 것이다.
따라서 오류를 줄이기 위해 gpt-4o-mini 의 버전을 명시해주면 오류가 좀 덜 날 것이라고 생각해보았다.
오메 아주 나이스한 접근이었다 !
저 파인튜닝을 실행하라는 코드를 실행하면 열심히 실행한다는 터미널 알람이 뜬다.
자 이제 확인해보자!
5. open ai platform 에서 확인하기
https://platform.openai.com/docs/overview open ai platform 에 들어가서 우리의 api 파인튜닝이 잘 이루어지고 있는지를 확인해보자.
Dashboard > Finetunning 에 들어가면 열심히 동작하고 있는 아이들이 보일 것이다.
커커..이 많은 failed 가 보이는가.. ㅠ ㅠ 나의 열정적인 시도... 이 아이는 무시하고
오오 열심히 학습중이다 !!!! 😍
오오오 아주 나이스 @!!!
아참 작업이 끝나면 가상환경을 끝내줘야
문제없이 다른 것들도 작업을 할 수 있다!
다음 포스팅 땐 이 파인튜닝한 것들을 가지고!
어떻게 챗봇을 만드는지에 대한 포스팅을 해보겠당
reference
공식문서 https://platform.openai.com/docs/guides/fine-tuning/fine-tuning-examples
https://todaycodeplus.tistory.com/65
'인공지능' 카테고리의 다른 글
RAG 란? (0) | 2024.08.29 |
---|---|
GPT open API 와 파인튜닝(fine-tunning) 이란? (0) | 2024.08.07 |