news 2026/2/10 15:04:29

CANN-LLM:基于昇腾 CANN 的高性能、全功能 LLM 推理引擎

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN-LLM:基于昇腾 CANN 的高性能、全功能 LLM 推理引擎

在上一篇中,我们实现了毫秒级请求取消机制,使系统具备了生产级的鲁棒性。现在,我们将整合前六篇的所有技术成果,构建一个完整的、可开源的 LLM 推理服务项目模板,命名为:

CANN-LLM:基于昇腾 CANN 的高性能、全功能 LLM 推理引擎

本文将提供:

  • 完整的项目目录结构
  • CMake 构建系统配置
  • Docker 部署方案
  • 性能调优 checklist
  • 以及如何贡献到 GitCode 开源社区

目标:让开发者 10 分钟内跑通 INT4 + Continuous Batching + QoS + StreamingLLM 的 Llama-2-7B 服务


cann组织链接:https://atomgit.com/cann
ops-nn仓库链接:https://atomgit.com/cann/ops-nn

一、项目整体架构

cann-llm/ ├── cmake/# CMake 模块│ ├── FindCANN.cmake# 自动查找 CANN 安装│ └── cann-llm-config.cmake ├── src/ │ ├── core/# 核心推理逻辑│ │ ├── engine.cpp# 主推理引擎│ │ ├── scheduler.cpp# QoS + Continuous Batching│ │ ├── kv_manager.cpp# PagedAttention + StreamingLLM│ │ └── cancellation.cpp# 请求取消│ ├── model/# 模型加载与量化│ │ ├── int4_loader.cpp │ │ └── quantize_tool.py │ ├── ops/# tbe 算子注册│ │ ├── int4_gemm.cpp │ │ ├── fused_attention.cpp │ │ └── sparse_attention.cpp │ ├── server/# HTTP/WebSocket 服务│ │ ├── http_server.cpp │ │ └── ws_streamer.cpp │ └── main.cpp# 入口├── tbe_kernels/# Python tbe 算子源码│ ├── int4_gemm.py │ ├── paged_attention.py │ └── streaming_sparse_attn.py ├── tools/ │ ├── quantize_llama.py# 离线量化脚本│ └── profile_cann.py# 性能分析工具├── configs/ │ └── llama2_7b_int4.yaml# 模型配置├── docker/ │ └── Dockerfile# 一键部署├── tests/ │ └── e2e_test.py# 端到端测试├── README.md └── CMakeLists.txt

二、CMake 构建系统(关键片段)

CMakeLists.txt

cmake_minimum_required(VERSION 3.18) project(cann-llm LANGUAGES CXX) # 查找 CANN find_package(CANN REQUIRED) # 编译 tbe 算子(自动调用 te_build) add_custom_target(tbe_ops ALL COMMAND python ${CMAKE_SOURCE_DIR}/tbe_kernels/build_all.py WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tbe_kernels DEPENDS ${CMAKE_SOURCE_DIR}/tbe_kernels/*.py ) # 主程序 add_executable(llm_server src/main.cpp src/core/engine.cpp src/core/scheduler.cpp src/model/int4_loader.cpp src/server/http_server.cpp # ... 其他源文件 ) # 链接 CANN 库 target_link_libraries(llm_server PRIVATE ${CANN_LIBRARIES} pthread dl ) # 依赖 tbe 算子 add_dependencies(llm_server tbe_ops) # 安装规则 install(TARGETS llm_server DESTINATION bin) install(DIRECTORY configs/ DESTINATION etc/cann-llm)

cmake/FindCANN.cmake

find_path(CANN_INCLUDE_DIR ge/ge_api.h PATHS /usr/local/Ascend/ascend-toolkit/latest/include $ENV{ASCEND_HOME}/include ) find_library(CANN_GE_LIB ge PATHS /usr/local/Ascend/ascend-toolkit/latest/lib64 ) set(CANN_LIBRARIES ${CANN_GE_LIB} ${CANN_RUNTIME_LIB} ...) set(CANN_FOUND TRUE)

三、Docker 一键部署

docker/Dockerfile

FROM ascend-cann-toolkit:8.0.RC1 WORKDIR /app COPY . . # 安装 Python 依赖(用于量化 & tbe) RUN pip install torch transformers sentencepiece # 构建 C++ 引擎 RUN mkdir build && cd build && \ cmake .. -DCMAKE_BUILD_TYPE=Release && \ make -j$(nproc) && \ make install # 量化模型(示例) RUN python tools/quantize_llama.py \ --model meta-llama/Llama-2-7b-hf \ --output ./models/llama2-7b-int4 EXPOSE 8080 CMD ["llm_server", "--model", "/app/models/llama2-7b-int4", "--port", "8080"]

