Haru's 개발 블로그

[LLM] 기업용 특화 LLM 생성 방법 본문

머신러닝 & 딥러닝/LLM

[LLM] 기업용 특화 LLM 생성 방법

Haru_29 2024. 4. 5. 10:42

들어가기에 앞서 아래의 포스트를 참고하여 작성하였습니다.

기업용 금융 특화 LLM 모델 만들기 (1)- 필요성과 RAG

개요

2022년에 OpenAI에서 chatGPT가 발표되고 다양한 서비스 회사에서 LLM을 결합한 여러 상품들을 출시를 하였습니다. 뿐만 아니라 llama2같은 오픈소스 LLM(Open source LLM)들과 LoRA(Low-Rank Adaptation)같은 효율적인 학습방법들 덕분에 자체 LLM을 학습하는 노력도 많아지고 있습니다.

다만, 기업들이 ChatGPT나 GPT-4, PALM2, Claude2, HyperClova X, LLAMA2 같이 범용으로 사용할 수 있는 Foundation model과 같이 막대한 자본을 투입하여 개발을 진행하는 것은 어려움이 많을 뿐더러 시간과 자본이 많이 투입이 되어야 합니다. 따라서, 많은 기업들은 그 중 학습 가능한 모델을 학습시켜서 만든 모델인 Fine-tuned model을 많이 사용합니다.

그런데 현재 공개된 모델들중에서 일반적인 지시를 이해하고 행하는데 있어서는 ChatGPT나 GPT-4나 이번에 새로 나오는 구글의 제미나이를 뛰어넘었다고 말할 수 있는 모델은 아마 없을 것입니다. 그래서 ChatGPT의 이러한 뛰어난 능력을 잘 활용하기 위해서나 기존의 파인튜닝된 모델의 성능 향상시키기 위하여 프롬프트 엔지니어링을 잘하기 위한 방법론도 넘쳐나고 있습니다. 더 나아가 환각현상이나 학습되지 않은 내용에 대한 답변 또한 RAG(Retriever Augumented Generation, 검색 증강 생성)이라는 기법을 통해서 대처가 가능합니다. 다만 여러 위와 같은 내용으로 어느정도는 해결이 가능하지만 기업이 가지고 있는 기밀 문서나 외부로 공개가 되지 말아야 할 내용에 대해서는 상대적으로 부족합니다.

이 포스트에서는 기업이 llm 서비스를 개발을 진행할 때 유의할 점에 대해 정리를 진행했습니다.

학습 전략

이제 기업용 on-prem model을 만드려고 합니다. 먼저 생각해야 할 내용을 아래에 정리를 하였습니다.

  1. 어떤 foundation model을 사용해야할까?
  2. 얼마나 많은 데이터를 학습시켜야할까요?
  3. 우리는 이 llm을 서비스하고 학습시키는데 얼마정도의 비용을 들여야할까?

우리가 만나고 이야기했던 고객들의 상황을 통해서 몇가지 가정을 하였습니다.

  1. 고객이 풀고자하는 가장 큰 문제는 답변 찾기이다. 따라서 답변 찾기(RAG)를 잘 할 수 있는 모델이어야한다.
  2. 고객이 가지고 있는 자료의 양은 많지 않다. 정확히 말하면 학습을 하기 위해 정제된 데이터는 많지 않다.
  3. 초기부터 모델의 학습및 서비스 비용을 들이고 싶어하지 않는다.

사실 2번으로 부터 모두 연결된 문제입니다. 데이터가 많지 않으니 큰 모델을 학습시킬수 없고 작은 모델은 학습과 서비스 비용이 크지 않으니까요.

그러면 데이터의 크기에 대해 얼추 정리를 해보겠습니다. pdf 보고서 하나를 예로 들어보면 한국은행에서 발행한 8월 경제전망보고서는 총 68page입니다. text만 모두 읽으면 68417자입니다. llama2기반의 baseline model인 openbuddy모델 기준으로 65422 token입니다. 그렇다면 이런 보고서가 1만 개 이상 있어야합니다.

따라서 웬만한 회사에서는 내용이 겹치지 않는 양질의 보고서를 만 개 이상 분류해둔다는게 쉬운 일은 아니겠죠.

그래서 저희는 얼마만큼 적은 데이터로 학습을 시킬수 있을지 조사와 실험을 하였습니다. 다행히도 llama2의 부족한 한국어 능력을 미리 pretrain시켜둔 한국어 모델이 속속 등장하고 있어서 굳이 한국어를 익히게 하기위해 많은 데이터를 쏟아부어야할 필요는 없었습니다.

Textbooks Are All You Need 논문을 보면 1.3B짜리 모델에 7B데이터를 학습시켜서 더 크고 많이 학습시킨 다른 모델을 훨씬 뛰어넘는 결과를 얻었습니다. 이 논문에서 주장하는 바는 교과서의 연습문제 스타일의 데이터로 학습을 시켰더니 성능이 엄청나게 올랐다는 내용입니다.

!https://blog-ko.allganize.ai/content/images/2023/10/image-7.png

위 포스트는 실험을 통해서 pretrain하는 과정을 제거해도 성능 저하가 크지 않음을 확인하였고 비용이 큰 pretrain단계를 생략하기로 했습니다.

