Triton Server Python 后端优化

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

MultiGPU && Multi Instance

Config

追加

·
·
·
instance_group [
  {
    count: 4
    kind: KIND_GPU
    gpus: [ 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 np

class 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).images
        pixel_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 ORTStableDiffusionXLPipeline

model_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…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

win10系统中exe文件打不开

问题描述 昨天下载了某个驱动安装程序之后,点击.exe文件没有反应。 解决方法 1. 开启兼容模式运行 右键点击属性 点击【兼容性】,并且【以兼容模式运行程序】 2. 给exe文件换个文件夹再次尝试 我使用第一个方法没有用,之后尝试了把文…

Eureka-搭建Eureka步骤

简介: Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实…

转让北京100万旅行社带国内旅行社许可证条件和要求

旅行社的主要分类为国际旅行社和国内旅行社两类。国际旅行社拥有更为广泛的经营范围,不仅涵盖国内旅游业务,还包括出境旅游业务以及入境旅游业务;相比之下,国内旅行社则专注于国内旅游市场以及入境旅游业务。当前情况下&#xff0…

Pandas部分应掌握的重要知识点

目录 Pandas部分应掌握的重要知识点一、DataFrame数据框的创建1、直接基于二维数据创建(同时使用index和columns参数)2、基于excel文件中的数据来创建 二、查看数据框中的数据和联机帮助信息1、查看特殊行的数据2、查看联机帮助的两种常见方法&#xff0…

MDK平台 - Code, RO-data , RW-data, ZI-data详解

文章目录 1 . 前言2 . Code, RO-data , RW-data, ZI-data解析3 . RAM上电复位4 . 细节扩展5 . 总结 【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 MDK编译后,会列出Code, RO-data , RW-data, ZI-data,以下解析…

2024年会计、审计、财务与经济管理国际会议(ICAAFEM2024)

2024年会计、审计、财务与经济管理国际会议(ICAAFEM2024) 会议简介 2024年国际会计、审计、财务和经济管理会议(ICAAFEM2024)将在云南省昆明市举行。会议旨在为从事“会计、审计、财务、经济管理”研究的专家学者提供一个平台&am…

java快速幂算法

快速幂算法 参考视频(参考五角七边up大佬) 幂运算的介绍 幂运算是指将一个数自身乘以自身多次的运算,其表达式为 a n a^n an,其中 a a a 是底数, n n n 是指数。 快速幂解释 快速幂算法是一种用于快速计算幂运算的算法&…

easyui combobox下拉框组件输入检索全模糊查询

前引: easyui下拉组件(combobox),输入检索下拉内容,是默认的右模糊匹配,而且不支持选择。因业务要求需要做成全模糊查询,目前网上搜索有两种方案: 1.修改easyui源码,这个…

Windows联网状态工具TCPView

文章目录 TCPView命令行工具更多Sysinternals Suite工具 TCPView TCPView用于显示系统上所有 TCP 和 UDP 终结点的详细列表,包括本地和远程地址以及 TCP 连接的状态,界面如下。 列表的表头含义如下 表头含义表头含义Process name应用名称Process id进程…

STM32H7各块RAM的位置和作用

STM32H7各块RAM的位置和作用 RAM各块RAM的特性各块RAM的时钟问题RAM分配方案 摘抄于armfly-V7开发板bsp手册,仅供个人学习。 RAM 这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain 和 D3 Domain。 ◆ ITCM 和…

【Hello算法】 > 第 2 关 >数据结构 之 数组与链表

数据结构 之 数组与链表 1:Understanding data structures !——了解数据结构——1.1:Classification-分类-1.2:Type-类型- 2:Arrays are the bricks that make up the wall of data structures *——数组是组成数据结…

【Java核心能力】美团优选后端一面:Java 八股文相关内容

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

基于分布式鲁棒性的多微网电氢混合储能容量优化配置——1

Optimal configuration of multi microgrid electric hydrogen hybrid energy storage capacity based on distributed robustness A B S T R A C T 储能与微电网相结合是解决分布式风能、太阳能资源不确定性、降低其对大电网安全稳定影响的重要技术路径。随着分布式风电和太阳…

Web自动化测试进阶:网页中难点之等待机制 —— 强制等待,隐式等待

为什么要添加等待 避免页面未渲染完成后操作,导致的报错 经常会遇到报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":&q…

架构设计参考项目系列主题:新零售SaaS架构:客户管理系统架构设计

什么是客户管理系统? 客户管理系统,也称为CRM(Customer Relationship Management),主要目标是建立、发展和维护好客户关系。 CRM系统围绕客户全生命周期的管理,吸引和留存客户,实现缩短销售周期、降低销售成本、增加销售收入的目的,从而提高企业的盈利能力和竞争力。 …

java-spring 图灵 02 手写spring

01.idea中创建一个maven管理的空项目 02.模拟创建出spring容器类,这里叫wzpApplicationContext,创建的时候会自动加载配置类的数据 public class wzpApplicationContext {private Class configClass;public wzpApplicationContext(Class configClass) …

Selenium+TestNG学习笔记

------------------TestNG-------------------- 1.层级 suite -》test-》class-》method 建议层级 class对应一个测试用例,suite对应一个测试集 2. testNG中的PO模式 3.运行多个测试类的测试用例 通过suite来进行管理;suite在testNG中可以通过xml 来进行编写管理…

多媒体互动装置如何助力智慧城市展厅的信息化建设?

随着现代化科技技术的发展,智慧城市的建设概念与实施也日益成熟,其中智慧城市展厅便是用于展示智慧城市理念、技术和规划的重要平台,而应用在其中的多媒体互动装置,更是起着重要的作用,它们能够让观众更直观地了解和体…

浅述.Net中的Hash算法(顺带对称、非对称算法)

【写在前面】 对称加密算法(只有一个私钥,比如DES【不推荐】、AES); 非对称加密算法(公钥与私钥,比如RSA); Hash算法也称为散列函数算法,任意长度的数据都转换为固定长度的字符串&#xff08…

关闭 SPI 会导致 WRPERR 错误的问题分析

1. 引言 在 STM32 的应用中,SPI 算是用的比较多的外设了,也是单片机最常见外设之一。客户说它执行了关闭 SPI 的代码,竟然会导致 Flash 中的 WRPERR 标志置位,致使应用碰到一些问题。这就奇怪了,SPI 和内部 Flash 看起…