LLM Course: 대규모 언어 모델(LLM)에 대한 체계적인 학습 과정

PyTorchKR​:fire::kr: :thinking::speech_balloon:

  • 대규모 언어 모델(LLM, Large Language Model)에 대한 관심이 높아지며 많은 개발자들이 새롭게 접근하고 있지만, 빠르게 발전하고 있어 잘 정리된 정보를 찾기가 쉽지 않습니다. DevOps 로드맵 저장소에 영감을 받아 LLM 분야에 대해서도 체계적인 학습 과정을 정리하고 있는 저장소가 있어 소개합니다.
  • GitHub 저장소에 최신 내용들이 계속 업데이트될 예정이니, 가급적 아래 링크를 통해 원문을 함께 참고해주시기를 부탁드립니다 :bowing_man:
  • 이 글은 GPT 모델로 정리한 것으로, 잘못된 부분이 있을 수 있으니 글 아래쪽의 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

LLM Course: 대규모 언어 모델(LLM)에 대한 체계적인 학습 과정

소개

대규모 언어 모델에 대한 이 과정은 다음의 3부분으로 나뉘어 있습니다:

  1. 다양한 노트북 소개: LLM과 관련한 다양한 주제들에 대한 문서 및 노트북들을 정리하고 있습니다.
  2. :jigsaw: LLM 기초(LLM Fundamentals) 과정: Python, 수학, 인공신경망 등에 대한 내용을 다루고 있습니다.
  3. :scientist: LLM 과학자(LLM Scientist) 과정 : 최신 기술을 사용하여 가능한 최고의 LLM을 구축하는 내용을 다루고 있습니다.
  4. :construction_worker_man: LLM 엔지니어(LLM Engineer) 과정 (준비 중): LLM 기반 애플리케이션 개발 및 배포에 대한 내용을 다루고 있습니다.

:memo: 노트북(Notebook)

대규모 언어 모델과 관련된 노트북 및 문서 목록입니다.

LLMOps 도구 관련 노트북

제목 설명 노트북 링크
:face_with_monocle: LLM AutoEval RunPod를 사용하여 LLM을 자동으로 평가 Google Colab
:yawning_face: LazyMergekit mergekit을 사용하여 한 번의 클릭으로 모델을 쉽게 병합할 수 있습니다. Google Colab
:zap: AutoGGUF 한 번의 클릭으로 LLM을 GGUF 형식으로 정량화합니다. Google Colab

파인튜닝(Finetuning) 관련 노트북

제목 설명 소개 글 노트북 링크
Google Colab에서 라마 2 미세 조정하기 처음으로 라마 2 모델을 미세조정하는 사람들을 위한 단계별 가이드입니다. 소개 글 Google Colab
Axolotl로 LLM 미세 조정하기 미세 조정을 위한 최첨단 도구에 대한 엔드투엔드 가이드입니다. 소개 글 (작업 중)
DPO로 Mistral-7b 미세 조정하기 DPO로 감독된 미세 조정된 모델의 성능을 향상시킵니다. 소개 글 Google Colab

양자화(Quantization) 관련 노트북

제목 설명 소개 글 노트북 링크
1. 양자화 소개 8비트 양자화를 사용하여 대규모 언어 모델을 최적화합니다. 소개 글 Google Colab
2. GPTQ를 사용한 4비트 양자화 자체 오픈 소스 LLM을 양자화하여 소비자 하드웨어에서 실행합니다. 소개 글 Google Colab
3. GGUF 및 llama.cpp로 정량화하기 llama.cpp로 Llama 2 모델을 정량화하고 GGUF 버전을 HF 허브에 업로드합니다. 소개 글 Google Colab
4. ExLlamaV2: LLM을 실행하는 가장 빠른 라이브러리 EXL2 모델을 정량화하여 실행하고 HF 허브에 업로드합니다. 소개 글 Google Colab

그 외 노트북

