View a markdown version of this page

向作业模板添加任务分块 - 截止日期云

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

向作业模板添加任务分块

以下过程将每个任务渲染一帧的作业模板转换为呈现大块帧的作业模板。有关分块的背景以及如何选择区块大小,请参阅。作业模板的任务分块

在开始之前,您需要:

  • 带有任务模板的任务捆绑包,用于定义框架任务参数。有关更多信息,请参阅 任务包的作业模板元素

  • 与支持分块的队列关联的队列。 Service-managed 舰队始终运行兼容的工作器代理。 Customer-managed 舰队要求工作人员代理版本 0.28.21 或更高版本。

向作业模板添加任务分块
  1. TASK_CHUNKING扩展名添加到template.yaml文件顶部:

    specificationVersion: 'jobtemplate-2023-09' extensions: - TASK_CHUNKING

    如果跳过此步骤,任务创建将失败并显示错误 The CHUNK[INT] task parameter requires the TASK_CHUNKING extension.

  2. 在步骤中parameterSpace,将帧任务参数类型从更改INTCHUNK[INT]并添加chunks属性:

    taskParameterDefinitions: - name: Frame type: CHUNK[INT] range: "{{Param.Frames}}" chunks: defaultTaskCount: 10 rangeConstraint: CONTIGUOUS

    有关所有可用字段,请参阅CHUNK [INT] 任务参数参考

  3. 更新该步骤的脚本以接受帧范围而不是单个帧。使用时rangeConstraint: CONTIGUOUS{{Task.Param.Frame}}变量始终会扩展到一个start-end格式范围,因此脚本可以使用以下cut命令将其拆分:

    START_FRAME="$(echo '{{Task.Param.Frame}}' | cut -d- -f1)" END_FRAME="$(echo '{{Task.Param.Frame}}' | cut -d- -f2)"

    使用rangeConstraint: NONCONTIGUOUS,变量扩展为任意范围表达式,例如1-3,5,7-20:2。将表达式转换为应用程序接受的语法。要了解有效的转换,请参阅任务分块示例。 GitHub

  4. 使用 Deadline Cloud CLI 提交任务包:

    deadline bundle submit my-job-bundle
  5. 要验证分块是否生效,请在 Deadline Cloud 监视器中打开任务并查看该步骤的任务列表。每个任务代表一个区块并显示帧范围,例如1-10而不是单个帧号。

以下完整作业模板以 10 帧为单位呈现 Blender 动画:

specificationVersion: 'jobtemplate-2023-09' extensions: - TASK_CHUNKING name: Blender Render with Contiguous Chunking parameterDefinitions: - name: BlenderSceneFile type: PATH objectType: FILE dataFlow: IN - name: Frames type: STRING default: "1-100" - name: OutputDir type: PATH objectType: DIRECTORY dataFlow: OUT default: "./output" steps: - name: RenderBlender parameterSpace: taskParameterDefinitions: - name: Frame type: CHUNK[INT] range: "{{Param.Frames}}" chunks: defaultTaskCount: 10 rangeConstraint: CONTIGUOUS script: actions: onRun: command: bash args: ["{{Task.File.Run}}"] embeddedFiles: - name: Run type: TEXT data: | set -xeuo pipefail mkdir -p '{{Param.OutputDir}}' # Parse the chunk range (e.g., "1-10") into start and end frames START_FRAME="$(echo '{{Task.Param.Frame}}' | cut -d- -f1)" END_FRAME="$(echo '{{Task.Param.Frame}}' | cut -d- -f2)" blender --background '{{Param.BlenderSceneFile}}' \ --render-output '{{Param.OutputDir}}/output_####' \ --render-format PNG \ --use-extension 1 \ -s "$START_FRAME" \ -e "$END_FRAME" \ --render-anim

在此示例中,Deadline Cloud 将 100 个帧分成多个区块,例如1-1011-20,并且每项任务都通过一次调用 Blender 来渲染其数据块。

有关更多信息,请参阅以下主题: