在上一篇中,我们实现了 毫秒级请求取消机制 ,使系统具备了生产级的鲁棒性。现在,我们将整合前六篇的所有技术成果,构建一个完整的、可开源的 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
一、项目整体架构
bash
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
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
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
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"]
构建与运行:
bash
docker build -t cann-llm -f docker/Dockerfile .
docker run -d --device=/dev/davinci0 --name llm-server cann-llm
四、启动与测试
启动服务
bash
./build/llm_server \
--model ./models/llama2-7b-int4 \
--max-batch-size 8 \
--window-size 2048 \
--sink-size 4 \
--port 8080
调用 API
bash
# 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) |
| PagedAttention | block_size | 16 或 32(平衡碎片与管理开销) |
| Continuous Batching | max_batch_size | 8~16(避免长尾延迟) |
| INT4 GEMM | group_size | 128(AWQ 默认) |
| StreamingLLM | sink_size | 4(论文推荐) |
| QoS | High 权重 | ≥5(保障实时性) |
💡 使用
tools/profile_cann.py分析 kernel 占比,定位瓶颈
六、开源贡献指南(GitCode)
-
Fork 仓库
-
提交 PR 要求
- 新算子需包含
tbe_kernels/xxx.py+ops/xxx.cpp - 性能提升需附 benchmark 数据
- 支持新模型需提供量化脚本
- 新算子需包含
-
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 获取最新动态