采用 Continous batching 来优化请求,提高 throughput,这个在 VLLM 和 TGI 中都有支持。 用 flash attention 和 page attention 来优化 GPU 中 attention 的计算效率。目前部分主流的 inference 的仓库都会集成这两种 attention 优化方式。 对于部分设备来说,可以考虑采用 GPTQ 提速。比如对于 4090,如果采用 fp16,在推理时batch size 仅能够达到 4(max_tokens=2048)。但 GPTQ 能够支持 batch size 8 + max_tokens=2048。尽管batch inference 情况下,FP16 的速度会快于 GPTQ,但更大的 batch size 支持还是能让 GPTQ 的 throughput 优于 fp16。 部署超大模型时,采用 Tensor Parallelism 加速,这个在 TGI , deepspeed 或者 vllm 都有支持。 服务速度实在不理想的话,考虑多买几台 GPU,然后用 Load balancer 做请求转发。
https://github.com/vanna-aiChat with your SQL database . Accurate Text-to-SQL Generation via LLMs using RAG
https://github.com/instructor-ai/instructorstructured outputs for llms
https://github.com/steven-tey/novelNotion-style WYSIWYG editor with AI-powered autocompletion.
https://github.com/microsoft/graphrag
https://ragflow.io/docs/dev/
https://github.com/whyhow-ai/knowledge-graph-studio
https://github.com/OpenSPG/KAG/blob/master/kag/examples/medicine/README_cn.mdhttps://huggingface.co/autotrain
https://github.com/jingyaogong/minimind Dense+MoE模型 Pytorch
LLaMA 做微调的工具: https://github.com/hiyouga/LLaMA-Factory
https://github.com/rasbt/LLMs-from-scratch
想象你在一个 餐厅,AI 模型(LLM)就像是 厨师团队,处理用户的 点餐请求。QPS(每秒请求数)就类似于 厨师每秒能完成的菜品数量。影响 QPS 的关键因素,就像影响餐厅出菜速度的因素!
比喻:
同步处理(单点做菜):一个厨师接一单,做完再接下一单(QPS 低)。
异步处理(多任务并行):一个厨师可以同时处理多个菜品,提高 QPS。
批处理(多个订单一起做):类似于一次性炒 10 份蛋炒饭,比单做 10 份快很多!
影响 QPS:
Continuous Batching(持续批处理) = 多张 GPU 共享订单池,提高 QPS(TGI/vLLM)。
流式推理 = 边做菜边上菜,减少等待时间,提高吞吐量。
Tensor 并行 = 一个菜分成多个部分,每个厨师负责一部分,提高效率(vLLM)。
数据并行 = 每个厨师独立做完整的菜,提高吞吐量(DeepSpeed ZeRO)。
Pipeline 并行 = 类似流水线,每个人做一道工序,效率更高(Megatron-LM)。
单 GPU 处理完整请求(单人独立做菜)→ 速度慢,QPS 低。
多 GPU 并行(3 张 3090) → 每人分工,提高吞吐量,QPS 高。
网络慢(延迟高) = 送餐员骑自行车送外卖,整体速度受影响,QPS 低。
高效 API 设计(流式传输) = 像跑腿小哥用电动车送外卖,减少等待时间,提高 QPS。
API 调用开销(FastAPI vs. gRPC) → 影响请求处理速度。
HTTP vs. WebSocket → WebSocket 更快,QPS 更高。
单人厨师,一份菜做完再做下一份,顾客等待时间长,QPS 低。
3 个厨师,每人独立做菜,三倍 QPS,响应速度提高。
流水线炒饭工厂,10 个厨师批量出菜,QPS 爆炸增长!
这样一讲,是不是对 LLM QPS 影响因素更直观了?