Olympian: Scheduling GPU Usage in a Deep Neural Network Model Serving System
TL;DR 精炼摘要
本文提出了系统Olympian,扩展了TensorFlow-Serving,以在低开销下实现多个深度神经网络(DNN)在单个GPU上公平共享。Olympian通过离线分析GPU资源使用模型,能够并发运行多个大型DNN,并保证每个实例在1-2毫秒内交错执行,从而大幅降低延迟和执行时间的不可预测性。
摘要
Deep neural networks (DNNs) are emerging as important drivers for GPU (Graphical Processing Unit) usage. Routinely, now, cloud offerings include GPU-capable VMs, and GPUs are used for training and testing DNNs. A popular way to run inference (or testing) tasks with DNNs is to use middleware called a serving system. Tensorflow-Serving (TF-Serving) is an example of a DNN serving system. In this paper, we consider the problem of carefully scheduling multiple concurrent DNNs in a serving system on a single GPU to achieve fairness or service differentiation objectives, a capability crucial to cloud-based TF-Serving offerings. In scheduling DNNs, we face two challenges: how to schedule, and switch between, different DNN jobs at low overhead; and, how to account for their usage. Our system, Olympian, extends TF-Serving to enable fair sharing of a GPU across multiple concurrent large DNNs at low overhead, a capability TF-Serving by itself is not able to achieve. Specifically, Olympian can run concurrent instances of several large DNN models such as Inception, ResNet, GoogLeNet, AlexNet, and VGG, provide each with an equal share of the GPU, while interleaving them at timescales of 1-2 ms, and incurring an overhead of less than 2%. It achieves this by leveraging the predictability of GPU computations to profile GPU resource usage models offline, then using these to achieve low overhead switching between DNNs.
思维导图
论文精读
中文精读
1. 论文基本信息
1.1. 标题
Olympian: 深度神经网络模型服务系统中 GPU 使用的调度 (Olympian: Scheduling GPU Usage in a Deep Neural Network Model Serving System)
1.2. 作者
- Yitao Hu (南加州大学)
- Swati Rallapalli (IBM 研究院)
- Bongjun Ko (IBM 研究院)
- Ramesh Govindan (南加州大学)
1.3. 发表期刊/会议
该论文在 EuroSys '19 (欧洲计算机系统会议) 上发表。EuroSys 是计算机系统领域的顶级会议之一,在相关领域具有很高的声誉和影响力。
1.4. 发表年份
2019年
1.5. 摘要
深度神经网络 (DNN) 正在成为 GPU (图形处理单元) 使用的重要驱动力。目前,云服务中普遍提供支持 GPU 的虚拟机 (VM),并且 GPU 被广泛用于 DNN 的训练和测试。使用中间件 (称为服务系统) 来运行 DNN 的推理 (或测试) 任务是一种流行的方式。Tensorflow-Serving (TF-Serving) 就是一个 DNN 服务系统的例子。在本文中,我们考虑了在单个 GPU 上精确调度服务系统中多个并发 DNN 以实现公平性或服务差异化目标的问题,这对于基于云的 TF-Serving 产品至关重要。在调度 DNN 时,我们面临两个挑战:如何在低开销下调度和切换不同的 DNN 作业;以及如何对其使用进行记账。我们的系统 Olympian 扩展了 TF-Serving,以在低开销下实现多个并发大型 DNN 在 GPU 上的公平共享,这是 TF-Serving 本身无法实现的能力。具体而言,Olympian 可以并发运行多个大型 DNN 模型实例,例如 Inception、ResNet、GoogLeNet、AlexNet 和 VGG,为每个实例提供相等的 GPU 份额,同时以 1-2 毫秒的时间尺度交错执行它们,并产生低于 2% 的开销。它通过利用 GPU 计算的可预测性,离线分析 GPU 资源使用模型,然后利用这些模型实现 DNN 之间低开销的切换。
1.6. 原文链接
/files/papers/691d6e408106199151d7e8c0/paper.pdf (已正式发表)
2. 整体概括
2.1. 研究背景与动机
- 核心问题: 随着深度学习的普及,DNN (深度神经网络) 推理任务对 GPU (图形处理单元) 的需求急剧增加。在云环境中,为了提高 GPU 利用率,通常会使用模型服务系统 (Model Serving System),如 Tensorflow-Serving (TF-Serving),来多路复用 (multiplex) 多个推理任务。然而,TF-Serving 默认的调度机制会导致模型执行时间不可预测,即使是资源需求相同的并发 DNN 作业也可能完成时间差异巨大 (最高可达 1.7 倍)。这对于需要可预测延迟的用户应用是不可接受的,也阻碍了服务提供商实现优先级调度或差异化服务。
- 为什么重要:
- 应用层面: 不可预测的延迟使得开发人员难以构建具有稳定性能的用户面向应用 (user-facing applications)。
- 商业层面: 缺乏精细的调度控制意味着模型服务运营商无法提供差异化服务 (differentiated service offerings),例如基于优先级或加权公平共享的计费模式,从而限制了新的收入来源。
- 现有挑战: GPU 驱动程序无法区分来自不同 DNN 作业的内核 (kernel),导致资源争用和不可预测性。传统的 GPU 抢占 (preemption) 开销高昂,且现有系统缺乏对 DNN 结构和需求的感知能力,难以在底层实现高效调度。
- 论文的切入点/创新思路: 论文提出在服务系统中间件 (middleware) 层面实现对 GPU 资源的精细调度,而不是依赖底层 GPU 硬件或驱动程序的抢占。通过在 Tensorflow 节点 (Tensorflow node) 级别进行时间切片 (time-slicing),并利用 DNN 计算的可预测性进行离线性能分析,从而实现低开销的作业切换和资源记账,以达到公平性或服务差异化目标。
2.2. 核心贡献/主要发现
- 提出了 Olympian 系统: 扩展了 TF-Serving,使其能够在单个 GPU 上对多个并发的大型 DNN 进行公平共享和调度,且开销极低。
- 创新的调度机制:
- 时间切片单元: 选择在 Tensorflow 节点 (Tensorflow node) 级别进行交错 (interleaving),而不是依赖昂贵的 GPU 硬件抢占或过于粗粒度的批次级别调度。
- GPU 量子定义: 将量子 (quantum) 定义为 DNN 至少运行一个 GPU 上的 Tensorflow 节点的总持续时间,而非简单的 CPU 计时器时间,这更准确地反映了 GPU 资源的使用。
- 低开销切换: 使用协同式协同调度 (cooperative co-scheduling) 来暂停和恢复整个 CPU 线程组 (gang),避免了高开销的 GPU 上下文切换。
- 离线性能分析: 利用 DNN 计算的可预测性,通过离线分析 (offline profiling) 来估计 GPU 资源使用模型和切换开销,从而在线高效地判断量子何时耗尽。
- 实现了公平性与服务差异化: Olympian 能够为 Inception、ResNet、GoogLeNet、AlexNet 和 VGG 等大型 DNN 模型提供平等的 GPU 份额,并在 1-2 毫秒的时间尺度上交错执行,同时保持低于 2% 的开销。它还能有效支持加权公平共享 (weighted fair sharing) 和优先级调度 (priority scheduling) 等策略。
- 实验验证与优势: 实验证明 Olympian 在异构工作负载下也能实现公平的 GPU 持续时间分配,并且可移植到不同的硬件平台,且其扩展性与 TF-Serving 相媲美,同时 GPU 利用率的牺牲很小 (约 6-8%)。
3. 预备知识与相关工作
3.1. 基础概念
-
GPU (Graphics Processing Unit)
- 定义: GPU 是一种专门用于并行计算的电子电路,最初设计用于加速图像渲染。它包含大量计算核心 (cores),能够同时处理多个数据,因此非常适合数据并行 (data parallel) 任务。
- 结构: GPU 通常由数十个流多处理器 (stream multiprocessors, SM) 组成,每个 SM 又包含数十到数百个计算核心。
- GPU 内核 (GPU Kernel): 是 GPU 上执行的基本数据并行计算单元。程序员将内核计算划分为线程 (threads),这些线程被组织成线程块 (thread blocks)。每个线程块可以分配给一个或多个 SM。线程块又进一步细分为线程组 (warps),这些线程组是并发调度的。
- 抢占 (Preemption): 在早期的 NVIDIA GPU 架构中,抢占只能在内核边界 (kernel boundaries) 进行,即一个内核执行完毕才能切换到另一个。而较新的 Pascal 架构支持指令级抢占 (instruction-level preemption),允许在指令之间中断线程。然而,GPU 抢占通常开销高昂,可能需要数百微秒 (µs) 进行上下文切换 (context switch),因为要保存和恢复大量的并行执行状态。
-
DNN (Deep Neural Networks)
- 定义: DNN 是一种由多层非线性变换组成的机器学习模型,用于从数据中学习复杂的模式和表示。它们在图像处理、语音识别和自然语言处理等领域取得了巨大成功。
- 计算特点: DNN 的计算本质上是高度并行的矩阵乘法和卷积运算,这些运算非常适合 GPU 的架构。
- 推理 (Inference) 与训练 (Training):
- 训练 (Training): 使用大量数据来学习 DNN 的参数 (权重和偏置),这是一个计算密集型的过程。
- 推理 (Inference): 使用训练好的 DNN 模型对新数据进行预测或分类,也称为测试 (testing)。本文主要关注 DNN 推理任务。
-
Tensorflow
- 定义: Tensorflow 是一种开源的编程框架和运行时系统,允许程序员使用过程式语言 (procedural language) 指定数学计算。
- 数据流图 (Data Flow Graph): Tensorflow 将指定的计算转换为数据流图。图中的节点 (nodes) 代表数学运算 (如矩阵乘法、卷积),边 (edges) 代表在操作之间流动的数据张量 (tensors) 和操作之间的依赖关系。
- 执行: Tensorflow 的运行时系统执行这些数据流图。图中的一些节点可以在 CPU 上执行,而另一些需要数据并行操作的节点则在 GPU 上执行。对于深度学习,许多节点 (如
Conv2D) 会利用 GPU 核心加速计算。一个 Tensorflow 节点在 GPU 上运行时,通常会调用一个或多个 GPU 内核 (GPU kernels)。 - 批处理 (Batching): 为了提高 GPU 利用率,应用程序开发者通常会将多个输入数据 (如多张图片) 批处理 (batch) 后一起提交给 DNN 模型进行推理。批处理可以实现数据 I/O 和计算之间的流水线化 (pipelining)。
-
Tensorflow-Serving (TF-Serving)
- 定义: TF-Serving 是一个用于 DNN 推理任务的服务系统 (serving system)。它是一个中间件 (middleware),运行在配备 GPU 的商品服务器 (commodity servers) 上。
- 工作机制: TF-Serving 预部署了多个 DNN 模型。客户端提交作业 (jobs),TF-Serving 在指定模型上执行这些作业,并将结果返回给客户端。多个客户端可以并发地提交多个作业,TF-Serving 会交错 (interleave) 它们的执行。
- 线程模型: TF-Serving 为每个作业从线程池 (thread pool) 中分配一个单独的 CPU 线程。这个线程以广度优先搜索 (BFS) 的方式遍历数据流图中的节点。需要异步执行的子节点 (通常是 GPU 节点) 会被分配给线程池中的另一个 CPU 线程。
Gang(线程组): 在 TF-Serving 的执行模型中,一个单独的作业由一组 CPU 线程 (作者称之为gang) 执行。例如,一个 Inception 作业可能有一个由数百甚至上千个 CPU 线程组成的gang。这些线程负责管理 GPU 节点的执行,并向 GPU 驱动程序队列提交多个并发的内核。
3.2. 前人工作
论文在第 5 节 RELATED WORK 中总结了相关的先前研究,并与 Olympian 进行了对比。主要可以分为以下几类:
-
GPU 多路复用 (GPU Multiplexing) 与内核切片 (Kernel Slicing):
- 许多现有工作通过新颖的内核切片 (kernel slicing) 方法来实现 GPU 多路复用,以克服 GPU 硬件抢占的高成本 [2, 4, 19, 23, 31, 33]。
- 与 Olympian 的区别: 这些方法虽然有效,但会引入抢占开销,并且通常需要程序员指定切片点、针对新框架编写代码或重新编译代码。Olympian 专注于 DNN,在 Tensorflow 节点级别进行时间切片,对预训练模型 (pre-trained models) 起作用,并且不需要修改应用程序。
-
硬件扩展实现 GPU 调度:
- 一些工作提出了用于多编程 GPU 工作负载的硬件扩展,设计了抢占机制来实现 GPU 调度策略 [27]。
- 与 Olympian 的区别: 依赖硬件抢占可能导致高开销。Olympian 依赖于基于离线分析 (offline profiles) 的资源使用计量 (resource usage metering)。
-
GPU 驱动程序层面的调度:
Timegraph[15] 通过修改 GPU 设备驱动程序来处理多任务调度,实现优先级和保留策略以确保高优先级任务的响应性。- 与 Olympian 的区别: 在不同设备上运行
Timegraph需要额外的实现工作。Olympian 的方法是 GPU 无关的,因为它工作在 TF-Serving 这一更高层次的中间件。
-
GPU 虚拟化 (GPU Virtualization):
- 有大量工作探索了 GPU 的全虚拟化 (full virtualization) 和准虚拟化 (para virtualization) [24, 30, 32]。
- 与 Olympian 的区别: 这些工作由于高昂的 GPU 上下文切换开销而性能不佳。虚拟化对于模型服务系统来说可能过于重量级 (heavyweight),而 Olympian 提供的轻量级时间切片可能足以实现隔离目标。
-
GPU 调用截获 (GPU Call Interposition) 与虚拟机 (VM) 中的 GPU 多路复用:
- 一些工作探索了用于远程执行的 GPU 调用截获 [7, 21],或在虚拟化环境中进行 GPU 多路复用 [8, 10, 11, 17, 20]。其中一些还探索了不同 VM 的 GPU 调用调度 [20] 或协同调度 VM 和相关 GPU [11]。
- 与 Olympian 的区别: Olympian 专注于模型服务系统,将 DNN 作为调度单元,并通过分析显式地分配 GPU 时间。
3.3. 技术演进
GPU 调度和资源管理在 DNN 兴起之前就已经是一个研究领域。早期的工作主要集中在如何有效地在 GPU 上运行通用计算 (GPGPU),并解决多任务并发、抢占以及虚拟化等问题。然而,DNN 的特点对 GPU 调度提出了新的要求和挑战:
-
高度并行的计算模式: DNN 的计算模式与 GPU 的并行架构高度契合,导致 GPU 利用率可能非常高,使得多任务共享 GPU 资源的需求更加迫切。
-
模型服务系统的兴起: 随着 AI 应用的落地,专门用于提供 DNN 推理服务的中间件 (如 TF-Serving) 变得越来越重要。这些系统需要高效地管理和调度不同客户端的推理请求。
-
预测性与延迟敏感性: 许多用户面向的 AI 应用对推理延迟有严格要求,因此需要可预测的执行时间,这是传统 GPU 调度方法难以满足的。
-
框架感知调度: DNN 在 Tensorflow 等框架中以数据流图的形式表示,这提供了关于计算结构和依赖的丰富信息。利用这些信息可以在更高层次实现更智能的调度。
Olympian 正是顺应了这些趋势,将 GPU 调度的焦点从底层硬件和驱动程序转移到上层服务中间件,并结合了 DNN 自身的可预测性,以满足现代 AI 服务系统的需求。
3.4. 差异化分析
Olympian 与现有工作的主要区别和创新点在于:
- 调度层次: Olympian 在服务系统中间件 (TF-Serving) 层面进行调度,而不是依赖底层 GPU 驱动或硬件抢占。这使得它能够感知 DNN 的结构 (Tensorflow 节点、数据流图),从而做出更智能的调度决策。
- 调度单元: 以 Tensorflow 节点 (Tensorflow node) 作为时间切片的交错单元,这比指令级抢占开销低,比批次级调度粒度更细,且不依赖程序员指定切片点。
- 量子定义: 定义量子为 DNN 在 GPU 上运行节点的时间总和 (
GPU duration),而不是简单的挂钟时间 (CPU timer),这能更准确地反映 GPU 资源的实际使用。 - 低开销切换机制: 采用协同式协同调度 (cooperative co-scheduling) 来切换 CPU 线程组,避免了 GPU 上下文切换的高昂开销。
- 利用 DNN 可预测性: 通过离线分析 (offline profiling) 来建立 GPU 资源使用模型和开销-Q 曲线 (Overhead-Q curves),利用 DNN 执行的可预测性来指导在线调度,从而在低开销下实现精细调度。
- 平台独立性与可移植性: 由于其在中间件层面的设计,Olympian 继承了 Tensorflow 和 TF-Serving 的平台独立性,可以很容易地移植到不同的 GPU 硬件平台和支持不同框架 (通过模型转换) 的模型,而无需修改。
4. 方法论
4.1. 方法原理
Olympian 的核心思想是,通过在 Tensorflow-Serving 中间件层面实施时间切片 (time-slicing) 调度,来为并发的 DNN (深度神经网络) 作业提供对 GPU (图形处理单元) 的隔离和公平共享。它利用了 DNN 计算在给定批处理大小下相对稳定的特性,通过离线性能分析 (offline profiling) 来预估作业的 GPU 资源消耗,并据此决定在线调度决策。
其背后的直觉是:
- 中间件层面的优势: 只有
TF-Serving中间件理解 DNN 的数据流图和节点抽象,这些信息对于避免不同作业间执行时间的可变性至关重要。底层 GPU 驱动程序无法区分哪些内核属于哪个 DNN 作业。 - 时间切片: 避免昂贵的硬件抢占,通过在逻辑上将 GPU 独占分配给一个作业一小段时间 (即一个
quantum量子) 来实现隔离。在此期间,该作业的 CPU 线程和 GPU 内核都具有独占访问权。 - 协同调度: 为了实现低开销的切换,Olympian 不直接抢占 GPU,而是通过暂停和恢复整个作业的 CPU 线程组 (gang) 来协同调度。
- 可预测性: 深度学习模型的执行,对于给定的模型和批处理大小,其计算模式和资源消耗是相对可预测的。这种可预测性使得离线分析成为可能,从而避免了高开销的在线监控。
4.2. 核心方法详解
4.2.1. 交错单元的粒度选择 (The Unit of Interleaving)
Olympian 优先选择 Tensorflow 节点 (Tensorflow node) 作为 DNN 之间交错 (interleaving) 执行的单元,而不是更细粒度的 GPU 指令或 GPU 内核,也不是更粗粒度的数据单元。
- 选择
Tensorflow 节点的原因:-
低开销: 相较于 GPU 指令级抢占,在 Tensorflow 节点边界进行切换的开销更低。指令级抢占 (instruction-level preemption) 已知开销高昂 (数百微秒)。
-
简洁性与独立性: 在 Tensorflow 节点级别切换具有简单性,且可以以 GPU 独立的方式实现,因为它不依赖于特定的 GPU 硬件功能。切换可以在
Algorithm 1的Line 9(compute(curNode))执行完成后进行。 -
节点执行时间短: 现代 DNN 中的大多数节点设计为具有较短的执行时间。 以下是原文 Figure 4 的结果:

该图像是图表,展示了两种不同批次大小下 Inception 任务的节点持续时间的累计分布函数(CDF)。蓝色线条表示批次大小为 10,而红色线条表示批次大小为 100,横轴为节点持续时间(微秒)。Figure 4: Node duration for one Inception job for two different batch sizes. 图 4 显示,80% 的节点执行时间小于 20 微秒 (µs),超过 90% 的节点执行时间小于 1 毫秒 (ms)。这意味着即使在节点边界切换,也不会显著延长量子持续时间。
-
避免数据单元交错: 避免使用数据单元 (data-unit) 级别交错 (例如,每个图像处理完后切换),因为单个图像处理时间可能很长 (例如 Inception-v4 模型处理一张图像可能需要 22 毫秒),这会导致量子过长,降低调度响应性。
-
4.2.2. 时间切片与量子定义 (Why Time-slicing and how to define the quantum)
Olympian 采用时间切片 (time-slicing) 方法,在每个时间片内,只有一个作业的 CPU 线程可运行,并且该作业独占 GPU。
- 为什么要时间切片: 为了解决并发 GPU 内核调度中可能出现的延迟问题,Olympian 认为协同调度 CPU 线程及其关联的 GPU 内核至关重要。
- 量子 (Quantum) 的定义:
-
CPU 调度中的量子通常定义为固定的时间长度,但这不适用于 GPU,因为 DNN 在固定时间内对 GPU 的使用率可能差异很大 (某些节点在 CPU 上运行,有些在 GPU 上)。
-
Olympian 将量子定义为 DNN 在 GPU 上运行至少一个 Tensorflow 节点的总持续时间。 以下是原文 Figure 5 的结果:

该图像是示意图,展示了GPU使用的持续时间定义。在图中,GPU持续时间由 表示,不同的节点(Node 1 至 Node 4)对应着不同的时间段。各时间段的长度通过标记 、 和 进行说明。Figure 5: Definition of GPU duration. In this example, GPU duration is given by
t _ { 1 } + t _ { 2 } + t _ { 3 }. 图 5 展示了 GPU 持续时间的定义,即所有 GPU 节点执行时间的总和 ()。 -
这个定义更接近理想,因为它允许根据实际的 GPU 使用情况来分配 GPU 时间,从而实现可预测的 GPU 使用持续时间。
-
其他基于实际 GPU 资源使用量的定义 (例如核心使用量、持续时间等) 也是可能的,但这些信息往往不可用或需要高开销的在线分析。Olympian 的定义可以通过离线分析实现。
-
4.2.3. 量子耗尽的估计 (How to estimate that a quantum has elapsed)
为了避免高昂的在线性能分析开销,Olympian 利用 DNN 执行的可预测性,通过离线分析 (offline profiling) 来估计量子何时耗尽。
-
Tensorflow 成本模型 API (Cost Model API): Tensorflow 提供了用于确定数据流图成本模型 (cost model) 的 API。该成本模型可以提供执行一个节点所需的时间 (称为
node cost节点成本)。这个时间近似地衡量了节点所需的 GPU 资源量。 -
开销累积率 (Cost Accumulation Rate):
- 定义 为 DNN 中所有节点成本的总和,通过 Tensorflow 的成本模型 API 获取。
- 定义 为 DNN 在 GPU 上的总持续时间,即 DNN 至少有一个节点在 GPU 上运行的总时间。这个时间通过离线对 Tensorflow 进行插桩 (instrumenting) 来测量每个节点的开始和结束时间获得。
- 那么, 就是 DNN 的平均成本累积率 (cost accumulation rate)。
- 如果决定使用一个量子 (即 GPU 持续时间 ),那么当作业累积的成本达到 时,表示该量子已耗尽:
其中:
- :是 DNN 的成本累积阈值 (cost accumulation threshold),当作业累积的成本超过此值时,触发调度决策。
- :是目标量子时长,即希望 DNN 独占 GPU 的持续时间。
- :DNN 中所有节点成本的总和 (通过 Tensorflow 成本模型 API 获取)。
- :DNN 在 GPU 上的总持续时间 (通过离线插桩测量)。
- 符号解释:
- :作业 的成本累积阈值。
- :目标量子时长(GPU 持续时间)。
- :作业 所有节点成本的总和。
- :作业 在 GPU 上的总持续时间。
-
开销-Q 曲线 (Overhead-Q Curves):
-
Olympian 通过离线分析来确定切换开销 (overhead) 与量子 之间的关系。
-
测量方法: 对于给定的 DNN ,首先计算 和 。然后: (a) 在未修改的 TF-Serving 上运行两个 的实例。 (b) 在 Olympian 上运行两个 的实例。
-
开销定义: 开销定义为 (b) 中两个作业完成时间的差异与 (a) 中完成时间的比值。
-
结果: 在离线进行不同 值的实验,绘制
Overhead-Q曲线。 以下是原文 Figure 8 的结果:
该图像是图表,展示了7个DNN模型的Overhead-曲线。这些曲线分别对应于Inception、GoogLeNet、AlexNet、VGG和多个ResNet变体,反映了不同Q值下的计算开销变化。Figure 8: The Overhead- curves for the 7 DNNs shown in Figure 2. 图 8 展示了 7 个不同 DNN 的
Overhead-Q曲线。这些曲线可以针对不同的批处理大小进行预计算,或者通过线性回归从少量批处理大小的分析结果中推导出来。
-
-
确定 Q (Determining Q):
- 最终由操作员指定一个可容忍的最大开销阈值 (overhead tolerance)。
- Olympian 根据这个阈值在
Overhead-Q曲线中找到对应的 值。 - 如果存在多个 DNN,通常选择所有 DNN 中估计的 值中最大的一个,以确保所有作业的开销都不超过容忍度。
- 一旦确定了 ,就可以计算每个作业的成本累积阈值 。当一个作业累积的成本超过 时,就认为它完成了一个量子,从而触发调度决策。
4.2.4. 作业间切换 (How to switch between jobs)
-
协同式协同调度 (Cooperative Co-scheduling): 每个 TF-Serving 作业都有一个由数千个 CPU 线程组成的
gang(线程组),其中一部分负责跟踪异步 GPU 执行。当一个量子结束时,Olympian 需要暂停当前作业的所有 GPU 执行线程,并恢复另一个作业的 GPU 执行线程。 -
暂停/恢复整个
gang: Olympian 选择协同调度整个gang,而不是只暂停负责 GPU 执行的线程。这意味着在量子结束时,Olympian 暂停当前作业gang中的所有线程,然后恢复另一个作业gang中的所有线程。 -
优势: 这种方法避免了对 GPU 线程进行抢占 (preempt),因为 GPU 线程抢占的开销很高。
-
非完美隔离: 然而,这种方法也意味着并非所有线程都会同时暂停。 以下是原文 Figure 10 的结果:

该图像是一个示意图,展示了在时间轴上多个线程的执行情况。图中标示了不同线程在时间 处的状态,其中某些线程(如 、)在 时刻被挂起,而其他线程并没有同时挂起,体现了线程之间的调度关系。Figure 10: Not all threads in a gang are suspended together. 如图 10 所示,在 时刻,Job 1 的 Thread 1 发现累计成本超过阈值,触发调度。但即使调度器更新了令牌,Job 1 的 Thread 2 和 Thread 3 可能仍需要继续执行直到其 GPU 节点完成。这意味着即使 Job 2 的线程已恢复,Job 1 的一些线程仍可能继续运行,造成一定程度的“溢出”,使得隔离不完全完美。但由于大多数节点执行时间很短 (图 4),这种溢出是最小的。
4.2.5. Olympian 架构 (Olympian Architecture)
Olympian 由两个主要组件组成: 以下是原文 Figure 7 的结果:

该图像是示意图,展示了TF-Serving中的Profiler和Scheduler组件如何处理客户端作业。Profiler用于新模型的配置,而Scheduler负责根据管理员配置的策略调度GPU资源,以实现公平的资源分配。
Figure 7: Olympian's profiler and scheduler. 图 7 展示了 Olympian 的架构。
-
Profiler (分析器):
- 功能: 离线 (offline) 分析 DNN 模型。
- 过程:
- 使用 Tensorflow 的成本模型 API 获取每个节点的成本。
- 通过插桩测量 DNN 在 GPU 上的总持续时间 ()。
- 计算成本累积率 ()。
- 通过运行对照实验 (Olympian vs. TF-Serving) 生成
Overhead-Q曲线。 - 根据操作员指定的开销容忍度 (overhead tolerance) 确定全局量子 。
- 计算每个 DNN 的成本累积阈值 。
- 特点: 离线执行,对在线推理任务无额外开销。对模型进行一次分析后,结果可以重复使用,并且可以通过线性回归预测不同批处理大小的成本。
-
Scheduler (调度器):
- 功能: 在线 (online) 估计量子完成时间,并执行协同式协同调度。
- 过程:
- 每个作业在注册时会获得一个
token(令牌),用于控制对 GPU 的独占访问。 - 作业的会话对象 (
srInfo) 维护一个所有线程共享的累计成本 (cumulatedCost) 变量。 - 当一个 GPU 节点完成执行时,管理该节点的线程会更新累计成本。
- 如果累计成本超过了预设的阈值 ,则触发调度决策。
- 调度器根据配置的调度策略 (例如公平共享、优先级调度) 决定下一个获得 GPU 独占访问权的作业,并更新
token。 - 当前作业的线程在
scheduler.yield()调用中被暂停 (如果它不再拥有token),等待其token再次被激活。
- 每个作业在注册时会获得一个
- 修改: 对 TF-Serving 的处理循环 (
Algorithm 1) 进行了最小限度的修改。
4.2.6. Olympian 调度逻辑 (Algorithm 2 Olympian Scheduling logic)
Olympian 的调度器相对简单,对 TF-Serving 的处理循环进行了少量修改。核心思想是追踪每个作业的累计成本,当成本达到阈值时触发调度决策。
算法解释:
-
SEssION::RuN函数 (Line 1-7):- 当一个新的推理会话 (
session) 启动时,它会创建一个SessRunInfo对象 (srInfo) 来存储会话的相关信息 (会话 ID、运行 ID)。 - 获取模型的数据流图的根节点 (
root)。 - 通过
scheduler.register(srInfo)向调度器注册此会话,使其参与调度。 - 初始化
cumulatedCost为 0,这是该作业累计的 GPU 节点成本。 - 调用
Process函数开始处理数据流图。 - 会话结束后,通过
scheduler.deregister(srInfo)从调度器中注销。
- 当一个新的推理会话 (
-
ProcEss函数 (Line 8-24):- 这是 TF-Serving 原始处理循环的修改版本。它接收根节点、会话信息和累计成本作为参数。
- 将根节点推入广度优先搜索队列 (
bfsQueue)。 - 进入主循环,只要队列不为空就继续:
- (Line 11): 从队列中取出一个当前节点。
scheduler.yield(srInfo)(Line 12): 这是 Olympian 引入的关键点。当前线程在这里调用调度器的yield方法。如果当前作业不再拥有 GPU 的独占访问权限 (即其token已被收回),则该线程在此处会被暂停,直到调度器再次授予其token。compute(curNode)(Line 13): 执行当前节点。- 成本更新与调度决策 (Line 14-18):
- 如果
curNode是一个 GPU 节点 (curNode.isGPUNode()):- 将该节点的成本添加到
cumulatedCost()。 - 如果
cumulatedCost达到了预设的threshold(),这意味着当前作业的量子已经耗尽。 - :从累计成本中减去阈值,为下一个量子开始记账。
scheduler.updateTokenInfo(srInfo):调用调度器更新令牌信息,这会触发调度器选择下一个获得 GPU 访问权的作业,并将其token传递给新选定的作业。
- 将该节点的成本添加到
- 如果
- 子节点处理 (Line 19-24):
- 遍历当前节点的所有子节点 (
childNode)。 - 如果子节点不是异步执行的内核 (
!childNode.kernelIsAsync()) (通常是 CPU 节点或不涉及 GPU 的同步操作),则将其推入bfsQueue。 - 否则 (如果是异步执行的内核,通常是 GPU 节点),从线程池中获取一个新线程 (
threadPool.fetch()),并让该线程调用Process函数来处理这个子节点,从而实现并发执行。
- 遍历当前节点的所有子节点 (
关键点:
cumulatedCost(累计成本): 这是每个作业共享的变量,用于追踪其在 GPU 上执行的节点成本总和。threshold(阈值): 等同于 ,是离线分析确定的成本累积阈值,表示一个量子结束。scheduler.yield(srInfo): 是实现协同调度的关键。它允许调度器在作业的自然暂停点 (节点执行之间) 介入,并根据token状态暂停或恢复线程。
4.2.7. 调度策略 (Scheduling Policies)
Olympian 可以灵活地实现多种调度策略,论文中实现了三种:
- 公平共享 (Fair Sharing): 作业以轮询 (round-robin) 的方式调度,每个作业获得一个量子 (quantum) 的 GPU 独占时间。这旨在为所有并发作业提供平等的 GPU 资源访问。
- 加权公平共享 (Weighted Fair Sharing): 这是公平共享的变体。作业在轮询时,根据其被分配的整数权重 (integer weight) 获得相应数量的量子。例如,权重为 2 的作业在轮询时将获得两个量子,而权重为 1 的作业只获得一个。这允许服务提供商根据客户需求或服务级别协议 (SLA) 提供差异化服务。
- 优先级调度 (Priority Scheduling): 在任何给定时间点,具有最高优先级的可运行作业 (runnable job) 将获得下一个量子。这确保了关键任务能够优先获得 GPU 资源。
5. 实验设置
5.1. 数据集
实验中使用了多种业界主流的深度神经网络模型,这些模型本身就是“数据集”的代理,因为它们在推理时处理的是各种类型的数据(如图像)。
-
模型列表:
Inception-v4[25] (简写为Inception)ResNet-152[13] (简写为ResNet)GoogLeNet[26]AlexNet[16]VGG[22]ResNet-50[13]ResNet-101[13]ResNet-152[13]
-
模型来源与兼容性:
- 除
Inception以外,所有模型最初都是在 Caffe [14] 框架上开发的,然后使用caffe-tensorflow工具 [3] 转换为 Tensorflow 可读格式。这表明 Olympian 继承了 TF-Serving 的框架兼容性和可移植性。
- 除
-
输入数据: 客户端提交的数据通常是图像批次 (batches of images)。在实验中,通常每个客户端顺序提交 10 个批次 (batches),每个批次的大小 (batch size) 通常为 100。
以下是原文 Table 2 的结果,展示了在复杂工作负载中使用的 7 个 DNN 的详细信息:
Model Batch Size Nodes GPU Nodes Runtime (s) Inception 150 15599 13309 0.81 GoogLeNet 200 18980 15948 1.09 AlexNet 256 23774 19902 1.13 VGG 120 11297 9965 0.83 ResNet-50 144 14472 12280 0.79 ResNet-101 128 14034 12082 0.85 ResNet-152 100 12495 10963 0.80
该表格展示了不同模型在特定批处理大小下的节点总数、GPU 节点数以及单次运行时间。这些数据突出显示了不同 DNN 模型在计算复杂性和资源需求上的多样性。
5.2. 评估指标
论文中使用了多个评估指标来量化 Olympian 的性能和效果,主要包括:
-
开销 (Overhead)
- 概念定义: 开销衡量的是 Olympian 在调度和切换 DNN 作业时引入的额外时间成本。它通过比较 Olympian 和未修改的 TF-Serving 在相同工作负载下的完成时间差异来计算。开销越低,系统的效率越高。
- 数学公式:
- 符号解释:
- :在 Olympian 系统下,所有作业完成时的总时间。
- :在未修改的 TF-Serving 系统下,所有作业完成时的总时间。
-
GPU 持续时间 (GPU Duration)
- 概念定义: GPU 持续时间是 DNN 在 GPU 上实际占用资源的总时间。在 Olympian 的定义中,这特指 DNN 至少运行一个 Tensorflow 节点在 GPU 上的总时间。这是衡量 GPU 资源分配公平性的关键指标。
- 数学公式: 论文中没有给出显式的公式,但其定义为: 或更精确地,如图 5 所示,是所有 GPU 节点执行时间段的并集长度。
- 符号解释:
- :DNN 在 GPU 上的总持续时间。
- :DNN 中所有在 GPU 上执行的节点集合。
- :节点 在 GPU 上开始执行的时间。
- :节点 在 GPU 上结束执行的时间。
- 实际上,更准确的测量方式是统计在测量窗口内,GPU 上至少有一个属于该作业的节点在运行的总时间。
-
作业完成时间 (Job Finish Times)
- 概念定义: 作业完成时间是指从客户端发送请求到接收到响应的总时间。该指标用于衡量系统对用户请求的响应速度和可预测性,也是评估调度公平性的直观指标。
- 数学公式:
- 符号解释:
- :客户端接收到推理结果响应的时间。
- :客户端发送推理请求的时间。
-
GPU 利用率 (GPU Utilization)
- 概念定义: GPU 利用率衡量的是 GPU 资源在给定时间内被有效使用的百分比。通常通过监控工具(如
NVIDIA System Management Interface)周期性采样得到。高利用率通常意味着资源被有效利用,但过高的利用率可能导致高延迟。Olympian 需要在公平性和利用率之间进行权衡。 - 数学公式: 论文中未给出具体计算公式,但通常定义为:
- 符号解释:
- :GPU 实际处理任务的时间。
- :GPU 在测量周期内的总可用时间。
- 概念定义: GPU 利用率衡量的是 GPU 资源在给定时间内被有效使用的百分比。通常通过监控工具(如
5.3. 对比基线
论文主要将 Olympian 的性能与 默认的 Tensorflow-Serving (TF-Serving) 进行了比较。
-
默认 TF-Serving 的特点:
- 允许每个作业并发访问 GPU,将多个内核排队到 GPU 驱动程序中。
- 完全依赖底层 GPU 硬件来调度内核,不感知 DNN 结构。
- 其调度结果是不可预测的,即使是资源需求相同的作业也可能完成时间差异巨大。
- 无法实现优先级调度或加权公平共享。
-
为什么选择默认 TF-Serving 作为基线:
-
它是业界广泛使用的 DNN 模型服务系统,是 Olympian 改进和扩展的基础。
-
通过与默认 TF-Serving 的对比,可以清晰地展示 Olympian 在解决不可预测性、实现调度策略方面的核心优势。
-
这种对比也有助于量化 Olympian 引入的开销和对 GPU 利用率的影响。
此外,论文还间接与一些其他相关工作进行了概念上的对比,例如依赖 GPU 硬件抢占、驱动程序修改或全虚拟化的解决方案,强调了 Olympian 在中间件层面的独特优势。
-
6. 实验结果与分析
6.1. 核心结果分析
6.1.1. GPU 隔离的验证 (Demonstrating GPU Isolation)
-
同构工作负载 (Homogeneous Workload):
-
实验设置:10 个并发的 Inception 客户端,每个客户端顺序提交 10 个批次,批处理大小为 100。
-
结果: 以下是原文 Figure 11 的结果:

该图像是图表,展示了在均匀负载下,TF-Serving(蓝色)和Olympian公平共享(红色)在不同客户端ID上的完成时间(秒)。两者的完成时间在客户端ID范围内保持相对一致,表明Olympian在公平性上与TF-Serving相似。Figure 11: Fair-sharing: Finish times on a homogeneous workload. 图 11 显示,在 Olympian 的公平调度策略下,所有客户端的完成时间几乎相同,都在 48 到 50 秒之间。而默认 TF-Serving 的完成时间差异很大,在 42 到 50 秒之间,最高可达 1.7 倍。这强有力地证明了 Olympian 能够提供高程度的 GPU 隔离和可预测性。
-
调度间隔持续时间: 以下是原文 Figure 12 的结果:

该图像是一个图表,展示了调度间隔的持续时间(单位:秒)与持续时间 ID 之间的关系。数据呈现出多个高峰和低谷,反映了不同调度任务的时间波动,平均调度时间约为oldsymbol{ ext{1.8 ms}}。Figure 12: Duration of scheduling interval, average 图 12 显示,调度间隔的平均持续时间为 1.8 毫秒 (ms)。单个调度间隔的持续时间变化较大,这是因为调度器根据成本累积来判断量子耗尽,而 DNN 在执行过程中积累成本的速度并不均匀。Olympian 可以在低开销(本实验中设置为 2.5%)下实现毫秒级的精细调度。
-
-
异构工作负载 (Heterogeneous Workload):
-
实验设置:10 个并发客户端,其中 5 个是 Inception,5 个是 ResNet。
-
结果: 以下是原文 Figure 13 的结果:

该图像是图表,展示了两个不同异构工作负载的完成时间。蓝色柱表示 Inception-batch-100 和 ResNet152-batch-100 的完成时间,红色柱则表示 Inception-batch-150 和 ResNet152-batch-100 的完成时间。各客户端的完成时间在 40 至 90 秒间波动。Figure 13: Finish times for two different heterogeneous workloads. The first 5 clients run Inception and the rest ResNet. 图 13 显示,即使在异构工作负载下,Inception 作业和 ResNet 作业各自的完成时间也保持一致,但 Inception 组和 ResNet 组之间的完成时间略有不同。这是因为 Inception 和 ResNet 即使在批处理大小不同时,其 CPU 运行时间也可能不同,而 Olympian 旨在公平共享 GPU,而非 CPU。
-
平均 GPU 持续时间: 以下是原文 Figure 14 的结果:

该图像是图表,展示了不同客户端在使用 Olympian 系统时的平均 GPU 使用时间(以微秒为单位)。客户端 0-4 执行 Inception 作业,客户端 5-9 执行 ResNet 作业。数据以柱状图形式呈现,展示了 GPU 时间的分布和波动情况。Figure 14: Average GPU duration per quantum for heterogeneous workload, clients 0-4 run Inception jobs and 5-9 run ResNet jobs. 图 14 证实,每个作业获得的平均 GPU 持续时间几乎相同,范围从 1084 µs 到 1257 µs,标准差在 4.9% 到 10.1% 之间。这个实际获得的平均量子值与离线分析预测的 Q 值 (1190 µs) 非常接近。
-
“溢出”现象:实验中观察到,在上下文切换时,旧作业的 2-3 个节点可能会在切换后继续在 GPU 上执行。 以下是原文 Figure 15 的结果:

该图像是示意图,展示了在作业切换后,先前作业的节点完成时的 GPU 使用时间膨胀。图中表示 的情况,强调多个节点在时间轴上的调度关系。Figure 15: Inflated GPU duration when a node from previous job finishes after that job has been switched out. 如图 15 所示,这种“溢出”会导致新作业的量子 GPU 持续时间被拉长(因为旧作业的节点占用了新作业的 GPU 时间),或者旧作业的下一个量子被扣除(因为之前多占用的时间被计入)。这解释了实际量子值与理想值之间的微小偏差。
-
开销:与未修改的 TF-Serving 相比,Olympian 在此工作负载下的开销约为 2.4%,与目标开销 2.5% 非常匹配,再次证明了分析器预测运行时开销的能力。
-
-
复杂工作负载 (Complex Workload):
-
实验设置:使用 7 种不同的 DNN 模型 (Inception, GoogLeNet, AlexNet, VGG, ResNet-50/101/152),每种模型有两个客户端,共 14 个并发客户端,每个模型使用不同的批处理大小。这些 DNN 在 GPU/CPU 节点数和运行时长上差异巨大 (见 Table 2)。
-
结果: 以下是原文 Figure 16 的结果:

该图像是图表,展示了七种不同深度神经网络(DNN)在不同批量大小下的平均 GPU 使用时长(以微秒为单位),具体包括 Inception、GoogLeNet、AlexNet、VGG、ResNet50/101/152 等模型的性能比较。Figure 16: Average GPU duration per quantum for seven different DNNs (e.g. Inception, GoogLeNet, AlexNet, VGG, ResNet50/101/152) with different batch sizes. 图 16 显示,即使在如此多样化的工作负载下,所有 DNN 都获得了可比的平均 GPU 持续时间。选择的 Q 值为 1620 µs,而客户端实际获得的平均 GPU 持续时间在 1438 µs 到 1662 µs 之间,标准差在 4.1% 到 12.0% 之间。
-
开销:预测开销为 2%,实际观测开销为 1.8%,再次验证了 Olympian 分析器预测能力的准确性。这表明 Olympian 即使在高度多样化的工作负载下也能有效实现其目标。
-
6.1.2. 其他调度策略 (Other Scheduling Policies)
-
加权公平共享 (Weighted Fair Sharing):
-
实验设置:10 个 Inception 客户端,前 5 个客户端权重为 2,后 5 个客户端权重为 1。
-
结果: 以下是原文 Figure 17 的结果:

该图像是一个图表,展示了在同质工作负载下,使用加权公平共享的两种不同权重分配时的完成时间。图中分别标示了TF-Serving、Olympian-2:1加权公平和Olympian-10:1加权公平的完成时间,客户ID在X轴上,而完成时间(秒)则在Y轴上。Figure 17: Finish times on a homogeneous workload with weighted fair sharing, for two different weight assignments. 图 17 显示,权重为 2 的客户端在 36-38 秒内完成,而权重为 1 的客户端在 50 秒左右完成。完成时间比例与理论预测值 0.75 (对于 的情况,即 ) 非常接近。当权重比例为 10:1 时,也观察到类似的完成时间比例 (55%)。这表明 Olympian 能够有效实现加权公平共享,提供差异化服务。
-
-
优先级调度 (Priority Scheduling):
-
实验设置:10 个 Inception 客户端,一种情况是严格递减优先级,另一种是前 5 个客户端具有相同的高优先级,后 5 个具有相同的低优先级。
-
结果: 以下是原文 Figure 18 的结果:

该图像是柱状图,展示了在均匀工作负载下,对于不同优先级安排的TF-Serving和Olympian的完成时间。图中显示了客户端ID与完成时间(秒)之间的关系,其中Olympian-10级优先级(红色)和Olympian-2级优先级(蓝色)的时间明显低于TF-Serving(空白)。Figure 18: Finish times on a homogeneous workload with priority scheduling, for two different priority assignments. 图 18 显示,在严格递减优先级的情况下,客户端几乎被串行化 (serialized) 执行。在前 5 个客户端具有更高优先级的情况下,它们之间实现了公平共享并在 25 秒完成,之后 GPU 被分配给其余客户端。这证明 Olympian 可以灵活地实现优先级调度。
-
6.1.3. 利用率与可扩展性 (Utilization and Scaling)
-
利用率 (Utilization):
- Olympian 相对于默认 TF-Serving 会牺牲一些 GPU 利用率,因为它为每个作业提供独占访问。
- 测量结果:对于 10 个 Inception 客户端的实验,默认 TF-Serving 的平均利用率为 84.74%。Olympian 在公平调度、加权公平调度和优先级调度下的利用率分别为 78.62%、78.10% 和 76.35%。
- 结论:Olympian 导致 GPU 利用率下降了 6-8%。优先级调度由于其串行化特性,利用率最低。
-
可扩展性 (Scale):
- 内存限制:在 GeForce GTX 1080 Ti GPU 上,TF-Serving 和 Olympian 都能支持大约 45 个并发客户端,受限于 GPU 内存。
- 线程池限制:对于某些 DNN (如 Inception),Olympian 的可扩展性可能受限于操作系统线程池。Olympian 支持 40-60 个并发 Inception 客户端,而 TF-Serving 可以支持 100 个。这是因为 Olympian 中每个线程组会交替暂停和恢复,需要更长时间地持有线程资源,导致更快达到线程池限制。
6.1.4. 其他验证 (Other Validations)
-
分析器的重要性 (The Importance of Profiling):
-
实验设置:将 Olympian 中基于分析器的 GPU 使用时间切片替换为基于 CPU 计时器 (CPU clock) 的时间切片。
-
结果: 以下是原文 Figure 19 的结果:

该图像是图表,左侧展示了不同客户端的完成时间(以秒为单位),右侧显示了各客户端的平均GPU消耗时间(以微秒为单位)。左图中,完成时间在40秒左右,显现出均匀分布;右图中,则显示出客户0的GPU消耗时间显著高于其他客户,达1872微秒。Figure 19: Using a CPU clock instead of profiled GPU usage can result in unequal finish times for homogeneous workloads (left) and widely varying GPU durations for heterogeneous ones (right). 图 19 显示,使用 CPU 计时器会导致同构工作负载下完成时间不均,异构工作负载下 GPU 持续时间差异巨大。这验证了 Olympian 细致的 GPU 性能分析和基于成本累积率的时间切片方法的正确性。
-
-
可移植性 (Portability):
-
实验设置:在另一台配备 Intel Xeon E5-2603 v4 CPU 和 NVIDIA Titan X 的服务器上运行公平共享实验。
-
结果: 以下是原文 Figure 21 的结果:

该图像是一个条形图,展示了在不同硬件平台上使用 Olympian 进行的客户端的完成时间。横轴为客户端 ID,纵轴为完成时间(秒),每个条形的高度相对均匀,约为 80 秒,表明系统在多个客户端间的公平性。Figure 21: Finish times on a different hardware platform. 图 21 显示,Olympian 在新平台上获得了与之前实验类似的公平共享性能,且无需任何修改。这证明了 Olympian 的良好可移植性。
-
-
成本与持续时间稳定性 (Cost and Duration Stability):
- 实验设置:在 TF-Serving 上运行 Inception 模型 (批处理大小 100) 100 次,测量总成本和 GPU 持续时间。
- 结果:平均总成本为 4,058,477 ns,标准差为 100,536 ns (约 2.5%);平均 GPU 持续时间为 262,773 ns,标准差为 4,462 ns (约 1.7%)。
- 结论:这些量在不同执行之间变化很小,验证了 DNN 执行的可预测性,这也是 Olympian 离线分析有效的基础。
-
节点成本的线性模型 (Linear Models for Node Costs):
-
实验设置:Olympian 通过分析少数几个批处理大小来构建线性模型,然后用该模型预测其他批处理大小的节点成本。运行 10 个 Inception 客户端,批处理大小分别为 25、75 和 150。
-
结果: 以下是原文 Figure 20 的结果:

该图像是一个柱状图,展示了不同批次(Batch-005、Batch-025、Batch-150)在不同客户端(Client id)下的完成时间(Finish time)。可见,Batch-005 的完成时间约为 4 秒,Batch-025 的完成时间约为 13 秒,而 Batch-150 的完成时间明显较高,接近 80 秒,展示了不同批次对时间的影响。Figure 20: A linear model for cost profile can provide fairness comparable to Figure 11. 图 20 显示,即使使用线性模型估计成本,Olympian 也能提供与图 11 所示的公平性相当的完成时间。这验证了使用线性模型进行成本预测的有效性。
-
6.2. 数据呈现 (表格)
以下是原文 Table 1 的结果:
| §4.1 | Even under a diverse workload containing 7 DNNswith different batch sizes, Olympian can achievethe predicted Q while keeping overheads under 2% |
| §4.2 | Olympian can support priority schedulingand weighted fair sharing |
| §4.3 | Olympian sacrifices GPU utilization by less than 8%and scales similar to TF-Serving for some DNNs |
| §4.4 | Olympian is portable to other GPUs, its cost estimatesare stable across runs, and its offline profiler is crucial. |
该表格总结了第 4 节 (实际上应为第 6 节的实验结果部分) 的主要发现:
- §4.1 (GPU 隔离): 在包含 7 种不同批处理大小的 DNN 的多样化工作负载下,Olympian 能够实现预测的 Q 值,并将开销保持在 2% 以下。
- §4.2 (其他调度策略): Olympian 支持优先级调度和加权公平共享。
- §4.3 (利用率与可扩展性): Olympian 牺牲的 GPU 利用率低于 8%,并且在某些 DNN 上与 TF-Serving 具有相似的可扩展性。
- §4.4 (其他验证): Olympian 可移植到其他 GPU,其成本估计在多次运行中保持稳定,并且其离线分析器至关重要。
6.3. 消融实验/参数分析
论文通过以下方式进行了隐式的消融实验和参数分析:
-
Overhead-Q 曲线 (Figure 8) 和 Q 的确定: 这可以看作是关于关键参数 的分析。通过绘制开销随 变化的曲线,并允许操作员指定一个开销容忍度来选择 ,这实际上是在探索不同 值对系统性能 (开销、调度粒度) 的影响。选择最大的 以满足所有 DNN 的开销容忍度,也是一种参数优化策略。
-
CPU 计时器与分析器对比 (Figure 19): 将 Olympian 的核心组件——基于离线分析的 GPU 成本累积计时器——替换为简单的 CPU 计时器,并观察其性能表现。这个对比实验明确验证了
Profiler组件对于实现公平调度和可预测性的关键作用。如果移除或替换掉Profiler,系统的性能会显著下降。 -
线性模型对节点成本的估计 (Figure 20): 验证了离线分析器可以通过对少数几个批处理大小进行分析,然后使用线性回归来预测其他批处理大小的节点成本,而不是对所有可能的批处理大小进行详尽分析。这证明了分析器在实际应用中的高效性。
这些实验共同证明了 Olympian 关键设计选择(如离线分析、基于 GPU 成本的量子定义)的有效性和重要性。
7. 总结与思考
7.1. 结论总结
本文提出了 Olympian 系统,一个对 Tensorflow-Serving (TF-Serving) 进行扩展的 GPU 调度器,旨在解决深度神经网络 (DNN) 模型服务中 GPU 资源分配的不可预测性问题,并实现公平性或服务差异化目标。Olympian 的核心创新在于,它在中间件层面而非底层硬件层面实现时间切片 (time-slicing) 调度,并巧妙地利用 DNN 计算的可预测性进行离线性能分析。
关键结论包括:
-
高精度 GPU 隔离: Olympian 能在毫秒级(1-2 ms)时间尺度上交错执行多个并发大型 DNN,例如 Inception、ResNet 等,为每个作业提供几乎相等的 GPU 持续时间,显著提高了执行的可预测性。
-
低开销: 通过离线分析 GPU 资源使用模型和协同式协同调度 (cooperative co-scheduling),Olympian 实现了低于 2% 的调度开销。
-
多策略支持: 能够有效实现公平共享、加权公平共享和优先级调度等多种调度策略,满足不同的服务需求。
-
可移植性与稳定性: Olympian 继承了 TF-Serving 的平台独立性,可轻松移植到不同的 GPU 硬件平台。其离线分析所依赖的 DNN 成本和 GPU 持续时间在多次运行中表现出高度稳定性。
-
合理牺牲利用率: 相比默认 TF-Serving,Olympian 牺牲了约 6-8% 的 GPU 利用率,但在大多数情况下,这种牺牲是可接受的,以换取更高的可预测性和调度灵活性。
-
可扩展性: 在 GPU 内存限制下,Olympian 与 TF-Serving 的可扩展性相似。在其他情况下,Olympian 的可扩展性可能受限于操作系统线程池。
总而言之,Olympian 证明了在中间件层面进行 DNN 感知 (DNN-aware) 的 GPU 调度,是解决模型服务系统可预测性和服务质量 (QoS) 问题的有效且低开销的方法。
7.2. 局限性与未来工作
论文作者指出了 Olympian 存在的局限性,并展望了未来的研究方向:
- 单 GPU 限制: 当前的 Olympian 实现专注于单个 GPU 上的调度。未来的工作可以扩展到支持多个 GPU。
- 模型数量: 尽管支持多种模型,但文中提到未来可以扩展支持更多模型。
- 现实工作负载: 实验主要使用受控的并发客户端和批处理大小。未来的工作可以探索在更现实、更动态的工作负载下的性能表现。
- 调度策略扩展: 目前实现了公平共享、加权公平共享和优先级调度。未来可以探索和实现更丰富的调度策略。
- 利用率优化: 论文提到可以探索利用 DNN 之间的依赖关系来进一步提高 GPU 利用率。
- 电源测量: 虽然提到电源使用是一个重要指标,但目前尚未测量 Olympian 的电源开销,并将其留作未来工作。
7.3. 个人启发与批判
7.3.1. 个人启发
- 中间件层调度的潜力: 这篇论文给我最大的启发是,在更高层次的中间件而非操作系统或硬件层面进行调度,可以利用应用(如 DNN)的特定知识来实现更智能、更高效的资源管理。传统上,调度往往被认为是底层 OS 或硬件的工作,但 Olympian 证明了在应用框架层面进行调度能够获得独特的优势,例如对数据流图和节点语义的感知。
- 利用可预测性: DNN 计算模式的可预测性是一个被充分利用的关键点。通过离线分析而非高开销的在线监控来获取性能模型,是解决调度挑战的优雅方式。这提示我们,在设计系统时,应深入理解应用层的特性,并寻找可以利用的固有属性(如确定性、可预测性)来优化性能。
- 精确的量子定义: 将 GPU 量子定义为实际 GPU 资源使用时间 (即 DNN 在 GPU 上运行节点的时间总和),而非简单的挂钟时间,是实现公平分配的关键。这比模糊的时间片更能准确反映资源消耗,对于异构任务的公平性至关重要。
- 协同调度与开销: 采用协同式协同调度来避免昂贵的 GPU 抢占,并专注于 CPU 线程组的切换,是实现低开销的关键。这是一种务实的工程权衡,避免了对硬件的深度修改,同时达到了目标。
7.3.2. 批判与潜在改进
- GPU 利用率下降: 尽管论文宣称牺牲的利用率“很少”(6-8%),但对于大规模云服务提供商而言,即使是几个百分点的利用率下降也可能意味着巨大的成本。特别是在优先级调度下,利用率下降更明显。未来的工作可以进一步探索在保持可预测性的同时,如何最大限度地减少利用率损失。例如,在 GPU 存在空闲时,是否可以允许非当前作业的低优先级内核运行,或者通过更智能的“溢出”管理机制。
- 线程池限制与可扩展性: Olympian 在某些情况下会更快地达到 OS 线程池限制,这会影响其可扩展性。虽然 TF-Serving 允许线程完成即返回,Olympian 需要线程长时间持有,这种差异值得进一步优化。可能需要设计更高效的线程管理策略,或者探索更轻量级的执行单元(如协程),以减少对 OS 线程的依赖。
- 离线分析的动态适应性: 离线分析依赖于 DNN 执行的可预测性。但在真实世界的云环境中,工作负载可能非常动态,新的、未分析过的模型可能会被部署,或者模型的行为可能会因输入数据的变化而略有不同。当前的离线分析模型如何适应这些变化?是否需要定期重新分析?或者是否可以引入轻量级的在线修正机制来调整 ?
- 多 GPU 场景的挑战: 论文明确指出多 GPU 场景是未来的工作。在多 GPU 环境中,不仅要考虑单 GPU 内部的调度,还要考虑作业如何在不同 GPU 之间分配和迁移,以及如何平衡跨 GPU 的负载,这会引入新的复杂性。Olympian 的单 GPU 解决方案可能需要重大修改才能适应多 GPU 架构。
- 电源消耗: 论文提到没有测量电源消耗。GPU 的电源效率对于数据中心至关重要,调度策略对电源的影响是一个值得关注的问题。未来应评估 Olympian 在不同调度策略下的电源效率。
- "溢出"的完全消除: 尽管论文认为 "溢出" 影响最小,但图 15 和相关讨论表明,即使在调度切换后,旧作业的少量 GPU 节点仍可能继续执行。这在一定程度上破坏了完美的隔离性。如果能进一步优化,例如通过硬件支持的更细粒度同步或更严格的中间件控制,理论上可以实现更完美的隔离。
相似论文推荐
基于向量语义检索推荐的相关论文。