

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

# 使用自己的容器（BYOC）
<a name="braket-jobs-byoc"></a>

Amazon Braket Hybrid Jobs 提供了三个预先构建的容器，用于在不同的环境中运行代码。如果其中一个容器支持您的使用案例，则只需在创建混合作业时提供算法脚本即可。可以使用 `pip` 从算法脚本或 `requirements.txt` 文件中添加少量缺失的依赖关系。

如果这些容器都不支持您的使用案例，或者您想对其进行扩展，Braket Hybrid Jobs 支持使用您自己的自定义 Docker 容器映像运行混合作业，或者由您自带容器（BYOC）。请确保它是适合您使用案例的功能。

**Topics**
+ [什么时候自带容器才是正确的决定？](#bring-own-container-decision)
+ [自带容器指南](bring-own-container-recipe.md)
+ [在自己的容器中运行 Braket 混合作业](running-hybrid-jobs-in-own-container.md)

## 什么时候自带容器才是正确的决定？
<a name="bring-own-container-decision"></a>

将自己的容器（BYOC）带到 Braket Hybrid Jobs 中，通过将自己的软件安装在打包环境中，可以灵活地使用自己的软件。根据您的具体需求，一些方法可能能够实现同样的灵活性，而不必经历完整的 BYOC Docker 构建 - Amazon ECR 上传 - 自定义映像 URI 周期。

**注意**  
如果您想添加少量公开发布的其他 Python 包（通常少于 10 个），BYOC 可能不是正确的选择。例如，如果你正在使用 PyPi.

在这种情况下，您可以使用其中一个预先构建的 Braket 映像，然后在作业提交时在源目录中加入一个 `requirements.txt` 文件。该文件可被自动读取，`pip` 将照常安装具有指定版本的软件包。如果您要安装大量软件包，则作业的运行时可能会大大增加。检查您要用来测试软件能否运行的预构建容器的 Python 和 CUDA 版本（如适用）。

当您想在作业脚本中使用非 Python 语言（如 C\+\+ 或 Rust），或者您想使用无法通过 Braket 预建容器提供的 Python 版本时，BYOC 是必需的。在以下情况下，这也是一个不错的选择：
+ 您正在使用带有许可证密钥的软件，需要通过许可服务器对该密钥进行身份验证才能运行该软件。使用 BYOC，您可以将许可证密钥嵌入 Docker 映像中，并包含用于对其进行身份验证的代码。
+ 您使用的软件不可公开访问。例如，该软件托管在私有 GitHub 存储库 GitLab 或存储库上，您需要使用特定 SSH 密钥才能访问该存储库。
+ 您需要安装一套未打包在 Braket 提供的容器中的大型软件。BYOC 可消除由于安装软件而导致混合作业容器启动时间过长。

BYOC 还使用您的软件构建 Docker 容器并将其提供给用户，从而使您的自定义 SDK 或算法可供客户使用。您可以通过在 Amazon ECR 中设置适当的权限来实现此目的。

**注意**  
您必须遵守所有适用的软件许可证。