构建与运行:

dockerbuild -t cann-llm -f docker/Dockerfile.dockerrun -d --device=/dev/davinci0 --name llm-server cann-llm

四、启动与测试

启动服务

./build/llm_server\--model ./models/llama2-7b-int4\--max-batch-size8\--window-size2048\--sink-size4\--port8080

调用 API

# 1. 提交请求REQ_ID=$(curl-s -X POST http://localhost:8080/generate\-H"X-Priority: high"\-d'{"prompt": "Explain quantum computing in simple terms."}'|jq -r .id)# 2. 流式获取结果curl-N http://localhost:8080/stream/$REQ_ID# 3. 取消请求(如需要)curl-X DELETE http://localhost:8080/requests/$REQ_ID

五、性能调优 Checklist

组件调优项建议值
tbe 算子BLOCK_M / BLOCK_N根据 NPU UB 大小调整(通常 64~128)
PagedAttentionblock_size16 或 32(平衡碎片与管理开销)
Continuous Batchingmax_batch_size8~16(避免长尾延迟)
INT4 GEMMgroup_size128(AWQ 默认)
StreamingLLMsink_size4(论文推荐)
QoSHigh 权重≥5(保障实时性)

💡 使用tools/profile_cann.py分析 kernel 占比,定位瓶颈


六、开源贡献指南(GitCode)

  1. Fork 仓库
    https://gitcode.com/cann-community/cann-llm

  2. 提交 PR 要求

    • 新算子需包含tbe_kernels/xxx.py+ops/xxx.cpp
    • 性能提升需附 benchmark 数据
    • 支持新模型需提供量化脚本
  3. CI/CD 流程

    • 自动编译检查
    • 单元测试(Google Test)
    • 精度回归测试(vs HF FP16)

七、结语:从技术原型到工业基石

通过CANN-LLM项目,我们将前六篇的先进技术——
✅ FusedAttention
✅ INT4 GEMM
✅ Continuous Batching
✅ PagedAttention
✅ StreamingLLM
✅ QoS 调度
✅ 请求取消

——整合为一个开箱即用、生产就绪的推理引擎。

这不仅是一个项目,更是:

国产 AI 软件栈走向成熟、走向生态的关键一步。

我们邀请每一位开发者:

  • 使用它:快速部署自己的 LLM 服务
  • 改进它:贡献算子、调度策略、新模型支持
  • 扩展它:构建多模态、Agent、RAG 等上层应用

🌟CANN-LLM 将于 2026 年 Q2 在 GitCode 正式开源
关注 https://gitcode.com/cann-community 获取最新动态

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 16:22:02

CANN 性能剖析实战:从原始事件到交互式火焰图

CANN 性能剖析实战:从原始事件到交互式火焰图 cann组织链接:https://atomgit.com/cann ops-nn仓库链接:https://atomgit.com/cann/ops-nn 🎯 目标 利用 aclprof 采集 NPU kernel 执行事件转换为 Chrome Trace Event 格式渲染为…

作者头像 李华
网站建设 2026/2/7 16:05:33

leetcode 912. Sort an Array 排序数组

Problem: 912. Sort an Array 排序数组 堆排序可以通过&#xff0c;快速排序会超时 Code class Solution { public:vector<int> arr;void maxheapify(int dad, int len) {int son dad * 2 1;while(son < len) {if(son 1 < len && arr[son 1] > ar…

作者头像 李华
网站建设 2026/2/9 5:06:46

区块链测试规范:智能合约审计标准解读

第一章&#xff1a;智能合约审计的核心意义与行业背景智能合约作为区块链应用的执行引擎&#xff0c;其安全性直接决定去中心化系统的可靠性。2025年DeFi领域因合约漏洞导致的经济损失超$20亿&#xff0c;凸显审计的不可或缺性。对测试从业者而言&#xff0c;审计不仅是漏洞检测…

作者头像 李华
网站建设 2026/2/7 15:47:37

PTA乙级-1002 写出这个数

1002 写出这个数 1002 写出这个数 一、题目基础信息 二、完整可运行代码 三、核心代码解析 1. 输入处理:`string n; cin >> n;` (1)代码含义 (2)关键疑问:为什么不用整数类型(int/long long)? 2. 求和核心:`const string& numStr` 与 `sum += c - 0` (1)…

作者头像 李华
网站建设 2026/2/10 7:31:50

2026必备!千笔,专科生降AI率神器

在AI技术迅速渗透学术写作领域的当下&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;随着查重系统对AI生成内容的识别能力不断提升&#xff0c;AI率超标问题日益严峻&#xff0c;成为影响论文通过率的关键障碍。面对市场上五花八门的降AI率和降…

作者头像 李华