From 513298f1b44157f7ae2f7007ef7b17c2929d11d4 Mon Sep 17 00:00:00 2001 From: Yuekai Zhang Date: Tue, 26 Aug 2025 23:47:50 +0800 Subject: [PATCH] [Bugfix] fix bf16 multimodal model hash (#23623) Signed-off-by: Yuekai Zhang Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Roger Wang Co-authored-by: Cyrus Leung --- vllm/multimodal/hasher.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/vllm/multimodal/hasher.py b/vllm/multimodal/hasher.py index 210a4ec762879..479961776a6a0 100644 --- a/vllm/multimodal/hasher.py +++ b/vllm/multimodal/hasher.py @@ -43,7 +43,19 @@ class MultiModalHasher: return cls.item_to_bytes( "image", np.asarray(convert_image_mode(obj, "RGBA"))) if isinstance(obj, torch.Tensor): - return cls.item_to_bytes("tensor", obj.cpu().numpy()) + tensor_obj: torch.Tensor = obj.cpu() + tensor_dtype = tensor_obj.dtype + if tensor_dtype == torch.bfloat16: + tensor_obj = tensor_obj.contiguous() + tensor_obj = tensor_obj.view( + (tensor_obj.numel(), )).view(torch.uint8) + return cls.item_to_bytes( + "tensor", { + "original_dtype": str(tensor_dtype), + "original_shape": tuple(tensor_obj.shape), + "data": tensor_obj.numpy() + }) + return cls.item_to_bytes("tensor", tensor_obj.numpy()) if isinstance(obj, np.ndarray): # If the array is non-contiguous, we need to copy it first arr_data = obj.data if obj.flags.c_contiguous else obj.tobytes()