推理引擎
推理引擎推理系统与推理引擎训练和推理服务推理和训练的区别: 模型部署后,长期运行; 不需要反向传播; 部署设备更加多样。 推理服务系统的功能(与 AI 算法关系不大,更多地是平台性的工作): 模型加载; 版本管理; 数据管理; 服务接口。 优化目标 低延迟; 高吞吐:高负载; 高效率:低功耗使用 CPU/GPU; 灵活性:支持多框架; 扩展性。 部署态场景:数据中心的服务端、边缘侧的移动端。 云端; 边侧:严格约束功耗、算力不足、数据分散、平台多样化。 推理系统架构推理服务化、推理服务框架。 基本概念: 推理:前向计算; 部署:将模型部署到硬件上,包括:移植、压缩、加速等; 服务化:将模型封装为 sdk 或 web 服务。 Triton 服务化框架: 接入层:HTTP、gRPC、CAPI; 模型仓库; 模型预编排:解析 URL 请求; 框架后端:指推理引擎(如 TensorRT、ONNX Runtime、MindSpore Lite 等); 监控功能:健康管理。 模型版本管理模型生命周期管理: 金丝雀策略(Canary); 回滚策略(Rollba...
推理加速
推理加速模型量化数值类型LLM 的训练和推理要尽量使用 BF16,而不是 FP16/HF16/FP32。 FP32:单精度浮点数,用 8 bit 表示指数,23 bit 表示小数; FP16:半精度浮点数,用 5 bit 表示指数,10 bit 表示小数; BF16:对 FP32 单精度浮点数截断数据(小数部分),即用 8 bit 表示指数,7 bit 表示小数。 这里的计算方式不太懂? BF16 vs HF16: BF16 拥有 7 位精度,而 HF16 拥有 10 位精度。这表明在表示接近于 1 的小数值时,HF16 比 BF16 能提供更高的精度。然而,BF16 拥有与 FP32 相同的 8 位指数部分,因而能够表示与 FP32 几乎一样广泛的数值范围,这对于避免上溢和下溢非常重要。尽管 BF16 在尾数精度上不如 HF16,但在深度学习应用中,这种较宽的数值范围通常比尾数的额外几位精度更为重要。这是因为深度学习模型通常对权重的尾数精度不是非常敏感,而更依赖于能够处理范围广泛的梯度和权重值。 总结: 量化后速度并不能明显提高,但占用的显存显著减...
性能测试
Qwen2.5-VL 性能测试环境设置1234567# vllmcd /workspace/vllmgit reset --hard 2918c1b49c88c29783c86f78d2c4221cb9622379# vllm-ascend: maincd /workspace/vllm-ascendpip install -r benchmarks/requirements-bench.txt Run: 1bash benchmarks/scripts/run-performance-benchmarks.sh Benchmark 结果Before (未移除任何 layer 之前): 12345678910111213141516171819202122232425============ Serving Benchmark Result ============Successful requests: 200 Failed requests: 0 Reque...
如何快速上手一个开源项目
如何快速上手一个开源项目项目洞察社区治理 运作方式(独裁、共建); 核心人物(commiter); 参与方; release 节奏(feature、bugfix 版本周期); 社区交流方式(PR/ISSUE、邮件列表、SLACK/IRC/微信); 当前/未来发展; …… 源码托管 托管平台(GitHub、gitee、私仓); 贡献方式; License; CLA/CCLA; CI/CD CI 系统(GitHub action、Jenkins、circle CI、trivia CI); 架构(x86/arm、CPU/GPU、……); CI job 内容(unit test、集成测试、端到端测试、……)。 学习方法 官方网站、文档、源码(重点)【非翻译版】; 主流媒体(官方 blog、知乎专栏、知乎订阅号、领域 KOL); 搜索引擎(Google); 其它(教学视频、自行发现等)。 注意: 刚开始尽量看英文原版的文档(信息最完整、准确),有了整体的认识之后,可以再针对某些部分去看一些中文的网站...
多模态大模型MRoPE作用解析
好的,这是一个非常专业且深入的问题。我们来详细解析一下多模态大模型中的 MRoPE(Modality-aware Rotary Position Embedding) 算子的作用。 首先,我们需要理解它的基础——RoPE。 1. 基础:RoPE(旋转位置编码)RoPE是像LLaMA、GPT-NeoX等众多主流大语言模型所采用的位置编码方式。 核心思想: 不是将位置信息作为一个独立的数字(如绝对位置)或向量(如正弦余弦函数)直接加到词向量上,而是通过旋转的方式来注入位置信息。 形象比喻: 想象一个二维平面,每个词对应一个二维向量。RoPE会根据这个词在序列中的位置,将这个向量旋转一个与位置成比例的角度。位置1旋转θ度,位置2旋转2θ度,以此类推。这样,两个词向量的内积(代表它们的关联程度)就只与它们的内容和相对位置差有关,而与它们的绝对位置无关。 优势: 很好的外推性: 模型在训练时见过的序列长度有限,但在推理时能处理更长的序列,因为旋转操作是连续且可扩展的。 显式编码相对位置: 模型能天然地理解“距离”的概念。 2. 多模态的挑战:为什么需要“M”?当我们将大模型从纯文本...
多卡推理中CUDA-Graph协同计算解析
这是一个非常好的问题,它触及了现代大模型推理优化的核心。我们来详细拆解一下 torch.compile() 生成的 CUDA Graph 是如何在分布式多卡环境下协同工作的。 首先,要明确一个关键点:torch.compile 和 CUDA Graph 是两种不同但可以协同工作的优化技术。 torch.compile: 它是一个编译器。它捕获你的 PyTorch 模型(一个动态图),将其编译成一个优化的、静态的计算图。这个优化后的图可以由不同的后端执行,其中最强大的后端就是 inductor。 CUDA Graph: 它是一种执行模式。它通过捕获在 GPU 上执行的一系列内核(kernel)来创建一个“图”,然后可以多次、高效地重放这个图,避免了 CPU 驱动开销、启动内核的开销等。 在 torch.compile 的 inductor 后端中,一个非常重要的优化就是自动生成并利用 CUDA Graph 来执行编译好的计算图。 现在,我们来看多卡(分布式)推理的场景。这里通常使用 Tensor Parallelism(张量并行) 或 Pipeline Parallelism(...
启动时未指定max_model_len导致通信卡死
启动时未指定 max_model_len 导致通信卡死排查记录12345vllm serve /root/.cache/modelscope/hub/models/Qwen/Qwen3-VL-30B-A3B-Instruct \--tensor-parallel-size 4 \--enable-expert-parallel \--enforce-eager \--max_model_len 131072 1234INFO 10-25 02:18:40 [parallel_state.py:1208] rank 0 in world size 4 is assigned as DP rank 0, PP rank 0, TP rank 0, EP rank 0INFO 10-25 02:18:40 [parallel_state.py:1208] rank 1 in world size 4 is assigned as DP rank 0, PP rank 0, TP rank 1, EP rank 1INFO 10-25 02:18:40 [parallel_state....
分布式系统控制面与数据面解析
好的,这是一个非常核心的分布式系统设计概念。我们可以用一个生动的比喻来开始,然后深入技术细节。 核心比喻:空中交通管制系统 控制面 就像是空中的交通管制塔和调度员。 他们不直接开飞机(处理乘客和货物)。 他们的工作是:规划航线、指挥飞机起飞和降落、监控所有飞机的状态和位置、处理紧急情况、分配跑道和空域。他们做出决策,确保整个系统安全、有序地运行。 数据面 就像是飞机本身和跑道。 它们负责实际的运输工作:搭载乘客、装载货物、在指定的航线上飞行。 它们不决定去哪、怎么飞,而是忠实地执行控制塔发出的指令,专注于高效、安全地完成“运输”这个核心任务。 详细解释1. 控制面控制面是系统的大脑和神经系统,负责管理、协调和决策。它不直接处理用户的业务请求,而是确保数据面能够正确、高效地处理这些请求。 主要职责: 系统配置与管理:管理网络配置、服务发现、负载均衡策略、安全策略(如防火墙规则)等。 状态监控与收集:收集整个系统中所有组件(数据面节点)的健康状态、性能指标(如CPU、内存、流量)、日志和拓扑信息。 路由决策:决定数据包的转发路径。例如,在微服务网络中,控制面决定一个...
分布式系统伸缩策略解析
好的,这是一个非常核心的分布式系统与云计算概念。我们来详细解析“水平伸缩”和“垂直伸缩”的含义、区别以及各自的应用场景。 1. 核心含义水平伸缩 含义:通过增加或减少实例的数量来应对负载变化。这通常意味着在负载高时,向资源池中添加更多的服务器/节点;在负载低时,移除多余的服务器/节点。 形象比喻:一个餐厅客人变多,老板不是让同一个服务员干得更快(垂直伸缩),而是雇佣更多的服务员来分担工作。 技术实现:通常依赖于负载均衡器,将进入的请求流量分发到后端多个无状态的服务实例上。在云环境中,这通常通过自动伸缩组来实现。 垂直伸缩 含义:通过升级或降级单个实例的资源配置(如CPU、内存、磁盘I/O)来应对负载变化。这通常意味着在负载高时,为服务器更换更强大的CPU或增加更多内存;在负载低时,降低配置以节省成本。 形象比喻:同一个服务员,通过让他参加培训、喝咖啡、使用更先进的工具,从而提升他个人的服务速度和能力。 技术实现:在物理机时代,这需要手动更换硬件。在云时代和虚拟化环境中,这通常可以通过改变虚拟机实例的规格(例如,AWS 从 t3.small 升级到...
分布式多卡推理通信域建立与动态通信域解析
好的,这是一个非常核心且专业的问题。我们来详细拆解一下分布式多卡推理中通信域的建立过程,并解释动态通信域的概念。 第一部分:分布式多卡推理中通信域的建立过程在分布式计算中,通信域 是一个核心抽象,它定义了一组可以相互通信的进程。在大模型推理中,由于单个GPU的显存无法容纳整个模型(如拥有数百亿甚至上万亿参数的模型),我们必须将模型“拆分”并分布到多个GPU上。 这个过程主要依赖于 NCCL 这个由NVIDIA打造的高性能通信库。NCCL优化了GPU之间(包括单机多卡和多机多卡)的集合通信操作,如 all-reduce, all-gather, broadcast 等,这些操作在模型并行和流水线并行中至关重要。 建立通信域的过程可以概括为以下几个步骤: 1. 进程初始化分布式任务通常由多个进程组成,每个进程控制一个或多个GPU。在开始任何通信之前,这些进程需要知道自己和同伴的存在。 工具库: 通常使用 torch.distributed(对于PyTorch用户)来管理分布式进程组。 关键函数: torch.distributed.init_process_group(...) ...