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
|
| 53 |
|
| 54 |
-
#
|
| 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 =
|
| 71 |
-
|
| 72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
|