Download geppo_runtime/model.py from grokked-it/geppo: direct link, hf CLI and curl.
- Browser
- Download file 2.35 kB
-
https://huggingface.co/grokked-it/geppo/resolve/main/geppo_runtime/model.py
- Command line
-
hf download hf://grokked-it/geppo/geppo_runtime/model.py
-
curl -L -o model.py https://huggingface.co/grokked-it/geppo/resolve/main/geppo_runtime/model.py
2.35 kB
| """Load the pinned ONNX tensors into the same frozen Torch backbone used in evaluation.""" | |
| import json | |
| from pathlib import Path | |
| import numpy as np | |
| import onnx | |
| import torch | |
| from onnx import numpy_helper | |
| from transformers import LlamaConfig, LlamaModel | |
| from transformers.models.llama.modeling_llama import LlamaRotaryEmbedding | |
| from .core import projection_weights | |
| def load_backbone(root: Path, device: str) -> LlamaModel: | |
| source = json.loads((root / "config.json").read_text()) | |
| graph = onnx.load(root / "emma6.onnx", load_external_data=False) | |
| tensors = {} | |
| for tensor in graph.graph.initializer: | |
| if tensor.data_type != onnx.TensorProto.FLOAT: | |
| continue | |
| data = {entry.key: entry.value for entry in tensor.external_data} | |
| if data: | |
| array = np.memmap(root / data["location"], dtype=np.float32, mode="c", | |
| offset=int(data.get("offset", 0)), shape=tuple(tensor.dims)) | |
| else: | |
| array = numpy_helper.to_array(tensor).copy() | |
| tensors[tensor.name] = torch.from_numpy(array) | |
| config = LlamaConfig( | |
| vocab_size=source["vocab_size"], hidden_size=source["hidden_size"], | |
| intermediate_size=source["intermediate_size"], num_hidden_layers=source["num_hidden_layers"], | |
| num_attention_heads=source["num_attention_heads"], num_key_value_heads=source["num_kv_heads"], | |
| max_position_embeddings=source["context_length"], rms_norm_eps=1e-6, | |
| rope_parameters={"rope_type": "default", "rope_theta": source["rope_theta"]}, | |
| attention_bias=False, mlp_bias=False, use_cache=False, pad_token_id=0, | |
| bos_token_id=2, eos_token_id=3, | |
| ) | |
| config._attn_implementation = "sdpa" | |
| with torch.device("meta"): | |
| model = LlamaModel(config) | |
| state = projection_weights(graph, tensors) | |
| state.update({"embed_tokens.weight": tensors["token_emb.weight"], "norm.weight": tensors["norm_f.weight"]}) | |
| for i in range(config.num_hidden_layers): | |
| state[f"layers.{i}.input_layernorm.weight"] = tensors[f"blocks.{i}.norm1.weight"] | |
| state[f"layers.{i}.post_attention_layernorm.weight"] = tensors[f"blocks.{i}.norm2.weight"] | |
| model.load_state_dict(state, strict=True, assign=True) | |
| model.rotary_emb = LlamaRotaryEmbedding(config) | |
| return model.eval().requires_grad_(False).to(device) | |