人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载导读本文是一篇面向初学者的端到端精调实战指南以 PaddleNLP 开源库GitHub 加速计划 / pa / PaddleNLP 镜像仓库中docs/zh/llm/docs/finetune_tutorial.md为核心脉络展开。你将首先理解预训练 vs 精调的核心差异与 Alpaca 有监督数据格式然后跟随完整命令对 Qwen2.5-0.5B 模型完成 SFT 全参精调、Prefix Tuning 与 LoRA 参数高效微调PEFT并结合llm/run_finetune.py、llm/config/qwen/下的真实配置与paddlenlp.peft源码深入掌握各精调方法的底层原理、配置文件每个字段的含义与选型建议。学完本文你将能独立搭建一条数据准备 → 配置编写 → 单卡/多卡训练 → 权重保存/合并 → 推理的完整精调流水线。1. 什么是精调Fine-tuning经过预训练我们拥有了具备通用语言能力的基础模型base model。但如果把这个模型直接应用于某一个特定领域如广告文案生成、医疗问答、法律文书效果往往并不理想——原因在于预训练语料没有针对特定任务场景进行特化。幸运的是大模型经过预训练已经拥有了很强的通用能力只需要少量特定领域的有监督数据就可以大幅提升其在特定领域的能力这一过程就是精调Fine-tuning。预训练与精调的核心差异可以简单对比为对比维度预训练Pre-training精调Fine-tuning数据量海量通用文本少量特定任务数据训练目标学习通用语言知识优化具体任务表现训练时间很长较短在 PaddleNLP 仓库中预训练与精调分别由两条独立的脚本入口承载预训练对应 llm/run_pretrain.py精调对应 llm/run_finetune.py。两者共享同一套配置文件 命令行参数的启动方式因此从一个入口切换到另一个入口非常顺滑。本文聚焦精调链路。2. 精调数据理解 Alpaca 有监督数据格式与预训练使用的无监督语料不同精调数据是有监督数据——每一条样本通常由一个指令instruction向大模型说的话和一个输出output大模型应该给出的回应组成。PaddleNLP 精调脚本最常用的数据格式是Alpaca 格式一个简单样本如下{ instruction: 给出首都, input: 法国, output: 巴黎 }各字段含义instruction用户向大模型输入的指令input任务相关的输入通常为空output大模型的预期输出。除了 Alpaca 格式llm/docs/finetune.md 还说明了精调脚本另一套常见数据约定每行一个 JSON 字典包含src模型的输入指令/提示str或List(str)与tgt模型的输出两个字段。也就是说无论使用instruction/input/output还是src/tgt结构llm/run_finetune.py 都能通过 llm/utils/data.py 中的转换函数适配为 token id 序列用于训练。2.1 获取 demo 数据集本教程使用tatsu-lab/alpaca的 demo 数据集。首先克隆 PaddleNLP 仓库如果之前已经操作过可以跳过这一步git clone https://gitcode.com/gh_mirrors/pa/PaddleNLP.git进入llm运行目录并下载、解压 demo 数据cd PaddleNLP/llm wget https://bj.bcebos.com/paddlenlp/datasets/examples/alpaca_demo.gz tar -xvf alpaca_demo.gz解压后得到的data目录即作为配置文件中dataset_name_or_path的取值。从 llm/run_finetune.py#L765-L830 的create_dataset实现可以看到脚本会自动寻找dataset_name_or_path/train.json或train/*.json作为训练集、dev.json或dev/*.json作为验证集、test.json或test/*.json作为测试集也支持直接传入内置数据集名称。3. 精调Fine-tuning的两条技术路线对大模型的精调本质上是对其参数进行微调这里有两条路线可选SFTSupervised Fine-Tuning监督式微调精调大模型的全部参数PEFTParameter-Efficient Fine-Tuning参数高效微调精调大模型的部分参数。如果拥有足够的计算资源对全部参数进行微调选择 SFT如果资源不足或受限则选择 PEFT只对模型的小部分关键参数或新增参数进行微调。PaddleNLP 对两类方法都封装好了精调脚本用户只需切换不同模型的配置文件直接执行命令即可进行精调无需编写训练循环。3.1 SFT全参精调 Qwen2.5-0.5BSFT 的训练过程就是让模型根据输入尽可能产生与给定输出一样的输出。以 Qwen2.5-0.5B 为例单卡启动命令如下约需 12G 显存python -u run_finetune.py ./config/qwen/sft_argument_0p5b.json多卡启动命令如下约需 45G 显存使用 8 卡数据并行python -u -m paddle.distributed.launch --devices 0,1,2,3,4,5,6,7 run_finetune.py ./config/qwen/sft_argument.json对应的真实配置文件是 llm/config/qwen/sft_argument_0p5b.json 与 llm/config/qwen/sft_argument.json。前者面向 0.5B 小模型、使用 FP16 混合精度后者面向 Qwen2-7B、使用 BF16 并开启 FlashAttention。两者核心字段对比如下配置字段sft_argument_0p5b.json单卡演示sft_argument.json8 卡说明model_name_or_pathQwen/Qwen2.5-0.5B-InstructQwen/Qwen2-7B预训练模型名称或本地模型路径dataset_name_or_path./data./data数据集目录含 train/dev/testoutput_dir./checkpoints/sft_ckpts./checkpoints/sft_ckpts模型与 checkpoint 保存目录per_device_train_batch_size11单卡 micro batch建议配合梯度累积gradient_accumulation_steps44梯度累积步数等效 batch 1×4num_train_epochs33训练轮次learning_rate3e-053e-05优化器初始学习率src_length/max_length1024 / 20481024 / 2048输入上下文长度 / 输入生成最大长度fp16/bf16fp16: truebf16: true混合精度开关fp16_opt_levelO2O2O2 级别下模型参数直接转为半精度use_flash_attentionfalsetrue是否使用 FlashAttentionshardingstage2stage2分组参数切片的数据并行策略关键训练参数说明对应 llm/docs/finetune.md#L292-L317 的 TrainingArguments 说明per_device_train_batch_size训练集单卡批处理大小micro batch越大越占显存、训练代价越高gradient_accumulation_steps梯度累积步数多次计算梯度累加后一次性更新参数等效于把 batch size 扩大该倍数建议 batch size 设为 1、用梯度累积控制有效 batchnum_train_epochs训练轮次默认为 3learning_rate优化器初始学习率SFT 全参精调通常取1e-5 ~ 5e-5量级warmup_stepswarmup 步数配置为 30 表示前 30 步学习率线性爬升evaluation_strategy/save_strategy评估/保存策略epoch表示每个 epoch 结束时执行也支持steps与nofp16_opt_levelO1下仅白名单算子用半精度计算O2下模型参数直接转为float16/bfloat16recompute重计算开启后通过丢弃并重算中间激活降低显存从而支持更大 batchtensor_parallel_degree/pipeline_parallel_degree/sharding分别控制张量并行、流水线并行与参数切片并行即 4D 并行策略的核心开关unified_checkpoint统一 checkpoint 格式便于多并行策略间的权重转换与续训load_best_model_at_end/metric_for_best_model训练结束时自动加载验证集上accuracy最优的 checkpoint。从源码看llm/run_finetune.py#L113-L135 的main()通过PdArgumentParser解析(GenerateArgument, ModelConfig, ReftArgument, DataConfig, SFTConfig)五组参数当命令行第一个参数以.json结尾时调用parse_json_file_and_cmd_lines()读取配置文件并允许命令行参数覆盖配置文件中的字段。这意味着你可以在不改动 JSON 的前提下随时通过追加命令行参数如--learning_rate 1e-4 --num_train_epochs 5调整训练设置。此外脚本会检测output_dir下已存在的 checkpoint 并自动续训llm/run_finetune.py#L137-L145这是断点续训的底层机制。3.2 PEFT只更新小部分参数在实际业务环境中常常需要对参数量较大的模型进行微调此时若使用 SFT显存与时间开销都可能过大。PEFT 方法只更新小部分参数或新增少量参数常见的路线有参数附加方法如 Prefix Tuning与低秩分解方法如 LoRA等。PaddleNLP 的 PEFT API 统一实现在 paddlenlp/peft 目录单卡/分布式 LoRA 与 Prefix-Tuning 均开箱即用run_finetune.py的create_peft_model()llm/run_finetune.py#L563-L737会根据配置依次构建对应的 PEFT 模型。3.2.1 Prefix Tuning向每层插入可学习前缀Prefix Tuning前缀调优是一种参数高效微调技术在预训练大语言模型的每一层前面插入一段可学习的前缀向量prefix embedding而不是更新模型的全部参数从而实现任务适配。举例来说在 SFT 中模型的输入是输入句而在 Prefix Tuning 中输入会变成prefix 输入句即模型会新增一部分专门处理 prefix 的网络这部分多出来的参数就是我们要微调的部分。从原理层面看prefix embedding 由专门的 prefix encoder 网络生成数个张量以past_key_value的方式被插入到语言模型每一层的 hidden_state 之前详见 llm/docs/peft.md#L20-L28。和 LoRA 类似Prefix Tuning 会冻结整个预训练模型的所有参数只对 prefix embedding 进行梯度更新训练参数量通常只有常规 SFT 的 0.1% 量级。启动单卡 Prefix Tuning 命令如下约需 10G 显存python run_finetune.py ./config/qwen/pt_argument_0p5b.json对应的配置文件 llm/config/qwen/pt_argument_0p5b.json 与 SFT 配置的最大区别在于只增加了一行prefix_tuning: true同时学习率由 SFT 的3e-05提升到3e-02Prefix Tuning 只更新新增的少量前缀参数需要相对更大的学习率。7B 模型的 Prefix Tuning 配置见 llm/config/qwen/pt_argument.json。从源码看llm/run_finetune.py#L566-L591 会调用get_prefix_tuning_params(model)自动从模型配置中提取num_attention_heads、num_hidden_layers、hidden_size、multi_query_group_num等维度据此构造PrefixConfig并包装为PrefixModelForCausalLM。底层实现位于 paddlenlp/peft/prefix其中mark_only_prefix_as_trainable()只把 Prefix embedding 与 Prefix projection 层标记为可训练。需要注意的是Prefix Tuning 目前不支持流水线并行llm/run_finetune.py#L567-L568 会直接抛出NotImplementedError。PrefixConfig的核心可配置项详见 llm/docs/peft.md#L195-L230num_prefix_tokens前缀 token 个数如 64num_attention_heads、num_hidden_layers、hidden_size、multi_query_group_num与 base model 结构对齐的维度参数prefix_projection是否对 prefix tokens 做 projection默认为Falseprefix_projection_hidden_size开启 projection 时投影层的 hidden sizeprefix_dropoutprefix projection dropout 比例默认为 0.0。3.2.2 LoRA低秩分解参数高效微调LoRALow-Rank Adaptation低秩适配是目前最流行的大模型微调方法。其核心思想是向模型插入少量可训练的低秩矩阵在不改变原模型参数的前提下完成微调任务。如图中示例所示一个很大的参数矩阵灰色部分可以近似分解为两个较小的矩阵 A 与 B 相乘从而把一个需要整体更新的大矩阵替换为参数量大幅减少的两个小矩阵。其数学形式为对于预训练权重矩阵 $W_0$通过引入两个低秩矩阵 $A \in \mathbb{R}^{r \times k}$、$B \in \mathbb{R}^{d \times r}$ 近似权重的更新过程$$ W_0 \Delta W W_0 BA $$训练期间 $W_0$ 参数被冻结只对 A、B 两个矩阵进行梯度更新前向传播公式为$$ h W_0x BAx $$由于训练参数减少训练过程会减少大量中间变量的存储从而大幅节约训练显存。在训练完成后推理时将原本的参数矩阵与微调的参数矩阵相加既不影响原本的预训练参数也能实现微调效果——这种即插即用、随取随合的优点让 LoRA 成为大模型微调的热门方法。启动单卡 LoRA 命令如下约需 9G 显存python run_finetune.py ./config/qwen/lora_argument_0p5b.json对应的配置文件 llm/config/qwen/lora_argument_0p5b.json 同样是在 SFT 配置基础上增加了一行lora: true学习率取3e-04介于 SFT 与 Prefix Tuning 之间llm/config/qwen/lora_argument.json 为 7B 模型版本。从源码看llm/run_finetune.py#L593-L628 会通过get_lora_target_modules(model)自动收集模型中的线性层作为 LoRA 目标模块然后构造LoRAConfig默认r8、lora_alpha16即2 * lora_rank并包装为LoRAModel最后model.print_trainable_parameters()打印可训练参数占比。底层实现在 paddlenlp/peft/lora 与 paddlenlp/peft/lora/lora_model.pyLoRAConfig常用字段rA/B 矩阵秩默认 8、target_modules适配 LoRA 的模块名或正则 List、lora_alphaalpha 值、lora_dropoutdropout 比例、tensor_parallel_degree张量并行度须与 base model 保持一致、dtypeLoRA 矩阵参数类型LoRAModel关键方法mark_only_lora_as_trainable()冻结主干参数、save_pretrained()/from_pretrained()保存与载入权重、print_trainable_parameters()打印可训练参数统计保存时会生成lora_model_state.pdparams权重文件与lora_config.json配置文件详见 llm/docs/peft.md#L51-L69。3.2.3 更丰富的 PEFT 算法族除了 LoRA、Prefix TuningPaddleNLP 还支持LoKr、VeRA、MoRA、ReFT、rsLoRA、LoRA、PiSSA、MoSLoRA等多种精调算法以及DisLoRA、TARE等。这些算法由run_finetune.py中的create_peft_model()统一调度——lora/prefix_tuning/lokr/dislora/reft/vera/tare等开关对应不同分支llm/run_finetune.py#L563-L737对应实现分布在 paddlenlp/peft 的lora/、prefix/、lokr/、dislora/、reft/、vera/、tare/子目录中。从 llm/docs/finetune.md#L240-L331 的参数说明可以归纳出各算法的关键开关开关参数对应算法关键扩展参数rslorarsLoRA对缩放因子按秩调整与lora搭配使用lora_plus_scaleLoRAB 与 A 使用不同学习率设置 B 与 A 的学习率比例pissaPiSSA对主干做 SVD 初始化需lora: truelora_use_mixer/mixer_numMoSLoRA暂不支持张量模型并行use_moraMoRA高秩非低秩分解暂不支持张量模型并行veraVeRA共享随机基向量的低秩微调vera_rank默认 8lokrLoKrKronA 低秩分解变体lokr_rank默认 8disloraDisLoRA可消除的 LoRAdislora_rank默认 8reftReFT表征干预微调由 ReftArgument 控制见下neftuneNEFTune向 embedding 注入噪声提升微调效果neftune_noise_alpha默认 5.0ReFT 专项参数ReftArgument定义在 llm/utils/argument.py#L18-L26layers干预哪些层默认all、position干预哪些位置的 token默认f7l7、intervention_type干预网络类型默认LoreftIntervention、rank干预网络低秩默认 8、act_fn激活函数默认linear、add_bias是否加偏置默认 False、dropoutDropout rate默认 0.0。更多大模型精调使用文档、训练细节和各算法效果对比请参见 大模型精调教程PEFT 的完整 API 说明见 llm/docs/peft.md。4. 精调后的权重保存与合并训练结束后run_finetune.py会把模型、tokenizer、训练指标与训练状态保存到output_dir指定的目录llm/run_finetune.py#L517-L525。对于LoRA 等 PEFT 权重为了后续的模型压缩和静态图推理方便PaddleNLP 提供了参数合并脚本可以将 LoRA 参数合并回主干模型并保存完整权重python tools/merge_lora_params.py \ --model_name_or_path ./base_model \ --lora_path ./checkpoints/lora_ckpts \ --output_path ./checkpoints/lora_merge \ --device gpu \ --safe_serialization True脚本参数说明对应 llm/docs/finetune.md#L109-L116model_name_or_path必填主干模型参数路径lora_pathLoRA 参数和配置路径lora_model_state.pdparamslora_config.jsonoutput_path必填合并后权重保存路径device运行环境默认gpusafe_serialization是否保存为 safetensors 格式默认True。同类合并脚本还包括tools/merge_vera_params.pyVeRA、tools/merge_lokr_params.pyLoKr、tools/merge_dislora_params.pyDisLoRA用法一致。合并完成后即可使用 llm/predict/predictor.py 等推理入口进行动态图预测。5. 进阶实践建议与常见坑位结合 llm/docs/finetune.md 与源码实现给出以下可直接落地的实践建议提升训练效率将zero_padding与greedy_zero_padding同时设为TrueZero Padding 数据流可减少 Padding 冗余计算、大幅提升有效 Token 计算效率。此时建议per_device_train_batch_size1用gradient_accumulation_steps控制 batch size并适当调整max_length。注意eval_with_do_generation为 True 时评估过程不支持 Zero Paddingllm/docs/finetune.md#L273。注意力加速将use_flash_attention设为True使用 FlashAttention在其基础上把flash_mask设为True使用 FlashMask需要同时开启 zero padding 与 flash attention否则脚本会自动开启见 llm/run_finetune.py#L267-L270且仅支持 DeepSeekV2/V3、Llama、Qwen2/Qwen2Moe 等系列模型。混合精度选择0.5B 小模型用fp16 fp16_opt_levelO2即可7B 及以上推荐bf16BF16 动态范围更大训练更稳定。O2 级别下若未指定fp16或bf16会直接报错llm/run_finetune.py#L158-L164。LoRA 提速技巧use_quick_lora可加速 LoRA 训练lora_alpha默认取2 * lora_rankrslora开启时按 rsLoRA 规则调整。LoRA 策略默认应用在所有 Linear 层。主干模型量化 LoRA可通过weight_quantize_algo如weight_only_int4、weight_only_int8、nf4、fp4将主干模型量化到低比特搭配 LoRA 形成 QLoRA 训练在显存受限时是可行方案llm/docs/finetune.md#L94。并行策略SFT 与 LoRA 均支持 4D 并行tensor_parallel_degree、pipeline_parallel_degree、sharding_parallel_degree、sharding可扩展至单机 LoRA 微调千亿模型但 MoSLoRA、LinChain、MoRA、VeRA、LoKr、DisLoRA、ReFT 等算法暂不支持张量模型并行Prefix Tuning 不支持流水线并行配置前需确认算法限制。LoRA 精度注意LoRA 模式下目前不支持开启sharding_stage1_overlap优化llm/run_finetune.py#L594-L597。6. 完整学习路径从入门到进阶围绕精调主题本仓库还提供了完整的配套资料建议按以下顺序深入本文入门实操本指南对应的原文为 docs/zh/llm/docs/finetune_tutorial.md同步在 Ai Studio 项目9169303上开放了在线体验环境精调完整文档llm/docs/finetune.md含全量精调、LoRA/QLoRA、Prefix Tuning、VeRA、LoKr、DisLoRA、ReFT 的完整启动命令与全部参数说明PEFT API 详解llm/docs/peft.mdLoRAConfig/LoRAModel/PrefixConfig/PrefixModelForCausalLM 的类与函数说明算法原理总览llm/docs/algorithm_overview.mdLoRA、PiSSA、rsLoRA、NEFTune、VeRA、MoRA、ReFT、MoSLoRA 等算法原理配置文件样板Qwen 系配置见 llm/config/qwenLlama 系配置见 llm/config/llama含lora_argument.json、qlora_argument.json、pt_argument.json、vera_argument.json、lokr_argument.json、dislora_argument.json、reft_argument.json等源码入口精调主脚本 llm/run_finetune.py、参数定义 llm/utils/argument.py、PEFT 实现 paddlenlp/peft。环境要求运行精调脚本需要 PaddlePaddle 3.0-beta 及以上、PaddleNLP 3.0.0b3 及以上run_finetune.py启动时也会校验 paddlenlp 版本是否 ≥ 3.0.0b3llm/run_finetune.py#L103-L110。建议在配置好对应版本环境后先跑通 0.5B 的 SFT / Prefix Tuning / LoRA 三个示例再平滑迁移到 7B 及以上模型与多卡训练。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP 大模型微调实战指南从全参数 SFT 到 LoRA/QLoRA 与多种 PEFT 策略PaddleNLP 大模型微调实战指南从全参数 SFT 到 LoRA/QLoRA 与多种 PEFT 策略 导读 本文基于 PaddleNLP 官方微调文档系人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP高效精调完全指南SFT、Prefix Tuning、LoKr、ReFT等8种PEFT技术选型清单PaddleNLP高效精调完全指南SFT、Prefix Tuning、LoKr、ReFT等8种PEFT技术选型清单 PaddleNLP 是飞桨PaddleP人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP PEFT 实战指南使用 LoRA 与 Prefix-Tuning 进行大模型低参数微调PaddleNLP PEFT 实战指南使用 LoRA 与 Prefix Tuning 进行大模型低参数微调 导读 本文聚焦 PaddleNLP 提供的 PEF人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇英雄联盟Akari助手你的智能游戏管家让上分变得如此简单下一篇5分钟掌握LCU API集成英雄联盟客户端工具集的架构革命指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
电动车租赁会员管理系统设计与实现:数据库、并发与计费全解析 简介:电动车租赁会员管理系统是一套面向高校计算机相关专业毕业设计、课程设计与项目实训的完整项目资料,覆盖会员管理、租赁业务、车辆信息、订单结算等核心模块,适合从入门到进阶的开发者参考学习。资源包内含源码、数据库设计、项目说明与… · 2026/9/25 10:15:29
基于广义Benders分解法的综合能源系统规划优化与Matlab实现 做综合能源系统优化规划的朋友应该都有共鸣——模型写起来容易,算起来要命。一个稍微完整的园区级综合能源系统,设备七八个起步,加上0-1投建变量、连续运行变量、多能流耦合约束,问题规模动辄几千个约束、上万个变量。直接扔给Gur… · 2026/9/25 10:15:29
五级联动SQL设计:主外键约束与层级数据一致性实践 简介:本资源是一套面向数据库开发者与后端工程师的三级四级五级行政区域联动SQL解决方案,聚焦于地理层级数据建模与动态查询实现,解决多级下拉选择、跨表关联查询及数据完整性保障等典型业务场景问题。压缩包共25个文件,含3个核心… · 2026/9/25 10:15:23
高防IP防护链路拆解:从流量清洗到智能调度 很多人第一次接触高防IP,下意识会觉得这是一台“特别能扛打的大带宽服务器”。这个理解不算错,但只看到了结果,没看到过程。一个真正扛得住上百Gbps攻击的高防IP,背后其实是流量检测、流量牵引、清洗处置、回源转发、智能调度整套… · 2026/9/25 11:39:08
Themida/WinLicense脱壳实战:OEP定位与IAT修复工具链 简介:该资源为 Themida/WinLicense V1.8.X-V2.X 的专用脱壳工具包,专注解决加壳软件在授权校验、反调试及代码虚拟化方面的保护问题,可辅助用户高效去除壳层并还原可用分析代码,主要面向软件逆向工程师、安全分析人员及有一定调试… · 2026/9/25 11:39:02
Photoshop改尺寸不糊指南:图像大小、画布大小、裁剪与导出全解析 在修图这件事上,尺寸调整看似是最基础的操作,但我见过太多人栽在这一步。有人把手机拍的40003000照片直接拖进电商详情页模板,结果主体糊成一团;有人为了发朋友圈把图缩到800像素宽,回头想打印时发现原图已经覆盖保存&… · 2026/9/25 11:38:56
微信PC多开防撤回技术原理深度解析 1. 这个“多开防撤回版”到底是什么东西?先说清楚它不是什么最近在各种技术论坛、软件分享站和群文件里,频繁刷到“微信最新PC版 v4.1.15.09 多开防撤回版”这类标题。很多人第一反应是:终于能像QQ一样开多个微信窗口了?还能看到别… · 2026/9/25 11:38:56
Kali Linux WiFi渗透实战:从监听模式到握手包破解 说到 Kali,很多新手的第一个反应就是“这系统挺牛,好像能搞 WiFi 密码”。我在网络安全这条路上走了差不多十年,工具越用越多,但每次带新人入门,我都会先把这句话说清楚:Kali 本身只是一把工具,… · 2026/9/25 11:38:56
sinon sandbox.stub() 完全指南:非函数属性 Stubbing 与自动恢复 测试开发工具 【免费下载链接】sinon Test spies, stubs and mocks for JavaScript. 项目地址: https://gitcode.com/gh_mirrors/si/sinon 点击查看 免费下载 本文围绕 Sinon 沙箱(Sandbox)API 中的 sandbox.stub() 方法展开,讲解… · 2026/9/25 11:38:49
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37