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

我们的目标是星辰大海

硬件配置: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

bash 复制代码
{
  "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

python 复制代码
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之后登录自己的账号

bash 复制代码
sudo docker login nvcr.io

图 2.3 登录成功

6️⃣启动服务

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

图 2.4 目录结构

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

bash 复制代码
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服务

bash 复制代码
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

bash 复制代码
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

python 复制代码
brew  install nvidia-docker --cask
图片加载错误

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

解决方法
bash 复制代码
Image.ANTIALIAS ------> Image.LANCZOS 或 Image.Resampling.LANCZOS

model_analyzer

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

bash 复制代码
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

bash 复制代码
docker pull nvcr.io/nvidia/tritonserver:24.09-py3-sdk

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

bash 复制代码
docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:24.09-py3-sdk

图 2.8 Trition SDK

4️⃣测试模型

bash 复制代码
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

bash 复制代码
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

使用命令分析模型

bash 复制代码
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配置文件中。

bash 复制代码
"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.

bash 复制代码
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

相关推荐
ggdpzhk4 分钟前
输入两个正整数,计算最大公约数和最小公倍数
java·算法
棱镜研途26 分钟前
学习笔记丨AR≠VR:透视沉浸式技术的“虚实象限”法则
学习·机器学习·ar·vr·虚拟现实
坚毅不拔的柠檬柠檬31 分钟前
AI办公提效,Deepseek + wps生成ppt
人工智能·ai·wps·deepseek
张较瘦_39 分钟前
[论文阅读] 人工智能+软件工程 | 用大语言模型架起软件需求形式化的桥梁
论文阅读·人工智能·软件工程
张较瘦_44 分钟前
[论文阅读] 人工智能 + 软件工程 | USEagent:迈向统一的AI软件工程师
论文阅读·人工智能·软件工程
楼台的春风1 小时前
【Linux驱动开发 ---- 4.1_sysfs 详解】
linux·运维·c语言·数据库·人工智能·驱动开发·嵌入式硬件
Blossom.1181 小时前
基于深度学习的智能视频行为识别系统:技术与实践
人工智能·深度学习·神经网络·目标检测·机器学习·音视频·sklearn
苹果企业签名分发1 小时前
火山引擎豆包大模型系列新品发布
人工智能·火山引擎
硅谷秋水1 小时前
EfficientVLA:面向视觉-语言-动作模型无训练的加速与压缩
人工智能·深度学习·机器学习·机器人
weixin_307779132 小时前
波动方程兼容性条件分析
算法