大语言模型微调实战:从LoRA到QLoRA的完整指南

聊大语言模型微调这个话题之前,我想先说实话:现在网上的教程铺天盖地,照着跑通一个开源库的demo不算难,但真正到了自己的业务数据上,一堆问题就冒出来了。loss降不下去、模型学了一堆废话、本来会的通用能力反而变差了,这些坑我基本都踩过一遍。这篇文章想写的不是那种“复制三行代码就完事”的速成教程,而是把大语言模型微调从决策、原理到实操、排查的完整链路讲透,把我踩过的坑和总结的经验直接摆出来,希望能让你少走弯路。

[# 大语言模型微调实战:从基础原理到高级优化技巧详解]

1. 微调的定位:先想清楚“要不要微调”再动手

1.1 微调不是万能的,先穷尽更轻量的手段

很多同学一上来就问“我这个场景要怎么微调”,但我的第一个建议往往是:先别急着微调。大语言模型(LLM)经过海量预训练之后,本身就具备了不错的指令跟随、知识问答、推理总结能力。很多业务需求,用提示工程(Prompt Engineering)调一版提示词就能解决七八成。特别是模型底座本身比较强的情况下,你只要把上下文组织好、示例给足,效果可能已经能用了。

那什么时候才真的需要微调?我自己的判断标准是三条:

  • 提示工程和示例(Few-shot)已经试过,但效果稳定不下来,或者每次输出格式飘忽不定。
  • 业务里有固定的专业表达、特殊术语、私有知识,这些内容模型在预训练阶段不可能见过,光靠提示词塞不下。
  • 你希望模型在特定任务上的行为模式发生“结构性改变”,比如从通用聊天变成严格的JSON输出器,或者学会某种固定的写作风格。

反过来,如果只是偶尔问几个问题、处理少量文本,微调绝对是杀鸡用牛刀。因为微调的代价不只是显卡和时间,还有后续的维护成本。模型一旦微调,它的通用能力多多少少会受影响,你需要建立一套新的评估和回归机制,这对个人开发者或者小团队来说是不小的负担。

还有一条路经常被人忽略:检索增强生成(RAG)。如果你的需求是“让模型知道某批私有文档里的内容”,那RAG往往比微调更合适。RAG解决的是知识注入问题,微调解决的是行为对齐问题,两者不冲突,甚至可以叠加用。我在实际项目里的习惯是:先RAG解决“知道什么”,再考虑微调解决“怎么回答”。

1.2 微调到底在调什么:理解三种主要路线

当你决定要微调了,下一步就是选路线。现在主流的做法分三派:全参数微调(Full Fine-tuning)、参数高效微调中的LoRA、以及更省显存的QLoRA。

全参数微调,就是让预训练模型的所有权重都参与梯度更新。这条路效果上限最高,因为模型的全部容量都被重新适配到你的数据分布上了。但代价也最直接:显存占用巨大、训练时间长、需要的数据量和调参功力都更高。以我常用的一个7B规模的开源基座模型为例,用全参数微调,即便在单卡A100 40G上,也要把批次压得很小才能跑起来,稍不注意就OOM。

LoRA(Low-Rank Adaptation)是当前最流行的折中方案。它的核心思想是:冻结原模型的权重,在旁边插入一小部分可训练的低秩矩阵。你可以理解为,模型原有的“大脑”不动,只是额外加了一块“小脑”来适配新任务。因为可训练参数量通常只占原模型的0.1%到1%,显存占用和训练速度都友好很多。我大部分业务微调都是用它完成的,效果在绝大多数场景下已经逼近全参数微调。

QLoRA则是在LoRA的基础上,把原模型进一步量化到4bit精度再冻结,训练时把梯度反传到低秩适配器上。这样7B模型只要一张16G甚至8G显存的消费级显卡就有机会跑起来,代价是训练速度会慢一些,而且量化过程本身有精度损失。不过说实话,对大多数业务任务来说,这个损失是可以接受的。我在没有高端显卡的远程机器上也用QLoRA跑出过不少能上线的模型。

2. 动手之前要做好的准备:依赖、数据和算力规划

2.1 环境准备:版本匹配比想象中更重要

大语言模型微调的环境配置,难点不在装包,而在版本匹配。我见过太多人卡在“transformers版本和模型权重不兼容”这种问题上。以我个人习惯的这套技术栈为例,主要用到几个开源库:transformers负责模型加载和训练流程,peft负责LoRA之类的参数高效微调方法,datasets负责数据处理,accelerate负责分布式训练的简化。这几个库的版本之间有隐性约束,装的时候最好不要全用最新版,而是参照你选的基座模型在官方仓库里推荐的版本组合。

我踩过的坑是:某个版本的transformers在加载4bit量化模型时,会因为bitsandbytes版本不匹配直接报错,或者是tokenizer的special token处理逻辑变了导致训练出来的模型生成乱七八糟的字符。给个实用的建议是:在conda或venv里单独建一个环境给微调用,不要和日常开发环境混在一起。我习惯先写一个requirements.txt锁定大版本,比如transformers>=4.30,<4.45,peft>=0.6,<0.10这样,给后续调试留出余地。

如果用的是QLoRA路线,还需要额外的bitsandbytes库来支持4bit量化加载。这个库在Windows上安装偶尔会出问题,如果你主力机是Windows系统,最省心的方案是先装WSL2再搭环境,或者直接租一台Linux系统的云GPU服务器来跑,省下的时间远超折腾环境的时间。

2.2 数据准备:数量不如质量,格式决定成败

微调数据的质量,直接决定最终效果的天花板。很多人以为“数据越多越好”,实际上对于大模型微调来说,几百条高质量数据的效果往往好过几万条低质量数据。我见过一个典型的反例:有人从网上抓了一大批问答对丢进去训练,结果模型学会了带脏话和病句的表达,悔得肠子都青了。

指令微调数据的基本格式通常长这样,用JSON组织,每条包含指令(instruction)、输入(input,可空)和期望输出(output):

[ { "instruction": "请判断以下评论的情感倾向,输出'正面'、'负面'或'中性'。", "input": "这家餐厅的服务态度特别好,下次还会来。", "output": "正面" }, { "instruction": "根据产品名称生成一句宣传文案。", "input": "某智能手环", "output": "轻若无物,全天守护你的健康数据。" } ]

数据准备有几个原则,我一条条说清楚。

第一,去重和清洗是底线。重复数据过多会让模型对特定句式产生严重过拟合,清洗则要把噪声内容、无关字段、残缺文本全部处理掉。我自己的流程是,先写脚本做精确去重,再做一次相似度去重(用简单的文本向量算一下cosine相似度,超过0.9的保留一条),最后人工抽样检查100条左右,确认质量没问题再进训练管线。

第二,多样性要刻意设计。如果你想微调一个能做分类又能做摘要的模型,训练数据里两类任务的比例要保持均衡,不要某一类占了90%。每类任务内部,指令的措辞、输入的句式也要尽量多样化,否则模型会学成“只认得训练集里的问法”,换个说法就不会了。

第三,数量要服从“够用就行”的原则。对单一任务,一两千条高质量数据通常是一个不错的起点;对多任务场景,每类任务至少准备三五百条。先拿小批量数据跑一个草稿模型,在验证集上看效果,再决定要不要扩充数据,这是性价比最高的做法。

2.3 算力规划:用公式估算显存,心里有数不慌张

显存是微调路上最现实的一道坎。很多人上来就问“我要多大显存才够”,其实这事可以粗略估算一下。以7B参数模型为例,全参数微调时,需要存下模型参数、梯度、优化器状态(Adam通常占两份额外状态)。单是参数就占7GB(按FP16计算,每参数2字节),梯度再占7GB,优化器状态14GB,加到一起接近30GB,还没算中间激活值。这就是为什么全参数微调7B模型起步就要40G以上显存的原因。

LoRA方案里,原模型权重被冻结,不需要存梯度和优化器状态,显存大户只剩下模型本身和激活值。这时候7B模型在FP16精度下大概需要16G左右显存,一张24G的消费级显卡就能跑得比较舒服。而QLoRA把模型量化到4bit之后,模型权重缩水到大约4-5GB,配合分批次计算和梯度检查点技术,8G显存起步、16G显存比较宽裕,这个配置对个人开发者已经很友好了。

我给你的建议是:如果预算允许,优先租一张24G显存的卡来跑LoRA微调,这个组合容错率最高。硬要在8G卡上跑也不是不行,但就需要把序列长度、批次大小压得很低,训练效率打折不说,调参空间也小,新手容易心态崩。

3. 微调全流程实操:从数据加载到模型产出

3.1 数据加载与处理的标准流程

在训练代码里,数据加载和处理一般遵循一条固定的流水线:读取原始数据、套用对话模板、分词、截断或填充、组装成batch。下面这段代码是我常用的一套流程,基于datasets库和transformers里的tokenizer:

from datasets import load_dataset from transformers import AutoTokenizer dataset = load_dataset("json", data_files="train.json") tokenizer = AutoTokenizer.from_pretrained("your-base-model") tokenizer.pad_token = tokenizer.eos_token # 很多基座模型没有pad token,需要手动设置 def format_example(example): # 拼成模型见过的指令式文本 text = f"指令:{example['instruction']}\n输入:{example['input']}\n回答:{example['output']}" return {"text": text} def tokenize_function(example): # 分词、截断到固定长度,同时保留标签用于损失计算 model_inputs = tokenizer( example["text"], max_length=512, truncation=True, padding=False, ) model_inputs["labels"] = model_inputs["input_ids"].copy() return model_inputs dataset = dataset.map(format_example).map(tokenize_function)

两个细节值得注意。第一,很多基座模型的tokenizer没有设置pad token,训练时如果不处理,Dataloader在组装batch时遇到不同长度的样本就会报错。常见的做法是把pad token设置成eos token,或者专门增加一个pad token。我用的是前者,简单省事,但如果你的任务涉及大量padding,建议专门加一个pad token并把它排除在损失计算之外,避免模型学到“生成pad符号”。

第二,损失计算的目标通常是把答案部分的token作为label。最粗糙的做法是整个序列都算损失,模型在训练时也会学着预测指令和输入的文本,这会浪费一部分学习容量。进阶做法是用数据集的某些工具把指令部分的label设成-100,这样损失只在答案部分计算,收敛效果会更聚焦。我第一次微调的时候就没做这一步,后续加了之后发现同样的数据量,效果提升非常明显。

3.2 配置LoRA参数:rank不是越大越好

LoRA配置里最核心的参数就是秩(rank),也就是低秩矩阵的维度。很多人直觉上觉得rank越大越好,因为可训练参数变多了,模型容量更高。但实际操作中,rank过大有几个副作用:训练更慢、显存占用更高,而且在小数据集上容易过拟合。我个人的经验是,7B规模模型做单任务微调,rank=8到16通常就能达到不错的效果;做复杂的多任务学习,可以放宽到32甚至64,但不要无脑往上加。

除了rank,还有一个容易被忽略的参数是target_modules,也就是你要插入低秩矩阵的模块列表。默认配置通常是只改attention层的q_proj和v_proj,但我在实践中发现,把o_proj和gate_proj也加上,模型对新任务的学习能力会明显增强,尤其在数学推理和结构化输出任务上。当然,可训练参数量会相应增加,需要在显存和效果之间做权衡。

Loss函数的计算和优化器选择,我的习惯是直接用transformers里的Trainer,它内置了数据并行、梯度累积、日志记录这些功能,用起来省心。学习率一般设置在1e-4到3e-4之间,这是LoRA微调比较稳的区间。全参数微调则需要更小,1e-5到2e-5,因为学习率太大会把预训练出来的权重冲坏。

3.3 训练过程中的实时监控指标

训练过程中,不要只盯着一件事——loss下降。loss下降只说明模型在拟合训练数据,不代表它学到了你想要的行为。我会在训练的同时跑一个小的验证集,监控验证集上的loss或者任务指标(比如分类准确率、生成文本的BLEU分数),看它们是否同步在改善。如果训练loss在降但验证loss在升,说明模型开始过拟合了,这时候需要早停,或者加大数据增强和正则化手段。

还有一个我后来才意识到的细节:监控每个batch的token吞吐量(tokens per second)。这个指标反映训练效率,如果数值异常低,可能是数据预处理环节出现了瓶颈,比如tokenizer频繁把长文本截断导致大量计算浪费,或者是显存不足触发了频繁的显存交换。我之前一次训练跑得异常慢,排查了半天发现是一个无关的进程占了显存,把batch size压下来了,清理之后速度直接翻倍。

在训练脚本里,我习惯用transformers的TrainingArguments把日志输出间隔设短一些,比如每10步打印一次,方便实时观察。模型保存策略也很有讲究,建议保存验证集指标最好的那个checkpoint,而不是最后一个checkpoint。训练后期loss可能会有小幅震荡,最后一个checkpoint未必是最优解。

保存格式上,LoRA微调产出的通常是一个小文件(几十到几百MB)的适配器权重,不是完整模型。推理时需要先加载基座模型,再加载LoRA适配器。部署时要记得把这两部分都带上,不然换了环境就找不到适配器了。我有个朋友就干过这种乌龙事——微调完了只把适配器拷走,推理时忘了加载,还以为模型训练失败了。

4. 评估与迭代:微调之后怎么验证效果

4.1 通用基准测试不一定可靠,业务侧评估才是硬标准

微调完成后,第一步自然是看看模型是不是变“聪明”了。很多人喜欢直接用一些公开的基准测试集来打分,比如常识问答、推理题之类的。但我得泼一盆冷水:这些通用基准和你微调的目标往往不是一回事,参考价值有限。你用一批行业垂直数据微调出来的模型,在通用基准上可能分数不升反降,但这不代表微调失败,只能说明模型的能力分布发生了变化。

真正可靠的评估方式,是建立一套业务侧的评估集。这个评估集要满足三个条件:

  • 没有出现在训练数据里(最好时间上更晚采集)。
  • 覆盖你线上会遇到的各种边界case,包括难例、歧义例和罕见表达。
  • 评估标准是你在业务上真正关心的指标,比如格式正确率、关键信息召回率、错别字率、主观评分等。

我自己的操作习惯是,从真实业务日志里随机抽300-500条样本,手工标注好标准答案,做成固定评估集。每次微调迭代之后,先把同一组样本跑一遍,对比和上一版模型的差距。这个过程虽然费人工,但比任何公开基准都更接近真实效果。

4.2 发现灾难性遗忘:学会做“能力回退测试”

灾难性遗忘是微调里最让人头疼的问题之一。模型在自己的任务上表现越来越好,但原本擅长的聊天、总结、开放域问答能力却明显退化。这种退化在小数据集、大学习率、反复多次微调的情况下特别容易被放大。

我强烈建议在每次微调时都做一个“能力回退测试集”。具体做法是:准备一组覆盖通用能力的问题,比如常识问答、语言理解、文本润色、代码生成(如果你原本关心这些能力),在微调前后分别跑一遍,对比输出质量。如果发现某个通用能力出现了明显退化,有几种缓解办法:

  • 混合一部分通用数据进训练集,占10%到20%的比例,相当于给模型的旧能力做“复习”。
  • 降低LoRA的rank和学习率,减少对原始权重的冲击。
  • 使用正则化技术,比如在损失函数里加一项约束,限制LoRA适配器权重的大小。
  • 检查训练数据里是否有过多单一样式,导致模型过度拟合局部模式。

我在一个实际项目中遇到过这样的问题:微调模型专注做产品评论的情感分类,一开始效果非常好,但测试时发现让模型写一句自然的产品推荐语,它竟然开始输出“正面负面中性”之类的分类标记。后来我按照上面的方法,在训练数据里混入了20%的通用对话数据,同时把学习率从3e-4降到了2e-4,效果才恢复正常。

4.3 数据污染检测:评估分数虚高的大坑

还有一个非常隐蔽的坑,叫数据污染。如果你从网上公开数据集里拿训练数据,而测试集也来自同一个源头,模型可能在训练时已经“见过”测试题了,评估分数自然高得离谱。更隐蔽的情况是,公开基准集本身就混入了大量来自互联网的文本,预训练阶段就可能被模型见过。

检测数据污染的办法,我介绍几个实用的:

  • 在训练前,把评估集的样本和训练集做一次文本相似度匹配,把相似度超过0.9的样本标记出来,从评估集里剔除。
  • 用模型自身来做污染检测:让模型尝试续写评估样本的开头,如果续写结果和标准答案高度吻合,说明这段文本可能在训练阶段出现过。
  • 最保险的方案是,自己构造一批全新的评估样本,完全不依赖公开数据,哪怕样本量少一些也更可信。

关于数据污染这件事,我踩过一次很深的坑。某次微调后模型在公开测试集上的指标高得惊人,我当时还挺高兴,结果拿到真实业务数据上一测,效果并不比微调前好多少。后来定位到问题才知道,我的训练数据里有一整批来自某个开源社区的问答数据,而测试集也恰好引用了同一批数据。那次之后我就养成了“评估必须用自建新鲜数据”的习惯。

5. 常见故障与排查实录:高频问题的定位与解决

5.1 Loss不下降或梯度爆炸

第一个高频问题是loss不下降,或者loss一开始就非常小,但这并不代表模型在学。损失值异常通常有几种原因:

  • 学习率设置过高,导致损失震荡甚至发散。LoRA场景下,如果用了大于5e-4的学习率,很容易出这种事。
  • 标签设置错误。前面提到把整个序列的token都作为label时,如果指令部分文本特别长,模型其实在花大量容量学习“复述指令”,loss看着在降,实际效果很差。
  • tokenize和训练数据格式不一致。比如训练时拼接的模板和推理时拼的不一样,模型就学不到规律。
  • 随机种子问题导致数据打乱异常。偶尔会出现某种bug造成同一个batch内全是同类样本,让梯度方向偏斜。

遇到loss异常,我的排查顺序很固定:先打印几个sample看看labels是否正确,再检查学习率和optimizer配置,最后把数据随机抽样可视化确认格式。很多时候问题是出在数据侧,而不是模型侧。

5.2 输出质量差与幻觉问题

微调后的模型在推理时可能还是会出现胡说八道、逻辑混乱的现象。如果训练数据本身包含了一些逻辑上不严谨或自相矛盾的样本,模型学到的就是这些坏模式。所以在数据准备阶段,每一条数据都要确保“指令清晰、输入完整、输出正确”,那些低质量的模糊样本宁可不放。

如果模型已经训练完了才发现质量问题,也别急着重新训练。可以先用采样参数缓解:推理时把temperature调低到0.1到0.3,把top_p调低,模型生成会更保守、更贴紧训练分布。如果效果还不行,再回去检查训练数据里是否有大量“开放性问题”被错误地配上了“确定性回答”,这种错配会让模型在生成时无所适从。

5.3 显存不足(OOM)的处理策略

显存不足是新手最常撞上的墙。OOM报错本身不复杂,但处理起来有不少技巧。首选办法是缩小batch size,这最容易上手。但是batch size小了,梯度估计的噪声变大,训练稳定性会受影响,所以通常伴随梯度累积(gradient accumulation)一起调整。比如原来batch size是16,显存只够跑4,那就把gradient accumulation steps设成4,等效batch size还是16。

另外一个利器是gradient checkpointing,它可以牺牲一点计算速度来大幅降低显存消耗。开启这个功能后,训练过程中的激活值不会全部保存,而是在反向传播时重新计算。对长序列训练场景,这个技术的显存节省效果非常可观。我用一段代码演示一下在TrainingArguments里的配置方法:

from transformers import TrainingArguments training_args = TrainingArguments( output_dir="./checkpoints", per_device_train_batch_size=4, gradient_accumulation_steps=4, learning_rate=2e-4, num_train_epochs=3, fp16=True, # 半精度训练,显存直接减半 gradient_checkpointing=True, logging_steps=10, save_strategy="epoch", evaluation_strategy="epoch", report_to="none", )

混合精度训练(fp16或bf16)也是显存管理的重要手段。fp16在大多数消费级显卡上都能用,bf16在部分新架构的显卡上效果更稳定,数值精度高一些,不容易出现溢出。另外,模型加载时的低精度加载同样能省显存,比如用加载时的torch_dtype参数直接指定半精度。这几个手段组合起来,7B模型做LoRA微调甚至能在20G显存内跑得游刃有余。

6. 我给新手的高效学习路径

如果你是完全没接触过大语言模型微调的新手,我建议你不要一上来就四处收集各类参数资料。按照下面这条路径走,效率会高很多:

第一步,先跑通推理。随便选一个有开源权重的中文基座模型,性能不用太强,关键是文档全、社区活跃。在本地装好环境,加载模型,写一个交互式脚本,先搞清楚输入输出是怎么回事。这个阶段你不需要理解微调,只需要对模型的“脾性”有个直觉。

第二步,用公开的数据集做一个最简单的LoRA微调。数据集选现成的,比如某个开源社区的指令数据集。如果你不知道去哪里找数据,可以选一个你自己手工整理的50到100条数据,哪怕是让模型学会特定语气也行。目标是完整走一遍“数据加载-训练-保存-推理验证”的流程,体验每个环节。

第三步,把你自己的业务数据整理成训练格式,跑一次小规模的微调,同时建立评估集。这一步你会遇到真正的问题:过拟合、灾难性遗忘、生成格式不稳定等等。把这些问题记录下来,一个一个解决,这个过程收获最大。

第四步,材料积累够了之后,可以尝试优化训练效率、接入部署环境,把这个模型包装成真正可以对外服务的东西。比如做成一个HTTP接口,或者嵌入到你的业务系统里。

在每一步踩坑的时候,都推荐做一次完整的日志整理。我发现把每个报错信息、当时的参数配置、最终解决方案记录下来,能让你在下一次遇到类似问题时节省大量时间。我自己就有个笔记本专门记这些,现在回头看,那些记录比任何教程都有用。

大语言模型微调不是一次性工作,而是一个需要持续迭代、评估和调整的过程。模型上线之后,随着业务数据分布的变化,可能过几个月效果就会下滑。定期用新数据做增量训练,把评估集做起来,把它当做一个需要长期维护的系统来对待,这样你的模型才能越用越顺。

相关新闻

SecureCRT免安装版配置原理与便携化实践指南

SecureCRT免安装版配置原理与便携化实践指南

简介&#xff1a;本资源为SecureCRT绿色便携版免安装包&#xff0c;面向系统管理员、网络工程师及开发运维人员&#xff0c;解决多环境快速部署安全终端连接工具的刚需——无需注册、不写注册表、不改系统变量&#xff0c;即下即用&#xff0c;特别适合出差调试、机房巡检、多台…

2026/10/20 2:34:34 阅读更多 →
CAT12工具箱:神经影像VBM分析的自动化金标准

CAT12工具箱:神经影像VBM分析的自动化金标准

简介&#xff1a;本资源是面向神经影像学研究者与计算神经科学初学者的CAT12工具箱完整安装与分析套件&#xff0c;聚焦基于体素的形态计量学&#xff08;VBM&#xff09;全流程处理&#xff0c;解决sMRI数据标准化、组织分割、灰质/白质密度统计及结果可视化等核心问题。压缩包…

2026/10/20 2:34:34 阅读更多 →
软考架构师:六大质量属性与ATAM架构评估全解析

软考架构师:六大质量属性与ATAM架构评估全解析

软考系统架构设计师备考者最头疼的一类考点&#xff0c;往往不是那些偏门的技术名词&#xff0c;反而是看起来人人都懂、实际一做题就错的基础概念。“软件质量属性”就是典型代表。很多人复习时把它当成背诵题&#xff1a;性能、可用性、安全性、可修改性&#xff0c;听到都能…

2026/10/20 2:34:34 阅读更多 →

最新新闻

AI面试八股文-17_17-AI 编程工具与自主 Coding Agent 面试题

AI面试八股文-17_17-AI 编程工具与自主 Coding Agent 面试题

pdf版下载链&#xff1a;https://pan.quark.cn/s/9cc742e9c2a8 17 AI 编程工具与 Coding Agent&#xff1a;原理、评测与工程实践 更新&#xff1a; 2026-10-12 难度&#xff1a; ⭐⭐⭐⭐ 考点&#xff1a; Coding Agent、Harness、沙箱、权限、Skills、长任务、评测与工具选…

2026/10/20 5:05:58 阅读更多 →
Python vs Go:2026年到底该怎么选

Python vs Go:2026年到底该怎么选

早些年我写项目&#xff0c;常年泡在Python里。写接口、跑数据分析、捣鼓大模型原型&#xff0c;几行代码就能把想法跑通&#xff0c;爽感拉满。但随着服务流量涨上去&#xff0c;麻烦接踵而至&#xff1a;接口延迟忽高忽低、容器冷启动慢吞吞、并发一上来资源开销直接超标。那…

2026/10/20 5:05:58 阅读更多 →
详细描述一个完整RAG系统的详细工作流程?

详细描述一个完整RAG系统的详细工作流程?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 5:05:58 阅读更多 →
windows上安装docker步骤

windows上安装docker步骤

1. 检查是否已开启虚拟化 ctrlshiftesc快捷键&#xff1a; 2. 安装wsl 开启管理权限在cmd中输入以下命令&#xff1a; wsl -l -v查看版本: wsl -l -v输出会显示每个发行版的 NAME、STATE、VERSION&#xff0c;其中 VERSION 为 1 表示 WSL1&#xff0c;2 表示 WSL2 。如果…

2026/10/20 5:05:58 阅读更多 →
一亿数据找Top K,内存仅存k个元素(Top—K问题)

一亿数据找Top K,内存仅存k个元素(Top—K问题)

问题导入&#xff1a;假使有一亿个整数要去排序&#xff0c;从中找出k个最大值和k个最小值&#xff0c;当前的内存仅仅可以保留k个整数应当如何存储内容扩展&#xff1a;1GB1024MB1024*1024KB1024*1024*1024Byte≈10.7亿字节一个整形需要用到4个字节&#xff0c;一亿个整形要用…

2026/10/20 5:05:58 阅读更多 →
Agent稳定运行的工程基石:Harness设计与实践拆解

Agent稳定运行的工程基石:Harness设计与实践拆解

先交代一个背景。我们团队最早做某自动化运维 Agent 时&#xff0c;第一版代码就是一个while True循环里反复调用大模型、执行工具、再喂回模型。前三天跑得挺顺&#xff0c;第四天它突然开始疯狂调用同一个内部接口&#xff0c;把下游服务打到限流。查了半天才发现&#xff0c…

2026/10/20 5:04:57 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →