Wanneer een algemeen model niet direct kan voldoen aan specifieke bedrijfsbehoeften, kunt u uw eigen bedrijfsgegevens gebruiken om het model fijnt te tunen, zodat het specifieke taken en uitvoermethoden beter leert.
Neem entiteitsherkenning in e-commerce als voorbeeld. We hebben een model nodig dat productnamen, merknamen en modelnummers in de tekst herkent, met de bijbehorende categorie en locatie. Het model kan zeer deskundig zijn over deze producten, maar bij daadwerkelijk gebruik mogen de geëxtraheerde informatie niet onvolledig zijn, de velden moeten gestandaardiseerd zijn en het uitvoerformaat moet stabiel zijn.
Als de taak en de uitvoereisen al duidelijk zijn en u georganiseerde voorbeelden heeft, kunt u proberen deze gegevens te gebruiken voor fijntuning, zodat het model het werk leert dat we willen dat het uitvoert.
Hieronder gebruiken we ms-swift om een LoRA-fijntuningsproces door te lopen, inclusief gegevensvoorbereiding, training, gewichtsmerging en inferentie.
Algemene large language models bezitten al sterke capaciteiten op het gebied van taalbegrip, kennisvraag-en-antwoord, tekstgeneratie en andere algemene taken. In daadwerkelijke bedrijfsscenario's presteren algemene modellen mogelijk niet direct aan specifieke eisen.
Bijvoorbeeld, we willen dat het model bepaalde informatie-extractietaken nauwkeurig uitvoert, resultaten in een opgegeven formaat produceert of specifieke vragen op een uniforme manier beantwoordt. Voor deze behoeften kunnen we specifieke gegevens gebruiken om op basis van een bestaand model te trainen, zodat het model de bijbehorende taakeisen en antwoordmethoden beter leert. Dit proces wordt model-fijntuning genoemd.
Fijntuning is niet het opnieuw trainen van een model vanaf nul, maar een verdere aanpassing op basis van de bestaande capaciteiten om het beter geschikt te maken voor specifieke toepassingsscenario's.
Momenteel is SFT (Supervised Fine-Tuning) de meest gebruikelijke methode bij large language model fijntuning. SFT gebruikt gegevens met standaardantwoorden om het model te trainen. Elke trainingsinvoer bevat meestal een invoer en de bijbehorende uitvoer, waardoor het model leert welk type resultaten te genereren bij een gegeven invoer.
Naast SFT kan large language model training ook Versterkend Leren (Reinforcement Learning, RL) gebruiken. In tegenstelling tot SFT dat standaardantwoorden direct levert, beoordeelt versterkend leren voornamelijk met beloningssignalen de kwaliteit van door het model gegenereerde resultaten en past het uitvoergedrag van het model voortdurend aan op basis van beloningsresultaten.
Volledige-Parameter Fijntuning: Tijdens de training worden alle parameters van het model bijgewerkt. Volledige-parameter fijntuning vereist aanzienlijk meer GPU-geheugen en rekenresources.
Inloggen deelnemen aan de discussie
LoRA-Fijntuning (Low-Rank Adaptation): Het kernidee van LoRA is om de gewichten van het voortrainde model te bevriezen en traineerbare rangontmatrices in elke laag van de Transformer-architectuur te injecteren.

Specifiek, aannemende dat de voortrainde matrix $W_0 \in \mathbb{R}^{d \times k}$ is:
W = W_0 + \Delta W = W_0 + BA
Waarbij $\Delta W$ de gewichtswisselingen vertegenwoordigt die tijdens fijntuning moeten worden geleerd:
B \in \mathbb{R}^{d \times r}, \quad A \in \mathbb{R}^{r \times k}, \quad r \ll \min(d,k)

QLoRA's belangrijkste innovaties omvatten:
Voor de meeste fijntuningstaken kunt u eerst LoRA proberen. LoRA vereist alleen het trainen van een klein aantal nieuwe parameters.
Als het basismodel groot is en er na LoRA niet genoeg GPU-geheugen overblijft, kunt u QLoRA overwegen. QLoRA is meer geschikt voor scenario's met grote modelschalen en beperkte GPU-middelen.
Als de GPU-middelen relatief voldoende zijn en de taak uitgebreidere modelaanpassingen vereist, kunt u volledige-parameter fijntuning overwegen.
ms-swift (SWIFT, Scalable lightWeight Infrastructure for Fine-Tuning) is een open-source large language model trainings- en deploymentsframework van de ModelScope-community.

Momenteel ondersteunt het large language models zoals Qwen, DeepSeek, Llama, GLM en InternLM, evenals multimodale modellen zoals Qwen-VL en InternVL.
U kunt meer gebruiksmethoden vinden op ms-swift.

1) Controleer of ms-swift al is geïnstalleerd:
!pip3 list |grep ms_swift

Als niet geïnstalleerd:
!pip3 install ms-swift
HCCX, HPPX, XH en MISC.3) Maak een data map en upload de gegevens:
{"messages":[{"role":"system","content":"U bent een entiteitsherkenningmodel. Identificeer entiteiten in de tekst van de gebruiker. Geef entiteiten strikt in hun volgorde van voorkomen in de originele tekst, elk entiteit op een aparte regel in het formaat: (type, entiteit tekst, startpositie)."},{"role":"user","content":"推bb护肤刮痧l背疗橄榄油全身按开背足体按油身m油5摩油摩精00"},{"role":"assistant","content":"(HCCX,橄榄油,10)\n(HCCX,按油,20)\n(HCCX,油,24)\n(HCCX,油,27)"}]}

Qwen/Qwen3-0.6B:!CUDA_VISIBLE_DEVICES=0 swift sft \
--model Qwen/Qwen3-0.6B \
--dataset data/train.jsonl \
--val_dataset data/val.jsonl \
--tuner_type lora \
--target_modules all-linear \
--lora_rank 16 \
--lora_alpha 32 \
--lora_dropout 0.05 \
--torch_dtype bfloat16 \
--num_train_epochs 2 \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 4 \
--learning_rate 1e-4 \
--warmup_ratio 0.05 \
--max_length 512 \
--eval_strategy steps \
--eval_steps 100 \
--save_strategy steps \
--save_steps 100 \
--save_total_limit 3 \
--logging_steps 10 \
--load_from_cache_file true \
--dataset_num_proc 4 \
--dataloader_num_workers 4 \
--output_dir output/qwen3_0_6b_ner_lora



!CUDA_VISIBLE_DEVICES=0 swift export \
--adapters output/qwen3_0_6b_ner_lora/v2-20260903-172616/checkpoint-676 \
--merge_lora true \
--output_dir output/qwen3_0_6b_ner_merged

CUDA_VISIBLE_DEVICES=0 swift deploy \
--model output/qwen3_0_6b_ner_merged \
--load_args false \
--infer_backend vllm \
--enable_thinking false \
--host 0.0.0.0 \
--port 8000 \
--served_model_name qwen3-0.6b-ner \
--api_key 123 \
--vllm_gpu_memory_utilization 0.7 \
--vllm_max_model_len 1024 \
--max_new_tokens 128

Test de connectiviteit:
import json
import requests
url = "http://127.0.0.1:8000/v1/chat/completions"
headers = {"Authorization": "Bearer 123", "Content-Type": "application/json"}
payload = {
"model": "qwen3-0.6b-ner",
"messages": [
{"role": "system", "content": "U bent een entiteitsherkenningmodel. Identificeer entiteiten in de tekst van de gebruiker."},
{"role": "user", "content": "3539,2017消防灭火防滑耐磨长筒抢险救援胶靴"}
],
"temperature": 0,
"max_tokens": 128
}
try:
response = requests.post(url, headers=headers, json=payload, timeout=30)
response.raise_for_status()
result = response.json()
print("Herkenningsresultaat:")
print(result["choices"][0]["message"]["content"])
except requests.exceptions.RequestException as e:
print(f"Aanvraag mislukt: {e}")

Alle experimentgegevens en code van dit hoofdstuk: https://modelscope.cn/gallery/liucong/ab458cbd-b47f-4830-91b6-314ea2036fc6