nano-vLLM Original Code Map

마지막 수정:

inferencenano-vllmcode-reading

실습 snapshot을 끝낸 뒤 원본 nano-vLLM을 읽는다.

처음부터 원본을 읽지 않는 이유는 간단하다. ModelRunner에 CUDA, KV cache allocation, tensor parallel, CUDA graph가 한꺼번에 들어 있기 때문이다.

대응 관계는 다음과 같다.

LLM API:
nano-vllm/nanovllm/llm.py

Engine loop:
nano-vllm/nanovllm/engine/llm_engine.py

Request state:
nano-vllm/nanovllm/engine/sequence.py

Scheduler:
nano-vllm/nanovllm/engine/scheduler.py

Paged KV cache / prefix cache:
nano-vllm/nanovllm/engine/block_manager.py

Model execution boundary:
nano-vllm/nanovllm/engine/model_runner.py

Attention backend:
nano-vllm/nanovllm/layers/attention.py

이제 원본의 LLMEngine.step()을 보면 실습에서 만든 구조와 거의 같은 질문을 한다.

이번 step에 어떤 seqs를 실행할 것인가?
prefill인가 decode인가?
ModelRunner에 어떤 데이터 형식으로 넘길 것인가?
반환된 token을 request state에 어떻게 반영할 것인가?

확인

  • 실습 BlockManager와 원본 BlockManager의 가장 큰 차이는 무엇인가?
  • 원본 ModelRunner.prepare_prefill()은 어떤 tensor들을 만들어 worker contract로 넘기는가?
  • CUDA graph는 왜 prefill보다 decode에 먼저 붙는가?