
刚入门做大模型开发时,最开始只会直接调用现成的开源模型,勉强满足基础的对话使用需求。但真正落地项目后,很快就遇到了瓶颈:通用模型不懂业务场景、回答不精准,想要适配专属业务,就必须学会微调。最先是接触了全量微调,也切实感受到它能优化模型效果,但随之也发现它对硬件要求高、训练成本大,普通设备根本跑不动。为了解决这个问题,又慢慢接触学习了LoRA轻量化微调,才明白它是全量微调的低成本替代方案,不用高额算力就能完成模型定制,完美适配普通的使用场景,这也让大模型微调落地变得简单可行。
解决了模型训练适配的问题后,新的部署难题又随之而来,微调后的模型体积大、显存占用高、推理速度慢,于是又顺藤摸瓜接触到了模型量化技术,它能在几乎不损失效果的前提下,压缩模型体积、降低部署成本,解决大模型落地的最后一道难题。一路走来,对这三项技术的认知循序渐进、层层深入:微调负责优化模型能力、LoRA负责降低训练成本、量化负责优化部署效率,三者各司其职、形成完整的大模型落地闭环。

三大技术覆盖训练适配与部署落地全流程,分工明确:
Fine-tuning 全量微调:训练适配
LoRA 低秩适配:轻量化训练适配
模型量化:部署优化
核心总结:微调改模型能力,LoRA降训练成本,量化降部署成本,三者构成完整落地闭环。
主流大模型基于Transformer架构,所有知识与能力均存储于模型权重参数中,三大技术诞生逻辑如下:
微调技术诞生逻辑:
LoRA技术诞生逻辑:
量化技术诞生逻辑:
全量微调:继承预训练权重,基于业务数据更新全部模型参数,实现业务专项适配。
完整训练三步逻辑:
核心特点与优劣:

第一步:业务场景定位与数据集构建
第二步:数据集预处理
第三步:模型加载与参数配置
第四步:模型训练迭代
第五步:模型测试与落地验证
LoRA:低秩适配算法,冻结原生模型权重,仅训练少量低秩矩阵,低成本替代全量微调。
底层核心逻辑:
核心超参数:
核心优势:

整体流程与全量微调一致,轻量化优化适配低成本落地:

第一步:数据集准备与预处理
第二步:模型加载与LoRA配置
第三步:轻量化训练迭代
第四步:LoRA权重保存与融合
第五步:效果测试与迭代优化
微调、LoRA优化模型效果,量化优化部署成本,是无损/低损模型压缩技术。
底层核心原理:
主流量化精度与效果:

两大量化类型:
量化核心优势:

第一步:环境与工具准备
第二步:模型加载与配置
第三步:量化压缩执行
第四步:模型保存与验证
第五步:部署上线
三项技术层层递进、互补协同,覆盖训练到部署全流程:
实际应用标准落地闭环:预训练大模型 → LoRA/全量微调(业务定制)→ 模型量化(压缩加速)→ 业务上线

场景一:个人学习、轻量化业务、低成本迭代
场景二:企业核心业务、高精度专业场景
场景三:边缘/移动端、低配服务器部署
以下示例基于BERT-base-Chinese模型,通过LoRA在注意力层的query和value投影矩阵中注入低秩可训练参数,冻结原始权重后仅训练极少量参数,使用SFTTrainer对中文语料进行高效微调,实现参数节约型的领域适配训练。
# 导入所需依赖库
import torch
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
TrainingArguments,
DataCollatorForLanguageModeling
)
from peft import LoraConfig, get_peft_model
from trl import SFTTrainer
from datasets import Dataset
import json
# ====================== 1. 基础配置 ======================
# 预训练模型路径(可替换为任意开源LLM)
MODEL_PATH = "D:\\modelscope\\hub\\google-bert\\bert-base-chinese"
# 微调数据集路径
DATA_PATH = "train_data.json"
# 训练输出保存路径
OUTPUT_PATH = "./lora-finetune-result"
# LoRA核心超参数配置
lora_config = LoraConfig(
r=16, # LoRA秩,兼顾效果与算力
lora_alpha=32, # 缩放系数
target_modules=["query", "value"], # BERT注意力层query/value投影矩阵
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM" # 因果语言模型任务
)
# 训练参数配置
train_args = TrainingArguments(
output_dir=OUTPUT_PATH,
num_train_epochs=3, # 训练轮数
per_device_train_batch_size=4, # 批次大小
gradient_accumulation_steps=2,
learning_rate=2e-4, # LoRA专属学习率
fp16=True, # 半精度训练,节省显存
logging_steps=10,
save_strategy="epoch",
optim="adamw_torch",
report_to="none"
)
# ====================== 2. 加载模型与分词器 ======================
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
if tokenizer.pad_token is None:
tokenizer.pad_token = "[PAD]"
tokenizer.padding_side = "right"
# 加载模型并冻结原始权重
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH,
torch_dtype=torch.float16,
trust_remote_code=True
)
model.requires_grad_(False) # 冻结全部原始参数
model = get_peft_model(model, lora_config) # 加载LoRA结构
model.print_trainable_parameters() # 打印可训练参数量
# ====================== 3. 加载数据集 ======================
def load_data(data_path):
with open(data_path, "r", encoding="utf-8") as f:
data = json.load(f)
return Dataset.from_list(data)
train_data = load_data(DATA_PATH)
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
# ====================== 4. 启动训练 ======================
trainer = SFTTrainer(
model=model,
train_dataset=train_data,
args=train_args,
tokenizer=tokenizer,
data_collator=data_collator,
dataset_text_field="text",
max_seq_length=512
)
# 开始训练
trainer.train()
# 保存LoRA权重
trainer.save_model(OUTPUT_PATH)
print("LoRA微调训练完成,权重保存成功!")train_data.json 数据参考:
[
{"text": "人工智能技术正在深刻改变各行各业的运作方式,从医疗诊断到金融风控,AI的应用场景不断拓展。"},
{"text": "深度学习是机器学习的一个重要分支,它通过多层神经网络来学习数据的层次化特征表示。"},
{"text": "自然语言处理是人工智能领域的核心方向之一,旨在让计算机理解和生成人类语言。"},
{"text": "大语言模型如GPT和BERT的出现,极大地推动了自然语言处理技术的发展和应用落地。"},
{"text": "微调技术允许我们在预训练模型的基础上,用少量领域数据快速适应特定任务。"},
{"text": "LoRA是一种参数高效微调方法,通过在注意力层添加低秩矩阵来减少可训练参数数量。"},
{"text": "模型量化技术可以将浮点模型压缩为低精度表示,大幅降低推理时的显存占用和计算开销。"},
{"text": "在医疗领域,AI辅助诊断系统可以帮助医生更快速准确地识别影像中的病灶区域。"},
{"text": "金融行业利用机器学习模型进行风险评估和欺诈检测,有效降低了坏账率和资金损失。"},
{"text": "自动驾驶汽车依靠计算机视觉和传感器融合技术,实现环境感知和路径规划。"},
{"text": "知识图谱是一种结构化的知识表示方式,通过实体和关系构建语义网络,支撑智能问答和推理。"},
{"text": "注意力机制是Transformer架构的核心组件,使模型能够关注输入序列中不同位置的相关信息。"},
{"text": "强化学习通过智能体与环境的交互试错来学习最优策略,在游戏和机器人控制中表现突出。"},
{"text": "数据增强技术通过对原始数据进行变换扩充训练样本,有效缓解过拟合问题。"},
{"text": "迁移学习利用源任务学到的知识辅助目标任务的学习,是深度学习中的重要范式。"},
{"text": "模型蒸馏将大型教师模型的知识迁移到小型学生模型,实现模型的轻量化部署。"},
{"text": "多模态学习融合文本、图像、语音等多种模态信息,实现更全面的语义理解和生成。"},
{"text": "联邦学习允许多个参与方在不共享原始数据的情况下协同训练模型,保护数据隐私。"},
{"text": "提示工程通过精心设计的输入提示引导大语言模型生成高质量的目标输出。"},
{"text": "向量数据库存储和检索高维嵌入向量,是RAG(检索增强生成)系统的关键基础设施。"},
{"text": "RAG技术结合检索和生成能力,使大语言模型能够基于外部知识库回答专业问题。"},
{"text": "智能体系统将规划、记忆、工具调用等能力整合,实现复杂任务的自主执行。"},
{"text": "多智能体协同通过多个专业智能体分工协作,解决单一智能体难以处理的复杂问题。"},
{"text": "思维链提示引导模型逐步推理,显著提升了大语言模型在数学和逻辑任务上的表现。"},
{"text": "对比学习通过拉近正样本对、推开负样本对来学习高质量的语义表示。"},
{"text": "自监督学习利用数据自身的结构信息构造监督信号,无需人工标注即可进行预训练。"},
{"text": "扩散模型通过逐步去噪过程生成高质量图像,已成为图像生成领域的主流技术。"},
{"text": "GAN生成对抗网络通过生成器和判别器的对抗训练,能够生成逼真的图像和数据。"},
{"text": "VAE变分自编码器结合自编码器和概率模型,在生成任务中具有良好的理论基础。"},
{"text": "边缘计算将计算能力下沉到数据源附近,减少延迟和带宽消耗,适合实时AI推理场景。"},
{"text": "模型并行和数据并行是分布式训练的两大策略,用于处理超大模型和海量数据。"},
{"text": "混合精度训练结合FP16和FP32计算,在保持模型精度的同时加速训练过程。"},
{"text": "梯度累积通过在多个小批次上累积梯度再更新参数,在显存受限时模拟大批次训练。"},
{"text": "学习率预热策略在训练初期逐步增大学习率,有助于稳定大规模模型的训练过程。"},
{"text": "余弦退火学习率调度在训练过程中周期性调整学习率,帮助模型跳出局部最优。"},
{"text": "Dropout正则化在训练时随机丢弃部分神经元,增加模型的泛化能力。"},
{"text": "BatchNormalization通过归一化层输出加速训练收敛,减少对初始化的敏感性。"},
{"text": "LayerNormalization在特征维度上进行归一化,是Transformer架构的标准组件。"},
{"text": "交叉熵损失函数是分类任务中最常用的损失函数,衡量预测概率分布与真实分布的差异。"},
{"text": "困惑度是评估语言模型性能的常用指标,数值越低表示模型的预测能力越强。"},
{"text": "BLEU和ROUGE是机器翻译和文本摘要任务中广泛使用的自动评价指标。"},
{"text": "语义相似度计算通过文本嵌入向量之间的余弦距离来衡量两段文本的语义接近程度。"},
{"text": "命名实体识别是信息抽取的基础任务,旨在从文本中识别人名、地名、机构名等实体。"},
{"text": "关系抽取从非结构化文本中自动识别实体之间的语义关系,构建结构化知识。"},
{"text": "文本分类是NLP中最基础的应用之一,涵盖情感分析、主题分类、垃圾邮件检测等场景。"},
{"text": "序列标注任务如分词和词性标注,是中文自然语言处理流程中的重要预处理步骤。"},
{"text": "机器阅读理解要求模型根据给定文章回答相关问题,考验模型的深层语义理解能力。"},
{"text": "对话系统通过意图识别、对话状态跟踪和回复生成实现流畅的人机对话交互。"},
{"text": "AI安全是人工智能领域的重要议题,涉及对抗攻击、模型鲁棒性和隐私保护等方面。"},
{"text": "可解释AI研究如何让模型的决策过程更透明可信,在医疗和金融等敏感领域尤为重要。"}
]输出结果:
Map: 100%|███████████████████████| 50/50 [00:00<00:00, 6280.03 examples/s] 0%| | 0/18 [00:00<?, ?it/s]`loss_type=None` was set in the config but it is unrecognised.Using the default loss: `ForCausalLMLoss`. {'loss': 30.6015, 'grad_norm': 45.26039123535156, 'learning_rate': 8.888888888888889e-05, 'epoch': 1.46} {'train_runtime': 2252.6816, 'train_samples_per_second': 0.067, 'train_steps_per_second': 0.008, 'train_loss': 26.449141608344185, 'epoch': 2.62} 100%|███████████████████| 18/18 [37:32<00:00, 125.15s/it] LoRA微调训练完成,权重保存成功!
简单分析:

