LLM과 LLMOps란
LLM과 LLMOps에 대해 알아보고 관련 내용에 대해 알아보기
LLM이란?
LLM은 Large Language Model의 약자로 많은 양의 텍스트 데이터를 사용하여 학습된 자연어 처리 모델을 의미합니다. LLM은 수백만 또는 수십억 개의 문장과 단어로 이루어진 대량의 텍스트 데이터를 학습하여 문맥을 이해하고, 문법 규칙을 학습하며, 다양한 언어 작업에 대한 예측을 수행하게 됩니다. 대표적인 모델로는 OpenAI의 GPT와 Google의 Gemini가 있습니다. 활용 분야로는 자연어 이해, 기계 번역, 텍스트 생성, 질문 응답, 감정 분석 등 다양한 자연어 처리 작업에서 활용됩니다. 이러한 LLM은 풍부한 문맥 이해와 언어 생성 능력을 바탕으로 다양한 언어 작업을 수행할 수 있습니다.
LLM 개발 성숙도
당장 LLM은 개발해보자! 라고 할 수 있겠지만, 이름 그대로 Large한 모델이기 때문에 바로 시작하기는 어렵습니다. 큰 모델을 학습하기에는 관련 인력도 필요하며, 고성능의 머신과 고도화된 인프라가 필요합니다. 그렇다고 LLM 애플리케이션을 만들 수 없는 것은 아닙니다. LLM을 직접 만들고 학습시킬 수 도 있지만, 공개된 LLM 모델을 사용하여 애플리케이션을 만들고 서비스에 활용할 수 있습니다. LLM 개발 성숙도가 낮다면 이 처럼 LLM을 활용하는 것을 추천하며 성숙도가 높아질수록 LLM의 더 깊은 영역에서 프로젝트를 진행할 수 있습니다. LLM의 개발 성숙도는 다음과 같습니다.
- In Context Learning/Promt Engineering
- Retrieval Augmented Generation(RAG)
- Model Fine Tuning
- Foundataion Model Training
1번에서처럼 맨 처음 프로젝트를 시작한다면 GPT나 기타 공개된 모델의 API를 활용할 수 있습니다. Promt를 잘 작성하여 서비스에 이용만 해도 큰 비즈니스 임팩트를 줄 수 있습니다. 다음 단계는 RAG를 구축하는 것입니다. RAG은 2020년 한 논문 ‘지식 집약적 NLP 작업을 위한 검색 증강 생성(Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks)’에서 해당 용어는 처음 만들어졌습니다. RAG는 외부 소스에서 가져온 정보로 생성 AI 모델의 정확성과 신뢰성을 향상시키는 기술입니다.
1번의 접근에서 애플리케이션을 사용하다보면 가끔 모델이 Hallucination이라고 하는, 그럴듯한 헛소리를 하는 것을 볼 수 있습니다. 할루시네이션은 언어 생성 AI는 물론 스테이블 디퓨전, 달리2 등 이미지 생성 AI 등에서도 발생하는 오류 현상으로, 주로 잘못된 답변이나 기이한 이미지를 생성하는 것을 말합니다. 이 현상은 모델이 질문 내용에 가장 가까운 데이터(단어, 이미지 등)의 부스러기를 선택해 조합하기 때문에 발생하는 것으로 애당초 잘못된 질문을 받거나 학습한 데이터에 오류가 있을 경우 할루시네이션 현상이 주로 발생하게 됩니다. RAG은 이러한 현상을 줄일 수 있는 방법입니다.
RAG는 외부에서 데이터를 가져와 임베딩하고, 이 결과를 Vector DB에 저장하고, 사용자가 질문을 하면 관련도가 가장 높은 임베딩을 찾아내서 모델에 이를 제공하는 방식입니다. 쉽게 말하면 입력을 받아 이와 관련있는 소스에서 답을 찾게하는 방법입니다. 미리 답변에 대한 데이터를 저장해놓고 애플리케이션이 데이터가 있는 곳에 접근해서 답변을 만든다면 더 퀄리티 좋은 답변이 나오게 될 것입니다. 일반 LLM 모델의 답변보다는 명확한 근거가 있기 때문에 답변이 더 신뢰할 수 있다고 말할 수 있겠습니다.
그 다음은 파인튜닝입니다. 파인튜닝은 특정 작업이나 도메인에 높은 적합성을 확보하기 위해, 이미 훈련된 대규모 언어 모델에 특정 데이터셋을 사용하여 추가적인 학습을 수행하는 작업을 말합니다. 사전 학습한 모델을 초기 가중치로 사용하고, 특정 작업에 대한 추가 학습 데이터로 모델을 재학습하는 것입니다.
보통 2번째 단계에도 파인튜닝을 하는 접근이 있지만 OpenAI가 제공하는 파인튜닝 가이드 문서에서 나온 것처럼 파인튜닝은 시간과 노력 측면에서 신중하게 접근해야 해야합니다. 답변이 잘 나오는 것 같지 않아보이지만 적절한 프롬프트를 통해 원하는 답이 나오는 경우도 있기 때문에 프롬프트 엔지니어링(Prompt Engineering), 프롬프트 체이닝(Prompt Chaining), 함수 호출(Function Calling)과 같은 다양한 방법을 먼저 시도해 본 후에 파인 튜닝을 할 것을 권장하고 있습니다.
그 다음은 직접 학습시키는 것입니다. 바로 윗 단계라 금방 될 것 같아 보이지만 이 단계는 매우 높은 단계입니다. 직접 Foundation Model을 학습하는 것이기 때문입니다.
Foundation Model이란 대규모 데이터 세트를 기반으로 훈련된 모델을 말하며, 데이터 사이언티스트가 기계 학습(ML)에 접근하는 방식을 변화시킨 대규모 딥 러닝 신경망입니다. 데이터 사이언티스트는 처음부터 인공 지능(AI)을 개발하지 않고 파운데이션 모델을 출발점으로 삼아 새로운 애플리케이션을 더 빠르고 비용 효율적으로 지원하는 ML 모델을 개발합니다. 파운데이션 모델이라는 용어는 연구자들이 광범위한 일반화된 데이터와 레이블이 지정되지 않은 데이터에 대해 훈련되고 언어 이해, 텍스트 및 이미지 생성, 자연어 대화와 같은 다양한 일반 작업을 수행할 수 있는 ML 모델을 설명하기 위해 만들어졌습니다.
이런 Foundataion Model을 학습하기 위해서는 거대한 데이터 셋이 필요하고 이를 학습하기 위한 인프라 및 자원도 필수적입니다. 따라서 1,2,3의 단계를 충분히 거친 후에 대규모 투자를 통해서 이루어져야 하는 접근법인 것입니다.
LLM Application Flow
이제 LLM 애플리케이션의 흐름에 대해서 살펴보겠습니다. 애플리케이션의 흐름은 생각보다 간단합니다.
클라이언트에게 입력이 들어온다.
미리 설정한 프롬프트에 질문을 넣어 LLM에게 요청한다
- 질문에 필요한 데이터를 포함시킨다. (외부API, DB, VectorDB…)
요청 결과를 바탕으로 새로운 프롬프트, 함수를 실행한다. (Chaining)
최종 결과가 나오면 답변으로 반환한다.
세부적인 내용은 들어갈수록 더 깊은 내용이 있겠지만, 큰 흐름은 이러합니다. 입력이 들어가고 미리 프롬프트를 만들어놓고 필요하다면 RAG등과 같은 시스템을 이용해 자세한 답변을 할 수 있게 만들고 바로 답변으로 반환하거나 결과를 바탕으로 다듬을 수 있는 프롬프트를 다시 한 번 실행해 결과를 돌려줍니다.
LLMOps
이와 같이 LLM 애플리케이션은 생각보다 간단하게 만들 수 있고 쉽게 서비스할 수 있습니다. 하지만 동시에 대규모 모델에 대한 직접 학습에 대한 요구가 발생하면서 LLMOps도 탄생하게 되었습니다. 일반적으로 MLOps의 운영 요구사항은 일반적으로 LLM에도 적용되지만, LLM을 잘 훈련하고 배포하려면 LLM에 특화된 접근 방식이 필요하기 때문입니다. 따라서 MLOps 시스템이 고도화되어 있고 ML모델에 대한 배포경험과 운영 경험이 충분하다면 LLMOps에 대한 전환도 매우 빠르게 이루어질 수 있다고 생각합니다.
하지만 MLOps와 LLMOps는 중요한 차이점이 존재합니다. MLOps는 모델 개발 부터 서빙 및 모니터링의 자동화, 시스템화를 의미하는 반면 LLMOps는 이미 만들어진 모델에 대한 Fine Tuning 등 각자의 시스템에 맞게 조정하고 업데이트하는데 초점이 맞춰집니다.
LLMOps의 주요한 특징은 다음과 같습니다.
Fine Tuning
대부분의 기계 학습 모델은 처음부터 생성되고 학습되는 반면, LLM은 기초 모델에서 시작하여 성능 향상을 위해 엔지니어가 새로운 데이터로 Fine Tuning합니다. 그 이유는 대규모 언어 모델이라는 이름에서 느낄 수 있습니다. 이러한 모델은 말 그대로 수십억 개의 매개변수를 가진 신경망인데 이로 인해 모델을 훈련하는 데 비용이 매우 많이 들기 때문에 Transfer Learning이 널리 사용됩니다. 이를 통해 더 적은 데이터와 리소스를 사용하여 특정 애플리케이션의 정확성을 높일 수 있습니다. PEFT(Parameter-Efficient Fine-Tuning)는 오픈 소스 LLM을 위한 파인 튜닝 방법의 예시이고, OpenAI는 인프라 내에서 이를 수행하기 위한 API를 제공하고 있습니다.
Feedback Loop
LLM은 사람의 피드백을 통해 최근 몇 년 동안 크게 개선되었습니다. LLM의 애플리케이션 성능을 평가하는 데 최종 사용자의 피드백이 매우 중요하기 때문에 이를 통해 엔지니어는 LLMOps 파이프라인 내에서 필요한 변경을 수행할 수 있습니다.
Metrics
일반 ML 모델에는 계산하기 쉬운 명확하게 정의된 성능 지표가 있습니다. 그러나 LLM은 BLEU 및 ROGUE와 복잡한 평가 지표를 사용합니다. 그럼에도 불구하고 LLM에 적합한 측정항목을 선택하는 것은 매우 어려운 일이며 이를 통해 해결하려는 작업 유형에 따라 크게 달라질 수 있습니다.
Chains
대부분의 LLM 응용 프로그램은 처음부터 새로운 LLM을 구축하는 대신 기존의 LLM과 함께 많은 외부 시스템을 연결하는 데 중점을 둡니다. 이것이 바로 LangChain과 같은 도구가 인기를 얻은 이유입니다. LangChain은 도구, 구성 요소 및 인터페이스 제품군을 사용하여 LLM 기반 응용 프로그램을 구축하는 프로세스를 빠르게 만들 수 있습니다.
Reference
- https://modulabs.co.kr/blog/llmops-intro/
- https://blog-ko.superb-ai.com/why-llmops-is-gaining-traction-from-devops-to-llmops/
- https://medium.com/@bakingai/llmops-the-future-of-mlops-for-generative-ai-aed95decf21e
- https://www.promptingguide.ai/kr/techniques/rag
- Supercharging ML/AI Foundations at Instacart
- 그랩의 LLM Application 개발 경험/레슨런 공유회
LLM과 LLMOps란