

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

# 混合作业的关键概念
<a name="braket-jobs-concepts"></a>

本节介绍了 Amazon Braket Python SDK 提供的 `AwsQuantumJob.create` 函数以及容器文件结构映射的关键概念。

除了构成完整算法脚本的一个或多个文件外，您的混合作业还可以有其他输入输出。当您的混合作业启动时，Amazon Braket 会将创建混合作业时提供的输入复制到运行算法脚本的容器中。混合任务完成后，算法期间定义的所有输出都将复制到指定的 Amazon S3 位置。

**注意**  
 *算法指标*是实时报告的，不遵循此输出程序。

Amazon Braket 还提供了多个环境变量和辅助函数，以简化与容器输入和输出的交互。有关更多信息，请参阅 *Amazon Braket 软件开发工具包*中的 [braket.jobs 软件包](https://amazon-braket-sdk-python.readthedocs.io/en/latest/_apidoc/braket.jobs.html)。

**Topics**
+ [输入](#braket-jobs-inputs)
+ [输出](#braket-jobs-outputs)
+ [环境变量](#braket-jobs-environmental-variables)
+ [辅助函数](#braket-jobs-helper-functions)

## 输入
<a name="braket-jobs-inputs"></a>

 **输入数据**：通过使用 `input_data` 参数指定设置为字典的输入数据文件，可将输入数据提供给混合算法。用户在 SDK 的 `AwsQuantumJob.create` 函数中定义 `input_data` 参数。这会将输入数据复制到环境变量所给位置的容器文件系统 `"AMZN_BRAKET_INPUT_DIR"`。有关如何在混合算法中使用输入数据的几个示例，请参阅[带有 Amazon Braket Hybrid Jobs 的 QAOA PennyLane 和 Amazon Braket Hybrid Job](https://github.com/amazon-braket/amazon-braket-examples/blob/main/examples/hybrid_jobs/2_Using_PennyLane_with_Braket_Hybrid_Jobs/Using_PennyLane_with_Braket_Hybrid_Jobs.ipynb) [s Jupyter 笔记本中的量子机器学习](https://github.com/amazon-braket/amazon-braket-examples/blob/main/examples/hybrid_jobs/1_Quantum_machine_learning_in_Amazon_Braket_Hybrid_Jobs/Quantum_machine_learning_in_Amazon_Braket_Hybrid_Jobs.ipynb)。

**注意**  
当输入数据很大 (>1GB) 时，混合作业需要很长时间才能提交。这是因为本地输入数据将首先上传到 S3 存储桶，然后将 S3 路径添加到混合任务请求中，最后将混合任务请求提交给 Braket 服务。

 **超参数**：如果传入 `hyperparameters`，则它们在环境变量 `"AMZN_BRAKET_HP_FILE"` 下可用。

**注意**  
有关如何创建超参数和输入数据而后将这些信息传递给混合作业脚本的更多信息，请参阅[使用超参数](braket-jobs-hyperparameters.md)部分和此 github [页面](https://github.com/amazon-braket/amazon-braket-examples/blob/main/examples/hybrid_jobs/1_Quantum_machine_learning_in_Amazon_Braket_Hybrid_Jobs/qcbm/qcbm.py)。

 **检查点**：要指定 `job-arn` 在新混合作业中使用哪个检查点，请使用 `copy_checkpoints_from_job` 命令。此命令将检查点数据复制到新混合作业的 `checkpoint_configs3Uri` 中，使其在作业运行时在环境变量 `AMZN_BRAKET_CHECKPOINT_DIR` 给出的路径上可用。默认值为 `None`，这意味着来自其他混合作业的检查点数据将不会用于新的混合作业。

## 输出
<a name="braket-jobs-outputs"></a>

 **量子任务**：量子任务结果存储在 S3 位置 `s3://amazon-braket-<region>-<accountID>/jobs/<job-name>/tasks`。

 **作业结果**：您的算法脚本保存到环境变量给定目录的所有内容`"AMZN_BRAKET_JOB_RESULTS_DIR"`都将复制到 `output_data_config` 中指定的 S3 位置。如果未指定数值，将默认为 `s3://amazon-braket-<region>-<accountID>/jobs/<job-name>/<timestamp>/data`。我们提供 SDK 帮助器函数 **`save_job_result`**，当从算法脚本调用时，您可以使用该函数以字典的形式方便地存储结果。

 **检查点**：如果要使用检查点，可将其保存在环境变量 `"AMZN_BRAKET_CHECKPOINT_DIR"` 给出的目录中。您也可以使用 `save_job_checkpoint` 调用函数。

 **算法指标**：您可以将算法指标定义为算法脚本的一部分，这些指标将在混合作业运行时发送到 Amazon CloudWatch 并实时显示在 Amazon Braket 控制台中。有关如何使用算法指标的示例，请参阅[使用 Amazon Braket Hybrid Jobs 运行 QAOA 算法](braket-jobs-run-qaoa-algorithm.md)。

有关保存作业输出的更多信息，请参阅 Hybrid Jobs 文档中的[保存结果](https://docs.aws.amazon.com/braket/latest/developerguide/braket-jobs-first.html#braket-jobs-save-results)。

## 环境变量
<a name="braket-jobs-environmental-variables"></a>

Amazon Braket 提供了多个环境变量来简化与容器输入输出的交互。以下代码列出了 Braket 使用的环境变量。
+ `AMZN_BRAKET_INPUT_DIR`— 输入数据目录opt/braket/input/data。
+ `AMZN_BRAKET_JOB_RESULTS_DIR`— opt/braket/model 要将作业结果写入的输出目录。
+ `AMZN_BRAKET_JOB_NAME`：作业的名称。
+ `AMZN_BRAKET_CHECKPOINT_DIR`：检查点目录。
+ `AMZN_BRAKET_HP_FILE`：包含超参数的文件。
+ `AMZN_BRAKET_DEVICE_ARN`— 设备 ARN（AWS 资源名称）。
+ `AMZN_BRAKET_OUT_S3_BUCKET`：`CreateJob` 请求 `OutputDataConfig` 中指定的输出 Amazon S3 存储桶。
+ `AMZN_BRAKET_SCRIPT_ENTRY_POINT`：`CreateJob` 请求的 `ScriptModeConfig` 中指定的入口点。
+ `AMZN_BRAKET_SCRIPT_COMPRESSION_TYPE`：`CreateJob` 请求的 `ScriptModeConfig` 中指定的压缩类型。
+ `AMZN_BRAKET_SCRIPT_S3_URI`：`CreateJob` 请求的 `ScriptModeConfig` 中指定的用户脚本的 Amazon S3 位置。
+ `AMZN_BRAKET_TASK_RESULTS_S3_URI`：SDK 默认存储任务的量子任务结果的 Amazon S3 位置。
+ `AMZN_BRAKET_JOB_RESULTS_S3_PATH`：存储任务结果的 Amazon S3 位置，如 `CreateJob` 请求的 `OutputDataConfig` 中所述。
+ `AMZN_BRAKET_JOB_TOKEN`：对于在作业容器中创建的量子任务，应传递给的 `CreateQuantumTask` 的 `jobToken` 参数的字符串。

## 辅助函数
<a name="braket-jobs-helper-functions"></a>

Amazon Braket 提供了多个辅助函数，以简化与容器输入和输出的交互。这些辅助函数将从用于运行 Hybrid Job 的算法脚本中调用。以下示例演示了如何执行此操作。

```
from braket.jobs import get_checkpoint_dir, get_hyperparameters, get_input_data_dir, get_job_device_arn, get_job_name, get_results_dir, save_job_result, save_job_checkpoint, load_job_checkpoint

get_checkpoint_dir() # Get the checkpoint directory
get_hyperparameters() # Get the hyperparameters as strings
get_input_data_dir() # Get the input data directory
get_job_device_arn() # Get the device specified by the hybrid job
get_job_name() # Get the name of the hybrid job.
get_results_dir() # Get the path to a results directory
save_job_result(result_data='data') # Save hybrid job results
save_job_checkpoint(checkpoint_data={'key': 'value'}) # Save a checkpoint
load_job_checkpoint() # Load a previously saved checkpoint
```