深入 DeepSeek V4

DeepSeek V4是DeepSeek公司于2026年初推出的新一代大语言模型系列,通过创新的架构设计和高效的推理技术,在保持顶尖性能的同时,大幅降低大模型的使用成本,为A规模化应用扫清障碍。

在这里插入图片描述

DeepSeek-V4 Pro(极致性能旗舰) Flash(超高性价比之选)
总参数 1.6T 284B
激活参数 49B 13B
核心优势 全场景顶级推理能力 轻量高效,成本极致
APl价格 3元/百万tokens 1元/百万tokens

从性能与实际效果的综合表现来看,它虽算不上行业顶尖,其竞争力更多体现在开源大模型的阵营中,具备亮眼优势;可一旦与Opus 4.8、GLM 5.2、Claude F5这类非开源顶尖模型正面较量,差距便清晰显现,整体表现仍有不小差距。不过,这款模型的核心价值,恰恰在于精准锚定并全力破解特定痛点,这也正是其不可替代的核心优势所在。

优势:

  • 百万级上下文标配: 原生支持1Mtokens,处理超长文档、代码库毫无压力,超96%的训练数据在64K/1M的大窗口内完成,属于原生超长上下文训练,长文本处理能力显著优于传统模型。
  • 极致成本控制: 通过稀疏激活架构,在有限资源下释放AI最大潜力。
  • 适配国产算力芯片: 全面兼容国产硬件生态,摆脱依赖,保障部署安全。
  • 无缝兼容与Agent能力: Anthropic API兼容,支持Aentic Coding,开发迁移零

它虽未在大模型的技术迭代中掀起颠覆性浪潮,却为中国AI产业的全域崛起注入了无可比拟的核心动能,成为驱动产业进阶的关键力量。

DeepSeek V4原生支持当前主流的Agent开发框架和产品,作为高效的Agent大脑,它为开发者提供了灵活、强大的底层支撑,赋能各类AI编程应用场景。

  • Claude Code: 高度兼容的企业级框架,支持代码任务的无缝切换与迁移,降低适配成本。
  • OpenClaw: 轻量级开源AIAgent框架,提供灵活的扩展接口,适合构建定制化智能体。
  • OpenCode: 专注于代码生成与优化的Agent平台,深度集成开发工具链,提升编码效率。
  • CodeBuddy: 提供智能代码补全、实时调试与重构建议,是开发者高效编码的得力助手。

核心特性: reasoning_effort 参数,一个独特的可调节参数,允许用户根据任务复杂度,动态控制模型的“思考深度”,在响应速度与答案质量间取得完美平衡。

在这里插入图片描述

技术亮点

模型架构原生机制 (无需额外工程,token的处理):

  • SWA(滑动窗口注意力): 模型基础组件,专注处理最近窗口(如128个Token)内的精细上下文信息,而非全局上下文,保障局部交互的准确性。
  • CSA(压缩稀疏注意力): 核心机制之一,将连续Token块压缩为单个“代表元”,对历史上下文进行4倍压缩与稀疏检索,在降低计算开销的同时,有效保留关键历史信息。
  • HCA(重度压缩注意力): 对整个长上下文进行极重度压缩,仅保留1%~5%的关键Token。实现128倍的历史上下文重度压缩,为模型提供超长序列的全局视野,是处理万亿Token上下文的关键。

推理框架工程实现 (需额外开发,缓存空间的处理):

  • HiCache 分层缓存: 扩展Prefil阶段的KV缓存能力,支持将缓存从GPU卸载到主机内存,突破显存物理限制。
  • HiSparse 解码优化: 针对Decode阶段,将不活跃的C4部分KV缓存卸载至CPU内存,显著释放宝贵的GPU显存资源。
  • OnDisk 落盘策略: 作为分层存储的L3层级,将超长上下文的KV缓存持久化到SSD,是支持海量历史记忆的终极方案。
  • 前缀缓存复用: 通过复用请求间的公共前缀计算结果,大幅减少重复运算,由vLLM/SGLang等推理框架负责管理。

mHC(Manifold-Constrained Hyper-Connections,流形约束超连接)

