【本机已实现】使用Mac部署Triton服务,使用perf_analyzer、model_analyzer

发布于:2025-06-21 ⋅ 阅读:(20) ⋅ 点赞:(0)

我们的目标是星辰大海

硬件配置:Apple M2+24 GB

Tirtion实现过程

1️⃣Docker安装

Tirtion的实现,首先要确保系统上的Docker可用

使用默认源会导致拉取失败,因为墙

Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

2️⃣Docker源地址配置

试了很多源地址,只有这篇引用这篇博主的源地址使用成功

https://zhuanlan.zhihu.com/p/24228872523https://zhuanlan.zhihu.com/p/24228872523

{
  "registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/" 
],
 "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
    ],
"debug": true,
"experimental": false
}

图 2.1 Docker测试成功

 3️⃣拉取Trition

docker pull nvcr.io/nvidia/tritonserver:22.04-py3

4️⃣验证Trition

 图 2.2 验证Trition安装成功

5️⃣登录验证API

https://org.ngc.nvidia.com/setup/api-key

注册获取API之后登录自己的账号

sudo docker login nvcr.io

图 2.3 登录成功

6️⃣启动服务

首先你得需要一个目录结构

图 2.4 目录结构

config.pbtxt中的配置文件就是模型的结构,下面是一个示例

name: "testmodel" # 模型名,也是目录名
platform: "pytorch_libtorch" # 模型对应的平台,本次使用的是torch,不同格式的对应的平台可以在官方文档找到
max_batch_size : 64 # 一次送入模型的最大bsz,防止oom
input [
  {
    name: "input__0" # 输入名字,对于torch来说名字于代码的名字不需要对应,但必须是<name>__<index>的形式,注意是2个下划线,写错就报错
    data_type: TYPE_INT64 # 类型,torch.long对应的就是int64,不同语言的tensor类型与triton类型的对应关系可以在官方文档找到
    dims: [ -1 ]  # -1 代表是可变维度,虽然输入是二维的,但是默认第一个是bsz,所以只需要写后面的维度就行(无法理解的操作,如果是[-1,-1]调用模型就报错)
  }
]
output [
  {
    name: "output__0" # 命名规范同输入
    data_type: TYPE_FP32
    dims: [ -1, -1, 4 ]
  },
  {
    name: "output__1"
    data_type: TYPE_FP32
    dims: [ -1, -1, 8 ]
  }
]

为了方便根据自己的模型平台进行更改,本文提供了常用的platform格式

  • TensorFlow (tensorflow):

    • 用于 TensorFlow 模型。

    • 例如,platform: "tensorflow_graphdef"platform: "tensorflow_savedmodel"

  • ONNX (onnx):

    • 用于 ONNX 格式的模型。

    • 例如,platform: "onnxruntime"

  • PyTorch (pytorch):

    • 用于 PyTorch 模型。

    • 例如,platform: "pytorch_libtorch"

  • TensorRT (tensorrt):

    • 用于通过 NVIDIA TensorRT 优化的模型,常用于 GPU 加速。

    • 例如,platform: "tensorrt"

 用以下命令启动Trition服务

sudo docker run  --rm --net=host -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:22.04-py3 tritonserver --model-repository=/models

图  2.5 服务启动成功

图 2.6 服务加载成功 

🤔Trition服务性能测试

以下是Trition提供的对模型测试的工具

  • perf_analyzer,可以测量吞吐延迟等。文档
  • model_analyzer,利用 perf_analyzer 来进行性能分析,测量 GPU 内存和利用率。仓库
  • model_navigator,自动化部署模型。仓库

perf_analyzer

首先进入docker

docker run --rm  --shm-size=2g --network=host -it --name triton-server -v `pwd`:/triton nvcr.io/nvidia/tritonserver:24.09-py3 bash

因为测试工具中使用的为Nvidia的Docker,有需要的话可以下载,本文在MacOS上,所以就不下载这个docker

brew  install nvidia-docker --cask
图片加载错误

AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'

解决方法
Image.ANTIALIAS ——> Image.LANCZOS 或 Image.Resampling.LANCZOS

model_analyzer 

1️⃣启动之前的Tirtion,目的是能够加载本地模型

sudo docker run  --rm --net=host -v */triton_repo:/models nvcr.io/nvidia/tritonserver:24.09-py3 tritonserver --model-repository=/models

​图 2.7 启动Trition成功 

2️⃣拉取tritionserver-sdk

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

3️⃣如果你的服务器启动正常,进入 Trition Inference Server SDK容器中

docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:24.09-py3-sdk

图 2.8 Trition SDK

4️⃣测试模型

perf_analyzer -m resnet34 --percentile=95 --concurrency-range 100
  • –percentile:以百分位数表示置信度值用于确定测量结果是否稳定
  • –concurrency-range:指定并发量参数,还可以使用,100:120:10表示并发量在100到120之间以10作为间隔测试所有并发量情况下的吞吐量
  • -b:指定请求的batch-size,默认为1
  • -i:指定请求所使用的协议,参数可以为http或grpc

其他更多的参数可以通过perf_analyzer -h查看,执行成功之后会输出模型所能承受的吞吐量以及时延

5️⃣使用Model_analyzer工具

工具能够分析模型的性能,要比perf_analyzer分析的更具体

我们首先进入trition-server-sdk中,从这个里面来启动Model_analyzer

docker run  --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 -ti -v /var/run/docker.sock:/var/run/docker.sock --net host --privileged --rm -v */Tirtion/tmp/triton_repo/:/models -v */Tirtion/tmp/triton_repo/:/*/Tirtion/tmp/triton_repo/ nvcr.io/nvidia/tritonserver:24.09-py3-sdk bash

 

图 2.9 成功进入Tirton Inference Server SDK 

使用命令分析模型

model-analyzer profile --model-repository */Tirtion/tmp/triton_repo --profile-models testmodel --triton-launch-mode=docker --output-model-repository=*/tmp/triton_repo/testmodelout --triton-server-path=/opt/tritonserver --override-output-model-repository

 可添加参数:

  • run-config-search-max-concurrency:最大的并发数
  • run-config-search-max-instance-count:最大的count也就是模型实例数
  • triton-launch-mode:docker或local,如果是local的时候需要容器内安装tritonserver,这里使用的是docker
  • output-model-repository:测试报告保存的目录
  • override-output-model-repository:每次测试的时候都会覆盖之前的测试报告

图 2.10 加载成功 

tips

建议使用带有GPU的windows系统,避免多个错误信息

​图 2.5 Tirtion错误 

每次拉取镜像都要重新开始,添加以下代码至docker配置文件中。

"features": {
    "buildkit": true,
    "containerd-snapshotter": true
  }

 图 2.6 配置文件

 之后每次拉取都会延续上次的继续(需要手动Ctrl+C,之后才会继续,因网络原因自动中断不会再次运行拉取命令不会继续)

图 2.7 下载演示 

报错

 1️⃣

The path /models is not shared from the host and is not known to Docker.

You can configure shared paths from Docker -> Preferences... -> Resources -> File Sharing.

See https://docs.docker.com/desktop/settings/mac/#file-sharing for more info.")

一定要看你的model-repository,这个要更换成你本地的文件地址,我就是思维局限了,一直使用的是挂载在docker里面的地址。

 2️⃣

 model_analyzer.model_analyzer_exceptions.TritonModelAnalyzerException: Either the binary 'tritonserver' is not on the PATH, or Model Analyzer does not have permissions to execute os.stat on this path.

touch /opt/tritonserver
chmod +x /opt/tritonserver

调配了一下午,发现下载较新的Tirtion服务可以解决大多数问题

引用

以下是优秀的参考博文

NVIDIA-Triton-Tutorial_Zh: 英伟达 Triton 推理服务器 中文文档 - Gitee.comhttps://gitee.com/szpliman/nvidia-triton-tutorial_zh/tree/master/Conceptual_Guide/Part_1-model_deployment

从零开始使用NVIDIA-Triton | SanbuBlog零、写在开头https://www.aispacewalk.cn/docs/ai/nvidia/triton-tutorial博客导航 - 楷哥 - 博客园这篇博客整理了机器学习系统相关的博客,一方面是为了方便自己和读者查阅文章,另一方面这个手动整理的目录是一个学习路线。如果您对机器学习系统感兴趣,那么希望我的这个导航可以给到您启发。 应用 神经网络基础 神经网络之优化算法;权重衰减和学习率衰减 卷积神经网络基础 自然语言处理 命名实体识别:Neurahttps://www.cnblogs.com/zzk0/p/16787330.html

使用perf_analyzer和model-analyzer测试tritonserver的模型性能超详细完整版_timeout 30: found 0 model versions that have in-fl-CSDN博客文章浏览阅读3.3k次,点赞5次,收藏9次。本文指导如何使用perf_analyzer和model-analyzer测试TritonServer模型吞吐量,包括环境配置、工具使用和常见问题解决。https://xiulian.blog.csdn.net/article/details/132583942


网站公告

今日签到

点亮在社区的每一天
去签到