제목 설명 소개 글 노트북 링크
대규모 언어 모델의 디코딩 전략 Beam Search에서 Nucleus Sampling에 이르는 텍스트 생성 가이드입니다. 소개 글 Google Colab
GPT-2의 손실 풍경 시각화하기 Weight Perturbations를 기반으로 한 loss landscape의 3D 플롯에 대한 가이드입니다. Tweet Google Colab
지식 그래프로 ChatGPT 개선하기 지식 그래프(Knowledge Graph)로 ChatGPT의 답변을 보강하세요. 소개 글 Google Colab
Mergekit으로 LLM 병합하기 GPU 없이도 나만의 모델을 쉽게 만들 수 있습니다! 소개 글 Google Colab

:jigsaw: LLM 기초 과정(LLM Fundamentals)

🧩 LLM 기초 과정(LLM Fundamentals)

1. 머신러닝을 위한 수학(Mathematics for Machine Learning)

머신러닝을 마스터하기 전에 이러한 알고리즘의 기반이 되는 기본적인 수학적 개념을 이해하는 것이 중요합니다:

  • 선형 대수(Linear Algebra): 이는 많은 알고리즘, 특히 딥러닝에 사용되는 알고리즘을 이해하는 데 매우 중요합니다. 주요 개념에는 벡터(Vector), 행렬(Matrix), 행렬식(Determinants), 고유값(Eigen Values)과 고유벡터(Eigen Vectors), 벡터 공간(Vector Space), 선형 변환(Liniear Transformations) 등이 포함됩니다.
  • 미적분학(Calculus): 많은 머신러닝 알고리즘은 연속 함수의 최적화를 포함하며, 이를 위해서는 미분(Derivatives), 적분(Intergrals), 극한(Limits), 급수(Series)에 대한 이해가 필요합니다. 다변수 미적분(Multivariable Calculus)과 기울기(Gradients) 개념도 중요합니다.
  • 확률과 통계(Probability and Statistics): 모델이 데이터를 통해 학습하고 예측하는 방법을 이해하는 데 중요합니다. 주요 개념으로는 확률 이론(Probability Theory), 무작위 변수(Random Variables), 확률 분포(Probability Distributions), 기대값(Expectations), 분산(Variance), 공분산(Covariance), 상관관계(Correlation), 가설 검정(Hypothesis Testing), 신뢰 구간(Confidence Intervals), 최대 가능성 추정(Maximum Likelihood Estimation), 베이지안 추론(Bayesian Inference) 등이 있습니다.

:books: 관련 자료들(Resources):

2. 머신러닝을 위한 파이썬(Python for Machine Learning)

Python은 강력하고 유연한 프로그래밍 언어로, 가독성, 일관성, 강력한 데이터 과학 라이브러리 생태계 덕분에 머신러닝에 특히 적합합니다.

  • 파이썬 기초(Python Basics): Python 프로그래밍을 하려면 기본 구문, 데이터 유형, 오류 처리, 객체 지향 프로그래밍에 대한 충분한 이해가 필요합니다.
  • 데이터 과학 라이브러리(Data Science Libraries): 숫자 연산을 위한 NumPy, 데이터 조작 및 분석을 위한 Pandas, 데이터 시각화를 위한 Matplotlib 및 Seaborn에 익숙해져야 합니다.
  • 데이터 전처리(Data Preprocessing): 여기에는 기능 확장 및 정규화, 누락된 데이터 처리, 이상값 감지, 범주형 데이터 인코딩, 데이터를 훈련, 검증 및 테스트 세트로 분할하는 작업이 포함됩니다.
  • 머신러닝 라이브러리(Machine Learning Libraries): 다양한 지도 및 비지도 학습 알고리즘을 제공하는 라이브러리인 Scikit-learn에 대한 숙련도는 필수입니다. 선형 회귀, 로지스틱 회귀, 의사 결정 트리, 랜덤 포레스트, K-최근접이웃(K-NN), K-평균 클러스터링과 같은 알고리즘을 구현하는 방법을 이해하는 것이 중요합니다. 고차원 데이터를 시각화하는 데는 PCA 및 t-SNE와 같은 차원 축소 기법도 유용합니다.

:books: 관련 자료(Resources):

3. 신경망(Neural Networks)

