Skip to main content

部署

启动一个代理

您可以在任何机器上启动一个代理:无论是在本地和/或云实例上。当启动一个代理时,您将其分配给一个或多个队列服务。通过将任务排入代理所服务的队列来利用机器,代理将拉取并执行这些任务。

cross-platform execution

ClearML Agent 是平台无关的。当使用 ClearML Agent 跨平台执行实验时,在启动代理之前设置特定平台的环境变量。

例如,要在ARM设备上运行代理,请在启动代理之前设置核心类型环境变量:

export OPENBLAS_CORETYPE=ARMV8
clearml-agent daemon --queue <queue_name>

执行一个代理

要执行一个代理,监听一个队列,运行:

clearml-agent daemon --queue <queue_name>

在后台执行

要在后台执行代理,请运行:

clearml-agent daemon --queue <execution_queue_to_pull_from> --detached

停止代理

要停止在后台运行的代理,请运行:

clearml-agent daemon <arguments> --stop

分配资源

要指定与代理关联的GPU,请添加--gpus标志。

Docker Mode

确保包含--docker标志,因为通过代理的GPU管理仅在Docker模式中受支持。

在同一台机器上执行多个代理(通常为不同的代理分配GPU),运行:

clearml-agent daemon --gpus 0 --queue default --docker
clearml-agent daemon --gpus 1 --queue default --docker

要分配多个GPU,请提供分配的GPU列表

clearml-agent daemon --gpus 0,1 --queue dual_gpu --docker

队列优先级

单个代理可以监听多个队列。优先级由它们的顺序设置。

clearml-agent daemon --queue high_q low_q

这确保了代理首先尝试从high_q队列中拉取任务,只有在它为空时,代理才会尝试从low_q队列中拉取。

为了确保代理从所有队列中平等地拉取任务,请添加--order-fairness标志。

clearml-agent daemon --queue group_a group_b --order-fairness

它将确保代理从group_a队列中拉取,然后从group_b中拉取,然后再回到group_a,等等。这确保了group_agroup_b不会相互剥夺资源。

SSH 访问

默认情况下,ClearML Agent 将主机的 ~/.ssh 映射到容器的 /root/.ssh 目录(可配置,请参阅 clearml.conf)。

如果你想使用现有的认证套接字与ssh-agent,你可以通过以下方式验证你的主机ssh-agent是否正常工作:

echo $SSH_AUTH_SOCK

你应该看到一个临时文件的路径,类似于这样:

/tmp/ssh-<random>/agent.<random>

然后在Docker模式下运行你的clearml-agent,它将自动检测SSH_AUTH_SOCK环境变量,并将套接字挂载到它启动的任何容器中。

你也可以在执行代理时显式设置SSH_AUTH_SOCK环境变量。下面的命令将以Docker模式执行一个代理,并将其分配给服务队列。代理将有权访问环境变量中提供的SSH套接字。

SSH_AUTH_SOCK=<file_socket> clearml-agent daemon --gpus <your config> --queue <your queue name>  --docker

Kubernetes

代理可以部署在裸金属上或作为Docker在Kubernetes集群中。ClearML代理为Kubernetes添加了缺失的调度能力,允许从代码中进行更灵活的自动化,并提供对ClearML代理所有功能的访问。

ClearML Agent 通过其 Kubernetes-Glue 部署到 Kubernetes 集群上,该工具将 ClearML 作业直接映射到 K8s 作业:

  • 使用ClearML Agent Helm Chart来启动一个作为控制器的代理pod。或者(不太推荐)在K8S CPU节点上运行k8s glue script
  • ClearML K8S 粘合层从 ClearML 任务执行队列中拉取任务,并准备一个 K8s 任务(基于提供的 yaml 模板)
  • 在每个作业pod内部,clearml-agent将安装ClearML任务的环境,并运行和监控实验过程
Enterprise Feature

ClearML 企业版计划支持 K8S 服务多个 ClearML 队列,并为每个队列提供 pod 模板,用于描述每个 pod 使用的资源。

例如,以下配置了用于example_queue_1example_queue_2的资源:

agentk8sglue:
queues:
example_queue_1:
templateOverrides:
nodeSelector:
nvidia.com/gpu.product: A100-SXM4-40GB-MIG-1g.5gb
resources:
limits:
nvidia.com/gpu: 1
example_queue_2:
templateOverrides:
nodeSelector:
nvidia.com/gpu.product: A100-SXM4-40GB
resources:
limits:
nvidia.com/gpu: 2

Slurm

Enterprise Feature

Slurm Glue 可在 ClearML 企业计划下使用。

代理可以部署在裸金属上或部署在使用Slurm管理的Linux集群中的Singularity容器内。

