From 5fe655bf26a09f9a03b7d5a5aa7347ad131e001c Mon Sep 17 00:00:00 2001 From: mingyue300 Date: Wed, 20 May 2026 11:06:51 +0800 Subject: [PATCH] vlm: fix shared memory bug of deep copy mm_items (#24231) --- python/sglang/srt/managers/tokenizer_manager.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/python/sglang/srt/managers/tokenizer_manager.py b/python/sglang/srt/managers/tokenizer_manager.py index 0d63f608a..64a69018d 100644 --- a/python/sglang/srt/managers/tokenizer_manager.py +++ b/python/sglang/srt/managers/tokenizer_manager.py @@ -1444,6 +1444,12 @@ class TokenizerManager(TokenizerControlMixin, TokenizerManagerScoreMixin): for i in range(batch_size): tmp_obj = copy.copy(objs[i]) tokenized_obj = copy.copy(tokenized_objs[i]) + # Ensure independent mm_items so wrap_shm_features won't mutate the original + if hasattr(tokenized_obj, "mm_inputs") and tokenized_obj.mm_inputs: + tokenized_obj.mm_inputs = copy.copy(tokenized_obj.mm_inputs) + tokenized_obj.mm_inputs.mm_items = [ + copy.copy(item) for item in tokenized_obj.mm_inputs.mm_items + ] tokenized_obj.rid = tmp_obj.regenerate_rid() tokenized_obj.sampling_params = copy.copy(tokenized_obj.sampling_params) tokenized_obj.sampling_params.max_new_tokens = 0 @@ -1457,6 +1463,12 @@ class TokenizerManager(TokenizerControlMixin, TokenizerManagerScoreMixin): for _ in range(obj.parallel_sample_num): tmp_obj = copy.copy(objs[i]) tokenized_obj = copy.copy(tokenized_objs[i]) + # Ensure independent mm_items so wrap_shm_features won't mutate the original + if hasattr(tokenized_obj, "mm_inputs") and tokenized_obj.mm_inputs: + tokenized_obj.mm_inputs = copy.copy(tokenized_obj.mm_inputs) + tokenized_obj.mm_inputs.mm_items = [ + copy.copy(item) for item in tokenized_obj.mm_inputs.mm_items + ] tokenized_obj.rid = tmp_obj.regenerate_rid() self._init_req_state(tmp_obj) tokenized_obj.time_stats = self.rid_to_state[tmp_obj.rid].time_stats