🐰 Dongyoung:
GPT fine tuning 하기위해 데이터 준비는 어떻게 해야하는가?🦄 ChatGPT:
GPT 미세 조정을 위한 데이터를 준비하려면 다음 단계를 따르세요.
데이터 수집: 먼저 미세 조정을 위한 데이터를 수집해야 합니다. 여기에는 적절한 크기와 다양한 데이터 세트를 선택하는 것이 포함됩니다.
데이터 전처리: 수집된 데이터를 적절한 형식으로 전처리해야 합니다. 예를 들어 텍스트 데이터를 사용하는 경우 문장 분할, 토큰화, 정규화를 수행해야 합니다.
데이터 분할: 전체 데이터 세트를 학습, 검증으로 분할해야 합니다. , 테스트 세트. 일반적으로 훈련에 80%, 검증에 10%, 테스트에 10%를 할당할 수 있습니다.
초매개변수 조정: 학습률, 배치 크기와 같은 하이퍼매개변수를 조정해야 합니다. , 에포크 수 등.
모델 학습: 전처리된 데이터를 사용하여 GPT 모델을 미세 조정합니다. 이렇게 하면 새 데이터에서 더 나은 성능을 얻을 수 있습니다.
모델 평가: 검증 및 테스트 데이터 세트를 사용하여 훈련된 모델을 평가합니다. 이렇게 하면 모델의 정확성과 일반화 능력을 평가하는 데 도움이 됩니다.
이러한 단계를 따르면 GPT 미세 조정을 위한 적절한 데이터 세트를 준비할 수 있습니다.
OpenAI 는 GPT 모델에 대한 fine-tuning 을 PaaS 형태로 제공해줍니다.
기본적으로 공식 Documentation 에서 사용방법에 대해 상세히 소개하고 있으며, 본 기록은 이를 따라하면서 경험한 내용입니다.
본 fine tuning 의 목적은 특정 도메인의 Q&A를 할 수 있는 Chat 을 할수 있는 모델을 만들어 보려합니다.
openai 의 PaaS 를 이용하기위해서는 우선 openai api 에 회원가입하고 사용료를 선지불 합니다. 참고로 현재 가입하면 $18 을 grant 해줍니다.
이후 api key 를 발급받고 (https://platform.openai.com/account/api-keys) 사용하는 컴퓨터 (또는 서버) 에 셋팅해줍니다.
export OPENAI_API_KEY="<OPENAI_API_KEY>"
openai cli 및 wandb 를 설치해줍니다. 저는 python 3.8
환경에서 진행하였습니다.
pip install --upgrade openai wandb
데이터 준비에 대한 공식 메뉴얼은 아래를 참조합니다.
https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset
OpenAI 의 GPT fine tuning 을 위해서는 기몬적으로 질문(prompt
)-답변(completion
) 쌍의 데이터를 준비해야합니다. 편한 방식대로 데이터를 준비해주면 되며, 제 경우에는 two column 의 prompt
,completion
헤딩이 있는 csv 파일로 준비합니다.
제 경우에는 제가 소속한 회사의 웹사이트 FAQ 를 크롤링하여 사용하였습니다. 이는 금융분야에 대한 질문 답변으로 ChatGPT 등이 답할수 없는 특정 도메인의 내용을 담고 있으며, 크롤링으로 모은 데이터는 1,000 개의 Q&A 쌍 입니다.
예시)
prompt | completion |
---|---|
주택청약예금의 비대면채널을 통한 상품 전환(이자지급방법 변경)이 가능한가요... | 주택청약예금(월이자지급식)을 상품 전환(예금담보대출 포함)하는 경우\n「주택공급에... |
미성년자인 자녀 예금의 제신고, 해지 등의 업무를 하려고 합니다. 친권자 ... | 가능합니다.\n부모님이 내점하여 미성년자 자녀명의 예금의 제신고, 해지 등의 업무... |
...
Open AI GPT 에 Q&A fine tuning 을 위해서는 다음과 같이 데이터를 준비하라고 공식메뉴얼에 명시되어 있습니다.
prompt
completion
로 QA 셋으로 준비되어야 합니다\n\n###\n\n"
로 끝나야 합니다.
빈 스페이스로 해야하며, 끝은 항상 END
로 끝나게 작성해야 합니다.\n\n###\n\n"
,END
포함)준비된 데이터는 openai cli
를 통해 jsonl
파일로 변환합니다.
openai tools fine_tunes.prepare_data -f ./파일명.csv
위 cli 도구는 다양한 데이터 검증을 수행하고, 문제가 없으면 fine-tuning 에 사용할 수 있는 jsonl 형태로 포멧을 변환해줍니다. 문제가 있거나 수정이 필요하다면 친절히 알려줍니다. 데이터에 따라 안내사항은 달라질 수 있습니다.
Analyzing...
- Based on your file extension, your file is formatted as a CSV file
- Your file contains 314 prompt-completion pairs
- All prompts end with suffix `\n\n###\n\n`
- All completions end with suffix ` END`
Based on the analysis we will perform the following actions:
- [Necessary] Your format `CSV` will be converted to `JSONL`
Your data will be written to a new JSONL file. Proceed [Y/n]: Y
Wrote modified file to `../data/파일명.jsonl`
Feel free to take a look!
Now use that file when fine-tuning:
> openai api fine_tunes.create -t "../data/파일명.jsonl"
After you’ve fine-tuned a model, remember that your prompt has to end with the indicator string `\n\n###\n\n` for the model to start generating completions, rather than continuing with the prompt. Make sure to include `stop=[" END"]` so that the generated texts ends at the expected place.
Once your model starts training, it'll approximately take 6.76 minutes to train a `curie` model, and less for `ada` and `babbage`. Queue will approximately take half an hour per job ahead of you.
Fine tuning 을 실행하는 방법 및 예상시간도 함께 알려줍니다.