Hoppa till innehållet
AI-grafen
F· AI engineeringmodelltraning-finjustering· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20

Slå ihop adaptrar och exportera modeller

Kunna slå ihop LoRA-vikter, exportera till GGUF/safetensors och köra lokalt.

Förkunskaper

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:

FormatAnvänds avNot
safetensorstransformers, vLLM, TGIstandard; säkert (ingen pickle)
GGUFllama.cpp, Ollama, LM Studioett enda fil, CPU/Metal, kvantiseras vid konvertering
ONNXONNX Runtime, edgebra 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

Alla källor och licenser