

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

# 作业模板的任务分块
<a name="build-job-bundle-chunking"></a>

任务分块允许您将多个任务分组为一个工作单元，称为块。例如，在渲染作业中，这意味着 Deadline Cloud 可以一起调度多个帧，而不是每次命令调用一帧。这减少了为每个任务启动应用程序的开销，并缩短了作业的总运行时间。有关详细信息，请参阅 OpenJD 维基中的[一次运行多个帧](https://github.com/OpenJobDescription/openjd-specifications/wiki/Job-Intro-03-Creating-a-Job-Template#42-running-multiple-frames-at-a-time)。

OpenJD 支持为作业模板添加可选功能的扩展。通过添加`TASK_CHUNKING`扩展来启用任务分块。要使用分块，请将扩展添加到您的作业模板中，然后使用`CHUNK[INT]`任务参数类型。使用相同的`deadline bundle submit`命令提交分块作业。例如，以下作业模板以 10 个区块呈现帧：

```
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-10``11-20`、之类的块。`{{Task.Param.Frame}}`变量会扩展为范围表达式，例如`1-10`。因为设置`rangeConstraint`为`CONTIGUOUS`，所以范围始终是`start-end`格式化的。该脚本解析此范围，并使用和`-e`选项将起始帧和结束帧传递给 Blender。`-s` `--render-anim`

该`chunks`属性支持以下字段：
+ `defaultTaskCount`—（必填）要将多少任务合并成一个块。最大值为 150。
+ `rangeConstraint`—（必需）如果`CONTIGUOUS`，则区块始终是一个连续的范围，例如。`1-10`如果`NONCONTIGUOUS`，则区块可以是任意集合，比如`1,3,7-10`。
+ `targetRuntimeSeconds`—（可选）每个区块的目标运行时间（以秒为单位）。在某些区块完成后，Deadline Cloud 可以动态调整区块大小以接近该目标。

有关更多任务分块示例，包括包含连续和非连续区块的基本示例和 Blender 示例，请参阅 Deadline Cloud [示例存储库中的任务分块](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/task_chunking)示例。 GitHub

**客户管理的车队要求**  
任务分块需要兼容的工作器代理版本。如果您使用客户管理的队列，请确保在提交带有分块的作业之前更新您的工作人员代理。服务托管队列始终使用兼容的工作代理版本。

**正在下载分块作业的输出**  
当你下载分块作业中单个任务的输出时，Deadline Cloud 会下载整个区块的输出。例如，如果将第 1-10 帧一起处理，则下载第 3 帧的输出将包括所有 1-10 帧。此功能需要`deadline-cloud`版本 0.53.3 或更高版本。