C.W.K.
Stream
Lesson 06 of 06 · published

Merge & 다중 Adapter

~22 min · merge, adapters, multi-adapter, apple-silicon

Level 0관찰자
0 XP0/43 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

LoRA를 베이스 모델에 Merge

학습 후 LoRA adapter 가중치를 베이스 모델에 다시 merge할 수 있어. Adapter 아키텍처 오버헤드 다 제거 — merged 모델은 베이스 모델이랑 모양 byte-동일이라 어떤 거든(vLLM, TGI, Ollama, llama.cpp) 서빙 가능.

한 베이스에 다중 adapter

Adapter들을 분리해 두고 같은 베이스 모델에 여러 개 로드도 가능. (큰) 베이스 모델 복제 없이 다른 작업 / 고객 서빙에 유용. vLLM이랑 TGI 둘 다 서빙 시점 요청별 adapter 스위칭 지원(Track 8).

Apple Silicon 경로

M-시리즈 Mac에서 MLX 프레임워크(mlx-lm)로 LoRA 파인튜닝 가능. Unified memory 가진 M-시리즈 칩에서 LoRA랑 QLoRA 지원. CUDA H100보다 느리지만 64GB+ unified memory 가진 머신에서 7B~13B 모델에 실용적이고, Ollama용 GGUF로 내보내는 경로 깔끔해.

Code

Merge LoRA into base for clean serving·python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

base_id = "meta-llama/Llama-3.1-8B-Instruct"
base = AutoModelForCausalLM.from_pretrained(
    base_id, torch_dtype=torch.float16, device_map="auto",
)
tok = AutoTokenizer.from_pretrained(base_id)

# Load LoRA adapter on top
model = PeftModel.from_pretrained(base, "./my-lora-adapter")

# Merge — adapters become part of base; PeftModel wrapper goes away
merged = model.merge_and_unload()

# Save the merged model
merged.save_pretrained("./merged-model")
tok.save_pretrained("./merged-model")
print("Merged model ready for vLLM/TGI/Ollama serving.")
Multiple adapters with weighted merging·python
from peft import PeftModel

# Load base + first adapter
model = PeftModel.from_pretrained(
    base, "adapter-medical", adapter_name="medical",
)

# Add more adapters on the same base
model.load_adapter("adapter-legal",   adapter_name="legal")
model.load_adapter("adapter-finance", adapter_name="finance")

# Switch active adapter per request
model.set_adapter("medical");  out_med = model.generate(...)
model.set_adapter("legal");    out_leg = model.generate(...)

# Combine adapters with weights — useful when domains overlap
model.add_weighted_adapter(
    adapters=["medical", "legal"],
    weights=[0.7, 0.3],
    adapter_name="medlegal",
    combination_type="linear",   # or "ties", "dare_ties"
)
model.set_adapter("medlegal")

External links

Exercise

학습한(또는 Hub에서 다운로드한) LoRA adapter 가져와. 베이스 모델에 merge하고 결과 저장. 원래 adapter 셋업이랑 merged 모델 둘 다 로드해서 5개 테스트 프롬프트에 동일 출력 내는지 검증. Merged 모델은 추론 시 PEFT 의존성 없는 거 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.