跳转到主要内容
Python SDK 可用于在训练流水线、批量实验或 CI/CD 流程中管理训练任务。使用本文示例前,请先完成 安装并初始化,并确认当前账号具备目标资源池、镜像、Volume、数据集和模型的使用权限。

创建训练任务

训练任务支持两种创建方式:
  • 通过 Python 参数创建,适合在脚本或流水线中动态组合任务配置。
  • 通过 YAML 文件创建,适合复用已有任务配置文件。
两种方式共用下文的参数说明、任务类型配置和增强能力。以下示例及字段说明以 SDK 0.3.27 为准。

创建示例

以下两个页签使用相同的基础配置创建 PyTorchJob。请按实际环境替换镜像地址、实例规格和 <RESOURCE_POOL>,并确保启动命令引用的训练脚本已包含在镜像中,或通过 Volume 挂载到任务环境。
先构建任务配置,再调用 client.tasks.create 提交。下文的 Python 补充配置示例沿用这里的 task_config,请在提交前加入所需配置。
提交成功后,SDK 返回任务 UUID。请保存该 UUID,并通过 查询训练任务 查看任务状态。下文的补充配置仅用于创建新任务,不会修改已创建的任务。

参数说明

两种创建方式的主要参数说明如下。参数列使用 Python 命名;命名不同的 YAML 字段在说明中注明。

补充任务配置

以下补充配置适用于 Python 参数和 YAML 两种创建方式。

通用配置

以下示例补充 Volume 挂载、任务环境变量、资源调度和标签。请按需选用,并替换 Volume ID、调度策略 ID 和环境变量值。
在创建示例的 client.tasks.create(**task_config) 调用前加入:

按任务类型配置

PyTorchJob 通常只需要配置 workers、instances、启动命令和挂载资源。资源预检、任务 VSCS 访问和抢占通知仅对 pytorchjob 生效,配置方式请参见 配置增强能力。 RayJob 支持为 Head 节点单独指定实例规格。未配置 head_instances(YAML 中的 headInstances)时,Head 与 Worker 使用同一实例规格。 以下示例将基础创建配置改为 RayJob。Python 片段需在提交前执行;YAML 片段需合并到 task.yml,替换同名字段,保留镜像和资源池等其他基础配置。

配置增强能力

增强能力按需启用,不必为每个任务都配置。以下说明共用于两种创建方式。 使用 Python 参数创建时,在提交任务前初始化增强能力配置,再加入所需的能力片段:
以下 Python 片段沿用该 enhancements 对象。YAML 片段需要合并到 task.yml 的 enhancements 对象中;启用多项能力时,只保留一个顶层 enhancements 字段,并在其下合并各能力配置。

自动容错

Python 的 fault_tolerance 对应 YAML 的 faultTolerance。
  • max_retry_count(maxRetryCount)设置任务异常后的最大重试次数。
  • auto_replace_enabled(autoReplaceEnabled)控制是否启用故障自动换机。
  • fault_strategy_enabled(faultStrategyEnabled)控制是否启用容错策略。省略时由服务端默认策略决定。
  • replace_pod_notify_max_wait(replacePodNotifyMaxWait)设置通知训练进程后等待确认的最长时间。
    • 单位为秒,取值范围为 0~600;0 表示不等待,省略时使用服务端默认值。
    • 仅在服务端最终配置中的 enabled 和 fault_strategy_enabled 均为 True 时生效。
    • 等待发生在发送 SIGTERM 之前,不占用 Pod 的 terminationGracePeriodSeconds。

自定义指标采集

Python 的 metrics_monitor 对应 YAML 的 metricsMonitor。单端点采集使用 port 和 path;多端点采集使用 endpoints,最多配置 16 项,且优先于 port 和 path。
  • 每个 TaskMetricsEndpoint 需要指定 port,取值范围为 1~65535。单端点模式的 port 不能使用保留端口 8080。
  • path 为指标路径,需以 / 开头,默认值为 /metrics。
  • remark 为端点备注,仅用于展示,最多 128 字符。
以下示例配置两个采集端点:
如果只采集一个端点,可将 endpoints 替换为 port=9090, path="/metrics";YAML 中使用 port: 9090 和 path: /metrics。 任务运行后,可通过 使用 Python SDK 查询指标 发现已采集的自定义指标。

资源预检

precheck 仅支持 pytorchjob。开启后,预检失败会使任务失败;可通过 envs 向预检脚本传入环境变量。
  • Python 的 env_key、env_value 对应 YAML 的 envKey、envValue。
  • env_key 仅允许 ASCII 字母、数字和下划线,不能以数字或 KUBERNETES_ 开头。
  • env_value 不能为空,不能包含换行符或 NUL 字符,最大 8 KiB。
  • precheck.envs 仅传给预检脚本,不会写入训练容器环境变量,请勿填写敏感信息。

任务 VSCS 访问

vscs 仅支持 pytorchjob。开启后,可从网页打开 VSCS 访问任务环境。 Python 的 extension_dir、user_data_dir 对应 YAML 的 extensionDir、userDataDir。建议使用持久化路径,避免扩展和用户配置随任务环境丢失。以下路径需先通过 Volume 挂载。

抢占通知

Python 的 preempt_notify 对应 YAML 的 preemptNotify,仅支持 pytorchjob。
  • port 为训练进程监听通知的端口,取值范围为 9000~9999。
  • max_wait(maxWait)为最长存盘等待秒数。
以下示例保留通知配置但不启用。确认训练进程已监听指定端口后,再将 enabled 设置为 True(YAML 中为 true)。

查询训练任务

根据任务 UUID 查询详情:
查询任务列表,默认将容错重试等子任务展开到同一列表:
返回结果中,sub_task 用于区分父任务和子任务,root_task_name 用于将子任务关联到父任务。父任务处于终态,不代表重试子任务已经结束;应查看子任务自身的 status。 分页结果可能将父任务和子任务分开。如需获取完整关联链,可调用 client.tasks.get_related(uuid="<TASK_UUID>")。 管理员如需查询更大范围的任务,可按所有者过滤或拉取全量分页结果:
常用查询参数如下:

查看任务 Pod

需要定位多 Pod 任务中的异常副本时,可以查询任务下的 Pod 信息。
如需继续查询日志、事件或指标,可将返回的 Pod 名称传入 使用 Python SDK 查询日志 或 使用 Python SDK 查询指标 中的相关接口。

更新任务优先级

对于排队中的非闲时任务,可以按需调整优先级。
优先级调整只影响后续调度竞争,不保证任务立即获得资源。调整后建议继续查询任务状态、事件或排队信息。

停止训练任务

停止单个任务:
批量停止任务:
停止任务会影响正在运行的训练。执行前,请确认任务产物、checkpoint 和日志已按预期写入持久化存储。

删除训练任务

删除单个任务:
批量删除任务:
删除前,请确认不再需要该训练任务记录及相关运行信息。

重新提交训练任务

重新提交会基于原任务配置创建新的运行任务。提交前请确认原任务引用的镜像、资源池、Volume、数据集和模型仍可用。

相关文档