main
py 47 lines 1.42 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 """Supporting utilities for the ECCPUConnector scheduler."""
4
5 import msgspec
6
7 from vllm.logger import init_logger
8
9 # (host, port) pair identifying a remote peer's ZMQ side-channel endpoint.
10 PeerAddr = tuple[str, int]
11
12 logger = init_logger(__name__)
13
14
15 # Msgpack (de)serialization for the list-of-(addr, size, device_id)
16 # descriptor form that NIXL's `get_xfer_descs` expects.
17 _MemDescList = list[tuple[int, int, int]]
18
19 _mem_desc_encoder = msgspec.msgpack.Encoder()
20 _mem_desc_decoder = msgspec.msgpack.Decoder(_MemDescList)
21
22
23 def serialize_mem_descriptor(descs: _MemDescList) -> bytes:
24 return _mem_desc_encoder.encode(descs)
25
26
27 def deserialize_mem_descriptor(payload: bytes) -> _MemDescList:
28 return _mem_desc_decoder.decode(payload)
29
30
31 def build_block_descs(
32 base_ptr: int,
33 num_blocks: int,
34 block_size_bytes: int,
35 device_id: int = 0,
36 ) -> _MemDescList:
37 """Per-block `(addr, size, device_id)` tuples for an `ECSharedRegion`.
38
39 Handed to `nixl.get_xfer_descs` to build a dlist where descriptor `i`
40 addresses block `i` in the mmap. This makes a WRITE to block indices
41 `[i1, i2, ...]` a simple `make_prepped_xfer(..., [i1, i2])` on both
42 ends — no per-request address math.
43 """
44 return [
45 (base_ptr + i * block_size_bytes, block_size_bytes, device_id)
46 for i in range(num_blocks)
47 ]