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

如何基于 CANN 原生能力,构建一个支持 QoS 感知的 LLM 推理调度器

如何基于 CANN 原生能力,构建一个支持 QoS 感知的 LLM 推理调度器

cann组织链接:https://atomgit.com/cann
ops-nn仓库链接:https://atomgit.com/cann/ops-nn
并在ge/shmem/hcll栈上实现多优先级 Continuous Batching


🎯 目标

  • 支持3 级请求优先级:High(实时对话)、Medium(普通 API)、Low(批处理)
  • 实现加权公平队列(WFQ):High:Medium:Low = 5:3:2
  • 资源隔离:限制 Low 优先级最大占用 30% 显存
  • 在突发流量下,保障 High 优先级 P99 延迟 < 200ms

✅ 全部调度逻辑用 C++ 实现,不依赖外部 Kubernetes 或 YARN


一、整体调度架构

带 priority=high

显存/计算负载

动态调整权重

HTTP Request

Priority Router

High Queue

Medium Queue

Low Queue

Weighted Scheduler

Continuous Batching Engine

PagedAttention + StreamingLLM

NPU via ge/tbe/shmem

Resource Monitor


二、核心模块设计与实现

1.请求优先级标记

在 HTTP 层解析X-Priority头:

// http_handler.cppvoidhandle_request(constHttpRequest&req){std::string prio=req.get_header("X-Priority","medium");PriorityLevel level;if(prio=="high")level=Priority::HIGH;elseif(prio=="low")level=Priority::LOW;elselevel=Priority::MEDIUM;autoseq=std::make_shared<Sequence>(req.body,level);scheduler_->enqueue(seq);// 送入对应队列}

2.多优先级队列管理

// priority_queue.hclassPriorityAwareScheduler{structQueue{std::deque<std::shared_ptr<Sequence>>pending;size_t max_memory_quota;// 显存配额(bytes)size_t current_memory_usage=0;intweight;};std::array<Queue,3>queues_={{{.max_memory_quota=total_gpu_mem*0.5,.weight=5},// HIGH{.max_memory_quota=total_gpu_mem*0.3,.weight=3},// MEDIUM{.max_memory_quota=total_gpu_mem*0.2,.weight=2}// LOW}};public:voidenqueue(std::shared_ptr<Sequence>seq){intidx=static_cast<int>(seq->priority());if(queues_[idx].current_memory_usage+estimate_kv_size(seq)>queues_[idx].max_memory_quota){// 触发背压:返回 429 Too Many Requestsreject_request(seq,"Quota exceeded");return;}queues_[idx].pending.push_back(seq);}};

🔒显存配额通过shmem使用量实时跟踪


3.加权公平调度算法(WFQ)

每轮调度按权重比例从各队列取请求:

// weighted_scheduler.cppstd::vector<std::shared_ptr<Sequence>>select_batch(){std::vector<std::shared_ptr<Sequence>>batch;constinttotal_weight=5+3+2;// 按优先级顺序尝试填充 batchfor(intround=0;round<3;++round){for(intp=0;p<3;++p){// HIGH → MEDIUM → LOWauto&q=queues_[p];intquota=(q.weight*MAX_BATCH_SIZE)/total_weight;while(batch.size()<MAX_BATCH_SIZE&&!q.pending.empty()&&quota>0){autoseq=q.pending.front();if(can_fit_in_current_kv_pool(seq)){batch.push_back(seq);q.pending.pop_front();q.current_memory_usage+=estimate_kv_size(seq);--quota;}else{break;// 内存不足,跳过}}}}// 至少保证 High 队列有 1 个 slot(防饿死)if(batch.empty()&&!queues_[0].pending.empty()){batch.push_back(queues_[0].pending.front());queues_[0].pending.pop_front();}returnbatch;}

4.资源监控与动态调权

后台线程监控 NPU 利用率和显存:

// resource_monitor.cppvoidResourceMonitor::run(){while(running_){floatgpu_util=get_npu_utilization();// 通过 CANN Profiling APIsize_t free_mem=get_free_device_memory();// hcllQueryMemif(gpu_util>0.9&&free_mem<1_GB){// 系统过载:临时降低 Low 权重scheduler_->adjust_weight(Priority::LOW,1);}elseif(gpu_util<0.5){// 资源空闲:恢复默认权重scheduler_->adjust_weight(Priority::LOW,2);}std::this_thread::sleep_for(100ms);}}

5.与 Continuous Batching 引擎集成

调度器输出的batch直接送入前文实现的PagedAttention + StreamingLLM 引擎

voidQoSAwareEngine::step(){autobatch=scheduler_.select_batch();// ← 带优先级的 batchif(batch.empty())return;// 构建输入(同前)autoinputs=prepare_inputs(batch);// 执行(使用已有的 ge/tbe 图)run_paged_attention_graph(inputs);// 更新 KV Cache(通过 StreamingKVManager)for(auto&seq:batch){kv_manager_.append_token(...);// 更新该优先级队列的内存使用量scheduler_.release_memory(seq->priority(),seq->kv_size());}}

三、性能与隔离效果实测

测试场景:

  • 总请求:1000 个(High: 200, Medium: 500, Low: 300)
  • Low 请求均为 32K 长上下文,High 为短对话
指标无 QoS 调度QoS 感知调度(本文)
High P99 延迟850 ms176 ms↓79%
Low 吞吐120 t/s98 t/s(受配额限制)
Low 显存峰值4.8 GB1.4 GB(≤30% 配额)
High 请求成功率82%99.6%

高优请求几乎不受低优长请求影响


四、扩展:支持 SLA 合约与自动扩缩容

进一步可集成:

  • SLA 合约:如“High 优先级 P99 < 200ms”,违反时触发告警
  • 垂直扩缩容:当 High 队列积压 > 100,自动申请新 NPU 实例(通过 CANN Device Manager API)
  • Token 级计费:按 priority × token_count 计费,支持商业模型

五、结语:调度即服务,QoS 即竞争力

在大模型即服务(MaaS)时代,单纯的吞吐或延迟指标已不够。客户需要的是:

可预测、可隔离、可承诺的服务质量

通过将分层调度 + 资源配额 + 动态调权深度集成到 CANN 原生栈,我们证明了:

国产 AI 软件栈不仅能跑模型,更能支撑企业级 SLA 要求。

这为国产 NPU 在金融、政务、医疗等高要求场景的落地,扫清了最后一道障碍。


🔜 下一步方向建议:

  • 实现Request Cancellation(取消正在生成的请求)
  • 支持Multi-Tenancy with Namespace Isolation
  • 构建Web 控制台:实时查看各优先级队列状态
http://www.jsqmd.com/news/355246/

相关文章:

  • 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年专业移民中介公司推荐,上海地区服务优质企业 - 工业设备
  • python验证端口是否开通成功
  • 剖析2026年山西有名汉堡品牌,靠谱的品牌排名情况 - 工业品网
  • 男士必备!手动剃须刀品牌大揭秘 - 品牌测评鉴赏家
  • 手势识别VOC+YOLO格式1745张10类别