신경망은 많은 머신러닝 모델, 특히 딥러닝 영역에서 기본이 되는 부분입니다. 신경망을 효과적으로 활용하려면 신경망의 설계와 메커니즘에 대한 포괄적인 이해가 필수적입니다.

  • 기초(Fundamentals): 여기에는 레이어, 가중치, 바이어스, 활성화 함수(Sigmoid, tanh, ReLU 등) 등 신경망의 구조에 대한 이해가 포함됩니다.
  • 학습 및 최적화(Training and Optimization): 역전파 및 평균 제곱 오차(MSE), 교차 엔트로피와 같은 다양한 유형의 손실 함수에 익숙해집니다. 경사 하강, 확률적 경사 하강, RMSprop, 아담과 같은 다양한 최적화 알고리즘을 이해합니다.
  • 과적합(Overfitting): 과적합(모델이 훈련 데이터에서는 잘 작동하지만 보이지 않는 데이터에서는 성능이 떨어지는 경우)의 개념을 이해하고 이를 방지하기 위한 다양한 정규화 기법(드롭아웃, L1/L2 정규화, 조기 중지, 데이터 증강)을 학습합니다.
  • 다층 퍼셉트론(MLP: Multilayer Perceptron) 구현: PyTorch를 사용하여 완전 연결 네트워크라고도 하는 MLP를 구축하세요.

:books: 관련 자료(Resources):

4. 자연어 처리(NLP)

