vLLM V1 엔진 실행 흐름

vLLM V1 엔진 실행 흐름 An architecture diagram generated by Archify. API 클라이언트 · LLM.generate() / OpenAI 서버 · Architecture component API 클라이언트 LLM.generate() / OpenAI 서버 AsyncLLM / LLMEngine · 요청 진입점 · 프론트엔드 프로세스 (P0) · P0 프론트엔드 AsyncLLM / LLMEngine 요청 진입점 P0 프론트엔드 InputProcessor · 토크나이저 · MM 프로세서 · 프론트엔드 프로세스 (P0) InputProcessor 토크나이저 · MM 프로세서 EngineCoreClient · SyncMP / AsyncMP 클라이언트 · 프론트엔드 프로세스 (P0) EngineCoreClient SyncMP / AsyncMP 클라이언트 OutputProcessor · Detokenizer · 정지 조건 · 프론트엔드 프로세스 (P0) OutputProcessor Detokenizer · 정지 조건 MultiprocExecutor · collective_rpc · 엔진 코어 프로세스 (P1) MultiprocExecutor collective_rpc Scheduler · 연속 배칭 · 청크 프리필 · 엔진 코어 프로세스 (P1) Scheduler 연속 배칭 · 청크 프리필 EngineCoreProc · run_busy_loop() · 엔진 코어 프로세스 (P1) · P1 엔진 코어 EngineCoreProc run_busy_loop() P1 엔진 코어 KVCacheManager · BlockPool · 프리픽스 캐시 · 엔진 코어 프로세스 (P1) KVCacheManager BlockPool · 프리픽스 캐시 WorkerProc · Worker · TP × PP 랭크별 프로세스 · 워커 프로세스 (랭크당 1개) · GPU 워커 WorkerProc · Worker TP × PP 랭크별 프로세스 GPU 워커 GPUModelRunner · 입력 준비 → forward → 샘플링 · 워커 프로세스 (랭크당 1개) GPUModelRunner 입력 준비 → forward → 샘플링 Paged KV Cache · GPU HBM 블록 · 워커 프로세스 (랭크당 1개) Paged KV Cache GPU HBM 블록 generate() / add_request() process_inputs(): 토큰화 · 멀티모달 전처리 EngineCoreRequest ZMQ input socket · msgpack step(): schedule() allocate_slots() SchedulerOutput rpc_broadcast_mq: execute_model 브로드캐스트 execute_model() → sample_tokens() paged attention 읽기 · 쓰기 worker_response_mq: ModelRunnerOutput update_from_output() EngineCoreOutputs → ZMQ output socket process_outputs(): detokenize RequestOutput 스트리밍 프론트엔드 프로세스 (P0) 엔진 코어 프로세스 (P1) 워커 프로세스 (랭크당 1개) Legend Frontend Backend Database Message bus External

프론트엔드 프로세스 P0 — llm_engine.py · async_llm.py

  • • process_inputs()가 토큰화와 멀티모달 전처리를 수행
  • • EngineCoreClient가 요청을 msgpack으로 직렬화해 ZMQ로 전송
  • • OutputProcessor가 detokenize·정지 문자열 검사 후 RequestOutput 생성

엔진 코어 프로세스 P1 — core.py · sched/scheduler.py

  • • run_busy_loop()이 input_queue를 비운 뒤 step()을 호출
  • • schedule()이 토큰 예산 안에서 running·waiting 요청에 토큰을 배분
  • • update_from_output()이 EngineCoreOutputs를 만들어 output_queue로 전달

워커 프로세스 — multiproc_executor.py · gpu_model_runner.py

  • • rpc_broadcast_mq로 모든 TP·PP 랭크에 동일한 RPC를 브로드캐스트
  • • GPUModelRunner: 입력 준비 → forward → 로짓 → 샘플링
  • • 결과는 output_rank 하나에서만 worker_response_mq로 회수