其他
谁说 Python 搞不定 AI 模型微服务?!Towhee 来了!
作者 | 郭人通
想要模型落地,有一连串大坑躲都躲不开:
模型转不了 ONNX,TensorRT。 模型推理搞的飞快之后,发现预处理、后处理才是瓶颈。 除了需要搜寻各种英伟达的算法库,还需要学习各种高性能计算和 CUDA 编程技术,对着图片解码、视频解码、tensor transform、分词之类的操作一顿猛搞。 发现英伟达老爷的东西“又高又硬”,根本装不起来。 不仅要写一堆脚本程序,努力的把一整条处理流水线串起来,更要设计好服务的调用接口。 串完发现流水线各级速度不匹配,想着把慢的阶段起多实例并行,又扯上了负载均衡和流水线优化。 流水线上的算法实例起多了,物理资源又不够了。 一切内容终于准备就绪了,竟然又要去学写 Dockerfile ......
应用场景所需的通用算法或数据处理方法; 各类顶会以及arXiv上受到广泛关注的前沿模型; Paper with Code 关键领域的 benchmark 上榜模型; 业务领域常用的算法库、模型库集成。
模型转 ONNX、TensorRT; 前后处理的多线程、GPU 加速; 常见的数据处理过程加速,如图片、音频、视频解码加速等。
在原型阶段,用于构建可直接本地执行的流水线; 用于定义面向生产部署的 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/