PYtriton:从Python提供的Triton Inference Server

news2024/12/24 3:33:24

env

  • sudo docker run -it --shm-size 8gb --rm --gpus=all -p 8126:8000 -v ${PWD}:/test nvcr.io/nvidia/pytorch:23.04-py3 bash

  • sudo docker run -it --shm-size 8gb --rm --gpus=all -v ${PWD}:/test nvcr.io/nvidia/pytorch:23.04-py3 bash

  • 服务端Docker : sudo docker run -it --shm-size 8gb --rm --gpus=all -p 8126:8000 -v ${PWD}:/test nvcr.io/nvidia/pytorch:23.02-py3 bash

  • 客户端Docker : sudo docker run -it --shm-size 8gb --rm --gpus=all -v ${PWD}:/test nvcr.io/nvidia/pytorch:23.02-py3 bash

  • pip install -U nvidia-pytriton -i https://mirrors.aliyun.com/pypi/simple/

官方文档与测试示例

  • quick_start: https://triton-inference-server.github.io/pytriton/0.1.5/quick_start/
  • wget https://github.com/triton-inference-server/pytriton/archive/refs/heads/main.zip

linear_random_pytorch

在这里插入图片描述
在这里插入图片描述

client

  • client.infer_batch()函数用于请求server中的模型,函数参数名称在 server的triton.bind()中定义(shape隐含batch)
import argparse
import logging

import torch  # pytype: disable=import-error

from pytriton.client import ModelClient


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument(
        "--url",
        default="localhost",
        help=(
            "Url to Triton server (ex. grpc://localhost:8001)."
            "HTTP protocol with default port is used if parameter is not provided"
        ),
        required=False,
    )
    args = parser.parse_args()
    logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(name)s: %(message)s")
    logger = logging.getLogger("examples.linear_random_pytorch.client")

    input1_batch = torch.randn(128, 20).cpu().detach().numpy()

    logger.info(f"Input: {input1_batch.tolist()}")

    with ModelClient(args.url, "Linear") as client:
        logger.info("Sending request")
        result_dict = client.infer_batch(input1_batch)

    for output_name, output_batch in result_dict.items():
        logger.info(f"{output_name}: {output_batch.tolist()}")


if __name__ == "__main__":
    main()

server

import logging

import numpy as np
import torch  # pytype: disable=import-error

from pytriton.decorators import batch
from pytriton.model_config import ModelConfig, Tensor
from pytriton.triton import Triton

DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
MODEL = torch.nn.Linear(20, 30).to(DEVICE).eval()

# 推理服务
@batch
def _infer_fn(**inputs):
    (input1_batch,) = inputs.values()
    input1_batch_tensor = torch.from_numpy(input1_batch).to(DEVICE)
    output1_batch_tensor = MODEL(input1_batch_tensor)
    output1_batch = output1_batch_tensor.cpu().detach().numpy()
    return [output1_batch]


logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(name)s: %(message)s")
logger = logging.getLogger("examples.linear_random_pytorch.server")

# 使用绑定方法在模型和 Triton 推理服务器之间创建连接
with Triton() as triton:
    logger.info("Loading Linear model.")
    triton.bind(
        model_name="Linear",
        infer_func=_infer_fn,
        inputs=[
            Tensor(dtype=np.float32, shape=(-1,)),
        ],
        outputs=[
            Tensor(dtype=np.float32, shape=(-1,)),
        ],
        config=ModelConfig(max_batch_size=128),
    )
    logger.info("Serving models")
    triton.serve()

cg

  • https://github.com/triton-inference-server/pytriton/tree/main/examples/huggingface_stable_diffusion

https://github.com/grimoire/amirstan_plugin
https://conan.io/

使用 NVIDIA TensorRT 使用 ONNX 模型和自定义层估计深度
使用gs将ReshapeShapeUnsqueezeMulAddInstance NormalizationGroupNormalizationPlugin组合替换为GN
https://developer.nvidia.com/blog/estimating-depth-beyond-2d-using-custom-layers-on-tensorrt-and-onnx-models/






https://stackoverflow.com/questions/71220867/pytorch-to-onnx-export-aten-operators-not-supported-onnxruntime-hangs-out
https://paulbridger.com/posts/tensorrt-object-detection-quantized/


TensorRT教程8:使用 Python API 从头创建网络(重点)https://blog.csdn.net/weixin_41562691/article/details/118278140
TensorRT教程18:使用DLA(深学习加速器) https://blog.csdn.net/weixin_41562691/article/details/119085054

