我们的目标是星辰大海

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