跳转到主要内容
目前,训练任务既可以直接使用 create 函数创建,也可以通过提交任务 YAML 配置来创建。

创建训练任务

from siflow import SiFlow
from siflow.types import (
    TaskVolume,
    TaskEnhancements,
    TaskUserSelectedInstance,
    TaskEnhancementsFaultTolerance,
    TaskEnv
)

client = SiFlow(
    region="cn-beijing",
    cluster="auriga",
)

uuid = client.tasks.create(
    name_prefix="test",
    image="megatron",
    image_version="0.12.1",
    image_url="registry-cn-beijing.siflow.cn/siflow/megatron:0.12.1-a845aa7",
    image_type="preset",
    type="pytorchjob",
    priority="medium",
    cmd="""echo hello world""",
    workers=1,
    resource_pool="cn-beijing-auriga-ai-infra-reserved-shared",
    instances=[
        TaskUserSelectedInstance(name="sci.c23-2", count_per_pod=1),
    ],
    volumes=[
        TaskVolume(mount_dir="/volume/ai-infra", volume_id=1),
    ],
    enhancements=TaskEnhancements(
        fault_tolerance=TaskEnhancementsFaultTolerance(enabled=True, max_retry_count=1),
    ),
    labels={
        "key1": "value1",
        "key2": "value2",
    },
    task_env=[
        TaskEnv(env_key="AA", env_value="aa", hide=True),
        TaskEnv(env_key="BB", env_value="bb", hide=False),
    ],
)
print(uuid)
参数说明:
参数名类型是否必填说明
name_prefixstr训练任务名称前缀
imagestr训练任务使用的镜像名称
image_versionstr镜像版本
image_typestr镜像类型,可选值为:preset 或 custom
image_urlstr使用该参数为自定义镜像指定镜像 URL
typestr任务类型,可选值为:pytorchjob、pod
prioritystr任务优先级,可选值为:high、medium、low
cmdstr任务入口程序
workersint任务 worker 数量,不指定时默认为 1
resource_poolstr使用的实例资源池名称:
1. 按需共享:<region>-<cluster>-<tenant>-ondemand-shared
2. 预留共享: <region>-<cluster>-<tenant>-reserved-shared
3. 预留独享: <pool_name>
instancesList[TaskUserSelectedInstance]任务 Pod 使用的实例类型及数量。可选择多种实例类型,系统将按录入顺序检查是否有足够配额并据此进行调度。
volumesList[TaskVolume]任务 Pod 需要挂载的存储卷,支持挂载多个存储卷
datasetsList[TaskDataset]任务所需的数据集,支持同时挂载多个数据集
enhancementsTaskEnhancements启用任务增强功能配置
task_envList[TaskEnv]- 配置中的键值对将以环境变量的形式反映在 Pod 中
- hide 参数:设为 True 时,非任务所有者查看任务详情时该值将显示为 ****(主要用于任务共享场景)

使用 YAML 创建训练任务

除上述通过 create 函数指定参数的方式外,还可以通过提交任务 YAML 配置来创建任务,其格式与 SiFlow 命令行工具相同。
uuid = client.tasks.create(yaml_file="/path/to/task-yaml-file.yml")
print(uuid)
任务 YAML 示例
namePrefix: test
image: megatron
imageVersion: "0.12.1"
imageUrl: registry-cn-beijing.siflow.cn/siflow/megatron:0.12.1-a845aa7
type: pytorchjob
priority: medium
cmd: |
  echo hello world
workers: 1
resourcePool: cn-beijing-auriga-ai-infra-reserved-shared
instances:
  - name: sci.c23-2
    countPerPod: 1
volumes:
  - volumeId: 1
    mountDir: /volume/ai-infra
enhancements:
  faultTolerance:
    enabled: true
    maxRetryCount: 1
    ```

删除训练任务

删除单个任务:
uuid = client.tasks.delete(uuid="e86c99a1-08a4-95db-9ac2-67fc4b43e7fd")
print(uuid)
批量删除任务:
uuids = client.tasks.batch_delete(uuids=[
    "e86c99a1-08a4-95db-9ac2-67fc4b43e7fd",
])
print(uuids)

停止训练任务

uuid = client.tasks.stop(uuid="e86c99a1-08a4-95db-9ac2-67fc4b43e7fd")
print(uuid)

uuids = client.tasks.batch_stop(uuids=["e86c99a1-08a4-95db-9ac2-67fc4b43e7fd"])
print(uuid)

根据 ID 获取任务详情

task = client.tasks.get(uuid="e86c99a1-08a4-95db-9ac2-67fc4b43e7fd")
print(task.name, task.status, task.created_at)
# test-2XsAaXW3 Running "2024-10-01 10:00:00"
返回值请参见”相关类型定义”中的 Task。

获取任务列表

tasks = client.tasks.list()

for task in tasks:
    print(task.uuid, task.name, task.status)
    ```
