LLM Inference
参考https://huggingface.co/blog/tngtech/llm-performance-prefill-decode-concurrent-requests流程prefill decodeprefillcomputing the first output token把用户输入的整个 prompt 一次性喂给模型。例如Explain why RAG can reduce hallucination假设 token 数是 10 个那么模型会并行处理这 10 个 token计算每一层的 hidden states并生成对应的KV cache。特点高度并行主要受 **计算能力FLOPs**影响输入越长Prefill 越重可以认为是在做「我先把你说的话全部理解一遍」KV cache推理生成时每次生成一个 token不可能把所有历史重新算一遍所以需要把历史 token 的 Key 和 Value 保存下来下次生成复用。为啥 prefill 阶段从输入到第一个token输出慢 For the very first output token, we start with an initially empty KV cache and need to calculate as many sets ofkeyandvaluevectors as there are tokens in the input prompt.decodecomputing any later output tokenPrefill 完之后模型开始一个 token 一个 token 地生成答案。比如Explain → why → RAG → can → reduce → hallucination → ...autoregressive generation每生成一个 token把新 token 输入模型利用之前保存的KV cache预测下一个 token把新的 K/V 加进 cache重复特点不能像 Prefill 那样把所有生成 token 完全并行处理cannot be parallelized每一步通常只处理一个新 token很容易受到memory bandwidth / KV cache / latency限制生成长度越长Decode 越重Data Process某种意义上也可以理解为natural language 上下文 → hidden state → logits → 下一个 tokenhidden state模型在当前这一步对“目前已经看到的内容”的内部表示是模型在网络内部各层产生的中间表示向量。它不是未来 token也不是单词本身而是模型在每一层中产生的高维向量可以理解为模型此刻的“压缩理解”或“中间特征”。在 Transformer 中假设当前序列长度为 (T)hidden dimension 为 (d)那么第 (l) 层的 hidden states 可以表示为其中(T)当前序列长度(d)每个 token 的向量维度比如 4096每个 token 在每一层都有一个长度为 (d) 的 hidden state例如输入[\text{The cat sat}]如果分成 3 个 token那么某一层会得到“The” → 一个 4096 维向量“cat” → 一个 4096 维向量“sat” → 一个 4096 维向量这 3 个向量合起来就是这一层的 hidden states。这些向量本身不是英文单词而是模型内部的数值表示编码了语义、上下文关系、句法角色以及下一步生成的可能性等信息。生成时 hidden state 怎么产生自回归模型一次只预测下一个 token。当模型要生成第 (x) 个 token 时它已经看到[\text{输入} \text{前面已生成的 } x-1 \text{ 个 token}]模型会基于这些内容做 forward并在每一层产生 hidden states。然后它只使用最后一个位置的 hidden state来预测第 (x) 个 token。还没有生成出来的 token并没有对应的 hidden state因为模型还没有看到它们。在自回归生成里为什么只关心“最后一个位置”的 hidden stateGPT 这类自回归模型的目标是[P(x_t \mid x_1, x_2, ..., x_{t-1})]也就是说模型根据当前前缀预测下一个 token。因此当当前上下文长度为 (t-1) 时最后一个位置的 hidden state 就包含了模型对整个当前上下文的总结所以用它来预测第 (t) 个 token。LM headLM Head 是模型最后的输出层负责把最后一个 hidden state 转换成 logits[\text{logits} Wh b]其中 (h) 是最后一个位置的 hidden state。logits 表示词表中每个 token 作为下一个 token 的分数。模型再通过 softmax 或采样策略从中选出下一个 token。Metrics因为是并行解码的所以总token 一致的情况下prefill 阶段解码比decode 阶段更快so input api 比 output api 要便宜TTFT (Time to first token)latency of the prefill phaseTPOT (time per output token)latency of a single decode steptoken throughputtokens per second, summed up over all concurrent requests* only used for non-interactive situationsResource Utilizationprefill phase is very GPU compute-intensivedecode limited by the GPU memory bandwidth (GPU utilization can be increased by batch processingof multiple requests)并发少时一次读取权重只为少数请求各生成一个 tokenGPU 的计算能力没用满。多加入几个请求相当于让同一次权重读取服务更多 token所以总吞吐量可能近似随并发数增长。这时主要受显存读取速度限制即memory-bound。并发足够多时每一步要计算的 token 数也多了GPU 算力逐渐用满。再加入请求GPU 已经没法每秒完成更多计算所以总 token/s 大致不再增加。这时进入compute-bound区域。*注意这里的 throughput 是所有请求合计每秒生成的 token 数Concurrent Processing 并发处理static batching(1) You start with an empty batch, (2) you fill the batch with as many items as are waiting and as fit into the batch, (3) you process the batch until all batched items are finished, and (4) you repeat the procedure with a new empty batch.the next waiting request can only start once the longest batched request has been completed.Static batching optimizes thetime per output token however longtime to first tokenEven if some short requests finish early, the next queuing request has to wait for the longest decode in the batch to finish before its prefill can begin.continuous batchingany completed request is immediately removed from the batch, and the batch space is filled with the next request in line.策略新请求的 prefill对已有请求的影响Prefill-First优先一次处理完整个 prompt长 prompt 会让已有请求的流式输出出现明显停顿Chunked Prefill把 prompt 分成多个 chunk分多轮处理每处理完一块就有机会继续生成已有请求的 token输出通常更平稳Prefill-FirstChunked Prefill参数GPU 相关CUDA_VISIBLE_DEVICES指定当前程序能看到哪些 GPU。CUDA_VISIBLE_DEVICES0,1,2,3 python train.py表示使用物理第 0、1、2、3 张卡。多卡/分布式训练WORLD_SIZE总进程数通常等于使用的 GPU 数量。例如 4 卡训练WORLD_SIZE4RANK当前进程在所有进程中的全局编号。例如 4 卡训练中进程编号可能是RANK 0, 1, 2, 3LOCAL_RANK当前进程在本机上的 GPU 编号。例如单机 4 卡训练时LOCAL_RANK 0, 1, 2, 3在代码中常见写法torch.cuda.set_device(local_rank)数据加载相关NUM_WORKERSDataLoader 用多少个子进程加载数据。DataLoader(dataset, batch_size32, num_workers4)含义num_workers 越大数据加载并行度越高 但太大可能占用过多 CPU / 内存。常见设置小数据集0 / 2 普通训练4 / 8 大规模数据8 / 16num_workers越大越好吗- noCPU 占满内存占用变高进程切换开销变大甚至 DataLoader 卡住怎么判断它是不是太小训练时可以观察 GPU 利用率。如果你看到GPU 利用率一会儿 0%一会儿 90% 显存占着但是 GPU 经常不干活很可能是数据加载跟不上。这时候可以尝试增大BATCH_SIZE每次送进模型的样本数量。BATCH_SIZE32batch size 越大显存占用越高但训练通常更稳定。GRADIENT_ACCUMULATION_STEPS梯度累积步数。GRADIENT_ACCUMULATION_STEPS4如果显存不够不能直接开大 batch size就可以用梯度累积模拟更大的 batch。有效 batch size 通常是effective batch size batch_size × gradient_accumulation_steps × GPU数量例如batch_size 2 gradient_accumulation_steps 8 GPU数量 4 effective batch size 2 × 8 × 4 64模型和缓存路径相关HF_HOMEHugging Face 的总缓存目录。HF_HOME/mnt/data/huggingface模型、tokenizer、dataset 等缓存都会放到这个目录下。TRANSFORMERS_CACHEtransformers 模型缓存目录。TRANSFORMERS_CACHE/mnt/data/hf_modelsHF_DATASETS_CACHEdatasets 数据集缓存目录。HF_DATASETS_CACHE/mnt/data/hf_datasets如果服务器默认 home 目录空间很小就经常需要把这些缓存路径改到大磁盘上。实验记录相关WANDB_PROJECT设置 wandb 项目名。WANDB_PROJECTmy_projectWANDB_MODE控制是否启用 wandb。WANDB_MODEoffline常见取值online正常上传 offline离线记录 disabled关闭 wandb常用训练超参数LEARNING_RATE学习率控制参数更新步长。LEARNING_RATE2e-5学习率太大容易训练不稳定太小收敛慢。EPOCHS完整遍历训练集的次数。EPOCHS3MAX_SEQ_LEN最大输入长度。MAX_SEQ_LEN4096LLM 训练 / 推理里非常重要。长度越大显存和计算成本越高。SEED随机种子用于复现实验。SEED42PRECISION训练精度。常见设置fp32最稳定但最慢、最耗显存 fp16更快、更省显存但可能不稳定 bf16更稳定的混合精度A100/A800/H100 常用例如PRECISIONbf16

