<목차>
1. Llama
2. Finetuning
3. Distillation
4. Quantization
5. LoRA and QLoRA
6. Serving
7. 읽어보면 좋을 논문
1. Llama
Llama
: Meta AI에서 개발한 대형 언어 모델
- 7B, 13B, 33B, 65B의 다양한 파라미터로 제공
- 적은 자원으로도 다양한 자연어 처리 작업에서 높은 성능
- 20개의 주요 언어 학습, 공개 데이터 사용
- 비상업적 연구 목적으로 제공, 연구자들이 접근 가능
- 2023년 2월 llama
- 2024년 7월 llama 3.1
◆ 모델 아키텍처
- Transformer
- Pre-normalization
- SwiGLU 활성화 함수
- Rotary Embeddings
2. Finetuning
파인튜닝(Finetuning)?
: 사전 학습된 대규모 언어 모델(LLM) 특정 작업(ex. 감정 분석, 번역, 질문 응답 등)에 맞게 추가 학습시키는 과정
(사전 학습(Pre-training) : 대규모 데이터셋 사용하여 언어의 일반적인 패턴과 구조 학습)
| Pre-training | Finetuning |
| - 매우 큰 규모의 텍스트 데이터셋 사용하여 모델이 언어의 일반적인 패턴 학습 단계 - 다양한 언어 구조와 표현 학습 |
- 사전 학습된 모델을 특정 작업에 맞게 추가 학습시키는 단계 - 특정 작업의 데이터셋 사용하여 모델의 가중치 조정 |
##파인튜닝은 왜 필요할까?##
- 사전 학습된 모델은 이미 충분한 언어 패턴 학습했기 때문에, 특정 작업에 대해 적은 양의 데이터로도 높은 성능 발휘
- 사전 학습에는 많은 데이터와 리소스가 필요하지만, 파인튜닝은 상대적으로 적은 데이터와 자원으로 수행 가능
| 장점 | 단점 |
| - 특정 작업에 맞춘 높은 성능 - 상대적으로 적은 데이터와 자원으로 학습 가능 - 전이 학습 통해 빠른 수렴 속도 (=모델이 처음부터 모든 것을 새로 배우는 것이 아니라, 이미 어느 정도 학습된 상태에서 시작하기 때문에, 새로운 문제에 대해 더 빠르게 학습하고 최적의 성능 도달 가능) |
- 잘못된 데이터셋 사용 시 모델의 성능 저하 - Finetuning 과정에서 과적합 위험 - 모델의 원래 학습된 지식 손상 가능성 존재 |
◆ 다양한 파인튜닝 방법들
1. Instruction Fine-Tuning
- 모델에게 특정 작업이나 목표 명확하게 지시(Instruction)하여 학습 유도하는 방법
- 명확한 지시와 예시를 포함한 데이터셋 사용하여 모델 학습
ex) "다음 문장을 번역하시오"와 같은 지시가 포함된 데이터
2. Full Fine-Tuning
- 사전 학습된 모델 전체를 특정 작업 데이터셋으로 학습시키는 방법
- 모델의 모든 파라미터 조정하여 특정 작업에 맞게 최적화
특정 작업의 데이터셋(ex. 감정 분석, 번역 등)
3. Parameter-Efficient Fine-Tuning (PEFT)
- 모델의 일부 파라미터만 조정하여 학습 비용과 시간 줄이는 방법
- 주요 레이어나 특정 파라미터만 조정하고 나머지 파라미터는 고정
- 특정 작업의 데이터셋
- 작은 어댑터 모듈 추가하여 학습
4. Supervised Fine-tuning (SFT)
- 지도 학습을 통해 모델을 특정 작업에 맞게 학습시키는 방법
- 라벨링된 데이터셋 사용하여 모델 학습
- 특정 작업의 라벨링된 데이터셋
◆ LLM이 요구하는 VRAM(= 그래픽 처리 단위인 GPU에서 활용되는 비디오 메모리(VRAM)의 양)
Training
- Dataset size, batch size, length of sequence
- Model parameters
- Gradient, optimizer
Finetuning
- Model size
- Gradient, optimizer
- PEFT같은 특정 방법에서는 각 크기들 줄어들 여지 있음
Inference
- Model size
- Activated memory like batch size, length of sequence
3. Model Distillation
모델 증류(Model Distillation)

