欢迎大家来到IT世界,在知识的湖畔探索吧!
作者 | 郭人通
想要模型落地,有一连串大坑躲都躲不开:
-
模型转不了 ONNX,TensorRT。
-
模型推理搞的飞快之后,发现预处理、后处理才是瓶颈。
-
除了需要搜寻各种英伟达的算法库,还需要学习各种高性能计算和 CUDA 编程技术,对着图片解码、视频解码、tensor transform、分词之类的操作一顿猛搞。
-
发现英伟达老爷的东西“又高又硬”,根本装不起来。
-
不仅要写一堆脚本程序,努力的把一整条处理流水线串起来,更要设计好服务的调用接口。
-
串完发现流水线各级速度不匹配,想着把慢的阶段起多实例并行,又扯上了负载均衡和流水线优化。
-
流水线上的算法实例起多了,物理资源又不够了。
-
一切内容终于准备就绪了,竟然又要去学写 Dockerfile ……
流水线接受图片作为输入,输出图片对应的 embedding 向量。这个流水线包含两个算子 image_decode.cv2_rgb 和 image_text_embedding.clip_image,分别负责图片的解码以及 CLIP 的图片特征提取。
在完成了模型服务启动之后,我们
在本地编写一个简单的测试程序,通过调用刚才启动的服务,对当前目录下 jpg 图片做 embedding 特征提取:
:Towhee 中的算法模块,包括神经网络模型,也包括各种五花八门的数据处理方法,如音视频编解码、图片裁切、文本分词、向量降维、数据库操作等。
应用场景所需的通用算法或数据处理方法;
各类顶会以及arXiv上受到广泛关注的前沿模型;
Paper with Code 关键领域的 benchmark 上榜模型;
业务领域常用的算法库、模型库集成。
:Towhee Hub 上的算法模块除了提供预训练模型以及Fine-tuning 能力,会更加聚焦流水线落地后的推理性能。Towhee 会为常用算法或前沿模型提供对应的高性能实现,根据 Python 侧流水线的定义,在推理服务的构建期进行自动化替换。这些加速支持包括:
模型转 ONNX、TensorRT;
前后处理的多线程、GPU 加速;
常见的数据处理过程加速,如图片、音频、视频解码加速等。
:Towhee 会按照任务类型对算子进行模块化组织。任务类型确定了标准的调用接口,并通过算子提供这些接口的不同实现。
在原型阶段,用于构建可直接本地执行的流水线;
用于定义面向生产部署的 DAG;
作为 driver program 连通业务逻辑与流水线服务。
推理流水线 DAG
。相比常见的推理引擎只支持 “单纯的神经网络模型推理”,或 “前处理-模型推理-后处理 三阶段流水线”,DAG 型的流水线可以覆盖更丰富的数据处理组合逻辑。
异构的推理后端
。DAG 中的每一个算子节点可以在不同的后端引擎上执行,既包括神经网络推理引擎,如 Pytorch(TorchScript),ONNXRuntime, TensorRT;也包括通用的数据处理过程,如 Python 函数,DALI,或自定义Python/C++后端;还包括数据库/索引连接器,如 Milvus,FAISS。
极致的推理性能
。推理服务可在 NVIDIA GPU,x86/ARM CPU 上高效运行,支持多 GPU,支持多模型实例,支持实时、流式、批处理、动态批处理请求,支持流水线自动并行。
Docker 与 Kubernetes 部署
。推理流水线都以 Docker 镜像的方式进行封装,对外提供 grpc 与 http 接口,隐藏大量内部复杂性。可通过 Kubernetes 轻松部署推理微服务。
MAE:Masked Autoencoders Are Scalable Vision Learners CVPR2022 (backbone)
SVT:Self-supervised Video Transformer (action recognition)
TransRAC:Encoding Multi-scale Temporal Correlation with Transformers for Repetitive Action Counting (repetitive action counting)
CoFormer:Collaborative Transformers for Grounded Situation Recognition (action recognition/grounded action counting)
MCQ:Bridging Video-text Retrieval with Multiple Choice Question (text video retrieval)
STRM:Spatio-temporal Relation Modeling for Few-shot Action Recognition (action recognition)
CoOp:Conditional Prompt Learning for Vision-Language Models (visual language task)
CVNet:
Correlation Verification for Image Retrieval (image retrieval)
CodeBERT:
A Pre-Trained Model for Programming and Natural Languages
CodeGen:
A Conversational Paradigm for Program Synthesis
Autoencoder
更加统一的 DataCollection 批处理接口与流处理接口。
支持自定义的算子。Towhee 目前给出了比较丰富的标准算子模块,但在常见的业务流程中,通常会引入业务逻辑,自定义算子可以很好的满足这部分需求。Towhee 的自定义算子将会包含两种形态,一种是通过 python 的 lambda 表达式生成,另一种是通过继承 Operator 基类生成。
算子的打包与安装工具升级。支持基于 pip 的打包与安装,并提供基于 AWS S3 的模型参数下载服务,优化本地模型参数缓存。
支持视频与音频的推理流水线。长视频或长音频的处理往往会耗费大量物理资源,针对这类场景,Towhee 将不再一次性展开帧数据,而是提供流式的帧数据处理,以降低内存/显存需求。
在推理服务构建中完整支持 Schema。
基于 numba 的 python 算子自动优化 (实验阶段)。Towhee 通过自定义算子支持业务相关的逻辑,我们鼓励用户使用 python 来快速构建这些逻辑,同时,Towhee 会在底层对这些 python 代码进行尽可能的优化:基于 numba,使用LLVM编译技术解释字节码,优化 IR 并翻译到目标代码进行执行。
支持基于 Apache Arrow 的列存数据,提高本地内存利用率,支持连续内存上的向量化执行。
Transformer 模型结构的执行性能优化(实验阶段)。
Github:
https://github.com/towhee-io/towhee
项目主页:
https://towhee.io/tasks/operator
Slack:
https://slack.towhee.io/
Towhee 团队 2023 秋季招聘已经启动
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/48835.html