NLP는 인간의 언어와 기계의 이해 사이의 간극을 메워주는 매력적인 인공 지능 분야입니다. 간단한 텍스트 처리부터 언어적 뉘앙스 이해에 이르기까지 NLP는 번역, 감정 분석, 챗봇 등과 같은 다양한 애플리케이션에서 중요한 역할을 합니다.

  • 텍스트 전처리(Text Preprocessing): 토큰화(tokenization, 텍스트를 단어 또는 문장으로 분할), 어간화(stemming , 단어를 어근 형태로 축소), 형태소 분석(lemmatization, 어간화와 유사하지만 문맥을 고려), 불용어(stop words, 사용하지 않는 단어) 제거 등과 같은 다양한 텍스트 전처리 단계에 대해 학습할 수 있습니다.
  • 특징 추출 기법(Feature Extraction Techniques): 텍스트 데이터를 머신러닝 알고리즘이 이해할 수 있는 형식으로 변환하는 기법에 익숙해집니다. 주요 기법으로는 Bag-of-words(BoW), 용어 빈도-역문서 빈도(TF-IDF), n-그램(n-grams) 등이 있습니다.
  • 단어 임베딩(Word Embeddings: 단어 임베딩은 비슷한 의미를 가진 단어들이 비슷한 표현을 가질 수 있도록 하는 단어 표현의 한 유형입니다. 주요 방법으로는 Word2Vec, GloVe, FastText 등이 있습니다. embedding
  • 순환 신경망(RNN, Recurrent Neural Network): 시퀀스 데이터(순서를 가진 데이터)로 작업하도록 설계된 신경망의 일종인 RNN의 작동 원리를 이해합니다. 장기 종속성을 학습할 수 있는 두 가지 RNN 변형인 LSTM과 GRU를 살펴보세요.

:books: 관련 자료(Resources):


:scientist: LLM 과학자 과정(LLM Scientist)

🧑‍🔬 LLM 과학자 과정(LLM Scientist)

1. LLM 구조 (The LLM architecture)

트랜스포머(Transformer) 아키텍처에 대한 심층적인 지식은 필요하지 않지만, 입력(Token)과 출력(Logit)에 대해 잘 이해하는 것이 중요합니다. 기본적인 어텐션(vanilla attention) 메커니즘은 나중에 개선된 버전이 도입되므로 마스터해야 할 또 다른 중요한 구성 요소입니다.

  • 높은 수준에서 살펴보기(High-level view): 인코더-디코더 트랜스포머 아키텍처, 특히 모든 최신 LLM에서 사용되는 디코더 전용 GPT 아키텍처를 다시 살펴봅니다. nanogpt minigpt-4 minigpt-5
  • 토큰화(Tokenization): 원시 텍스트 데이터를 모델이 이해할 수 있는 형식으로 변환하는 방법을 이해하며, 여기에는 텍스트를 토큰(보통 단어 또는 하위 단어)으로 분할하는 작업이 포함됩니다. tokenize
  • 어텐션 메커니즘(Attention Mechanism): 모델이 출력을 생성할 때 입력의 여러 부분에 집중할 수 있도록 하는 셀프 어텐션(Self-Attention)와 확장된 닷-프로덕트 어텐션(Scaled Dot-Product Attention) 등, 어텐션 메커니즘에 대한 이론을 이해합니다. attention flashattention-2 linear-attention pagedattention gaussian-attention
  • 텍스트 생성(Text Generation): 모델이 출력 시퀀스를 생성할 수 있는 다양한 방법에 대해 알아보세요. 일반적인 전략에는 그리디 디코딩(Greedy Decoding), 빔 서치(Beam Search), 상위 k개 샘플링(Top-k Sampling), 뉴클리우스 샘플링(Nucleus Sampling) 등이 있습니다. flash-decoding lookahead-decoding speculative-decoding

:books: 참고 자료(References):

2. 지시형 데이터셋 구축 (Building an instruction dataset)

위키피디아 및 기타 웹사이트에서 원시 데이터를 쉽게 찾을 수 있지만, 일상에서 지시-답변 쌍(instructions and answers pair)을 수집하는 것은 어렵습니다. 기존 머신러닝과 마찬가지로 데이터셋의 품질은 모델의 품질에 직접적인 영향을 미치기 때문에 미세조정(Finetuning, 파인튜닝) 과정에서 가장 중요한 구성 요소가 될 수 있습니다.

  • Alpaca, 알파카 형식의 데이터셋: OpenAI API(GPT)를 사용하여 합성 데이터를 처음부터 생성할 수 있습니다. Seed와 시스템 프롬프트를 지정하여 다양한 데이터셋을 생성할 수 있습니다. alpaca llama
  • 고급 기술(Advanced Techniques): Evol-Instruct를 통해 기존 데이터셋을 개선하는 방법, Orcaphi-1 논문에서와 같이 고품질 합성 데이터를 생성하는 방법에 대해 알아보세요. orca openorca phi-15 phi-2
  • 데이터 필터링(Data Filtering): 정규표현식(RegEx, Regular Expression), 유사-중복 제거(removing near-duplicates), 토큰 수가 많은 답변에 집중하는 등의 전통적인 기법에 대해 알아보세요.
  • 프롬프트 템플릿(Prompt Template): 질문-답변의 서식을 지정하는 진정한 표준 방식은 없으므로 ChatML, Alpaca 등과 같은 다양한 채팅 템플릿에 대해 알아두는 것이 중요합니다. prompt

:books: 참고 자료(References):

3. 사전 학습 모델(Pre-training Models)

사전 학습은 시간이 오래 걸리고 비용이 많이 드는 과정이므로 이 과정의 초점이 아닙니다. 사전 학습 중에 어떤 일이 일어나는지 어느 정도 이해하는 것이 좋지만, 실습 경험이 반드시 필요한 것은 아닙니다.

  • 데이터 파이프라인(Data pipeline): 사전 학습에는 필터링, 토큰화, 사전 정의된 어휘로 대조해야 하는 방대한 데이터셋(예: 라마 2는 2조 개의 토큰으로 학습됨)이 필요합니다. data-pipeline
  • 인과 관계 언어 모델링(Causal language modeling): 인과적 언어 모델링과 마스킹 언어 모델링의 차이점과 이 경우에 사용되는 손실 함수에 대해 알아보세요. 효율적인 사전 학습을 위해 Megatron-LM 또는 gpt-neox에 대해 자세히 알아보세요. causal-ai gpt-neox
  • 스케일링 법칙(Scaling laws): 스케일링 법칙은 모델 크기, 데이터셋의 크기, 학습에 사용되는 컴퓨팅 양에 따라 예상되는 모델 성능을 설명합니다.
  • 고성능 컴퓨팅(HPC, High-Performance Computing): 여기서는 다루지 않지만, 처음부터 자체 LLM을 생성하려는 경우(하드웨어, 분산 워크로드 등) HPC에 대한 더 많은 지식이 필수적입니다.

:books: 참고 자료(References):

4. 감독에 의한 파인튜닝 (SFT, Supervised Fine-Tuning)

사전 학습된 모델은 다음 토큰 예측 작업에 대해서만 학습되기 때문에 유용한 어시스턴트가 될 수 없습니다. SFT를 사용하면 명령에 응답하도록 모델을 조정할 수 있습니다. 또한 모든 데이터(비공개, GPT-4에서 볼 수 없는 데이터 등)에 대해 모델을 미세 조정할 수 있으며 OpenAI와 같은 API 비용을 지불하지 않고도 사용할 수 있습니다.

  • 전체 파인튜닝(Full Fine-tuning): 전체 파인튜닝은 모델의 모든 매개 변수를 학습시키는 것을 의미합니다. 효율적인 기법은 아니지만 약간 더 나은 결과를 얻을 수 있습니다. fine-tuning
  • LoRA, Low-Rank Adaption]: 낮은 순위의 어댑터를 기반으로 하는 파라미터 효율적 기법(PEFT, Parameter-Efficient Fine-tuning)입니다. 모든 파라미터를 훈련하는 대신 이러한 어댑터만 훈련합니다. lora peft
  • QLoRA, Quantized LoRA: 모델의 가중치를 4비트로 양자화(Quantization)하고 메모리 스파이크를 관리하기 위해 페이징 옵티마이저를 도입한 LoRA 기반의 또 다른 PEFT입니다. Unsloth와 결합하면 무료 Colab 노트북에서 효율적으로 실행할 수 있습니다. qlora blora
  • Axolotl: 많은 최신 오픈 소스 모델에서 사용되는 사용자 친화적이고 강력한 파인튜닝 도구입니다.
  • DeepSpeed: 멀티 GPU 및 멀티 노드 설정을 위한 LLM의 효율적인 사전 학습 및 파인튜닝 도구입니다. (Axolotl에서 구현) deepspeed

