MikeChandler's picture
download
raw
21.5 kB
# ╔══════════════════════════════════════════════════════════════════════════╗
# ║ GGUF MTP Transplant — Google Colab single-cell edition ║
# ╚══════════════════════════════════════════════════════════════════════════╝
# ── 0. Install dependencies ─────────────────────────────────────────────────
import subprocess, sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q",
"gguf", "huggingface_hub", "hf_transfer"])
# ── 1. Configuration — only edit this block ─────────────────────────────────
WORKSPACE_DIR = "/content/gguf_workspace"
SOURCE_REPO = "mudler/Qwen3.6-35B-A3B-APEX-MTP-GGUF" # HF repo for MTP/donor model
SOURCE_FILENAME = "Qwen3.6-35B-A3B-APEX-MTP-Balanced.gguf" # filename inside SOURCE_REPO
TARGET_REPO = "LuffyTheFox/Qwen3.6-35B-A3B-Uncensored-Genesis-Hermes-V6-GGUF" # HF repo for base model
TARGET_FILENAME = "Hermes3.6-35B-A3B-Uncensored-Genesis-V6-APEX.gguf" # filename inside TARGET_REPO
SOURCE_PATH = f"{WORKSPACE_DIR}/{SOURCE_FILENAME}"
TARGET_PATH = f"{WORKSPACE_DIR}/{TARGET_FILENAME}"
MTP_PATH = f"{WORKSPACE_DIR}/35B-A3B-MTP.gguf"
OUTPUT_PATH = f"{WORKSPACE_DIR}/Qwen3.6-35B-A3B-Uncensored-Claude-Genesis-V3-MTP-APEX.gguf"
# ── 2. Imports ───────────────────────────────────────────────────────────────
import gc
import hashlib
import os
import struct
from pathlib import Path
import huggingface_hub
from google.colab import userdata
from huggingface_hub import hf_hub_download, login
from gguf import GGUFReader, GGUFValueType
# ── 3. Auth — Hugging Face login via Colab secret ────────────────────────────
print("Authenticating with Hugging Face...")
HF_TOKEN = userdata.get("HF_TOKEN")
if not HF_TOKEN:
raise RuntimeError("HF_TOKEN secret not found in Colab secrets.")
login(token=HF_TOKEN, add_to_git_credential=False)
print(" Logged in to Hugging Face")
# Enable fast transfers
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
Path(WORKSPACE_DIR).mkdir(parents=True, exist_ok=True)
# ── 4. Helper functions ───────────────────────────────────────────────────────
def get_field_value(reader: GGUFReader, key: str):
field = reader.get_field(key)
return field.contents() if field else None
def calculate_on_disk_sizes(tensors, file_size):
n = len(tensors)
sizes = []
for i in range(n):
if i < n - 1:
sizes.append(tensors[i + 1].data_offset - tensors[i].data_offset)
else:
sizes.append(file_size - tensors[i].data_offset)
return sizes
def write_kv_value(fout, kv_type, value):
if kv_type == GGUFValueType.STRING:
b = value.encode("utf-8")
fout.write(struct.pack("<Q", len(b))); fout.write(b)
elif kv_type in (GGUFValueType.UINT8, GGUFValueType.INT8, GGUFValueType.BOOL):
fout.write(struct.pack("<B", value))
elif kv_type in (GGUFValueType.UINT16, GGUFValueType.INT16):
fout.write(struct.pack("<H", value))
elif kv_type in (GGUFValueType.UINT32, GGUFValueType.INT32):
fout.write(struct.pack("<I", value))
elif kv_type == GGUFValueType.FLOAT32:
fout.write(struct.pack("<f", value))
elif kv_type in (GGUFValueType.UINT64, GGUFValueType.INT64):
fout.write(struct.pack("<Q", value))
elif kv_type == GGUFValueType.FLOAT64:
fout.write(struct.pack("<d", value))
def write_array_value(fout, sub_type, arr):
fout.write(struct.pack("<I", int(sub_type)))
fout.write(struct.pack("<Q", len(arr)))
for elem in arr:
if sub_type == GGUFValueType.STRING:
b = elem.encode("utf-8")
fout.write(struct.pack("<Q", len(b))); fout.write(b)
elif sub_type in (GGUFValueType.UINT8, GGUFValueType.INT8, GGUFValueType.BOOL):
fout.write(struct.pack("<B", elem))
elif sub_type in (GGUFValueType.UINT16, GGUFValueType.INT16):
fout.write(struct.pack("<H", elem))
elif sub_type in (GGUFValueType.UINT32, GGUFValueType.INT32):
fout.write(struct.pack("<I", elem))
elif sub_type == GGUFValueType.FLOAT32:
fout.write(struct.pack("<f", elem))
elif sub_type in (GGUFValueType.UINT64, GGUFValueType.INT64):
fout.write(struct.pack("<Q", elem))
elif sub_type == GGUFValueType.FLOAT64:
fout.write(struct.pack("<d", elem))
def _abort(msg):
raise RuntimeError(f"\n❌ {msg}")
def download_model(repo_id: str, filename: str, local_path: str, token: str):
"""Download a single GGUF file from HF into local_path using hf_transfer."""
print(f" Downloading {filename} from {repo_id} ...")
hf_hub_download(
repo_id=repo_id,
filename=filename,
local_dir=str(Path(local_path).parent),
token=token,
)
print(f" ✅ Saved to {local_path}")
def extract_mtp_tensors(source_path: str, mtp_path: str, alignment: int = 32):
"""
Read source_path, identify all Multi-Token Prediction tensors
(blk.N.* where N >= source_block_count - nextn_predict_layers),
and write them into a self-contained minimal GGUF at mtp_path.
"""
print(f"\nExtracting MTP tensors from: {source_path}")
reader = GGUFReader(source_path)
file_size = Path(source_path).stat().st_size
arch = get_field_value(reader, "general.architecture")
if arch is None:
_abort("Source GGUF has no general.architecture key")
blk_count = get_field_value(reader, f"{arch}.block_count")
nextn = get_field_value(reader, f"{arch}.nextn_predict_layers")
if nextn is None:
_abort("Source GGUF has no nextn_predict_layers key")
mtp_start = blk_count - nextn # first MTP block index
mtp_tensors = [
t for t in reader.tensors
if any(t.name.startswith(f"blk.{i}.") for i in range(mtp_start, blk_count))
]
if not mtp_tensors:
_abort(f"No MTP tensors found for blocks {mtp_start}..{blk_count - 1} in source")
print(f" Arch: {arch}, block_count: {blk_count}, nextn: {nextn}")
print(f" MTP block range: blk.{mtp_start} … blk.{blk_count - 1}")
print(f" MTP tensors found: {len(mtp_tensors)}")
on_disk_sizes = calculate_on_disk_sizes(reader.tensors, file_size)
tensor_size_map = {
t.name: (t, sz)
for t, sz in zip(reader.tensors, on_disk_sizes)
}
# KVs to embed: general.architecture, block_count, nextn_predict_layers
kv_pairs = [
("general.architecture", GGUFValueType.STRING, arch),
(f"{arch}.block_count", GGUFValueType.UINT32, blk_count),
(f"{arch}.nextn_predict_layers", GGUFValueType.UINT32, nextn),
]
kv_count = len(kv_pairs)
tensor_count = len(mtp_tensors)
with open(source_path, "rb") as fin, open(mtp_path, "wb") as fout:
# Header
fout.write(b"GGUF")
fout.write(struct.pack("<I", 3))
fout.write(struct.pack("<Q", tensor_count))
fout.write(struct.pack("<Q", kv_count))
# KVs
for key, kv_type, value in kv_pairs:
kb = key.encode("utf-8")
fout.write(struct.pack("<Q", len(kb))); fout.write(kb)
fout.write(struct.pack("<I", int(kv_type)))
write_kv_value(fout, kv_type, value)
# Tensor info — compute relative offsets first
current_offset = 0
tensor_offsets = []
for t in mtp_tensors:
tensor_offsets.append(current_offset)
_, sz = tensor_size_map[t.name]
current_offset += sz
for i, tensor in enumerate(mtp_tensors):
nb = tensor.name.encode("utf-8")
fout.write(struct.pack("<Q", len(nb))); fout.write(nb)
shape = tensor.shape.tolist()
fout.write(struct.pack("<I", len(shape)))
for dim in shape:
fout.write(struct.pack("<Q", dim))
fout.write(struct.pack("<I", int(tensor.tensor_type)))
fout.write(struct.pack("<Q", tensor_offsets[i]))
# Alignment padding
pos = fout.tell()
padding = (alignment - (pos % alignment)) % alignment
if padding:
fout.write(b"\x00" * padding)
# Tensor data
for tensor in mtp_tensors:
src_t, sz = tensor_size_map[tensor.name]
fin.seek(src_t.data_offset)
fout.write(fin.read(sz))
out_size = Path(mtp_path).stat().st_size
print(f" MTP tensors saved → {mtp_path} ({out_size / 1e6:.1f} MB)")
# ── 5. Download SOURCE model (skip if SOURCE already exists or MTP extracted) ─
if Path(MTP_PATH).exists():
print(f"MTP file already exists, skipping source download: {MTP_PATH}")
elif Path(SOURCE_PATH).exists():
print(f"Source model already on disk, skipping download: {SOURCE_PATH}")
else:
download_model(SOURCE_REPO, SOURCE_FILENAME, SOURCE_PATH, HF_TOKEN)
# ── 6. Extract MTP tensors → 35B-A3B-MTP.gguf ───────────────────────────────
if Path(MTP_PATH).exists():
print(f"MTP file already exists, skipping extraction: {MTP_PATH}")
else:
extract_mtp_tensors(SOURCE_PATH, MTP_PATH)
# ── 7. Delete source model from disk and free memory ────────────────────────
if Path(SOURCE_PATH).exists():
print(f"\nDeleting source model to free disk space: {SOURCE_PATH}")
Path(SOURCE_PATH).unlink()
print(" Source model deleted")
gc.collect()
print(" Memory freed")
# ── 8. Download TARGET model (skip if already on disk) ───────────────────────
if Path(TARGET_PATH).exists():
print(f"\nTarget model already on disk, skipping download: {TARGET_PATH}")
else:
download_model(TARGET_REPO, TARGET_FILENAME, TARGET_PATH, HF_TOKEN)
# ── 9. Open files (MTP as source, TARGET as base) ────────────────────────────
print(f"\nReading target : {TARGET_PATH}")
target_reader = GGUFReader(TARGET_PATH)
print(f"Reading MTP : {MTP_PATH}")
source_reader = GGUFReader(MTP_PATH)
target_file_size = Path(TARGET_PATH).stat().st_size
source_file_size = Path(MTP_PATH).stat().st_size
print(f" Target tensors : {len(target_reader.tensors)}, "
f"KVs : {len([k for k in target_reader.fields if not k.startswith('GGUF.')])}")
print(f" MTP tensors : {len(source_reader.tensors)}, "
f"KVs : {len([k for k in source_reader.fields if not k.startswith('GGUF.')])}")
# ── 10. Architecture + MTP metadata ──────────────────────────────────────────
arch = get_field_value(target_reader, "general.architecture")
if arch is None:
_abort("Target GGUF has no general.architecture key")
source_block_count = get_field_value(source_reader, f"{arch}.block_count")
source_nextn = get_field_value(source_reader, f"{arch}.nextn_predict_layers")
target_block_count = get_field_value(target_reader, f"{arch}.block_count")
if source_nextn is None:
_abort("MTP GGUF has no nextn_predict_layers key")
print(f"\n Arch : {arch}")
print(f" Target block_count: {target_block_count}")
print(f" Source block_count: {source_block_count}, nextn_predict_layers: {source_nextn}")
OVERRIDE_KEYS = {f"{arch}.block_count", f"{arch}.nextn_predict_layers"}
source_extra = [
t for t in source_reader.tensors
if t.name.startswith(f"blk.{target_block_count}.")
]
print(f"\n Extra tensors to transplant: {len(source_extra)}")
if not source_extra:
_abort(f"No tensors found with prefix 'blk.{target_block_count}.' in MTP file. "
f"Available prefixes: {sorted({t.name.split('.')[1] for t in source_reader.tensors})}")
# ── 11. Tensor lists + on-disk sizes ─────────────────────────────────────────
all_tensors = list(target_reader.tensors) + source_extra
target_on_disk_sizes = calculate_on_disk_sizes(target_reader.tensors, target_file_size)
source_on_disk_sizes = calculate_on_disk_sizes(source_reader.tensors, source_file_size)
source_tensor_map = {
t.name: (t, sz)
for t, sz in zip(source_reader.tensors, source_on_disk_sizes)
}
# ── 12. KV count ──────────────────────────────────────────────────────────────
kv_count = len([k for k in target_reader.fields if not k.startswith("GGUF.")])
if f"{arch}.nextn_predict_layers" not in target_reader.fields:
kv_count += 1
for key in source_reader.fields:
if (
not key.startswith("GGUF.")
and key not in target_reader.fields
and key not in OVERRIDE_KEYS
):
kv_count += 1
# ── 13. Write output ──────────────────────────────────────────────────────────
print(f"\nWriting output : {OUTPUT_PATH}")
with (
open(TARGET_PATH, "rb") as target_fin,
open(MTP_PATH, "rb") as source_fin,
open(OUTPUT_PATH, "wb") as fout,
):
# Header
fout.write(b"GGUF")
fout.write(struct.pack("<I", 3))
fout.write(struct.pack("<Q", len(all_tensors)))
fout.write(struct.pack("<Q", kv_count))
written_keys = set()
# ── 13a. Target KVs (skip overridden keys) ──────────────────────
for key, field in target_reader.fields.items():
if key.startswith("GGUF.") or key in OVERRIDE_KEYS:
continue
key_bytes = key.encode("utf-8")
fout.write(struct.pack("<Q", len(key_bytes))); fout.write(key_bytes)
kv_type = field.types[0]
fout.write(struct.pack("<I", int(kv_type)))
if kv_type == GGUFValueType.ARRAY:
sub_type = field.types[1] if len(field.types) > 1 else GGUFValueType.FLOAT32
write_array_value(fout, sub_type, field.contents())
else:
write_kv_value(fout, kv_type, field.contents())
written_keys.add(key)
# ── 13b. Overridden keys — always written from source ───────────
for key, value in [
(f"{arch}.block_count", source_block_count),
(f"{arch}.nextn_predict_layers", source_nextn),
]:
key_bytes = key.encode("utf-8")
fout.write(struct.pack("<Q", len(key_bytes))); fout.write(key_bytes)
fout.write(struct.pack("<I", int(GGUFValueType.UINT32)))
fout.write(struct.pack("<I", value))
written_keys.add(key)
# ── 13c. Source-only KVs ────────────────────────────────────────
for key, field in source_reader.fields.items():
if key.startswith("GGUF.") or key in written_keys:
continue
key_bytes = key.encode("utf-8")
fout.write(struct.pack("<Q", len(key_bytes))); fout.write(key_bytes)
kv_type = field.types[0]
fout.write(struct.pack("<I", int(kv_type)))
if kv_type == GGUFValueType.ARRAY:
sub_type = field.types[1] if len(field.types) > 1 else GGUFValueType.FLOAT32
write_array_value(fout, sub_type, field.contents())
else:
write_kv_value(fout, kv_type, field.contents())
# ── 13d. Tensor info ────────────────────────────────────────────
current_offset = 0
tensor_offsets = []
for i, tensor in enumerate(all_tensors):
size = (target_on_disk_sizes[i] if i < len(target_reader.tensors)
else source_tensor_map[tensor.name][1])
tensor_offsets.append(current_offset)
current_offset += size
for i, tensor in enumerate(all_tensors):
name_bytes = tensor.name.encode("utf-8")
fout.write(struct.pack("<Q", len(name_bytes))); fout.write(name_bytes)
shape = tensor.shape.tolist()
fout.write(struct.pack("<I", len(shape)))
for dim in shape:
fout.write(struct.pack("<Q", dim))
fout.write(struct.pack("<I", int(tensor.tensor_type)))
fout.write(struct.pack("<Q", tensor_offsets[i]))
# ── 13e. Alignment padding ──────────────────────────────────────
alignment = get_field_value(target_reader, "general.alignment") or 32
current_pos = fout.tell()
padding = (alignment - (current_pos % alignment)) % alignment
if padding:
fout.write(b"\x00" * padding)
# ── 13f. Tensor data ────────────────────────────────────────────
print(f"Copying {len(all_tensors)} tensors...")
for i, tensor in enumerate(all_tensors):
if i < len(target_reader.tensors):
offset = target_reader.tensors[i].data_offset
size = target_on_disk_sizes[i]
fin = target_fin
else:
src_tensor, size = source_tensor_map[tensor.name]
offset = src_tensor.data_offset
fin = source_fin
fin.seek(offset)
fout.write(fin.read(size))
if (i + 1) % 50 == 0 or i == len(all_tensors) - 1:
print(f" Copied {i + 1}/{len(all_tensors)} tensors")
# ── 14. Verify ────────────────────────────────────────────────────────────────
output_size = Path(OUTPUT_PATH).stat().st_size
print(f"\nOutput : {OUTPUT_PATH}")
print(f" Size : {output_size / 1_000_000_000:.2f} GB")
print(f" Tensors: {len(all_tensors)}")
print("\nValidating output...")
errors = []
try:
out_reader = GGUFReader(OUTPUT_PATH)
out_block_count = get_field_value(out_reader, f"{arch}.block_count")
if out_block_count != source_block_count:
errors.append(f"block_count: expected {source_block_count}, got {out_block_count}")
out_nextn = get_field_value(out_reader, f"{arch}.nextn_predict_layers")
if out_nextn != source_nextn:
errors.append(f"nextn_predict_layers: expected {source_nextn}, got {out_nextn}")
out_tensor_names = {t.name for t in out_reader.tensors}
for tensor in source_extra:
if tensor.name not in out_tensor_names:
errors.append(f"Missing tensor: {tensor.name}")
print(" Spot-checking tensor data integrity...")
out_tensors = {t.name: t for t in out_reader.tensors}
for name in ["token_embd.weight"]:
if name in out_tensors and name in {t.name for t in target_reader.tensors}:
target_t = next((t for t in target_reader.tensors if t.name == name), None)
out_t = out_tensors.get(name)
if target_t and out_t:
th = hashlib.sha256(target_t.data.tobytes()).hexdigest()[:16]
oh = hashlib.sha256(out_t.data.tobytes()).hexdigest()[:16]
if th == oh:
print(f" {name}: OK ({oh})")
else:
errors.append(f"Data mismatch: {name}")
if source_extra:
extra_name = source_extra[0].name
source_t = source_tensor_map[extra_name][0]
out_t = out_tensors.get(extra_name)
if out_t:
sh = hashlib.sha256(source_t.data.tobytes()).hexdigest()[:16]
oh = hashlib.sha256(out_t.data.tobytes()).hexdigest()[:16]
if sh == oh:
print(f" {extra_name}: OK ({oh})")
else:
errors.append(f"Data mismatch: {extra_name}")
except Exception as e:
errors.append(f"Failed to read output: {e}")
if errors:
print("\n VALIDATION FAILED:")
for err in errors:
print(f" - {err}")
raise RuntimeError("Validation failed — see errors above.")
else:
print(" All checks passed")
print(f"\nDone. Output: {OUTPUT_PATH}")

Xet Storage Details

Size:
21.5 kB
·
Xet hash:
6b31b10f3a422d30fe8e5599d14e4262f3a0c2f933d4807b874ea2cc7b062618

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.