Q&A

  1. prompt 有没有设计好,比如选择题需要明确说明 输出结果为A/B
  2. 注意 reward hacking,现象是越训练 reward 越少
  3. 组内优势解决于零,num_generations 太小,奖励方差太小
  1. 领域/通用数据集配比
  2. 学习率怎么选择

CLIProxyAPI&大模型反代

引言
进入 vibe coding 时代之后,大模型 token 的消耗速度成指数上涨。对于普通开发者来说,不管是在官网购买 token 还是在国内中转站购买 token 价格都很难承担。为了能白嫖各种模型,我试过 chat2api、grok2api 等各种反代项目,不管风控强容易失效而且部署很麻烦。今天发现 CLIProxyAPI 之后确实是非常之好用,记录一下部署中遇到的若干问题。

CLIProxyAPI 是一个为CLI提供 OpenAI/Gemini/Claude/Codex 兼容 API 接口的代理服务器。使我们可以使用本地或多账户的CLI方式,通过任何与 OpenAI / Gemini /Claude 兼容的客户端和 SDK 进行访问。

LLM 清洗数据

Summary
从互联网获取的原始数据就像未经加工的矿石,其中真正有价值的"精矿"可能只占很小的比例。本章将深入探讨预训练数据清洗的三大核心技术:启发式过滤规则用于剔除低质量文档,大规模去重技术用于消除重复内容,隐私数据清洗用于保护用户信息。掌握这些技术后,读者将能够构建工业级的数据清洗流水线,将原始网页数据转化为高质量的预训练语料。

启发式过滤是数据清洗的第一步,它是一系列的 rule-based filter。通过这些固定的规则,可以快速筛选出明显低质量的文档。虽然这些规则看起来简单,但在实践中能够过滤掉大部分噪声数据,是性价比极高的清洗手段。

MedicalGPT 学习指北

Summary

Minimind 和强化学习暂时告一段落了,现在准备开始一个新的项目 “MedicalGPT”。这个项目也是 Github 上的一个开源项目,实现了包括增量预训练、有监督微调、RLHF 和 DPO。这个项目中我主要会学习其中的一些 trick、数据构造思路、训练评估的完整流程,总体如下:

Dataset 预处理

Summary
这一篇笔记主要记录一下 Huggingface 库提供的 Trainer 接受的数据集格式,以及 Packing 和 Padding 两种对其策略。
Padding Packing
思路 每条样本补齐到固定长度 多条样本拼接填满 block
计算效率 低(大量无效 token) 高(几乎无浪费)
实现复杂度 简单 较复杂
适用场景 样本长度均匀 / finetune Pretrain 主流做法

Pretrain 几乎不用纯 padding,但有时在 eval 或 SFT 阶段使用。它的思路就是用 pad_token 把每一个 sample 都补齐到相同的长度,因为不同长度的 sample 无法组成一个张量。但它存在的问题就是:为了补齐到相同长度,我们不得已加入无意义的 pad_token,可能导致某些 sample 的长度 10 → 512 的情况,浪费大量算力。

组合数学

  1. 若有 nn 个笼子和 n+1n+1 只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少 22 只鸽子。
  2. 一堆实数 a1,a2,,ana_1,a_2,\ldots,a_n 若他们的平均值大于 xx,那么至少存在一个 ai>xa_i>x

任意 n+1n+1 个整数中,必存在两个不同的数 aa,bb,使得 nabn\mid a - b

vLLM 部署大模型

大模型推理有多种方式比如

  • 最基础的 HuggingFace Transformers
  • TGI
  • vLLM
  • Triton + TensorRT-LLM

其中,热度最高的应该就是 vLLM,性能好的同时使用也非常简单,上一次分析了 vLLM 如何实现这么高的性能,这次记录一下如何使用 vLLM 来启动大模型推理服务。

Flash Attention

image.png

GPU 存储分为芯片内和芯片外,芯片内的 SRAM 用于储存需要计算的临时数据,显存 HBM 在芯片外:

  • HBM:位于 GPU 芯片外,就是我们所说的显存,类似于 CPU 的 DRAM,储存模型训练和推理时的参数,容量大,例如 A100 一般为 40G 或 80G。
  • SRAM:位于 GPU 芯片上,仅用于存储 CUDA Kernel 计算时所需的临时数据,容量极限一般在 20MB
  • CUDA Kernel:GPU 上执行并行的计算函数,是实现并行计算任务的基本单元

image.png

vLLM 原理

vLLM 是目前最受欢迎的开源 LLM 推理与服务引擎之一,它以 PagedAttention 为核心创新,彻底解决了传统 LLM Inference 中 KV Cache 内存碎片化的问题,让 throughput 提升 2~24×,同时内存利用率接近 100%。

LLM 中的强化学习:DAPO

Summary
DAPO 全称为 Decoupled Clip and Dynamic Sampling Policy Optimization,解耦裁剪与动态采样策略优化。该算法在 GRPO 基础上进行了重大改进。GRPO 是 PPO 的简化版,但在长 CoT 场景下容易出现熵崩塌、奖励噪声、训练不稳定等问题,DAPO 通过四个核心技术解决了这些问题。
JDAPO(θ)=E[1oiitmin(ri,t(θ)A^i,t, clip(ri,t(θ),1ϵlow,1+ϵhigh)A^i,t)] J_{\text{DAPO}}(\theta) = \mathbb{E} \left[ \frac{1}{\sum |o_i|} \sum_i \sum_t \min \left( r_{i,t}(\theta) \hat{A}_{i,t},\ \text{clip}(r_{i,t}(\theta), 1-\epsilon_{\text{low}}, 1+\epsilon_{\text{high}}) \hat{A}_{i,t} \right) \right]

image.png