Field Log · Entry
LoRA·QLoRA·DoRA와 PEFT: Rank·Target Module·Merge 설계 (6/10)
오늘의 결론
- LoRA는 pretrained weight
W₀를 고정하고 업데이트ΔW를 두 개의 작은 matrixB A로 제한합니다.- Rank
r만 고르면 끝이 아닙니다. Scaleα/r, target module, dropout, bias, learning rate, data, base checkpoint가 adapter behavior를 함께 결정합니다.- QLoRA는 frozen base weight를 4-bit로 저장해 memory를 줄이되, 계산 시 dequantization하고 adapter와 optimizer는 별도 precision을 사용합니다. “모든 학습이 4-bit”가 아닙니다.
- DoRA는 weight의 magnitude와 direction을 분해하고 direction에 low-rank adaptation을 적용합니다. LoRA의 무조건 상위호환으로 가정하지 말고 target model에서 비교합니다.
- Adapter가 작아도 전체 model의 grounding·safety·retention·latency를 평가해야 하며, base hash·tokenizer·chat template·target module·scale 없이는 adapter를 재현할 수 없습니다.
앞 글까지는 어떤 objective로 model behavior를 바꿀지 다뤘습니다. 이제 “모든 parameter를 업데이트해야 하는가?”를 묻습니다.
full fine-tuning:
update all model weights
PEFT:
freeze most base weights
train a small adaptation state
PEFT는 Parameter-Efficient Fine-Tuning의 약자입니다. LoRA는 가장 널리 쓰이는 PEFT 방식 중 하나입니다.
그림 1. Trainable parameter가 작다는 사실과 전체 model memory·activation·evaluation 비용은 다른 문제다. 배포 artifact는 base와 adapter의 결합 identity로 관리한다.
Full Fine-tuning의 비용부터 보자
Model parameter가 P개이고 BF16 weight를 사용하면 weight만 대략 다음 크기입니다.
weight bytes ≈ 2P
하지만 training에는 더 많은 상태가 필요합니다.
- Gradient
- Optimizer first moment
- Optimizer second moment
- 경우에 따라 FP32 master weight
- Activation
- Temporary buffer
- Distributed communication buffer
Adam 계열 optimizer를 쓰는 full fine-tuning memory는 weight size의 단순 두 배가 아닙니다.
PEFT가 줄이는 부분
Base parameter에 gradient와 optimizer state를 만들지 않고 작은 adapter만 학습합니다.
frozen base:
weight storage remains
no base optimizer state
trainable adapter:
weights + gradients + optimizer states
Activation과 forward/backward compute가 사라지는 것은 아닙니다.
Linear Layer의 원래 식
Bias를 생략한 linear layer를 다음 orientation으로 둡니다.
W₀ ∈ R[d_out, d_in]
x ∈ R[d_in]
h = W₀ x
Full fine-tuning은 W₀ 자체를 업데이트합니다.
W = W₀ + ΔW
ΔW도 원래는 d_out × d_in 크기입니다.
LoRA의 Low-rank 가정
LoRA는 task adaptation에 필요한 weight update가 낮은 intrinsic rank로 근사될 수 있다는 가정에서 다음처럼 parameterize합니다.
ΔW = B A
A ∈ R[r, d_in]
B ∈ R[d_out, r]
r ≪ min(d_in, d_out)
Scale을 포함하면 forward는 다음과 같습니다.
h
= W₀x + (α/r) BAx
Framework의 tensor orientation에 따라 code 표기는 transpose되어 보일 수 있지만 shape 관계를 확인하면 됩니다.
Trainable Parameter 계산
원래 linear weight:
P_full = d_out × d_in
LoRA adapter:
P_lora
= r × d_in + d_out × r
= r(d_in + d_out)
예시
d_in = 4096
d_out = 4096
r = 16
원래 weight:
4096 × 4096
= 16,777,216 parameters
LoRA:
16 × (4096 + 4096)
= 131,072 parameters
이 layer에서는 원래 weight의 약 0.78%입니다.
Model 전체 비율은 어떤 module에 adapter를 붙이는지에 따라 달라집니다.
Rank r의 의미
Matrix BA의 rank는 최대 r입니다.
rank(BA) ≤ r
Rank가 작으면
- Trainable parameter 감소
- Optimizer memory 감소
- Adapter file 감소
- 표현 가능한 update subspace 제한
Rank가 크면
- Capacity 증가 가능
- Memory·compute 증가
- Overfitting 가능성
- Full update에 가까워지지만 여전히 factorized
Rank와 quality 관계는 단조롭다고 보장되지 않습니다.
Rank를 모든 Layer에 같게 할까
간단한 baseline은 uniform rank입니다. 하지만 layer와 module별 sensitivity가 다를 수 있어 rank pattern을 사용할 수 있습니다.
rank_pattern:
attention_q: 16
attention_v: 16
attention_o: 8
ffn_up: 32
ffn_down: 16
값은 예시입니다. 추가 복잡성이 실제 이득인지 ablation합니다.
Alpha와 Scale
많은 LoRA 구현은 다음 scale을 사용합니다.
scale = α / r
α는 update 크기에 영향을 줍니다.
Rank를 바꿀 때
α를 고정하면 α/r가 달라지고, α를 rank에 비례시키면 scale이 유지됩니다. Library의 scaling convention과 옵션을 확인합니다.
Scale은 Learning Rate와 상호작용한다
effective adaptation
depends on:
initialization
α/r
learning rate
optimizer
gradient scale
training tokens
Alpha 하나만 독립적으로 해석하지 않습니다.
LoRA Initialization
흔한 초기화는 다음과 같습니다.
A: random initialization
B: zeros
그러면 시작 시:
BA = 0
→ ΔW = 0
→ model output equals base model
다른 initialization도 존재합니다. Reproducibility를 위해 adapter init method와 seed를 기록합니다.
B가 Zero면 A는 처음에 Gradient가 없는가
초기 step의 gradient 흐름을 보면 B가 0일 때 output이 A에 의존하는 경로가 0이어서 A gradient가 처음에는 0일 수 있고, B가 먼저 update된 뒤 A가 학습되기 시작합니다. 정확한 behavior는 식과 구현에 따라 확인합니다.
LoRA Dropout
Adapter branch 입력에 dropout을 적용할 수 있습니다.
h
= W₀x + scale × B A Dropout(x)
Training 때만 적용하고 evaluation에서는 비활성화합니다.
작은 dataset의 regularization에 도움이 될 수 있지만 항상 이득은 아닙니다. Dropout seed와 train/eval mode 오류를 점검합니다.
Target Module이 가장 중요한 선택일 수 있다
Decoder layer의 주요 linear module은 다음과 같습니다.
Attention
q_projk_projv_projo_proj
SwiGLU FFN
gate_projup_projdown_proj
그 밖
- Embedding
- LM head
- Router
- Multimodal projector
Model implementation마다 이름이 다릅니다.
Q와 V만 Target
원 LoRA 연구와 초기 recipe에서 attention projection 일부를 target으로 사용하는 설정이 자주 보입니다. 그러나 이를 모든 task의 정답으로 복사하면 안 됩니다.
All Linear
Attention과 FFN의 모든 linear에 adapter를 붙이면 capacity는 늘지만 parameter와 compute도 늘어납니다.
RAG Agent 관점
- Tool schema·format: attention/output behavior가 중요할 수 있음
- Domain language: FFN adaptation이 도움될 수 있음
- Multimodal input: projector target 검토
- MoE: expert와 router target 지원 확인
Task별 ablation 없이는 어느 module이 필요한지 알 수 없습니다.
Target Module을 이름 String으로만 찾지 않는다
target_modules = ["q_proj", "v_proj"]
다음 failure가 생길 수 있습니다.
- Model code가
query_key_valuefused tensor 사용 - 이름이 정규식에 너무 많이 match
- LM head까지 의도치 않게 match
- 일부 layer가 누락
- Quantized wrapper 아래 module 이름 변경
검증 Report
matched modules: 64
trainable adapter tensors: 128
trainable parameters: 8,388,608
total parameters: 7,000,000,000
trainable percent: 0.1198%
Layer별 target 목록을 artifact로 저장하고 예상 개수와 assert합니다.
Bias와 Norm을 학습할까
LoRA adapter 외에 bias, normalization scale, embedding 일부를 trainable로 둘 수 있습니다.
장점:
- Capacity 증가
- 특정 distribution shift 적응
위험:
- Adapter만 교체해도 base parameter 일부가 달라짐
- Merge/rollback 복잡성
- Trainable state 증가
- “순수 LoRA” 비교가 아님
Manifest에 trainable parameter name을 모두 기록합니다.
QLoRA가 해결하는 Memory
LoRA도 base weight 전체를 BF16/FP16으로 device에 올려야 할 수 있습니다. QLoRA는 frozen base model을 4-bit로 quantize해 storage memory를 줄이고, 그 위에서 LoRA adapter를 학습합니다.
base weights:
frozen 4-bit quantized storage
forward/backward compute:
dequantized to compute dtype as needed
adapter:
trainable higher-precision A, B
QLoRA의 세 가지 핵심 아이디어
QLoRA 논문은 다음을 주요 기술로 설명합니다.
1. 4-bit NormalFloat, NF4
정규분포에 가까운 pretrained weight를 위한 information-theoretically motivated 4-bit data type을 제안합니다.
2. Double Quantization
Quantization scale 같은 quantization constant 자체를 다시 quantize해 평균 memory overhead를 줄입니다.
3. Paged Optimizer
긴 sequence batch에서 activation memory spike가 날 때 unified memory를 활용해 out-of-memory를 완화하는 방법을 사용합니다.
논문의 특정 memory·quality 결과는 해당 hardware, model, dataset, implementation 조건의 결과입니다.
“4-bit Training”이라는 표현의 함정
QLoRA에서 구분해야 할 dtype은 여러 개입니다.
precision:
base_storage: nf4
quantization_scales: nested_quantized
compute_dtype: bf16
adapter_weights: bf16
adapter_gradients: bf16_or_fp32_accumulation
optimizer_state: fp32_or_8bit_by_recipe
모든 matrix multiplication과 gradient가 4-bit integer로 직접 학습된다는 뜻이 아닙니다.
Device Capability
BF16 compute가 안정적·효율적인지는 accelerator 지원에 따라 다릅니다. Unsupported hardware에서 dtype fallback과 kernel을 확인합니다.
Quantization Config가 Base Identity의 일부다
base_quantization:
method: bitsandbytes_nf4
bits: 4
quant_type: nf4
double_quant: true
compute_dtype: bfloat16
library_version: x.y.z
같은 original base checkpoint라도 quantization library와 block size, scale convention이 다르면 training input activation과 결과가 달라질 수 있습니다.
QLoRA Memory를 추정할 때
단순 4-bit weight는 parameter당 0.5 byte이지만 실제 memory는 더 큽니다.
total memory
= quantized weight payload
+ quantization metadata/scales
+ adapter weights
+ adapter gradients
+ adapter optimizer state
+ activations
+ temporary dequant buffers
+ CUDA/runtime workspace
“7B × 0.5 byte = 3.5GB니까 4GB GPU면 된다”는 계산은 틀릴 수 있습니다.
Gradient Checkpointing과 PEFT
Trainable base parameter가 적어도 activation은 backward에 필요합니다. Gradient checkpointing은 activation 일부를 저장하지 않고 backward 때 forward를 재계산합니다.
memory ↓
compute ↑
Adapter training에서 input activation에 gradient가 흐르도록 framework 설정이 필요한 경우가 있습니다. 특정 library의 enable_input_require_grads 같은 구현 세부는 version별 문서를 확인합니다.
DoRA: Magnitude와 Direction 분리
DoRA는 pretrained weight를 magnitude와 direction 성분으로 분리해 weight-decomposed adaptation을 제안합니다.
단순화한 column-wise 표현은 다음과 같습니다.
W = m × V / ||V||
m: magnitudeV / ||V||: normalized direction
DoRA는 direction update에 LoRA를 사용하고 magnitude를 별도 trainable parameter로 둡니다.
V' = W₀ + BA
W' = m' × V' / ||V'||
정확한 normalization axis와 implementation은 library를 확인합니다.
DoRA의 Trade-off
- LoRA와 다른 adaptation capacity
- Magnitude parameter 추가
- Norm 계산과 kernel overhead
- Merge·quantization 호환성
- Serving engine 지원
논문이 보고한 개선을 모든 target rank와 task에 일반화하지 않습니다.
LoRA와 Full Fine-tuning 비교
LoRA 장점
- 작은 trainable state
- 여러 task adapter 저장
- Base checkpoint 공유
- Optimizer memory 감소
- 빠른 실험과 rollback
LoRA 제약
- Low-rank update subspace
- Target module 선택 의존
- Dynamic adapter serving overhead
- 여러 adapter 조합 interference
- Base model의 근본 capability 한계
Full Fine-tuning 장점
- 모든 weight update 가능
- Target architecture의 전체 capacity
- Merge 개념 없이 단일 checkpoint
Full Fine-tuning 제약
- 큰 optimizer·gradient memory
- Distributed training 복잡성
- Checkpoint 저장 비용
- 여러 domain별 full copy
최소한 작은 full fine-tuning baseline 또는 가능한 scale의 비교가 있으면 PEFT의 quality gap을 판단하기 좋습니다.
Adapter Parameter 예산표
가상의 32-layer model, d=4096, n_q=32, n_kv=8, d_h=128, d_ff=11008, rank 16을 생각합니다.
Q Projection
d_out = 4096
d_in = 4096
P_lora = 16(4096 + 4096) = 131,072
K Projection in GQA
d_out = n_kv × d_h = 1024
d_in = 4096
P_lora = 16(4096 + 1024) = 81,920
FFN Up Projection
d_out = 11008
d_in = 4096
P_lora = 16(4096 + 11008) = 241,664
각 layer와 target 수를 곱해 전체 trainable parameter를 계산합니다.
P_total_adapter
= Σ_target r_target(d_in + d_out)
Framework report와 직접 계산을 비교합니다.
Rank와 Target Ablation
최소 Matrix
| Run | Rank | Target | 목적 |
|---|---|---|---|
| A | 8 | q,v | 작은 baseline |
| B | 16 | q,v | rank effect |
| C | 16 | q,k,v,o | attention coverage |
| D | 16 | all linear | FFN effect |
| E | 32 | all linear | capacity saturation |
같은 data tokens, optimizer, seed anchor, evaluation을 사용합니다.
비교할 Metric
- Target task
- Grounding
- Tool schema
- Safety
- Base retention
- Trainable parameter
- Peak memory
- Step time
- Inference overhead
Train loss가 낮은 run이 best deployment는 아닙니다.
Learning Rate
LoRA adapter는 full fine-tuning보다 높은 learning rate를 사용하는 recipe도 많지만 고정 법칙은 아닙니다.
영향 요소:
- Rank와 alpha
- Target module 수
- Adapter initialization
- Dataset size
- Base quantization
- Optimizer
- Batch tokens
- Full vs adapter parameter scale
Log grid와 early evaluation으로 찾습니다.
Adapter Overfitting
Parameter가 적다고 overfitting이 사라지지 않습니다.
small narrow dataset
+ repeated epochs
+ high learning rate
→ memorized style / facts / exact outputs
확인할 것:
- Train-validation response loss gap
- Exact sequence memorization
- Prompt paraphrase generalization
- Unseen tool schema
- Base capability regression
- Output style diversity
Adapter Artifact에 저장할 것
Adapter tensor만으로는 부족합니다.
adapter_manifest:
adapter_id: rag-agent-ko-v7
method: lora
base_model:
repository: example/base-7b
revision: immutable-commit
weight_hash: sha256:...
tokenizer_hash: sha256:...
chat_template_hash: sha256:...
target_modules:
- layers.*.self_attn.q_proj
- layers.*.self_attn.v_proj
rank: 16
alpha: 32
scale: 2.0
dropout: 0.05
bias: none
adapter_dtype: bfloat16
library:
name: example-peft
version: x.y.z
training_run: sft-run-v12
adapter_hash: sha256:...
QLoRA 추가 정보
base_quantization:
format: nf4
double_quant: true
compute_dtype: bfloat16
library_version: x.y.z
Merge
LoRA의 low-rank update를 base weight에 더할 수 있습니다.
W_merged
= W₀ + (α/r) BA
Merge 장점
- 일반 dense model처럼 serving
- Adapter branch kernel overhead 제거 가능
- Engine 호환 단순화
- 하나의 behavior artifact
Merge 제약
- Adapter를 request별로 바꾸기 어려움
- 새 full checkpoint 저장
- Base와 adapter provenance가 합쳐짐
- Merge dtype rounding
- Quantized base merge 복잡성
Quantized Base에 직접 Merge할까
4-bit quantized value에 delta를 단순 더하면 quantization error와 format 문제가 생깁니다.
안전한 일반 workflow는 다음처럼 생각할 수 있습니다.
original higher-precision base
+ adapter delta in safe precision
→ merged higher-precision checkpoint
→ calibrate / quantize for serving
→ full evaluation
Framework가 quantized merge를 지원하더라도 정확한 semantics와 quality를 검증합니다.
Merge Parity Test
unmerged output logits
vs
merged output logits
같은 dtype 조건에서 tolerance를 정하고 layer output, logits, greedy generation을 비교합니다. 이후 serving quantization을 했다면 별도 regression입니다.
Dynamic Adapter Serving
하나의 base model에 여러 adapter를 동적으로 적용할 수 있습니다.
request tenant A → adapter A
request tenant B → adapter B
request default → no adapter
장점
- Base weight 공유
- Adapter hot swap
- Tenant·task별 behavior
- 빠른 rollback
운영 문제
- Adapter load latency
- GPU cache eviction
- Batch 안의 서로 다른 adapter
- Adapter-aware kernel
- Version routing
- Authorization
- Cross-tenant leakage
- Metrics label explosion
Adapter ID를 user input text로 그대로 load하지 않고 allowlist와 authorization을 적용합니다.
여러 Adapter를 합치기
같은 base에 대한 delta는 수학적으로 가중 합할 수 있습니다.
W
= W₀ + λ₁ΔW₁ + λ₂ΔW₂
하지만 behavior가 선형으로 합쳐진다는 보장은 없습니다.
- 두 adapter가 같은 capability를 반대 방향으로 수정
- Scale mismatch
- Target module 불일치
- 서로 다른 base revision
- Chat template 불일치
- Safety adapter가 약화
Composition은 새 model candidate로 전체 평가합니다.
Adapter와 RAG의 역할을 구분한다
Adapter가 잘할 수 있는 것
- Domain language와 style
- Tool call format
- Query planning behavior
- Citation format
- Abstention pattern
- Organization-specific workflow
RAG가 잘할 수 있는 것
- 자주 바뀌는 사실
- Source attribution
- Access-controlled knowledge
- 삭제·업데이트 가능한 corpus
- Long-tail document content
매일 바뀌는 policy 문서를 adapter에 암기시키기보다 RAG로 retrieval하고 adapter는 evidence 사용 behavior를 학습하는 편이 운영상 낫습니다.
RAG Agent Adapter Data
필요한 Slice
- Tool call vs direct answer
- Correct query reformulation
- Sufficient evidence
- Irrelevant evidence
- Contradictory evidence
- Missing permission
- Citation exactness
- Tool timeout·error
- Multi-turn context
잘못된 Adapter 목표
train target:
always answer confidently
production result:
bypass retrieval
hallucinate when evidence missing
Grounding과 abstention을 preference·SFT data에 포함합니다.
PEFT와 Safety
Base safety behavior가 adapter로 바뀔 수 있습니다.
small adapter
≠ small behavioral impact
다음을 full model로 평가합니다.
- Harmful compliance
- Prompt injection resistance
- Authorization behavior
- Benign over-refusal
- Sensitive data leakage
- Tool side effects
- System prompt hierarchy
Adapter file review만으로 판단할 수 없습니다.
Adapter Supply-chain Security
작은 파일이라 쉽게 공유되지만 arbitrary weight artifact입니다.
검증
- Trusted source
- Cryptographic hash/signature
- Safe serialization format
- No executable pickle when avoidable
- Base compatibility
- License
- Model card
- Security evaluation
Runtime
- Allowlisted adapter ID
- Tenant authorization
- Resource limit
- Load audit log
- Hash at load time
- Rollback
PEFT Evaluation Stack
1. Base Parity at Step 0
Zero-initialized adapter가 base와 동일한 output을 내는지 확인합니다.
2. Training Sanity
- 예상 adapter만
requires_grad=true - Trainable parameter count
- Gradient norm by module
- No gradient on frozen base
- Loss decrease
3. Task Quality
- Instruction
- Domain task
- Tool call
- RAG grounding
4. Retention
- General language
- 한국어·영어
- Code
- Safety
- Calibration
5. Deployment
- Unmerged latency
- Merged latency
- Adapter load time
- Peak memory
- Batch throughput
- Merge parity
Trainable Parameter Audit Code 개념
trainable = []
frozen = []
for name, parameter in model.named_parameters():
if parameter.requires_grad:
trainable.append((name, parameter.numel()))
else:
frozen.append((name, parameter.numel()))
assert all("lora_" in name for name, _ in trainable)
print(sum(n for _, n in trainable))
DoRA, bias, norm을 함께 학습하면 assert 조건을 recipe에 맞게 조정합니다.
Experiment Manifest
run_id: qlora-rag-agent-v7
base:
checkpoint_hash: sha256:...
architecture_hash: sha256:...
tokenizer_hash: sha256:...
chat_template_hash: sha256:...
peft:
method: qlora
rank: 16
alpha: 32
dropout: 0.05
target_modules: [q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj]
bias: none
quantization:
base_bits: 4
format: nf4
double_quant: true
compute_dtype: bfloat16
training:
data_manifest: sft-rag-v9
learning_rate: 0.0002
global_batch_tokens: 524288
max_length: 8192
gradient_checkpointing: true
seed: 20260716
output:
adapter_hash: sha256:...
evaluation:
suite: rag-agent-peft-v5
값은 예시입니다. Resolved module list와 trainable tensor name을 별도 저장합니다.
최소 실험 순서
Phase 1. LoRA Baseline
- Higher-precision base
- Rank 8 또는 16
- Q/V target
- Step-0 parity
- Task + retention eval
Phase 2. Target Expansion
- QKV/O
- FFN 포함
- Same token budget
- Quality-memory-latency 비교
Phase 3. QLoRA
- Same adapter config
- Base quantization만 변경
- Training stability
- Quality gap
- Peak memory
Phase 4. DoRA or Rank Pattern
- Baseline이 부족한 명확한 가설
- Same parameter budget 가능한 비교
- Kernel·merge support
Phase 5. Deployment
- Merged vs dynamic
- Quantized serving artifact
- Full regression
- Canary와 rollback
흔한 오해와 처방
1. LoRA는 Model 일부만 실행한다
Base forward는 여전히 전체 model을 통과합니다.
처방: Trainable state, activation, compute, weight storage를 분리해 계산합니다.
2. Rank가 높을수록 좋다
Capacity는 늘지만 saturation·overfitting·cost가 생길 수 있습니다.
처방: Rank·target ablation과 held-out evaluation을 합니다.
3. Alpha는 그냥 Rank와 같게 둔다
Scaling convention과 learning rate가 상호작용합니다.
처방: 실제 scale, library version, resolved config를 기록합니다.
4. QLoRA는 모든 연산을 4-bit로 학습한다
Frozen base storage가 4-bit이고 compute와 adapter state는 별도 dtype입니다.
처방: Storage·compute·adapter·optimizer dtype을 각각 기록합니다.
5. 4-bit Weight 크기만 계산하면 GPU Memory가 나온다
Metadata, activation, optimizer, temporary buffer가 있습니다.
처방: 실제 peak allocated/reserved memory를 profile합니다.
6. Adapter File만 있으면 Model을 재현한다
Base revision, template, tokenizer, target module, scale이 필요합니다.
처방: Adapter manifest에 immutable hash를 넣습니다.
7. Merge하면 Output이 완전히 같다
Dtype rounding과 quantization이 차이를 만들 수 있습니다.
처방: Logit parity와 full task regression을 수행합니다.
8. 작은 Adapter는 Safety 영향도 작다
작은 parameter update가 behavior boundary를 크게 바꿀 수 있습니다.
처방: Full safety·authorization·grounding suite를 다시 실행합니다.
Production 체크리스트
- Full fine-tuning과 PEFT의 목적·비용 baseline이 있다.
-
W₀,A,B, rank, alpha, scale의 shape를 확인했다. - Layer별 LoRA trainable parameter를 직접 계산했다.
- Adapter initialization과 step-0 base parity를 검증했다.
- 실제 matched target module 목록을 저장한다.
- 예상 외 base·bias·norm parameter가 trainable인지 audit한다.
- Rank와 target module ablation을 수행한다.
- Train loss 외 task·grounding·safety·retention을 평가한다.
- QLoRA의 base storage, compute, adapter, optimizer dtype을 구분한다.
- Quantization method·scale·library version을 고정한다.
- Weight payload 외 activation·temporary memory를 측정한다.
- Gradient checkpointing의 memory·step-time trade-off를 기록한다.
- DoRA를 LoRA와 같은 budget·data에서 비교한다.
- Base checkpoint, tokenizer, chat template immutable hash가 있다.
- Adapter artifact에 rank·alpha·target·dtype·library version이 있다.
- Merge를 safe precision에서 수행하고 parity를 검사한다.
- Merge 후 serving quantization을 별도 평가한다.
- Dynamic adapter load와 tenant authorization을 audit한다.
- Adapter composition을 새 model처럼 전체 평가한다.
- Production canary와 base/adapter rollback이 있다.
스스로 확인하기
W₀ ∈ R[d_out,d_in]일 때 LoRAA,B의 shape와 trainable parameter 수는 무엇인가?- Rank와 alpha를 바꾸면 adapter capacity와 update scale이 어떻게 달라지는가?
- Target module 이름을 실제 model tree에서 검증해야 하는 이유는 무엇인가?
- QLoRA에서 4-bit인 state와 더 높은 precision인 state를 구분할 수 있는가?
- DoRA가 LoRA에 추가하는 magnitude·direction 관점은 무엇인가?
- Quantized base에 adapter를 merge한 뒤 다시 평가해야 하는 이유는 무엇인가?
- Adapter file만으로 deployment model을 재현할 수 없는 이유는 무엇인가?
앞 글에서 preference objective를, 이 글에서 parameter-efficient update를 다뤘습니다. 다음 글은 LLM Quantization: GPTQ·AWQ·SmoothQuant·KV Cache입니다. Weight-only, weight-activation, KV cache quantization을 분리하고 bit 수가 실제 memory·kernel·quality로 이어지는 조건을 계산합니다.
참고자료
- LoRA: Low-Rank Adaptation of Large Language Models
- QLoRA: Efficient Finetuning of Quantized LLMs
- DoRA: Weight-Decomposed Low-Rank Adaptation
- Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning
- Parameter-Efficient Transfer Learning for NLP — Adapters
- A Unified View of Parameter-Efficient Transfer Learning