部署指南#

本节提供有关 AlphaFold2-Multimer NIM 部署的更多详细信息。

查看可用的 NIM 容器信息。#

容器镜像标签可以使用以下命令查看,类似于 NGC 上的其他容器镜像。

ngc registry image info nvcr.io/nim/deepmind/alphafold2-multimer:1.0.0

从 NGC 拉取容器镜像。#

使用以下命令之一拉取容器镜像

Docker#

docker pull nvcr.io/nim/deepmind/alphafold2-multimer:1.0.0

NGC SDK#

ngc registry image pull nvcr.io/nim/deepmind/alphafold2-multimer:1.0.0

运行容器。#

快速入门指南中所述,您可以运行以下命令来启动 AlphaFold2-Multimer NIM

export LOCAL_NIM_CACHE=~/.cache/nim
export NGC_CLI_API_KEY=<Your NGC CLI API Key>

docker run -it --rm --name alphafold2-multimer --runtime=nvidia \
    -p 8000:8000 \
    -e NGC_CLI_API_KEY \
    -v $LOCAL_NIM_CACHE:/opt/nim/.cache \
    nvcr.io/nim/deepmind/alphafold2-multimer:1.0.0

以下列表显示了启动 NIM 容器的常用选项

  • docker run: 这是从 Docker 镜像运行新容器的命令。

  • -it: -i 标志允许访问容器的 STDIN,-t 分配一个伪 TTY 来解释命令,例如 Ctrl+C 用于停止/杀死 NIM 容器。

  • --rm: 此标志告诉 Docker 在容器退出时自动删除它。此属性对于一次性运行或测试非常有用,因为它防止容器被遗留下来。

  • --name alphafold2-multimer: 此标志为容器命名为 “alphafold2-multimer”。

  • --runtime=nvidia: 此标志指定用于容器的运行时。 在这种情况下,它设置为 “nvidia”,用于 GPU 加速。

  • -e NGC_CLI_API_KEY: 这会将 NGC_CLI_API_KEY 环境变量(以及父终端中设置的值)传递给容器。 这用于通过 NVIDIA 的 NGC(NVIDIA GPU Cloud)服务进行身份验证,包括在 NIM 缓存中不存在模型权重和数据库时下载它们。

  • -p 8000:8000: 此标志将主机上的端口 8000 映射到容器中的端口 8000。 这允许您从主机访问容器的服务。

  • -v <source>:<dest>: 将主机目录 /home/$USER/.cache/nim 挂载到容器中作为 /opt/nim/.cache,以便它可以用于存储和重用下载的模型。

  • -e NIM_IGNORE_MODEL_DOWNLOAD_FAIL=true: 忽略模型下载和检测错误,例如当从本地缓存将模型挂载到没有访问 NGC 权限的脱机设备上托管的 NIM 容器时。 需要本地缓存和挂载的模型才能在 NIM 中获得预期的行为。 有关更多信息或替代方案,请参阅气隙 NIM 部署

  • -e NIM_CACHE_PATH=<dest>: 更改在 NIM 容器的文件系统中挂载模型的位置。 默认值为 /opt/nim/.cache。 与 -v <source>:<dest> 关联,有关更多信息,请参阅配置 NIM 缓存位置

  • -e NIM_HTTP_API_PORT=<port>: 更改用于向 NIM 发送查询的 HTTP API 端口。 默认值为 8000。 与 -p <host_port>:<server_port> 关联,有关更多信息,请参阅为 NIM 查询/请求使用备用端口

  • -e NIM_PARALLEL_MSA_RUNNERS=<int>-e NIM_PARALLEL_THREADS_PER_MSA=<int>: 更改 MSA 的并行运行程序数量和每个运行程序的线程数。 有关更多信息,请参阅调整 MSA 运行程序和线程

可选的运行时参数和性能调优#

以下示例命令显示了用于启动 AlphaFold2-Multimer NIM 的性能调优选项

docker run -it --rm --name alphafold2-multimer --runtime=nvidia \
    -e CUDA_VISIBLE_DEVICES=0 \
    -e NGC_CLI_API_KEY \
    -e NIM_CACHE_PATH=/opt/nim/.cache \
    -e NIM_PARALLEL_MSA_RUNNERS=3 \
    -e NIM_PARALLEL_THREADS_PER_MSA=12 \
    -p 8000:8000 \
    -v $LOCAL_NIM_CACHE:/opt/nim/.cache \
    nvcr.io/nim/deepmind/alphafold2-multimer:1.0.0
  • -e CUDA_VISIBLE_DEVICES=0: 此标志将环境变量 CUDA_VISIBLE_DEVICES 设置为值 0。 此变量控制哪些 GPU 设备对容器可见。 在这种情况下,它设置为 0,这意味着容器将仅使用第一个 GPU(如果可用)。

  • nvcr.io/nim/deepmind/alphafold2-multimer:1.0.0: 这是 Docker 镜像名称和标签。 该镜像托管在 NVIDIA 的容器注册表 (nvcr.io) 上,名为 alphafold2-multimer。 标签 1.0.0 指定镜像的特定版本。

检查 AlphaFold2-Multimer NIM 的状态#

您可以使用以下命令查看系统上正在运行的 Docker 容器

docker ps

如果 NIM 正在运行,这将返回如下所示的输出

CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                                                                                          NAMES
d114948j4f55   alphafold2-multimer   "/opt/nvidia/nvidia_…"   46 minutes ago   Up 46 minutes   6006/tcp, 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 8888/tcp, 0.0.0.0:50051->50051/tcp, :::50051->50051/tcp   test1

输出的第一列是 Docker 容器 ID,这对于与容器交互非常有用。其余字段描述了容器正在运行的镜像、命令(在本例中为 NIM 服务器软件)、容器构建时间、其状态、已运行时间、任何开放端口,以及最后由启动命令给出的名称。

如果 NIM 未运行,则只会返回标头。

杀死正在运行的 NIM 容器#

如果由于某种原因您的容器进入了您无法与之交互的状态,或者由于任何原因必须杀死它,您可以结合从 docker ps 命令获得的 ID 使用以下命令。 这是一个使用前面示例中容器 ID 的示例

docker kill d114948j4f55

这将立即终止正在运行的容器。 注意:任何正在处理中的请求都将被取消,并且数据可能会丢失。

模型检查点缓存#

首次启动时,容器将从 NGC 下载 AlphaFold2 模型参数和支持数据库。 您可以通过在本地缓存模型权重(使用如下例所示的缓存目录)来跳过未来运行中的此下载步骤。

# Create the cache directory on the host machine
export LOCAL_NIM_CACHE=~/.cache/nim
mkdir -p $LOCAL_NIM_CACHE

# Run the container with the cache directory mounted in the appropriate location, i.e. -v $LOCAL_NIM_CACHE:/opt/nim/.cache
docker run -it --rm --name alphafold2-multimer --runtime=nvidia \
    -e CUDA_VISIBLE_DEVICES=0 \
    -e NGC_CLI_API_KEY \
    -v $LOCAL_NIM_CACHE:/opt/nim/.cache \
    -p 8000:8000 \
    nvcr.io/nim/deepmind/alphafold2-multimer:1.0.0

注意

缓存模型检查点可以节省后续运行的大量时间。