:books: 참고 자료(References):

5. 인간 피드백을 통한 강화 학습(RLHF, Reinforcement Learning from Human Feedback)

감독에 의한 파인튜닝(SFT) 후, RLHF는 LLM의 답변을 사람의 기대치에 맞추는 데 사용되는 단계입니다. 사람(또는 인공적인)의 피드백으로부터 선호도를 학습하여 편향을 줄이거나 모델을 검열하거나 더 유용한 방식으로 작동하도록 하는 데 사용할 수 있습니다. SFT보다 더 복잡하며 종종 선택 사항으로 간주됩니다.

  • 선호도 데이터셋(Preference datasets): 이러한 데이터셋은 일반적으로 일종의 순위가 지정된 여러 개의 답변을 포함하므로 지시어 데이터셋보다 생성하기가 더 어렵습니다. rlhf rlaif efficient-rlhf
  • 근접 정책 최적화(PPO, Proximal Policy Optimization): 이 알고리즘은 주어진 텍스트가 사람에 의해 높은 순위를 차지할지 여부를 예측하는 보상 모델을 활용합니다. 그런 다음 이 예측을 사용하여 KL-발산(KL-divergence)에 기반한 페널티로 SFT 모델을 최적화합니다. policy
  • 직접 선호도 최적화(DPO, Direct Preference Optimization): DPO는 분류 문제로 재구성하여 프로세스를 단순화합니다. 보상 모델 대신 참조 모델을 사용하며(학습이 필요 없음), 하이퍼파라미터가 하나만 필요하기 때문에 더 안정적이고 효율적입니다. dpo ddpo

:books: 참고 자료(References):

6. 모델 평가 (Evaluation)

