ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬(주피터)으로 챗지피티 파인튜닝 하기 / 콘다 가상환경 세팅, Chat GPT fine-tuning for python with jupyter, conda
    인공지능/chat GPT 2024. 1. 24. 17:48
    반응형

    파이썬으로 챗지피티 3.5를 파인튜닝 해보자. 내가 알기로는 현재(2024.01.24 기준) chat gpt 4는 파인튜닝이 안되고, chat gpt 3.5는 가능하다. 

     

    가상환경 설치 & OpenAI 설치

    conda 환경에서 진행했다. 

    $ conda create -n 가상환경이름 python=3.7

     

    먼저, 다른 버전들과 겹쳐서 설치가 불가능해지기 전에 conda를 이용하여 가상환경을 설치한다. 서치 결과, 파이썬으로 확인했을 때 openai 1.8.0 버전은 파이썬 3.7 이상의 버전에서 작동하므로, (github의 안내를 참고하기 바람) 3.7로 깔았다.  

    $ conda create -n ChatGPT python=3.7

     

    위의 코드를 동작시키면 ChatGPT라는 이름을 가진 가상환경이 생긴다. 

     

    oepnai python official github 주소 : https://github.com/openai/openai-python

     

    GitHub - openai/openai-python: The official Python library for the OpenAI API

    The official Python library for the OpenAI API. Contribute to openai/openai-python development by creating an account on GitHub.

    github.com

     

    이후 가상환경을 activate 시키자. 

    $ conda activate 가상환경이름

     

    가상환경 이름을 ChatGPT로 설정했다면 아래와 같이 동작시킬 수 있다. 

    $ conda activate ChatGPT

     

    이후, activate된 가상환경 안에서 openai를 설치해준다. 

    pip install openai

     

     

     

     

    Jupyter notebook 설치

    또한, 주피터 환경에서 ChatGPT를 사용하기 위해서는 jupyter notebook도 설치해주어야한다. 

    pip install jupyter notebook
    python -m ipykernel install --user --name ChatGPT --display-name "ChatGPT”

     

    주피터 노트북에서 파이썬 파일을 새로 만들 때 해당 가상환경 내에서 작동하는 파일을 만들고 싶다면, 위와 같이 ipykernel을 설정해주어야한다.

     

    위의 코드가 작동하지 않는다면, ipykernel 라이브러리를 설치해야할 수도 있다. 

    pip install ipykernel

     

    주피터 설정이 끝나면, 가상환경이 activate된 conda 창에서 아래와 같이 주피터 노트북을 실행시킬 수 있다. 

    jupyter notebook

     

    주피터에서 파일을 새로 만들 때, 가상환경이 새롭게 뜨는 것을 확인할 수 있다.  

     

    만든 가상환경을 눌러서 주피터 노트북 파일을 생성하고, 작업을 시작한다. 

    버전을 확인해보면 해당 게시물 기준 1.8.0

     

     

    API Key 발급 

    Chat GPT를 파인튜닝 하기 위해서는 토큰이 필요하다. 구글링을 해보니 공짜 어느정도 준다는 말이 있었지만, 실제로 돌려보면 토큰을 결제하기 전까지는 계속 오류가 뜬다. 

     

    Chat GPT 4 결제와는 다르니 주의하길 바란다. 

    결제수단을 등록하고, 최소 금액 5$를 충전하는 절차를 거쳐야한다. (구글링에서는 chat GPT에 가입한지 한 달 이내이면 무료 토큰을 제공한다는 이야기도 봤는데, 사실인지는 모르니 추가적인 서치를 해보시길 바람) 

    Open AI biling : https://platform.openai.com/account/billing/overview

     

    토큰은 사용한만큼 차감되는 형식이며, 결제할 때 토큰이 부족한 경우 자동 결제를 체크하면 자동결제가 되니 주의하길 바란다. (특히 예상치 못하게 많이 사용되는 경우가 발생할 수 있으므로 아주 주의) 

    가격 정보는 다음을 참고하길 바란다 : https://openai.com/pricing

     

    Pricing

    Simple and flexible. Only pay for what you use.

    openai.com

     

    API 키를 발급받아보자. 해당 작업은 다음 공식 사이트에서 이루어진다 : https://platform.openai.com/api-keys

     

    API Key 발급

     

    Create new secret key를 눌러 새로운 key를 생성해보자. key가 뜨면 다시 보여주지 않으니, 복사하라고 할 때 잘 복사해두자. (공개된 장소에 업로드를 삼가하자) 

     

     

    데이터 구축

    {"messages": [{"role": "system", "content": "시스템 요구 사항"}, {"role": "user", "content": "유저가 치는 채팅"}, {"role": "assistant", "content": "챗지피티 답변 예시"}]}
    {"messages": [{"role": "system", "content": "시스템 요구 사항"}, {"role": "user", "content": "유저가 치는 채팅"}, {"role": "assistant", "content": "챗지피티 답변 예시"}]}
    {"messages": [{"role": "system", "content": "시스템 요구 사항"}, {"role": "user", "content": "유저가 치는 채팅"}, {"role": "assistant", "content": "챗지피티 답변 예시"}]}

     

    데이터는 다음과 같은 형태로 10개 이상의 데이터를 만족해야한다. 

    학습 실패 시

     

    10개 이하로 학습을 시킬 경우, 실패했다는 메세지를 받을 수 있다. (Training file has ~ example(s), but must have at least 10 examples.) 

     

    위와 같이 데이터 작성이 끝나면 jsonl 형식으로 저장하고, Chat GPT를 돌릴 파이썬 파일과 같은 공간에 두면 된다. 

     

    하나의 데이터는 message : 안에 role과 content 쌍을 []로 묶은 형태이다. role은 system, user, assistant가 될 수 있다.

     

    system은 시스템 요구 사항이다.

    "당신은 철자를 틀릴 수 있습니다"

    "당신은 돌려말하기를 할 수 있습니다"

    "너의 이름은 초코찜빵이며, 코딩을 해주는 로봇이야"

    와 같이, 챗지피티의 정체성을 세뇌시킬 수 있다. 

     

    user은 유저의 예시 input, assistant는 챗지피티의 예시 답변이다.

    user의 content에는 챗지피티를 사용하는 사람이 입력할 말을 적는다.

    assistant의 content에는 그 말에 대하여 챗지피티의 예시 답변을 적는다. 

     

    * 이외에도 대답의 형식을 지정하는 다양한 방법이 있는데, 아래 레퍼런스를 참고하길 바란다. 

    https://wikidocs.net/200140

     

    02) 데이터셋 준비하기 상세

    > 아래 문서는OpenAPI에서 제공하는 문서를 기반으로 작성되었습니다. > [https://platform.openai.com/docs/guides/fine-tuning…

    wikidocs.net

     

     

     

    파이썬 코드 작성

    OpenAI를 불러오자. 방금 복사해둔 AI key를 파라미터로 넘겨주고, client라는 변수에 객체를 저장한다. 

    AI_key = "당신의 API key"
    
    from openai import OpenAI
    
    client = OpenAI(
        api_key=AI_key,
    )

     

    만들어둔 데이터 파일을 불러오자. 아래 코드에서, client.files.create로 파일을 불러와 file 변수에 저장할 수 있다. purpose는 fine-tune으로 지정해준다.

     

    또한, 해당 게시글에서는 모델을 gpt-3.5-turbo를 사용했다. client.fine_tuning.jogs.create 함수를 아래와 같이 실행시키면 파인튜닝이 진행된다. 

     

    file = client.files.create(
          file=open("데이터파일.jsonl", "rb"),
          purpose="fine-tune"
        )
    
    client.fine_tuning.jobs.create(
          training_file=file.id,
          model="gpt-3.5-turbo"
        )
    
    file.id

     

    한 번 fine-tuning할 때 꽤 많은 토큰이 소비되므로 여러번 실행시키지 않도록 한다. 

    가격 정보

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

     

    파인튜닝이 완료되거나 실패하면 메일이 온다. 또한, 아래 사이트에서 Fine-tuning의 결과를 확인할 수 있다.

    https://platform.openai.com/finetune

    Fine-tuning 진행중

     

    파인튜닝에 성공하면 fine-tuning job 코드와 model 코드를 받을 수 있다. 

    client.fine_tuning.jobs.retrieve("ftjob-파인튜닝 완료된 모델의 코드")

     

    client.fine_tuning.jobs.retrieve에 ftjob- 이하의 코드를 넣으면, 해당 모델이 어떠한지 정보를 출력할 수 있다. 

     

     

     

    학습된 모델 사용하기 

    def chat_gpt(prompt):
    
        response = client.chat.completions.create(
          model="ft:gpt-3.5-turbo-0613:personal::뒤에뜨는코드",
            messages=[{"role": "system", "content": "지정해둔 시스템"},{"role": "user", "content": prompt}]
        )
     
        return response.choices[0].message.content.strip()

     

    위와 같은 함수를 설정하여 학습된 모델을 사용하자. message의 system 쌍에는 지정해둔 시스템을 넣거나, 변수 하나를 더 생성하여 input으로 받을 수 있다. user 쌍에는 파인튜닝된 챗지피티에게 하고 싶은 말을 적으면 된다.  

     

    파인튜닝된 챗지피티를 사용하려면, 위에서 정의한 함수를 사용하면 된다. 함수에서는 챗지피티의 응답이 리턴된다. 

    chat_gpt("챗지피티에게 하고 싶은 말") # 주의

     

    하지만 이 함수를 한 번 사용할 때마다 일정 토큰이 소비되므로, 주의하여 실행하길 바란다. 

     

    자세한 가격은 아래 링크를 참고 ! 

    https://openai.com/pricing

    파인튜닝된 대답 예시 : 원래는 이런 대답을 하지 않는다.

     

    파인튜닝에서 다양한 파라미터를 조절하여 우리의 마음대로 AI를 조정할 수 있다. 가르친 데이터에서보다 조금 더 랜덤한 대답을 할 수 있도록 설정할수도 있고, 가르친 대답으로만 대답하도록 만들 수도 있다. 

    반응형

    댓글

Designed by Tistory.