news 2026/5/11 12:03:42

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/5/8 22:34:40

基于Matlab的热成像图像处理系统

- 标题:基于matlab的热成像图像处理系统 - 关键词:matlab GUI界面 数字图像处理 椒盐噪声 高斯噪声 乘性噪声 均值滤波 中值滤波 高通滤波 灰度化 温度异常检测 设置温度阈值 - 步骤:打开图像 选择模糊算法 选择还原算法 对模糊的图像进行还原…

作者头像 李华
网站建设 2026/5/12 1:14:56

MoeKoeMusic v1.5.9:高颜值酷狗第三方客户端

MoeKoeMusic v1.5.9 绿色版是一款优质的酷狗音乐第三方客户端,依托 Vue.js 全家桶开发且直连酷狗官方服务器,既支持多方式账号登录,又拥有丰富的音乐功能与个性化设置,还能实现 VIP 自动领取,为广大用户打造出纯粹的高…

作者头像 李华
网站建设 2026/5/12 1:15:39

java大文件上传处理

Java 大文件上传处理(从简单到生产级完整方案) 在实际项目中,上传几百MB甚至几个GB的文件非常常见。如果直接用普通的 MultipartFile 一次性接收,会导致以下问题: 内存溢出(OutOfMemoryError)…

作者头像 李华
网站建设 2026/5/12 1:15:40

【路径规划】在二维障碍物环境下,应用RRT算法实现移动机器人的路径规划,并在路径上应用卡尔曼定位不确定性附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书…

作者头像 李华
网站建设 2026/5/10 23:36:11

如何使用 Ollama 打造你的本地 AI 助手

这两年,大模型几乎成了每个技术人、内容创作者的标配工具: 写代码、查资料、做总结、当助手,几乎无所不能。 但你有没有认真想过一件事—— 这些能力,其实完全可以跑在你自己的电脑上。为什么我要把大模型“搬回本地”&#xff1f…

作者头像 李华
网站建设 2026/5/11 18:23:10

端到端 NLP 加速:用 `cann-nlp-pipeline` 构建高性能文本服务

端到端 NLP 加速:用 cann-nlp-pipeline 构建高性能文本服务 cann组织链接:https://atomgit.com/cann ops-nn仓库链接:https://atomgit.com/cann/ops-nn 在工业级 NLP 应用中,延迟和吞吐是核心指标。然而,传统方案常将…

作者头像 李华