- 큰 모델(교사 모델, Teacher Model)의 지식을 작은 모델(학생 모델, Student Model)에 전달하여 작은 모델이 큰 모델의 성능 최대한 모방하는 기법
- 작은 모델이 더 적은 자원으로도 높은 성능 발휘할 수 있도록 함
[증류의 주요 구성]
- 교사 모델(Teacher Model): 큰 파라미터 가진 고성능 모델
- 학생 모델(Student Model): 교사 모델의 지식 전달받아 더 작지만 효율적인 모델
- 소프트 타겟(Soft Targets): 교사 모델의 예측 확률 분포(학생 모델의 학습에 사용)
##왜 소프트 타겟을 사용하면 기존 방법보다 미묘한 패턴이나 관계를 학습할 수 있는가?##
(여기서 말하는 기존 방법 = 하드 타겟)
• 하드 타겟: 이진 레이블(ex. 고양이=1, 개=0)이나 다중 클래스 레이블(ex. 고양이=1, 개=2, 새=3 등)로 표현
• 소프트 타겟: 교사 모델이 예측한 각 클래스에 대한 확률 나타냄. 이는 모든 가능한 클래스에 대해 0과 1 사이의 값으로 분포되며, 총합은 1. 예를 들어, 이미지에 대한 소프트 타겟이 [고양이=0.9, 개=0.1]이면, 이 이미지가 고양이일 가능성이 매우 높다는 것 의미
[모델 증류 과정]
- 큰 교사 모델 훈련
- 교사 모델 사용하여 학습 데이터에 대한 소프트 타겟(예측 확률 분포) 생성
- 학생 모델을 소프트 타겟과 원래 라벨(하드 타겟) 사용해 훈련
[모델 증류의 장점]
- 작은 모델은 더 적은 메모리와 계산 자원으로 높은 성능 발휘
- 작아진 모델은 모바일 기기나 임베디드 시스템 등 자원이 제한된 환경에 배포 용이
[LLM에서의 적용]
- 대규모 언어 모델 증류하여 더 작은 모델로 만들어, 비슷한 성능을 유지하면서도 배포와 실행 용이
- 작은 모델은 더 빠른 추론 속도 제공하므로 실시간 애플리케이션에 유리함
- 훈련 및 배포 시 필요한 컴퓨팅 자원과 전력 소비감소
4. Quantization
양자화 (Quantization)
: 딥러닝 모델의 메모리와 계산 효율성 높이기 위한 기술
- 고정 소수점(fixed-point)숫자 표현 사용하여 모델의 가중치와 활성화 값 표현하는 방식
- 훈련된 모델의 정확성 최대한 유지하면서도 성능 개선
[양자화의 필요성]
- 모델 파라미터의 크기 줄여 메모리 사용량 절감
- 고정 소수점 연산은 부동 소수점 연산보다 빠르기 때문에 속도 빨라짐
##왜 고정 소수점 연산이 부동 소수점 연산보다 빠른가요?##
고정 소수점: 돈을 센트로 계산하기
고정 소수점 연산을 사용하는 것은 모든 금액을 센트로만 계산하는 것과 비슷.
예를 들어, $12.34를 1234센트로, $23.45를 2345센트로 환산해서 계산.
이렇게 하면 각각의 금액을 100으로 나눌 필요 없이 간단히 덧셈 가능
• 1234센트 + 2345센트 = 3579센트
• 이 결과를 다시 달러로 환산하면 $35.79
이 방법은 계산 과정이 매우 간단하고 빠릅니다.
부동 소수점: 돈을 달러와 센트로 계산하기
부동 소수점 연산을 사용하는 것은 달러와 센트를 별도로 처리하는 것과 비슷.
예를 들어, $12.34와 $23.45를 더할 때 각각의 값을 달러 부분과 센트 부분으로 나눠서 계산해야 함
• $12와 34센트, $23와 45센트
• 센트를 더하면 79센트, 달러를 더하면 $35
• 최종 금액은 $35.79
- 낮은 비트 폭(bit-width)으로 연산하면 에너지 소비 감소

