1. 나만을 위한 GPT 만들기: LLM 파인튜닝의 세계 [0]

thumbnail 개인 맞춤형 GPT를 만들기 위해 기존 거대 언어 모델(LLM)을 개인 데이터로 재학습시키는 LLM 파인튜닝 방법을 알아본다. 이는 특정 분야에 특화된 결과물을 얻는 데 효과적이며, 프롬프트 엔지니어링보다 비용 효율적이고 정확도가 높다. [0]

1.1. LLM 활용을 위한 두 가지 접근 방식 [1]

  1. 개인 맞춤형 GPT를 위한 두 가지 방법 [1]
    • 기존 GPT를 그대로 사용하면 만족스러운 결과를 얻기 어렵다. [3]
    • 자신이 일하는 분야의 지식을 결합하여 만족스러운 결과물을 얻기 위해서는 두 가지 방법이 있다. [4]
    • 첫 번째는 언어 모델의 일부를 재학습시키는 파인튜닝 방법이다. [5]
    • 두 번째는 놀리지 베이스(Knowledge Base) 방식이다. [7]
      • 이 방식은 개인의 지식을 벡터 데이터베이스 형태로 변환하고, 언어 모델이 이 데이터베이스를 찾아보도록 하는 방식이다. [8]
    • 각 방식은 특정 분야에서 서로 다른 강점을 보인다. [9]

1.2. 파인튜닝 vs. 놀리지 베이스: 어떤 것을 선택해야 할까? [10]

  1. 파인튜닝의 강점: 특정 인물이나 스타일의 재현 [10]
    • 파인튜닝은 특정 인물을 디지털화하는 데 매우 효과적이다. [10]
    • 예시: 철학자의 책을 학습시켜 심리 상담을 받는 듯한 GPT를 만들거나, 일론 머스크, 유시민 등 유명인의 어록을 학습시켜 그 사람이 말하는 듯한 언어 모델을 만들 수 있다. [11]
  2. 놀리지 베이스의 강점: 정확하고 사실 기반의 정보 제공 [13]
    • 놀리지 베이스 방식은 주식 가격 변동과 같이 사실 기반의 질문에 대해 언어 모델이 상상에 기반한 답변 대신, 저장된 정보를 기반으로 답변하도록 할 수 있다. [13]
  3. 파인튜닝을 선택하는 이유 [16]
    • 대부분의 경우 놀리지 베이스 방식이 더 낫다고 생각할 수 있지만, 이 영상에서는 모델 재학습(파인튜닝) 기능의 유용성을 사례와 함께 보여준다. [15]

1.3. 나만의 미드저니 프롬프트 생성 GPT 만들기 [17]

  1. 목표 설정: 글에 맞는 이미지 프롬프트 생성 GPT [17]
    • 글을 작성할 때 중간중간 이미지가 들어가면 독자의 몰입도를 높일 수 있다. [19]
    • 이미지 생성 AI인 미드저니(Midjourney)를 사용하면 텍스트로부터 이미지를 만들 수 있다. [18]
    • 하지만 미드저니에서 좋은 이미지를 얻으려면 일정한 스타일로 프롬프트를 입력해야 한다. [23]
    • 일반적인 글쓰기 방식과 미드저니 프롬프트 입력 방식은 다르다. [25]
    • 글쓰기에 집중하고 싶으므로, 자동으로 미드저니 프롬프트 스타일에 맞게 글을 변환할 필요가 있다. [27]
    • 이 문제를 해결하기 위해 모델의 일부를 재학습시키는 방법(파인튜닝)을 사용할 것이다. [28]
  2. 파인튜닝이 프롬프트 엔지니어링보다 나은 이유 [29]
    • 프롬프트 직접 입력 방식(인컨텍스트 러닝)보다 파인튜닝이 더 나은 이유는 세 가지다. [29]
    • 첫째, 번거로움 해소 [31]
      • 매번 구체적인 프롬프트를 준비하는 것이 매우 귀찮다. [31]
    • 둘째, 비용 절감 [33]
      • 긴 프롬프트는 처리해야 할 토큰 수를 늘려 더 많은 비용을 발생시킨다. [34]
    • 셋째, 정확도 향상 [36]
      • 최신 연구에 따르면, 모델 재학습 방식이 프롬프트 입력 방식보다 정확도 측면에서 더 우수하다는 주장이 많다. [36]