list 参数:
参数名类型是否必填说明
statusstring根据 status 字段过滤要查询的任务
countint本次查询返回的最大任务数量
返回值中的每一项请参见”相关类型定义”中的 TaskBrief。

重新提交任务

uuids = client.tasks.resubmit(uuids=[
    "e86c99a1-08a4-95db-9ac2-67fc4b43e7fd",
])
print(uuids)

结构定义

TaskBrief

字段类型说明
uuidstring任务的 UUID;使用该 ID 查询任务状态详情
clusterstring任务所在的集群
namestring任务名称
resource_poolstring任务使用的实例资源池
instancesList[TaskUserSelectedInstance]提交任务时选择的实例类型及数量
selected_instancesList[TaskSystemSelectedInstance]任务实际使用的实例类型及数量
volumesList[TaskVolume]任务 Pod 挂载的存储卷
imagestring任务使用的镜像名称
image_versionstring镜像版本
image_urlstring镜像 URL
image_typestring镜像类型,preset 或 custom
statusstring任务状态
status_msgstring任务状态详情
created_timestring任务创建时间
updated_timestring任务更新时间
start_timestring任务开始时间
end_timestring任务结束时间
durationstring任务运行时长
prioritystring任务优先级
queue_infoTaskQueueInfo任务排队状态

Task

字段类型说明
uuidstring任务的 UUID;使用该 ID 查询任务状态详情
clusterstring任务所在的集群
namestring任务名称
name_prefixstring任务名称前缀
resource_poolstring任务使用的实例资源池
instancesList[TaskUserSelectedInstance]提交任务时选择的实例类型及数量
selected_instancesList[TaskSystemSelectedInstance]任务实际使用的实例类型及数量
volumesList[TaskVolume]任务 Pod 挂载的存储卷
imagestring任务使用的镜像名称
image_versionstring镜像版本
image_urlstring镜像 URL
image_typestring镜像类型,preset 或 custom
statusstring任务状态
status_msgstring任务状态详情
created_timestring任务创建时间
updated_timestring任务更新时间
start_timestring任务开始时间
end_timestring任务结束时间
durationstring任务运行时长
typestring任务类型:pytorchjob 或 pod
workersint任务 worker 数量
cmdstring任务入口命令
datasetsList[TaskDataset]挂载到任务 Pod 的数据集
modelsList[TaskModel]挂载到任务 Pod 的模型
enhancementsTaskEnhancements任务增强相关配置

TaskUserSelectedInstance

参数名类型是否必填说明
namestr可在网页上查看各集群支持的实例类型,例如 sci.c23-2
count_per_podint每个任务 Pod 使用的实例数量

TaskSystemSelectedInstance

参数名类型是否必填说明
namestr可在网页上查看各集群支持的实例类型,例如 sci.c23-2
count_per_podint每个任务 Pod 使用的实例数量

TaskVolume

参数名类型是否必填说明
volume_idint存储卷的 ID:volume_id 与 volume_name 两个参数中至少需提供一个
volume_namestr存储卷名称
mount_dirstr存储卷在任务 Pod 中的挂载路径

TaskDataset

参数名类型是否必填说明
namestr要挂载到任务 Pod 的数据集名称
versionstr数据集版本
typestr数据集类型,可选参数为:preset 或 custom
pvc_namestr数据集所在存储卷对应的 PVC 名称
sub_pathstr数据集在存储卷中的相对路径
mount_pathstr数据集挂载到任务 Pod 中的路径

TaskModel

参数名类型是否必填说明
namestr要挂载到任务 Pod 的数据集名称
versionstr数据集版本
typestr数据集类型,可选参数为:preset 或 custom
pvc_namestr数据集所在存储卷对应的 PVC 名称
sub_pathstr数据集在存储卷中的相对路径
mount_pathstr数据集挂载到任务 Pod 中的路径

TaskEnhancements

参数名类型是否必填说明
fault_toleranceFaultTolerance任务容错相关配置

TaskEnhancementsFaultTolerance

参数名类型是否必填说明
enabledbool是否启用任务容错功能
max_retry_countint任务失败时的最大重试次数
recourdsList[str]任务自动容错记录,创建时无需填写,获取时自动填充
TaskQueueInfo
参数名类型说明
rank_in_poolint当前任务在资源池中的排队位置
ahead_in_poolTasksAheadBreakdown当前任务在资源池中前序任务的详细信息
rank_in_userint当前任务在用户任务中的排队位置
ahead_in_userTasksAheadBreakdown当前任务在用户任务中前序任务的详细信息
TasksAheadBreakdown
参数名类型说明
highint排在当前任务之前的高优先级任务数量
mediumint排在当前任务之前的普通优先级任务数量
lowint排在当前任务之前的低优先级任务数量