[양자화의 종류]
- 정적 양자화(Static Quantization)
비유) 마치 여행준비를 미리 완료하고 떠나는 것
- 동적 양자화(Dynamic Quantization)
비유) 마치 여행 가방을 싸면서 필요한 물품을 도착해서 살 것을 결정하는 것
- 훈련 중 양자화(Quantization-aware Training, QAT)
비유) 실전처럼 훈련하는 스포츠 팀(실제 경기에서 사용될 기술과 전략을 연습하면서 팀을 준비시키는 것)
| 정적 양자화(Static Quantization) | 동적 양자화(Dynamic Quantization) | 훈련 중 양자화(Quantization-aware Training, QAT) | |
| 정의 | - 모델 훈련 후 가중치와 활성화 값을 정밀도가 낮은 형식(예: 8비트 정수)으로 변환 - 메모리 사용량 줄이고, 추론 속도 향상 기법 - 모델의 성능 최대한 유지하면서도 계산 자원 절감 |
- 추론 시점에서 모델의 일부 또는 전체 가중치와 활성화 값을 정밀도가 낮은 형식(예: 8비트 정수)으로 변환 - 메모리 사용량 줄이고 추론 속도 향상 기법 - 런타임 동안 실시간으로 양자화 수행하여, 모델의 성능 저하 최소화, 효율성 극대화 |
- 모델 훈련 과정에서 양자화 고려하여 모델 최적화 기법 - 훈련 단계에서 양자화로 인한 손실 최소화하여 높은 성능 유지 |
| 특징 | - 모델 훈련 완료된 후에 양자화 적용 - 이미 훈련된 모델에 쉽게 적용 가능, 추가 훈련 필요X - 미세 조정 없이도 안정적인 성능 유지 |
- 추론 중 활성화 값 양자화 - 전체 모델이 아닌 일부만 양자화하여 메모리 효율성 높임 - 고정 소수점 연산 사용하여 추론 시간 단축 |
- 모델 훈련 시 양자화로 인한 손실 고려하여 훈련 - 가중치와 활성화를 8비트 정수로 변환하여 양자화된 상태 시뮬레이션 - 양자화 후에도 높은 정확도 유지 |

