测试 Triton#
目前 Triton 仓库没有启用 CI 测试。我们将在未来的更新中启用 CI 测试。
但是,qa/ 目录中有一组测试可以手动运行以提供广泛的测试。在运行这些测试之前,您必须首先生成一些模型仓库,其中包含测试所需的模型。
生成 QA 模型仓库#
QA 模型仓库包含一些简单的模型,用于验证 Triton 的正确性。要生成 QA 模型仓库
$ cd qa/common
$ ./gen_qa_model_repository
$ ./gen_qa_custom_ops
这将会在 /tmp/<version>/qa_* 中创建多个模型仓库(例如 /tmp/24.12/qa_model_repository)。TensorRT 模型将为 CUDA 认为设备 0(零)的系统上的 GPU 创建。如果您的系统上有多个 GPU,请参阅脚本中的文档,了解如何定位特定的 GPU。
构建 SDK 镜像#
构建包含客户端库、模型分析器、性能分析器和示例的 tritonserver_sdk 镜像,使用以下命令。您必须首先检出 client 仓库的 <client branch>
分支到 clientrepo/ 子目录中,以及 perf_analyzer 仓库的 <perf analyzer branch>
分支到 perfanalyzerrepo/ 子目录中。通常,您希望将 <client branch>
和 <perf analyzer branch>
都设置为与您当前的服务器分支相同。
$ cd <server repo root>
$ git clone --single-branch --depth=1 -b <client branch> https://github.com/triton-inference-server/client.git clientrepo
$ git clone --single-branch --depth=1 -b <perf analyzer branch> https://github.com/triton-inference-server/perf_analyzer.git perfanalyzerrepo
$ docker build -t tritonserver_sdk -f Dockerfile.sdk .
构建 QA 镜像#
接下来,您需要构建 Triton Docker 镜像的 QA 版本。此镜像将包含 Triton、QA 测试以及运行 QA 测试所需的所有依赖项。首先执行 Docker 镜像构建 以生成 tritonserver_cibase 和 tritonserver 镜像。
然后,构建实际的 QA 镜像。
$ docker build -t tritonserver_qa -f Dockerfile.QA .
运行 QA 测试#
现在运行 QA 镜像并将 QA 模型仓库挂载到容器中,以便测试能够访问它们。
$ docker run --gpus=all -it --rm -v/tmp:/data/inferenceserver tritonserver_qa
在容器内,QA 测试位于 /opt/tritonserver/qa 中。要运行测试,请更改目录到测试并运行 test.sh 脚本。
$ cd <test directory>
$ bash -x ./test.sh
健全性测试#
许多测试要求您使用完整的 Triton 构建,启用所有后端和其他功能。有三个健全性测试是参数化的,因此即使您构建的 Triton 仅包含所有受支持 Triton 后端的子集,您也可以运行它们。这些测试是 L0_infer、L0_batcher 和 L0_sequence_batcher。对于这些测试,以下环境变量可用于控制测试的行为
BACKENDS:控制测试哪些后端。查看测试的 test.sh 文件以查看默认值和允许值。
ENSEMBLES:启用集成的测试。设置为“0”禁用,设置为“1”启用。如果启用,您必须在 Triton 构建中包含 identity 后端。
EXPECTED_NUM_TESTS:测试执行对测试子案例总数的检查。运行的子案例的确切数量将取决于您为 BACKENDS 和 ENSEMBLES 使用的值。因此,您需要根据您的测试进行适当的调整。
例如,如果您构建的 Triton 仅具有 TensorRT 后端,您可以按如下方式运行 L0_infer
$ BACKENDS="plan" ENSEMBLES=0 EXPECTED_NUM_TESTS=<expected> bash -x ./test.sh
其中“<expected>”是仅针对 TensorRT 测试且没有集成预期运行的子测试的数量。根据您正在测试的后端,您需要进行实验并确定“<expected>”的正确值。