配置 NIM#

本节提供有关启动 DiffDock NIM 容器的其他详细信息。

查看 NIM 容器信息#

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

ngc registry image info nvcr.io/nim/mit/diffdock:2.0.1

拉取容器镜像#

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

Docker#

docker pull nvcr.io/nim/mit/diffdock:2.0.1

NGC#

ngc registry image pull nvcr.io/nim/mit/diffdock:2.0.1

容器的运行时参数#

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

docker run --rm -it --name diffdock-nim \
  --runtime=nvidia \
  -e NVIDIA_VISIBLE_DEVICES=0 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -p 8000:8000 \
  nvcr.io/nim/mit/diffdock:2.0.1

我们可以将命令分解为以下组件。在生产环境中,可以修改其中一些组件,以更好地适应用户所需的应用程序。

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

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

  • -it:这些标志组合起来在容器内创建一个交互式终端会话。-i 保持标准输入打开,-t 分配一个伪 TTY。

  • --name diffdock-nim:此标志为容器命名为 ‘diffdock-nim’。

  • --runtime=nvidia:此标志指定容器要使用的运行时。在本例中,它设置为 ‘nvidia’,用于 GPU 加速。

  • -e NVIDIA_VISIBLE_DEVICES=0:DiffDock NIM 仅使用单个 GPU 来处理推理,因此需要指定环境变量 NVIDIA_VISIBLE_DEVICES 来控制哪个 GPU 设备对容器可见。在本例中,它设置为 0,这意味着容器将仅使用第一个 GPU(如果可用)。

  • -e NGC_API_KEY:此标志设置一个环境变量 NGC_API_KEY,用于 NVIDIA 的 NGC (NVIDIA GPU Cloud) 服务的身份验证。

  • -p 8000:8000:DiffDock NIM 容器打开端口 8000 以接受推理请求。此参数 -p [host_port]:[container_port] 将容器内部端口映射到主机,以便主机上的其他应用程序和进程可以请求该服务。在本例中,容器映射到主机上的相同端口 8000

  • -e NIM_HTTP_API_PORT=[PORT_NUMBER]:此变量用于修改推理请求的默认 HTTP 端口(即 8000)。此端口号应与 -p 选项中的容器端口匹配,以便可以正确映射到主机网络。

在同一主机上运行多个实例#

在多 GPU 平台上工作时,可以启动多个容器实例以实现可扩展性;但是,每个容器实例都需要绑定到不同的 GPU 设备 (NVIDIA_VISIBLE_DEVICES) 并映射到主机上的不同端口 (-p)。以下是启动两个实例的示例,分别使用 GPU 设备 0/1 和主机端口 60001/60002。

# Launch instance #1
docker run --rm -it --name diffdock-nim-1 \
  --runtime=nvidia \
  -e NVIDIA_VISIBLE_DEVICES=0 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -p 60001:8000 \
  nvcr.io/nim/mit/diffdock:2.0.1
# Launch instance #2
docker run --rm -it --name diffdock-nim-2 \
  --runtime=nvidia \
  -e NVIDIA_VISIBLE_DEVICES=1 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -p 60002:8000 \
  nvcr.io/nim/mit/diffdock:2.0.1

模型检查点缓存#

在初始启动时,容器从 NGC 下载模型检查点。您可以通过使用缓存目录在本地缓存模型权重来跳过未来运行中的此下载步骤,如下例所示。

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

# Run the container with the cache directory mounted in the appropriate location
docker run --rm -it --name diffdock-nim \
  --runtime=nvidia \
  -e CUDA_VISIBLE_DEVICES=0 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -v "$LOCAL_NIM_CACHE:/home/nvs/.cache/nim" \
  -p 8000:8000 \
  nvcr.io/nim/mit/diffdock:2.0.1

日志记录#

NIM 的日志记录级别可以使用环境变量 NIM_LOG_LEVEL 进行控制。此变量允许您指定希望在容器日志中看到的日志记录详细程度。

以下日志记录级别可用

  • DEBUG:此级别记录服务器每个端点的所有输入和输出。这对于调试目的可能很有用,但它也可能产生非常大的日志,应仅在必要时使用。

  • INFO:此级别记录有关服务器运行的重要事件和信息。

  • WARNING:此级别记录有关潜在问题或错误的警告。

  • ERROR:此级别记录服务器运行期间发生的错误。

  • CRITICAL:此级别记录阻止服务器正常运行的严重错误。

如果未为 NIM_LOG_LEVEL 提供值,则默认日志记录级别将为 INFO。 如果您想抑制屏幕上的大部分运行时信息,可以将其设置为 ERRORCRITICAL。 如果您想检查详细消息,可以将其设置为 DEBUG

要设置日志记录级别,您可以在启动 NIM 时传递 NIM_LOG_LEVEL 环境变量。例如

docker run ... -e NIM_LOG_LEVEL=DEBUG ...

这会将日志记录级别设置为 DEBUG,这将记录服务器每个端点的所有输入和输出。

在设置日志记录级别时,您应考虑日志记录详细程度和日志大小之间的权衡。 如果您将日志记录级别设置为 DEBUG,则可能会生成非常大的日志,这些日志可能难以管理。 但是,如果您将日志记录级别设置为更高级别(例如 INFOWARNING),则可能会错过重要的调试信息。