5. LoRA and QLoRA
LoRA (Low-Rank Adaptation)
: 딥러닝 모델의 미세 조정 효율적으로 수행하기 위한 기법
대규모 사전 훈련된 모델에 대해 소수의 추가적인 파라미터 도입하여 새로운 태스크에 특화된 학습 가능하게 하는 기법
- 기존 모델의 모든 파라미터 업데이트 대신, 저차원(low-rank)행렬로 모델 파라미터 분해하여 업데이트
-> 메모리 사용량 줄이고, 미세 조정 과정에서 계산 효율성 높임
[LoRA 원리]
- 원래의 파라미터 행렬W를 두 개의 저차원 행렬A와 B의 곱으로 분해
- 학습 중에는 이 저차원 행렬A와 B만 업데이트
- 모델의 표현력 유지하면서도 학습에 필요한 자원 크게 줄일 수 있음
ex.
1. 행렬 선택: 모델의 특정 층에서 가중치 W 선택.
(이 가중치는 일반적으로 해당 층의 입력과 출력을 연결하는 역할)
2. 낮은 랭크 행렬 도입: 두 개의 작은 행렬 A 와 B 정의
A 는 d * r 의 차원, B 는 r * d 의 차원 (여기서 d 는 원래 가중치 W 의 차원, r 은 이보다 훨씬 작은 값(즉, 랭크가 낮음))
3. 곱셈 및 추가: 행렬 A 와 B를 곱하여 얻은 A * B 는 d * d 의 차원, 이를 원래의 가중치 W 에 추가
즉, 수정된 가중치는 W + c(A * B) 가 됩니다. 여기서 c는 스케일링 파라미터로, A * B 의 영향 조절
= 원래 가중치값을 수정하지 않으면서 추가적인 변화 가능
| LoRA의 장점 | LoRA의 단점 |
| - 저차원 행렬만 업데이트하므로 메모리 사용량 적음 - 전체 파라미터 업데이트하지 않기 때문에 학습 속도 빨라짐 - 특히 자원 제한된 환경에서 효과적 |
- 저차원 행렬로 모델 파라미터 분해하는 과정 추가됨에 따라 모델의 구조가 복잡해져서 구현과 유지보수의 어려움 증가 - 원래의 고차원 파라미터 공간에서 저차원 공간으로의 매핑이 항상 최적의 성능 보장하지 않아 특정 작업이나 데이터셋에 대해 성능 저하 가능 - 저차원 행렬로 분해할 때, 모델의 표현력 제한되어 복잡하거나 비선형적인 관계 학습하지 못할 가능성 존재 - 저차원 행렬 위한 추가 메모리 필요 |
QLoRA (Quantized Low-Rank Adaptation)
: LoRA의 개념 확장, 양자화된 모델에 대해 저차원 적응 적용한 것 (=LoRA + 양자화)
(양자화(quantization): 모델의 파라미터를 낮은 비트 정밀도로 변환하여 메모리와 계산 효율성 극대화하는 기법)
- LoRA에서 도입된 낮은 랭크의 행렬 A 와 B 를 저비트의 정밀도로 양자화
- QLoRA는 양자화된 모델 파라미터를 저차원 행렬로 분해하여 학습하는 방식
[QLoRA의 원리]
- 모델 파라미터를 먼저 양자화(예: 8비트 정수)하여 메모리 사용량 감소
- 이후, 양자화된 파라미터를 저차원 행렬로 분해하여 LoRA 방식으로 학습 진행
- 양자화와 저차원 분해 결합함으로써, 더욱 높은 메모리 효율성과 빠른 학습 구현
| QLoRA의 장점 | QLoRA의 단점 |
| - 양자화와 저차원 분해 결합하여 메모리 사용량 최소화 - 양자화된 파라미터와 저차원 행렬만 학습하므로, 학습 속도 매우 빠름 - 효율성 높이면서도 모델의 성능 유지 |
- 파라미터를 낮은 비트 정밀도로 양자화하는 과정에서 양자화 오류 발생 가능 - QLoRA는 양자화와 저차원 분해 결합 기법이기 때문에 구현 복잡해져 개발 시간과 비용 증가시킬 수 있음 - 양자화된 모델의 효율성 극대화하려면 특정 하드웨어(예: TPU, GPU)의 지원 필요할 수 있음 - 양자화 및 저차원 분해 과정에서 추가적인 계산이 필요하기 때문에 학습 시간 증가 |
##LoRA와 QLoRA간 정확히 무슨 차이가 있는 거에요?##
1. 양자화의 적용: LoRA는 낮은 랭크의 행렬 통해 모델 확장하지만, QLoRA는 이 행렬들을 추가적으로 양자화하여 메모리와 계산 리소스 사용 더욱 최적화
2. 리소스 효율성: QLoRA는 LoRA에 비해 더 낮은 메모리와 연산 리소스 사용. 이는 특히 자원이 제한된 환경에서 모델 배포할 때 유리
3. 실행 속도: 양자화된 파라미터는 실행 시간 단축시키는 데 도움. 특히 하드웨어가 낮은 비트 연산에 최적화되어 있을 때 더욱 유리
6. Serving
모델 서빙(Serving)

