收藏!小白程序员也能轻松掌握大模型:VLLM入门指南与实战教程

news2026/3/28 16:49:33
收藏小白程序员也能轻松掌握大模型VLLM入门指南与实战教程VLLM是由伯克利大学LMSYS组织开源的大语言模型高速推理框架通过PagedAttention技术、连续批处理和优化CUDA内核显著提升模型推理吞吐量和内存效率。本文详细介绍了VLLM的技术原理、架构剖析、调度器结构以及主要组件并阐述了其在在线服务、批量推理和研究实验等场景中的应用。通过学习VLLM程序员可以高效部署大语言模型抓住AI行业风口。一、VLLM 是什么VLLM 是伯克利大学 LMSYS 组织开源的大语言模型高速推理框架旨在极大地提升实时场景下的语言模型服务的吞吐量与内存使用效率。它通过创新的技术和优化策略有效管理计算资源为大语言模型的高效运行提供了强大支持。VLLM 利用全新的注意力算法「PagedAttention」对注意力键和值进行高效管理其核心理念在于通过优化内存管理和资源调度提升大语言模型部署和执行的效率。二、VLLM 的技术原理2.1 KV Cache 机制所有生成式大模型例如 GPT、GLM、LLaMA、Qwen 等底层均采用 Decoder 结构。该结构类似于 Encoder但在底层运用 Multi - head Self - Attention 机制涉及 KKey、QQuery、VValue矩阵运算。与 Encoder 不同的是解码器在计算 Q 乘以 K 转置后会添加一个 Mask Matrix以此确保每个词仅受其前面词的影响进而实现 Causal Attention。在 K-Q-V 计算过程中后续词会用到前面词的 K 和 V 矩阵。因此在推理时若能存储前面词的 K 和 V 值便无需重新计算这大大提升了推理速度是典型的 “用空间换时间” 策略。然而KV Cache 自身会占用大量 VRAM。举例来说如果大模型占用 59% 的 VRAMKV Cache 可能会占用另外 31%所以如何合理利用这部分 VRAM 至关重要。2.2 Page Attention 技术为解决 KV Cache 占用大量 VRAM 的问题VLLM 引入了 Page Attention 技术。具体做法是VLLM 将 KV Cache 划分为多个小块pages并依据用户输入 token 的数量动态分配这些小块的空间。未被占用的空间可供其他任务使用从而避免了显存浪费。例如当用户输入的句子较短时VLLM 只会分配必要的 KV Cache 空间而非预分配整个缓存空间这使得其他任务能够共享剩余的 VRAM 资源。2.3 连续批处理Continuous Batching连续批处理是 VLLM 的另一项关键技术。它允许新请求在旧请求完成时立即加入批次从而减少 GPU 的空闲时间提高了 GPU 的利用率。在实际应用中例如聊天机器人每分钟可能会收到数千个查询其中许多查询存在相似之处。借助 VLLM 的连续批处理技术聊天机器人可以将相似的词元字符串存储在短期记忆KV 缓存中并发送一个 “翻译请求”而非针对每个相似查询都发送单独请求。通过批量处理类似查询能够有效提高吞吐量并优化内存分配。2.4 优化后的 CUDA 内核VLLM 集成了高效的 CUDA 内核如 FlashAttention 和 FlashInfer对注意力机制的计算进行优化。这些优化后的 CUDA 内核能够加速矩阵运算减少计算瓶颈并且支持多种解码算法如并行采样、束搜索等。在长序列和复杂解码任务中相比传统框架VLLM 的性能可提升 2 - 4 倍。三、VLLM 架构剖析3.1 LLMEngine 和 AsyncLLMEngineLLMEngine**作为 VLLM 的核心推理引擎负责处理输入、执行模型推理、调度请求以及生成输出。其工作流程涵盖输入处理、模型执行可能分布在多个主机和 / 或 GPU 上、调度和输出处理。在输入处理阶段使用指定的分词器对输入文本进行分词调度过程中会选择在每个步骤中处理的请求模型执行环节管理语言模型的执行包括跨多个 GPU 的分布式执行输出处理时将语言模型生成的 token ID 解码为人类可读的文本。LLMEngine 的代码位于 vllm/engine/llm_engine.py。**AsyncLLMEngine该类是 LLMEngine 的异步封装基于 asyncio 创建一个后台循环持续处理传入的请求。AsyncLLMEngine 专为在线服务场景设计能够处理多个并发请求并将输出流式传输给客户端。OpenAI 兼容的 API 服务器使用的便是 AsyncLLMEngine还有一个演示 API 服务器作为更简单的示例代码位于 vllm/entrypoints/api_server.py其代码在 vllm/engine/async_llm_engine.py 中。3.2 WorkerWorker 是运行模型推理的进程VLLM 遵循常见做法使用一个进程控制一个加速器设备如 GPU。例如若采用大小为 2 的张量并行和大小为 2 的流水线并行总共会有 4 个 Worker。Worker 通过它们的 rank 和 local_rank 来标识rank 用于全局协调而 local_rank 主要用于分配加速器设备以及访问本地资源如文件系统和共享内存。每个 Worker 都有一个模型运行器对象负责加载和运行模型模型执行的许多逻辑都在此处如准备输入张量和捕获 cudagraphs。3.3 Cache Engine每个 Worker 拥有独立的 Cache Engine负责管理 GPU 上的 KV Cache 存储。Cache Engine 的作用是最大化批次大小其可利用的空间为 GPU 内存减去模型权重和中间激活后的剩余部分。通过这种方式能够更高效地利用 GPU 内存资源提升模型推理的性能。3.4 SchedulerScheduler 动态决定每一步执行预填充Prefill处理提示词还是解码Decode生成下一 token这一决策基于请求优先级例如优先处理被换出的请求。通过合理的调度策略能够提高系统整体的运行效率确保高优先级请求能够得到及时处理。3.5 API 和接口Python 接口LLM 类提供了主要的 Python 接口用于进行离线推理即无需使用单独的模型推理服务器即可与模型交互使用起来简单易用。CLI 和 API 服务器VLLM 支持命令行接口和 OpenAI 兼容的 REST API方便进行部署和查询。这种兼容性使得开发者可以无缝迁移现有的基于 OpenAI API 的应用降低了应用迁移和部署的成本。3.6 配置管理VLLM 使用 VllmConfig 类封装所有配置支持深度层次的类结构这使得在扩展新功能时变得更加容易。例如若要添加一个仅涉及模型运行器的新功能只需在 VllmConfig 类中添加一个新的配置选项。由于传递的是整个配置对象模型运行器可以直接访问该选项而无需更改引擎、Worker 或模型类的构造函数来传递新的配置选项。四、 vLLM 调度器结构与主要组件在 vLLM 中调度器的结构设计围绕任务的状态管理和内存资源的优化利用展开。为此它将任务划分为不同的状态队列并通过缓存管理和内存调度来保证任务处理的高效性。下面详细介绍调度器的核心组成部分waiting、running 和 swapped 三个状态队列的作用及设计。图 1: vLLM 调度器结构图vLLM 调度器依赖三个状态队列来管理任务的不同阶段waiting 队列waiting 队列用于存放新加入的任务或已完成预填充阶段但等待解码的任务。调度器会从 waiting 队列中取出任务判断其是否可以分配资源如果资源允许则将其移至 running 队列。running 队列running 队列包含当前正在处理的任务通常是在解码阶段。调度器会根据当前资源情况和任务优先级决定是否抢占任务将其暂时移出 GPU 以腾出资源。抢占的任务会被转移到 swapped 队列中。swapped 队列swapped 队列用于存放因资源不足而被暂时从 GPU 移至 CPU 的任务。调度器会定期检查 swapped 队列如果资源允许则将任务重新加载到 GPU继续运行。相关实现在vllm/engine/scheduler.py中。初始化与请求队列的管理调度器的初始化和请求队列管理是 vLLM 高效运行的关键。这部分主要实现在 vllm/engine/scheduler.py 中的 Scheduler 类。Scheduler 的初始化过程集中在解析配置项、创建 BlockSpaceManager 和初始化状态队列以确保调度器能够动态、高效地管理多任务请求。初始化过程中涉及三个主要配置scheduler_config包含调度器行为相关的设置如任务优先级、调度策略等。cache_config定义内存分配策略、GPU 与 CPU 缓存的使用等。lora_config可选用于配置 LoRA 模型的特定要求如并行度和内存需求。每个新请求在进入调度队列前需要被解析并转换成 SequenceGroup 实例。这一步骤的关键在于为请求分配适当的 token 数、调度优先级、资源需求等信息然后将其分配至 waiting、running 或 swapped 队列。SequenceGroup一个请求可能包含多个序列如生成任务的多个解码路径。SequenceGroup 用于管理请求的多个序列并跟踪该组序列的状态。add_seq_group 方法将一个新请求包装为 SequenceGroup并添加到 waiting 队列。一个新请求在进入调度器后会首先经过 add_seq_group 的包装流程生成 SequenceGroup 实例并加入 waiting 队列。假设一个请求需要生成文本的多种可能性调度器会解析该请求并通过 add_seq_group 将其加入等待队列等待资源分配。调度流程与任务分配策略vLLM 的调度系统设计堪称一件精妙的艺术品。它通过精心设计的状态转换机制,优雅地解决了大规模并发请求下的资源调度难题。在 vllm/engine/scheduler.py 的 Scheduler 类中,调度器通过 _schedule 方法作为总指挥,协调着整个系统的运转。调度器会根据当前系统负载和请求特征,自适应地选择最优的调度策略。在标准场景下使用 _schedule_default,而在需要处理大批量请求时,则会切换到专门优化的 _schedule_chunked_prefill 模式。这种灵活的策略选择确保了系统在不同负载下都能保持最佳性能。整个调度过程可以优雅地分为三个阶段:预填充阶段(Prefill Phase)这是请求处理的第一个关键阶段。当新请求到达时,调度器首先评估其资源需求,包括所需的 KV Cache 空间和计算资源。系统会为请求生成初始的注意力缓存,为后续的解码做好准备。这个阶段就像是为任务搭建舞台,布置好所有必要的道具。解码阶段(Decode Phase)这是生成过程的核心阶段。调度器在这个阶段需要精确地分配计算资源,确保每个请求都能得到持续的服务。通过细粒度的资源管理,系统能够在保证响应速度的同时,最大化 GPU 利用率。解码阶段的任务会被放入 running 队列,接受调度器的持续监控和管理。交换阶段(Swap Phase)为了处理资源竞争,调度器实现了优雅的任务交换机制。当系统资源紧张时,调度器会识别优先级较低的任务,将它们暂时转移到 CPU 内存(swapped 队列),为急需资源的高优先级任务让路。这种动态调度机制确保了系统资源的最优利用,同时保证了服务质量。这三个阶段通过精密的协作,构成了一个流畅的任务处理管道。调度器通过维护 waiting、running 和 swapped 三个队列的状态平衡,实现了类似操作系统页面调度的高效内存管理。每个阶段都配备了完善的监控和容错机制,确保了整个系统的稳定性和可靠性。值得一提的是,vLLM 的调度系统还实现了优先级抢占、动态批处理等高级特性,这些机制共同保证了系统在高负载下依然能够提供稳定且高效的服务。整个调度过程就像一场精心编排的交响乐,每个组件都恰到好处地配合,共同奏响高性能服务的乐章。3.1 scheduler 调度生命周期图 2: vLLM 调度器状态队列示意图3.2 _schedule_default调度逻辑_schedule_default方法是 vLLM 调度系统的指挥中心,它通过精心设计的流程来协调各类请求的处理。让我们逐步解析这个复杂而优雅的调度过程:(1) 预算初始化与资源盘点这就像交通管理员在早高峰前先统计可用车道和当前道路占用情况。系统会创建一个预算对象,记录最大可处理的 token 数和序列数,并统计当前正在运行的任务占用的资源。(2) 优先级调度策略这类似于交通管理系统的优先车道管理。系统优先处理已被交换出去的紧急任务,就像先让救护车通行。如果没有紧急任务,则开始处理新到达的请求。当采用优先级策略时,还会考虑是否需要让高优先级任务抢占资源。(3) 解码任务调度这就像管理正常行驶的车辆。只有在处理完紧急情况后,系统才会调度常规的解码任务。如果道路通畅(没有任务被抢占或交换出),还会尝试让一些临时停靠的车辆(被交换出的任务)重新上路。(4) 状态更新与队列管理这类似于实时更新交通状态。系统会更新各个队列的状态:被抢占的任务回到等待队列,新的任务进入运行队列,需要暂时让路的任务进入交换队列。(5) 结果整合与输出最后,系统会生成一份完整的调度报告,包含了所有需要执行的操作:哪些任务要执行,哪些内存块需要交换,以及各类统计信息。这就像交通指挥中心生成的实时路况报告,为下一个调度周期提供决策依据。通过这种精密的调度机制,vLLM 能够在保证公平性的同时,最大化系统的吞吐量和响应速度。整个过程就像一个训练有素的交通指挥系统,让每个请求都能得到恰当的处理,保证了整个服务的高效运转。3.3 预填充阶段的精密编排预填充阶段就像一个精心设计的入场管理系统,需要确保每个请求都能得到合适的处理。让我们通过几个关键步骤来理解这个过程:(1) 初始检查与资源评估这就像检票员在入场时检查门票。系统首先确认每个等待组只包含一个提示序列,然后计算需要处理的新token数量,区分哪些需要重新计算(uncached),哪些可以直接使用缓存(cached)。(2) 容量限制检查这类似于场馆的容量管理。如果一个请求太大(token数超过限制),就像一个太大的团队无法进入会场一样,系统会将其标记为已忽略,并移出等待队列。(3) 内存分配评估这就像检查场地是否有足够的座位。系统会评估是否有足够的内存块来容纳这个请求。如果暂时没有空间(LATER),就等待下次尝试;如果永远无法容纳(NEVER),则将请求标记为无法处理。(4) LoRA 资源管理这类似于特殊设备的分配管理。如果请求需要使用LoRA(一种特殊的模型适配技术),系统会检查是否还有可用的LoRA槽位。如果没有,该请求会被暂时搁置。(5) 预算控制这就像控制场地的实时容量。系统会严格监控已分配的资源是否达到上限,包括总token数和序列数,确保不会超出系统的处理能力。(6) 资源分配与状态转换这是最后的入场阶段。当所有检查都通过后,系统会正式为请求分配资源,将其状态更新为运行中,并记录相应的资源使用情况。(7) passed_delay均衡模型在做推理时waiting 队列中是源源不断有 seq_group 进来的一旦 vLLM 选择调度 waiting 队列它就会停下对 running/swapped 中 seq_group 的 decode 处理转而去做 waiting 中 seq_group 的 prefill也即vLLM 必须在新来的 seq_group 和已经在做推理的 seq_group 间取得一种均衡既不能完全不管新来的请求也不能耽误正在做推理的请求。_passed_delay 就是用来做这个判断的。prev_prompt 和 prev_time 用于记录上一个请求的执行时间从而动态计算 last_prompt_latency 以调整调度速率。这种延迟控制机制可以防止过度调度减少 GPU 负载。当延迟条件满足时_schedule_prefills 会获取 waiting 队列中第一个请求的 token 数量并通过 _get_num_new_tokens 方法来确定这个请求所需的 token 数量。随后该 token 数量与 _get_prompt_limit 限制值进行比较以确保请求不会超出模型的最大 token 负载。若 can_allocate 返回 AllocStatus.LATER表明当前 GPU 资源不足调度器将等待下次机会若返回 AllocStatus.NEVER则说明该请求太大无法分配调度器将忽略该请求并将其移出等待队列。(8) 资源分配与状态转换allocate 函数通过 block_manager 的内存管理功能为请求在 GPU 上分配所需的内存空间从而确保其可以顺利进入解码阶段。通过这种细致的分层管理,vLLM能够高效地处理大量并发请求,既确保了资源的最优利用,又保证了每个请求都能得到公平的处理机会。整个预填充阶段就像一个精密的入场管理系统,通过多重检查和平衡机制,确保系统的稳定运行和最佳性能。3.4 解码阶段的精密调度解码阶段是 vLLM 处理请求的核心环节就像一条高效的生产线需要精确地控制每个环节的运转。让我们深入理解这个复杂而优雅的过程(1) 初始化与缓存清理这就像生产线开始新的班次前的准备工作。系统会清理所有临时状态为新一轮调度做好准备。通过使用对象池(cache)来复用对象避免频繁创建新对象带来的性能开销。(2) 资源评估与任务获取这类似于生产线上的任务评估。系统会检查每个正在运行的任务组评估其资源需求。特别的是在解码阶段我们不需要考虑缓存的 tokens因为它们在预填充阶段就已经处理完毕。(3) 异步处理保护这就像生产线上的安全检查点。当使用异步处理器时系统会检查序列长度是否超出限制以防止内存溢出。这种保护机制确保了系统的稳定性。(4) 资源竞争处理这类似于生产线上的资源调度。当资源不足时系统需要决定哪些任务需要暂时让出资源。它会优先选择优先级较低的任务组作为牺牲者就像在繁忙时段将部分生产线暂时切换到更紧急的订单。(5) 抢占执行与状态转换这就像生产线上的任务切换。系统会根据具体情况决定是将任务暂存(swap out)还是标记为需要重新计算(recompute)。这种灵活的处理机制确保了资源的最优利用。(6) 任务调度与资源分配这类似于生产线上的实际加工过程。系统会为任务分配所需的资源槽位并根据任务类型预填充或解码设置不同的处理参数。解码任务通常每次只处理一个 token而预填充任务可能会批量处理多个 tokens。(7) 资源统计更新这就像生产线上的资源使用统计。系统会实时更新资源使用情况包括已批处理的 tokens 数量和运行中的序列数。当启用分块处理时还需要额外更新序列数统计。通过这种精密的调度机制vLLM 能够在保证公平性的同时最大化系统的吞吐量和响应速度。整个解码阶段就像一条精心设计的智能生产线通过灵活的资源调度和任务管理确保了系统的高效运转。3.5 交换阶段的精密调度交换阶段是 vLLM 内存管理的关键环节就像一个智能仓储系统需要在 CPU 和 GPU 内存之间灵活调度资源。让我们深入理解这个复杂而精密的过程(1) 初始化与资源准备这就像仓库管理员准备工作清单。系统会初始化各种任务列表包括需要从 CPU 加载到 GPU 的内存块、需要复制的数据块以及不同类型的任务组。(2) 可行性评估这类似于仓库管理员评估货物存放可能性。系统会检查是否有足够的 GPU 内存来容纳被交换出的任务。如果暂时没有空间(LATER)就等待下次机会如果永远无法容纳(NEVER)则将任务标记为无法执行。(3) LoRA 资源检查这就像检查特殊设备的可用性。如果任务需要使用 LoRA 适配器系统会检查是否有可用的 LoRA 槽位。如果没有该任务会被暂时保留在交换队列中。(4) 资源预算评估这类似于评估仓库的剩余容量。系统会计算任务所需的资源包括新序列数量和token数量确保在预算范围内才进行调度。(5) 执行交换操作这就像实际执行货物搬运。系统会将任务从 CPU 内存移回 GPU并为其分配必要的计算资源。这个过程包括数据传输和内存分配两个关键步骤。(6) 任务分类与资源记录这类似于货物分类入库。系统会根据任务类型预填充或解码将其放入相应的处理队列并设置适当的处理参数。(7) 资源统计更新这就像更新仓库库存记录。系统会更新资源使用统计包括已使用的token数量和序列数确保资源使用始终在可控范围内。通过这种精密的交换机制vLLM 实现了 CPU 和 GPU 内存之间的高效协同既保证了资源的充分利用又确保了任务的连续性。整个交换阶段就像一个智能仓储系统通过灵活的调度策略实现了计算资源的最优配置。资源管理与调度策略4.1 预算管理系统设计SchedulingBudget 类是 vLLM 资源管理的核心组件它就像一个精密的预算管理系统负责追踪和控制系统的资源使用。让我们深入理解它的设计(1) 核心资源指标这就像企业的预算系统定义了关键的资源限制总预算(token_budget)、人员限制(max_num_seqs)以及当前的资源使用状况。系统通过这些指标来确保资源使用不会超出限制。(2) 请求追踪机制这类似于预算系统中的交易记录追踪。系统使用集合来记录已经处理过的请求ID避免重复计算同一个请求的资源消耗。这种设计特别适合处理分布式环境下的资源统计。(3) 调度可行性检查这就像预算审批过程。在添加新的任务前系统会检查是否有足够的资源来处理它。检查包括两个方面token数量是否在预算范围内序列数是否超过系统限制(4) 资源分配与回收这类似于预算的分配和回收流程add_num_batched_tokens为新请求分配资源同时记录请求ID避免重复计算subtract_num_batched_tokens在请求完成或被中断时回收资源(5) 序列数管理这就像人力资源管理系统负责跟踪当前正在处理的序列数量添加新序列时会检查是否已经计入统计移除序列时会相应减少计数(6) 资源状态查询这类似于预算系统的报表功能提供了查询当前资源使用状况的接口已使用的token数量剩余可用的token预算当前序列数等关键指标通过这种精密的预算管理机制vLLM 能够准确地追踪和控制系统资源的使用情况确保系统在高负载下依然能够稳定运行。整个预算管理系统就像一个高效的企业财务系统通过严格的资源控制和灵活的分配策略实现了计算资源的最优利用。4.2 优先级调度和抢占策略的精密实现优先级调度和抢占机制是 vLLM 处理资源竞争的核心策略让我们深入理解这个精密的调度过程(1) 队列初始化与优先级排序这就像应急指挥中心的初始准备工作获取当前等待的请求队列将运行中的任务按优先级排序准备记录需要暂时撤离的资源初始化强制抢占计数器(2) 优先级反转检测这类似于应急响应中的情况评估检查是否有等待中的请求评估新请求的资源需求序列数和token数准备进行优先级比较(3) 抢占条件评估这就像应急处理中的资源调配决策检查是否存在优先级反转低优先级任务占用资源而高优先级任务等待评估是否有足够的资源来处理新请求如果资源充足则无需进行抢占(4) 受害者选择与资源回收这类似于应急情况下的资源重新分配选择优先级最低的运行中任务作为受害者计算需要回收的资源数量从预算中扣除这些资源更新序列计数(5) 抢占执行与状态转换这就像执行应急预案执行实际的抢占操作将任务从 GPU 移出将被抢占的任务放回等待队列前端记录抢占次数以进行监控(6) 队列重排序与状态更新这类似于应急处理后的现场恢复将触发抢占的请求放回等待队列重新按优先级排序所有等待的请求更新系统的队列状态通过这种精密的优先级调度和抢占机制vLLM 能够在资源竞争激烈的情况下保证高优先级任务的及时处理同时尽可能减少对低优先级任务的影响。整个机制就像一个高效的应急响应系统通过合理的资源调配和任务管理确保了系统的公平性和效率。4.3 抢占机制的精密实现vLLM 的抢占机制提供了两种处理模式重新计算(Recompute)和交换(Swap)。这种灵活的设计让系统能够根据不同场景选择最优的处理策略。让我们深入理解这个精密的抢占过程(1) 抢占模式选择这就像应急预案的选择过程默认情况下系统会根据序列组的特征自动选择最优策略对于单序列任务优先选择重新计算模式因为它的开销较小对于多序列任务如束搜索由于当前不支持重新计算会选择交换模式(2) 用户自定义模式处理这类似于应急响应中的人工干预系统允许用户指定特定的抢占模式如果用户明确要求使用交换模式系统会遵循这个选择其他情况下默认使用重新计算模式(3) 性能监控与警告机制这就像系统的健康监控每50次抢占操作会触发一次警告提醒管理员系统可能需要调整资源配置建议增加GPU内存利用率或张量并行度来缓解抢占压力记录累计抢占次数以便跟踪系统状态(4) 抢占执行这类似于应急预案的实际执行重新计算模式放弃当前进度后续需要从头计算交换模式将数据暂存到CPU内存保留计算进度严格的错误检查确保只执行有效的抢占模式通过这种精密的抢占机制vLLM 实现了资源的灵活调度通过自动选择最优抢占模式最小化性能开销提供用户自定义选项满足特定场景需求内置监控机制及时发现系统瓶颈支持多种抢占策略适应不同的任务特征这种设计就像一个智能的应急处理系统既能自动选择最优方案又保留了人工干预的可能同时通过持续监控确保系统的健康运行。vLLM 调度系统总结vLLM 的调度系统是一个精心设计的多层次架构通过多个协同工作的组件实现了高效的资源管理和任务调度。让我们从整体到细节来回顾这个系统。5.1 核心架构设计调度系统的基础建立在三个关键队列之上。waiting 队列负责存放新到达的请求running 队列管理正在执行的任务而 swapped 队列则暂存被交换出的任务。这种三队列设计为系统提供了灵活的任务状态管理能力使其能够有效应对各种负载情况。5.2 调度流程的精密编排整个调度过程分为三个主要阶段每个阶段都有其独特的职责。在预填充阶段系统会对新请求进行资源评估检查容量限制和内存可用性同时进行 LoRA 资源管理最后执行预算控制和资源分配。进入解码阶段后系统的重点转向管理运行中任务的资源使用。这包括处理异步任务和长度限制执行资源竞争处理以及维护任务状态和资源统计。在交换阶段系统负责在 CPU 和 GPU 内存间进行任务迁移。它会评估交换操作的可行性执行数据传输和资源重分配并及时更新系统状态和资源记录。5.3 资源管理的创新机制系统通过 SchedulingBudget 类实现了精确的资源控制。这个类不仅维护着 token 和序列数预算还负责追踪请求级别的资源使用。它提供了完整的资源分配和回收机制并通过实时监控确保系统资源的高效利用。5.4 优先级调度与抢占策略为了处理资源竞争系统实现了两种抢占模式。Recompute 模式适用于单序列任务因其开销较小而被优先选用。而 Swap 模式则适用于多序列任务它能够保留计算进度虽然开销较大但更适合某些特定场景。这种灵活的抢占机制确保了高优先级任务能够及时获得资源同时也保证了系统资源的最优利用和任务处理的连续性。通过精心的设计系统在处理资源竞争时既保证了效率又维护了公平性。5.5 性能优化与监控在性能优化方面系统采用了多项创新机制。对象池的复用有效减少了内存分配开销延迟控制机制避免了过度调度而批处理优化则显著提高了系统吞吐量。同时完善的实时监控和警告机制确保了系统运行的稳定性。通过这些精密的设计vLLM 的调度系统实现了资源的高效利用、任务的灵活管理、服务的可靠保障和性能的持续优化。这种多层次、多维度的调度架构使 vLLM 能够在处理大规模并发请求时保持稳定高效的性能为 LLM 服务提供了可靠的基础设施支持。五、VLLM 的优势1 高吞吐量相比 Hugging Face TransformersVLLM 的吞吐量可高出 8.5 - 24 倍相比 TGIText Generation Inference高 2.2 - 3.5 倍测试于 LLaMA - 7B 和 LLaMA - 13B。通过连续批处理技术VLLM 能够动态调度请求减少 GPU 空闲时间从而显著提高了系统在单位时间内处理请求的数量适用于高并发的应用场景如聊天机器人、实时翻译等。2 内存效率高PagedAttention 技术的引入使得 VLLM 能够有效减少内存浪费支持更大批次和更长序列。与传统框架中预分配大量内存的方式不同VLLM 的动态内存分配策略解决了内存囤积问题能够根据实际需求灵活分配内存提高了内存的使用效率使得在有限的内存资源下能够处理更多的任务。3 易用性强VLLM 与 Hugging Face 模型无缝集成支持 LLaMA、Mistral、Qwen 等主流模型。开发者只需几行代码即可将这些模型部署到 VLLM 框架中大大降低了使用门槛。同时其提供的简单易用的 Python 接口和 OpenAI 兼容的 API进一步方便了开发者进行模型推理和服务部署。4 灵活性高支持多模态、多硬件NVIDIA、AMD、Intel、TPU 等能够适应不同场景的需求。无论是在使用 NVIDIA GPU 的高性能计算环境还是在使用其他硬件的特定场景中VLLM 都能够发挥其优势为不同的用户和应用场景提供灵活的解决方案。此外其开源的特性Apache 2.0 许可证使得社区能够对其进行定制和快速修复进一步增强了框架的灵活性和适应性。5 可扩展性好VLLM 支持从 7B 到 70B 模型的快速切换仅需少量配置调整。在实际应用中随着业务需求的变化可能需要在不同规模的模型之间进行切换VLLM 的这种可扩展性能够方便地满足这种需求降低了模型升级和扩展的成本和难度。六、以部署 DeepSeek 为例讲解 VLLM 安装部署步骤1 环境准备硬件要求确保拥有支持 CUDA 的 NVIDIA GPU例如 A100、V100 等以充分发挥 VLLM 的性能优势。同时配备足够的系统内存因为大模型推理对内存需求较高。软件依赖安装 Python 环境建议使用 Python 3.8 及以上版本。安装 PyTorch需根据 GPU 型号和 CUDA 版本选择对应的 PyTorch 版本可通过官方网站获取安装命令。例如对于 CUDA 11.7 的环境安装命令可能为pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117还需安装其他依赖库可通过 VLLM 官方文档获取完整的依赖列表并使用 pip 进行安装。例如pip install -r requirements.txt2 安装 VLLM可以通过 pip 直接安装 VLLM 的稳定版本pip install vllm若希望获取最新的开发版本也可以从 GitHub 仓库克隆代码并进行安装git clone https://github.com/vllm-project/vllm.git cd vllm pip install -e.3 下载 DeepSeek 模型从 DeepSeek 官方网站或合法的模型存储库下载 DeepSeek 模型文件。确保下载的模型文件完整且符合 VLLM 的要求。下载完成后将模型文件解压到指定的目录例如/path/to/deepseek/model。4 配置 VLLM创建一个配置文件例如config.py用于指定 VLLM 的运行参数。在配置文件中需要指定模型的路径、使用的 GPU 数量、是否启用量化等参数。以下是一个简单的配置示例from vllm import LLM, SamplingParams model_path /path/to/deepseek/model llm LLM(modelmodel_path, tensor_parallel_size2) sampling_params SamplingParams(temperature0.8, top_p0.95)在上述示例中tensor_parallel_size2表示使用 2 个 GPU 进行张量并行计算可根据实际硬件情况进行调整。5 启动服务编写一个启动脚本例如serve.py用于启动 VLLM 服务并加载 DeepSeek 模型from vllm import LLM, SamplingParams model_path /path/to/deepseek/model llm LLM(modelmodel_path, tensor_parallel_size2) sampling_params SamplingParams(temperature0.8, top_p0.95) prompts [请描述一下春天的景色, 介绍一下中国的传统文化] results llm.generate(prompts, sampling_params) for prompt, result in zip(prompts, results): print(fPrompt: {prompt}) print(fGenerated text: {result.outputs[0].text})运行启动脚本python serve.py此时VLLM 服务将启动并使用 DeepSeek 模型进行推理根据输入的提示生成相应的文本。七、VLLM 的应用场景1 在线服务在聊天机器人领域VLLM 的高吞吐量和低延迟特性使其能够快速响应用户的输入。例如在大型客服聊天机器人系统中每分钟可能会收到数千个用户咨询VLLM 通过连续批处理技术将相似的用户问题进行合并处理减少了 GPU 的空闲时间能够在短时间内生成准确的回复提升用户体验。同时其高效的内存管理机制确保在高并发情况下系统依然能够稳定运行不会因内存不足而导致服务中断。2 批量推理对于需要处理大量文本生成任务的场景如内容创作平台生成文章摘要、机器翻译系统处理大量文档翻译等VLLM 能够充分发挥其高性能推理的优势。通过合理配置多 GPU 环境利用张量并行和流水线并行技术VLLM 可以快速处理大规模的文本数据提高批量推理的效率降低处理时间和成本。3 研究实验在学术研究和模型开发过程中研究人员需要频繁测试不同大语言模型的推理效果。VLLM 提供的简单易用的接口和对多种模型架构的支持使得研究人员能够轻松部署和测试不同的模型。同时其高效的推理性能可以加速实验进程帮助研究人员更快地验证新的算法和想法推动大语言模型领域的研究发展。总结与展望VLLM 作为一款高性能的大语言模型推理框架通过创新的技术如 PagedAttention、连续批处理等在吞吐量、内存效率等方面展现出了显著的优势。其灵活的架构设计和良好的兼容性使其能够适应多种应用场景和硬件环境为大语言模型的部署和应用提供了有力的支持。在未来随着大语言模型技术的不断发展VLLM 有望在以下几个方面进一步优化和拓展性能优化持续改进算法进一步提升在长上下文场景下的性能例如通过优化注意力机制减少计算复杂度提高模型在处理长文本时的速度和准确性。功能扩展支持更多的模型架构如编码 - 解码模型、Mamba 模型等以满足不同应用场景对模型结构的多样化需求。同时增强对多模态融合的支持不仅仅局限于现有的文本、图像、音频、视频输入探索更多模态数据的融合方式和应用场景。硬件兼容性进一步优化对低端硬件的支持降低部署门槛使更多用户能够在资源有限的环境中享受到高效的大语言模型推理服务。例如通过优化内存管理和计算资源分配提高在消费级 GPU 或集成显卡上的运行效率。社区发展随着开源社区的不断壮大VLLM 将获得更多开发者的贡献和反馈。社区的力量将推动 VLLM 持续创新快速修复漏洞增加更多实用功能进一步巩固其在大语言模型推理框架领域的领先地位。最后近期科技圈传来重磅消息行业巨头英特尔宣布大规模裁员2万人传统技术岗位持续萎缩的同时另一番景象却在AI领域上演——AI相关技术岗正开启“疯狂扩招”模式据行业招聘数据显示具备3-5年大模型相关经验的开发者在大厂就能拿到50K×20薪的高薪待遇薪资差距肉眼可见业内资深HR预判不出1年“具备AI项目实战经验”将正式成为技术岗投递的硬性门槛。在行业迭代加速的当下“温水煮青蛙”式的等待只会让自己逐渐被淘汰与其被动应对不如主动出击抢先掌握AI大模型核心原理落地应用技术项目实操经验借行业风口实现职业翻盘深知技术人入门大模型时容易走弯路我特意整理了一套全网最全最细的大模型零基础学习礼包涵盖入门思维导图、经典书籍手册、从入门到进阶的实战视频、可直接运行的项目源码等核心内容。这份资料无需付费免费分享给所有想入局AI大模型的朋友扫码免费领取全部内容部分资料展示1、 AI大模型学习路线图2、 全套AI大模型应用开发视频教程从入门到进阶这里都有跟着老师学习事半功倍。3、 大模型学习书籍文档4、AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5、大模型大厂面试真题整理了百度、阿里、字节等企业近三年的AI大模型岗位面试题涵盖基础理论、技术实操、项目经验等维度每道题都配有详细解析和答题思路帮你针对性提升面试竞争力。6、大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。学会后的收获• 基于大模型全栈工程实现前端、后端、产品经理、设计、数据分析等通过这门课可获得不同能力• 能够利用大模型解决相关实际项目需求 大数据时代越来越多的企业和机构需要处理海量数据利用大模型技术可以更好地处理这些数据提高数据分析和决策的准确性。因此掌握大模型应用开发技能可以让程序员更好地应对实际项目需求• 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型数据准备、数据蒸馏、大模型部署一站式掌握• 能够完成时下热门大模型垂直领域模型训练能力提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术这些技术的掌握可以提高程序员的编码能力和分析能力让程序员更加熟练地编写高质量的代码。扫码免费领取全部内容这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2458560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…