neuralworm commited on
Commit
2161eb0
·
1 Parent(s): a285b10

get layers from model

Browse files
cognitive_mapping_probe/llm_iface.py CHANGED
@@ -49,9 +49,9 @@ class LLM:
49
  print(f"[WARN] Could not set 'eager' attention: {e}.", flush=True)
50
 
51
  self.model.eval()
52
- self.config = self.model.config # Behalte den Zugriff auf die Originalkonfiguration
53
 
54
- # --- NEU: Befülle die stabile Konfigurations-Abstraktion ---
55
  self.stable_config = self._populate_stable_config()
56
 
57
  print(f"[INFO] Model '{model_id}' loaded on device: {self.model.device}", flush=True)
@@ -59,17 +59,35 @@ class LLM:
59
  def _populate_stable_config(self) -> StableLLMConfig:
60
  """
61
  Liest die volatile `transformers`-Konfiguration aus und befüllt unsere stabile Datenklasse.
 
62
  """
63
- # Robuste Methode für hidden_dim
64
  try:
65
  hidden_dim = self.model.get_input_embeddings().weight.shape[1]
66
  except AttributeError:
67
  hidden_dim = getattr(self.config, 'hidden_size', getattr(self.config, 'd_model', 0))
68
 
69
- # Robuste Methode für num_layers
70
- num_layers = getattr(self.config, 'num_hidden_layers', getattr(self.config, 'num_layers', 0))
71
-
72
- # Assertions zur Sicherstellung der wissenschaftlichen Validität
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  assert hidden_dim > 0, "Could not determine hidden dimension from model config."
74
  assert num_layers > 0, "Could not determine number of layers from model config."
75
 
 
49
  print(f"[WARN] Could not set 'eager' attention: {e}.", flush=True)
50
 
51
  self.model.eval()
52
+ self.config = self.model.config
53
 
54
+ # Befülle die stabile Konfigurations-Abstraktion
55
  self.stable_config = self._populate_stable_config()
56
 
57
  print(f"[INFO] Model '{model_id}' loaded on device: {self.model.device}", flush=True)
 
59
  def _populate_stable_config(self) -> StableLLMConfig:
60
  """
61
  Liest die volatile `transformers`-Konfiguration aus und befüllt unsere stabile Datenklasse.
62
+ Implementiert eine robuste, zweistufige Fallback-Strategie.
63
  """
64
+ # --- Robuste Methode für hidden_dim ---
65
  try:
66
  hidden_dim = self.model.get_input_embeddings().weight.shape[1]
67
  except AttributeError:
68
  hidden_dim = getattr(self.config, 'hidden_size', getattr(self.config, 'd_model', 0))
69
 
70
+ # --- KORREKTUR: Robuste Methode für num_layers ---
71
+ num_layers = 0
72
+ try:
73
+ # METHODE 1 (BESTE): Direkte Inspektion der Architektur des geladenen Modells.
74
+ # Dies ist die Ground Truth.
75
+ if hasattr(self.model, 'model') and hasattr(self.model.model, 'layers'):
76
+ num_layers = len(self.model.model.layers)
77
+ # Fallback für Architekturen, die die Layer anders benennen (z.B. model.transformer.h)
78
+ elif hasattr(self.model, 'transformer') and hasattr(self.model.transformer, 'h'):
79
+ num_layers = len(self.model.transformer.h)
80
+ except (AttributeError, TypeError):
81
+ # Wenn die direkte Inspektion fehlschlägt, was unwahrscheinlich ist,
82
+ # fahre mit der alten Methode fort.
83
+ pass
84
+
85
+ if num_layers == 0:
86
+ # METHODE 2 (FALLBACK): Inspektion der deklarativen Config-Datei.
87
+ # Dies ist weniger robust, aber ein guter zweiter Versuch.
88
+ num_layers = getattr(self.config, 'num_hidden_layers', getattr(self.config, 'num_layers', 0))
89
+
90
+ # Finale Assertions zur Sicherstellung der wissenschaftlichen Validität
91
  assert hidden_dim > 0, "Could not determine hidden dimension from model config."
92
  assert num_layers > 0, "Could not determine number of layers from model config."
93