相关新闻

Nano ID 6.0 变更日志深度解读:从版本演进看这款 118 字节安全 ID 生成器的实现哲学

Nano ID 6.0 变更日志深度解读:从版本演进看这款 118 字节安全 ID 生成器的实现哲学

开发工具 【免费下载链接】nanoid A tiny (118 bytes), secure, URL-friendly, unique string ID generator for JavaScript 项目地址: https://gitcode.com/gh_mirrors/na/nanoid 点击查看 免费下载 导读:本文以 Nano ID 项目 CHANGELOG.md 为骨架&…

2026/9/30 6:52:05 阅读更多 →
AImer - 视觉与游戏自瞄

AImer - 视觉与游戏自瞄

AImer - 基于计算机视觉目标检测的辅助瞄准学习项目 代码仓库:https://github.com/HeHaoyang1124/AImer 注意:代码已开源,一切以上述仓库为主,博客上任何生成的“可执行项目”均不符实 声明 本项目一切源码仅供学习使用&#xff…

2026/9/30 6:52:05 阅读更多 →
SQL Server 学习笔记(详细整理版)

SQL Server 学习笔记(详细整理版)

涵盖:数据库基础概念、数据类型、五大约束、DDL 库表结构操作、DML 增删改查、多表 JOIN、分组聚合、分页、子查询、结果集合并,附带练习案例与避坑要点一、数据库基础必学概念核心学习清单:数据库、架构 (schema)、表、字段、数据类型、约束…

