add files
本项目面向本地部署、多轮交互和多任务并发的边缘智能体,优化公共上下文的重复计算与 KV Cache 存储。系统以 llama-server 为推理服务,在 llama.cpp 原有 Slot 复用、Host Prompt Cache 和 Unified KV 序列归属能力上,增加 Host Radix 前缀缓存、Direct KV 区间数据通路、Resident KV 驻留共享及多来源前缀选路。
llama-server
决赛阶段在初赛 Host Radix 与 Direct KV 工作的基础上,新增设备侧 Resident KV Sharing,完善公共前缀的独立持有、请求挂接、容量管理和故障回退,并适配 Ascend/CANN 多 Slot 并发执行。应用层重写为 harness-os-com,通过 LangGraph 组织本地任务、会话和工具循环,经 OpenAI 兼容接口调用优化版推理服务,提供运行追踪、请求重放和验证入口。
harness-os-com
底层缓存服务可由 Harness、其他 Agent 框架或普通 Chat Completions 客户端使用。缓存管理在服务端完成,模型权重、注意力计算和各请求的采样状态沿用原有推理路径。
公共系统提示、工具定义、知识文档或会话历史较长,且后续请求持续复用或派生分支时,可利用本项目的前缀共享与复用机制。随附工作台展示三个场景:
financial_research
field_maintenance
edge_incident
内置场景不访问真实企业数据或现场硬件,诊断流程不自动执行重启或回滚。
longest
用户 / 请求清单 -> Agent Harness:组织场景、会话与工具 -> OpenAI Chat Completions 接口 -> llama-server:评估 A / S / H 前缀并选择执行来源 -> 保留活动前缀 / 挂接 Resident / Direct KV 恢复 / 完整 Prefill -> 计算未复用后缀并 Decode -> 返回回答或工具调用结果 -> 确认计算完成后,按条件发布 Resident 与保存 Host 增量
比赛提交主仓库使用 master 分支,核心代码以 Git 子模块固定到具体提交。部署快照、测试材料和演示文件随主仓库提供。
master
项目根目录/ ├── README.md ├── 作品原创承诺书.pdf ├── src/ │ ├── llama.cpp-radix-tree/ # 优化后的推理框架子模块 │ └── harness-os-com/ # Agent 工作台子模块 ├── docs/ # 决赛说明材料 ├── tests/ # 测试入口、实验配置与结果 ├── demo/ # ARM64/CANN 部署与验收包 │ ├── compose.yaml │ ├── Dockerfile.cann │ ├── Dockerfile.harness │ ├── harness-arm64.tar.gz │ ├── llama-source/ │ └── harness-source/ └── presentation/ ├── 决赛演示.pptx └── 决赛演示视频.mp4
部署包面向 Linux ARM64/aarch64、Ascend 910B 系列设备和 CANN 8.5.0。参考实验环境为 openEuler 22.03 LTS SP3、Kunpeng 920、Ascend 910B3,模型为 Qwen3-8B-Q8_0.gguf,KV 类型为 f16。
Qwen3-8B-Q8_0.gguf
/usr/local/Ascend/driver
Host Radix 逻辑位于服务端,可随其他 GGML 后端构建;CPU、CUDA、Metal 等构建选项见 推理框架构建文档。正式性能与容量结论以项目说明书中列明的模型、后端和负载为适用范围。
git clone --branch master --recurse-submodules \ https://gitlink.org.cn/IFCGM24rNS/mxzntdncglxtsjysx.git cd mxzntdncglxtsjysx
已克隆主仓库时,初始化主仓库记录的子模块版本:
git submodule update --init --recursive git submodule status
以下命令在目标 ARM64 昇腾机器上执行。先准备 CANN 基础镜像与 GGUF 模型,完整的宿主机检查、设备映射、模型摘要及故障排查见 demo/README.md。
从项目根目录进入部署包,校验并导入随附 Harness 镜像:
cd demo sha256sum -c harness-arm64.tar.gz.sha256 docker load -i harness-arm64.tar.gz cp .env.example .env
编辑 .env,填写实际部署环境:
.env
CANN_BASE_IMAGE
CANN_ENV
/usr/local/Ascend/cann-8.5.0/set_env.sh
MODEL_DIR
MODEL_FILE
NPU_DEVICE
/dev/davinci0
INCIDENT_STATE
degraded
检查配置、构建模型镜像并启动三个服务:
docker compose config --quiet docker compose build llama-server docker compose up -d --no-build docker compose ps docker compose logs --tail 100 llama-server
模型镜像从 demo/llama-source/ 构建;此部署快照的版本与编译修复已在部署指南中说明。Harness 和软件故障服务共用导入的 ARM64 镜像。需要从源码重新构建 Harness 时,在 demo/ 执行 docker compose build harness,构建过程需要访问 Python 包源。
demo/llama-source/
demo/
docker compose build harness
默认配置启用 Host Radix、Resident KV Sharing 与 longest 选路,使用 16K 总上下文、4 个并行 Slot、Unified KV 和 4096 MiB Host 缓存。该配置用于功能部署;性能实验采用各自记录的配置。
http://127.0.0.1:8080
http://127.0.0.1:8090
http://edge-event-api:8765
等待模型加载后,在 demo/ 执行验收:
sh verify.sh
浏览器访问 Agent 工作台。远程使用时,可建立 ssh -L 8090:127.0.0.1:8090 用户名@服务器地址 隧道后访问同一地址。验收脚本检查健康状态,并对三个助手发起真实模型与工具调用。停止服务使用 docker compose down,会话与日志卷保留。
ssh -L 8090:127.0.0.1:8090 用户名@服务器地址
docker compose down
已有可用 llama-server 时,也可单独运行 Harness。以下安装命令从项目根目录执行:
python3 -m venv .venv source .venv/bin/activate python -m pip install -e ./src/harness-os-com
在一个终端启动模拟事件服务:
python src/harness-os-com/examples/edge_event_api.py \ --host 127.0.0.1 --port 8765 --state degraded
在另一个终端激活同一虚拟环境,进入 Harness 项目并启动工作台:
source .venv/bin/activate cd src/harness-os-com export LLM_BASE_URL=http://127.0.0.1:8080/v1 export LLM_MODEL=local export EDGE_HARNESS_INCIDENT_URL=http://127.0.0.1:8765 python -m uvicorn edge_harness.app:app --host 127.0.0.1 --port 8090
LLM_MODEL 需与模型服务公布的模型名或 --alias 一致。推理框架独立构建、缓存组合及 API 说明见 推理框架 README,Harness 的场景与调用说明见 Harness README。
LLM_MODEL
--alias
服务启动后,检查模型与工作台健康状态;已安装 Harness 的环境可运行真实调用验收:
curl --fail http://127.0.0.1:8080/health curl --fail http://127.0.0.1:8090/health python -m edge_harness.verify --base-url http://127.0.0.1:8090 --chat
容器部署使用前述 demo/verify.sh。验收覆盖助手、数据、会话、请求预览、工具执行和非空最终回答。
demo/verify.sh
激活已安装 Harness 依赖的虚拟环境,在项目根目录执行:
python tests/experiments/agent-tests/scripts/run.py \ --harness-dir ./src/harness-os-com
测试使用假后端或 mock,无需运行大模型;软件服务集成用例启动临时本地 HTTP 服务。前端 Markdown 渲染用例需要 Node.js,未安装时该用例跳过。覆盖范围见 Agent 测试说明。
Host Radix 与 Resident 管理器分别包含 22 和 16 个场景。两个测试源码均显式取消 NDEBUG,Release 构建也保留断言;下面使用 Debug 便于定位失败。示例从项目根目录执行,使用部署包中的源码快照,在已加载 CANN 环境的宿主机上构建并运行:
NDEBUG
source /usr/local/Ascend/cann-8.5.0/set_env.sh cmake -S demo/llama-source -B demo/llama-source/build-tests \ -DCMAKE_BUILD_TYPE=Debug -DGGML_CANN=ON -DGGML_NATIVE=OFF \ -DLLAMA_CURL=OFF cmake --build demo/llama-source/build-tests --parallel 8 \ --target test-server-prompt-cache-radix test-server-kv-resident-cache ctest --test-dir demo/llama-source/build-tests \ -R '^(test-server-prompt-cache-radix|test-server-kv-resident-cache)
面向边缘智能体推理的 llama.cpp KV Cache 共享与复用优化
项目简介
本项目面向本地部署、多轮交互和多任务并发的边缘智能体,优化公共上下文的重复计算与 KV Cache 存储。系统以
llama-server为推理服务,在 llama.cpp 原有 Slot 复用、Host Prompt Cache 和 Unified KV 序列归属能力上,增加 Host Radix 前缀缓存、Direct KV 区间数据通路、Resident KV 驻留共享及多来源前缀选路。决赛阶段在初赛 Host Radix 与 Direct KV 工作的基础上,新增设备侧 Resident KV Sharing,完善公共前缀的独立持有、请求挂接、容量管理和故障回退,并适配 Ascend/CANN 多 Slot 并发执行。应用层重写为
harness-os-com,通过 LangGraph 组织本地任务、会话和工具循环,经 OpenAI 兼容接口调用优化版推理服务,提供运行追踪、请求重放和验证入口。底层缓存服务可由 Harness、其他 Agent 框架或普通 Chat Completions 客户端使用。缓存管理在服务端完成,模型权重、注意力计算和各请求的采样状态沿用原有推理路径。
应用场景
公共系统提示、工具定义、知识文档或会话历史较长,且后续请求持续复用或派生分支时,可利用本项目的前缀共享与复用机制。随附工作台展示三个场景:
financial_research)field_maintenance)edge_incident)内置场景不访问真实企业数据或现场硬件,诊断流程不自动执行重启或回滚。
主要功能与技术路线
longest选择最长可执行前缀,等长时优先 A、S、H;每次请求提交一条选定路径。项目结构与提交材料
比赛提交主仓库使用
master分支,核心代码以 Git 子模块固定到具体提交。部署快照、测试材料和演示文件随主仓库提供。系统环境与依赖
部署包面向 Linux ARM64/aarch64、Ascend 910B 系列设备和 CANN 8.5.0。参考实验环境为 openEuler 22.03 LTS SP3、Kunpeng 920、Ascend 910B3,模型为
Qwen3-8B-Q8_0.gguf,KV 类型为 f16。/usr/local/Ascend/driverHost Radix 逻辑位于服务端,可随其他 GGML 后端构建;CPU、CUDA、Metal 等构建选项见 推理框架构建文档。正式性能与容量结论以项目说明书中列明的模型、后端和负载为适用范围。
获取代码
已克隆主仓库时,初始化主仓库记录的子模块版本:
构建、安装与运行
昇腾容器部署
以下命令在目标 ARM64 昇腾机器上执行。先准备 CANN 基础镜像与 GGUF 模型,完整的宿主机检查、设备映射、模型摘要及故障排查见 demo/README.md。
从项目根目录进入部署包,校验并导入随附 Harness 镜像:
编辑
.env,填写实际部署环境:CANN_BASE_IMAGECANN_ENV/usr/local/Ascend/cann-8.5.0/set_env.shMODEL_DIR/MODEL_FILENPU_DEVICE/dev/davinci0INCIDENT_STATEdegraded检查配置、构建模型镜像并启动三个服务:
模型镜像从
demo/llama-source/构建;此部署快照的版本与编译修复已在部署指南中说明。Harness 和软件故障服务共用导入的 ARM64 镜像。需要从源码重新构建 Harness 时,在demo/执行docker compose build harness,构建过程需要访问 Python 包源。默认配置启用 Host Radix、Resident KV Sharing 与
longest选路,使用 16K 总上下文、4 个并行 Slot、Unified KV 和 4096 MiB Host 缓存。该配置用于功能部署;性能实验采用各自记录的配置。http://127.0.0.1:8080http://127.0.0.1:8090http://edge-event-api:8765等待模型加载后,在
demo/执行验收:浏览器访问 Agent 工作台。远程使用时,可建立
ssh -L 8090:127.0.0.1:8090 用户名@服务器地址隧道后访问同一地址。验收脚本检查健康状态,并对三个助手发起真实模型与工具调用。停止服务使用docker compose down,会话与日志卷保留。Harness 源码安装与运行
已有可用
llama-server时,也可单独运行 Harness。以下安装命令从项目根目录执行:在一个终端启动模拟事件服务:
在另一个终端激活同一虚拟环境,进入 Harness 项目并启动工作台:
LLM_MODEL需与模型服务公布的模型名或--alias一致。推理框架独立构建、缓存组合及 API 说明见 推理框架 README,Harness 的场景与调用说明见 Harness README。测试与验证
功能验收
服务启动后,检查模型与工作台健康状态;已安装 Harness 的环境可运行真实调用验收:
容器部署使用前述
demo/verify.sh。验收覆盖助手、数据、会话、请求预览、工具执行和非空最终回答。Agent 单元与组件测试
激活已安装 Harness 依赖的虚拟环境,在项目根目录执行:
测试使用假后端或 mock,无需运行大模型;软件服务集成用例启动临时本地 HTTP 服务。前端 Markdown 渲染用例需要 Node.js,未安装时该用例跳过。覆盖范围见 Agent 测试说明。
C++ 缓存管理测试
Host Radix 与 Resident 管理器分别包含 22 和 16 个场景。两个测试源码均显式取消
NDEBUG,Release 构建也保留断言;下面使用 Debug 便于定位失败。示例从项目根目录执行,使用部署包中的源码快照,在已加载 CANN 环境的宿主机上构建并运行: