当前位置: 首页 > news >正文

MindSpore Serving与TGI框架 の 对比

一、MindSpore Serving

MindSpore Serving是一款轻量级、高性能的服务工具,帮助用户在生产环境中高效部署在线推理服务。

使用MindSpore完成模型训练>导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。

MindSpore Serving包含以下功能:

  • 支持自定义关于模型的预处理和后处理,简化模型的发布和部署。

  • 支持batch功能,包含多个实例的请求会被拆分组合以满足模型batch size的需要。

  • 支持分布式模型推理功能。

  • 支持客户端gRPC接口,提供简单易用的客户端Python封装接口。

  • 支持客户端RESTful接口。请添加图片描述

部署Serving推理服务

  • serving_server.py为启动服务脚本文件。
  • xxx.mindir为上一步网络生成的模型文件。
  • servable_config.py为模型配置文件:定义了模型的处理函数。

启动服务

执行serving_server.py,完成服务启动:

import os
import sys
from mindspore_serving import serverdef start():servable_dir = os.path.dirname(os.path.realpath(sys.argv[0]))servable_config = server.ServableStartConfig(servable_directory=servable_dir, servable_name="add",device_ids=(0, 1))server.start_servables(servable_configs=servable_config)server.start_grpc_server(address="127.0.0.1:5500")server.start_restful_server(address="127.0.0.1:1500")if __name__ == "__main__":start()

启动脚本中start_servables将在设备0和1上共加载和运行两个推理副本,来自客户端的推理请求将被切割分流到两个推理副本。

当服务端打印如下日志时,表示Serving gRPC服务和RESTful服务启动成功。

Serving gRPC server start success, listening on 127.0.0.1:5500
Serving RESTful server start success, listening on 127.0.0.1:1500

执行推理

客户端提供两种方式访问推理服务,一种是通过gRPC方式,一种是通过RESTful方式。
使用serving_client.py,启动Python客户端。
————————————————————————————————————————
RESTful是一种基于HTTP协议的网络应用程序的设计风格和开发方式,通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点。基于其轻量级以及通过HTTP直接传输数据的特性,RESTful已经成为最常见的Web服务访问方式。用户通过RESTful方式,能够简单直接的与服务进行交互。

  • 通过mindspore_serving.server.start_restful_server接口启动RESTful服务:

请求方式
当前仅支持POST类型的RESTful请求,请求格式如下:

POST http://HOST:1234/model/LLaMA:generated_stream

如果使用curl工具,RESTful请求方式如下:

curl -X POST -d '{"instances":{"image":{"b64":"babe64-encoded-string"}}}' http://HOST:1234/model/LLaMA:generated_stream

二、TGI框架

请添加图片描述
若干客户端同时请求Web Server的“/generate”服务后,服务端将这些请求在“Buffer”组件处整合为Batch,并通过gRPC协议转发请求给NPU推理引擎进行计算生成。

将请求发给多个Model Shard,多个Model Shard之间通过NCCL通信 是因为显存容量有限或出于计算效率考虑,需要多卡进行分布式推理。

推理框架一般会将第1次推理(首Token)和余下的推理(生成其余Token)分别设计为PrefillDecode两个过程

  • Prefill 是将1个请求的Prompt一次性转换为KV Cache,并生成第1个Token的过程。
    假设Prompt的长度为L,MultiHead Attention的头数为H(Head),每个头的维度为HS(Head Size,暂不考虑GQA/MQA)。
    计算该过程时,输入Attention的Q、K、V维度均为[L,H, HS],输入FFN的hidden(隐藏层向量)维度为[L, H *HS]。
    完成模型计算后,仅对最后一个Logit进行解码得到首Token;中间过程计算得到的K、V被保留在显存中(即KV Cache,用于避免后续Decode过程重复计算这些K、V导致算力浪费)。

  • Decode:从第2个Token开始,将上一次推理的输出(新生成的1个Token)作为输入进行一次新的推理。假设BatchSize=1,已生成的新子序列长度为N,在计算该过程时,输入Attention的Q维度为[1,H, HS], K、V维度则为[L+N+1,H, HS],输入FFN的hidden维度为[1, H*HS]。
    完成模型计算后,对唯一的Logit进行解码得到新生成的Token;中间过程计算得到的K、V追加到KV Cache中(原因同上)。重复Decode流程持续生成Token直到模型输出(End of Sentence,表示输出结束的特殊Token)。

将推理分为Prefill和Decode,是考虑到生成第1个Token和其余Token时计算模式的差异较大,分开实现有利于针对性优化

TGI引入Continuous Batching特性,其中请求的合并和剔除就是通过Router向Server发送Concatenate和Filter的Request实现。

Continuous Batching(或称Inflight Batch)核心思想是在两次Decode的间隙插入新请求的Prefill、各请求的合并和剔除等操作,从而以动态Batch推理的方法提高NPU利用率。

相关文章:

MindSpore Serving与TGI框架 の 对比

一、MindSpore Serving MindSpore Serving是一款轻量级、高性能的服务工具,帮助用户在生产环境中高效部署在线推理服务。 使用MindSpore完成模型训练>导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。 MindSpore Serving包含以…...

两阶段提交协议三阶段提交协议

两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易…...

6-Docker Compose-tomcat application(指定官方镜像)

1.创建docker-compose.yml文件,添加如下内容并保存 vim docker-compose.yml [root@centos79 ~]# cat docker-compose.yml #yml文件 version: 3 #版本号,默认为3 services:tomcat-ztj: #定…...

宝塔安装的imagemagick不能用,必须自己手动安装

1 安装 用composer安装 2 宝塔安装的imagemagick不能用,必须自己手动安装(3.4.3版本 php 7.3) 1 步骤: wget https://pecl.php.net/get/imagick-3.4.3.tgz tar -zxf imagick-3.4.3.tgz cd imagick-3.4.3 /www/server/php/73…...

解决在test以外的目录下导入junit无效

以上引用来自src目录下的文件,可以看到,和junit有关的导入都飘红,但明明junit已经被正确导入进了项目中。 再看右侧的Maven的依赖下方,junit的右边有一个很不起眼的(test) 这是因为junit作为测试框架,可能包含仅适用于…...

docker 在线安装mysql 8.0.21版本

1、拉取mysql 8.0.21版本镜像 2、查看镜像 docker images 3、在宿主机 /usr/local/mysql 下的 conf 文件夹下,创建 my.cnf 文件,并编辑内容 [mysql] default-character-setutf8 [client] port3306 default-character-setutf8 [mysqld] port3306 se…...

WPF DatePicker与Calendar的使用和样式修改

什么是DatePicker,Calendar Calendar:日历(显示年月日视图控件)DatePicker:日期选择器(是一个更小的控件,点击控件时才会弹出一个日历) Calendar使用 常用属性 DisplayMode&#…...

从0开始python学习-40.通过正则表达式/json进行接口关联

目录 1. 正则表达式:使用re库(需安装-pip install re),只能提取字符串的数据。 1.1 re.seach:提取一个值,得到的是一个对象,通过下标group(1)取值,如果没有匹配到值则返回None 1.…...

【React系列】高阶组件

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 高阶组件 1.1. 认识高阶组件 什么是高阶组件呢?相信很多同学都听说过,也用过 高阶函数&…...

听GPT 讲Rust源代码--src/tools(38)

File: rust/src/tools/clippy/clippy_dev/src/lib.rs rust/src/tools/clippy/clippy_dev/src/lib.rs文件是Clippy开发工具的入口文件,其作用是提供Clippy开发过程中所需的功能和工具。Clippy是一个Rust代码的静态分析工具,用于提供各种有用的代码规范、编…...

.NET C# 如何获取object对象的数据

如何获取object对象的数据 在DAL层,一般会封装一些返回值,返回的类型就会为object ,但是需要其中的值进行判断 public static object SaveFileIns(string filepath){return new { path pathlist, file_name fileNamelist, Message "…...

使用IDEA创建使用 JDK8 的 2.x.x 版本的 Spring Boot 项目以及 Spring Boot 项目如何修改JDK版本

目录 一、在阿里云上官网上创建项目 二、将 IDEA 中创建项目的源地址修改为阿里云官网 三、创建 3.x.x 的项目之后修改配置降低至 2.7.x 版本和使用 JDK8(修改 Spring Boot 的 JDK 版本同理) 从上面的 Spring Boot 官网的截图中可以发现,自…...

游戏服务器整体架构思考

1.启动层 不管是单体架构还是微服务架构,其实服务器本身都是要启动的。 不管是用grpc实现远程调用,还是dubbo,还是说就一个简单的tcp监听,都是要启动的。 启动的时候,肯定要整合下controller接入层,不管是叫…...

labelme 标注的数据集转化为Mask-Rcnn适用的数据集

labelme 标注的数据集转化为Mask-Rcnn适用的数据集 食用步骤 1.labelme标注数据时,将生成的json文件和原图保存在一起 2.只需提供labelme生成的数据的文件夹,和maskrcnn的数据集文件夹,运行代码就会自动进行处理 3.代码会在提供的maskrcn…...

x-cmd pkg | tig - git 文本模式界面

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 tig 由 Jonas Fonseca 于 2006 年使用 C 语言创建的 git 交互式文本命令行工具。旨在开启交互模式快速浏览 git 存储库的信息以及 git 命令的运行。 首次用户 使用 x tig 即可自动下载并使用 在终端运行 eval "…...

信息论与编码期末复习——概念论述简答题(一)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...

[Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目

前面讲解了通过命令行方式来部署k8s项目,下面来讲讲通过腾讯云TKE来快速创建Pod、Deployment、Service部署k8s项目,云平台搭建Kubernetes可参考[Kubernetes]1.Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群 一.通过腾讯云TKE创建集群 1.创建集群 参考上…...

二叉排序树的创建、插入、查找和删除【数据结构】

二叉排序树 若它的左子树不空,则左子树上所有结点的值均小于它根结点的值。若它的右子树不空,则右子树上所有结点的值均大于它根结点的值。它的左、右树又分为⼆叉排序树 二叉排序树也叫二叉查找树、二叉搜索树 二叉排序树的创建、插入、查找和删除 …...

【管理篇 / 恢复】❀ 07. macOS下用命令刷新固件 ❀ FortiGate 防火墙

【简介】随着苹果电脑的普及,很多管理员都会通过苹果电脑对飞塔防火墙进行管理。当防火墙需要命令状态下刷新固件时,在macOS下用命令刷新固件,将会是一个小小的挑战。 首先是硬件的连接,USB配置线的USB一头,接入MAC的U…...

工作纪实40-使用redis的几种姿势

线上查问题看某个redis的key值,记录一下 1.直接使用telnet进行连接(贼拉方便) telnet ip port > auth pwd1.模糊查询 scan 0 MATCH abc* 2.查看所有key keys * 3.ttl key 查看key的ttl2.使用redis-cli连接(费劲吧啦,还需要本地…...

基于Vue 3与UnoCSS构建轻量级个人导航页:从零部署到高级定制

1. 项目概述:一个轻量级、可定制的个人导航页 最近在折腾自己的浏览器主页,厌倦了那些臃肿、广告满天飞的默认页面,也受够了每次都要在书签栏里翻找常用链接。作为一个喜欢把一切工具都“私有化”和“个性化”的开发者,我决定自己…...

基于T4技术栈的现代全栈应用开发实践与最佳实践解析

1. 项目概述:一个现代全栈应用的原型与起点最近在GitHub上看到一个挺有意思的项目,叫timothymiller/t4-app。乍一看这个名字,可能有点摸不着头脑,但点进去你会发现,这其实是一个精心设计的全栈Web应用模板。它不是某个…...

网安信息收集

声明:任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全 的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安…...

3步在Windows上安装APK应用:告别安卓模拟器的轻量级解决方案

3步在Windows上安装APK应用:告别安卓模拟器的轻量级解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行Android应用却不想安…...

终极指南:如何使用Harepacker-resurrected打造你的MapleStory游戏Mod

终极指南:如何使用Harepacker-resurrected打造你的MapleStory游戏Mod 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 如果你是一…...

STM32L4低功耗实战:用RTC内部唤醒定时1秒,让设备续航翻倍(附CubeIDE配置)

STM32L4低功耗实战:RTC唤醒中断与CubeIDE配置全解析 在电池供电的物联网终端设计中,每微安电流都关乎产品寿命。曾有个智能农业项目,原本预计6个月的传感器续航,因未优化低功耗模式,实际仅维持了3周。这促使我们深入研…...

开源情报工具Openeir:自动化资产发现与关联分析实战指南

1. 项目概述:一个开源情报(OSINT)工具的诞生与使命 在信息爆炸的时代,数据本身不再是稀缺品,如何从海量、异构、碎片化的公开信息中,精准、高效地提取出有价值的情报,才是真正的挑战。无论是安全…...

开源高级提示词数据库:一键部署,解锁AI生产力

1. 项目概述:一个开箱即用的高级提示词数据库如果你和我一样,经常在ChatGPT、Claude或者Midjourney这类AI工具里折腾,那你肯定明白一个道理:好的提示词(Prompt)就是生产力。但问题来了,那些真正…...

iOS越狱防火墙ijfw:从网络流量监控到精细化应用管控实战

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫ijfw,全称是iOS Jailbreak Firewall。顾名思义,这是一个专门为越狱后的iOS设备设计的防火墙工具。如果你和我一样,是个喜欢在iPhone上“折腾”的玩家,或者对…...

FlareLine Flutter:开源跨平台管理后台模板开发与部署指南

1. 项目概述:一个为现代应用而生的Flutter仪表盘模板如果你正在寻找一个能快速启动你的下一个Web、Android或iOS项目后台管理界面的方案,并且希望这个方案足够现代、功能齐全,同时又能让你完全掌控代码,那么FlareLine Flutter这个…...