Arganzheng's Blog

stay hungry, stay foolish

LoRA 专题(03):工程:adapter 文件、合并、多 LoRA 服务与参考模型

LoRA 03: In Production — Adapter Files, Merging, Multi-LoRA Serving and the Free Reference Model

更新 @2026-09-30:实验用 peft 0.21.1、transformers 5.17.0、bitsandbytes 0.50.2、PyTorch 2.14(CPU),模型 Qwen2.5-0.5B,adapter 是第二篇训出的 r16_all(\(r = 16\) 全部线性层)与 r16_attn(\(r = 16\) 只挂 attention)。配套脚本 ai-learning-labs/lora/03_deploy.py(子实验 files / merge / quant / multi / tokens)。 前两篇回答了”为什么”与”怎么配”,训出来的东西是一个目录:adapter_config.json 加一个几十 MB 的 adap...

LoRA 专题(02):选参:r、target_modules、alpha、lr 与 QLoRA / DoRA / PiSSA 各让模型变成什么

LoRA 02: Choosing r, target_modules, alpha and lr — and What QLoRA, DoRA and PiSSA Each Change

更新 @2026-09-30:实验用 peft 0.21.1、trl 1.14.1、transformers 5.17.0、bitsandbytes 0.50.2、PyTorch 2.14(CPU,8 线程),模型 Qwen2.5-0.5B(base),数据 HuggingFaceH4/no_robots。配套脚本 ai-learning-labs/lora/02_knobs.py,--list 列出全部配置名;正文给出每种配置的数字。 LoraConfig(r=16, lora_alpha=32, target_modules="all-linear", lora_dropout=0.05) 加 learning_rate=2e-4——这一行出现在几乎每...

LoRA 专题(01):低秩假设:为什么两个瘦矩阵够用,以及它省了哪几本账

LoRA 01: The Low-Rank Hypothesis — Why Two Thin Matrices Suffice, and Exactly What They Save