ClearML Agent Slurm Glue 将作业映射到 Slurm 批处理脚本:将 ClearML 队列与批处理脚本模板关联,然后当任务被推入队列时,它将根据附加到队列的 sbatch 模板规范转换为并作为 sbatch 作业执行。

  1. 在可以运行sbatch / squeue等的机器上安装Slurm Glue。

    pip3 install -U --extra-index-url https://*****@*****.allegro.ai/repository/clearml_agent_slurm/simple clearml-agent-slurm
  2. 创建一个批处理模板。确保将SBATCH变量设置为您想要附加到队列的资源。 下面的脚本设置了一个代理以裸机运行,为每个作业创建一个虚拟环境。例如:

    #!/bin/bash
    # available template variables (default value separator ":")
    # ${CLEARML_QUEUE_NAME}
    # ${CLEARML_QUEUE_ID}
    # ${CLEARML_WORKER_ID}.
    # complex template variables (default value separator ":")
    # ${CLEARML_TASK.id}
    # ${CLEARML_TASK.name}
    # ${CLEARML_TASK.project.id}
    # ${CLEARML_TASK.hyperparams.properties.user_key.value}


    # example
    #SBATCH --job-name=clearml_task_${CLEARML_TASK.id} # Job name DO NOT CHANGE
    #SBATCH --ntasks=1 # Run on a single CPU
    # #SBATCH --mem=1mb # Job memory request
    # #SBATCH --time=00:05:00 # Time limit hrs:min:sec
    #SBATCH --output=task-${CLEARML_TASK.id}-%j.log
    #SBATCH --partition debug
    #SBATCH --cpus-per-task=1
    #SBATCH --priority=5
    #SBATCH --nodes=${CLEARML_TASK.hyperparams.properties.num_nodes.value:1}


    ${CLEARML_PRE_SETUP}

    echo whoami $(whoami)

    ${CLEARML_AGENT_EXECUTE}

    ${CLEARML_POST_SETUP}

    注意:如果您在使用支持Singularity容器的Slurm,请将批处理模板中的${CLEARML_AGENT_EXECUTE}替换为singularity exec ${CLEARML_AGENT_EXECUTE}。有关其他必需的设置,请参阅Slurm with Singularity

    tip

    您可以通过ClearML Web UI覆盖Slurm作业模板的默认值。模板中的以下命令将nodes值设置为ClearML任务的num_nodes用户属性:

    #SBATCH --nodes=${CLEARML_TASK.hyperparams.properties.num_nodes.value:1}

    此用户属性可以在UI中修改,在任务的配置 > 用户属性部分,当任务执行时,将使用修改后的新值。

  3. 启动ClearML Agent Slurm Glue并将Slurm配置分配给ClearML队列。例如,以下代码将default队列与slurm.example.template脚本关联,因此推送到此队列的任何作业将使用该脚本设置的资源。

    clearml-agent-slurm --template-files slurm.example.template --queue default

    您还可以传递多个模板和队列。例如:

    clearml-agent-slurm --template-files slurm.template1 slurm.template2 --queue queue1 queue2

Slurm 与 Singularity

如果您正在运行支持 Singularity 容器的 Slurm,请设置以下内容:

  1. 确保您的sbatch模板包含:

    singularity exec ${CLEARML_AGENT_EXECUTE}

    可以添加额外的奇点参数,例如:

    singularity exec --uts ${CLEARML_AGENT_EXECUTE}`
  2. 在您的clearml.conf文件中设置默认使用的Singularity容器:

    agent.default_docker.image="shub://repo/hello-world"

    或者

    agent.default_docker.image="docker://ubuntu"
  3. 在命令行中添加 --singularity-mode,例如:

    clearml-agent-slurm --singularity-mode --template-files slurm.example_singularity.template --queue default

Google Colab

ClearML 代理可以在 Google Colab 实例上运行。这有助于用户利用 Google Colab 提供的计算资源,并在其上发送实验进行执行。

查看本教程,了解如何在Google Colab上运行ClearML代理!

显式任务执行

ClearML 代理也可以直接执行特定任务,而无需监听队列。

执行任务无需排队

使用clearml-agent工作器执行任务,无需队列。

clearml-agent execute --id <task-id>

克隆任务并执行克隆的任务

克隆指定的任务并使用clearml-agent工作器在没有队列的情况下执行克隆的任务。

clearml-agent execute --id <task-id> --clone

在Docker内部执行任务

使用clearml-agent工作器在没有队列的情况下通过Docker容器执行任务。

clearml-agent execute --id <task-id> --docker

调试

在前台模式下运行clearml-agent守护进程,将所有输出发送到控制台。

clearml-agent daemon --queue default --foreground