<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Workload Characterization | 木叶吟</title><link>https://yezhisheng.me/zh/tag/workload-characterization/</link><atom:link href="https://yezhisheng.me/zh/tag/workload-characterization/index.xml" rel="self" type="application/rss+xml"/><description>Workload Characterization</description><generator>Wowchemy (https://wowchemy.com)</generator><language>zh-Hans</language><copyright> 又拍云提供CDN服务
京ICP备16021535号-1</copyright><lastBuildDate>Sun, 17 May 2026 14:30:00 +0800</lastBuildDate><image><url>https://yezhisheng.me/media/icon_hu585778a5d9441f07b7d64e1beae1be58_320895_512x512_fill_lanczos_center_3.png</url><title>Workload Characterization</title><link>https://yezhisheng.me/zh/tag/workload-characterization/</link></image><item><title>GPU 集群调度：深度学习任务该如何排队、放置与共享</title><link>https://yezhisheng.me/zh/post/gpu-cluster-scheduling/</link><pubDate>Sun, 17 May 2026 14:30:00 +0800</pubDate><guid>https://yezhisheng.me/zh/post/gpu-cluster-scheduling/</guid><description>&lt;p>GPU 集群调度很容易被低估。乍看起来，它像一个熟悉的资源分配问题：任务到达，GPU 有空闲也有忙碌，调度器决定谁先运行。&lt;/p>
&lt;p>深度学习打破了这种简单性。&lt;/p>
&lt;p>训练任务可能运行好几天，需要成组 GPU，并且对 placement topology 非常敏感。推理服务是在线服务，对 latency 敏感，如果不做 batching 或 colocation，往往又难以充分利用 GPU。超参数搜索会启动大量相似 trial，其中大多数注定会被丢弃。LLM workload 还会带来 model parallelism、巨大的 memory footprint、long context，以及开发过程中的 bursty pattern。&lt;/p>
&lt;p>我们的 survey，&lt;a href="https://yezhisheng.me/publication/survey/">Deep Learning Workload Scheduling in GPU Datacenters&lt;/a>，试图整理这个复杂的设计空间。理解这个领域最有用的方式，不是把调度器列成清单，而是看它们面对的一组张力：速度与成本、利用率与隔离、公平性与效率、在线 latency 与集群整体吞吐。&lt;/p>
&lt;h2 id="为什么深度学习调度不一样">为什么深度学习调度不一样&lt;/h2>
&lt;p>传统 HPC 和大数据调度器提供了有用起点，但深度学习任务有自己的物理规律。&lt;/p>
&lt;p>训练任务往往需要 gang scheduling。一个分布式任务必须同时拿到所有请求的 GPU，因此 GPU 不像 CPU slot 那样容易切分。Placement 很重要，因为通信密集型任务如果被放在同一节点内或通过 NVLink 连接，可能比散落在弱链路上快得多。抢占很昂贵，因为模型和优化器状态都很大。同时，训练又具有迭代性，所以少量 profiled iteration 往往能暴露 throughput、memory behavior 和 placement sensitivity。&lt;/p>
&lt;p>推理的压力几乎相反。每个请求相比训练任务很小，但服务有 latency SLO。Batching 可以提高 GPU utilization，但等待组 batch 会增加用户可见 latency。Colocation 可以提升 throughput，但 interference 可能打破 tail latency。调度器必须在平均效率和最坏情况下的用户体验之间做取舍。&lt;/p>
&lt;p>这就是为什么 GPU 集群调度不是一个单一问题。它是一组相关问题，正确答案取决于工作负载。&lt;/p>
&lt;h2 id="训练效率公平性deadline">训练：效率、公平性、Deadline&lt;/h2>
&lt;p>对于训练任务，survey 把调度目标分成三大类。&lt;/p>
&lt;p>第一类是效率。有些调度器通过 priority rule 降低任务完成时间，比如 least attained service 或 progress-aware variant。另一些调度器使用 profiling 或 learning-based method 预测任务时长、速度、placement sensitivity 或未来资源需求。Placement 是效率的核心部分：一个调度器可能在总量上有足够 GPU，却因为集群碎片化而无法满足 locality，导致性能很差。&lt;/p>
&lt;p>第二类是公平性。公平性很微妙，因为在常见 gang-scheduling 场景中 GPU 不可分割，而异构 GPU 对不同任务的价值也不一样。Finish-time fairness、long-term GPU-time fairness 和 heterogeneity-aware fairness 都在回答同一个问题的不同版本：这个任务或租户应得多少 service，实际又获得了多少？&lt;/p>
&lt;p>第三类是 deadline guarantee。Deadline-aware training 研究相对少，但对生产流程很重要。Best-effort 任务可以容忍等待；SLO 任务不行。这类系统需要预测某个任务在不同 placement 和 resource allocation 下能否按 deadline 完成，再决定如何混合 deadline 任务和普通任务。&lt;/p>
&lt;h2 id="训练gpu-如何被使用">训练：GPU 如何被使用&lt;/h2>
&lt;p>目标只是 taxonomy 的一半，另一半是调度器如何使用资源。&lt;/p>
&lt;p>Heterogeneous resource scheduling 认识到“一张 GPU”并不是一个统一单位。不同 model architecture 对新一代 GPU、CPU allocation、memory、network bandwidth 和 storage 的收益不同。一个 cost-effective 调度器应该把任务放到和其 bottleneck 匹配的硬件上，而不是盲目把所有任务都送到最新设备。&lt;/p>
&lt;p>GPU sharing 试图解决 underutilization 问题。许多训练任务无法吃满现代 GPU。通过 MPS、MIG、virtualization、time sharing 或 framework-level co-execution，把多个任务打包到同一设备上可以提高利用率。风险是 interference：调度器必须知道什么时候 sharing 有收益，什么时候它只是悄悄拖慢所有任务。&lt;/p>
&lt;p>Elastic training 会随时间改变分配给任务的 GPU 数量。在需求波动时，它可以减少排队并提升利用率。但 elasticity 不是免费的。资源变化可能需要 checkpoint、reinitialization 或 batch-size adaptation。如果 batch size 的变化影响 convergence，调度器可能提升了系统 throughput，却悄悄改变了模型行为。&lt;/p>
&lt;p>一个大趋势是，训练调度器越来越需要和训练框架协同设计。调度器想要细粒度控制，但框架才知道一个任务是否能安全 pause、resize、share 或改变 batch size。&lt;/p>
&lt;h2 id="推理latency成本throughput">推理：Latency、成本、Throughput&lt;/h2>
&lt;p>推理调度由另一组三角关系塑造：latency、cost 和 accuracy。&lt;/p>
&lt;p>Latency 通常是一等约束。Model serving system 可以通过 batching 提升 throughput，但请求在队列里等待本身就是用户可见 latency。实际调度器往往使用 dynamic batching：服务健康时增大 batch size；latency 接近 SLO 时缩小 batch。&lt;/p>
&lt;p>Cost 来自 cloud instance selection、autoscaling 和 heterogeneous hardware。有些工作负载在 CPU 上更便宜，有些需要 GPU，还有些只有在 batch 足够大时才划算。调度器不仅要决定模型放在哪里，还要决定需要多少 replica、哪些 instance type 值得付费。&lt;/p>
&lt;p>Accuracy 又引入了一个维度。有些系统会在 model variant、ensemble 或 modality 之间选择。小模型便宜快速但准确率较低；大模型更慢但效果更好。这让推理调度变成 policy problem：在给定 latency 或 cost budget 下，可以接受多大 accuracy loss？&lt;/p>
&lt;p>Throughput 技术包括 batching、caching、model residency 和 colocation。但推理 colocation 比训练 colocation 更危险，因为 SLO violation 是即时可见的。调度器需要 interference model、isolation mechanism 或 hardware partitioning，才能让 sharing 安全。&lt;/p>
&lt;h2 id="训练和推理之外">训练和推理之外&lt;/h2>
&lt;p>有些工作负载值得单独分类。&lt;/p>
&lt;p>Hyperparameter optimization 技术上属于训练，但在操作上很不一样。它会启动许多相似 trial，提前剪枝较弱的 trial，并把资源转向更有前途的 configuration。这种结构带来了 early stopping、elastic trial allocation、trial packing、model fusion 和 surrogate-based tuning 的机会。我们的 Hydro 工作就是一个例子：它用 model scaling、trial fusion 和 cluster-level interleaving 让 HPO 少一点 brute force。&lt;/p>
&lt;p>混合训练和推理工作负载是另一个前沿。推理集群往往为了应对 burst 而过度配置，在低流量期间留下 idle GPU。如果系统能在推理需求回来时快速 preempt 或 resize 训练任务，训练就可以借用这部分容量。挑战是，在回收空闲资源的同时仍然尊重在线 SLO。&lt;/p>
&lt;p>这些例子指向一个更大的趋势：未来调度器会越来越 workload-aware。面对深度学习开发的多样性，一个泛泛的 GPU queue 已经太粗糙。&lt;/p>
&lt;h2 id="这个领域正在走向哪里">这个领域正在走向哪里&lt;/h2>
&lt;p>Survey 最后总结了三个至今仍然重要的研究方向。&lt;/p>
&lt;p>第一，emerging workload 会继续改变调度器设计。LLM pretraining、fine-tuning、serving、agentic inference 和 HPO 都暴露出不同瓶颈。调度器需要理解的不只是 GPU 数量，还包括 memory pressure、communication structure、context length、trial similarity 和 elasticity。&lt;/p>
&lt;p>第二，调度决策需要更好的智能。Heuristic 鲁棒且容易部署，mathematical optimization 更有原则但可能很慢，ML/RL-based scheduler 能捕捉复杂 pattern 但难以信任和 benchmark。实际调度器可能会结合三者：fast path 用 heuristic，profiling 用于校准，复杂决策再交给 optimization 或 learning。&lt;/p>
&lt;p>第三，hardware heterogeneity 已经不可避免。生产集群可能包含多代 GPU、专用 interconnect、CPU、storage tier 和 accelerator。异构性带来更好的 cost-performance 机会，但也让公平性更复杂。给一个任务分配老 GPU 和新 GPU，即使用时相同，也很少代表相同服务。&lt;/p>
&lt;p>最简单的总结是：GPU 调度已经不再只是填满空 slot。它是在用户可见目标之下，把工作负载结构匹配到硬件结构。&lt;/p>
&lt;p>这也是这个方向有意思的地方。最好的调度器不只是队列最短的那个，而是理解眼前的深度学习任务是什么、真正需要什么资源，以及集群愿意做出什么 trade-off 的那个。&lt;/p>
&lt;p>Paper: &lt;a href="https://yezhisheng.me/publication/survey/">Deep Learning Workload Scheduling in GPU Datacenters: A Survey&lt;/a>&lt;br>
Project: &lt;a href="https://github.com/S-Lab-System-Group/Awesome-DL-Scheduling-Papers" target="_blank" rel="noopener">Awesome DL Scheduling Papers&lt;/a>&lt;/p></description></item></channel></rss>