以下示例通过BitsAndBytesConfig将LoRA微调后的模型使用NF4算法量化为INT4精度,结合双重量化技术,在显著压缩模型体积和推理显存占用的同时保持计算精度,并完成量化模型的保存与推理验证。
# 导入量化依赖库
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
# ====================== 1. 量化配置 ======================
# 原始模型路径(预训练模型/微调后模型均可)
MODEL_PATH = "./lora-finetune-result"
# 量化模型保存路径
QUANT_SAVE_PATH = "./int4-quant-model"
# INT4量化核心参数
bnb_config = BitsAndBytesConfig(
load_in_4bit=True, # 开启4位量化
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4", # 标准化4位量化,效果最优
bnb_4bit_compute_dtype=torch.float16
)
# ====================== 2. 加载并量化模型 ======================
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True,
torch_dtype=torch.float16
)
# ====================== 3. 保存量化模型 ======================
model.save_pretrained(QUANT_SAVE_PATH)
tokenizer.save_pretrained(QUANT_SAVE_PATH)
print("INT4模型量化完成,模型保存成功!")
# ====================== 4. 量化模型推理测试 ======================
def inference_test(text):
inputs = tokenizer(text, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=200)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# 测试示例
if __name__ == "__main__":
res = inference_test("请介绍大模型LoRA微调技术")
print("模型输出结果:", res)总的来说,大模型优化并非只有全量微调这一条路,实际应用过程中我们会发现全量微调对硬件门槛太高,普通显卡基本跑不起来。后面接触 LoRA,才懂得冻结原有权重、只训练少量低秩参数,就能用很低的开销达到接近全量微调的效果,这也是大多数开发者做定制模型的首选方式。等到模型训练完成,再借助 INT8、INT4 量化压缩参数精度,降低显存占用并加快推理速度。
三者分工十分清晰:微调提升模型业务能力,LoRA降低训练门槛,量化优化部署效果。大模型优化并没有想象中的高深晦涩,原理理解透彻之后再循序渐进练习,逐步可以独立完成模型定制,把大模型真正运用到实际项目当中。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。