GPT fine-tuning - 1. data preparation on OpenAI Platform

Dongyoung Kim·2023년 2월 24일
4

GPT

목록 보기
2/12
post-thumbnail

🐰 Dongyoung:
GPT fine tuning 하기위해 데이터 준비는 어떻게 해야하는가?

🦄 ChatGPT:
GPT 미세 조정을 위한 데이터를 준비하려면 다음 단계를 따르세요.

  1. 데이터 수집: 먼저 미세 조정을 위한 데이터를 수집해야 합니다. 여기에는 적절한 크기와 다양한 데이터 세트를 선택하는 것이 포함됩니다.

  2. 데이터 전처리: 수집된 데이터를 적절한 형식으로 전처리해야 합니다. 예를 들어 텍스트 데이터를 사용하는 경우 문장 분할, 토큰화, 정규화를 수행해야 합니다.

  3. 데이터 분할: 전체 데이터 세트를 학습, 검증으로 분할해야 합니다. , 테스트 세트. 일반적으로 훈련에 80%, 검증에 10%, 테스트에 10%를 할당할 수 있습니다.

  4. 초매개변수 조정: 학습률, 배치 크기와 같은 하이퍼매개변수를 조정해야 합니다. , 에포크 수 등.

  5. 모델 학습: 전처리된 데이터를 사용하여 GPT 모델을 미세 조정합니다. 이렇게 하면 새 데이터에서 더 나은 성능을 얻을 수 있습니다.

  6. 모델 평가: 검증 및 테스트 데이터 세트를 사용하여 훈련된 모델을 평가합니다. 이렇게 하면 모델의 정확성과 일반화 능력을 평가하는 데 도움이 됩니다.

이러한 단계를 따르면 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 쌍 입니다.

예시)

promptcompletion
주택청약예금의 비대면채널을 통한 상품 전환(이자지급방법 변경)이 가능한가요...주택청약예금(월이자지급식)을 상품 전환(예금담보대출 포함)하는 경우\n「주택공급에...
미성년자인 자녀 예금의 제신고, 해지 등의 업무를 하려고 합니다. 친권자 ...가능합니다.\n부모님이 내점하여 미성년자 자녀명의 예금의 제신고, 해지 등의 업무...

...

데이터 포멧팅

Open AI GPT 에 Q&A fine tuning 을 위해서는 다음과 같이 데이터를 준비하라고 공식메뉴얼에 명시되어 있습니다.

  • csv 파일 형식으로 만드는데, 컬림 제목이 prompt completion 로 QA 셋으로 준비되어야 합니다
  • 프롬프트 또는 컴플리션 데이터 준비할때 대소문자 구별하지말고 다 소문자로 넣으라고 하네요.
  • 프롬프트의 끝은 항상 \n\n###\n\n"로 끝나야 합니다.
  • 컴플리션의 시작은 빈 스페이스로 해야하며, 끝은 항상 END로 끝나게 작성해야 합니다.
  • 최소 500개의 예제가 필요합니다
  • 프롬프트와 컴플리션의 합이 2,048 tokens 이 넘지 않아야 합니다 (\n\n###\n\n",END 포함)
  • 대략적으로 한글 케릭터 수 *2 = 토큰수 정도 되는것 같습니다. (https://platform.openai.com/tokenizer 참고) 즉 프롬프트와 컴플리션의 합이 1,000 자 이하가 되어야 합니다.
  • 데이터 퀄리티가 좋아야 합니다 (실제 원하는 답변의 모양 수준으로)
  • Fine tuning 시 낮은 learning rate 로 1-2 epochs 만 돌려야 합니다.

데이터 변환

준비된 데이터는 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 을 실행하는 방법 및 예상시간도 함께 알려줍니다.

profile
AI professional for science and industry

0개의 댓글