: 훈련된 모델을 실제 환경에서 사용할 수 있도록 배포하고 실행하는 과정
- 다양한 애플리케이션에서 모델이 실시간으로 또는 배치(batch) 처리로 예측 등의 작업 수행할 수 있게 함
[서빙의 단계]
1) 모델 저장: 훈련된 모델 저장
2) 모델 배포: 저장된 모델을 적절한 환경에 배포
3) 예측 요청 처리: 사용자의 요청 받아 모델 예측 수행
4) 결과 반환: 모델의 예측 결과 사용자에게 반환
◆ 서빙의 상세단계
1) 모델 저장 및 형식
- 모델 형식: 딥러닝 모델은 다양한 형식으로 저장 가능
- TensorFlow의 SavedModel, PyTorch의 TorchScript, ONNX(Open Neural Network Exchange) 등
- 모델 버전 관리: 모델의 버전 관리하여 업데이트 및 롤백, 유지보수 용이
2) 모델 배포
- 컨테이너화: Docker와 같은 컨테이너 기술 사용하여 배포 환경의 일관성 보장
- 서버리스 배포: AWS Lambda, Google Cloud Functions 등 서버리스 컴퓨팅 이용하여 모델 배포
- 클러스터 배포: Kubernetes와 같은 오케스트레이션 도구 사용하여 모델을 클러스터에 배포
3) 예측 요청 처리
- API 엔드포인트: RESTful API 또는 gRPC 사용하여 예측 요청 처리
- 배치 처리: 대규모 요청 배치로 처리하여 효율성 확보
4) 모니터링 및 로깅
- 모델 모니터링: 모델의 성능 실시간으로 모니터링하여 문제 감지
- 로깅: 예측 요청 및 결과 로깅하여 추적 및 분석
◆ 서빙 아키텍처
1) 단일 서버 서빙
: 모델을 하나의 서버 또는 단일 인스턴스에서 실행하는 방식
- 간단한 애플리케이션에 적합
- 제한된 요청 처리 능력 가지며, 확장성 낮음
2) 분산 서빙
: 여러 서버나 인스턴스에 걸쳐 모델을 배포하여 운영하는 방식
- 여러 서버에 모델 배포하여 요청 처리 능력 확장
- 로드 밸런서 사용해 요청 분산
3) 서버리스 서빙
: 서버 관리를 클라우드 서비스 제공자가 담당하고 사용자는 코드 실행에만 집중할 수 있는 구조
- 서버리스 플랫폼 사용하여 자동으로 확장
- 사용량에 따라 비용 청구
◆ 모델 서빙 성능 최적화

모델 최적화
- 양자화: 모델 양자화하여 메모리 사용량과 추론 시간 감소
- 프루닝: 불필요한 파라미터 제거하여 모델 크기 감소
- 지연 로딩: 필요한 경우에만 모델을 메모리에 로드하여 자원을 절약
하드웨어 가속
- GPU: 그래픽 처리 장치 사용하여 대규모 병렬 연산 수행
- TPU: Tensor Processing Unit 사용하여 딥러닝 연산 가속
'인공지능과정 이론 수업' 카테고리의 다른 글
| AI편(2){Hello AI world;} (0) | 2024.08.12 |
|---|---|
| Kakao AI Platform(KAP)? (0) | 2024.08.10 |
| Day 19 생성형AI III / LLM, ChatGPT, RAG, Langchain, LlamaIndex (0) | 2024.07.29 |
| Day18_생성형AI 프롬프트 엔지니어링 (0) | 2024.07.26 |
| Day17_생성형AI I (+Attention is All You Need) (2) | 2024.07.25 |