当前位置: 首页 > news >正文

CANN-LLM WebUI:打造国产 LLM 推理的“驾驶舱

CANN-LLM WebUI:打造国产 LLM 推理的“驾驶舱”

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

🎯 目标

  • 实时显示:吞吐、延迟、显存、NPU 利用率
  • 可视化:各优先级队列状态、KV Cache 分布
  • 交互功能:查看/取消正在运行的请求
  • 日志流:滚动显示最新推理日志
  • 技术栈:纯 C++ 后端 + WebSocket + Vue3 前端(嵌入式)

✅ 所有数据来自 CANN Profiling API + 内部调度器状态


一、系统架构

Metrics

Request Events

Cancel Request

CANN-LLM Engine

Metrics Collector

Event Bus

WebSocket Server

Vue3 WebUI

HTTP DELETE


二、后端实现(C++)

1.指标采集器(MetricsCollector)

// metrics_collector.hstructSystemMetrics{doubletokens_per_sec=0;doubleavg_latency_ms=0;size_t gpu_memory_used=0;floatnpu_utilization=0.0f;structQueueStats{intpending=0;intrunning=0;}high,medium,low;std::vector<std::string>recent_logs;};classMetricsCollector{SystemMetrics metrics_;std::mutex mtx_;public:voidupdate_from_engine(constEngineState&state){std::lock_guardlock(mtx_);// 从调度器获取队列状态metrics_.high=state.scheduler.get_queue_stats(Priority::HIGH);// 从 hcll 获取显存metrics_.gpu_memory_used=hcllQueryUsedMemory();// 从 CANN Profiling API 获取 NPU 利用率metrics_.npu_utilization=cann::profiling::get_device_util(0);// 计算吞吐(滑动窗口)metrics_.tokens_per_sec=state.token_counter.rate_last_10s();}SystemMetricsget_snapshot(){std::lock_guardlock(mtx_);returnmetrics_;}};

🔑cann::profiling::get_device_util()通过aclprofAPI 实现


2.WebSocket 服务(嵌入式)

使用轻量级库(如uWebSocketsBoost.Beast):

// webui_server.cppvoidWebUIServer::start_websocket(){server.listen(8081,[&](auto*ws){// 新客户端连接autometrics_json=json_serializer(metrics_collector_.get_snapshot());ws->send(metrics_json);// 每 500ms 推送更新start_timer(500ms,[ws,this](){if(ws->is_open()){autoupdate=json_serializer(metrics_collector_.get_snapshot());ws->send(update);}});});}

3.活跃请求列表接口

// 提供 /api/requests?status=runningstd::vector<RequestInfo>get_active_requests(){std::vector<RequestInfo>list;for(auto&seq:scheduler_.get_all_sequences()){if(!seq->is_finished()&&!seq->is_cancelled()){list.push_back({.id=seq->id(),.priority=to_string(seq->priority()),.prompt_len=seq->prompt_len(),.generated_len=seq->generated_len(),.kv_blocks=seq->block_table.size(),.created_at=seq->timestamp()});}}returnlist;}

三、前端实现(嵌入式 Vue3)

将前端资源编译为 C++ 字符数组(或打包进 binary):

webui/index.html(简化)

