新年第一篇,又有很多新技术要追了

本篇主要是整理了2024新年前后出现的一些新技术和新点子,一起跟进讨论下。

元宵节也过了,年味也快散没咯。还是人间一天,AI一年,相关技术发展依然很快,有几天没关注twitter了,趁周六日整理下接下来要继续研究和跟进的技术点,我们一块看看。

首先是Pytorch过年那会发布了2.2版本,Pytorch真的是越来越好!

PyTorch® 2.2

2.2版本主要是提升了TorchInductor的性能和正式发布了AOTInductor的beta版本(AOTInductor可以在no-python端部署inductor优化后的so,是个人比较期待更新的功能,我之前的介绍可以看这篇),算是迈出了优化模型部署的第一部,改吧改吧是可以用的。

We are excited to announce the release of PyTorch® 2.2 (release note)! PyTorch 2.2 offers ~2x performance improvements to scaled_dot_product_attention via FlashAttention-v2 integration, as well as AOTInductor , a new ahead-of-time compilation and deployment tool built for non-python server-side deployments.

Pytorch从2.0开始,其本身的推理速度已经可以原生加速了。之前只是将其当作训练框架,推理都是使用TensorRT或者其他infer的方式。升级了2.0之后,部分模型直接torch.complie后的速度提升也是能用的(举个例子,一个swin transfomer架构的encoder模型,同样都是fp16的精度,原始是22ms,complie后是15ms,转换为trt后是12ms),对于快速上线且不依赖C++的可以直接使用compile API优化一下就能用。

除了说到的新功能,Pytorch也发布了2.0相关技术的的论文:

主要技术就是TorchDynamo 和 TorchInductor,这俩配合实现了在 PyTorch 2 中发布的 torch.compile 功能。

TorchDynamo 是一个 Python 级别的即时(JIT)编译器,它允许在不牺牲 Python 灵活性的情况下,在 PyTorch 程序中启用图编译。它通过动态修改 Python 字节码并在执行前提取 PyTorch 操作序列到一个 FX 图中来实现这一点,然后使用许多可扩展的后端之一进行 JIT 编译。TorchInductor 是 TorchDynamo 的默认编译器后端,它将 PyTorch 程序转换为用于 GPU 的 OpenAI 的 Triton 和用于 CPU 的 C++。结果显示,TorchDynamo 能够比以往的方法更稳健地捕获图,同时只增加最小的开销,而 TorchInductor 能够在 180 多个真实世界模型上,在 NVIDIA A100 GPU 上提供 2.27 倍的推理和 1.41 倍的训练几何平均速度提升,这超过了其他六个编译器。这些扩展为在像 PyTorch 这样的急切模式框架中通过编译器应用优化提供了一种新的方式。

短期内部分模型可以快速Pytorch-compile的方式上线,同时也可以加速训练速度(多卡还有些bug),长期的话,可以自行设计inductor中的fuse策略自行融合提速(结合triton+cudnn+cublas+cutlass),同时将产生的so使用C++部署起来实现和trt差不多的性能。

有潜力,但是需要花时间适配和开发,再等等吧!

大模型推理相关

大模型推理还是很卷,各种抠细节,各种新模型,各位想要关注新技术和新热点的就看一些比较火提issue比较多的仓库就行。这些仓库也基本有很多公司在用了,不得不说,开源的了力量还是很强大啊,去年4月份搞大模型推理还是一头雾水,现在各种成熟的技术已经满天飞了。

推荐几个仓库,已经被很多公司魔改或不魔改后部署到线上了:

此外还有一些同样牛逼的库,我用的不多,就不列了

优化的话,大模型模型结构都大差不大,基本也就是在prefill和decode阶段去优化,有很多方法,具体可以看上述github仓库中的示例。

还有一点大模型现在做的更多的是量化(大模型量化比小模型能做的空间比较大),最近TensorRT-LLM发布了个量化的示例:trt-llm支持的quan方法

Quantization Methods Performance Improvement (batch size <= 4) Performance Improvement (batch size >= 16) Accuracy Impact Calibration Time**
FP8 (W8A8) Medium Medium Very Low Minutes
Int8 SQ (W8A8) Medium Medium Medium Minutes
Int8 weight-only (W8A16) Medium Low Low Not Required
Int4 weight-only (W4A16) High Low High Not Required
Int4 AWQ (W4A16) High Low Low Tens of Minutes
Int4 GPTQ High Low Low Tens of Minutes
Int4-FP8 AWQ (W4A8) High Medium Low Tens of Minutes

