技术

Agent与软件开发 提升Agent能力——上下文工程 llm评测 rl微调 分布式Agent与A2A deepresearch梳理 mcp学习 SSE 和 WebSocket 是什么? AutoGen学习 Python ioc 从0到1构建一个db 上下文记忆 agentic rag 图数据库的一些考量 推理LLM梳理 Agent实践 LLM预训练 向量数据库的一些考量 fastapi+sqlalchemy进行项目开发 LLM微调实践 Python协程实现 Agent Functon Calling LLamaIndex入门 另一种微服务架构Multi-Agent Python虚拟机 LangGraph工作流编排 Python实践 增强型 LLM——Agent 激发LLM涌现——提示工程 LLM微调理论 大佬谈LLM LLM外挂知识库 LLMOps 多模态LLM Python一些比较有意思的库 Transformers源码学习 LangChain源码学习 通用分布式计算引擎Ray Python并发 go依赖注入 go collection gc的基本原理 golang性能分析及优化 数据湖 高性能计算与存储 Linux2.1.13网络源代码学习 《大数据经典论文解读》 三驾马车学习 Spark 内存管理及调优 Yarn学习 从Spark部署模式开始讲源码分析 容器狂占内存资源怎么办? 多角度理解一致性 golang io使用及优化模式 Flink学习 c++学习 学习ebpf go设计哲学 ceph学习 学习mesh kvm虚拟化 学习MQ go编译器以及defer实现 学习go 为什么要有堆栈 汇编语言 计算机组成原理 运行时和库 Prometheus client mysql 事务 mysql 事务的隔离级别 mysql 索引 坏味道 学习分布式 学习网络 学习Linux go堆内存分配 golang 系统调用与阻塞处理 Goroutine 调度过程 重新认识cpu mosn有的没的 负载均衡泛谈 单元测试的新解读 《Redis核心技术与实现》笔记 《Prometheus监控实战》笔记 Prometheus 告警学习 calico源码分析 对容器云平台的理解 Prometheus 源码分析 并发的成本 基础设施优化 hashicorp raft源码学习 docker 架构 mosn细节 与微服务框架整合 Java动态代理 编程范式 并发通信模型 《网络是怎样连接的》笔记 go channel codereview gc分析 jvm 线程实现 go打包机制 go interface及反射 如何学习Kubernetes 《编译原理之美》笔记——后端部分 《编译原理之美》笔记——前端部分 Pilot MCP协议分析 go gc 内存管理玩法汇总 软件机制 istio流量管理 Pilot源码分析 golang io 学习Spring mosn源码浅析 MOSN简介 《datacenter as a computer》笔记 学习JVM Tomcat源码分析 Linux可观测性 学习存储 学计算 Gotty源码分析 kubernetes operator kaggle泰坦尼克问题实践 kubernetes扩缩容 神经网络模型优化 直觉上理解深度学习 如何学习机器学习 TIDB源码分析 什么是云原生 Alibaba Java诊断工具Arthas TIDB存储——TIKV 《Apache Kafka源码分析》——简介 netty中的线程池 guava cache 源码分析 Springboot 启动过程分析 Spring 创建Bean的年代变迁 Linux内存管理 自定义CNI IPAM 共识算法 spring redis 源码分析 kafka实践 spring kafka 源码分析 Linux进程调度 让kafka支持优先级队列 Codis源码分析 Redis源码分析 C语言学习 《趣谈Linux操作系统》笔记 docker和k8s安全访问机制 jvm crash分析 Prometheus 学习 Kubernetes监控 Kubernetes 控制器模型 容器日志采集 容器狂占资源怎么办? Kubernetes资源调度——scheduler 时序性数据库介绍及对比 influxdb入门 maven的基本概念 《Apache Kafka源码分析》——server Kubernetes类型系统 源码分析体会 《数据结构与算法之美》——算法新解 Kubernetes源码分析——controller mananger Kubernetes源码分析——apiserver Kubernetes源码分析——kubelet Kubernetes介绍 ansible学习 Kubernetes源码分析——从kubectl开始 jib源码分析之Step实现 线程排队 jib源码分析之细节 跨主机容器通信 jib源码分析及应用 为容器选择一个合适的entrypoint kubernetes yaml配置 《持续交付36讲》笔记 mybatis学习 程序猿应该知道的 无锁数据结构和算法 CNI——容器网络是如何打通的 为什么很多业务程序猿觉得数据结构和算法没用? 串一串一致性协议 当我在说PaaS时,我在说什么 《数据结构与算法之美》——数据结构笔记 PouchContainer技术分享体会 harbor学习 用groovy 来动态化你的代码 精简代码的利器——lombok 学习 《深入剖析kubernetes》笔记 编程语言那些事儿 rxjava3——背压 rxjava2——线程切换 spring cloud 初识 《深入拆解java 虚拟机》笔记 《how tomcat works》笔记 hystrix 学习 rxjava1——概念 Redis 学习 TIDB 学习 如何分发计算 Storm 学习 AQS1——论文学习 Unsafe Spark Stream 学习 linux vfs轮廓 《自己动手写docker》笔记 java8 实践 中本聪比特币白皮书 细读 区块链泛谈 比特币 大杂烩 总纲——如何学习分布式系统 hbase 泛谈 forkjoin 泛谈 看不见摸不着的cdn是啥 《jdk8 in action》笔记 程序猿视角看网络 bgp初识 calico学习 AQS——粗略的代码分析 我们能用反射做什么 web 跨域问题 《clean code》笔记 《Elasticsearch权威指南》笔记 mockito简介及源码分析 2017软件开发小结—— 从做功能到做系统 《Apache Kafka源码分析》——clients dns隐藏的一个坑 《mysql技术内幕》笔记 log4j学习 为什么netty比较难懂? 递归、回溯、动态规划 apollo client源码分析及看待面向对象设计 学习并发 docker运行java项目的常见问题 OpenTSDB 入门 spring事务小结 分布式事务 javascript应用在哪里 《netty in action》读书笔记 netty对http2协议的解析 ssl证书是什么东西 http那些事 苹果APNs推送框架pushy apple 推送那些事儿 编写java框架的几大利器 java内存模型和jvm内存布局 java exception Linux IO学习 netty内存管理 测试环境docker化实践 netty在框架中的使用套路 Nginx简单使用 《Linux内核设计的艺术》小结 Go并发机制及语言层工具 Linux网络源代码学习——数据包的发送与接收 《docker源码分析》小结 docker namespace和cgroup zookeeper三重奏 数据库的一些知识 Spark 泛谈 链式处理的那些套路 netty回顾 Thrift基本原理与实践(二) Thrift基本原理与实践(一) 回调 异步执行抽象——Executor与Future Docker0.1.0源码分析 java gc Jedis源码分析 深度学习泛谈 Linux网络命令操作 JTA与TCC 换个角度看待设计模式 Scala初识 向Hadoop学习NIO的使用 以新的角度看数据结构 并发控制相关的硬件与内核支持 systemd 简介 quartz 源码分析 基于docker搭建测试环境(二) spring aop 实现原理简述 自己动手写spring(八) 支持AOP 自己动手写spring(七) 类结构设计调整 分析log日志 自己动手写spring(六) 支持FactoryBean 自己动手写spring(九) 总结 自己动手写spring(五) bean的生命周期管理 自己动手写spring(四) 整合xml与注解方式 自己动手写spring(三) 支持注解方式 自己动手写spring(二) 创建一个bean工厂 自己动手写spring(一) 使用digester varnish 简单使用 关于docker image的那点事儿 基于docker搭建测试环境 分布式配置系统 JVM执行 git maven/ant/gradle/make使用 再看tcp kv系统 java nio的多线程扩展 《Concurrency Models》笔记 回头看Spring IOC IntelliJ IDEA使用 Java泛型 vagrant 使用 Go常用的一些库 Python初学 Goroutine 调度模型 虚拟网络 《程序员的自我修养》小结 Kubernetes存储 访问Kubernetes上的Service Kubernetes副本管理 Kubernetes pod 组件 Go基础 JVM类加载 硬币和扑克牌问题 LRU实现 virtualbox 使用 ThreadLocal小结 docker快速入门

