最近看到一条行业消息:范式智能拟出资超 10 亿元采购华为昇腾 950 芯片,用于大模型落地。这类大额算力采购,如果放到前两年,可能更多被视为“硬件新闻”;但在今天,它背后其实是一连串工程问题:大模型究竟需要什么算力?采购的芯片会用在训练还是推理?部署环境怎么搭?模型怎么跑起来?成本怎么控制?代码层面怎么适配?
这篇文章不打算只做新闻复述,而是结合 AI 芯片与大模型部署的实际开发视角,拆解“昇腾 950 / 大模型落地”这条线路上会遇到的工程问题。无论你是做算法、做后端,还是负责平台运维,只要你需要把大模型真正跑在非 NVIDIA 的国产加速卡上,下面这些内容都能作为一份入门参考。
1. 算力采购背后的产业变化:大模型进入“落地驱动”阶段
1.1 超十亿级芯片采购意味着什么
先看消息本身:范式智能拟出资超 10 亿元采购华为昇腾 950 芯片,用途是大模型落地。这里的关键词不是“拟出资 10 亿”,而是“用于大模型落地”。
过去很长一段时间,大模型公司的采购重心是训练算力,目标是尽快把超大模型训练出来。但当模型能力基本稳定,商业产品开始面对真实用户时,算力需求会明显分成两条线:
- 训练集群:偏高性能计算,需要高带宽、低时延,稳定跑数天甚至数周。
- 推理集群:偏高吞吐、低延迟、高并发,直接决定线上服务的成本和体验。
超十亿级别的芯片采购,不太可能只为了做实验跑 benchmark,更可能是在规划长期推理集群或训推一体集群。
从系统设计的角度看,这也反映出一个趋势:大模型竞争的重点正在从“谁能训练出来”转向“谁能把运行成本压下去、把服务稳定性做上来”。
1.2 大模型落地对算力芯片提出的新要求
传统软件采购看的是 CPU 核数、内存大小;传统 GPU 采购看的是显存、算力、互联带宽。大模型落地阶段的芯片选型,还要额外看几项能力:
| 需求维度 | 具体表现 | 典型瓶颈 |
|---|---|---|
| 显存/HBM 容量 | 能否单卡放下更大模型或更长上下文 | 显存不足导致无法加载模型 |
| 推理性能 | 每 token 生成延迟、并发吞吐 | 算力不足导致首 token 延迟过高 |
| 互联带宽 | 多卡并行推理、张量并行通信效率 | 带宽不足导致多卡加速比不理想 |
| 软件生态 | PyTorch、vLLM、MindIE 等框架能否直接支持 | 没有适配层则要手写算子 |
| 成本模型 | 单位 token 成本、卡间通信开销 | 闲置与碎片化严重 |
这些要求放在昇腾 950 这类国产加速芯片上,会更加突出。因为“芯片本身性能够不够”只是第一步,更现实的挑战是:“模型能不能顺利迁移到该芯片上跑,以及跑起来之后能不能稳定扛住线上流量。”
1.3 为什么大模型落地必须认真考虑国产芯片
从工程视角看,大模型应用开发不应该绑定某一种硬件。过去很多团队习惯于默认“必须有 NVIDIA GPU”,连代码里的cuda、device='cuda'都写得很死。一旦换成国产加速卡,才发现硬件抽象层没有做好。
国产 AI 芯片生态已经有长足发展,昇腾是其中相当重要的一支。其背后的异构计算架构提供的并不是“另起炉灶”,而是尽量兼容主流 AI 开发方式。对于开发者来说,学习昇腾不是要抛弃 PyTorch 习惯,而是要学会在已有模型基础上做迁移、适配和调优。
2. 昇腾 950 在芯片体系中的定位与技术认知
2.1 昇腾芯片的产品序列
华为昇腾系列是面向 AI 加速场景的处理器,命名上通常用数字标识代际或定位。昇腾 950 可以理解为昇腾 AI 芯片产品序列中定位较高的一代产品,主要用于数据中心场景下的 AI 训练与推理。
由于官方尚未放出完整的参数白皮书或该型号对应的公开开发文档,本文不建议把这些型号参数当成固定结论来引用。真正从事开发时,你需要关心的其实是以下几点:
- 采用什么样的内存体系,是否能满足大模型显存需求。
- MindSpore、PyTorch、MindIE 等框架层支持是否到位。
- 与同系列老型号相比,算子库、通信库是否更多、更成熟。
- 官方调试工具链是否完整,比如 profiling、dump、算子比对工具。
- 多卡互联方案是什么,是否适合大规模张量并行推理。
说白了,昇腾 950 这个名字在未来一段时间可能会频繁出现在新闻里,但落到代码层面,开发者通常接触的不是芯片本身,而是围绕芯片的软件栈。
2.2 昇腾芯片的异构计算架构
昇腾 NPU 的软件栈核心是异构计算架构,常见叫法是 CANN。它向上支撑 AI 框架,向下屏蔽 NPU 硬件细节。
初次接触昇腾很容易被一堆名词绕晕:CANN、AscendCL、ge、GraphEngine、算子、OM 模型、MindIE……从实用的角度看,可以简化理解为:
- 芯片加速能力非常依赖底层算子实现。
- 模型要先经过适配或转换,才能在 NPU 上高效运行。
- 直接使用 PyTorch 原生并不够,通常需要安装昇腾对应的 PyTorch 适配包。
- 高并发推理场景下,官方推理加速引擎会比纯 Python 方式更稳、更省显存。
这也解释了为什么“采购昇腾 950”只是第一步,后续的工程投入一点都不会少。
2.3 对“昇腾 950 + 大模型”的正确认识
很多读者看到“采购昇腾 950 芯片用于大模型落地”,下意识会觉得:买了芯片,跑大模型不就可以了?但真实工程中,采购大额芯片之后往往要经历这样一个链条:
- 芯片到位后,先做硬件验收和压力测试。
- 再从开源模型仓库下载模型权重。
- 然后是权重格式转换、量化、编译。
- 接着做算子兼容性验证,处理不支持的算子。
- 再部署推理服务,配置并发策略。
- 最后接入业务接口,做监控、日志、告警、灰度发布。
这是一条完整的落地链路,硬件采购只是其中一环。
3. 从训练到推理:大模型算力需求的关键差异
3.1 训练与推理在资源消耗上完全不同
“范式智能拟采购昇腾 950 用于大模型落地”,我更倾向于认为这部分主要面向推理或训推一体场景。因为大模型训练阶段往往需要长时间维护任务,而推理阶段则是 7×24 小时对外服务。
推理和训练的资源需求差异非常明显:
- 训练过程需要保存梯度、优化器状态,显存占用远高于纯模型推理。
- 推理过程更注重“批量处理效率”和“单 token 生成速度”。
- 训练可以容忍秒级甚至分钟的步间延迟,推理必须在百毫秒级别内完成首 token 响应。
- 训练任务通常跑满整个集群,推理任务则要处理波峰波谷,具备弹性收缩能力。
所以在设计推理集群时,我们需要考虑的不只是芯片数量,还包括请求调度策略、缓存策略和批处理大小。
3.2 推理场景中芯片能力的主要衡量维度
当模型部署到昇腾 NPU 上后,性能数据不能只看芯片标称算力,还要看实际推理引擎是否把能力发挥出来。常见观测指标包括:
- 首 token 延迟:用户发出请求后到收到第一个 token 的时间。
- 每 token 解码延迟:生成后续 token 的间隔时间。
- 吞吐量:单位时间内完成的请求数或生成的 token 数。
- 显存占用:模型权重、KV Cache、推理上下文各占多少。
- 功耗与散热:多卡机柜是否能保持稳定运行。
推理优化通常是一个反复实验的过程,不是修改一个参数就能一步到位。
3.3 KV Cache 是推理集群不能回避的话题
大模型文本生成是逐 token 输出的,每生成一个新 token,都需要读取前面所有历史 token 的 Key、Value 向量。KV Cache 的作用就是缓存这些中间结果,避免重复计算。
这块显存会随请求数和上下文长度增加而快速增长。部署昇腾大模型推理集群时,主要观察的点是:
- 请求越多,KV Cache 占用越多。
- 上下文越长,KV Cache 占用越多。
- 如果不做 PagedAttention 这类动态显存管理,显存碎片会非常明显。
- 不同模型层的 KV Cache 是否均匀,也影响到多卡推理负载均衡。
这也是为什么主流推理框架都致力于优化 KV Cache 和显存命中率。昇腾生态下的 MindIE 以及适配层,同样重视这类问题。
4. 昇腾环境搭建与模型部署的快速上手路径
4.1 环境准备:先确认驱动、固件和 CANN 软件包
在拿到昇腾服务器或板卡之后,第一步别急着跑模型,先把底层环境确认清楚。昇腾 NPU 的驱动、固件、CANN toolkit 之间有严格的版本匹配关系,任意一个不匹配,都可能出现“设备看不到”“算子运行失败”“内存申请失败”等奇怪问题。
按照常规流程,你需要确认下面几个信息:
# 1. 检查操作系统与内核版本 uname -m && cat /etc/os-release # 2. 查看昇腾 NPU 设备是否被系统识别 npu-smi infonpu-smi info的作用类似 NVIDIA 的nvidia-smi,会显示当前有几张 NPU 卡、芯片型号、温度、功耗、显存使用情况。如果这里都看不到设备,就说明驱动或固件没有装好,不要去调上层模型。
没有安装 CANN 时,通常会遇到类似错误:
/usr/local/Ascend/ascend-toolkit/set_env.sh: No such file or directory这是因为 CANN toolkit 没有安装到默认路径,或者环境变量没有 source。你需要先完成 CANN toolkit 的安装,再设置环境变量。常见做法是加入 shell 配置:
source /usr/local/Ascend/ascend-toolkit/set_env.sh如果软件包安装在其他目录,请把路径替换成实际安装路径。
4.2 PyTorch 模型迁移到 NPU 的最小示例
如果只是把一个已经训练好的 PyTorch 模型迁移到昇腾 NPU 上推理,最直接的方式是在 Python 中导入昇腾的 PyTorch 适配包,然后用类似 CUDA 的方式把模型从 CPU 放到 NPU。
下面是一段关键的验证代码:
# 文件路径:check_npu.py import torch try: import torch_npu print("torch_npu imported successfully") except ImportError as e: print("torch_npu not found:", e) raise SystemExit(1) # 查看 NPU 设备数量 device_count = torch.npu.device_count() print("NPU device count:", device_count) if device_count > 0: # 获取第一张卡名称 device_name = torch.npu.get_device_name(0) print("NPU device name:", device_name) # 在 NPU 上创建一张随机 Tensor x = torch.randn(4, 4, device='npu:0') y = torch.randn(4, 4, device='npu:0') z = x @ y print("Matmul result shape:", z.shape) else: print("No NPU device found. Please check driver or torch_npu installation.")代码执行后,如果你能看到以下类似输出,说明环境基本没问题:
torch_npu imported successfully NPU device count: 1 NPU device name: xxxx Matmul result shape: torch.Size([4, 4])需要注意:torch_npu的版本必须和你的 PyTorch 版本、Python 版本、CANN 版本一一对应。安装时不要单纯执行pip install torch_npu然后不管,最好的方式是参考昇腾社区提供的版本配套表进行安装。
4.3 模型转换与 OM 模型的概念
在很多昇腾部署方案中,模型最终会转换成 OM 格式,由昇腾推理引擎直接加载。相比直接使用 Python 框架加载 PyTorch 权重,OM 模型执行效率通常更高,部署形态也更接近生产环境。
一个常见的模型转换命令思路如下:
atc --model=model.onnx \ --framework=5 \ --output=model_om \ --soc_version=<实际芯片型号> \ --input_format=ND这里的几个参数含义是:
--model:输入模型路径,这里以 ONNX 为例。--framework:输入模型的框架格式,不同数字代表不同来源。--output:输出的模型名称。--soc_version:芯片型号,不同的昇腾芯片对应的字符串不同。--input_format:输入数据格式。
这段示例中的<实际芯片型号>只是占位符。不同版本的 ATC 工具对芯片型号的枚举方式并不完全一样,建议在使用前先查看当前 ATC 工具支持的芯片列表,或者用npu-smi info显示的型号去对照官方文档。不要照搬新闻里的“昇腾 950”字样去填参数,因为软件工具链里的型号编码和宣传名称往往是两套体系。
4.4 大模型推理时如何加载权重
使用开源大模型在昇腾 NPU 上推理时,理论上可以按下面的路径操作:
- 下载开源模型权重。
- 将模型加载到 PyTorch 中。
- 通过
torch_npu完成设备映射。 - 把模型切换为推理模式。
- 传入输入 token 得到输出 token。
代码核心逻辑如下:
import torch import torch_npu from transformers import AutoTokenizer, AutoModelForCausalLM model_path = "/data/models/your-local-model" # 加载分词器与模型 tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained( model_path, torch_dtype=torch.float16, device_map="auto", ) # 将模型放到 NPU model.to("npu:0") model.eval() prompt = "请用一句话介绍昇腾 AI 芯片" inputs = tokenizer(prompt, return_tensors="pt") inputs = {k: v.to("npu:0") for k, v in inputs.items()} with torch.no_grad(): output_ids = model.generate( **inputs, max_new_tokens=128, do_sample=True, temperature=0.7, ) answer = tokenizer.decode(output_ids[0], skip_special_tokens=True) print(answer)上面这段代码是“最小可跑通”的思路,不是完整的高并发生产方案。如果你部署的是 7B、13B、70B 甚至更大规模的模型,单卡很可能放不下,就需要考虑模型并行、张量并行、流水线并行或推理框架级别的切分策略。
5. 多卡并行与并发控制策略
5.1 多卡环境变量与设备调度
在昇腾环境中,ASCEND_RT_VISIBLE_DEVICES是一个非常重要的环境变量,作用类似 CUDA 的CUDA_VISIBLE_DEVICES。通过它,可以把某几张物理 NPU 卡暴露给当前进程。
# 只使用编号为 0、1、2、3 的四张卡 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3如果是 Docker 容器启动,可以这样限制容器内可见的 NPU 设备。类似下面的命令思路:
docker run -it \ --device=/dev/davinci0 \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ -v /usr/local/Ascend:/usr/local/Ascend \ ascend_npu_image \ bash需要注意,物理设备路径在不同驱动版本中可能会变化。容器挂载设备不能照搬这一条,必须先看宿主机上ls /dev/davinci*的输出。
5.2 大模型并发推理的典型问题
很多团队在小规模验证时只测单进程、单请求,等上了生产才发现并发一高就内存溢出。问题多半出在几个地方:
- 每个请求都创建一份完整模型副本。
- 未启用动态批处理,请求无法共享权重复用。
- KV Cache 没有池化,每个请求预分配最大显存。
- 模型权重在多个进程间重复加载。
优化方向也很明确:优先使用专业的推理服务框架来管理并发,而不是自己写多线程推理。
5.3 什么时候需要多卡推理
不是所有模型都要多卡部署。小模型可以使用单卡多实例方案,提高硬件利用率;大模型则可能需要多卡并行。
多卡推理的核心收益是“能放下更大的模型”,而不仅仅是“提高单请求速度”。真正要多卡并行时,要重点观察加速比:
- 单卡推理延迟是 100ms,双卡不是一定就能到 50ms。
- 张量并行会引入通信开销,卡间互联带宽不够反而更慢。
- 并行切分后,算力可能提升,但显存效率不一定线性增长。
- 需要结合业务请求大小、batch 大小不断压测。
模型部署不是简单堆卡数,上多卡前一定要做基准测试。
6. 大模型落地中的模型量化与内存优化
6.1 为什么大模型落地几乎离不开量化
大模型参数量大,直接使用 FP16 或 BF16 加载可能非常吃显存。比如一个 70B 模型,仅权重就要占用上百 GB 显存。为了让它在有限显存内运行,量化几乎成为必经之路。
常见的做法包括:
- 将 FP16 权重转成 INT8。
- 使用 AWQ 或 GPTQ 类方法做权重量化。
- 推理时动态反量化。
- 结合昇腾硬件特性,使用支持 INT8 算子的部署方案。
量化不只是简单地把浮点数转整数,它可能会让输出质量下降、推理变慢或某些算子不被支持。因此,部署后必须准备专门的评测集,对量化前后效果做对比。
6.2 显存占用拆解
在一个典型的自回归大模型推理过程中,显存大概分布在这些地方:
- 模型权重。
- 优化器状态与梯度(推理阶段一般没有)。
- 推理上下文。
- KV Cache。
- 临时中间激活值。
- 计算框架本身预留的显存池。
如果发现显存溢出,优先确认哪部分占用最大。在昇腾 NPU 上可以通过 NPU 的显存监控工具查看。内存异常增长时,要重点排查是否发生了显存泄漏。
6.3 常见报错与排查思路
这里整理一份高频问题表格,方便你快速对照:
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
启动时报No module named 'torch_npu' | 未安装 PyTorch NPU 适配包 | 根据 PyTorch 版本安装配套 torch_npu |
| NPU 设备显示 0 张卡 | 驱动未装、权限不足或容器未挂设备 | 用npu-smi info检查设备驱动与容器挂载 |
| 执行算子时报设备不支持 | 算子未适配或模型未转成支持格式 | 搜索替代算子,或使用支持该算子的转换工具 |
| 显存不足导致 OOM | 模型过大、KV Cache 没有优化 | 启用量化、降低 batch、缩短上下文、使用推理框架 |
| 推理速度很慢 | 模型来回拷贝、未高效编图 | 使用官方推理引擎或模型编译优化 |
| 时快时慢不稳定 | 请求争抢、没有控制 batch 大小 | 配置合理的并发策略与排队机制 |
| 多卡扩展没有加速 | 通信开销过大或切分维度不合理 | 检查卡间互联,调整并行策略 |
7. 生产级部署的最佳实践与建议
7.1 版本管理要优先于参数调优
昇腾开发中,最麻烦的问题往往来自版本不协同。很多用户一遇到算子报错,马上怀疑代码,结果发现是 CANN、torch_npu、PyTorch 三方版本不一致。
建议在项目初期就固化好版本清单,并在团队内部把环境做成镜像或部署脚本。不要靠某个人手动装环境。
7.2 模型适配要建立回归测试机制
昇腾 NPU 与传统 GPU 在算子实现、内存管理、并发调度上存在差异,不是所有 PyTorch 代码都能无感迁移。迁移之前,建议先做一次模型算子扫描,看看哪些算子可能不兼容。
迁移完成后,要建立多层验证:
- 用固定输入跑出模型输出,和基准 GPU 结果做数值比对。
- 准备一批典型 Prompt 做输出质量评测。
- 用压测工具跑不同并发数,记录延迟与吞吐量。
- 做长稳测试,观察内存是否持续增长。
大模型落地不是“能输出一句话就算成功”,而是要保证长期稳定。
7.3 模型加载与推理服务解耦
测试环境可以一次性把模型加载到 Python 进程里,但生产环境建议将模型文件和推理进程解耦。模型文件单独管理,服务进程只负责加载指定版本。
这样做的优势是:当模型需要更新时,不需要重新编译整个业务系统;当单机出现故障时,也可以快速重新拉起服务。如果能配合灰度发布,还能把新模型先切给一小部分用户观察效果。
7.4 日志、监控与告警体系要提前设计
大模型推理服务的监控同样重要,建议至少关注以下指标:
- 请求量、排队数、超时数。
- 平均首 token 延迟与生成延迟。
- NPU 利用率与显存占用。
- 模型版本与权重哈希。
- 失败请求的状态码分布。
- 推理引擎内是否有算子执行异常。
一旦发现异常,要能通过日志反查到具体是哪个模型版本、哪批请求、哪类输入出了问题。
7.5 从“买芯片”到“建能力”的工程思维
回到范式智能拟出资超 10 亿元采购昇腾 950 芯片这条消息上,我更愿意把它理解成一个长期工程预算的体现。大模型落地需要的产能,绝不只是多少颗芯片,而是一整套能够把芯片算力转化为稳定业务的服务系统。
如果你所在团队也准备采购昇腾这类国产加速卡,建议先问自己几个问题:
- 现有模型代码是否真的能在昇腾 NPU 上跑通?
- 单卡能支撑多大的模型和多高的并发?
- 是否需要多卡并行,是否了解互联和调度方案?
- 推理框架是否已经适配昇腾?
- 团队内部有没有人熟悉昇腾工具链和排错方法?
- 是否已经准备好长期维护一套版本兼容矩阵?
这些问题比单纯关注“昇腾 950 算力强不强”更重要,也更接近大模型落地时的真实工作。
如果想快速验证,可以从一台昇腾服务器、一个小规模开源模型开始,先跑通环境,再逐步增加参数量与并发量。硬件值得投入,但真正决定落地效果的,永远是围绕硬件建立的软件工程能力。