模型实例类型示例#

Triton 模型配置允许用户为 实例组设置。 提供类型。可以编写 python 后端模型以遵循类型设置,从而控制模型实例在 CPU 或 GPU 上的执行。

在本示例中,我们将演示如何为您的 python 模型实现此目的。我们将使用 ResNet50 模型作为本示例的基础模型。

创建 ResNet50 模型仓库#

我们将使用此示例附带的文件来创建模型仓库。

首先,下载 client.pyconfig.pbtxtresnet50_labels.txtmodel.py 到您的本地计算机。

接下来,在包含上述四个文件的同一目录中,使用以下命令创建模型仓库

mkdir -p models/resnet50/1 &&
mv model.py models/resnet50/1/ &&
mv config.pbtxt models/resnet50/

拉取 Triton Docker 镜像#

我们需要先安装 Docker 和 NVIDIA Container Toolkit,请参阅安装步骤

要拉取最新的容器,请运行以下命令

docker pull nvcr.io/nvidia/tritonserver:<yy.mm>-py3
docker pull nvcr.io/nvidia/tritonserver:<yy.mm>-py3-sdk

有关 <yy.mm> 版本的安装步骤,请参见上面的安装步骤。

例如,如果最新版本是 23.01,则上述命令转换为以下命令

docker pull nvcr.io/nvidia/tritonserver:23.01-py3
docker pull nvcr.io/nvidia/tritonserver:23.01-py3-sdk

请务必将 <yy.mm> 替换为您为本示例的其余部分拉取的版本。

启动 Triton 服务器#

在复制 resnet50 模型的目录(“models”文件夹所在的目录),运行以下命令

docker run --gpus all --shm-size 1G -it --rm -p 8000:8000 -v `pwd`:/instance_kind nvcr.io/nvidia/tritonserver:<yy.mm>-py3 /bin/bash

在容器内部,我们需要安装 torchtorchvisionpillow 才能运行此示例。我们建议使用 pip 方法进行安装

pip3 install torch==1.13.0+cu117 -f https://download.pytorch.org/whl/torch_stable.html torchvision==0.14.0+cu117 pillow

最后,我们需要启动 Triton 服务器

tritonserver --model-repository /instance_kind/models

要离开容器进行下一步,请按:CTRL + P + Q

启动 Triton SDK 容器并测试推理#

要启动 sdk 容器,请运行以下命令

docker run --gpus all --network=host --pid=host --ipc=host -v `pwd`:/instance_kind -ti nvcr.io/nvidia/tritonserver:<yy.mm>-py3-sdk /bin/bash

client.py 需要安装以下软件包:torchtorchvisionpillowvalidators。同样,我们建议使用 pip 方法进行安装

pip3 install torch==1.13.0+cu117 -f https://download.pytorch.org/whl/torch_stable.html torchvision==0.14.0+cu117 pillow validators

最后,让我们使用以下命令测试推理调用

python client.py

在首次运行时,成功的推理将在末尾打印以下内容

Downloading: "https://github.com/NVIDIA/DeepLearningExamples/zipball/torchhub" to /root/.cache/torch/hub/torchhub.zip
Results is class: TABBY
PASS: ResNet50

由于 torchhub 下载,这可能需要一些时间,但任何未来的调用都会更快,因为客户端将使用已下载的工件。

测试实例类型#

提供的 config.pbtxt 将实例组设置设置为 KIND_CPU,这使得模型能够在 CPU 上执行。要测试您的模型是否实际加载到 CPU 上,请运行以下命令

python client.py -v

-v 参数要求客户端从服务器请求模型配置,并在控制台中打印出来

{
    ...,
    "instance_group": [
        {
            "name": "resnet50_0",
            "kind": "KIND_CPU",
            "count": 1,
            "gpus": [],
            "secondary_devices": [],
            "profile": [],
            "passive": false,
            "host_policy": ""
        }
    ],
    ...
}
Results is class: TABBY
PASS: ResNet50 instance kind

根据打印的模型配置,我们可以看到 instance_group 字段具有 kind 条目,该条目设置为 KIND_CPU

要将 instance_group 参数更改为 KIND_GPU,用户只需在 config.pbtxt 中将 KIND_CPU 替换为 KIND_GPU 即可。使用更新的配置文件重新启动服务器后,使用 -v 参数的成功推理请求将产生类似的输出,但具有更新的 instance_group 条目

{
    ...,
    "instance_group": [
        {
            "name": "resnet50_0",
            "kind": "KIND_GPU",
            "count": 1,
            "gpus": [
                0
            ],
            "secondary_devices": [],
            "profile": [],
            "passive": false,
            "host_policy": ""
        }
    ],
    ...
}
Results is class: TABBY
PASS: ResNet50 instance kind

如果需要,也可以在 CPU 和 GPU 上加载多个模型实例。

以下实例组设置将创建两个模型实例,一个在 CPU 上,另一个在 GPU 上。

instance_group [{ kind: KIND_CPU }, { kind: KIND_GPU}]

有关可能的模型配置的更多信息,请查看 Triton 服务器文档此处