深层网络的固有瓶颈:

  • 梯度消失: 深层网络中信息无法有效向前传递,导致模型难以训练。比如我们看书学习,但是我们没办法知道自己学没学会,所以需要通过考试,根据考试的得分来判断自己学会的程度。我们如果进行多次考试,分数都不变或者分数变化很小,这就叫梯度消息。
  • 梯度爆炸: 参数更新幅度过大,引发训练过程极度不稳定。以上面的案例来说,我们的考的分数不稳定,第一次可能90分,第二次是50分,第三次是98分,第四次是36分,每次幅度变化都很大,这就叫梯度爆炸。
  • 表示崩溃: 网络层无法学习到有意义的深层特征,表达能力受限。学习的科目有很多,数学、物理、化学,虽然这几个科目都是有关联的,都需要数学计算,但是他把这几门都学成了数学,其实物理、化学都有自己的意义,没办法单以数学来概论,把他们都当成数学来学,就会导致很多属于物理、化学的概念知识没办法学习到。

深度神经网络存在显著的学习局限,其能力边界仅能精准覆盖某一特定领域的知识,面对多元复杂的其他知识体系,始终难以实现有效吸收与整合。

解决深度神经网络的瓶颈,也是连接技术的演进之路:

  • 残差连接: 引入“信息高速公路”,初步缓解了梯度消失、表示崩溃的问题,想了解残差连接的可以看下我之前写的文章 浅谈多模态领域的Transformer,里面有详细介绍ResNet(残差学习框架)
  • Hyper Connection: 构建多层间的多条通路,增强表达力,但易引发新的梯度爆炸。
  • mHC架构: 在Hyper Connection基础上引入智能调度(控制器),实现高效稳定的信息传输。比如在红路灯十字路口,车子很多,单靠红绿灯没办法疏通交通,这个时候需要交警(控制器)介入,进行调度,确保交通通畅。

在这里插入图片描述

mHC:智能动态路由系统:
mHC的核心在于引入了一个可学习的“控制器(Controller)”。它使用Sinkhorn-Knopp算法能智能感知网络状态,动态调度各路径的信息流量。
信号增益: 10倍以上 —> 1.6倍。

简而言之,mHC架构通过将静态连接升级为动态智能路由,扮演了“稳定基石”与“性能放大器”的双重角色。它从根本上解决了训练1.6万亿参数MoE模型时最核心的挑战一-深层网络的训练崩溃问题。

大模型推理的两个阶段:Prefill 与 Decode

Prefill 阶段 (预填充):
一次性对整个输入序列并行计算,得到所有Token的Key和Value并存储到KV Cache中,为后续生成奠定基础。

  • 计算复杂度: O(n2),n为Prompt长度,属于高开销的一次性计算。
  • 核心目标: 快速处理用户输入Prompt,完成上下文的编码与缓存写入。

Decode 阶段 (解码):
每步仅计算一个新Token,利用KVCache中的历史信息进行注意力计算,并将新Token的KN追加至缓存。

  • 计算复杂度: O(n),n为序列总长度,是低开销、高速度的循环生成过程。
  • 核心价值: 通过复用历史缓存避免重复计算,是实现大模型实时文本生成的关键。

Prefill 负责“蓄力”,Decode 负责“爆发”,两阶段协同工作实现了大模型从输入到输出的高效转化。

KV Cache

暴力推理的巨大开销:
大模型生成文本是自回归过程,若不缓存,每生成一个Token都需重新计算所有历史Token的注意力,计算量随序列长度呈平方级增长0(n2)。这导致推理延迟高、吞吐低,长文本生成的计算成本极其高昂。

核心方案:缓存与复用:
在首次处理Prompt时计算并缓存Key和Value向量;后续生成新Token时,仅需计算新Token的Query,并与缓存的KN交互。这一策略将核心计算复杂度从平方级降至线性级,是实现实时、低成本推理的关键。

从 O(n²) 到 O(n):
KVCache用空间换时间,将注意力机制的计算复杂度大幅降低,使得长上下文的大模型应用从理论走向现实。它是当前所有大模型推理框架的标配技术,支撑了对话、创作等实时场景的落地。

1.预填充阶段(Prefill): 一次性计算并缓存Prompt所有Token的K/V,完成初始上下文加载,此阶段复杂度仍为O(n2),但仅执行一次。
2.解码阶段(Decode): 每生成一个新Token,仅计算新Quey并与缓存交互,复杂度降至0(n),实现了快速、低耗的连续文本生成。

KV Cache的计算,大家可以看下我之前写的文章 揭秘Transformer架构设计 2(补全版)内的注意力机制揭秘Transformer架构设计 1内的Embedding

重点:真正有价值的是V,最后的输出是V中每个元素的加权求和

预估体重 = 0.03 * 50 + 0.02 * 55 + 0.08 * 60 + 0.1 * 65 +0.2 * 70 + 0.41 * 75 + 0.46 * 80 + 0.32 * 85

在这里插入图片描述

KV Cache是把K、V值都缓存下来,当有新的token过来,token则与K值进行(Embedding)相关度系数计算,然后相关度系数再与V值进行加权求和,最后得出结果。

注意力机制计算公式:

在这里插入图片描述

整体架构图:

在这里插入图片描述

异构缓存

标准KV Cache在驾驭百万级上下文时,正遭遇“显存墙”与“访问效率”的双重掣肘。若缺乏异构缓存的有力支撑,百万token对应的KV Cache规模将逼近100G,不仅带来极为庞大的计算负荷,还会大幅拉长处理耗时,最终让KV Cache彻底丧失实用价值。

DeepSeekV4通过创新的异构缓存体系,结合多样化注意力机制与分层存储策略,彻底重构了上下文管理逻辑,实现了效率与性能的突破。

在这里插入图片描述

CSA

Compressed Sparse Attention,压缩稀疏注意力。

适用场景:结构化与重复性文本,特别适配文档内部层级结构、代码以及具有高度重复性的文本内容,能够有效利用内容的结构特征进行优化。

缓存策略:仅保留压缩元KV,摒弃传统的全量原始KV缓存方式,转而存储压缩后的“代表元”键值对,在不丢失关键语义的前提下精简缓存数据。

核心原理:Token块压缩与稀疏注意力,通过池化或可学习卷积将连续Token块压缩为单个“代表元”,注意力计算仅在稀疏选择的块间进行,大幅减少计算量与储存。比如"Hello World",这2个单词,把”Hello“压缩成一个代表元,”World“也压缩成一个代表元。

极致优势:缓存量锐减 4× ~ 8×,有效解决长距离依赖带来的缓存压力,将所需缓存体积降低4到8倍,显著提升了模型在长文本处理时的运行效率与吞吐量,同时完整保留文本结构信息。

SWA

SWA:滑动窗口注意力(Sliding Window Attention)。

核心适用场景: 专为局部依赖、流式生成及长文本开头部分优化。尤其适合处理自然语言等上下文关联紧密但具有局部性特征的内容生成任务。

轻量化缓存策略: 窗口外的Key-Value(KV)缓存数据会被立即丢弃或移出热缓存区域,不占用宝贵的显存资源,确保缓存始终保持在可控的线性规模内。

滑动窗口核心原理: 每个Token仅关注其前后固定长度L(如4096个Token)内的邻居Token,而非全局上下文,形成动态的“滑动窗口”,将全局注意力收缩为局部聚焦,大幅减少无效计算。

极致的复杂度优化: 将注意力计算的时间与空间复杂度从传统的O(N2)降至O(N * L),实现了内存占用的线性可控,为长文本处理提供了高效的算力保障,效率极高。

HCA

HCA:重度压缩注意力(Heavy Compressed Attention)。

适用场景:全局摘要与长距离依赖,适用于全局摘要、任务规划及多轮对话中早期的关键信息,能够有效补充SWA丢失的长距离语义联系,让模型不遗忘遥远的上下文。

缓存特性:低更新与可置换,该缓存极少需要更新,且可灵活置换到DRAM或SSD等低速存储介质中,彻底释放宝贵的GPU显存,大幅降低硬件成本压力。

核心原理:极重度压缩的“持久记忆”,在预填充阶段对整个长上下文进行极重度压缩,仅保留1%~5%的关键Token,将压缩后的高维向量作为模型的“持久记忆”存储。

极致优势:理论上支持无限长上下文,以极低的存储与计算开销实现真正的“全时记忆”,突破了Transformer架构的根本限制,在理论层面为无限长上下文推理提供了可能。

HiCache

HiCache架构模仿CPU多级缓存机制,通过在SRAM、显存、统一内存到NVMe磁盘的不同层级存储介质间,差异化分配最新Token、压缩向量与历史KV数据,实现了访问速度、存储容量与硬件成本的极致平衡,为超长上下文处理提供高效支撑。

  • 片内 SRAM: 存储当前SWA窗口内的活跃Token,实现极低延迟的极速访问,是系统中响应最快的缓存层级。
  • 显存 HBM: 缓存CSA压缩块与最近的HCA摘要,以较低延迟承接L1的溢出数据,平衡速度与缓存规模。
  • 统一内存 UVA: 承载全部HCA持久化压缩向量,以中等延迟提供海量缓存空间,是长上下文数据的核心载体。
  • 磁盘 NVMe: 通过OnDisk管理超长历史原始KV数据,以高延迟换取近乎无限的存储容量,作为最终兜底层。
HiSparse

核心功能:异构缓存的“大脑”, 作为系统的动态调度中枢,负责智能决策每个Token或数据块应采用的注意力类型(SWA/CSA/HCA),并精准分配至对应层级的缓存空间,实现资源的最优配置。

调度输出:层级与压缩策略,输出缓存层级映射关系,并动态设定压缩比率。例如代码缩进区采用CSA 8倍压缩,对话总结区采用HCA50倍压缩,最大化利用缓存带宽与容量。

决策输入:多维实时特征,综合考量当前Token的序列位置、历史访问热度数据,以及由模型小型预测头输出的注意力模式信号,构建多维度的输入特征空间,为调度提供依据。

关键创新:轻量级在线决策模型,控制器本身是仅约0.1B参数的轻量级可学习模型,无需离线预处理,直接在推理过程中进行在线、实时的动态决策,兼顾了调度的智能性与系统的低开销。

Prefix Caching

Prefix Caching:前缀缓存复用。

DeepSeek V4之所以在命中缓存后具备显著的价格优势,核心在于依托Prefix Caching技术达成的成本优化效果。

对于多个请求,如果它们的前缀tokens完全相同,我们只需计算一次该前缀的K,并缓存起来;后续请求命中该前缀时,直接复用缓存,只计算各自的新增(后缀)部分。

原理: 当多个请求共享相同的前缀(Prefix)时,复用该前缀的KV Cache只计算不同的后缀部分,大幅提升推理吞吐与降低延迟。

在这里插入图片描述

没有 Prefix Caching vs 使用 Prefix Caching:

在这里插入图片描述

Prefix Cache 的存储结构:

  • Prefix Hash (键): 对输入的前缀tokens 做哈希(如:hash(token_ids))作为缓存的键值。
  • Prefix Cache (值):
    在这里插入图片描述

说明:KV Cache通常按层(Layer)存储,每层包含该前缀下所有位置的K与V向量。

整体流程:

在这里插入图片描述

优势:

  • 减少重复计算: 共享前缀只计算一次;
  • 降低延迟: 命中率越高,首token延迟越低;
  • 提升吞吐: 更多请求可以并行复用前缀;
  • 降低成本: 更少的计算量与显存带宽消耗;

注意事项:

  • 只有完全相同 的前缀才能命中(逐token一致);
  • 前缀越长,命中收益越大,但缓存占用也越多;
  • 需要合理的缓存淘汰策略(如LRU/LFU);
  • 与普通KV Cache 互补: Prefix Cache解决跨请求复用,普通KV Cache解决单请求内的自回归增长;
Prefix Caching 进阶: Token Hash 与 Block Hash

Prefix Caching 的目标:让多个请求共享相同的前缓计算结果(KV Cache),避免重复计算。

为什么需要Hash?
不同请求的前级如果相同(或部分相同),可以复用计算好的KV。通过对前缓(Token或Block)做Hash,快速判断是否命中缓存。

在这里插入图片描述

Token Hash(按 Token 逐个Hash):
思路: 对每个Token位置依次计算Hash,形成链式前缓树(Trie)

示例请求(已分词):

在这里插入图片描述

链式前缓树(Trie):

在这里插入图片描述

Block Hash(按 Block分块 Hash)
思路: 将连续的N个Token 组成一个Block,对 Block 计算Hash,形成 Block级前缀树

示例:Block大小 = 4 Token,将Token 切成Block:

在这里插入图片描述

Block 计算Hash(链式):

在这里插入图片描述

特点:

  • 命中粒度: 中等(Block级)
  • 内存占用: 远小于TokenHash
  • 查找效率: 高(树更浅,节点更少)

工业界主流选择(vLLM,SGLang等)

命中示例(最长前缀匹配):
请求B到来:今天太热
查找: 命中Block0(H0),Block 1不命中 —> 复用到Block0的KV。

请求C到来:今天太冷
查找: 命中Block0(H0),Block 1不命中 —> 复用到Block 0的KV。

Token Hash vs Block Hash 对比:

在这里插入图片描述

注:实际系统通常还会结合 LRU/LFU 等策略做缓存淘汰。

Prefix树匹配(最长前匹配)
目标: 找到能复用的最长前缀,复用其KV,后续部分重新计算。

Trie结构(以BlockHash为例):

在这里插入图片描述

匹配过程:(请求=[ 今天 太 冷 ] [了])

  1. 从ROOT开始 —> 命中;
  2. 匹配 Block0:[ 今天 太 ] —> 命中 (H0);
  3. 匹配Block1:[ 太 冷 了 ] —> 命中(H3);
  4. 匹配Block 2:[ 了 ] —> 不存在,未命中。

结论:复用到H3对应的KV,也就是第三步,后续Block 2开始重新计算。

总结:

  • Prefix Caching 通过 Hash 判断前缀是否命中缓存;
  • Token Hash 粒度最细,但内存开销大,不适合长Prompt;
  • Block Hash 是工业界主流,在命中率与资源消耗之间取得平衡;
  • 采用前缀树(Trie)+最长前缀匹配,尽可能复用更多的KV;

最佳实践建议:

  • 选择合适的Block大小(通常16或32);
  • 对系统 Prompt/RAG 模板使用 Prefix Caching 收益最大;
  • 配合缓存淘汰策略(LRU/LFU)控制内存占用;

模型部署配置的评估

硬件估算

核心公式:总显存需求 = 模型权重 + KV Cache + 中间激活 + 框架开销

模型权重(固定开销)
计算公式:参数量(B)* 每个参数占用字节数,这是模型加载的基础门槛。
例如7B模型使用FP16精度时,FP8是一字节,FP16是2字节,这里的权重本身约占 7B * 2字节 = 14GB 显存。

KV Cache(动态开销)
KV Cache是占显存非常多的地方,它甚至比模型的自身权重还要多。
由序列长度、BatchSize和层数等决定,是长上下文处理和高并发场景下的显存主导因素,直接影响服务的吞吐量与响应速度。

核心公式:总大小 = 2 * 层数 * 每层头数 * 每头维度 * 序列长度 * 精度字节 * batch size;

KV Cache 因为需要分别存储Key和Value。

  • 层数(L): Transformer的层数,如 LLaMA2-7B 有32层。
  • 每层头数(H): 每层的注意力头数。
  • 每头维度(D): 每个注意力头的维度。注意:通常HxD=隐藏层大小,即模型整体的隐藏维度。
  • 序列长度(S): 当前已生成的序列总长度(包括输入和已生成的输出token)。
  • 字节数: 取决于数据类型。

中间激活(临时开销)
模型前向传播时产生的中间张量,通常可通过优化策略显著减少。其大小约为模型权重 5%-10%,是显存优化的重要切入点。

框架开销(基础运行)
深度学习框架(如PyTorch/TensorFlow)本身运行所需的固定显存,约占2-4GB,且每张参与运算的卡还会额外占用约0.5GB显存。

生成速度估算

理论生成速度(上限):

  • 公式: 生成速度 (tokens/s) ≈ GPU 显存带宽 (GB/s) / 模型参数大小(GB);
  • 关键因素: 显存带宽是决定生成速度上限的核心硬件指标;

硬件层优先级: 显存带宽 > 计算能力 > HBM容量,高带宽显存是性能基石。

VLLM实践生成速度:

  • 公式: 总吞吐量 ≈ (带宽 * BatchSize) / (参数量 + KV Cache * Batch Size);
  • 关键因素: Batch Size的调度策略与KV Cache的显存占用是提升实际吞吐量的关键。

软件框架策略: Continuous Batching(vLLM)> PagedAttention > 量化技术,大幅提升吞吐。

性能优化核心逻辑:

  • 理论上限由硬件决定,而实际系统的吞吐量则取决于软硬件协同的调度效率,需平衡资源分配。
  • 优化目标: 最大化显存利用率,减少请求间的等待与资源浪费。

模型与任务适配: 需根据模型参数量级与序列长度,动态调整Batch Size以平衡延迟和吞吐量。

CPU与内存估算

CPU资源:单核性能与调度核心
核心瓶颈在于模型加载、Tokenizer预处理及推理框架的调度开销。Tokenizer的串行特性使其对单核频率极为敏感。

  • 模型加载: 高带宽支撑数十GB权重快速载入GPU;
  • 预处理/后处理: Tokenizer速度决定请求响应延迟下限;
  • 调度开销: VLLM等框架的Continuous Batching消耗资源;

经验法则:16-32物理核心,高主频优先。
推荐Intel Xeon 4/5代 或 AMD EPYC 4/5代,确保单核性能与核心数平衡。

内存(DRAM):GPU显存的坚实后盾。
主要承载模型加载时的临时权重、从GPU卸载的KVCache数据,以及操作系统和推理框架的运行资源。

  • 权重暂存: 加载阶段需完整存放模型权重文件;
  • KVCache卸载: HiCache策略下,不活跃缓存落至内存;
  • 系统基础: OS、驱动及容器环境需预留数GB空间;

经验法则:容量 ≥ GPU显存的1.5~2倍。
如搭配80GB显存显卡,建议配备128GB-192GB系统内存,防止OOM风险。

部署 DeepSeek-V4 步骤

  • 使⽤ DeepSeek-V4-Flash-w8a8-mtp 量化版模型(⾮原版);
  • Docker 镜像版本:quay.io/ascend/vllm-ascend:v0.13.0rc3;
  • 硬件要求:Atlas 800 A2 (64G × 8) 或 Atlas 800 A3 (128G × 8);

环境检测

检测系统版本

nkvers

在这里插入图片描述

环境准备与驱动验证

检查 NPU 状态

npu-smi info

在这里插入图片描述

检查所有 NPU 的 RoCE 链路状态

for i in {0..7}; do hccn_tool -i $i -link -g; done

在这里插入图片描述

检查网络健康状态,网卡是否正常

for i in {0..7}; do hccn_tool -i $i -net_health -g; done

在这里插入图片描述

检查 HCCN 配置

# 确认 hccn.conf 存在
cat /etc/hccn.conf

在这里插入图片描述

下载模型权重

# 创建模型目录
mkdir -p /data/models

# 使用 ModelScope 下载(推荐,国内速度快)
pip install modelscope
modelscope download --model Eco-Tech/DeepSeek-V4-Flash-w8a8-mtp \
    --local_dir /data/models/DeepSeek-V4-Flash-w8a8-mtp

# 模型名称末尾的 mtp 是 Multi-Token Prediction(多token预测)的缩写。
# 这是一种推测解码技术,模型在推理时会一次生成多个候选token,然后再进行验证,从而显著提高文本生成的速度,尤其是在批处理场景下效果明显
# w8a8 是深度学习模型中对权重(Weights) 和 激活值(Activations) 进行 8-bit 整数量化的技术缩写。

启动 Docker 容器

启动 8 卡容器

export IMAGE=quay.io/ascend/vllm-ascend:deepseekv4
export NAME=vllm-ascend-deepseek
docker run -itd \
--name $NAME \
--net=host \
--shm-size=32g \
# 显卡导入到docker
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
# -v是隔离环境
-v /usr/local/dcmi:/usr/local/dcmi \
-v
/usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool\
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /data/models:/data/models \
# 网络端口映射
-p 8000:8000 \
$IMAGE bash