2026/9/30 6:52:05 阅读更多 →

最新新闻

系统参数配置实战:从内核参数到配置管理一次讲透

系统参数配置实战:从内核参数到配置管理一次讲透

1. 别把配置当杂活:先想清楚参数从哪里来 做运维和开发这些年,我最大的感受就是:系统参数配置这个事,看起来就是改几个数字、加几行配置,真正踩过坑的人才知道,它其实是整个系统稳定性的地基。很多线上事故…

2026/9/30 7:41:25 阅读更多 →
CSS Grid网格布局实战:从网格线到二维页面骨架的原理与避坑指南

CSS Grid网格布局实战:从网格线到二维页面骨架的原理与避坑指南

从table布局一路折腾到float、flex,我做前端这些年,布局方案换了一茬又一茬。第一次看到display: grid在页面上铺开一张规整的网格时,说实话有点恍惚——这就是我折腾了多少个通宵想要的东西。CSS Grid网格布局,现在大家习惯直接叫…

2026/9/30 7:41:25 阅读更多 →
纯CSS3实现双半圆进度条:从渐变到遮罩的完整实战

纯CSS3实现双半圆进度条:从渐变到遮罩的完整实战

1. 双半圆进度条到底是什么,为什么2026年还要拿它当考题 先给没做过这个组件的朋友描述一下画面:页面顶部是一块240像素宽的半圆盘,弧线从左侧9点钟方向起步,像转速表一样沿着上沿往右爬,爬到右侧3点钟方向就是100%。有…

2026/9/30 7:41:25 阅读更多 →
Redis内存管理:过期策略与淘汰策略全面解析及实战避坑

Redis内存管理:过期策略与淘汰策略全面解析及实战避坑

1. 先把两个策略的边界划清楚:一个管过期,一个管满员 很多人在刚接触Redis的时候,很容易把“过期策略”和“淘汰策略”搅在一起。面试时候被问到“Redis内存满了会怎么样”,经常有同学张口就说“把过期的key删掉”,这个…

2026/9/30 7:41:25 阅读更多 →
CSS网页布局实战手册:从文档流到Flex/Grid的完整指南

CSS网页布局实战手册:从文档流到Flex/Grid的完整指南

做前端这些年,被问得最多的永远是同一个问题——CSS 网页布局到底怎么学?明明浮动、定位、flex、grid 每条都背得下来,真拿到一张设计稿,还是不知道用什么、怎么排、为什么一刷新就错位。这篇文章我打算把布局这整条线从头捋一遍&…

2026/9/30 7:41:25 阅读更多 →
银河麒麟V10SP1重装怎么保住数据盘?UUID与fstab挂载全流程

银河麒麟V10SP1重装怎么保住数据盘?UUID与fstab挂载全流程

简介:银河麒麟桌面操作系统V10SP1重装教程,重点解决保留“数据盘”不丢失的难题。内容面向具备一定Linux操作基础的技术人员与高级用户,适用于需在系统升级或重装时保护个人数据的场景。文档以PDF形式提供,共1个文件,压…

2026/9/30 7:40:24 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →