尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

大模型入门到实战:从Transformer原理到本地部署与微调全攻略

大模型入门到实战:从Transformer原理到本地部署与微调全攻略 经常有朋友问大模型到底该怎么入门网上资料铺天盖地但要么是纯论文翻译要么是某某框架的安装教程看完还是不知道怎么把“大模型”这三个字落地成自己的技能。我做了几年大模型相关的开发和落地工作从最早跑通一个对话机器人到后来给企业做私有化部署、微调垂直领域模型踩过的坑能装满一卡车。这篇东西就是按我自己重新学一遍时的思路整理出来的系统性入门资料不求让你成为算法研究员而是让你建立完整的地图大模型是什么、怎么跑起来、怎么改造成自己需要的样子、现在的主流方向有哪些。这篇内容适合三类人准备转行做大模型开发的工程师、想用大模型改造现有业务的创业者或产品经理、以及学校里刚接触这个方向的学生。我会尽量用大白话拆解原理同时给出能直接上手操作的命令、参数和流程你照着做就能把一套本地大模型从零跑通。1. 大模型入门全景在看懂代码之前先看懂地图1.1 大模型到底在解决什么问题大模型本质上是一个“极大规模的文本概率模型”。你给它一段话它预测下一个最可能的词是什么然后把这个词接回去继续预测一段一段地生成完整回答。听起来简单但当模型规模足够大、训练数据足够多之后它涌现出了一些小模型不具备的能力理解上下文、做推理、写代码、总结文档甚至进行多轮对话。我常用一个类比来解释这件事传统软件像是一本固定的说明书里面每条规则都写死了遇到说明书之外的情况就抓瞎大模型像一个读了海量书籍的实习生你给它一个任务它会根据自己“读过的书”现场组织答案遇到没见过的任务也能试着推理。这个“实习生”的功底来自预训练阶段——它在数万亿个词上学习语言的统计规律这是它一切能力的根源。所以入门大模型第一件事不是急着跑代码而是理解它的能力边界。它能写文案、能抽取信息、能分类、能生成SQL但它也会一本正经地胡说八道这个叫“幻觉”。理解这一点你后面做应用时就会主动设计兜底方案而不是盲目相信模型的输出。1.2 主流开源模型选型从Llama 3到Qwen现在的大模型生态开源和闭源并行。闭源的代表是GPT-4o、Claude系列质量高但按调用量付费数据也要出网开源的代表有Meta的Llama 3、阿里的Qwen通义千问、DeepSeek、Mistral、Gemma等你可以下载权重文件部署到自己服务器上数据完全内网闭环。我的建议是入门阶段优先玩开源模型原因有两个第一成本可控本地跑模型只花电费不花API费第二你能看到模型文件的真实结构体会“部署”这个过程到底发生了什么这对理解后面所有工具链都有帮助。具体选哪个模型取决于你的硬件和任务模型参数量显存需求FP16适合场景Qwen2-1.5B15亿约4GB入门试验、低配电脑Llama 3 8B80亿约16GB通用对话、内容生成Qwen2-7B70亿约16GB中文场景、指令跟随DeepSeek-V2-Lite160亿约32GB中文推理、代码生成Llama 3 70B700亿约140GB高质量通用场景需多卡注意这个显存需求是在不量化的情况下算的。所谓量化就是把模型参数的精度从FP16降到INT4或INT8用一点质量损失换来显存占用大幅下降之后我会展开讲。1.3 一个推荐的学习路线总览我给入门者规划的路线分五个阶段每一步都是下一层的地基原理扫盲知道Transformer怎么工作、token是什么、训练分哪几个阶段。本地部署用Ollama或vLLM跑通一个开源模型跑通推理接口观察输入输出。API与工程化学会用OpenAI兼容接口封装自己的服务理解上下文管理、流式输出、超参调节。微调改造用LoRA等低成本方案让模型学会你的业务数据真正把通用模型变成“你的模型”。应用进阶做RAG检索增强生成、Agent智能体、多模态应用把模型嵌到真实产品里。前两步大概一到两周就能完成到第四步就需要对深度学习和PyTorch有一定基础了。但别慌我会在后面的章节里把每一步需要的最小知识量标出来不需要你先把所有数学补完再动手。2. 底层原理拆解Transformer、Token与训练三阶段2.1 为什么所有大模型都叫Transformer2017年Google发表了一篇论文《Attention Is All You Need》提出Transformer架构之后几乎所有大模型都基于这个结构。它的核心创新是“自注意力机制”Self-Attention通俗讲就是模型在读一句话时不按顺序一个字一个字处理而是同时看整句话并根据上下文给每个词分配不同的“注意力权重”。举个例子处理“小明把球传给小红然后她射门得分”这句话模型要理解“她”指的是小红就会在“她”这个词上给“小红”分配更高的注意力权重。这种全局关联能力让模型能抓住长距离的语义依赖这是之前RNN、LSTM这些顺序模型做不到的。在代码层面Transformer就是一堆矩阵乘法、LayerNorm和残差连接的堆叠但理解注意力机制已经足够你读懂绝大多数工程文档了。你不需要手推反向传播才能用大模型就像开汽车不需要懂发动机燃烧原理一样但知道原理能帮你判断什么情况下车会出问题。2.2 Tokenizer与上下文窗口模型到底在“读”什么大模型不是按字读文本的而是按token读。Token是模型处理文本的基本单位一个token可能是半个词、一个词、或者一个标点。中文尤其特殊一个汉字经常被拆成两个token这也是为什么中文模型在同样上下文长度下“容量”显得更小。我试过一个直观的测试让Llama 3生成一段中文文本统计它在每个API调用里的token消耗你会发现同一段话中英文的token数差别很大。做产品时你按token计费或限制最大输出就必须考虑这个差异。上下文窗口是模型一次性能看到的最大token数。它相当于模型的工作内存——超出窗口的部分它就“忘了”。早期的开源模型窗口只有2048或4096现在的模型普遍做到32K甚至128K但窗口越大生成时占用的显存和计算量也越大。实际工程中我不建议把窗口塞满因为注意力计算是平方级增长的性能会明显下降。2.3 预训练、SFT与RLHF一个基座模型是怎么炼成的大模型的训练分三个阶段理解这个对后面做微调非常有帮助。第一个阶段是预训练Pre-training模型在海量互联网文本上学习预测下一个词目标函数是交叉熵损失。这个阶段练出来的是“基座模型”它精通语言统计规律但还不会好好回答问题——你问它“你好”它可能回你一堆乱七八糟的续写。第二个阶段是有监督微调SFT用人工标注的“问题-理想回答”对教模型学会对话的格式和人类偏好的表达方式。经过这个阶段模型才像你日常用的聊天机器人。很多开源模型只放了基座版本需要你自己做SFT才能当助手用。第三个阶段是从人类反馈中强化学习RLHF先训练一个奖励模型给回答打分再用强化学习让模型学会说高分的话。这一步大幅提升了模型的实用性和安全性。不过现在很多工作用DPO替代RLHF数据只需偏好对不用单独训奖励模型门槛低了不少。3. 工具链与本地部署实操让模型跑在你自己的电脑上3.1 硬件选择从CPU到GPU你需要多少资源本地部署大模型的最低要求是内存或显存装得下模型。以7B模型70亿参数为例FP16精度下权重占14GB加上推理时的中间缓存你至少需要16GB显存。好在有量化技术把模型压缩到INT4权重只剩约4GB加上上下文缓存一张8GB显存的显卡就能勉强跑起来。我实测过的三种配置供参考纯CPU跑1.5B模型能跑但慢每秒大概5-10个token做实验够用。8GB显存显卡跑Qwen2-1.5B或7B量化版流畅适合日常对话。24GB显卡如RTX 3090/4090跑7B全精度非常流畅可以做微调训练。多卡或多机跑70B需要显存加起来超过140GB通常是企业场景。内存也是不可忽视的瓶颈。用CPU推理时至少要32GB内存用GPU推理时系统内存建议不低于16GB。另外大模型的推理会持续挤压显存如果你开了浏览器还同时跑模型很容易OOM显存溢出。3.2 Ollama快速上手5分钟跑通你的第一个大模型Ollama是目前最简单的大模型本地部署工具它把模型下载、量化、推理、API服务全部封装成几条命令非常适合第一次接触大模型的用户。在macOS或Linux上安装就是一条命令curl -fsSL https://ollama.com/install.sh | shWindows用户直接去官网下载安装包。装完后拉取并运行模型ollama run llama3这条命令会自动下载Llama 3 8B模型然后进入一个交互式命令行你可以直接和它聊天。Ollama还支持通过模型标签选择量化版本比如ollama run qwen2:7b-instruct-q4_K_Mq4_K_M是量化等级K_M是K-quant方法的一种在质量和体积之间平衡得很好。如果你想通过API调用Ollama启动后会在11434端口开放一个OpenAI兼容接口curl http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d {model: qwen2, messages: [{role: user, content: 你好}]}这意味着你可以用OpenAI的SDK去连接本地模型后面要接自己写的Python或Java服务非常方便。3.3 vLLM吞吐率更高的生产级推理Ollama适合个人用但如果是给业务系统提供并发服务我更推荐vLLM。它用了PagedAttention技术把显存管理做到操作系统的虚拟内存级别吞吐量比原生方式高出几倍。用vLLM部署一个OpenAI兼容服务的步骤很简单pip install vllm vllm serve meta-llama/Llama-3-8B-Instruct --port 8000然后请求地址就是 http://localhost:8000/v1。vLLM还支持连续批处理多个请求排队时能自动合并成一批计算GPU利用率几乎拉满。我做过对比在同样一张A100上跑Llama 3 8BvLLM的吞吐量是普通HuggingFace推理的5到10倍这不夸张。3.4 量化模型显存不够时的救命稻草量化是把模型参数从高精度压缩到低精度最直观的收益是显存占用降低。目前主流的量化格式有GGUF、GPTQ、AWQ三个流派。GGUF配合llama.cpp和Ollama使用CPU和GPU都能跑适合单机部署。GPTQ主要针对GPU推理需要在部署前量化权重适合批量服务。AWQ也是一种GPU量化方法按激活值分布来选择保留哪些权重质量比GPTQ更稳。我个人经验是如果显存足够优先跑FP16或BF16如果不够先试GPTQ或AWQ的INT4再试GGUF的q4_K_M。量化的模型在对话类任务上质量损失很小特别适合做聊天机器人但在代码生成、数学推理这类任务上量化后的质量下降会明显一些需要实测评估后再决定。4. 微调实战从通用基座模型到你的专属助手4.1 什么场景才值得微调先泼一盆冷水大部分业务问题不需要微调用提示词工程或RAG就能解决。微调是大动作需要准备数据、花训练费用、做评估成本不低。但有三类场景微调是值得的模型需要学习特定格式输出比如固定输出JSON结构给下游系统解析。模型需要掌握某项专有技能比如从病历中抽取特定字段或按公司模板写报告。基座模型在特定领域术语理解上太弱提示词怎么优化都没用。我接过一个工业质检项目需要模型看产品图片的缺陷描述文本输出结构化缺陷代码。这种场景对格式一致性要求极高提示词方案总是输出漏字段或格式错误最后是微调一个7B模型解决的准确率从82%直接提到96%。4.2 LoRA与QLoRA低成本微调的护身符全参数微调一个7B模型需要至少80GB显存普通人根本跑不动。LoRALow-Rank Adaptation的思路是不动原始权重而是往模型里插入一些小的低秩矩阵训练时只更新这些新矩阵训练参数量骤降到原来的1%左右。更进一步的QLoRA把基座模型量化到4bit再用LoRA训练7B模型的训练显存需求降到约6-12GB一张消费级显卡就能跑。用生活类比LoRA不是把整本书重新抄一遍而是在书边上贴一些小纸条模型原来会的保留你只教它额外的东西。这就是为什么LoRA训练很快、显存省、而且原模型的通用能力基本不丢。4.3 一个最小可跑的微调流程我用的是HuggingFace的transformers、peft、datasets三件套。下面是一个最小的LoRA微调流程数据用alpaca格式的问答对from transformers import ( AutoModelForCausalLM, AutoTokenizer, TrainingArguments ) from peft import LoraConfig, get_peft_model, TaskType from datasets import load_dataset # 1. 加载基座模型和tokenizer model_name Qwen/Qwen2-1.5B model AutoModelForCausalLM.from_pretrained(model_name, torch_dtypeauto) tokenizer AutoTokenizer.from_pretrained(model_name) # 2. 配置LoRA参数 lora_config LoraConfig( task_typeTaskType.CAUSAL_LM, r8, # 低秩矩阵的秩越大能力越强但显存也越多 lora_alpha32, # 缩放系数通常设为r的2倍 lora_dropout0.1, target_modules[q_proj, k_proj, v_proj, o_proj], ) # 3. 包装模型 model get_peft_model(model, lora_config) model.print_trainable_parameters() # 可以看到只有极少参数可训练 # 4. 准备训练数据 dataset load_dataset(json, data_filesmydata.jsonl) def tokenize_function(examples): return tokenizer( examples[text], truncationTrue, max_length1024, paddingmax_length ) tokenized_dataset dataset.map(tokenize_function, batchedTrue) # 5. 训练 training_args TrainingArguments( output_dir./qwen-lora, per_device_train_batch_size1, gradient_accumulation_steps8, num_train_epochs3, learning_rate2e-4, logging_steps10, save_strategyepoch, fp16True, ) model.train() trainer Trainer( modelmodel, argstraining_args, train_datasettokenized_dataset[train], ) trainer.train() # 6. 保存 model.save_pretrained(./qwen-lora-final)训练完成后你需要把LoRA权重合并回原模型或者加载时用peft包一层。合成后的模型就可以正常部署了。4.4 微调评估与常见翻车点微调之后不要直接上线至少要做两件事准备一批“未见过的”测试集和基座模型做对比专门测模型在原本擅长任务上的表现是否下降这叫“灾难性遗忘”。我在微调实践中遇到最多的问题有三个数据质量差导致训出来的模型大量重复套话学习率太高导致训练损失震荡、模型输出乱码LoRA的rank或target_modules选得不对导致效果提升不明显。解决这些问题没有银弹核心是控制变量一次只改一个参数每次训练后跑同一条测试基线看变化是否正向。这比什么花哨技巧都管用。5. Agent、RAG与多模态入门之后往哪走5.1 RAG给大模型装一个外接硬盘RAGRetrieval-Augmented Generation是目前解决大模型知识陈旧、幻觉问题的主流方案。核心思路是用户提问后先从一个知识库中检索出相关的文档片段连同问题一起拼进Prompt让模型基于这些资料回答。它等于给模型外接了一个可以随时更新的知识库问什么就查什么。实现RAG的最小路径把文档切块用embedding模型转成向量存入向量数据库用户提问时把问题也转成向量做相似度检索取Top-K个相关片段把片段和问题拼在一起发给大模型。我在项目中常用的embedding模型是BGE-M3向量库用Milvus或Chroma。要注意的是切块策略很影响效果我一般按段落切每块控制在300-500个token重叠50-100个token避免切断语义完整的段落。5.2 主流Agent框架横评Agent是大模型的下一个热点核心是让模型不仅会“说话”还会“做事”调用工具、访问网页、操作数据库、编排多步任务。目前主流的框架有LangChain、LlamaIndex、AutoGen、CrewAI、MetaGPT。我用人话说一下这几个的差异LangChain生态最全文档最多什么都能做但抽象层多调试起来上头。适合想快速整合各种工具的中大型项目。LlamaIndex主打数据接入做RAG特别顺手文档解析管线做得很好。如果你的核心是“让大模型理解我的文档”它比LangChain省心。AutoGen微软出品最适合做多智能体对话协作几个Agent互相讨论完成复杂任务。CrewAI用“角色扮演”的方式组织Agent比如一个Agent当“研究员”另一个当“写手”通过角色分工完成任务。上手比LangChain简单适合初创项目。MetaGPT让多个Agent扮演软件公司的不同角色输入一句话需求自动产出PRD、代码和测试用例。想体验“AI公司”的可以玩玩。我的建议是别贪多先把LangChain或LlamaIndex中的一个学透Agent概念是相通的框架只是实现手段。5.3 多模态大模型从文字到图片、音频与视频多模态大模型是指能同时处理文本和图像甚至音频、视频的模型。典型代表是GPT-4o、Qwen-VL系列、LLaVA等。它们可以把图片内容理解成文字描述再基于描述做对话、生成、检索等任务。对个人开发者来说多模态最实用的场景是图片理解用手机拍一张商品图让模型识别品牌、型号、瑕疵做会议记录用模型听懂发言甚至识别说话人做自动化测试让模型看截图断言页面是否正常。这个方向对入门者很友好因为许多多模态模型都是开源可下载的部署方式和文本大模型几乎一样。6. 常见问题与避坑实录6.1 显存不足OOM提示怎么排查我在部署时被OOM坑过很多次。显存溢出时的报错通常是“CUDA out of memory”。排查步骤有固定的套路先用nvidia-smi看当前显存占用确认是不是有其他进程占着计算模型权重占用的显存加上上下文缓存再用NVIDIA的Nsight或者简单的二分法测试最大上下文长度。避坑技巧推理框架里设置max_new_tokens不要超过上下文窗口的一半多进程并发时用vLLM而不是自己起多个进程否则显存会翻倍消耗用DeepSpeed或FlashAttention-2做推理加速能省一部分显存。6.2 中文效果不好看看是不是tokenizer的问题如果你部署的是英文模型发现中文回答很笨先别急着怪模型。检查tokenizer的中文分词质量方法很简单count_tokenizer对一句话编码看它被拆成了多少个token。如果大量汉字被拆成单个token上下文窗口的有效容量就会缩小到原来的三分之一左右模型“记不住”长文本效果自然差。解决方法是优先选择中文预训练占比高的模型比如Qwen、DeepSeek、Baichuan而不是直接用Llama跑中文。或者用多语言训练过的模型国外的还有Mistral的Nemo版本中文也不错。6.3 显存占用怎么计算必要条件以FP16计算1B参数约2GB显存。7B就是14GB13B约26GB70B约140GB。加上KV Cache大致公式是 2 × 层数 × 注意力头数 × 序列长度 × 隐藏维度 的某种倍数太细不用记粗算是每1000个token的上下文大约额外占0.5-1GB显存视模型大小而定。量化到INT4后显存降到四分之一左右。如果你只有8GB显存选1.5B模型或4bit量化版7B模型16GB显存可以跑7B模型并开4096到8192的上下文24GB显存就能跑全精度7B加长上下文或量化13B模型。这个估算值我已经在不同显卡上验证过多次误差基本在2GB以内。6.4 微调后的模型“变傻了”怎么救微调后模型能力下降是常见问题。我遇到过几次训练几千条数据后模型连“11等于几”都答错的情况。原因通常是灾难性遗忘模型过度拟合了新的小数据分布。我的经验做法是微调数据集里混合一部分通用对话数据比例控制在10:1到20:1之间业务数据:通用数据训练轮数宁少勿多7B模型LoRA一般2到3个epoch就够再多就开始过拟合用早停法监控验证集loss连续两个epoch不降就停。如果已经训坏了回滚到之前的checkpoint降低学习率重新训练别硬撑。6.5 部署上线前的三个安全检查清单模型上线前我几乎都会从三个角度做安全检查第一测试模型是否可能被用户引导输出违规内容加一层敏感词过滤或模型前置审查第二确认API接口不会因为请求过于频繁或超长文本被打挂做限流设置输入和输出的最大长度第三确认日志系统不记录完整的用户输入内容尤其是涉及隐私信息时用脱敏规则处理。大模型的输出不可控工程上必须做好兜底而不是把安全寄托在模型本身。我自己这几年的感受是大模型入门最大的门槛不在于数学或算法而在于“系统性”——信息太散教程太多反而让人无从下手。你不需要第一天就啃论文先跑通Ollama再研究RAG然后动手微调一个小模型每一步都亲手验证过知识体系会慢慢搭起来。还有一个小技巧把你实验过的模型、参数、效果全都记录在一个表格里坚持几个月你对大模型的理解会比看一百篇教程都有用。这个领域的工具更新极快但底层逻辑和工程方法论是不变的把基础打牢后面的路自然好走。
返回列表