그리고 BloombergGPT도 학습데이터의 절반은 금융이 아닌 일반 domain의 내용으로 학습하였습니다. 우리도 학습데이터의 절반은 일반데이터로 마련하였습니다. (사실 이 모든 내용을 미리 계획한 것이 아니라 이런저런 실험을 통해 최적화된 데이터 크기와 방법을 찾았다는게 맞습니다.)

학습 데이터 모으기

위 포스트의 회사인 올거나이즈는 LLM 이전에도 추출형 인지검색 모델을 서비스하고 있었기 때문에 보고서나 용어집 등은 이미 보유하고 있었습니다. 양질의 보고서 데이터를 미리 확보한 셈이죠.

하지만 우리는 이를 교과서의 연습문제 스타일로 만들어야 했습니다. 이때 연습문제 스타일이란 결국엔 instruction set이 될 것입니다.

  1. Simple Q&A → 용어집을 통해서 만들수 있는 연습문제로 쉬운 것은 정의를 묻고 정의에 대해 답을 하는 것일 겁니다.
  2. Summary → 이 데이터는 단순한 질문, 응답 패턴으로 생성할 수 있었고 문서를 요약하는 작업도 있을 수 있습니다**.** 이 데이터는 사람 손으로 대량의 데이터를 만들기는 어렵습니다. GPT-3.5에게 요약해달라고 시켜서 사용했습니다. GPT-3.5의 요약성능은 매우 뛰어나서 따로 검수할 필요성은 느끼지 못했습니다.
  3. Multiple choice → 적절한 context를 제공하고 거기에 맞는 적절한 질문과 4지선다 답변을 생성하도록 했습니다. 이 문제를 바탕으로 문제를 푸는 instruction을 작성하였습니다. 단, 이 경우에 너무 뻔하거나 쉬운 질문이 있을 수 있으므로 적어도 test data로 사용할 데이터는 사람이 검수해야했습니다. 일단 여러 개 생성한 후에 일부 좋은 질문들은 따로 test dataset으로 빼두었습니다.그리고 이 과정에서 문제를 푸는 instruction뿐 아니라 문제를 생성하는 instruction역시 학습데이터로 사용할 수 있습니다.
  4. RAG dataset → 적절한 context를 제공하고 거기에 맞는 질문을 생성합니다. 그리고 그 답변도 생성하였습니다. 이렇게 생성된 context, 질문, 답변 쌍을 사람이 전수 검사하여 올바른 질문과 답변인지 검수하였습니다.
  5. 추가로 관련이 있지만 질문에 직접적인 답이 존재하지 않는 hard negative clue을 2개를 선택하였습니다. 이렇게 생성된 3개의 clue를 Allganize summarize모델을 통해서 최대 token길이에 적당하도록 요약해서 RAG prompt와 답변 쌍을 만들 수 있었습니다. 일반적인 데이터는 이미 공개된 여러 데이터셋에서 너무 길거나 너무 짧거나 아니면 instruction이 없는 데이터를 제외하고 선택하여 만들었습니다.

성능 평가

LLM의 성능을 평가하기는 매우 어렵습니다. 생성모델이므로 답이 딱딱 떨어지는게 아니기 때문입니다. 조그만 차이때문에 내용이 완전히 달라지기도 하고 내용이 같다고해도 얼마나 매끄럽게 생성되는지도 판별해야합니다. 그리고 한두번 평가하고 말 것은 아니므로 매번 사람이 평가할 수도 없습니다.

그래서 4지선다 문제를 웹에서 수집하였습니다. 하지만 양질의 4지선다 문제를 충분히 수집할 수 없었기때문에 GPT로 생성한 4지선다 문제중에서 괜찮은 문제를 사람이 선별하여 학습데이터에서 제외하고 평가데이터로 사용했습니다.

그래서 약 500여개의 평가셋을 만들수 있었고 그 데이터로 평가한 결과입니다.

!https://blog-ko.allganize.ai/content/images/2023/10/image-9.png

물론 이러한 4지선다 점수로 모든것을 평가할 수 없으므로 정성평가도 진행했습니다. 다만 특성상 많은 질문에 대해서 평가하지는 못하였고 그중 두 가지만 예로 들어보겠습니다. 아래는 RAG가 아니라 Zeroshot으로 질문을 한 결과입니다.

!https://blog-ko.allganize.ai/content/images/2023/10/image-11.png

비용

데이터를 생성하는데는 GPT-4와 GPT-3.5(DAVINCI)를 이용하여 생성하였습니다. 총 800$정도의 OpenAI 비용과 검수 목적으로 8MD의 인력이 소요되었습니다.

**학습비용은 13B의 경우는 160$정도의 GPU비용(AWS p4d.24xlarge 기준), 70B는 1000$정도의 GPU비용(AWS p4d.24xlarge 기준)**이 들었습니다. 하지만 요즘은 p4d.24xlarge를 빌리기 너무 힘들어서 다른 GPU 제공회사의 장비를 빌려서 학습시켰습니다. 위 비용은 GPU Hour를 AWS 비용으로 환산한 결과입니다.

Comments