Slå ihop adaptrar och exportera modeller
Kunna slå ihop LoRA-vikter, exportera till GGUF/safetensors och köra lokalt.
Förkunskaper
- FKvantiseringkrävs
- FLoRA — Low-Rank Adaptationkrävs
Intuition
En tränad LoRA-adapter är några tiotal MB och kräver basmodellen. För distribution vill man ofta ha en fil.
Merge: W′ = W + (α/r)·BA. Efter det är adaptern borta och modellen är en vanlig modell — ingen extra inferenskostnad, inget PEFT-beroende.
Format:
| Format | Används av | Not |
|---|---|---|
| safetensors | transformers, vLLM, TGI | standard; säkert (ingen pickle) |
| GGUF | llama.cpp, Ollama, LM Studio | ett enda fil, CPU/Metal, kvantiseras vid konvertering |
| ONNX | ONNX Runtime, edge | bra portabilitet, svagare LLM-stöd |
Varning: slå inte ihop en adapter tränad mot en 4-bitars bas med en fp16-bas rakt av. Adaptern lärde sig kompensera för kvantiseringsfelet; resultatet blir en aning sämre. Utvärdera efter merge, inte före.
Kod
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
bas = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B", torch_dtype=torch.bfloat16, device_map="cpu")
m = PeftModel.from_pretrained(bas, "adapter/")
m = m.merge_and_unload() # W += (alpha/r) * B @ A
m.save_pretrained("modell-merged", safe_serialization=True)
AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B").save_pretrained("modell-merged")
# GGUF för lokal körning
python convert_hf_to_gguf.py modell-merged --outfile modell-f16.gguf
./llama-quantize modell-f16.gguf modell-Q4_K_M.gguf Q4_K_M
./llama-cli -m modell-Q4_K_M.gguf -p "Förklara gradient descent kort." -n 128
Verifieringssteg som ofta hoppas över — gör det alltid:
prompts = [...] # 20 representativa prompter
fore = [generera(m_med_adapter, p, temperature=0) for p in prompts]
efter = [generera(m_merged, p, temperature=0) for p in prompts]
print(sum(a == b for a, b in zip(fore, efter)), "/", len(prompts), "identiska")
# Därefter: kör hela evalsviten på det EXPORTERADE formatet, inte på originalet.
En modell som beter sig annorlunda efter export är ett vanligt och tyst fel — ofta beroende på ändrad precision eller en chat-mall som inte följde med.
Behärskning innebär
- Slår ihop LoRA-vikter i basmodellen
- Exporterar till safetensors och GGUF
- Verifierar att den exporterade modellen ger samma svar
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- PEFT — dokumentation (Apache-2.0) — Apache-2.0
- llama.cpp (MIT) — MIT