模型实例类型示例#
Triton 模型配置允许用户为 实例组设置。 提供类型。可以编写 python 后端模型以遵循类型设置,从而控制模型实例在 CPU 或 GPU 上的执行。
在本示例中,我们将演示如何为您的 python 模型实现此目的。我们将使用 ResNet50
模型作为本示例的基础模型。
创建 ResNet50 模型仓库#
我们将使用此示例附带的文件来创建模型仓库。
首先,下载 client.py、 config.pbtxt、 resnet50_labels.txt 和 model.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
在容器内部,我们需要安装 torch
、 torchvision
和 pillow
才能运行此示例。我们建议使用 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
需要安装以下软件包:torch
、 torchvision
、 pillow
和 validators
。同样,我们建议使用 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 服务器文档此处