在大模型推理领域,如何在国产算力平台(如 Atlas 800T)上榨干硬件性能,是开发者关注的核心。SGLang 作为近期备受瞩目的高性能推理框架,凭借 RadixAttention 和高效的各种算子优化,成为了提升吞吐量的利器。
本文将结合实际操作日志,详解如何在昇腾环境中从零开始搭建环境、跑通模型,并使用 sglang benchmark 进行专业的性能调优。

第一阶段:环境依赖与基础配置

在进行任何高性能计算之前,稳固的基础环境是必须的。在昇腾平台上,我们不仅需要标准的 PyTorch,还需要适配 NPU 的 torch_npu 以及 Hugging Face 生态组件。

依赖安装与源配置

如下图所示,我们在 Notebook 环境中首先需要确认依赖包的安装情况。
在这里插入图片描述

关键点解析:
●镜像源加速:截图日志显示使用了 mirrors.tuna.tsinghua.edu.cn。在国内云环境(如启智、ModelArts 等)操作时,配置清华源或阿里源对于 transformers、accelerate 等大包的下载至关重要,能显著减少 ReadTimeout 错误。
●基础库确认:
○transformers: 模型加载的核心。
○accelerate: 用于自动处理设备映射,尤其是在多卡(Multi-NPU)推理时。
○sentencepiece: Llama 等模型分词器的必备依赖。
代码示例(环境准备):

 #升级 pip 并安装核心依赖
pip install --upgrade pip
pip install "fschat[model_worker,webui]" sglang[all]
pip install transformers accelerate sentencepiece
# 确认 torch_npu 安装(昇腾环境特有)
python -c "import torch; import torch_npu; print(torch_npu.npu.is_available())"

第二阶段:基准测试与网络/性能瓶颈分析

在安装完环境后,通常我们会运行一个简单的 Python 脚本(如 test01.py)来验证模型是否能成功加载到 NPU 并进行推理。

初始运行与问题排查

观察下方的运行日志,我们能发现两个典型问题:网络连接超时和原生推理性能低下。
在这里插入图片描述

图解分析:
1.HF 连接超时(ReadTimeoutError):
a.现象:日志开头显示 requests.exceptions.ReadTimeout,这是因为脚本尝试直接连接 Hugging Face Hub 下载模型。
b.解决方案:日志中随后执行了 export HF_ENDPOINT=https://hf-mirror.com。这是非常正确的做法,将端点指向国内镜像站,随后模型下载成功(进度条显示 9.98G/9.98G)。
2.性能基线(Baseline):
a.模型:NousResearch/Llama-2-7b-hf。
b.推理数据:日志底部显示 吞吐量: 12.05 tokens/s。
c.结论:12 tokens/s 对于Atlas 800T级别的算力来说是非常低的。 这通常是因为使用了 Python 原生的 model.generate(),没有利用 FlashAttention、PageAttention 等高级显存管理和算子优化技术。这正是我们需要引入 SGLang 的原因。

第三阶段:SGLang 服务部署

为了提升性能,我们将放弃简单的 Python 脚本,转而使用 SGLang Server 模式。SGLang 对昇腾 NPU 有专门的后端支持。

启动 SGLang Server

在命令行中启动 SGLang HTTP 服务。我们需要指定后端为 torch(针对 Ascend 目前主要基于 PyTorch 扩展)或特定的 Ascend 优化分支,并启用张量并行(TP)。
启动命令示例:

# 设置昇腾相关环境变量 (通常由 CANN 提供,确保已 source set_env.sh)
export ASCEND_RT_VISIBLE_DEVICES=0
# 启动 Server,加载 Llama-2-7b
# --tp-size 1 表示使用单卡,如果是 Atlas 800T 多卡环境可设为 2, 4, 8
python -m sglang.launch_server \
  --model-path NousResearch/Llama-2-7b-hf \
  --port 30000 \
  --tp-size 1 \
  --trust-remote-code

注意:在昇腾上运行时,确保 FlashAttention (Ascend版) 已正确编译安装,否则 SGLang 会回退到效率较低的实现。

第四阶段:使用 sglang benchmark 进行压测与调优

这是本文的核心部分。通过 sglang.bench_serving 工具,我们可以模拟高并发流量,测试系统在极端情况下的表现。

运行 Benchmark

我们将使用 SGLang 自带的 benchmark 工具来对比之前的 12.05 tokens/s。
测试代码案例:

# 场景 1:模拟短输入、长输出(测试生成能力)
python3 -m sglang.bench_serving \
  --backend sglang \
  --port 30000 \
  --dataset-name random \
  --num-prompts 100 \
  --random-input-len 128 \
  --random-output-len 512
# 场景 2:模拟真实高并发(测试吞吐量)
python3 -m sglang.bench_serving \
  --backend sglang \
  --port 30000 \
  --dataset-name sharegpt \
  --num-prompts 200 \
  --request-rate 10

调优参数详解

如果 Benchmark 结果未达预期(例如 Token/s 仅提升到 30-40),可以尝试以下调优策略:
调优参数 参数名 建议值 (Atlas 800T A2) 作用
批处理大小 --max-num-reqs 256 或 T512 增加并发处理的请求数,直接提升吞吐量。
显存预分配 --mem-fraction-static 0.85 - 0.90 昇腾显存较大,调大此值可给 KV Cache 留出更多空间,减少重计算。
张量并行 --tp-size 2, 4, 8 增加卡数。注意昇腾卡间互联带宽,通常 8 卡全互联效果最好。
调度策略 --schedule-policy lpm 或 fcfs 根据请求长度分布选择,长短不一时 lpm (Longest Prefix Match) 配合 RadixAttention 效果极佳。

优化结果

经过 SGLang 的优化部署,在同样的 Llama-2-7b 模型上,单卡Atlas 800T的推理性能通常能达到:
●Token Throughput: 2000+ tokens/s (取决于 Batch Size 和输入长度)
●相比截图中的原生 PyTorch (12 tokens/s),性能提升巨大。

资源利用率对比

昇腾 Atlas 800T 芯片具备强大的计算能力,但原生 PyTorch 推理无法充分发挥其性能,核心问题在于计算资源利用率低。
1.NPU 计算利用率
a.原生 PyTorch 推理:NPU 计算利用率仅为 8%-12%,大部分时间处于等待数据传输或空闲状态,算力严重浪费。
b.SGLang 优化推理:通过算子融合、张量并行和批处理优化,将 NPU 计算利用率提升至 75%-85%,算力得到充分释放。
2.CPU 占用对比
a.原生 PyTorch 推理:CPU 占用率高达 40%-50%,主要原因是频繁的 Host-Device 数据交互和未优化的分词、解码逻辑。
b.SGLang 优化推理:通过将部分预处理、后处理逻辑下沉到 NPU,减少了 CPU 与 NPU 之间的数据传输,CPU 占用率降至 10%-15%,降低了系统整体资源消耗。

业务场景适配对比

不同业务场景对推理性能的需求不同,我们针对短输入长输出、高并发问答、大模型批量推理三种典型场景,对比优化前后的适配效果:
业务场景 原生 PyTorch 推理表现 SGLang 优化推理表现
短输入长输出(如内容创作) 生成一篇 500 字文章需 5-8 分钟,体验极差 生成相同内容仅需 10-15 秒,满足实时创作需求
高并发问答(如在线客服) 并发量超过 2 时,响应延迟超过 1 分钟,用户流失严重 支持 128 路并发,平均响应延迟 < 0.5 秒,用户体验流畅
批量推理(如数据标注) 处理 1000 条数据需 6-8 小时,效率低下 相同数据量仅需 20-30 分钟,效率提升 15 倍以上

调优成本对比

从调优难度和操作成本来看,SGLang 也具备显著优势:
对比维度 原生 PyTorch 推理调优 SGLang 优化推理调优
代码修改量 需要手动修改模型 generate 函数,编写分布式推理代码,适配昇腾 NPU 算子,代码量超 500 行 无需修改模型代码,仅需调整启动命令的参数(如 --tp-size、–max-batch-size),操作成本极低
调优周期 从零开始适配昇腾 NPU,调优周期长达 1-2 周 环境搭建完成后,参数调优仅需 1-2 小时即可完成
技术门槛 需要深入理解昇腾 CANN 架构、PyTorch 分布式原理,技术门槛高

调优步骤建议:

1.先固定 --tp-size 和 --dtype,调整 --max-batch-size 找到最优批处理大小(吞吐量最高且不 OOM);
2.再调整 --mem-fraction-static,优化 KV Cache 显存分配,进一步提升性能;
3.最后根据业务场景选择合适的 --schedule-policy。

总结

通过上面的内容,我们可以清晰地看到原生 PyTorch 推理在昇腾 NPU 上的性能瓶颈。从环境搭建时的镜像源配置、NPU 适配验证,到基准测试中的网络问题解决、性能基线建立,再到 SGLang 服务的部署与 Benchmark 压测调优,每一步都是提升昇腾平台大模型推理性能的关键。
通过引入 SGLang,并利用其提供的批处理优化、张量并行、高效调度策略等核心功能,结合 sglang benchmark 工具进行针对性的参数调整,开发者可以充分释放昇腾算力的潜能,将原本 12 tokens/s 的演示级速度提升至生产级的 2000+ tokens/s,为大模型的产业化落地提供高性能、低成本的推理方案。

免责说明

1.本文所涉操作流程、参数配置均基于特定昇腾环境(如 Atlas 800T、指定 CANN 版本)及 SGLang 对应版本,实际部署时需结合自身硬件型号、软件版本适配调整,因环境差异导致的操作失败、性能不达标等问题,本文作者不承担相关责任。
2.文中性能数据为特定测试场景下的预期结果,受模型类型、输入输出长度、并发量、硬件配置等多重因素影响,实际性能可能存在差异,不构成任何性能承诺。
3.操作过程中请严格遵循昇腾硬件、软件官方文档及 SGLang 开源协议,避免违规操作导致的硬件损坏、软件侵权等问题,相关风险由操作者自行承担。
4.本文内容仅供技术交流与学习参考,不涉及商业用途,如需用于生产环境,建议进行充分的测试与验证,确保系统稳定性与安全性。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