矩阵乘法例 https://www.cnblogs.com/scut-fm/p/3756242.html
自己写的CUDA矩阵乘法能优化到多快?https://www.zhihu.com/question/41060378
【Cuda矩阵运算库】cuBLAS介绍 https://zhuanlan.zhihu.com/p/438551588
银河系CUDA编程指南(1)——用cuBLAS库进行一个简单矩阵乘法计算https://zhuanlan.zhihu.com/p/427262454

C++将返回值为引用有什么作用?https://www.zhihu.com/question/353263548
https://www.jianshu.com/p/da73f381f8bc

从 TensorRT 7.1 开始,您无需为单个插件编写特定的 ONNX 导入器。您可以使用 ,将插件创建者静态注册到插件注册表。在此示例中,用于注册 GN 插件。REGISTER_TENSORRT_PLUGINREGISTER_TENSORRT_PLUGIN(GroupNormalizationPluginCreator)
ONNX 图中插件层的名称应与类函数返回的名称相同。在解析过程中,TensorRT 会根据其名称将该层标识为插件。
在此示例中,图层的名称为 。getPluginNameGroupNormalizationPluginCreatorGroupNormalizationPlugin
在 ONNX 中为自定义层设置的属性必须与类的插件属性匹配。在此插件中,属性分别为 和 。GroupNormalizationPluginCreatorepsnum_groups

network_from_onnx_path(onnx_path,flags=[trt.OnnxParserFlag.NATIVE_INSTANCENORM]),
AttributeError: module 'tensorrt' has no attribute 'OnnxParserFlag'

pip install tensorrt==8.6.1 -i https://mirrors.aliyun.com/pypi/simple/

  • 如果在一些转换处理中遇到问题可考虑换到23.02版本,然后手动更改其中的tensorrt版本 pip install tensorrt==8.6.1 -i https://mirrors.aliyun.com/pypi/simple/

23.04环境中存在的问题

Loading TensorRT engine E

Loading TensorRT engine: engine/clip.plan
[W] ‘colored’ module is not installed, will not use colors when logging. To enable colors, please install the ‘colored’ module: python3 -m pip install colored
[I] Loading bytes from engine/clip.plan
[E] 6: The engine plan file is not compatible with this version of TensorRT, expecting library version 8.6.1.2 got 8.6.1.6, please rebuild.
[E] 2: [engine.cpp::deserializeEngine::951] Error Code 2: Internal Error (Assertion engine->deserialize(start, size, allocator, runtime) failed. )
[!] Could not deserialize engine. See log for details.

  • dpkg -l 命令会列出系统中所有已安装的软件包信息。结合grep,可以过滤出自己想要的内容。
root@407e1e76c8b1:/test/hzt_trt/TensorRT-release-8.6/demo/Diffusion# dpkg -l | grep nvinfer
ii  libnvinfer-bin                  8.6.1.2-1+cuda12.0                         amd64        TensorRT binaries
ii  libnvinfer-dev                  8.6.1.2-1+cuda12.0                         amd64        TensorRT development libraries
ii  libnvinfer-dispatch-dev         8.6.1.2-1+cuda12.0                         amd64        TensorRT development dispatch runtime libraries
ii  libnvinfer-dispatch8            8.6.1.2-1+cuda12.0                         amd64        TensorRT dispatch runtime library
ii  libnvinfer-headers-dev          8.6.1.2-1+cuda12.0                         amd64        TensorRT development headers
ii  libnvinfer-headers-plugin-dev   8.6.1.2-1+cuda12.0                         amd64        TensorRT plugin headers
ii  libnvinfer-lean-dev             8.6.1.2-1+cuda12.0                         amd64        TensorRT lean runtime libraries
ii  libnvinfer-lean8                8.6.1.2-1+cuda12.0                         amd64        TensorRT lean runtime library
ii  libnvinfer-plugin-dev           8.6.1.2-1+cuda12.0                         amd64        TensorRT plugin libraries
ii  libnvinfer-plugin8              8.6.1.2-1+cuda12.0                         amd64        TensorRT plugin libraries
ii  libnvinfer-vc-plugin-dev        8.6.1.2-1+cuda12.0                         amd64        TensorRT vc-plugin library
ii  libnvinfer-vc-plugin8           8.6.1.2-1+cuda12.0                         amd64        TensorRT vc-plugin library
ii  libnvinfer8                     8.6.1.2-1+cuda12.0                         amd64        TensorRT runtime libraries

Onnx Exporting the operator E

  • Exporting the operator ‘aten::scaled_dot_product_attention’ to ONNX opset version 17 is not supported. Please feel free to request support or submit a pull request on PyTorch GitHub: https://github.com/pytorch/pytorch/issues.

