vllm.utils.sparse_utils
¶
Safe deserialization helpers for client-supplied embedding tensors.
check_sparse_tensor_invariants_threadsafe() is a thread-safe wrapper for
sparse tensor invariant validation. safe_to_dense() bounds the memory a
deserialized tensor may allocate when densified.
PyTorch's torch.sparse.check_sparse_tensor_invariants() context manager
manipulates a process-global flag (save/enable/restore). When multiple
embedding-load operations run concurrently on a thread-pool executor, one
context can restore the flag to False while another thread is still inside
its guard, bypassing the invariant check.
All call sites MUST use check_sparse_tensor_invariants_threadsafe()
which serializes access behind a lock.
Functions:
-
safe_to_dense–Densify a client-supplied embedding tensor within a memory budget.
safe_to_dense(tensor, *, parameter)
¶
Densify a client-supplied embedding tensor within a memory budget.
torch.load(..., weights_only=True) prevents arbitrary code execution but
not memory amplification: a sparse COO tensor carries its own declared
shape, so the dense allocation is bounded by that shape rather than by the
request. A 2.6 KB payload declaring (30000, 30000) materializes 3.4 GiB,
and the shape can be picked to fit whatever host is being targeted. The
invariant checks only reject invalid tensors (indices outside the
declared shape); a single non-zero element inside a (2**20, 2**20) shape
is perfectly valid and passes them.
So reject oversized payloads based on the dense size they declare, before
to_dense() allocates anything.