Skip to main content

工作者和队列

MLOps/LLMOps的两个主要组成部分是实验的可重复性,以及将工作扩展到多台机器的能力。ClearML工作器,结合执行队列,满足了这两个需求。

ClearML 工作器通过启动 ClearML 代理来实例化,这是 ClearML 中自动化的基础,可用于构建自动化管道、启动自定义服务 (例如 监控和警报服务)等。

ClearML 代理是做什么的?

ClearML 代理允许用户在其安装的任何机器上执行代码,从而促进数据科学工作扩展到自己的机器之外。

代理负责将代码部署到目标机器以及设置整个执行环境: 从安装所需的包到设置环境变量, 最终执行代码(支持虚拟环境或灵活的Docker容器配置)。

代理还支持在不修改代码的情况下动态覆盖参数值,从而实现无代码实验(这也是ClearML 超参数优化实现的基础)。

一个代理可以与特定的GPU关联,从而实现工作负载的分配。例如,在一台拥有8个GPU的机器上,你可以将几个GPU分配给一个代理,并将剩余的GPU用于不同的工作负载,甚至通过另一个代理(参见动态GPU分配)。

什么是队列?

ClearML队列是一个按顺序排列的任务列表,这些任务被安排执行。一个或多个代理可以为一个队列提供服务。 为队列提供服务的代理按顺序拉取队列中的任务并执行它们。

ClearML 代理可以以以下任一模式服务多个队列:

  • 严格优先级:代理在服务较低优先级队列之前,先服务较高优先级的队列。
  • 轮询:代理从队列中拉取单个任务,然后移动到下一个队列进行服务。

代理和队列工作流程

代理流程图

上图展示了一个典型流程,其中代理执行任务:

  1. 将任务加入队列以执行。
  2. 代理从队列中拉取任务。
  3. 代理启动一个docker容器,在其中运行任务的代码。
  4. 任务执行环境的设置如下:
    1. 执行任何配置的自定义设置脚本。
    2. 安装任何所需的系统包。
    3. 从git仓库克隆代码。
    4. 应用任何记录的未提交更改。
    5. 设置python环境和所需的包。
  5. 任务的脚本/代码被执行。

当代理运行时,它会持续向ClearML服务器报告系统指标。您可以在编排页面中监控这些指标。

资源管理

在机器上安装代理可以监控机器的所有状态(GPU / CPU / 内存 / 网络 / 磁盘 IO)。 当管理多台机器时,这使用户能够全面了解其硬件资源:每台机器的状态、每台机器的预期工作负载等。

工人和队列页面

您可以根据资源使用情况来组织您的队列。假设您有一台单GPU机器。您可以创建一个名为single-gpu-queue的队列,并将该机器的代理以及其他单GPU代理分配到该队列。这样您就会知道分配给该队列的任务将由单GPU机器执行。

当代理在您的机器上启动并运行时,您可以通过将任务排入您的队列之一来从任何机器访问这些资源,根据您想要分配给任务的资源量。

通过队列和ClearML代理,您可以轻松地从集群中添加和移除机器,并且可以重复使用机器,而无需任何专用容器或镜像。

运行模式

代理可以部署在裸金属上,多个实例将特定的GPU分配给代理。它们也可以作为Docker部署在Kubernetes集群中。

代理支持以下运行模式:

  • 虚拟环境模式 - 代理为实验创建一个新的虚拟环境,根据任务规范安装所需的python包,克隆代码库,应用未提交的更改,最后在执行代码时进行监控。此模式使用智能缓存,因此包和环境可以在多个任务中重复使用(参见虚拟环境重用)。

    ClearML 代理支持使用以下包管理器:pip(默认)、condapoetry

    代理和虚拟环境

    在虚拟环境模式下运行的代理需要创建虚拟环境,而当它从虚拟环境中运行时无法做到这一点。您可以使用系统Python在这些模式下运行代理。

  • Docker模式 - 代理根据任务的定义启动一个Docker镜像。在Docker内部,代理克隆指定的仓库/代码,应用原始执行的未提交更改,设置Python环境和所需的包,并开始执行代码同时进行监控。

服务模式

在默认模式下,ClearML代理一次执行一个任务,因为训练任务通常需要所有可用的资源。有些任务大部分时间处于空闲状态,需要的计算能力较少,例如控制器任务(如管道控制器)或服务任务(如清理服务)。

这就是services-mode发挥作用的地方。在services-mode下运行的代理将允许多个任务并行执行(每个任务将注册自己为子代理,在UI的Orchestration标签中可见)。

此模式旨在运行维护任务。一些适合的任务包括:

warning

不要将训练或推理任务排入服务队列。它们会给服务器带来不必要的负载。

默认情况下,开源的ClearML Server在服务模式下运行一个clearml-agent,监听services队列。