有fp8无脑用fp8,TensorRT-LLM的FP8实现比较厉害,性能提升很多,相比int8精度上有不小的优势,就是限制显卡了4090/H100/L40S。vllm也在逐步增加对fp8的支持。

trt-llm和vllm都可以无脑上手使用,整体上手难度来说,trt-llm还是大于vllm一些。

相关技术点,想学习大模型推理部署的建议都看看:

  • Multi-head Attention(MHA)
  • Multi-query Attention (MQA)
  • Group-query Attention(GQA)
  • In-flight Batching / continuous batching
  • flash attention v1、v2、 FlashDecoding
  • Speculative Decoding
  • Chunked Context(和DeepSpeed-Ml SplitFuse类似,长prefill,短docode场景适合)
  • Paged KV Cache for the Attention
  • Tensor Parallelism
  • Pipeline Parallelism
  • INT4/INT8 Weight-Only Quantization (W4A16 & W8A16)
  • SmoothQuant
  • GPTQ
  • AWQ
  • FP8
  • Greedy-search
  • Beam-search
  • RoPE

相关总结报告:

另外一些比较值得关注的技术点,

Groq,大模型最快推理芯片一夜易主:每秒500tokens干翻GPU!谷歌TPU人马打造,喊话奥特曼:你们也太慢了 - 据介绍,Groq的芯片采用14nm制程,搭载了230MB大SRAM来保证内存带宽,片上内存带宽达到了80TB/s。算力层面,Gorq芯片的整型(8位)运算速度为750TOPs,浮点(16位)运算速度则为188TFLOPs。

还有谷歌发布的上下文超长(1M token)的Gemini 1.5 Pro:

接下来要做的几个方向:

  • 继续提升整体LLM的性能,针对不同用户场景使用不同(颗粒度对齐)的prefill 和 decode 策略(比如问答聊天场景,一开始输入的问题长度明显不同),这个可能叫比较细化了
  • 在显存够的前提下,加大上下文,某些场景下有用
  • 多模型融合,multimodel LLM,比如多模态模型,比如视频生成模型(sora、Diffusion Transformer)

爆火的Sora

Sora前几天爆火,很多人说又要改变世界了,也有人说是视频届的Chatgpt 3.0。建议亲自看看才知道到底有多震撼,从官方的技术报告可以看一些例子:

Sora是OpenAI新发布的生成视频的模型,很强,类似于前年出现的chatgpt3.0以及后来的chatgpt4的地位

我也看了几个Sora生成的视频,长达 60 秒,其中包含精细复杂的场景、生动的角色表情以及复杂的镜头运动(单视频多角度镜头等功能),表现效果超出竞品很多,相比其他的生图模型,Sora是视频,而其他的则更像是动图。

另外,视频中随便截取一帧的效果相比SDXL也不差:

现在TikTok上Sora开了个账号就发Sora生产的视频,感兴趣的可以去看看…

那Sora的架构是什么?

从官方报告中可以知道,Sora 属于扩散型 Transformer(diffusion transformer)。将 Transformer 结构替代了 Diffusion 模型中常用的 U-Net 结构,并将图像输入转化成了 Patch(类似语言模型中输入的 Token),得到了新的 Diffusion Transformers 架构,提升了原来 Diffusion 模型在深度和宽度上的可扩展性,为视频模型增加输出时长奠定了基础。

我们知道,传统的 Transformer,主要由Encoder和Decoder组成,Encoder是将文本编码成 Token,从而可以将自然语言变成可以统一处理的embedding。而 Decoder 则是将 Token 反向解码成文本。

而 Sora 也是类似的思路,只不过它编码的结果不是Token,报告里面叫 Patches,Encoder 将视频压缩为低维潜空间,再将其分解为 Patches。同样 Sora 也能从 Patches 反向解码成视频图像。(参考下图)

Sora 同时还是一种扩散模型,能将有噪声的图像块,基于 Prompt 还原出清晰的图像:

另外,报告中特地提到了:“我们的研究显示,扩展视频生成模型的规模是向着创建能够模拟物理世界的通用工具迈出的有前途的一步。”


Sora 证明了 diffusion + ViT 的有效性,并把这两家的长处结合了一下

