配置 NIM#

本节提供有关启动 GenMol NIM 容器的更多详细信息。

查看 NIM 容器信息#

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

ngc registry image info nvcr.io/nim/nvidia/genmol:1.0.0

拉取容器镜像#

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

Docker#

docker pull nvcr.io/nim/nvidia/genmol:1.0.0

NGC#

ngc registry image pull nvcr.io/nim/nvidia/genmol:1.0.0

容器的运行时参数#

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

docker run --rm -it --name genmol-nim \
  --runtime=nvidia --gpus=all\
  -e NVIDIA_VISIBLE_DEVICES=0 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -p 8000:8000 \
  nvcr.io/nim/nvidia/genmol:1.0.0

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

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

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

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

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

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

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

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

  • -p 8000:8000: GenMol 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 genmol-nim-1 \
  --runtime=nvidia --gpus=all\
  -e NVIDIA_VISIBLE_DEVICES=0 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -p 60001:8000 \
  nvcr.io/nim/nvidia/genmol:1.0.0
# Launch instance #2
docker run --rm -it --name genmol-nim-2 \
  --runtime=nvidia --gpus=all\
  -e NVIDIA_VISIBLE_DEVICES=1 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -p 60002:8000 \
  nvcr.io/nim/nvidia/genmol:1.0.0

模型检查点缓存#

在初始启动时,容器从 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 genmol-nim \
  --runtime=nvidia --gpus=all\
  -e CUDA_VISIBLE_DEVICES=0 \
  -e NGC_API_KEY=$NGC_API_KEY \
  -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" \
  -p 8000:8000 \
  nvcr.io/nim/nvidia/genmol:1.0.0

日志记录#

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),则可能会错过重要的调试信息。