找回密码
 立即注册
首页 业界区 业界 omniinfer vllm v0.9.0整体框架图和pangu7b模型图 ...

omniinfer vllm v0.9.0整体框架图和pangu7b模型图

吉芷雁 昨天 23:40
参考
https://shen-shanshan.github.io/articles/vllm-v1-整体流程从请求到算子执行/
https://gitee.com/omniai/omniinfer/tree/release_v0.6.0/
https://github.com/vllm-project/vllm/tree/v0.9.0
https://ai.gitcode.com/ascend-tribe/openPangu-Embedded-7B-V1.1
整体框架图和pangu7b模型图

1.png

1 LLMEngine - 核心引擎

位置: vllm/engine/llm_engine.py
主要职责:

  • 请求处理和生命周期管理
  • 调度协调和输出管理
  • 多步迭代处理
  • 与tokenizer和detokenizer集成
关键特性:
  1. class LLMEngine:
  2.     def __init__(self, model_config: ModelConfig,
  3.                  cache_config: CacheConfig,
  4.                  parallel_config: ParallelConfig,
  5.                  scheduler_config: SchedulerConfig,
  6.                  device_config: DeviceConfig,
  7.                  lora_config: LoRAConfig,
  8.                  vision_language_config: VisionLanguageConfig,
  9.                  speculative_config: SpeculativeConfig,
  10.                  decoding_config: DecodingConfig,
  11.                  observability_config: ObservabilityConfig,
  12.                  prompt_adapter_config: PromptAdapterConfig,
  13.                  executor_class: Type[ExecutorBase]):
复制代码
核心方法:

  • add_request(): 添加新请求
  • step(): 执行一个推理步骤
  • abort_request(): 中断请求
  • has_unfinished_requests(): 检查未完成请求
2 Scheduler - 调度器

位置: vllm/core/scheduler.py
主要职责:

  • 实现连续批处理(Continuous Batching)
  • 内存感知的请求调度
  • 优先级管理和抢占策略
  • Chunked prefill支持
调度策略:
  1. def _schedule_chunked_prefill(self) -> SchedulerOutputs:
  2.     """使用chunked prefill调度排队请求"""
  3.     # 1. 计算调度预算
  4.     budget = SchedulingBudget(
  5.         token_budget=self.scheduler_config.max_num_batched_tokens,
  6.         max_num_seqs=self.scheduler_config.max_num_seqs,
  7.     )
  8.     # 2. 预填充阶段调度
  9.     prefills = self._schedule_prefills(budget)
  10.     # 3. 解码阶段调度
  11.     decodes = self._schedule_decodes(budget)
  12.     # 4. 抢占和内存管理
  13.     self._handle_preemption(budget)
复制代码
关键数据结构:
  1. @dataclass
  2. class SchedulingBudget:
  3.     token_budget: int                    # token预算
  4.     max_num_seqs: int                    # 最大序列数
  5.     _num_cached_tokens: int = 0          # 缓存token数
  6.     _num_batched_tokens: int = 0        # 批处理token数
复制代码
3 BlockManager - 内存管理器

位置: vllm/core/block_manager.py
主要职责:

  • 实现PagedAttention内存管理
  • KV缓存的块分配和回收
  • Copy-on-Write内存共享
  • 前缀缓存管理
核心算法:
  1. class SelfAttnBlockSpaceManager(BlockSpaceManager):
  2.     def allocate(self, seq_group: SequenceGroup) -> None:
  3.         """为序列组分配内存块"""
  4.         # 1. 计算需要的块数
  5.         num_required_blocks = self._calculate_required_blocks(seq_group)
  6.     # 2. 检查可用块
  7.     if not self._has_enough_blocks(num_required_blocks):
  8.         raise MemoryError("Insufficient GPU blocks")
  9.         
  10.     # 3. 分配块并建立映射
  11.     block_table = self._allocate_blocks(seq_group, num_required_blocks)
  12.    
  13.     # 4. 更新序列状态
  14.     seq_group.block_tables = block_table
复制代码
内存优化策略:

  • 前缀缓存: 相同前缀的序列共享KV缓存
  • Copy-on-Write: 派生序列共享内存块
  • 滑动窗口: 限制长序列的内存使用
  • 分层内存: GPU/CPU/磁盘三级存储
4 Attention后端

位置: vllm/attention/backends/
支持的后端:

  • FlashAttention: 最高性能的attention实现
  • FlashInfer: 高性能推理专用后端
  • XFormers: 替代性attention实现
  • Triton: 自定义triton内核
  • Placeholder: 无attention模型的占位符
后端选择逻辑:
  1. def get_attn_backend(head_size: int, dtype: torch.dtype,
  2.                     kv_cache_dtype: Optional[str], block_size: int,
  3.                     is_attention_free: bool = False) -> type[AttentionBackend]:
  4.     """根据配置选择最优attention后端"""
  5.     # 1. 检查是否为无attention模型
  6.     if is_attention_free:
  7.         return PlaceholderAttentionBackend
  8.     # 2. 检查FlashAttention支持
  9.     if FlashAttentionBackend.is_supported(head_size, dtype, kv_cache_dtype):
  10.         return FlashAttentionBackend
  11.     # 3. 检查其他后端支持
  12.     if FlashInferBackend.is_supported(head_size, dtype, kv_cache_dtype):
  13.         return FlashInferBackend
  14.     # 4. 默认使用Triton后端
  15.     return TritonAttentionBackend
复制代码
5 Worker和ModelRunner

位置: vllm/worker/
Worker架构:
  1. class Worker(LocalOrDistributedWorkerBase):
  2.     """在GPU上执行(分区)模型的worker类"""
  3.     def __init__(self, vllm_config: VllmConfig,
  4.                  local_rank: int, rank: int,
  5.                  distributed_init_method: str):
  6.         # 1. 初始化设备
  7.         self.device = torch.device(f"cuda:{local_rank}")
  8.         # 2. 创建模型运行器
  9.         self.model_runner = ModelRunnerClass(vllm_config)
  10.         # 3. 创建缓存引擎
  11.         self.cache_engine = CacheEngine(vllm_config.cache_config,
  12.                                        vllm_config.model_config,
  13.                                        self.device)
  14.         # 4. 初始化内存
  15.         self._init_memory()
复制代码
ModelRunner职责:

  • 模型前向传播执行
  • 输入张量准备
  • Attention元数据管理
  • CUDA图优化
6 Executor框架

位置: vllm/executor/
Executor类型:

  • UnipartExecutor: 单GPU执行器
  • MultiprocessingExecutor: 多进程执行器
  • RayDistributedExecutor: 基于Ray的分布式执行器
  • PipelineParallelExecutor: 流水线并行执行器
分布式执行:
  1. class RayDistributedExecutor(DistributedExecutorBase):
  2.     def __init__(self, vllm_config: VllmConfig,
  3.                  placement_group: Optional[PlacementGroup] = None):
  4.         # 1. 初始化Ray集群
  5.         self._init_ray_cluster()
  6.         # 2. 创建远程worker
  7.         self._init_workers(vllm_config, placement_group)
  8.         # 3. 初始化并行状态
  9.         self._initialize_parallel_state(vllm_config.parallel_config)
  10.         # 4. 加载模型
  11.         self._load_model(vllm_config.model_config)
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册