LLM 평가는 전체 파이프라인에서 저평가된 부분으로, 시간이 많이 걸리고 신뢰도가 낮은 편입니다. 세부 작업(Downstream Task)이 무엇이냐에 따라 무엇을 평가할지 결정해야 하지만, 항상 굿하트의 법칙(Goodhart's Law)은 기억해두세요: "측정치가 목표가 되면, 더 이상 좋은 측정이 될 수 없다.(When a measure becomes a target, it ceases to be a good measure.)"

  • 전통적 지표(Traditional metrics): 혼잡도(perplexity)나 BLEU 점수와 같은 지표들은 대부분의 상황에서 결함이 있기 때문에 예전만큼 인기가 없습니다. 하지만 이러한 지표를 이해하고 적용 가능한 시기를 파악하는 것은 여전히 중요합니다. perplexity
  • 일반 벤치마크(General benchmarks): 언어 모델 평가 도구(LM Evaluation Harness)를 기반으로 하는 오픈 LLM 리더보드(Open LLM Leaderboard)는 (ChatGPT와 같은) 범용 LLM의 주요 벤치마크입니다. 그 외에도 BigBench, MT-Bench 등의 유명한 벤치마크가 있습니다. llm-evaluation openllm-leaderboard benchmark
  • 작업별 벤치마크(Task-specific benchmarks): 요약, 번역, 질문 답변과 같은 작업에는 전용 벤치마크, 메트릭, 심지어 생의학 질문 답변을 위한 PubMedQA와 같은 하위 도메인(의료, 금융 등)이 있습니다. legalbench
  • 사람에 의한 평가(Human evaluation): 가장 신뢰할 수 있는 평가는 사용자에 의한 수용률 또는 사람에 의한 비교입니다. 모델이 잘 작동하는지 알고 싶다면, 가장 간단하지만 확실한 방법은 직접 사용해 보는 것입니다.

:books: 참고 자료(References):

7. 양자화 (Quantization)

양자화(Quantization)는 낮은 정밀도를 사용하여 모델의 가중치(및 활성화)를 변환하는 프로세스입니다. 예를 들어 16비트를 사용하여 저장된 가중치를 4비트 표현으로 변환할 수 있습니다. 이 기술은 LLM과 관련된 계산 및 메모리 비용을 줄이기 위해 점점 더 중요해지고 있습니다.

  • 기본적인 기법(Base techniques): 다양한 수준의 정밀도(FP32, FP16, INT8 등)와 앱스맥스 및 영점 기법으로 나이브 양자화를 수행하는 방법에 대해 알아보세요. quantization-at-scale
  • GGUF 및 llama.cpp: 원래 CPU에서 실행되도록 설계된 llama.cpp와 GGUF 형식은 소비자용 하드웨어에서 LLM을 실행하는 데 가장 많이 사용되는 도구가 되었습니다. gguf llamacpp
  • GPTQ 및 EXL2: GPTQ, 특히 EXL2 포맷은 놀라운 속도를 제공하지만 GPU에서만 실행할 수 있습니다. 또한 모델을 정량화하는 데 시간이 오래 걸립니다. exllama exllamav2
  • AWQ: 이 새로운 형식은 GPTQ보다 더 정확하지만(복잡성이 낮음) 훨씬 더 많은 VRAM을 사용하며 반드시 더 빠른 것도 아닙니다.

:books: 참고 자료(References):

8. 추론 최적화 (Inference optimization)

VRAM 사용량을 줄이고 생성 속도를 향상시키기 위해 수많은 최적화 기법이 개발되었습니다. 이러한 개선에는 양자화 방법 외에도 보다 효율적인 주의 메커니즘의 구현과 아키텍처 변경이 수반되는 경우가 많습니다.

:books: 참고 자료(References):


:construction_worker_man: LLM 엔지니어 과정 (The LLM Engineer)


현재 작업 중입니다.




:fire:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 뉴스 발행에 힘이 됩니다~ :star_struck:

5개의 좋아요

엄청납니다.
감사합니다. :pray:

1개의 좋아요

자료를 너무 깔끔하고 잘 읽히게 정리 해주셔서 너무 감사드립니다.

1개의 좋아요

Wow… 감사합니다. 커리가 한눈에 잘 보이네요.

1개의 좋아요