架构

大模型infra OpenTelemetry及生态 大模型可观测性 grpo演进 rlhf演进 agent框架 reward演进 大模型RLHF框架 rl框架 GPU与CUDA RL闲谈 MCTS与LLM rl从Policy Gradient(策略梯度)到PPO到GRPO 从Transformer到DeepSeek bert rerank微调 大模型推理tips RAG向量检索与微调 dddfirework源码分析 RAG与知识图谱 大模型推理服务框架vLLM 大模型推理服务框架 模型服务化(未完成) 大模型Post-Training 大模型训练 大模型推理 从Attention到Transformer k8s设备管理 ddd从理念到代码 如何应用LLM 小鼠如何驾驭大象(LLM)? 多类型负载协调员Koordinator controller-runtime细节分析 finops学习 kubevela多集群 kubevela中cue的应用 基于k8s的工作流 kubevela源码分析 容器和CPU那些事儿 数据集管理fluid 应用管理平台kubevela karmada支持crd 多集群管理 AutoML和AutoDL 特征平台 实时训练 分布式链路追踪 K8S YAML 资源清单管理方案 tensorflow原理——python层分析 如何学习tensorflow 数据并行——allreduce 数据并行——ps 推荐系统embedding原理及实践 机器学习中的python调用c 机器学习训练框架概述 tensornet源码分析 大模型训练和推理 X的生成——特征工程 tvm tensorflow原理——core层分析 模型演变 《深度学习推荐系统实战》笔记 keras 和 Estimator tensorflow分布式训练 分布式训练的一些问题 基于Volcano的弹性训练 图神经网络 pytorch弹性分布式训练 从混部到统一调度 从RNN到Attention pytorch分布式训练 CNN 《动手学深度学习》笔记 pytorch与线性回归 多活 volcano特性源码分析 推理服务 kubebuilder 学习 mpi 学习pytorch client-go学习 提高gpu 利用率 GPU与容器的结合 GPU入门 AI云平台梳理 tensorflow学习 tf-operator源码分析 k8s批处理调度/Job调度 喜马拉雅容器化实践 Kubernetes 实践 学习rpc BFF openkruise学习 可观察性和监控系统 基于Kubernetes选主及应用 《许式伟的架构课》笔记 Admission Controller 与 Admission Webhook 发布平台系统设计 k8s水平扩缩容 Scheduler如何给Node打分 Scheduler扩展 深入controller openkruise cloneset学习 controller-runtime源码分析 pv与pvc实现 csi学习 client-go informer源码分析 kubelet 组件分析 调度实践 Pod是如何被创建出来的? 《软件设计之美》笔记 mecha 架构学习 Kubernetes events学习及应用 CRI——kubelet与容器引擎之间的接口 资源调度泛谈 业务系统设计原则 grpc学习 元编程 以应用为中心 istio学习 下一代微服务Service Mesh 《实现领域驱动设计》笔记 概率论 serverless 泛谈 《架构整洁之道》笔记 处理复杂性 那些年追过的并发 服务器端编程 网络通信协议 架构大杂烩 如何学习架构 《反应式设计模式》笔记 项目的演化特点 反应式架构摸索 函数式编程的设计模式 服务化 ddd反模式——CRUD的败笔 研发效能平台 重新看面向对象设计 业务系统设计的一些体会 函数式编程 《左耳听风》笔记 业务程序猿眼中的微服务管理 DDD实践——CQRS 项目隔离——案例研究 《编程的本质》笔记 系统故障排查汇总及教训 平台支持类系统的几个点 代码腾挪的艺术 abtest 系统设计汇总 《从0开始学架构》笔记 初级权限系统设计 领域驱动理念 现有上传协议分析 移动网络下的文件上传要注意的几个问题 推送系统的几个基本问题 做配置中心要想好的几个基本问题 不同层面的异步 分层那些事儿 用户认证问题 资源的分配与回收——池 消息/任务队列

