CompressedGemma commited on
Commit
da342e1
·
verified ·
1 Parent(s): e6d5776

Upload 2 files

Browse files
Files changed (1) hide show
  1. slimshard_gui.py +73 -7
slimshard_gui.py CHANGED
@@ -107,6 +107,8 @@ class SlimShardGUI:
107
  self.device_var = tk.StringVar(value="auto")
108
  self.quant_format_var = tk.StringVar(value="mixed")
109
  self.expert_keep_var = tk.DoubleVar(value=1.0)
 
 
110
 
111
  self.filter_action_var = tk.StringVar(value="ALL")
112
  self.search_var = tk.StringVar()
@@ -144,6 +146,8 @@ class SlimShardGUI:
144
  self.device_var,
145
  self.quant_format_var,
146
  self.expert_keep_var,
 
 
147
  ):
148
  v.trace_add("write", lambda *_: self._update_cli_preview())
149
 
@@ -339,7 +343,31 @@ class SlimShardGUI:
339
  state="readonly",
340
  ).pack(side=tk.LEFT, padx=(0, 16))
341
 
342
- ttk.Label(row_opt, text="SlimMoE Expert Keep Ratio:").pack(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  side=tk.LEFT, padx=(0, 6)
344
  )
345
  ttk.Spinbox(
@@ -349,13 +377,13 @@ class SlimShardGUI:
349
  increment=0.05,
350
  textvariable=self.expert_keep_var,
351
  width=6,
352
- ).pack(side=tk.LEFT, padx=(0, 16))
353
 
354
  ttk.Checkbutton(
355
  row_opt,
356
- text="Export Ready-to-Load HF Directory (symlinks config/tokenizer + model.safetensors)",
357
  variable=self.auto_bundle_var,
358
- ).pack(side=tk.LEFT, padx=(0, 16))
359
 
360
  btn_bar = ttk.Frame(opt_frame)
361
  btn_bar.pack(fill=tk.X, pady=(8, 0))
@@ -665,6 +693,18 @@ class SlimShardGUI:
665
  cmd += ["--output", self.output_var.get()]
666
  if self.auto_bundle_var.get() and self.export_dir_var.get():
667
  cmd += ["--export-hf-dir", self.export_dir_var.get()]
 
 
 
 
 
 
 
 
 
 
 
 
668
  cmd += ["--device", self.device_var.get()]
669
  elif mode == "build":
670
  if self.model_dir_var.get():
@@ -695,21 +735,37 @@ class SlimShardGUI:
695
  if not shard or not Path(shard).exists():
696
  messagebox.showwarning("SlimShard", "Please select a valid .safetensors shard first.")
697
  return
 
 
 
 
 
 
 
 
698
  try:
699
  plan = inspect_recovery_plan(
700
  shard,
701
  index=self.index_var.get().strip() or None,
702
  config=self.config_var.get().strip() or None,
 
 
703
  )
704
  except Exception as exc:
705
  messagebox.showerror("Inspect Failed", str(exc))
706
  return
707
 
708
  archs = ",".join(plan["architectures"]) or plan["model_type"]
 
 
 
 
 
 
709
  self.arch_summary_var.set(
710
- f"{archs} (type={plan['model_type']}, hidden={plan['hidden_size']}, "
711
- f"layers={plan['num_hidden_layers']}, experts={plan['num_experts']}, "
712
- f"vocab={plan['vocab_size']}, total_tensors={plan['total_tensors']})"
713
  )
714
  surv = plan["surviving_layers"]
715
  miss = plan["missing_layers"]
@@ -787,6 +843,14 @@ class SlimShardGUI:
787
  if self.auto_bundle_var.get() and self.export_dir_var.get().strip()
788
  else None
789
  )
 
 
 
 
 
 
 
 
790
  res = recover_from_shard(
791
  shard,
792
  idx,
@@ -797,6 +861,8 @@ class SlimShardGUI:
797
  progress_cb=progress_cb,
798
  stop_event=self._stop_event,
799
  export_hf_dir=exp_dir,
 
 
800
  )
801
  if exp_dir:
802
  self._queue.put(("set_test_dir", exp_dir))
 
107
  self.device_var = tk.StringVar(value="auto")
108
  self.quant_format_var = tk.StringVar(value="mixed")
109
  self.expert_keep_var = tk.DoubleVar(value=1.0)
110
+ self.target_params_b_var = tk.DoubleVar(value=30.0)
111
+ self.max_experts_var = tk.IntVar(value=0)
112
 
113
  self.filter_action_var = tk.StringVar(value="ALL")
114
  self.search_var = tk.StringVar()
 
146
  self.device_var,
147
  self.quant_format_var,
148
  self.expert_keep_var,
149
+ self.target_params_b_var,
150
+ self.max_experts_var,
151
  ):
152
  v.trace_add("write", lambda *_: self._update_cli_preview())
153
 
 
343
  state="readonly",
