入门指南#

先决条件#

查看支持矩阵以确保您拥有受支持的硬件和软件堆栈。

NGC 身份验证#

生成 API 密钥#

访问 NGC 资源需要 NGC API 密钥,密钥可以在这里生成:https://org.ngc.nvidia.com/setup/personal-keys

创建 NGC API 个人密钥时,请确保从“包含的服务”下拉列表中至少选择“NGC Catalog”。如果此密钥要重复用于其他目的,则可以包含更多服务。

注意

个人密钥允许您配置到期日期、使用操作按钮撤销或删除密钥,以及根据需要轮换密钥。有关密钥类型的更多信息,请参阅NGC 用户指南

导出 API 密钥#

将 API 密钥的值作为 NGC_API_KEY 环境变量传递到下一节的 docker run 命令中,以便在启动 NIM 时下载适当的模型和资源。

如果您不熟悉如何创建 NGC_API_KEY 环境变量,最简单的方法是在您的终端中导出它

export NGC_API_KEY=<value>

运行以下命令之一,使密钥在启动时可用

# If using bash
echo "export NGC_API_KEY=<value>" >> ~/.bashrc

# If using zsh
echo "export NGC_API_KEY=<value>" >> ~/.zshrc

注意

其他更安全的选择包括将值保存在文件中,以便您可以使用 cat $NGC_API_KEY_FILE 检索,或使用密码管理器

Docker 登录到 NGC#

要从 NGC 拉取 NIM 容器镜像,请首先使用以下命令向 NVIDIA 容器注册表进行身份验证

echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdin

使用 $oauthtoken 作为用户名,NGC_API_KEY 作为密码。$oauthtoken 用户名是一个特殊名称,表示您将使用 API 密钥而不是用户名和密码进行身份验证。

启动 NIM 容器#

以下命令使用 gRPC 服务启动 Maxine 眼神交流 NIM 容器。查找有关容器运行时参数的参考此处

docker run -it --rm --name=maxine-eye-contact-nim \
  --net host \
  --runtime=nvidia \
  --gpus all \
  --shm-size=8GB \
  -e NGC_API_KEY=$NGC_API_KEY \
  -e MAXINE_MAX_CONCURRENCY_PER_GPU=1 \
  -e NIM_MANIFEST_PROFILE=7f0287aa-35d0-11ef-9bba-57fc54315ba3 \
  -e NIM_HTTP_API_PORT=9000 \
  -e NIM_GRPC_API_PORT=50051 \
  -p 9000:9000 \
  -p 50051:50051 \
  nvcr.io/nim/nvidia/maxine-eye-contact:latest

注意

标志 --gpus all 用于将所有可用的 GPU 分配给 docker 容器。要将特定 GPU 分配给 docker 容器(如果您的机器中有多个 GPU 可用),请使用 --gpus '"device=0,1,2..."'

如果命令成功运行,您将获得类似于以下的响应。

+------------------------+---------+--------+
| Model                  | Version | Status |
+------------------------+---------+--------+
| GazeRedirectionKey68   | 1       | READY  |
| maxine_nvcf_eyecontact | 1       | READY  |
+------------------------+---------+--------+

I0903 10:35:41.663046 47 metrics.cc:808] Collecting metrics for GPU 0: GPU Name
I0903 10:35:41.663361 47 metrics.cc:701] Collecting CPU metrics
I0903 10:35:41.663588 47 tritonserver.cc:2385]
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Option                           | Value                                                                                                                                                                  |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| server_id                        | triton                                                                                                                                                                 |
| server_version                   | 2.35.0                                                                                                                                                                 |
| server_extensions                | classification sequence model_repository model_repository(unload_dependents) schedule_policy model_configuration system_shared_memory cuda_shared_memory binary_tensor |
|                                  | _data parameters statistics trace logging                                                                                                                              |
| model_repository_path[0]         | /opt/maxine/models                                                                                                                                                     |
| model_control_mode               | MODE_NONE                                                                                                                                                              |
| strict_model_config              | 0                                                                                                                                                                      |
| rate_limit                       | OFF                                                                                                                                                                    |
| pinned_memory_pool_byte_size     | 268435456                                                                                                                                                              |
| cuda_memory_pool_byte_size{0}    | 67108864                                                                                                                                                               |
| min_supported_compute_capability | 6.0                                                                                                                                                                    |
| strict_readiness                 | 1                                                                                                                                                                      |
| exit_timeout                     | 30                                                                                                                                                                     |
| cache_enabled                    | 0                                                                                                                                                                      |
+----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

I0903 10:35:41.664874 47 grpc_server.cc:2445] Started GRPCInferenceService at 0.0.0.0:8001
I0903 10:35:41.665204 47 http_server.cc:3555] Started HTTPService at 0.0.0.0:8000
I0903 10:35:41.706437 47 http_server.cc:185] Started Metrics Service at 0.0.0.0:8002
Maxine GRPC Service: Listening to 0.0.0.0:8004

注意

默认情况下,Maxine 眼神交流 gRPC 服务托管在端口 8004 上。您将必须使用此端口进行推理请求。

环境变量#

下表描述了可以作为添加到 docker run 命令的 -e 参数传递到 NIM 中的环境变量

ENV

必需?

默认值

注释

NGC_API_KEY

您必须将此变量设置为您的个人 NGC API 密钥的值。

NIM_CACHE_PATH

/opt/nim/.cache

容器缓存模型工件的位置(在容器内)。

NIM_HTTP_API_PORT

9000

将 NIM 服务发布到容器内指定的端口。请确保调整传递给 docker run 的 -p/--publish 标志的端口以反映这一点(例如:-p $NIM_HTTP_API_PORT:$NIM_HTTP_API_PORT)。此 : 的左侧是您的主机地址:端口,并且不必与 $NIM_HTTP_API_PORT 匹配。: 的右侧是容器内的端口,必须与 NIM_HTTP_API_PORT 匹配(如果未设置,则为 9000)。支持的端点是 /v1/license(返回许可证信息)、/v1/metadata(返回元数据,包括资产信息、许可证信息、模型信息和版本)和 /v1/metrics(通过 ASGI 应用程序端点公开 Prometheus 指标)。

NIM_GRPC_API_PORT

50051

请确保调整传递给 docker run 的 -p/--publish 标志的端口以反映这一点(例如:-p $NIM_GRPC_API_PORT:$NIM_GRPC_API_PORT)。此 : 的左侧是您的主机地址:端口,并且不必与 $NIM_GRPC_API_PORT 匹配。: 的右侧是容器内的端口,必须与 NIM_GRPC_API_PORT 匹配(如果未设置,则为 50051)。

容器的运行时参数#

标志

描述

-it

--interactive + --tty (参见 Docker 文档)

--rm

在容器停止后删除容器(参见 Docker 文档

--name=container-name

为 NIM 容器命名。使用任何首选值。

--runtime=nvidia

确保 NVIDIA 驱动程序在容器中可访问。

--gpus all

在容器内公开 NVIDIA GPU。如果您在具有多个 GPU 的主机上运行,则需要指定要使用的 GPU,您也可以指定多个 GPU。有关挂载特定 GPU 的更多信息,请参阅 GPU 枚举

--shm-size=8GB

为多进程通信分配主机内存。

-e NGC_API_KEY=$NGC_API_KEY

为容器提供从 NGC 下载足够模型和资源所需的令牌。请参阅上面

-e MAXINE_MAX_CONCURRENCY_PER_GPU

每个 GPU 的 NIM 服务器要支持的并发推理请求数

-p 9000:9000

转发 NIM HTTP 服务器在容器内发布的端口,以便从主机系统访问。 : 的左侧是主机系统 ip:端口(此处为 9000),而右侧是 NIM HTTP 服务器发布的容器端口。容器端口可以是除 8000 之外的任何值。

-p 50051:50051

转发 NIM gRPC 服务器在容器内发布的端口,以便从主机系统访问。 : 的左侧是主机系统 ip:端口(此处为 50051),而右侧是 NIM gRPC 服务器发布的容器端口。

停止容器#

以下命令可用于停止容器。

docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME