【本机已实现】使用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

相关推荐
萧瑟其中~1 分钟前
二分算法模版——基础二分查找,左边界查找与右边界查找(Leetcode的二分查找、在排序数组中查找元素的第一个位置和最后一个位置)
数据结构·算法·leetcode
码上就好ovo2 分钟前
Atcoder Beginnner Contest 440
算法
黄焖鸡能干四碗7 分钟前
智能制造工业大数据应用及探索方案(PPT文件)
大数据·运维·人工智能·制造·需求分析
高洁0110 分钟前
CLIP 的双编码器架构是如何优化图文关联的?(3)
深度学习·算法·机器学习·transformer·知识图谱
世岩清上14 分钟前
乡村振兴主题展厅本土化材料运用与地域文化施工表达
大数据·人工智能·乡村振兴·展厅
jllllyuz15 分钟前
MATLAB实现蜻蜓优化算法
开发语言·算法·matlab
iAkuya17 分钟前
(leetcode)力扣100 36二叉树的中序遍历(迭代递归)
算法·leetcode·职场和发展
wangwangmoon_light25 分钟前
1.1 LeetCode总结(线性表)_枚举技巧
算法·leetcode·哈希算法
工藤学编程43 分钟前
零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
人工智能·langchain