
这两年大模型应用越来越普及不少开发者从“调 API”慢慢走向“本地部署模型”“微调模型”“自己搭推理服务”。在这个过程中我们频繁接触到 GPU、显存、CUDA、Ollama、vLLM 这些概念。但真正决定算力上限的其实不只是软件框架还有底层的 AI 芯片架构。从最早 CPU 硬扛矩阵运算到 GPU 通用并行计算一统天下再到 Google TPU、以及面向大模型推理的 LPU 等专用架构陆续出现整个 AI 算力栈正在经历一场明显的“领域专用化”演进。这篇文章会从“架构视角”出发把 AI 芯片的核心设计思路拆开讲清楚。我们会重点分析 GPU、TPU、LPU 三类架构的异同并结合当前大模型部署场景给出架构选型、环境配置、以及常见 GPU 运行问题的排查思路。不管你是做算法训练、推理部署还是底层性能优化这篇文章都值得收藏备用。1. AI 芯片为什么重要算力瓶颈与领域专用架构的起点1.1 从通用计算到专用加速的转变过去的软件开发CPU 是绝对核心。CPU 的设计目标非常明确处理复杂逻辑、多任务调度、分支跳转、中断响应。它需要做到“什么都能跑”所以内部大量空间被控制逻辑、缓存、分支预测器占据真正用于浮点运算的 ALU 单元反而有限。而 AI 计算尤其是深度学习本质上就是大量矩阵乘法、卷积运算、激活函数计算。这些计算有一个显著特点重复、规律、数据并行。你用 CPU 算一版当然也能跑通但效率太低。于是 GPU 开始登场。GPU 最初是给图形渲染设计的。图形渲染的像素处理天然就是高并行的因此 GPU 架构把大量晶体管用在了计算单元上少放控制逻辑。这种“重计算、轻控制”的设计恰好契合 AI 训练的矩阵计算需求。再后来NVIDIA 推出 CUDA把 GPU 的可编程能力开放出来GPU 就不再只是显卡而成了通用并行计算设备。1.2 什么是领域专用架构领域专用架构Domain-Specific Architecture, DSA指的不是通用 CPU而是针对某个特定领域设计的处理器架构。它的核心思路是放弃一部分通用性换取在目标领域内的极致效率。举几个例子GPU 针对图形渲染和并行数值计算做了大量优化这是相对 CPU 的领域专用。TPU 针对 TensorFlow 的矩阵运算做了定制化设计这是比 GPU 更进一步的专用。LPU 针对大语言模型的推理过程做了流水线级优化这是面向 LLM 的专用。所以你可以把 AI 芯片的演进看成一条从“通用”到“专用”的谱系。通用性越强适用范围越广专用性越强目标场景效率越高。理解这个逻辑后面看每一种芯片的设计细节就会清晰很多。1.3 三类核心 AI 芯片一图看懂芯片类型全称核心设计目标最擅长场景GPUGraphics Processing Unit 图形处理器大规模并行计算深度学习训练、通用并行计算、图形渲染TPUTensor Processing Unit 张量处理器矩阵乘法加速TensorFlow 训练与推理、大规模矩阵运算LPULanguage Processing Unit 语言处理器大模型推理加速LLM 生成式推理、低延迟文本生成下面分别展开拆解。2. GPUAI 时代最通用的算力底座2.1 GPU 的核心架构优势先来看 GPU 的硬件基础。GPU 内部有大量流处理器Streaming Multiprocessor, SM每个 SM 里又包含许多 CUDA CoreNVIDIA 架构下。比如消费级显卡和数据中心显卡核心区别往往就在于 SM 数量和显存带宽。GPU 之所以在 AI 训练中占主导核心优势是这三条第一高并行度。一个 GPU 可以同时运行成千上万个线程非常适合矩阵乘法中的逐元素操作和行列运算。第二高显存带宽。训练大模型时需要频繁把权重和中间结果搬进搬出显存带宽决定了数据吞吐速度。GPU 使用 HBM 或 GDDR 显存带宽远高于 CPU 内存。第三成熟软件生态。CUDA 生态经过十几年积累PyTorch、TensorFlow、JAX 等框架都深度适配 CUDA。再加上 cuDNN、TensorRT 这些加速库开发者基本不需要关心底层硬件细节。2.2 GPU 计算的执行模型GPU 的编程模型是 SIMTSingle Instruction, Multiple Threads也就是单指令多线程。你可以这样理解一个核心里所有线程执行同一条指令但作用于不同的数据。比如你想对 1024 个元素做乘法GPU 可以一次性启动 1024 个线程用一条乘法指令同时处理。对应到 AI 框架里一个典型流程是PyTorch 张量操作 ↓ cuDNN / cuBLAS 基础算子 ↓ CUDA Kernel 编译 ↓ GPU SM 调度执行举一个最简单的 CUDA Python 示例用 Numba 库在 GPU 上做向量加法# 文件路径examples/vector_add.py import numpy as np from numba import cuda cuda.jit def vector_add(a, b, c): idx cuda.grid(1) if idx a.size: c[idx] a[idx] b[idx] n 1024 a np.arange(n, dtypenp.float32) b np.ones(n, dtypenp.float32) c np.zeros(n, dtypenp.float32) d_a cuda.to_device(a) d_b cuda.to_device(b) d_c cuda.device_array_like(c) threads_per_block 256 blocks_per_grid (n threads_per_block - 1) // threads_per_block vector_add[blocks_per_grid, threads_per_block](d_a, d_b, d_c) d_c.copy_to_host(c) print(c[:10])这段代码的核心逻辑是把数据从 CPU 内存拷贝到 GPU 显存启动 GPU kernel 并行计算再把结果拷贝回来。这里面涉及一个重要的性能认知数据在 CPU 和 GPU 之间的拷贝代价很高频繁传输会抵消并行计算带来的收益。2.3 为什么训练大模型首选 GPU如果你看今天的主流大模型训练方案几乎都跑在 GPU 集群上。原因有几点大模型训练本质上是大量的 batch matrix multiplyGPU 的 Tensor Core 专门针对这类运算做了硬件级加速。显存可以借助 NVLink、InfiniBand 等方式高速互联多卡训练时通信开销可控。生态最成熟DeepSpeed、Megatron-LM、FSDP 等分布式训练框架都优先适配 NVIDIA GPU。所以GPU 在 AI 芯片里是“综合最优”的方案。它不完全专用但覆盖面最广既有强大的训练能力也能做推理。这也是为什么大家一提到 AI 算力首先想到 GPU。3. TPUGoogle 的张量处理器与脉动阵列设计3.1 TPU 的诞生背景Google 在训练和部署大规模深度学习模型时发现 GPU 虽然有很强的并行计算能力但并不是所有环节都够高效。尤其对于 Transformer 这类以矩阵乘法为主体的模型GPU 在部分场景下的算力利用率和能耗比仍有提升空间。于是 Google 从 2015 年前后开始自研 TPUTensor Processing Unit专门用于加速 TensorFlow 相关的矩阵计算。TPU 的核心理念是既然 AI 训练和推理的绝大部分时间都花在矩阵乘法上那就做一个“为矩阵乘法而生”的处理器。3.2 脉动阵列架构解析TPU 最具代表性的设计是脉动阵列Systolic Array。这是一种数据流驱动的计算结构和 GPU 的大规模并行线程模型完全不同。脉动阵列可以想象成一个二维的乘累加单元网格。数据从阵列边缘流入像心脏泵血一样在阵列中“脉动”流动。每个单元只需要完成一次乘累加运算然后把结果传给相邻单元。这样避免了每做一次计算都要从寄存器或缓存取数据的开销大幅降低数据搬运功耗。对比一下两种架构的工作方式GPU 的方式大量线程并行执行每个线程独立取数、计算、写回。控制逻辑相对复杂但灵活性高。TPU 的方式数据像流水线一样依次流过整个计算阵列中间结果直接传递给下一个单元。数据结构规律功耗低但灵活性差。脉动阵列特别适合矩阵乘法因为矩阵乘法天然有固定数据复用规律。比如计算 C A × B 时A 的一行数据可以被 B 的多列复用脉动阵列通过让数据在不同方向流动把这种复用发挥到极致。3.3 TPU 的高层抽象TPU 与深度学习编译器和 GPU 需要 CUDA 编程类似TPU 也有自己的软件栈。Google 的 XLAAccelerated Linear Algebra编译器会把 TensorFlow 或 JAX 的计算图转换成 TPU 可执行的低级指令。开发者通常不需要直接写 TPU 指令而是通过框架层操作。下面是一个用 TensorFlow 在 TPU 上执行训练的示意代码结构# 文件路径examples/tpu_train.py import tensorflow as tf resolver tf.distribute.cluster_resolver.TPUClusterResolver() tf.config.experimental_connect_to_cluster(resolver) tf.tpu.experimental.initialize_tpu_system(resolver) strategy tf.distribute.TPUStrategy(resolver) with strategy.scope(): model tf.keras.Sequential([ tf.keras.layers.Dense(128, activationrelu), tf.keras.layers.Dense(10, activationsoftmax) ]) model.compile( optimizeradam, losssparse_categorical_crossentropy, metrics[accuracy] ) model.fit(train_dataset, epochs5)注意这段代码必须在有 TPU 的云端环境运行例如 Google Cloud TPU。TPUClusterResolver负责发现 TPU 资源TPUStrategy负责把计算图分发到 TPU 上执行。这里要理解一个关键点TPU 的效率依赖计算图的静态形状和固定数据流模式。如果模型包含大量动态形状、复杂控制流TPU 的优势就会大打折扣。这也是为什么 TPU 一直没有完全取代 GPU 的原因——它太“专”了。4. LPU面向大语言模型推理的专用架构4.1 LLM 推理的瓶颈在哪里在分析 LPU 之前先搞清楚大模型推理为什么会慢。GPU 推理过程主要分两个阶段预填充阶段和解码阶段。预填充阶段输入 prompt 一次性进入模型做并行计算生成第一个 token。这个阶段是 compute-bound算力利用率高。解码阶段模型逐个生成 token每一步都要把所有权重从 HBM 显存加载到计算单元。由于模型权重动辄几百 GB而每次更新只产生一个 token这个阶段变成了 memory-bound也就是受限于显存带宽。这就是为什么 GPU 推理大模型时经常出现“算力大量闲置但速度依然不快”的情况。瓶颈不在计算单元而在权重数据的搬运速度。4.2 LPU 如何解决问题LPULanguage Processing Unit是近年来出现的一种针对大语言模型推理的专用处理器。它的设计目标非常集中提高 token 生成阶段的吞吐和延迟表现。LPU 做了几件关键的事第一把存储和计算尽量做在同一个芯片内部避免频繁访问外部显存。模型权重以更接近计算单元的方式存放减少数据搬运。第二针对自回归解码的串行特点优化流水线。LLM 的 token 生成是逐步产生的LPU 可以把这个串行过程在硬件层面流水化降低每一步的启动开销。第三对 KV Cache 的访问做了更高带宽的架构设计。推理过程中需要频繁读写 KV CacheLPU 把这块访问路径单独加速。不过需要说明LPU 目前更多面向推理场景训练能力并不是它的重点。选择 LPU 之前要确认自己的业务是否主要在文本生成推理而不是训练和微调。4.3 大模型推理的软件层面对比如果你暂时没有 LPU 硬件也可以在现有 GPU 上通过软件层面优化推理效率。目前最主流的选择包括vLLM使用 PagedAttention 优化 KV Cache 管理大幅提升吞吐。TensorRT-LLMNVIDIA 官方的高性能推理框架支持多精度量化。llama.cpp轻量级推理框架可以在消费级 GPU 或 CPU 上运行 GGUF 格式模型。Ollama封装了推理引擎提供开箱即用的本地模型管理能力。下面是一个使用 vLLM 在 GPU 上部署大模型的示例# 文件路径examples/vllm_inference.py from vllm import LLM, SamplingParams model_path /models/Qwen2.5-7B-Instruct llm LLM(modelmodel_path, tensor_parallel_size1) param SamplingParams( temperature0.7, top_p0.9, max_tokens512 ) prompts [ 请用一句话解释什么是领域专用架构。, 写一段 Python 代码实现快速排序。 ] outputs llm.generate(prompts, param) for output in outputs: print(output.outputs[0].text)在实际部署中tensor_parallel_size要按 GPU 数量调整显存不够时还可以开启gpu_memory_utilization参数控制显存占用比例。4.4 架构演进的启示从 GPU 到 TPU 再到 LPU芯片厂商在做的事情其实是一致的找到目标负载最核心的瓶颈然后在硬件和软件栈上围绕这个瓶颈做优化。GPU 针对图像渲染和通用并行计算优化。TPU 针对矩阵乘法优化。LPU 针对 LLM 解码阶段的存储瓶颈优化。这也提醒我们没有所谓“最强的 AI 芯片”只有“最适合某个场景的 AI 芯片”。选型的时候第一件事不是对比算力数字而是想清楚业务场景属于训练、通用推理还是 LLM 推理。5. 架构视角下的模型部署GPU 环境配置与显存优化5.1 本地部署大模型的硬件与软件准备很多读者关心的是消费级 GPU 能不能跑大模型。答案是可以但关键要把握好模型量级和显存的关系。你首先需要查看本机 GPU 是否被正确识别。在 Linux 或 WSL 环境下执行nvidia-smi如果输出正常你会看到类似信息GPU 型号、显存大小、驱动版本、CUDA 版本。如果nvidia-smi命令不存在说明需要安装 NVIDIA 驱动。当前主流的大模型本地部署工具是 Ollama。安装后可以用一条命令拉取模型并运行ollama pull qwen2.5:7b ollama run qwen2.5:7bOllama 会自动检测 GPU。如果检测失败通常会提示类似 “no GPU detected” 或直接使用 CPU 推理速度会明显下降。5.2 如何确认模型运行在 GPU 上运行 Ollama 时我们可以通过nvidia-smi观察显存占用变化确认模型是否真正调用 GPUwatch -n 1 nvidia-smi然后启动模型对话ollama run qwen2.5:7b 你好请介绍一下你自己回到nvidia-smi窗口如果看到 python 或 ollama 进程占用显存说明 GPU 调用成功。如果始终没有显存占用说明推理跑在 CPU 上。对于有 GPU 但没有被 Ollama 识别的情况可以设置环境变量强制指定 GPUCUDA_VISIBLE_DEVICES0 ollama serveCUDA_VISIBLE_DEVICES是一个非常实用的环境变量它可以控制程序看到哪些 GPU 设备。比如你有多张卡想用第 1 和第 3 张可以设置CUDA_VISIBLE_DEVICES0,25.3 显存不足的应对策略消费级显卡常见瓶颈是显存不够。24GB 显存勉强可以跑 7B 参数模型的 FP16 推理但如果模型是 13B 甚至 70B就必须做量化或使用 CPU 卸载。量化是把权重从 FP16 降到 INT8 或 INT4以牺牲少量精度换取大幅降低显存占用。Ollama 中的 GGUF 模型文件通常会区分不同量化等级例如q4_0、q5_K_M等。另外vLLM 可通过max-model-len和gpu_memory_utilization控制缓存占用from vllm import LLM llm LLM( model/models/Qwen2.5-7B-Instruct, gpu_memory_utilization0.85, max_model_len8192 )gpu_memory_utilization0.85表示允许 vLLM 使用 GPU 85% 的显存要给图形显示或其他程序留出余量。这里的关键是理解推理时显存不仅存放模型权重还要存放 KV Cache 和激活值。模型越小、上下文越长KV Cache 占用的显存比例越高。6. 常见 GPU 运行问题与排查思路在实际部署过程中GPU 相关问题是最容易消耗时间的。下面整理几个典型问题和排查方案。6.1 WSL 中 Ollama 无法识别 GPU很多开发者在 WSL 里运行 Ollama发现日志提示 GPU 不可用但 Windows 下nvidia-smi正常。错误信息类似Failed to initialize NVML: GPU access blocked by the operating system这个问题的本质是WSL 需要安装与 Windows 驱动匹配的 WSL 版 CUDA 支持。如果你只在 Windows 安装了普通驱动WSL 内部可能无法直接访问 GPU。排查步骤第一步在 Windows PowerShell 中确认 GPU 型号和驱动版本nvidia-smi第二步进入 WSL执行nvidia-smi如果提示command not found先安装 CUDA Toolkit 的 WSL 版本。如果命令存在但报错则重点检查驱动版本与 WSL 内核是否兼容。第三步更新 WSLwsl --update更新后重启 WSL再执行nvidia-smi验证。若失败重装 NVIDIA WSL 版驱动然后彻底重启 WSL 实例。6.2 Docker 容器中 GPU 无法使用在 Docker 容器里使用 GPU需要安装 NVIDIA Container Toolkit。只有 NVIDIA 驱动是远远不够的容器默认是无法访问宿主机 GPU 设备的。安装完成后运行容器时加--gpus参数docker run --gpus all --ipchost --shm-size8g -it pytorch/pytorch:latest如果遇到could not select device driver with capabilities: [[gpu]]这类错误通常意味着 NVIDIA Container Toolkit 未正确安装或者 Docker 的运行时配置没有生效。还有一种情况是容器能启动但nvidia-smi显示空白这多半是容器镜像缺少 NVIDIA 驱动工具在镜像中添加安装步骤即可。6.3 程序明明有 GPU却使用 CPU 推理PyTorch 程序可能在有 GPU 的环境下默认创建 CPU 张量。一个非常典型的错误示例# 错误示例可能跑在 CPU 上 import torch model MyModel() input_tensor torch.randn(1, 3, 224, 224) # CPU tensor output model(input_tensor) # 模型和输入都在 CPU检查 GPU 是否可用的标准方式import torch if torch.cuda.is_available(): device torch.device(cuda) print(使用 GPU:, torch.cuda.get_device_name(0)) else: device torch.device(cpu) print(CUDA 不可用使用 CPU)正确移动模型的写法import torch model MyModel().to(device) input_tensor torch.randn(1, 3, 224, 224).to(device) output model(input_tensor)这里最容易忽略的是输入张量也要调用.to(device)。如果模型在 GPU而输入在 CPUPyTorch 会抛 TypeError 或 RuntimeError而不是自动切换。6.4 高频问题排查速查表问题现象常见原因解决思路nvidia-smi命令不存在驱动未安装或未加入 PATH安装 NVIDIA 驱动检查 PATH 环境变量WSL 报Failed to initialize NVMLWSL 版驱动未正确安装更新 WSL安装 WSL 版 CUDA ToolkitOllama 没有检测到 GPU驱动不兼容或环境变量未设置检查驱动版本设置CUDA_VISIBLE_DEVICESDocker 无法使用 GPU缺少 NVIDIA Container Toolkit安装 toolkit重启 Docker 服务PyTorch 虽然安装但cuda.is_available()为 False安装的是 CPU 版 PyTorch重新安装 CUDA 版 PyTorch推理时显存不足 OOM模型太大或 KV Cache 过多用量化模型、降低max_model_len、卸载部分层到 CPUGPU 占用高但推理速度慢数据反复在 CPU 与 GPU 之间拷贝减少.cpu()/.item()调用批量处理数据7. 架构选型与工程最佳实践7.1 训练场景的架构选型如果你主要做模型训练和微调GPU 依然是当前最稳妥的选择。原因不只是算力更重要的是生态。当前主流训练框架对 CUDA 的适配度最高遇到问题时能查到的资料也最多。训练时重点关注几个硬件参数显存容量决定单卡能放下的模型规模与 batch size。显存带宽影响数据加载与梯度同步效率。多卡互联影响分布式训练中的通信开销。如果是消费级显卡训练优先考虑用 LoRA 这类参数高效微调方法把训练参数冻结在少量低秩矩阵上显存占用可以大幅降低。7.2 推理场景的架构选型推理场景的选型取决于业务对延迟和吞吐的要求。高吞吐离线推理适合 GPU vLLM批量处理大量请求。低延迟在线推理如果预算允许可以评估 LPU 等专用推理芯片。轻量本地部署优先考虑 Ollama、llama.cpp 这类工具充分利用消费级 GPU。在软件层面通用优化手段包括使用量化模型INT8、INT4。开启 KV Cache 复用。使用 continuous batching 提高硬件利用率。用CUDA_VISIBLE_DEVICES隔离不同任务的 GPU。7.3 工程层面的通用建议第一GPU 环境管理要文档化。记录驱动版本、CUDA 版本、PyTorch 版本、容器镜像标签。GPU 环境最怕“隐式依赖”换一台机器就崩。第二显存管理要留缓冲。不要把所有显存都分配给推理引擎留出 10% 到 15% 给系统调度和临时张量。第三监控不可省。用nvidia-smi配合定时记录工具观察显存和算力利用率。如果算力利用率长期偏低可能是 CPU 端数据预处理成为瓶颈。第四生产环境慎用--gpus all。如果容器并发运行建议明确指定 GPU 编号避免资源争抢。第五多卡并行时优先理解通信拓扑。使用nvidia-smi topo -m查看 GPU 之间的 PCIe 和 NVLink 连接情况尽量让通信频繁的进程分配到同一交换域。8. 总结与下一步学习思路从 CPU 到 GPU再从 GPU 到 TPU、LPUAI 芯片架构的演进逻辑始终没有变找到目标计算负载的核心瓶颈然后从硬件和软件两个层面做定向优化。GPU 靠高并行度和成熟生态占领主流市场TPU 用脉动阵列把矩阵乘法效率推向极致LPU 则为大模型推理的存储瓶颈提供了新的解决思路。对于大多数开发者和技术人员来说短时间内没必要纠结是否立刻更换硬件真正需要做的是把现有 GPU 环境用好。这篇文章里涉及的nvidia-smi排查、Ollama GPU 识别、vLLM 显存参数、PyTorch 设备迁移都属于 AI 工程中的基础能力值得实际操作一遍。建议先从一个小模型开始跑通 GPU 推理全流程然后逐步增加模型参数量观察显存占用与推理速度的变化。实践过程中如果遇到本文没有覆盖的报错优先看两个地方nvidia-smi的驱动输出和框架版本是否匹配。大多数 GPU 相关问题最后都能归结到这两个点上。