标签

k8s设备管理 多类型负载协调员Koordinator controller-runtime细节分析 finops学习 kubevela多集群 kubevela中cue的应用 基于k8s的工作流 kubevela源码分析 容器和CPU那些事儿 数据集管理fluid 应用管理平台kubevela karmada支持crd 多集群管理 K8S YAML 资源清单管理方案 从混部到统一调度 volcano特性源码分析 kubebuilder 学习 client-go学习 tf-operator源码分析 k8s批处理调度/Job调度 喜马拉雅容器化实践 Kubernetes 实践 openkruise学习 基于Kubernetes选主及应用 Admission Controller 与 Admission Webhook k8s水平扩缩容 Scheduler如何给Node打分 Scheduler扩展 深入controller openkruise cloneset学习 controller-runtime源码分析 pv与pvc实现 csi学习 client-go informer源码分析 kubelet 组件分析 调度实践 Pod是如何被创建出来的? Kubernetes events学习及应用 CRI——kubelet与容器引擎之间的接口 资源调度泛谈 如何学习Kubernetes 以应用为中心 kubernetes operator kubernetes扩缩容 serverless 泛谈 什么是云原生 自定义CNI IPAM docker和k8s安全访问机制 Kubernetes监控 Kubernetes 控制器模型 Kubernetes资源调度——scheduler Kubernetes类型系统 Kubernetes源码分析——controller mananger Kubernetes源码分析——apiserver Kubernetes源码分析——kubelet Kubernetes介绍 Kubernetes源码分析——从kubectl开始 kubernetes yaml配置 CNI——容器网络是如何打通的 当我在说PaaS时,我在说什么 《深入剖析kubernetes》笔记 Kubernetes存储 访问Kubernetes上的Service Kubernetes副本管理 Kubernetes pod 组件
Agent与软件开发 大模型infra 提升Agent能力——上下文工程 llm评测 大模型可观测性 rl微调 grpo演进 rlhf演进 agent框架 分布式Agent与A2A reward演进 deepresearch梳理 mcp学习 大模型RLHF框架 rl框架 GPU与CUDA RL闲谈 MCTS与LLM rl从Policy Gradient(策略梯度)到PPO到GRPO AutoGen学习 从Transformer到DeepSeek 上下文记忆 agentic rag bert rerank微调 大模型推理tips 推理LLM梳理 Agent实践 LLM预训练 RAG向量检索与微调 LLM微调实践 RAG与知识图谱 大模型推理服务框架vLLM Agent Functon Calling LLamaIndex入门 另一种微服务架构Multi-Agent LangGraph工作流编排 大模型推理服务框架 模型服务化(未完成) 大模型Post-Training 大模型训练 大模型推理 从Attention到Transformer 增强型 LLM——Agent 激发LLM涌现——提示工程 LLM微调理论 大佬谈LLM LLM外挂知识库 LLMOps 多模态LLM Transformers源码学习 LangChain源码学习 如何应用LLM 小鼠如何驾驭大象(LLM)? AutoML和AutoDL 特征平台 实时训练 tensorflow原理——python层分析 如何学习tensorflow 数据并行——allreduce 数据并行——ps 推荐系统embedding原理及实践 机器学习中的python调用c 机器学习训练框架概述 tensornet源码分析 大模型训练和推理 X的生成——特征工程 tvm tensorflow原理——core层分析 模型演变 《深度学习推荐系统实战》笔记 keras 和 Estimator tensorflow分布式训练 分布式训练的一些问题 基于Volcano的弹性训练 图神经网络 pytorch弹性分布式训练 从RNN到Attention pytorch分布式训练 CNN 《动手学深度学习》笔记 pytorch与线性回归 推理服务 mpi 学习pytorch 提高gpu 利用率 GPU与容器的结合 GPU入门 AI云平台梳理 tensorflow学习 kaggle泰坦尼克问题实践 神经网络模型优化 概率论 直觉上理解深度学习 如何学习机器学习 深度学习泛谈