cudaError

  • https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__TYPES.html#group__CUDART__TYPES_1g3f51e3575c2178246db0a94a430e0038

Custom化SD

https://github1s.com/NVIDIA/TensorRT/blob/release/8.6/demo/Diffusion/models.py#L71-L97
def get_path(version, inpaint=False):
    if version == "1.4":
        if inpaint:
            return "runwayml/stable-diffusion-inpainting"
        else:
            return "CompVis/stable-diffusion-v1-4"
    elif version == "1.5":
        if inpaint:
            return "runwayml/stable-diffusion-inpainting"
        else:
            return "runwayml/stable-diffusion-v1-5"
    elif version == "2.0-base":
        if inpaint:
            return "stabilityai/stable-diffusion-2-inpainting"
        else:
            return "stabilityai/stable-diffusion-2-base"
    elif version == "2.0":
        if inpaint:
            return "stabilityai/stable-diffusion-2-inpainting"
        else:
            return "stabilityai/stable-diffusion-2"
    elif version == "2.1":
        return "stabilityai/stable-diffusion-2-1"
    elif version == "2.1-base":
        return "stabilityai/stable-diffusion-2-1-base"
    else:
        raise ValueError(f"Incorrect version {version}")

def get_embedding_dim(version):
    if version in ("1.4", "1.5"):
        return 768
    elif version in ("2.0", "2.0-base", "2.1", "2.1-base"):
        return 1024
    else:
        raise ValueError(f"Incorrect version {version}")
https://github1s.com/NVIDIA/TensorRT/blob/release/8.6/demo/Diffusion/demo_txt2img.py#L67-L77
    # Initialize demo
    demo = Txt2ImgPipeline(
        scheduler=args.scheduler,
        denoising_steps=args.denoising_steps,
        output_dir=args.output_dir,
        version=args.version,# 如果客户化,这里需要指定,后续会从get_path返回路径,作为from_pretrained(https://github1s.com/NVIDIA/TensorRT/blob/release/8.6/demo/Diffusion/models.py#L279-L282)的参数
        hf_token=args.hf_token,
        verbose=args.verbose,
        nvtx_profile=args.nvtx_profile,
        max_batch_size=max_batch_size,
        use_cuda_graph=args.use_cuda_graph)
  • Build onnx时用到
    def get_dynamic_axes(self):
    return {
    ‘latent’: {0: ‘B’, 2: ‘H’, 3: ‘W’},
    ‘images’: {0: ‘B’, 2: ‘8H’, 3: ‘8W’}
    }

  • Build engine时用到(profile会设置3个值)
    def get_input_profile(self, batch_size, image_height, image_width, static_batch, static_shape):
    Profiles的设置会影响推理的速度,实验中将maxbatch将16变为4,推理时间变为原来的1/3

  • 在engine模型__loadResources时,调用get_shape_dict
    def get_shape_dict(self, batch_size, image_height, image_width):

DS

  • (preres,curindex,)

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

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

相关文章

chatgpt赋能python:Python关闭应用程序:如何安全、有效地终止进程

Python关闭应用程序:如何安全、有效地终止进程 Python是一种流行的编程语言,广泛应用于各种领域和行业。在实际的开发工作中,我们常常需要处理进程的启动和终止问题。无论是在测试环境还是在生产环境中,安全有效地终止进程都是至…

一个job问题引出的Oracle官方文档的差错

同事提了个问题,PLSQL Developer连接Oracle 11g创建编辑job都正常,但是相同的PLSQL Developer连接Oracle 19c能创建job,但是选择编辑,就会提示如下日期格式错误, 看了一些资料,有的说是操作系统和Oracle的日…

【实用篇】RabbitMQ

文章目录 RabbitMQ1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯 1.2.技术对比: 2.快速入门2.1.安装RabbitMQ2.1.1.单机部署下载镜像安装MQ 2.2.RabbitMQ消息模型2.3.导入Demo工程2.4.入门案例2.4.1.publisher实现2.4.2.consumer实现 2.5.总结 3.SpringA…

【服务器】树洞外链搭建图床操作系统

文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4. 公网访问测试5. …

Java on VS Code 5月更新|性能、用户体验改进以及 Spring Boot 集成

作者:Nick Zhu - Senior Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎来到 Visual Studio Code Java 的 5 月更新!在本月的博客中,我们有大量新功能,涵盖性能改进、用户体…

完成MQTT客户端,前几年的欠债还上了