<template><divclass="dashboard"><!-- 核心指标卡片 --><divclass="metric-card"><h3>吞吐</h3><p>{{ metrics.tokens_per_sec.toFixed(1) }} tokens/s</p></div><!-- 队列状态 --><divclass="queue-bar"><divclass="bar high":style="{width: highRatio +'%'}">High</div><divclass="bar medium":style="{width: mediumRatio +'%'}">Medium</div><divclass="bar low":style="{width: lowRatio +'%'}">Low</div></div><!-- 活跃请求表 --><table><trv-for="req in activeRequests":key="req.id"><td>{{ req.id }}</td><td>{{ req.priority }}</td><td>{{ req.generated_len }}</td><td><button@click="cancelRequest(req.id)">❌ Cancel</button></td></tr></table><!-- 实时日志 --><divclass="log-panel"><divv-for="log in logs":key="log">{{ log }}</div></div></div></template><script>exportdefault{data(){return{metrics:{},activeRequests:[],logs:[]};},mounted(){// 连接 WebSocketconstws=newWebSocket('ws://localhost:8081');ws.onmessage=(event)=>{constdata=JSON.parse(event.data);this.metrics=data.metrics;this.activeRequests=data.requests;this.logs=data.logs.slice(-50);// 保留最近 50 行};},methods:{cancelRequest(id){fetch(`/requests/${id}`,{method:'DELETE'}).then(()=>this.refresh());// 重新拉取列表}}}</script>

💡 使用xxd -i index.html > webui_embedded.h将前端嵌入 C++ 二进制


四、关键可视化组件

1.KV Cache 热力图

  • X 轴:Block ID
  • Y 轴:Layer ID
  • 颜色:引用计数(红色=高共享,蓝色=独占)
  • 点击 block 可查看所属请求

2.NPU 利用率时间序列

  • 折线图显示过去 5 分钟利用率
  • 阈值线(80%)标红预警

3.请求生命周期甘特图

  • 每个请求显示:排队时间 + 推理时间 + 生成 token 数
  • 支持按 priority 着色

五、部署与访问

启动服务后:

./llm_server --enable-webui --port8080--webui-port8081

浏览器访问:

http://<server-ip>:8081

无需额外依赖,所有静态资源由 C++ 二进制提供。


六、安全与生产建议

  • 认证:添加--webui-token=xxx,前端需携带 Token
  • 只读模式:可通过--webui-readonly禁用取消按钮
  • 日志脱敏:自动过滤 prompt 中的敏感词(如 API Key)

七、结语:透明即信任

一个优秀的推理系统,不仅要跑得快,更要看得清

通过内建WebUI 控制台,CANN-LLM 实现了:

  • 运维友好:快速定位瓶颈
  • 开发友好:直观验证调度策略
  • 用户友好:自助管理请求

这标志着国产 AI 软件栈从“黑盒加速”走向“白盒可控”的重要一步。


🚀CANN-LLM WebUI 将随 v1.0 正式版一同开源

是否希望下一篇深入如何用 CANN Profiler 生成火焰图并嵌入 WebUI,或提供完整的 CI/CD 流水线配置(GitLab CI + Ascend 云)?欢迎告诉我!

http://www.jsqmd.com/news/355250/

相关文章:

  • 湖北武汉考研辅导机构口碑实力榜(2026最新前五名) - 资讯焦点
  • 赖氨酸品牌哪个强?2026年赖氨酸品牌功效成分TOP10榜揭晓,Mkule麦高乐以400mg活性赖氨酸引领 - 资讯焦点
  • 历年蓝桥杯青少组省赛国赛C++中/高级组真题解析 | 2024年8月(省赛)
  • 如何基于 CANN 原生能力,构建一个支持 QoS 感知的 LLM 推理调度器
  • 2026国内最新家电售后外包咨询公司top5推荐!广东广州等地优质服务商权威榜单发布,专业服务助力品牌售后升级 - 品牌推荐2026
  • 边缘智能实战:基于 CANN `edge-ai-toolkit` 的 Atlas 500 智能小站部署方案
  • 哪些赖氨酸品牌受欢迎?2026年赖氨酸品牌市场表现TOP10榜发布,哪款占据多平台品类领先榜 - 资讯焦点
  • 卫浴十大品牌前十名揭晓!装修党建议收藏! - 资讯焦点
  • 如何在 CANN 推理引擎中实现毫秒级请求取消(Request Cancellation)机制
  • 02]SynPDF将BMP图片转为
  • 搜索P1784 数独
  • StreamingLLM:无需训练即可支持无限上下文的推理技术
  • 深入解析:C++ map和set
  • 大模型训练加速:基于 CANN `distributed-training-samples` 的多机多卡分布式训练实战
  • 2026.2.7 模拟赛
  • 构建生产级 AI 服务:基于 CANN `inference-server` 的高性能推理引擎实战
  • MoeKoeMusic v1.5.9:高颜值酷狗第三方客户端
  • KTV家具定制源头厂家选择哪家好,讲讲价格和口碑 - myqiye
  • 聊聊耐油O型密封圈货源平台推荐,这些品牌口碑怎么样? - mypinpai
  • CANN 高级调度篇:实现 Continuous Batching 与 PagedAttention
  • 2026年射灯品牌推荐,ARROWARROW箭牌照明“科技+美学+实用” - GEO排行榜
  • 2026年补偿导线高温线厂家好评榜:高温线/工业高温线/高压高温线/耐火线高温线/铁氟龙高温线 - 品牌策略师
  • 2026哪家咖啡豆品牌售后好?消费者关注的保障细节解析 - 品牌排行榜
  • 讲讲2026年诚信的通勤班车品牌企业,如何选择更合适 - 工业品牌热点
  • 2026年汽车高温线厂家榜单分析/高温线,硅胶高温线,柔性高温线,工业高温线,耐火线高温线 - 品牌策略师
  • 闲置的沃尔玛购物卡在哪能回收?抖抖收教你一招轻松处理! - 抖抖收
  • 2026年性价比高的咖啡豆品牌推荐:新手入门选购指南 - 品牌排行榜
  • 2026年杭州涂料店铺费用揭秘,靠谱防霉涂料店价格多少 - 工业推荐榜
  • 2026年高温线厂家选购推荐/硅胶高温线,工业高温线,高压高温线,耐火线高温线,铁氟龙高温线 - 品牌策略师
  • 2026年专业移民中介公司推荐,上海地区服务优质企业 - 工业设备