1.4. 파인튜닝을 위한 준비 과정 [39]

  1. 파인튜닝 모델 선택 [39]
    • 허깅 페이스(Hugging Face)에서 베이스 모델을 선택할 수 있다. [40]
    • 최근 모델인 라마(Llama)를 사용할 수도 있지만, 메타의 승인 절차가 오래 걸리고 큰 모델은 구글 코랩에 올리기 어렵다. [41]
    • 따라서 20억 개(2 billion) 파라미터 이하의 주마(Jamba) 모델을 사용한다. [43]
  2. 개발 환경 설정 [46]
    • 필요한 라이브러리를 설치한다. [46]
    • 런타임에서 GPU 연결이 잘 되었는지 확인한다. [47]
    • 데모 시연을 위해 L4 GPU를 사용한다 (약 1만원 비용 발생). [48]
  3. 모델 다운로드 및 로드 [49]
    • 모델 레지스트리에서 모델을 다운로드하기 위해 권한이 있는 토큰을 허깅 페이스에서 가져온다. [49]
      • 이 토큰은 외부에 유출되지 않도록 주의해야 한다. [50]
    • 모델을 그대로 로드하면 무겁기 때문에 양자화(Quantization)하여 로드한다. [53]
    • 바이트(bitsandbytes) 라이브러리를 사용하여 양자화를 진행한다. [55]
    • 20억 개 파라미터 모델이라도 크기가 꽤 크므로 로드에 시간이 소요된다. [56]
    • 선택한 주마(Jamba) 모델을 로드한다. [57]
  4. 모델 성능 테스트 (초기 상태) [59]
    • 모델을 불러온 후, 간편하게 실행할 수 있도록 래퍼 함수를 정의한다. [60]
    • 정의된 프롬프트를 넣어 모델이 의도대로 작동하는지 테스트한다. [60]
    • 초기 상태의 모델은 맥락을 전혀 이해하지 못하고 이상한 답변을 생성한다. [61]

1.5. 데이터 준비: 파인튜닝의 핵심 재료 [64]

  1. 데이터셋 확보 방법 [64]
    • 허깅 페이스의 데이터셋 탭에서 텍스트 관련 데이터셋을 찾을 수 있다. [65]
    • 캐글(Kaggle) 사이트에서도 다양한 데이터셋을 확인할 수 있다. [66]
    • 한국의 경우, 정부 단위로 구축된 AI 허브 플랫폼에서 데이터셋을 얻을 수 있다. [69]
    • 이 영상에서는 블로그에 작성한 자연어를 미드저니 프롬프트로 생성하는 것을 목표로 하므로, 직접 데이터셋을 수집했다. [71]
  2. 데이터 수집 과정 [72]
    • 미드저니 페이지에서 괜찮아 보이는 이미지에 대응되는 프롬프트 약 50개를 수집했다. [72]
    • 데이터셋의 퀄리티를 위해 미드저니의 전형적인 프롬프트 형식을 따르는 것들 위주로 선별했다. [73]
    • 수집된 데이터셋은 미드저니 프롬프트와 그에 대응되는 자연어 프롬프트 쌍으로 구성된다. [74]

