news 2026/4/23 20:07: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/4/23 8:35:20

【Linux命令大全】010.设备管理之dumpkeys命令(实操篇)

【Linux命令大全】010.设备管理之dumpkeys命令(实操篇) ✨ 本文为Linux设备管理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。 (关注不迷路哈!!!) …

作者头像 李华
网站建设 2026/4/23 8:32:14

【信息科学与工程学】【财务管理】第二篇 产品线财务基础篇02

产品开发财务评估全周期知识体系 编号 一级分类 二级分类 核心概念/方法/模型 关键特征/数学表述/核心输入 主要功能与应用场景 理论/法规/数据依据 I. 核心理念与价值管理​ 1 根本目标 价值导向 产品开发财务评估的核心目标​ 在产品全生命周期中,通过…

作者头像 李华
网站建设 2026/4/23 8:33:53

新标ISO/IEC 29119:提示词工程认证要求

标准演进与认证必要性‌ISO/IEC 29119作为软件测试的国际标准框架,于2026年初推出更新版本,首次将提示词工程(Prompt Engineering)纳入认证体系。这一变革源于AI在测试领域的快速渗透,传统方法如手动编写测试用例面临效…

作者头像 李华
网站建设 2026/4/23 8:37:42

某单位僵尸木马病毒攻击链全景分析

某单位僵尸木马病毒攻击链全景分析 还是接着上篇溯源博客进行进一步深入排查发现在过去一段时间里,某单位外网面对了一场隐蔽而持续的内部网络安全威胁。攻击者自2025年5月起潜伏于内网,发起了一系列针对关键服务器的、有组织的横向渗透尝试。最初&#…

作者头像 李华
网站建设 2026/4/23 12:51:56

无人机黑飞案

网址:无人机黑飞案

作者头像 李华