해당 글은 DeepLearning.AI 사이트에 있는 Pretraining LLMs 강의 내용 일부를 요약 한 글입니다.
해당 강의에는 본 글에 작성된 내용 외에도 실습 내용이 포함되어 있습니다.
Introduction
해당 강의는 대규모 언어 모델(LLM)을 사전 학습하는 과정에 대한 상세한 설명을 제공합니다. 핵심 내용은 다음과 같습니다.
- Pre-training의 개념: LLM을 방대한 양의 텍스트 데이터로 학습시켜 언어의 패턴과 구조를 이해하게 하는 과정입니다. 이를 통해 모델은 새로운 텍스트를 생성하거나 이해하는 능력을 갖추게 됩니다.
- Pre-training의 중요성: LLM의 기반이 되고, 특정 작업에 맞게 모델을 미세 조정하기 전 필수 단계입니다.
- Pre-training의 어려움: 막대한 계산 자원과 시간이 필요하며, 고품질의 대규모 데이터셋을 확보해야 합니다.
- Pre-training을 위한 새로운 기법: Depth Upscaling과 같은 기술을 통해 사전 학습 비용을 절감하고 효율성을 높일 수 있습니다.
- 실습 내용: 사전 학습의 이론적 배경부터 실제 구현까지 다양한 내용을 다루며, Hugging Face와 같은 오픈 소스 라이브러리를 활용하여 실습을 진행합니다.
Main lecture
- Pre-trainig vs. fine-tuning
- Pre-trainig은 LLM의 기본적인 언어 능력을 키우는 과정이고, fine-tuning은 사전 학습된 모델을 특정 작업에 맞게 조율하는 과정입니다.
- 데이터의 중요성
- 고품질의 대규모 데이터는 LLM 성능에 직접적인 영향을 미칩니다. 데이터 수집, 정제, 전처리 과정이 매우 중요합니다.
- 계산 자원
- GPU 클러스터와 같은 강력한 하드웨어가 필요하며, 클라우드 서비스를 활용하여 비용을 절감할 수 있습니다.
- 오픈 소스 생태계
- Hugging Face와 같은 오픈 소스 커뮤니티를 통해 다양한 사전 학습 모델과 도구를 활용할 수 있습니다.
Why pre-training
- pre-training의 중요성
- pre-training: LLM(대형 언어 모델)의 초기 훈련 단계로, 모델이 다음 단어를 예측하는 방법을 배우며, 많은 양의 비구조화된 텍스트 데이터를 사용합니다.
- base model: 텍스트 생성에 능하지만, 지시를 따르거나 안전하게 행동하는 데는 제한적입니다.
- 새로운 지식을 추가: 모델이 새로운 도메인에 대한 깊은 이해를 개발하려면 해당 도메인의 텍스트를 사용하여 추가 사전 훈련이 필요합니다.
- fine-tuning의 한계: 새로운 지식이 기본 모델에 충분히 반영되지 않은 경우, 세부 조정만으로는 충분하지 않습니다.
- fine-tuning 및 정렬: 소비자 응용 프로그램에서 사용되는 LLM은 추가 훈련을 통해 인간의 선호에 맞춰 조정됩니다.
2. 예시: 한국어 모델
- base model(Llama-7B): 한국어 텍스트가 거의 훈련되지 않은 모델로, 한국어를 잘 이해하지 못합니다.
- fine-tunned model: 소량의 영어-한국어 번역 데이터로 조정된 모델로, 부분적으로 한국어를 사용할 수 있지만 완전한 한국어 대화를 지원하기에는 부족합니다.(llama-7B에 fine tunning 적용)
- Pre-training model(Solar): 영어와 한국어 비구조화 텍스트로 추가 사전 훈련을 진행한 모델로, 한국어를 유창하게 사용할 수 있습니다.
해당 lecture는 모델 훈련의 초기 단계인 사전 훈련의 중요성과, 특정 도메인 또는 언어에 대한 깊은 이해를 위해 추가 사전 훈련이 필요한 이유를 설명합니다. 한국어 모델의 예시를 통해, 추가 사전 훈련이 모델 성능에 미치는 영향을 구체적으로 보여줍니다.
Data preparation
학습 과정 별 데이터 준비에서의 차이
사전 학습(Pre-training)에서의 데이터
- 데이터셋의 중요성: 고품질의 학습 데이터셋으로 시작하는 것이 중요합니다.
- 데이터셋 구성: 웹 텍스트와 기존 데이터셋을 사용하여 학습 세트를 만듭니다.
- 자동회귀 텍스트 생성(autoregressive text generation): 모델이 반복적으로 다음 단어를 예측하는 방식으로 학습됩니다.
- 대규모 데이터: 수십억 권의 책에 해당하는 대량의 텍스트가 필요합니다.
미세 조정(Fine-tuning)에서의 데이터
- 구조화된 데이터: 질문과 답변 쌍, 지시사항과 응답 쌍 등 구조화된 데이터를 사용합니다.
- 목적: 모델이 특정 방식으로 동작하거나 특정 작업을 잘 수행하도록 합니다.
- 비교: 사전 학습은 많은 책을 읽는 것과 같고, 미세 조정은 연습 시험을 치르는 것과 같습니다.
Data cleaning 작업
- 중복 제거: 중복 데이터는 모델의 성능을 저하시킬 수 있으며, 훈련 시간도 증가시킵니다. 개별 문서와 전체 문서에서 중복 텍스트를 제거해야 합니다.
- 언어 일관성: 원하는 언어로 텍스트를 유지하고, 관련 없는 텍스트는 제거합니다.
- 유해하거나 편향된 콘텐츠 필터링: 안전한 모델을 위해 필터를 사용하여 유해하거나 편향된 콘텐츠를 제거해야 합니다.
- 개인 식별 정보(PII) 제거: 데이터 유출을 방지하기 위해 개인 식별 정보를 제거합니다.
Pacakaging data
- 데이터 준비
- 데이터 클리닝 후: 데이터셋을 훈련에 사용하기 위해 준비합니다.
- HuggingFace와의 통합: 훈련 데이터를 HuggingFace 라이브러리에서 사용할 수 있도록 패키징 합니다.
- 주요 단계
- 토크나이징(Tokenizing): 텍스트 데이터를 숫자로 변환하는 과정입니다. LLM(대형 언어 모델)은 텍스트를 직접 처리하지 않고, 내부 계산에 숫자를 사용하기 때문에 이 단계가 필요합니다.
- 토크나이징의 중요성
- 텍스트에서 숫자로의 변환: LLM은 텍스트를 직접 처리하지 않기 때문에, 텍스트를 숫자로 변환하는 토크나이징 과정이 필수적입니다. 이 과정에서 사용하는 토크나이저는 모델의 성능에 직접적인 영향을 미칩니다.
- 토크나이저의 선택: 각 모델마다 최적화된 토크나이저가 있습니다. 잘못된 토크나이저를 선택하면 모델이 제대로 학습되지 않거나 예측 성능이 저하될 수 있습니다.
- 토크나이징의 중요성
- 토크나이징(Tokenizing): 텍스트 데이터를 숫자로 변환하는 과정입니다. LLM(대형 언어 모델)은 텍스트를 직접 처리하지 않고, 내부 계산에 숫자를 사용하기 때문에 이 단계가 필요합니다.
- 패킹(Packing): 데이터를 연속적인 토큰 시퀀스로 구조화합니다. 이는 모델이 지원하는 최대 길이 내에서 이루어지며, 훈련 효율성을 높입니다.
- 패킹의 역할:
- 데이터 구조화: 패킹을 통해 데이터가 모델이 지원하는 최대 길이 내에서 연속적인 시퀀스로 구조화됩니다. 이는 모델 훈련의 효율성을 높이는 중요한 과정입니다.
- 특수 토큰의 필요성: 문장의 시작과 끝을 나타내는 특수 토큰을 추가하여 모델이 문장의 경계를 인식할 수 있게 합니다. 이는 특히 문장 단위의 예측을 하는 모델에서 중요한 역할을 합니다.
- 패킹의 역할:
Model initialization
1. 모델 구성 및 초기화
- 시작 방법: 여러 가지 방법이 있으며, 선택한 방법에 따라 사전 학습 속도에 영향을 미칩니다.
- 트랜스포머 아키텍처: 이 강의는 디코더 전용(autoregressive) 모델에 초점을 맞춥니다. 이는 다음 토큰 예측에 효율적입니다.
- 디코더 전용 모델: 텍스트를 벡터로 변환하는 임베딩 레이어와 여러 디코더 레이어로 구성되며, 마지막으로 가장 확률이 높은 다음 토큰을 예측하는 분류기 레이어가 있습니다.
2. 가중치 초기화
- 랜덤 가중치 초기화: 간단하지만 훈련 시간이 길고 많은 데이터가 필요합니다.
- 기존 가중치 재사용: Llama 7B나 Mistral 7B와 같은 기존 모델의 가중치를 사용하는 것이 더 효율적입니다. 이는 새로운 도메인 데이터로 사전 학습을 계속하기에 좋습니다.
3. 모델 스케일링
- 업스케일링(모델 확장): 작은 모델을 시작으로 레이어를 복제하여 더 큰 모델을 만듭니다. 이는 데이터와 시간이 적게 들면서 좋은 성능의 모델을 만들 수 있습니다.
- 다운스케일링(모델 축소): 레이어를 제거하여 작은 모델을 만듭니다. 큰 모델에 효과적이지만 작은 모델에는 잘 맞지 않습니다.
4. 사례: Solar 모델
- 초기 모델: Solar 10.7B 영어 모델을 기반으로 함.
- 데이터: 한국어와 영어 혼합 데이터 2000억 토큰 사용.
- 비용: 훈련 비용은 0.2백만 달러, 이는 처음부터 훈련하는 것보다 저렴합니다.
- 업스케일링 사용: 두 개의 Mistral 7B 모델을 사용하여 10B 모델로 확장.
model training
- 훈련 준비
- 훈련 데이터셋 및 모델 초기화: 훈련 데이터셋을 준비하고, 선호하는 훈련 구성으로 모델을 초기화합니다.
- 훈련 과정
- HuggingFace Trainer 사용: HuggingFace Trainer를 사용하여 모델을 훈련합니다. 이 과정에서 대부분의 훈련 단계를 처리합니다.
- 데이터 로드: HuggingFace dataset 클래스를 사용하여 데이터를 로드합니다.
- 하이퍼파라미터 설정: 배치 크기, 학습률 등의 하이퍼파라미터를 설정합니다. 강의에서는 적절한 초기값을 제시합니다.
- 훈련 실행: 훈련 데이터, 구성된 모델, 그리고 훈련 파라미터를 Trainer에 전달하고, run 함수를 호출하여 훈련을 시작합니다.
3. 훈련 중 주의사항
- 훈련 시간: 훈련은 하드웨어에 따라 오래 걸릴 수 있습니다. 대형 모델과 대규모 훈련 데이터셋을 사용할 경우, 훈련에 몇 주에서 몇 달이 걸릴 수 있습니다.
- 메모리 요구사항: 훈련 시에는 추론보다 더 많은 메모리가 필요합니다. 이는 그래디언트와 활성화 값을 저장하는 데 필요합니다.
- 비용 계산: 훈련 시작 전에 훈련 비용을 계산할 수 있는 도구를 사용하여 예상 비용을 확인할 수 있습니다.
- 비용 추정 도구 사용: HuggingFace와 같은 플랫폼에서 제공하는 비용 추정 도구를 사용하여 훈련 비용을 미리 계산할 수 있습니다. 이는 훈련 비용 관리에 큰 도움이 됩니다.
- 실제 예시: 7B 모델을 훈련하는데 980억 토큰을 사용하고 200개의 GPU를 사용할 경우, 약 100,000달러의 비용이 들고 2주 정도 소요됩니다.
결론
- 모델 사전 훈련 과정 습득
- 해당 강의를 통해 훈련 데이터 준비, 모델 구성, 훈련 및 성능 평가 등 사전 훈련의 모든 단계를 배울 수 있습니다.
- 훈련 환경
- CPU 예시: 강의에서 제공된 예시는 CPU에서 실행되었으나, 노트북 코드를 편집하여 GPU에서 더 큰 모델을 훈련할 수 있습니다.
- 비용 인식: 사전 훈련 작업과 관련된 비용을 인식하고 있어야 합니다.
- 오픈소스
- 모델 공유 권장: 자신만의 모델을 훈련한 경우, 커뮤니티와 공유할 것을 권장합니다.
이 강의는 모델 사전 훈련의 전 과정을 포괄적으로 다루며, 참가자들이 실제로 모델을 훈련하고 평가할 수 있는 실질적인 기술을 제공합니다
또한, GPU 활용과 비용 관리의 중요성을 강조하며, 오픈소스를 통해 지식과 기술을 공유하고 발전시킬 수 있는 기회를 제공합니다.
'딥러닝 > LLM' 카테고리의 다른 글
Supervised Fine-tuning: customizing LLMs (0) | 2024.08.06 |
---|---|
Gemma 2 (9B & 27B) Evaluation vs. Open/Closed-Source LLMs (0) | 2024.08.01 |
데이콘 - 도배 하자 질의 응답 처리 후기 (0) | 2024.05.05 |
Kaggle - LLM Science Exam 후기 (1) | 2023.10.23 |
LLM과 LangChain (0) | 2023.05.23 |