1.6. 자연어 프롬프트를 위한 데이터 가공 [75]

  1. 데이터 쌍 생성: 미드저니 프롬프트 -> 자연어 프롬프트 [75]
    • 학습을 위해서는 미드저니 프롬프트에 대응되는 자연어 프롬프트가 필요하다. [75]
    • 현재 가지고 있는 것은 미드저니 프롬프트뿐이므로, 이를 위한 사용자 입력(자연어 프롬프트)을 생성해야 한다. [76]
    • 이를 위해 GPT를 활용하는 스크립트를 준비했다. [77]
    • 스크립트는 엑셀에 모아둔 미드저니 프롬프트를 입력받아, 이를 생성하기 위한 사용자 입력(자연어 프롬프트)을 GPT에 추론하도록 한다. [79]
    • GPT에게는 해당 텍스트 외 다른 내용은 작성하지 않도록 가이드하고, 인컨텍스트 러닝을 위해 두 개의 예시를 제공한다. [82]
    • 스크립트는 데이터셋의 각 행을 순회하며 GPT를 호출하고, 그 결과를 CSV 파일의 '유저 인풋' 컬럼에 저장한다. [84]
  2. 스크립트 실행 및 결과 확인 [87]
    • API 키를 담은 파일에서 라이브러리를 로드하고 메인 함수를 실행한다. [87]
    • GPT-4 터보 모델을 사용하여 작업을 수행했다. [89]
    • 스크립트 실행 결과, CSV 파일의 '유저 인풋' 컬럼에 자연어 프롬프트가 생성되는 것을 확인할 수 있다. [96]
    • 약 50개의 데이터셋 생성에 몇 백 원대의 비용이 발생하며, 약 3분 정도 소요되었다. [99]
    • 결과물은 미드저니 프롬프트와 그에 대응하는 GPT로 생성된 자연어 프롬프트(가짜 유저 인풋)로 구성된다. [102]

1.7. 파인튜닝 실행: LoRA를 활용한 효율적인 학습 [104]

  1. 데이터셋 로드 및 전처리 [104]
    • 생성된 CSV 파일을 코랩 파일 창에 업로드한다. (세션 종료 시 파일이 사라지므로 주의) [104]
    • CSV 파일을 로드하여 '미드저니 프롬프트'와 '유저 인풋' 두 개의 컬럼을 확인한다. [106]
    • 언어 모델이 이해할 수 있는 형태로 변환하기 위해 토크나이저를 적용한다. [108]
  2. LoRA (Low-Rank Adaptation) 적용 [109]
    • 언어 모델 전체를 재학습시키는 대신, 작은 모듈을 붙여 해당 부분만 다시 학습시키는 LoRA 기법을 사용한다. [110]
    • 이는 거대 언어 모델 파인튜닝 시간을 획기적으로 단축시켜 준다. [110]
    • LoRA 외에도 LoRA와 유사한 방법론들이 존재한다. [111]
    • LoRA를 적용하기 위해 트랜스포머의 특정 레이어에 붙을 수 있는 모듈들을 찾는다. [113]
    • 찾아낸 레이어들에 LoRA 모듈을 적용하여 파인튜닝된 모델을 얻는다. [116]
  3. SFT 트레이너를 이용한 학습 [117]
    • 일반적인 트레이너 대신 파인튜닝에 특화된 SFT 트레이너를 사용한다. [118]
    • 학습을 진행하며, 약 100 스텝 정도만 학습시켜도 쓸만한 결과물이 나온다. [120]
    • L4 GPU 기준, 100 스텝 학습에 약 5분 정도 소요된다. [122]
    • 학습이 완료된 모델을 가져와 병합하고 테스트를 진행한다. [124]

1.8. 파인튜닝 결과 및 모델 배포 [125]

  1. 파인튜닝된 모델 테스트 결과 [125]
    • 파인튜닝 완료 후 모델을 실행하면, 미드저니 프롬프트의 형태를 띄는 결과물이 생성된다. [125]
    • 학습 스텝 수를 높이고 데이터를 정제하면 결과물이 훨씬 좋아질 것으로 기대된다. [126]
  2. 모델을 허깅 페이스 레지스트리에 푸시 [128]
    • 학습된 모델을 허깅 페이스 레지스트리에 업로드할 수 있다. [128]
    • 자신의 계정 아래에 '마이 미드저니 프롬프트 모델'이라는 이름의 저장소를 생성한다. [129]
    • 모델을 푸시하여 허브에 등록한다. [131]
    • 업로드된 모델을 확인할 수 있다. [133]

1.9. LLM 파인튜닝 기술의 활용 가능성 [133]

  1. 파인튜닝 기술의 무궁무진한 활용 [133]
    • 이 영상에서는 개인적인 문제를 해결하기 위한 GPT 파인튜닝 방법을 소개하고 시연했다. [133]
    • 독자들에게 LLM 파인튜닝 기술을 어떻게 사용하고 싶은지, 어떤 목적으로 어떤 데이터를 학습시키면 좋을지에 대한 질문을 던진다. [134]