

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

# 將任務區塊新增至任務範本
<a name="build-job-bundle-chunking-add"></a>

下列程序會將每個任務轉譯一個影格的任務範本轉換為轉譯影格區塊的任務範本。如需區塊及如何選擇區塊大小的背景，請參閱 [任務範本的任務區塊](build-job-bundle-chunking.md)。

開始之前，您必須準備好以下事項：
+ 任務套件，其中包含定義影格任務參數的任務範本。如需詳細資訊，請參閱[任務套件的任務範本元素](build-job-bundle-template.md)。
+ 與支援區塊的機群相關聯的佇列。服務受管機群一律會執行相容的工作者代理程式。客戶受管機群需要工作者代理程式 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.`

1. 在步驟的 中`parameterSpace`，將影格任務參數類型從 `INT` 變更為 ，`CHUNK[INT]`並新增 `chunks` 屬性：

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

   如需所有可用的欄位，請參閱 [CHUNK【INT】 任務參數參考](build-job-bundle-chunking-reference.md)。

1. 更新步驟的指令碼以接受影格範圍，而非單一影格。使用 時`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 [上的任務區塊範例](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/task_chunking)。

1. 使用截止日期雲端 CLI 提交任務套件：

   ```
   deadline bundle submit {{my-job-bundle}}
   ```

1. 若要驗證區塊是否有效，請在截止日期雲端監視器中開啟任務，並檢視步驟的任務清單。每個任務代表一個區塊，並顯示影格範圍，例如 `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-10`和 `11-20`，而每個任務會使用單一 Blender 調用轉譯其區塊。

如需詳細資訊，請參閱下列主題：
+ [在截止日期雲端上將影格分組為具有任務區塊的區塊](examples-jb-task-chunking.md) – Ready-to-submit的區塊範例，包括不連續的變體。
+ [如何將任務提交至截止日期雲端](submit-jobs-how.md) – 將任務套件提交到您的佇列。