Cognex Deep Learning GPU Allocation:GPU分配机制详解 Cognex Deep Learning GPU AllocationGPU分配机制详解大家好 这里是「代码简单说」记录 Cognex Deep Learning 4.2 中 GPU AllocationGPU 分配机制方便后续配置多 GPU 环境、训练工具以及分析 GPU 利用率时快速查阅。SEO关键词Cognex Deep Learning、GPU Allocation、GPU分配、Standard Tool、Legacy Tool、GPU训练、GPU处理、多GPU、Deep Learning 4.2、GPU资源调度文章摘要Cognex Deep Learning 4.2 会在工具训练和图像处理过程中动态分配 GPU。当某个 GPU 被一个工具占用时其他工具无法同时使用该 GPU。不同类型的工具在 GPU 分配方式上存在明显区别Standard 工具通常会持续占用 GPU直到当前工具的全部图像训练或处理完成Legacy 工具则会按照单张图像进行 GPU 调度。本文详细介绍 Standard、Legacy 两类工具的 GPU Allocation 机制以及两者同时存在于同一个 Stream 时的处理顺序。一、什么是 GPU Allocation在 Cognex Deep Learning 中GPU 会在工具进行**训练Training和处理Processing**时被分配给对应工具。当某个 GPU 已经分配给一个工具后其他工具无法同时使用这块 GPU。因此GPU Allocation 会直接影响哪些工具可以同时运行哪些工具需要等待多个工具的执行顺序GPU 的利用率Stream 中工具的整体处理效率具体的 GPU 分配行为主要取决于两个因素工具类型Standard 或 Legacy当前操作Training 或 Processing其中Standard 和 Legacy 最大的区别就是 GPU 在处理任务时的占用粒度不同。二、Standard Tools 的 GPU 分配机制Standard Tool 的 GPU 分配方式相对简单。当一个 Standard 工具开始训练或者处理时它会持续占用一块 GPU直到该工具的所有图像处理完成。也就是说Standard Tool 是以整个工具的任务为单位占用 GPU。1. Standard Tool 训练假设当前有1 块 GPUN 个 Standard Tools那么这些工具无法同时训练而是按照**先进先出FIFOFirst In First Out**的方式排队。执行关系类似GPU │ ├── Standard Tool 1 │ ↓ │ 训练完成 │ ├── Standard Tool 2 │ ↓ │ 训练完成 │ ├── Standard Tool 3 │ ↓ │ 训练完成 │ └── ...因此如果只有一块 GPU多个 Standard Tool 会按照队列顺序依次训练。三、Standard Tools 工具链如果 Stream 中存在多个相互连接的 Standard ToolsGPU Allocation 的基本原则仍然保持不变。假设工具链如下Tool A → Tool B → Tool C训练时Tool A ↓ Tool B ↓ Tool C上游工具会首先进行训练然后才轮到下游工具。原始文档中的 GPU 分配示意图如下Standard Tool 处理流程在 Processing 阶段同样遵循上游优先的原则。例如Tool A → Tool B → Tool C处理顺序为Tool A ↓ Tool B ↓ Tool C下游工具不会在上游工具尚未完成全部图像处理时开始处理。也就是说下游 Standard Tool 必须等待前一个工具的所有图像处理完成。这点与 Legacy Tool 的逐图像调度方式存在明显区别。四、Legacy Tools 的 GPU 分配机制Legacy Tool 的 GPU Allocation 可以分成 Training 和 Processing 两种情况。两者的行为并不相同。五、Legacy Tool 的训练Legacy Tool 在训练阶段与 Standard Tool 比较类似。一个 Legacy Tool 开始训练后会占用一块 GPU直到该工具的全部图像训练完成。如果有N 个 Legacy Tools1 块 GPU那么这些工具同样会按照 FIFO 队列依次训练。例如Legacy Tool 1 ↓ 训练完成 ↓ Legacy Tool 2 ↓ 训练完成 ↓ Legacy Tool 3因此在训练阶段Standard Tool 和 Legacy Tool 都具有较长时间占用 GPU 的特点。真正明显的区别主要出现在 Processing 阶段。六、Legacy Tool 的图像处理Legacy Tool 在 Processing 阶段采用了更加细粒度的 GPU 分配方式。它不会像 Standard Tool 一样一次性占用 GPU 直到所有图像处理结束。而是一次只占用 GPU 完成一张图像的处理。单张图像处理完成后该工具会重新进入 GPU 等待队列。例如一个 Legacy Tool 有 100 张图像需要处理Tool A ↓ 处理 Image 1 ↓ 重新进入队列 ↓ 处理 Image 2 ↓ 重新进入队列 ↓ 处理 Image 3 ↓ ...这种方式意味着多个 Legacy Tool 可以更加频繁地轮换 GPU。七、Legacy Tool 的 FIFO 调度Legacy Tool 在 Processing 阶段同样采用 FIFO 队列。假设存在Legacy Tool A Legacy Tool B Legacy Tool CGPU 调度可能表现为GPU │ ├─ A → Image 1 │ ├─ B → Image 1 │ ├─ C → Image 1 │ ├─ A → Image 2 │ ├─ B → Image 2 │ ├─ C → Image 2 │ └─ ...由于单张图像的处理时间通常比较短因此 GPU 会在不同工具之间快速轮换。当一个新的工具开始 Processing 时它会进入等待队列。它首先获得 GPU处理一张图像 ↓ 处理完成 ↓ 重新进入队列如此循环直到这个工具的所有图像处理完成。八、Legacy Tool 工具链的处理方式对于 Legacy Tool 链同样遵循上游工具优先的原则。例如Tool A → Tool B → Tool C训练阶段Tool A ↓ Tool B ↓ Tool C上游工具始终先完成训练然后再训练下游工具。原始文档示意图九、Legacy Tool 链的 ProcessingProcessing 阶段则有所不同。当上游工具完成处理后下游工具开始处理并且采用**逐图像per-image**的方式进行 GPU 调度。例如Image 1 Tool A → Tool B → Tool C Image 2 Tool A → Tool B → Tool CGPU 不会简单地让某个下游工具一次性处理完所有图像而是根据图像处理情况进行调度。原始文档中的 Processing 示意图由于不同图像的尺寸可能不同因此不同 GPU 的利用率会随着图像尺寸变化而变化。系统会尽可能让 GPU 资源保持均衡。十、Standard 与 Legacy 混合使用实际项目中一个 Stream 可能同时包含 Standard Tools 和 Legacy Tools。这时候 GPU Allocation 会按照一定优先级进行。基本规则是Standard Tools ↓ Legacy Tools也就是说Standard Tools 会优先于 Legacy Tools 进行处理。GPU 分配也是如此。Standard Tool 会优先获得 GPU。Legacy Tool 则会尝试使用没有被 Standard Tool 分配的 GPU。可以简单理解为可用 GPU │ ├── 优先分配给 Standard Tool │ └── 剩余 GPU ↓ Legacy Tool因此如果你在同一个 Stream 中同时使用两种类型的工具需要考虑 GPU 数量是否足够。十一、为什么多 GPU 不一定意味着所有工具同时运行很多人在看到多 GPU 配置后会自然认为GPU 越多所有工具就可以同时运行。实际上并不完全如此。GPU 数量只是决定了系统拥有多少计算资源而 GPU Allocation 决定了这些资源如何被工具使用。例如GPU 0 GPU 1 GPU 2 GPU 3如果 Standard Tools 数量较多它们可能优先占用 GPU。Legacy Tools 则只能尝试使用剩余资源。同时对于存在上下游依赖关系的工具链即使 GPU 数量很多也不能简单地忽略工具之间的执行顺序。因此GPU 数量、工具类型、工具链关系以及任务调度方式需要综合考虑。十二、Optimized GPU Memory 非常重要Cognex Deep Learning 官方文档特别强调了一点当一个 Stream 中同时训练多个 Standard 和 Legacy Tools 时不要关闭Optimized GPU Memory。如果关闭这个功能即使系统拥有多块 GPU也可能导致处理速度明显下降。官方说明指出关闭 Optimized GPU Memory 可能显著降低 Processing 性能与 GPU 数量无关。因此在多工具、多 GPU 场景下建议保持Optimized GPU Memory ↓ 开启不要因为显存管理问题而随意关闭该选项。十三、Standard 和 Legacy 的核心区别可以通过下面这张表快速理解两种工具的 GPU Allocation。对比项目Standard ToolLegacy ToolTraining GPU 占用持续占用持续占用Training 调度FIFOFIFOProcessing GPU 占用直到工具全部图像处理完成每次处理一张图像Processing 调度工具级别图像级别GPU 轮换较少更频繁工具链处理上游完成后处理下游上游完成后逐图像处理下游多工具场景优先获得 GPU使用剩余 GPU从 GPU 调度粒度来看可以简单概括Standard Tool ↓ 工具级 GPU 占用 Legacy Tool ↓ 图像级 GPU 占用十四、实际项目中的理解方式如果只是记住 GPU Allocation 的核心逻辑可以记下面几个结论。1. Standard Tool开始训练/处理 ↓ 占用 GPU ↓ 全部图像完成 ↓ 释放 GPU2. Legacy Tool Training开始训练 ↓ 占用 GPU ↓ 全部训练完成 ↓ 释放 GPU3. Legacy Tool Processing进入队列 ↓ 处理一张图像 ↓ 释放/重新调度 ↓ 重新进入队列 ↓ 处理下一张图像4. 混合工具Standard Tools ↓ 优先分配 GPU ↓ 剩余 GPU ↓ Legacy Tools十五、总结Cognex Deep Learning 的 GPU Allocation 本质上是一套针对不同工具类型设计的 GPU 资源调度机制。Standard Tool在训练和 Processing 时都会持续占用 GPU直到对应任务完成多个工具之间通常按照 FIFO 顺序执行。Legacy Tool在训练阶段同样会持续占用 GPU但在 Processing 阶段采用逐图像调度方式一次只处理一张图像然后重新进入队列因此多个 Legacy Tools 可以在 GPU 之间更加灵活地轮换。当 Standard 和 Legacy Tools 同时存在于一个 Stream 中时Standard Tools 会优先获得 GPULegacy Tools 再尝试使用剩余 GPU。因此在设计 Cognex Deep Learning 多 GPU 方案时不能只看 GPU 数量还需要结合工具类型、训练/处理阶段、工具链关系以及 GPU 内存优化策略一起分析。尤其是在同时训练多个 Standard 和 Legacy Tools 时建议保持Optimized GPU Memory开启否则即使增加 GPU也可能无法获得预期的性能提升。