接下来各个大厂围绕Sora又可以搞一阵子,相关技术关键点:

  1. 视频压缩网络:Sora采用一种降维技术,将视频数据压缩到一个较低维度的潜在空间,并在该空间中进行训练,之后再将潜在表示解码回原始像素。这一过程借鉴了大型语言模型处理文本的方式,通过将视频切分为小块(patches),实现视觉数据的有效表示和处理。
  2. Scaling Transformers:Sora利用了扩展性强的Transformers结构,这在大型语言模型中已证明其有效性。Sora作为一个diffusion模型,通过输入噪声块和文本提示,训练预测原始的清晰块,以此生成视频内容。
  3. 语言理解:Sora通过高质量的视频标题生成技术,提高了文本到视频内容的对齐性。模型能够基于高质量的文本提示生成相关联的视频内容,进一步增强了生成视频的准确性和相关性。
  4. 世界模拟能力:Sora展示了在大规模训练下的一些涌现能力,如三维一致性、长时间连贯性、与世界互动以及模拟数字世界等,这显示了模型在模拟真实和数字世界方面的潜力。

Sora带来的需求不仅仅是算法层面上的创新和研究,也有infra层面的需求,部署推理也有的搞:

  • 万卡集群建立/多卡通信速度
  • 训练框架优化、多卡训练优化、训练速度
  • 单卡多卡推理加速

当然还有数据的收集和整理(数据工程师!),据说微软前一段时间给OpenAI提供了五千亿个视频用于训练。

相关进展速递:

比较好的技术解读:

这张架构图来自上述的技术解读:

Last week we had Stable Cascade, this week Stable Diffusion Lightingand today Stable Diffusion 3…

同样最近发布的stable diffusion 3也采用了Diffusion Transformer,等开源了值得研究一番。

Torch-TensorRT v2.2.0 正式发布

Torch-TensorRT就是之前的trtorch,可以利用torchscript的runtime包着tensorrt engine跑,兼顾速度和灵活性,Pytorch模型可以借助Torch-TensorRT去加速,支持的op转为trt,不支持的fallback到torch op。

Torch-TensorRT经过漫长的更新,终于最近正式发布了2.2版本,之前1.4版本则是2024年6月份的事儿了。2.2版本是 Torch-TensorRT 的第二个主要版本,默认前端从 TorchScript 更改为 Dynamo,正式接入torch2.0生态。

Dynamo 前端可以通过 torch.compile 支持 JIT 工作流,并通过 torch.export + torch_tensorrt.compile 支持 AOT 工作流。需要转换的ir为Core ATen Opset,当前覆盖率为 82%。与 Torchscript 一样,也可以切分子图,比较灵活。

Torch-TensorRT使用的时候有两种方式部署,通过 output_format kwarg 选择不同的模型输出格式(也就是俗称的AOT模式)。

可选的有 torchscript,其中结果编译的模块将使用 torch.jit.trace 进行跟踪,适用于在非Python环境部署;另一种是exported_program,pytorch2.0后发布的可序列化格式;我们也可以对编译后模型进行进一步的图形转换,因为graph_module 可以返回 torch.fx.GraphModule,可以自己写一些fx的pass操作对编译器没有优化好的再手动优化下。

之后老潘会详细介绍下,补坑补坑。

NVIDIA Chat with RTX

过年期间NVIDIA发布了一个类似Stable-Diffusion-WebUI带前端的一键安装包工具,可以直接下载安装然后可以和LLM聊天,支持RAG,支持的模型有LLama2-13B (INT4)和Mistral 7B (INT4),基于开源项目 GitHub - NVIDIA/trt-llm-rag-windows: A developer reference project for creating Retrieval Augmented Generation (RAG) chatbots on Windows using TensorRT-LLM 开发。

Chat with RTX 本身就是一个开源模型启动器,基于gradio作为前端,核心基于python+tensorrt-llm。本身并不包含什么独特的核心科技,更多地看起来像是 NVIDIA 内部为了完成业绩指标的一个项目,不过出发点是好的,很多非专业小伙伴的直接安装就能跑,门槛大大降低(就像SD刚出来那会B站UP主秋叶君开发的一键部署安装工具,造福了很多人)。

个人觉着这点很重要,因为做这种AI应用,和用户打交道的小玩意儿挺有意思的,虽然Chat with RTX 使用的LLM模型和RAG都不是产品级(llama模型13B-FP16能达到可用级别,int4更多是玩具),而且对中文支持不好(使用的俩模型都没有对中文进行过单独支持),不过也很棒了,算是本地AI助手的雏形(不需要依赖网络的API-key),某些任务还是有点用的。

附上下载链接:

后记

还有一些最近更新的技术,比如yolov9、比如Stable Diffusion 3.0,比如…

有时间追一下,技术太多,就不一一列举了。还是过年好啊,吃吃喝喝,上班了完全不在状态,整理整理新技术,又该卷了,新年结束了,马上进入工作状态吧!

参考

1 个赞