从Transformer到DeepSeek

2025年01月16日

简介

从最早的Transformer架构来看, Attention Block的计算量为$N^2d$, MLP Block的计算量为$Nd^2$。 针对模型规模扩大下的算法优化自然就盯着这两个block来做了。例如针对Attention Block的MHA,DeepSeek MLA以及Stepfun MFA等。 很多的优化主要是前期针对长文本的优化。而针对MoE的优化, 开源的生态上主要是以Mistral的Mixtral 8x7B开始的,但是很遗憾几个大厂一开始的阶段都选择了Dense的MLP。

发展脉络

讲一讲这两年大模型这整个领域到底发展了哪些方面更高的性能 ==> 更高质量输出/决策 ==> 使用工具 ==> 商业价值

  1. 在2023年初,LLM领域的发展遵循着一条清晰而有力的轨迹,规模决定能力,所以当年的爆火词就是Scaling Laws,更大的参数,更大的计算量,更大的数据规模。
  2. 随后到2024年,直到年底,一年多的时间该挖的数据、该买的算力、该请的人才都到位了,但还没出现GPT5,唯规模论的范式,迎来了深刻反思和系统性挑战。
    1. 对效率的迫切需求 ==> 架构改进:传统Transformer架构的注意力机制具有与序列长度成二次方关系的计算复杂度(O(L^2)复杂度),加之密集型(Dense)模型高昂的推理成本,共同构成了一个严重的性能瓶颈。这极大地限制了上下文长度的扩展和模型的实际部署,从而催生了对稀疏架构和新型注意力机制的迫切需求。
    2. 对推理的迫切需求 ==> 需要提升可解释性,找到新的增长范式:业界逐渐认识到,单纯的规模扩张并不能赋予模型强大的、多步骤的逻辑推理能力。模型在面对需要复杂规划和逻辑演绎的任务时,依然表现不佳。这一瓶颈促使研究方向发生根本性转变,从完全依赖预训练阶段的计算投入,转向在推理阶段分配额外计算资源,即思考(thinking)模型的诞生。在推理时进行thinking,也就是让模型在给出最终答案前进行一系列内部的、复杂的思考步骤,只有在底层架构已经足够高效的前提下才具有经济可行性,没有MoE或线性注意力等技术降低基础成本,为每一次查询增加数倍乃至数十倍的thinking计算量是无法想象的。
    3. 智能体的迫切需求 ==> 需要有商业价值,有用:随着模型推理能力的增强,下一个重点目标是让模型能够根据推理结果采取行动。这要求模型不仅能思考,还能与外部工具和环境进行交互,从而执行复杂任务,这标志着智能体AI(Agentic AI)时代的产生。因此,Agent能力的开发,成为应用推理能力的自然延伸。它是这条因果链的第三个环节,也是最高阶的体现。一个模型只有在能够高效地进行深度思考之后,才能可靠地决定何时、如何以及使用何种工具来完成任务。
  3. 2025年来推理Thinking走向台前。核心理念是,模型在生成最终答案之前,花费额外的计算资源来生成一段内部的思考链(CoT,chain of thought),从而在需要逻辑、数学和规划的复杂任务上实现性能的巨大飞跃。这标志着模型从静态的知识检索向动态的问题解决能力的演进。
    1. 强化学习(RL)的角色在这一时期发生了根本性的转变。它不再仅仅是用于对话对齐(如RLHF)的工具 ,而是成为了教授模型如何进行推理的核心方法,推理时间也成为了新的Scaling Laws。o系列及同类模型证明,对于一组固定的模型权重,通过增加推理期间使用的计算量,可以极大地提升模型在复杂任务上的表现。这一转变带来了深远的、高阶的影响。首先,它预示着对推理硬件的需求将大规模增长,而不仅仅是训练硬件。运行一次查询的成本不再是固定的,而是根据问题的难度动态变化,这为硬件市场带来了新的增长点。其次,它将研究重点从单纯地扩大预训练规模,转向开发更高效的推理算法(如在思考链中进行更优的搜索或规划)和更有效的RL技术来引导推理过程。
    2. 从理想到行动:智能体工具使用的黎明。一旦模型具备了推理和规划的能力,合乎逻辑的下一步就是让它能够通过与外部工具交互来执行计划。这正是AI智能体的定义。OpenAI的o3和o4-mini是首批被描述为具备“智能体工具使用”(agentic tool use)能力的模型。它们能够自主地决定何时以及如何组合使用网页搜索、Python代码分析和DALL-E图像生成等工具来解决一个复杂的用户请求。Claude 4的发布伴随着一套专为构建智能体而设计的新API功能:一个代码执行Sandbox、一个用于访问本地文件的Files API和一个MCP工具。这些功能,再结合独特的“计算机使用”(computer use)能力(即生成鼠标和键盘操作),使Claude成为构建能够与数字信息和图形用户界面(UI)进行交互的强大智能体的理想平台。
  4. 未来轨迹与结论。
  5. 也许是具身智能与世界模型。当前在推理和智能体方面的趋势,是通向具身智能(Embodied AI)的直接前导。感知、推理、规划和行动的闭环,正是具身智能体的核心工作流程。像Claude 4这样直接就是Product应用能力的模型,以及OpenAI的智能体框架,是模型从控制软件工具迈向控制机器人执行器的第一步。核心挑战在于将模型从数字世界迁移到物理世界。物理世界施加了严格的实时约束,而当前LLM的顺序执行、逐帧处理的架构并非为此设计。未来的研究,如Corki框架所提出的,将致力于算法与硬件的协同设计,通过让LLM预测未来的运动轨迹而非单一的、离散的动作,来解耦高延迟的LLM推理与低延迟的机器人控制。这预示着“世界模型”(World Models)——即能够理解和预测物理世界动态的AI系统将成为下一个研究热点。
  6. 对后Transformer架构的探索

回顾2023年至2025年6月的这段关键时期,可以清晰地看到,大型语言模型领域完成了一次深刻的战略转向。它不再是单一地追求规模(Scale),而是转向了一个由三大新支柱构成的、更加复杂和强大的多维发展策略:

  1. 效率(Efficiency):通过稀疏化(MoE)和先进的注意力机制(MLA、混合注意力)实现。效率创新使得巨大的模型规模和超长的上下文处理在经济上变得可行,为后续发展奠定了基础。
  2. 推理(Reasoning):通过将计算资源重新分配到推理阶段(“思考预算”)以及利用先进的强化学习技术训练模型涌现出解决问题的能力来实现。这使得模型从知识的存储器转变为问题的解决者。
  3. 智能体(Agency):作为推理能力的应用,它使模型能够自主地使用工具与数字乃至物理世界进行交互。这是将模型智能转化为实际行动的关键一步。 这一演进将大型语言模型从复杂的文本预测器,转变为初具形态的通用问题解决系统,为未来十年的人工智能发展奠定了坚实的架构基础。在这场新的竞赛中,胜利不再仅仅属于规模最大的模型,而是属于那些最有效率、思考最深刻、行动最强大的系统。

MoE

MoE 模型存在的原因

Moe已成为现阶段LLM的新标准MoE即 Mixture of Experts,是一种人工智能训练技术。它实质上将神经网络的某些部分(通常是LLM)“分解”为不同的部分,我们将这些被分解的部分称为“专家”。这种技术出现的原因有三个主要方面:

  1. 神经网络的稀疏性: 在特定层中,神经网络可能会变得非常稀疏,即某些神经元的激活频率远低于其他神经元。换句话说,很多神经元并非每次都会被使用到,这和人类大脑中的神经元是类似的。神经网络实际上对于它们所做的大多数预测来说都太大了(而且模型的规模越大,其稀疏性也越强)。例如我们让其帮忙总结一篇文章的内容,而模型训练的参数不仅仅“吸纳了”这些能力的数据,还包括了物理、数学,天文等等的知识内容。这意味着我们每次预测都要运行整个网络,但实际上模型中只有很小的一部分能够发挥作用。
  2. 神经元的多语义性: 神经元的设计使其具有多语义性,这意味着它们可以同时处理多个主题或概念。举个例子来说,在神经网络数十亿个神经元中的一个神经元可能每次在输入主题涉及“苹果”被激活,而当输入主题涉及“电话”时,这个神经元也可能被激活。这不仅使神经网络难以解释,而且也不是一个理想的情况。因为单个神经元必须精通各种彼此几乎毫无关系的主题。更糟糕的是,学习曲线可能相互矛盾,学习一个主题的更多知识可能会影响神经元获取另一个主题知识的能力。那么,如果我们能使用一种技术来拆分、消除或至少减少这两个问题,会怎么样呢?PS:“专家”这个名字是有原因的
  3. 计算资源的有限性:模型规模是提升模型性能的关键因素之一。而不管在什么阶段,资源一定是有限的,在有限的计算资源预算下,用更少的训练步数训练一个更大的模型,往往比用更多的步数训练一个较小的模型效果更佳。
    1. 由于神经网络的稀疏性,以及当前Transformer的二次障碍问题,大模型网络中进行了大量不必要的计算,使得我们更大的 LLM 成为世界上最低效和最耗能的系统之一。

实现

在构建MoE语言模型时,通常会将Transformer中的某些FFN替换为MoE层(MOE FFN,陆续还出现了MOE Attention,在某些情况下,并非所有 FFN 层都被 MoE 取代,例如Jamba模型具有多个 FFN和MoE 层)。具体来说,MoE层由多个专家组成,每个专家的结构与标准的FFN相同。每个token会被分配给一个或两个专家。MoE模型的推理过程主要包含三个阶段:

  1. 路由计算:通过路由器计算专家选择概率
  2. 专家选择:基于概率选择Top-K个专家
  3. 并行计算:选中的专家并行处理输入并聚合结果

分析一下DeepSeek每一代MoE的演进 建议细读。

详细谈谈DeepSeek MoE相关的技术发展 未读。

苏剑林 MoE环游记:1、从几何意义出发

  1. 一个常规的Dense模型FFN,可以等价改写为n个Expert向量$v_1,v_2,…,v_n$之和;
  2. 为了节省计算量,我们试图挑出k个向量求和来逼近原本的n个向量之和;
  3. 转化为数学问题求解后,我们发现挑选规则是模长最大的k个向量;
  4. 直接去算n个Expert的模长然后选k个实际上是不省计算量的,所以要重新设计Expert;
  5. 将$v_i$归一化得到$e_i$,然后用另外的小模型(Router)预测模长$p_i$,最终的Expert为$p_ie_i$;
  6. 此时,我们就可以先算全体$p_i$,挑出k个后才去计算$e_i$,达到节省计算量的目的。

挑战

MoE架构的主要优势在于其能够通过激活部分专家来降低计算成本,从而在扩展模型参数的同时保持计算效率。然而,现有的MoE架构在专家专业化方面面临挑战,具体表现为知识混杂和知识冗余。这些问题限制了MoE模型的性能,使其无法达到理论上的性能上限。

  1. 知识混杂(Knowledge Hybridity):现有的MoE实践通常使用较少的专家(例如8或16个),由于专家数量有限,每个专家最终都要处理广泛的知识,这就产生了知识混合性。这种广泛性阻碍了专家们在特定领域进行深入的专业化。
  2. 知识冗余(Knowledge Redundancy):当 MoE 模型中的不同专家学习相似的知识时,就会出现知识冗余,这首先就违背了对模型进行划分的意义。
    1. 最近一个有趣的趋势是添加“共享专家”的概念,例如DeepSeek 的DeepSeekMoE 家族。“共享专家”是掌握更加泛化或公共知识的专家,从而减少每个细粒度专家中的知识冗余,共享专家的数量是固定的且总是处于被激活的状态。而超专业专家(对于此特定模型最多可达 64 位) 掌握更细粒度的知识。 PS:训练不稳定、负载不均衡

deepseek

论文 模型架构;优化方法;基础设施。

边际创新

  1. 无辅助损失的负载均衡策略(Auxiliary-loss-free Load Balancing Strategy)
  2. 多头潜在注意力架构(Multi-head Latent Attention, MLA),减少了注意力部分的 KV 缓存. Low rank。
  3. DeepSeekMoE架构
  4. FP8混合精度训练框架
  5. 跨节点混合专家(MoE)训练的通信与计算重叠

首次验证

  1. 多标记预测训练目标(Multi-Token Prediction, MTP)对模型性能的显著提升
  2. FP8训练在超大规模模型上的可行性及有效性
  3. 强化学习可完全激励LLMs的推理能力(无SFT依赖)
  4. 蒸馏后的小型密集模型性能优于直接强化学习的小模型

DeepSeek-V3

DeepSeek-V3 高效训练关键技术分析

  1. 模型架构设计:MLA、DeepSeekMoE;创新的负载均衡策略(优化MoE训练);MTP
  2. 并行策略:大量专家并行(EP)、不使用TP;Dualpipe流水线并行;ZeRO-1(DP)并行策略
  3. 通信优化:MoE All2All优化
  4. 显存优化:FP8低精度训练;选择重计算;EMA显存优化;头尾参数共享(emebedding & lm_head)。 DeepSeek 的优化策略分为两大类。第一类是底层优化,即在已知算法模型和底层硬件的情况下,通过软件优化来提升硬件效率,比如通信优化或内存优化。这些优化不会改变程序执行的正确性,但能显著提升性能。第二类是协同优化,包括混合精度、量化和 MLA 等技术,这些优化不仅涉及原有算法模型的修改,还可能需要调整底层硬件,从而扩展硬件优化的空间。

漫谈DeepSeek及其背后的核心技术 对上面技术有细节介绍,未细读。

R1训练过程

先前的大型语言模型(LLMs)相关的很多工作里都依赖大量的人工标注的数据去提升模型性能。但在Deep Seek R1这篇论文中指出:模型的推理能力(reasoning capabilities)可以通过大规模的强化学习(Reinforcement learning)来提升,甚至不需要用SFT(supervised fine-tune)来完成冷启部分的工作。强化学习(RL)的角色在这一时期发生了根本性的转变。它不再仅仅是用于对话对齐(如RLHF)的工具 ,而是成为了教授模型如何进行推理的核心方法,推理时间也成为了新的Scaling Laws。PS. 通过少量的SFT完成模型的冷启(cold-start)可以进一步提升模型表现。

一个以RL为中心的多阶段流程,迭代式训练: PS: base-> rl -> sft 数据集 -> sft base-> rl -> sft 数据集。论文提到包含2个rl 过程和2个sft过程。PS: 先增强生成cot/think能力(一个sft+rl),再进行更多的SFT和一个最终用于通用对齐的RL阶段

  1. 先收集了一部分高质量冷启动数据(约几千条),使用该数据fine-tune DeepSeek-V3-Base模型,记为模型A。PS: 最开始没有冷启动这个步骤,而是直接对DeepSeek-V3-Base进行了GRPO训练,发现虽然CoT能力提升比较大,但是回复的内容鱼龙混杂,甚至有多个语言同时出现的情况
  2. 使用A模型用GRPO训练(论文用了一个词 reasoning-oriented RL),使其涌现推理能力,收敛的模型记为B
  3. 使用B模型产生高质量SFT数据,并混合DeepSeek-V3产生的其他领域的高质量数据,形成一个高质量数据集
  4. 使用该数据集训练原始DeepSeek-V3-Base模型,记为模型C
  5. 使用C模型重新进行步骤2,但是数据集变为所有领域(常规的rl,常规的reward model,提高helpfulness and harmlessness),收敛后的模型记为D,这个模型就是DeepSeek-R1
  6. 训练C模型的数据对小模型做蒸馏,效果也非常好

这个训练过程是不需要任何监督数据的,只需要准确评估最终结果。GRPO的reward并没有采用PRM,而是使用了基于正则的ORM。其中包括了两个点:

  1. 评估最终答案是否正确。包含最终结果比对、代码运行结果等
  2. 格式奖励:模型需要将CoT过程放在<think></think>之间

有人说sft不存在了。不可能的,最多是人类标注的sft不存在了。那么取而代之的是什么呢?ai标注的sft。模型rl得到的思维链做sft训练新模型,大模型的思维链训练小模型。ybq大佬:post training 最关键的并不是 sft 和 rl 谁更重要,恰恰就是 multi_stage 的设计。既可以是多阶段的 sft,也可以是多阶段的 rl,亦或者是相互交叉的多阶段。不同 topic 的多阶段,不同任务难度的多阶段,不同训练方法的多阶段,不同 seq_len 的多阶段等等,都需要做实验去设计,也往往都能让模型的效果有所提升。pretrain 的技术方法正在全面入侵 post training(退火、课程学习、多阶段训练 ……)

MTP(Multi-Token Prediction)

与之对应的是DeepSeek-V3 发布之前业界普遍使用的单令牌预测(Single - Token Prediction,STP),STP 一次仅预测一个Token,而 MTP 可同时预测多个 Token。为什么要做MTP? 当前主流的大模型(LLMs)都是decoder-base的模型结构,也就是无论在模型训练还是在推理阶段,对于一个序列的生成过程,都是token-by-token的。每次在生成一个token的时候,都要频繁跟访存交互,加载KV-Cache,再通过多层网络做完整的前向计算。对于这样的访存密集型的任务,通常会因为访存效率形成训练或推理的瓶颈。

MTP核心思想:通过解码阶段的优化,将1-token的生成,转变成multi-token的生成,从而提升训练和推理的性能。具体来说,在训练阶段,一次生成多个后续token,可以一次学习多个位置的label,进而有效提升样本的利用效率,提升训练速度;在推理阶段通过一次生成多个token,实现成倍的推理加速来提升推理性能。

蒸馏/distilled

知识蒸馏本质上是一种模型压缩的方法,其核心思想是利用一个大模型(教师模型)来指导小模型(学生模型)的训练。蒸馏有几种方法,每种方法都有各自的优点:

  1. 一种是数据蒸馏,在数据蒸馏中,教师模型生成合成数据或伪标签,然后用于训练学生模型。这种方法可以应用于广泛的任务,即使是那些 logits 信息量较少的任务(例如开放式推理任务)。
  2. 一种是Logits蒸馏,Logits 是应用 softmax 函数之前神经网络的原始输出分数。在 logits蒸馏中,学生模型经过训练以匹配教师的 logits,而不仅仅是最终预测。这种方法保留了更多关于教师信心水平和决策过程的信息。
  3. 一种是特征蒸馏,特征蒸馏将知识从教师模型的中间层转移到学生。通过对齐两个模型的隐藏表示,学生可以学习更丰富、更抽象的特征。

知识蒸馏技术原理详解:从软标签到模型压缩的实现机制

考虑一个输出三类别概率的神经网络模型。假设教师模型输出以下logits值: [1.1, 0.2, 0.2], 经过softmax函数转换后得到: [0.552, 0.224, 0.224]。 此时,类别0获得最高概率,成为模型的预测输出。模型同时为类别1和类别2分配了较低的概率值。这种概率分布表明,尽管输入数据最可能属于类别0,但其特征表现出了与类别1和类别2的部分相关性。在传统的模型训练中,仅使用独热编码标签(如[1, 0, 0])会导致模型仅关注正确类别的预测。这种训练方式通常采用交叉熵损失函数。而知识蒸馏技术通过引入教师模型的软标签信息,为学生模型提供了更丰富的学习目标。

低概率信息的利用价值:在传统分类任务中,由于最高概率(0.552)显著高于其他概率值(均为0.224),次高概率通常会被忽略。而知识蒸馏技术的创新之处在于充分利用这些次要概率信息来指导学生模型的训练过程。以动物识别任务为例,当教师模型处理一张马的图像时,除了对”马”类别赋予最高概率外,还会为”鹿”和”牛”类别分配一定概率。这种概率分配反映了物种间的特征相似性,如四肢结构和尾部特征。虽然马的体型大小和头部轮廓等特征最终导致”马”类别获得最高概率,但模型捕获到的类别间相似性信息同样具有重要价值。

其它

让base model 生成推理过程的prompt

A conversation between User and Assistant. The user asks a question, and the Assistant solves it.
The assistant first thinks about the reasoning process in the mind and then provides the user
with the answer. The reasoning process and answer are enclosed within <think> </think> and
<answer> </answer> tags, respectively, i.e., <think> reasoning process here </think>
<answer> answer here </answer>. User: {question}. Assistant:

自动推理

Qwen3-RL训练详解将思考模式和非思考模型集成到一个统一的框架中,这使得模型既拥有拥有复杂多步骤推理的能力(例如QwQ-32B),也能够基于上下文进行快速响应(例如GPT-4o)。

其它

K2模型结构的设计宗旨