进⼊容器

docker exec -it $NAME bash

在这里插入图片描述

配置环境变量

在容器内执⾏:

export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=8
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export ACL_OP_INIT_MODE=1
export VLLM_ASCEND_ENABLE_FLASHCOMM1=1
export USE_MULTI_GROUPS_KV_CACHE=1
export TASK_QUEUE_ENABLE=1
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_BUFFSIZE=512
export USE_MULTI_BLOCK_POOL=1

sysctl -w vm.swappiness=0
sysctl -w kernel.numa_balancing=0
sysctl kernel.sched_migration_cost_ns=50000

在这里插入图片描述

环境变量说明:

在这里插入图片描述

启动 vLLM 服务

基础启动命令(8 卡张量并⾏)

vllm serve /data/models/DeepSeek-V4-Flash-w8a8-mtp \
--safetensors-load-strategy 'prefetch' \
--max-model-len 135168 \
--max-num-batched-tokens 4096 \
--served-model-name ds \
--gpu-memory-utilization 0.92 \
--max-num-seqs 16 \
--data-parallel-size 1 \
--tensor-parallel-size 8 \
--enable-expert-parallel \
--quantization ascend \
--port 8000 \
--block-size 128 \
--enable-chunked-prefill \
--enable-prefix-caching \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--async-scheduling \
--additional-config
'{"enable_cpu_binding":true,"multistream_overlap_shared_expert":false}' \
--compilation-config
'{"cudagraph_mode":"FULL_DECODE_ONLY","cudagraph_capture_sizes":
[2,4,6,8,10,12,14,16,18,20,22,24,32,36,40]}' \
--model-loader-extra-config
'{"enable_multithread_load":true,"num_threads":16}' \
--speculative-config '{"num_speculative_tokens": 1,"method": "mtp"}'

在这里插入图片描述

启动命令说明:

在这里插入图片描述

启动成功后,⽇志应显⽰:

在这里插入图片描述

如遇 transformers does not recognize deepseek_v4 错误:说明模型路径不正确或未使⽤适配版模型,请确认使⽤ DeepSeek-V4-Flash-w8a8-mtp。

服务验证

基础健康检查

# 检查模型列表
curl http://localhost:8000/v1/models

# 预期返回包含 "deepseek-v4" 的 JSON

在这里插入图片描述

对话测试

# 非流式对话
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ds",
"messages": [
{"role": "user", "content": "你好,请用一句话介绍自己"}
],
"max_tokens": 100,
"temperature": 0.7
}'

在这里插入图片描述

NPU 监控验证

# 查看 NPU 利用率
npu-smi info

# 实时监控(每 2 秒刷新)
watch -n 2 npu-smi info

# 查看具体 NPU 详细信息
npu-smi info -t board -i 0

在这里插入图片描述

使⽤ vllm bench ⼯具进⾏压⼒测试:

vllm bench serve \
--backend openai-chat \
--model /data/models/DeepSeek-V4-Flash-w8a8-mtp \
--served-model-name ds \
--port 8000 \
--dataset-name random \
--random-input-len 1024 \
--random-output-len 128 \
--num-prompts 100 \
--max-concurrency 8 \
--base-url http://localhost:8000 \
--endpoint /v1/chat/completions

在这里插入图片描述

参数说明:

在这里插入图片描述

常见故障排查

模型类型无法识别
错误信息:ValueError: The checkpoint you are trying to load has model type deepseek_v4 but Transformers does not recognize this architecture

解决⽅案:

  • 确认使⽤ DeepSeek-V4-Flash-w8a8-mtp ⽽⾮原版模型
  • 添加 --trust-remote-code 参数

NPU 设备无法访问
检查项:

# 在容器内执行
python3 -c "import torch; import torch_npu; print(torch.npu.device_count())"
# 应输出 8

# 检查设备文件
ls -la /dev/davinci*

OOM 显存不足

优化⽅案:

  • 降低 --max-model-len(如从 65536 降到 32768)
  • 降低 --gpu-memory-utilization(如从 0.9 降到 0.8)
  • 降低 --max-num-seqs(如从 16 降到 8)

更多推荐