Ddavidich commited on
Commit
28a6813
·
verified ·
1 Parent(s): 994612f

Прижатие доли памяти чинилось только при автовыборе окна — теперь всегда

Browse files

Устройство опрашивалось лишь когда пользователь не задал ни --max-model-len,
ни ZENIT_SERVING_PROFILE. В остальных случаях clamp_utilization получал None и
молчал, а профиль всё равно подставлял 0.95. На карте с рабочим столом это
отказ при старте: Free memory (29.57/31.39 GiB) is less than desired GPU memory
utilization (0.95, 29.82 GiB). Замерено на локальной 5090 с 1.8 ГиБ рабочего
стола; после починки движок поднимается, доля прижата до 0.921.

Выбор окна остаётся за пользователем: память влияет на выбор только когда он
его не задал. 40 тестов профилей проходят.

Плюс квитанция vision_probe.json: мультимодальность НЕ работает. Зрительная
башня квантована с group_size 16, на Blackwell её берёт только ядро humming,
и оно падает с CUDA_ERROR_INVALID_VALUE в cuFuncSetAttribute.

custom_generate/serving_profiles.py CHANGED
@@ -528,22 +528,39 @@ def install_model_owned_serving_defaults() -> bool:
528
  if config and _is_our_architecture(config):
529
  spec = config.get(CONFIG_KEY) or {}
530
  requested = getattr(self, "max_model_len", None)
531
- device = None
532
- caller_utilization = None
533
- if requested is None and not os.environ.get(ENV_PROFILE):
534
- device = device_memory()
535
- current = getattr(self, "gpu_memory_utilization", None)
536
- if current is not None and current != vllm_default_utilization():
537
- caller_utilization = float(current)
538
- selected = select_profile(spec, requested, device, caller_utilization)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
539
  if selected is not None:
540
  name, body = selected
541
- if device is not None:
542
  _report_memory_choice(
543
  name,
544
  body,
545
  spec,
546
- profile_budget(body, device, caller_utilization),
547
  )
548
  if caller_utilization is None:
549
  lowered = clamp_utilization(body, device)
 
528
  if config and _is_our_architecture(config):
529
  spec = config.get(CONFIG_KEY) or {}
530
  requested = getattr(self, "max_model_len", None)
531
+ caller_chose_window = (
532
+ requested is not None or bool(os.environ.get(ENV_PROFILE))
533
+ )
534
+ # The card is probed either way. Two different questions are being
535
+ # answered with it, and conflating them was a real defect: asking
536
+ # for a window with --max-model-len, or forcing a profile, used to
537
+ # skip the probe entirely, so the utilisation clamp below never
538
+ # fired and the profile's 0.95 went through unchanged. On any card
539
+ # with a desktop session that is more than is free, and vLLM
540
+ # refuses to start - measured on a 5090 holding 1.8 GiB of desktop:
541
+ # "Free memory (29.57/31.39 GiB) is less than desired GPU memory
542
+ # utilization (0.95, 29.82 GiB)". Choosing a window is the caller's
543
+ # business; how much of the card is free is not.
544
+ device = device_memory()
545
+ current = getattr(self, "gpu_memory_utilization", None)
546
+ caller_utilization = (
547
+ float(current)
548
+ if current is not None and current != vllm_default_utilization()
549
+ else None
550
+ )
551
+ # Memory decides the window only when the caller left it open.
552
+ selection_device = None if caller_chose_window else device
553
+ selected = select_profile(
554
+ spec, requested, selection_device, caller_utilization
555
+ )
556
  if selected is not None:
557
  name, body = selected
558
+ if selection_device is not None:
559
  _report_memory_choice(
560
  name,
561
  body,
562
  spec,
563
+ profile_budget(body, selection_device, caller_utilization),
564
  )
565
  if caller_utilization is None:
566
  lowered = clamp_utilization(body, device)
lomonosov_zenit_altay_runtime-1.5.0-py3-none-any.whl CHANGED
Binary files a/lomonosov_zenit_altay_runtime-1.5.0-py3-none-any.whl and b/lomonosov_zenit_altay_runtime-1.5.0-py3-none-any.whl differ
 
receipts/vision_probe.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema": "lomonosov_zenit_vision_v1",
3
+ "status": "FAIL",
4
+ "failed_at": "request",
5
+ "question": "проходит ли изображение через модель на настоящем запросе",
6
+ "answer": "НЕТ. Мультимодальность на этом чекпойнте не работает.",
7
+ "host": "локальная RTX 5090, 32 ГБ, рабочий стол занимает ~1.3 ГиБ",
8
+ "max_model_len": 32768,
9
+ "load_seconds": 64.0,
10
+ "image": "logo.png 1200x842",
11
+ "path": [
12
+ "qwen3_vl.py:_process_image_input",
13
+ "self.visual(pixel_values, grid_thw)",
14
+ "kernels/linear/mixed_precision/humming.py:apply_weights",
15
+ "humming/layer.py:forward_layer -> ops.humming_gemm",
16
+ "torch.ops.humming.launch_kernel"
17
+ ],
18
+ "error": "RuntimeError: check_curesult, humming/csrc/launcher/utils.h:11, cuFuncSetAttribute failed with error: CUDA_ERROR_INVALID_VALUE",
19
+ "diagnosis": "зрительная башня квантована SELECTIVE_W8_W4_A16 и считается ядром humming; ядро просит у карты больше разделяемой памяти, чем та отдаёт, и не запускается. skip_mm_profiling обходит то же падение ПРИ СТАРТЕ и потому маскировал дефект",
20
+ "consequence": "заявлять мультимодальность нельзя. В карточке и в любых анонсах должно стоять: сейчас только текст",
21
+ "candidate_fix": "хранить зрительную башню в BF16 без квантования — это 371 380 976 параметров, около 743 МБ, и путь humming тогда не задействуется вовсе. Языковую часть это не трогает",
22
+ "note": "родословная зрения сама помечена promotion: forbidden_until_multimodal_A_B_and_raw1010k_PASS"
23
+ }