更新 @2026-09-30:实验用 peft 0.21.1、trl 1.14.1、transformers 5.17.0、PyTorch 2.14(CPU,8 线程),模型 Qwen2.5-0.5B(base),数据 no_robots。配套脚本 ai-learning-labs/lora/01_low_rank.py(子实验 hand / account / speed / init / spectrum);正文给出理解所需的全部数字。 LoRA 的全部内容是一句话:冻结 \(W\),只训一对瘦矩阵 \(B\)、\(A\),让 \(W' = W + \frac{\alpha}{r} BA\)。这一句里有三个不显然的地方:为什么改动可以只有秩 \(r\)...

LoRA 专题:SFT 的默认微调方式,从低秩假设到多租户服务(总纲)

LoRA, the Default Way to Fine-Tune: From the Low-Rank Hypothesis to Multi-Tenant Serving — Series Overview

更新 @2026-09-30:本系列的实验用 peft 0.21.1、trl 1.14.1、transformers 5.17.0、bitsandbytes 0.50.2、PyTorch 2.14(CPU),模型是本地缓存的 Qwen2.5-0.5B,数据是 HuggingFaceH4/no_robots。文中的参数名(r、lora_alpha、target_modules、use_rslora、init_lora_weights……)以这组版本为准;LoRA 的数学与账目不随版本变。 内容简介 《LoRA 专题》是一组共三篇正文加一篇总结的系列文章,是《AI 算法工程师学习地图》 L5 后训练层的专题篇。LoRA(Low-Rank Adaptation...

读 Hugging Face 源码(05):系列总结与通关自测

Reading the Hugging Face Source: Series Recap and Final Self-Test

四篇正文回答了一个问题:工具箱第五篇那六行代码,执行时各经过哪些文件的哪些函数。第一篇读模型的加载与一次前向,第二篇读 generate 的循环,第三篇读文本与数据两条流水线,第四篇读 LoRA 怎么挂上去与三种 loss 各在哪一行。本文把四篇压成一张「问题 → 文件 → 函数」的索引表,拎出贯穿五个库的四条设计线,再给一套自测。 读完这四篇,你应该能回答哪些问题?1 哪些文件名、函数名与数字必须能脱口而出?2 怎么判断自己是”读过”还是”掌握”了?3 先把整个系列放在一张图上——箭头是调用或数据上的依赖,不是阅读顺序: %%{init: {"flowchart": {"wrappingWidth": 230}}}%% %% 图:四篇的依赖:03 造...

读 Hugging Face 源码(04):peft 与 trl——LoRA 怎么挂上去,SFT / DPO / GRPO 的 loss 各在哪一行

Inside peft and trl: get_peft_model, the LoRA Linear, SFT Labels and Packing, dpo_loss and GRPO Advantages

更新 @2026-09-30:本文对着 peft 0.21.0(tuners/lora/layer.py 2739 行、tuners/tuners_utils.py 2781 行)与 trl 1.13.0(trainer/sft_trainer.py 1927 行、dpo_trainer.py 1823 行、grpo_trainer.py 3497 行)读,配套脚本在 ai-learning-labs/hf-source-reading/,模型用本地缓存的 Qwen2.5-0.5B。trl 是 Hugging Face 几个库里改得最快的一个(一年三十多个版本,SFTTrainer 的数据契约改过数次),路径与名字以 1.13.0 为准,不引用行号;读别的版本...

读 Hugging Face 源码(03):tokenizers 与 datasets——从 messages 到 input_ids,从 Arrow 文件到 collate_fn

Inside tokenizers and datasets: the Rust Pipeline, Chat Templates, Arrow Tables, map and Fingerprints

更新 @2026-09-30:本文对着 tokenizers 0.23.2(Rust 库 + Python 绑定)、transformers 5.17.0 的 tokenization_utils_base.py / tokenization_utils_tokenizers.py / utils/chat_template_utils.py、datasets 5.0.1 的 arrow_dataset.py(7417 行)/ load.py / builder.py / iterable_dataset.py 读,配套脚本在 ai-learning-labs/hf-source-reading/,用本地缓存的 Qwen2.5-0.5B tokenizer 与...

读 Hugging Face 源码(02):generate——一次采样的完整调用链

Inside transformers, Part 2: generate, GenerationConfig, LogitsProcessors, StoppingCriteria and the Decode Loop

更新 @2026-09-30:本文对着 transformers 5.17.0 的 generation/ 目录读(utils.py 4250 行、logits_process.py 3222 行、stopping_criteria.py 643 行、configuration_utils.py 1892 行),配套脚本在 ai-learning-labs/hf-source-reading/,模型用本地缓存的 Qwen2.5-0.5B。路径与名字以该版本为准,不引用行号。 上一篇的前向在 logits 处结束:[B, T, 151936] 个分数。推理时接下来的每一件事——把最后一个位置的分数变成一个 token、把它拼回去、再前向一次——都在 mode...

读 Hugging Face 源码(01):transformers 模型侧——from_pretrained 怎么把三个文件变成 nn.Module,forward 怎么走到 loss

Inside transformers, Part 1: from_pretrained, the Decoder Stack, Attention Dispatch, KV Cache and the Loss

更新 @2026-09-30:本文对着 transformers 5.17.0(2026-09-09 发布)的源码读,配套脚本在 ai-learning-labs/hf-source-reading/,模型用本地缓存的 Qwen2.5-0.5B。文中的文件路径、类名、函数名以该版本为准,不引用行号;transformers 的目录结构改得很快,读别的版本时请以本地源码对照——找入口的方法不变。 工具箱第五篇用六行代码组装了一次 LoRA SFT,第一行就是 AutoModelForCausalLM.from_pretrained(name)。那一篇把它当黑盒:进去一个 Hub 名字,出来一个 nn.Module。这一篇把黑盒打开:这个函数怎么根据 conf...

读 Hugging Face 源码:从 from_pretrained 到 GRPO 的 loss(总纲)

Reading the Hugging Face Source: transformers, tokenizers, datasets, peft and trl, One Call Chain at a Time

更新 @2026-09-30:本系列对着 transformers 5.17.0(2026-09-09 发布)、tokenizers 0.23.2、datasets 5.0.1、peft 0.21.0、trl 1.13.0 的源码读,模型用本地缓存的 Qwen2.5-0.5B。文中的文件路径、类名、函数名以这组版本为准,不引用行号;读别的版本请以本地源码对照——找入口的方法不变。 内容简介 《读 Hugging Face 源码》是一组共四篇的系列文章,是《AI 算法工程师学习地图》 L4–L5 两层的深入篇。工具箱第五篇用六行代码组装了一次 LoRA SFT,并在末尾列了六个读源码的入口。本系列沿这六个入口,把源码读一遍。 它回答的问题是: A...

×