344
  ).pack(side=tk.LEFT, padx=(0, 16))
345
 
346
+ ttk.Label(row_opt, text="Target Params (B, 0=full):").pack(
347
+ side=tk.LEFT, padx=(0, 6)
348
+ )
349
+ ttk.Spinbox(
350
+ row_opt,
351
+ from_=0.0,
352
+ to=600.0,
353
+ increment=1.0,
354
+ textvariable=self.target_params_b_var,
355
+ width=6,
356
+ ).pack(side=tk.LEFT, padx=(0, 14))
357
+
358
+ ttk.Label(row_opt, text="Max Experts/Layer (0=auto):").pack(
359
+ side=tk.LEFT, padx=(0, 6)
360
+ )
361
+ ttk.Spinbox(
362
+ row_opt,
363
+ from_=0,
364
+ to=512,
365
+ increment=1,
366
+ textvariable=self.max_experts_var,
367
+ width=5,
368
+ ).pack(side=tk.LEFT, padx=(0, 14))
369
+
370
+ ttk.Label(row_opt, text="SlimMoE Keep Ratio:").pack(
371
  side=tk.LEFT, padx=(0, 6)
372
  )
373
  ttk.Spinbox(
 
377
  increment=0.05,
378
  textvariable=self.expert_keep_var,
379
  width=6,
380
+ ).pack(side=tk.LEFT, padx=(0, 14))
381
 
382
  ttk.Checkbutton(
383
  row_opt,
384
+ text="Export HF Bundle Dir",
385
  variable=self.auto_bundle_var,
386
+ ).pack(side=tk.LEFT, padx=(0, 8))
387
 
388
  btn_bar = ttk.Frame(opt_frame)
389
  btn_bar.pack(fill=tk.X, pady=(8, 0))
 
693
  cmd += ["--output", self.output_var.get()]
694
  if self.auto_bundle_var.get() and self.export_dir_var.get():
695
  cmd += ["--export-hf-dir", self.export_dir_var.get()]
696
+ try:
697
+ tp = float(self.target_params_b_var.get())
698
+ if tp > 0.0:
699
+ cmd += ["--target-params-b", f"{tp:g}"]
700
+ except Exception:
701
+ pass
702
+ try:
703
+ me = int(self.max_experts_var.get())
704
+ if me > 0:
705
+ cmd += ["--max-experts", str(me)]
706
+ except Exception:
707
+ pass
708
  cmd += ["--device", self.device_var.get()]
709
  elif mode == "build":
710
  if self.model_dir_var.get():
 
735
  if not shard or not Path(shard).exists():
736
  messagebox.showwarning("SlimShard", "Please select a valid .safetensors shard first.")
737
  return
738
+ try:
739
+ tp = float(self.target_params_b_var.get())
740
+ except Exception:
741
+ tp = 0.0
742
+ try:
743
+ me = int(self.max_experts_var.get())
744
+ except Exception:
745
+ me = 0
746
  try:
747
  plan = inspect_recovery_plan(
748
  shard,
749
  index=self.index_var.get().strip() or None,
750
  config=self.config_var.get().strip() or None,
751
+ target_params_b=tp if tp > 0.0 else None,
752
+ max_experts=me if me > 0 else None,
753
  )
754
  except Exception as exc:
755
  messagebox.showerror("Inspect Failed", str(exc))
756
  return
757
 
758
  archs = ",".join(plan["architectures"]) or plan["model_type"]
759
+ orig_e = plan.get("orig_num_experts", plan["num_experts"])
760
+ exp_str = (
761
+ f"{plan['num_experts']}/{orig_e}"
762
+ if plan["num_experts"] != orig_e
763
+ else str(plan["num_experts"])
764
+ )
765
  self.arch_summary_var.set(
766
+ f"{archs} (~{plan.get('estimated_params_b', 0)}B params | type={plan['model_type']}, "
767
+ f"hidden={plan['hidden_size']}, layers={plan['num_hidden_layers']}, "
768
+ f"experts={exp_str}, vocab={plan['vocab_size']}, tensors={plan['total_tensors']})"
769
  )
770
  surv = plan["surviving_layers"]
771
  miss = plan["missing_layers"]
 
843
  if self.auto_bundle_var.get() and self.export_dir_var.get().strip()
844
  else None
845
  )
846
+ try:
847
+ tp = float(self.target_params_b_var.get())
848
+ except Exception:
849
+ tp = 0.0
850
+ try:
851
+ me = int(self.max_experts_var.get())
852
+ except Exception:
853
+ me = 0
854
  res = recover_from_shard(
855
  shard,
856
  idx,
 
861
  progress_cb=progress_cb,
862
  stop_event=self._stop_event,
863
  export_hf_dir=exp_dir,
864
+ target_params_b=tp if tp > 0.0 else None,
865
+ max_experts=me if me > 0 else None,
866
  )
867
  if exp_dir:
868
  self._queue.put(("set_test_dir", exp_dir))