最近有点儿忙,努力方向很重要,最近VFP硬件开发课已完结,顺便补一下前面欠的MQTT完整客户端,支持QOS0,OQS1,LAST WILLMSG. QOS2的支持看有需求再说了。 猫猫的心里话 加菲猫的VFP|狐友会社群接收投稿啦 加菲猫的VFP,用…

Python Playwright API使用实例详解

下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdfv1.1大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 什么是 Playwright Playwright 是一个 Nod…

38从零开始学Java之封装到底是咋回事?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们知道,Java是面向对象的编程语言。关于面向对象的概念,壹哥在之前的文章中…

【linux】进程: systemd、systemctl

状态 R —— 运行S(TASK_INTERRUPTIBLE) —— 等待,可中断,IOD(TASK_UNINTERRUPTIBLE) —— 等待,不可中断K(TASK_KILLABLE) —— 等待,可删除,I…

chatgpt赋能python:Python内置函数大全表

Python 内置函数大全表 Python 是一种强大的编程语言,拥有许多有用的内置函数。这些函数可以在编写 Python 代码时大大简化开发人员的工作流程。本文提供了一张Python内置函数的大全表,以及每个函数的简要说明。 内置函数列表 以下是 Python 的内置函…

Elasticsearch:在 Elasticsearch 中使用 NLP 和矢量搜索增强聊天机器人功能

作者:Priscilla Parodi 会话界面已经存在了一段时间,并且作为协助各种任务(例如客户服务、信息检索和任务自动化)的一种方式而变得越来越流行。 通常通过语音助手或消息应用程序访问,这些界面模拟人类对话,…

众议院压倒性通过!

* * * 原创:刘教链 * * * 号外:今天在小号“刘教链Pro”发表了一篇《大V出货了》,欢迎关注“刘教链Pro”并阅读。 * * * 隔夜比特币回升至27k上方。 万众瞩目的美债危机到了千钧一发之际。继周日美国总统拜登和众议院议长麦卡锡初步达成口头…

618特辑 | 人到中年的品质生活,是我对自己的最大尊重

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 文案 / 粒粒 封面 / 姝琦midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 不知从什么时候开始,我们开始高亮“实用主义”的生活态度,一切以…

FPGA PAL视频BT656解码Video Processing Subsystem去隔行 TW2867采集 提供工程源码和技术支持

目录 1、前言2、我这里已有的PAL视频解码方案3、模拟视频概述4、模拟视频颜色空间5、逐行与隔行6、BT656数据与解码BT656数据格式BT656数据解码 7、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析 8、设计思路与框架9、vivado工程详解Block Design设计SDK设计…

c++实现产品功能(简单基础功能)

通过c++实现公司产品功能,要求能在VS和CB上完美运行,实现的功能基础简单 #include <iostream> #include <string>// 摄像机类 class Camera { public:// 成员函数:拍摄照片void takePhoto() {std::cout << "Take a photo." << std::endl;…

六一儿童节,小灰给大家准备了特别的礼物!

大家好&#xff0c;我是程序员小灰。 熟悉小灰的朋友们都知道&#xff0c;小灰比较擅长写作&#xff0c;却并不善于口头表达。 但是&#xff0c;在2023年&#xff0c;小灰决定搞一件大事情&#xff0c;与我的团队成员共同组建《小灰AI共创汇》。我们这个共创汇的目标&#xff0…

鹅厂专家讲透AI文本生成解码策略与代码实现

&#x1f449;腾小云导读 本文以 huggingface-transformers 的文本生成解码代码为例&#xff0c;对文本生成常用的五种解码策略 greedy search、beam search、sample、sample and rank & beam sample、group beam search 进行逐行解读。每一小节首先会介绍对应解码策略的原…

JavaScript实现输入数字,通过数组方式将它们连接起来的代码

以下为实现输入数字&#xff0c;通过数组方式将它们连接起来的程序代码和运行截图 目录 前言 一、输入数字&#xff0c;通过数组方式将它们连接起来 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行…

JetBrains的.NET和ASP.NET集成开发环境Rider 2023版本在Win10系统的下载与安装配置教程

目录 前言一、Rider 安装二、使用配置总结 前言 Rider是一款专为.NET和ASP.NET开发人员设计的集成开发环境&#xff08;IDE&#xff09;。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地编写、调试和部署.NET和ASP.NET应用程序。 Rider的主要特点&#xff1a…

Linux---守护进程

window称为&#xff1a;服务 区分以下四点&#xff1a; 会话会话首进程进程组组长进程 不想让会话关闭&#xff0c;但是会话中的进程不想关闭&#xff0c;解决方法&#xff1a;把当前进程脱离出来&#xff0c;放到一个新会话中&#xff1b;在新会话中成为会话首进程 那么表示…