

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 任務範本的任務區塊
<a name="build-job-bundle-chunking"></a>

任務區塊可讓您將多個任務分組為稱為區塊的單一工作單位。例如，在轉譯任務中，這表示截止日期雲端可以將多個影格一起分派，而不是每個命令叫用一個影格。這可降低每個任務啟動應用程式的負荷，並縮短總任務執行時間。如需詳細資訊，請參閱 OpenJD Wiki 中的[一次執行多個影格](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` 格式。指令碼剖析此範圍，並使用 `-s`和 `-e`選項將開始和結束影格傳遞給 Blender`--render-anim`。

`chunks` 屬性支援下列欄位：
+ `defaultTaskCount` – （必要） 要合併為單一區塊的任務數量。最大值為 150。
+ `rangeConstraint` – （必要） 如果 `CONTIGUOUS`，區塊一律為連續範圍，例如 `1-10`。如果為 `NONCONTIGUOUS`，區塊可以是任意集，如 `1,3,7-10`。
+ `targetRuntimeSeconds` – （選用） 每個區塊的目標執行時間，以秒為單位。截止日期 雲端可以動態調整區塊大小，在某些區塊完成後接近此目標。

如需更多任務區塊範例，包括具有連續和非連續區塊的基本和 Blender 範例，請參閱 GitHub 上截止日期雲端範例儲存庫中的[任務區塊](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/task_chunking)範例。

**客戶受管機群需求**  
任務區塊需要相容的工作者代理程式版本。如果您使用客戶管理的機群，請確保在提交具有區塊的工作之前更新您的工作者代理程式。服務受管機群一律使用相容的工作者代理程式版本。

**下載區塊任務的輸出**  
當您下載區塊任務中單一任務的輸出時，Deadline Cloud 會下載整個區塊的輸出。例如，如果同時處理影格 1-10，則下載影格 3 的輸出會包含所有影格 1-10。此功能需要 0`deadline-cloud`.53.3 版或更新版本。