Triton Server Python 后端优化

接上文 不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型

MultiGPU && Multi Instance

Config

追加

·
·
·
instance_group [{count: 4kind: KIND_GPUgpus: [ 0, 1 ]}
]

Python Backend

Triton 会根据配置信息启动四个实例,model_instance_device_id 可以获取到 Triton 给每个实例自动分配的 GPU,模型加载到GPU时使用 .to(f"cuda:{gpu}"时指定 GPU 的 id 即可。

import numpy as np
import triton_python_backend_utils as pb_utils
from transformers import ViTImageProcessor, ViTModel
from diffusers import DiffusionPipeline
import torch
import time
import os
import shutil
import json
import numpy as npclass TritonPythonModel:def initialize(self, args):gpu = json.loads(args["model_instance_device_id"])self.model = DiffusionPipeline.from_pretrained("playgroundai/playground-v2.5-1024px-aesthetic",torch_dtype=torch.float16,variant="fp16").to(f"cuda:{gpu}")
·
·
·

Dynamic Batch

开启此配置 Triton 会将一段时间间隔内的请求组成一个batch交给模型批处理

Config

·
·
·
dynamic_batching {max_queue_delay_microseconds: 100
}

Python Backend

此时需要对后端代码进行改造,之前的代码每次只能处理一个请求,GPU仅仅占用30G,对于80G的 GPU 来说实在是浪费资源。SDXL 依次是可以处理多个 Prompt 生成多个图片的,只要不把现存撑爆就行。现在我们要在最大 Batch 的限制内处理多个请求,假设客户端每个请求只包含一个 Prompt。

我们获取到一个请求后不直接输入到模型,而是都添加到 Prompts 列表里,然后统一生成图片,然后把生成的图片和请求一一对应上,最后响应给客户端就OK了。

·
·
·def execute(self, requests):responses = []prompts = []for request in requests:inp = pb_utils.get_input_tensor_by_name(request, "prompt")for i in inp.as_numpy():prompts.append(i[0].decode())images = self.model(prompt=prompts, num_inference_steps=50, guidance_scale=3).imagespixel_values = []for image in images:pixel_values.append(np.asarray(image))inference_response = pb_utils.InferenceResponse(output_tensors=[pb_utils.Tensor("generated_image",np.array(pixel_values),)])responses.append(inference_response)return responses

ONNX_RUNTIME(失败)

转换 playgroundai/playground-v2.5-1024px-aesthetic pipeline 为 onnx 格式

pip3 install diffusers>=0.27.0 transformers accelerate safetensors optimum["onnxruntime"]
optimum-cli export onnx --model playgroundai/playground-v2.5-1024px-aesthetic --task stable-diffusion-xl playground-v2.5_onnx/

在这里插入图片描述

分享已经转换好的文件:

  • 谷歌硬盘

测试一下

from optimum.onnxruntime import ORTStableDiffusionXLPipelinemodel_id = "playground-v2.5_onnx"
pipeline = ORTStableDiffusionXLPipeline.from_pretrained(model_id)
prompt = "sailing ship in storm by Leonardo da Vinci"
image = pipeline(prompt).images[0]
# pipeline.save_pretrained("playground-v2.5-onnx/")

成功加载,发现使用的是 CPU 推理,参考Accelerated inference on NVIDIA GPUs发现默认是用CPU,需要卸载 optimum[“onnxruntime”] 安装 optimum[onnxruntime-gpu]。

pipeline = ORTStableDiffusionXLPipeline.from_pretrained(model_id, provider="CUDAExecutionProvider", device=f"cuda:{gpu}")

FAQ

CPU 推理正常,GPU推理报错,类似这种错误:

  1. [E:onnxruntime:Default, provider_bridge_ort.cc:1480 TryGetProviderInfo_CUDA] /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1193 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_cuda.so with error: libcublasLt.so.12: cannot open shared object file: No such file or directory
    解决方法: 安装CUDNN,官方手册
apt install libcudnn8=8.9.2.26-1+cuda12.1 -y
apt install libcudnn8-dev=8.9.2.26-1+cuda12.1 -y
apt install libcudnn8-samples=8.9.2.26-1+cuda12.1 -y
  1. 2024-04-08 15:21:39.497586288 [E:onnxruntime:, sequential_executor.cc:514 ExecuteKernel] Non-zero status code returned while running Add node. Name:‘/down_blocks.1/attentions.0/Add’ Status Message: /down_blocks.1/attentions.0/Add: left operand cannot broadcast on dim 3 LeftShape: {2,64,4096,10}, RightShape: {2,640,64,64}
    在这里插入图片描述
    解决方法:
    未解决,参考 Issue

TENSORRT_RUNTIME

Doing…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网数据服务平台

随着物联网技术的迅猛发展,海量数据的产生和应用成为推动工业数字化转型的核心动力。在这个数据为王的时代,如何高效地收集、处理、分析并应用这些数据,成为了企业关注的焦点。物联网数据服务平台应运而生,为企业提供了全面、高效…

CLR学习

视频链接:《CLR十分钟》系列之CLR运行模型_哔哩哔哩_bilibili 什么是 CLR 公共语言运行时(Common Language Runtime CLR) 是一个可有多种编程语言使用的 运行时,CLR 的核心功能(比如 内存管理,程序集加载…

Rust 练手小项目:猜数游戏

好久没写 Rust 了,参考《Rust 程序设计语言》写了一下猜数游戏。差不多 40 行,感觉写起来真舒服。 use rand::Rng; use std::{cmp::Ordering, io};fn main() {let secret_number rand::thread_rng().gen_range(0..100);println!("[*] Guess the n…

耐受强酸碱PFA试剂瓶高纯实验级进口聚四氟乙烯材质取样瓶

PFA取样瓶作为实验室中常备器皿耗材之一,主要用来盛放、储存和运输样品,根据使用条件不同,也可叫特氟龙试剂瓶、样品瓶、储样瓶、广口瓶、进样瓶等。广泛应用于半导体、新材料、多晶硅、硅材、微电子等行业。近年来随着新兴行业的快速发展&am…

methods 中配置的函数,不要用箭头函数?

在 Vue.js 中,确实不建议在 methods 中使用箭头函数。这是因为箭头函数在定义时会捕获其上下文的 this 值,并且不会重新绑定 this,而是继承自外部作用域的 this 值。这种行为与普通函数有所不同。 在 Vue 组件中,methods 中的函数…

【ARM 裸机】开发环境搭建

1、Ubuntu 和 Windows 文件互传 使用过程中,要频繁进行 Ubuntu 和 Windows 的文件互传,需要使用 FTP 服务; 1.1、开启 Ubuntu 下的 FTP 服务 //安装 FTP 服务 sudo apt-get install vsftpd //修改配置文件 sudo vi /etc/vsftpd.conf//重启…

XML(Extensible Markup Language 可扩展标记语言)

1、什么是XML XML 可扩展(标签是自定义的)标记语言,是一种用于编码文档的标记语言。广泛用于数据的存储和传输,如在配置文件中存储数据、在网络中传输。特别是当数据需要在不同的应用程序或系统之间进行交换时,XML 是…

某想主站的短信轰炸漏洞

很难想象主站居然还有这漏洞 某天的一个晚上,默默的打开了电脑,娴熟的打开了Burp suite, 看到一个很熟悉的注册登录页面,开始测试。 很难想象,还有验证码时效性,于是怼了半刻钟,终于让我逮到了他的数据包…

map.queryRenderedFeatures

map.queryRenderedFeatures是一个在地图库Mapbox GL JS中使用的方法,它用于查询在地图上渲染的特定要素。这个方法通常与地理空间查询一起使用,以找出在地图上的特定点、区域或者是其他的地理要素。 以下是一些使用map.queryRenderedFeatures的示例&…

TechTool Pro for Mac v19.0.3中文激活版 硬件监测和系统维护工具

TechTool Pro for Mac是一款专为Mac用户设计的强大系统维护和故障排除工具。它凭借全面的功能、高效的性能以及友好的操作界面,赢得了广大用户的信赖和好评。 软件下载:TechTool Pro for Mac v19.0.3中文激活版 作为一款专业的磁盘和系统维护工具&#x…

IDEA 设置类注释模板作者、日期、描述等信息(推荐标准!)

idea注释模版配置 idea作为越来越多程序员使用的开发工具,平时的代码注释也非常的关键,类上注释和方法上注释每次换电脑或者新同事入职都要统一修改,找了网上好多教程都写的乱七八糟的啥都有,为方便统一就自己写一个操作方法&…

开发过程中容易忽略的点之服务改造类

1.前言 本文主要介绍服务改造的三个方面:数据库、服务器、中间件 2.场景举例 某系统改造需要替换数据库,未关注字符集细节点差异,上线后数据库部分数据出现乱码问题。某系统报表SQL查询使用不常用TO_NCHAR,开发测试环境均正常&…

制氧机生产厂家如何确保氧气管道安全高效

制氧机作为生产氧气的关键设备,其安全性与高效性受到了广泛关注。作为制氧机生产厂家,确保氧气管道的安全高效运行,不仅是责任所在,更是对用户生命财产安全的有力保障。那么,制氧机生产厂家如何确保氧气管道安全高效生…

期货量化交易软件:MQL5 中的范畴论 (第 15 部分)函子与图论

概述 在上一篇文章中,我们目睹了前期文章中涵盖的概念(如线性序)如何视作范畴,以及为什么它们的“态射”在与其它范畴相关时即构成函子。在本文中,我们赫兹量化软件将阐述来自前期文章中的概括,即通过查看…

浙大恩特客户资源管理系统 i0004_openFileByStream.jsp 任意文件读取漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统 i0004_openFileByStream.jsp接口处存在任意文件读取漏洞,未经身份验证攻…

数字证书在网络安全中的关键作用与日常应用

在当今数字化的时代,网络安全问题日益凸显,保护数据安全和用户隐私成为了人们关注的焦点。数字证书作为一种重要的网络安全技术,其在网络安全中扮演着关键的角色,并且在我们的日常生活中有着广泛的应用。现在给大家介绍简单介绍下…

kill某个端口号的进程

查找占用端口 8000 的进程的 PID: sudo netstat -tlnp | grep 8000 终止进程: 使用找到的 PID,使用以下命令终止该进程(假设 PID 为 1234): sudo kill -9 1234

设计模式|适配器模式(Adapter Pattern)

文章目录 结构优点缺点示例装饰器和适配器有什么区别常见面试题适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。这种模式通常用于解决两个已有接口之间不兼容的情况。适配器模式使得不兼容的接口能够协同工作,而无需…

RK3399广告机主板板刷armbian--改固件方法

最近入捭几块RK3399的广告机板子,没资料,没固件,只有原厂android固化在板子上。于是想办法刷一个armbian上去。 armbian是简化的linux系统,整个固件只有二个部分,分别是启动分区与系统分区。较后期版本可以直接换dtb&…

在抖音做“奸商”!虽说不光彩,但能“发大财”!

打工人都知道的一句话:“做老板的都是周扒皮!公司最赚钱的就是老板” 虽然手底下的员工都在骂老板压榨员工,但如果有一个让员工当老板的机会,我相信没有人会选择继续当牛做马 今天我就来给大家介绍一个:我正在做的“…