commit cf8d0b905d6ebc5e6f6d17fff352167fc7bf1e5d Author: ModelHub XC Date: Tue Jun 30 10:56:15 2026 +0800 初始化项目,由ModelHub XC社区提供模型 Model: Lauarvik/NVIDIA-Nemotron-Nano-9B-v2-GGUF Source: Original Platform diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ab096b4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,42 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +NVIDIA-Nemotron-Nano-9B-v2-bf16.gguf filter=lfs diff=lfs merge=lfs -text +NVIDIA-Nemotron-Nano-9B-v2-BF16.gguf filter=lfs diff=lfs merge=lfs -text +NVIDIA-Nemotron-Nano-9B-v2-Q8_0.gguf filter=lfs diff=lfs merge=lfs -text +NVIDIA-Nemotron-Nano-9B-v2-Q6_K.gguf filter=lfs diff=lfs merge=lfs -text +NVIDIA-Nemotron-Nano-9B-v2-Q4_K_M.gguf filter=lfs diff=lfs merge=lfs -text +NVIDIA-Nemotron-Nano-9B-v2-IQ2_M.gguf filter=lfs diff=lfs merge=lfs -text +NVIDIA-Nemotron-Nano-9B-v2-Q3_K_M.gguf filter=lfs diff=lfs merge=lfs -text diff --git a/NVIDIA-Nemotron-Nano-9B-v2-BF16.gguf b/NVIDIA-Nemotron-Nano-9B-v2-BF16.gguf new file mode 100644 index 0000000..a12a88b --- /dev/null +++ b/NVIDIA-Nemotron-Nano-9B-v2-BF16.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a24d24e085a89ecde73ae09af660a8e3d4c5a125c4a6bf3cae11e4a0b3c6c839 +size 17788743520 diff --git a/NVIDIA-Nemotron-Nano-9B-v2-IQ2_M.gguf b/NVIDIA-Nemotron-Nano-9B-v2-IQ2_M.gguf new file mode 100644 index 0000000..c9ae33f --- /dev/null +++ b/NVIDIA-Nemotron-Nano-9B-v2-IQ2_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e63ebd0dcfb5787f80206852a1fb24f71a92e750aa4c8fa49d0efa7d18951e49 +size 4996515936 diff --git a/NVIDIA-Nemotron-Nano-9B-v2-Q3_K_M.gguf b/NVIDIA-Nemotron-Nano-9B-v2-Q3_K_M.gguf new file mode 100644 index 0000000..822a41c --- /dev/null +++ b/NVIDIA-Nemotron-Nano-9B-v2-Q3_K_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87ba591eab9d858b7fc4acf69b43c32692578f3d233097e227ee71cd5f43d2e3 +size 5379735136 diff --git a/NVIDIA-Nemotron-Nano-9B-v2-Q4_K_M.gguf b/NVIDIA-Nemotron-Nano-9B-v2-Q4_K_M.gguf new file mode 100644 index 0000000..c22ec26 --- /dev/null +++ b/NVIDIA-Nemotron-Nano-9B-v2-Q4_K_M.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:587c9fdb346f50f948ec41e676debc5c9f13148498783c644077215084421e38 +size 6525629536 diff --git a/NVIDIA-Nemotron-Nano-9B-v2-Q6_K.gguf b/NVIDIA-Nemotron-Nano-9B-v2-Q6_K.gguf new file mode 100644 index 0000000..a7dcedb --- /dev/null +++ b/NVIDIA-Nemotron-Nano-9B-v2-Q6_K.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63fb3a4c8e78fa20bdff73b81a5c13e8e27d5c46a9f04afd4029cb1c9880d156 +size 9135892320 diff --git a/NVIDIA-Nemotron-Nano-9B-v2-Q8_0.gguf b/NVIDIA-Nemotron-Nano-9B-v2-Q8_0.gguf new file mode 100644 index 0000000..aec818e --- /dev/null +++ b/NVIDIA-Nemotron-Nano-9B-v2-Q8_0.gguf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6f8879a077de9ae0c15308d1feae5e363b741a1752e974a867e4d44f6fa25fb +size 9458093920 diff --git a/README.md b/README.md new file mode 100644 index 0000000..0338d69 --- /dev/null +++ b/README.md @@ -0,0 +1,185 @@ +--- +base_model: +- nvidia/NVIDIA-Nemotron-Nano-9B-v2 +--- +Quantized version of [nvidia/NVIDIA-Nemotron-Nano-9B-v2](https://hf.co/nvidia/NVIDIA-Nemotron-Nano-9B-v2) + +При квантизации использовалась imatrix, корпус текстов для неё был создан следующим образом: +```python +import json +import re +import hashlib +import time +from datasets import load_dataset + +OUT_PATH = "calib_nemotron.jsonl" + +TARGET_SAMPLES = 7000 +CHUNK_SIZE = 900 +MIN_LEN = 300 +MAX_LEN = 3000 + +out = open(OUT_PATH, "w", encoding="utf-8") + +seen = set() +written = 0 + + +# ----------------------- +# SAFE LOAD +# ----------------------- +def safe_load(*args, **kwargs): + for i in range(5): + try: + return load_dataset(*args, **kwargs) + except Exception as e: + print("retry", i, e) + time.sleep(2) + raise RuntimeError("failed to load dataset") + + +# ----------------------- +# CLEAN +# ----------------------- +def clean_text(txt: str) -> str: + if not txt: + return "" + + txt = re.sub(r"<[^>]+>", " ", txt) + txt = re.sub(r"\s+", " ", txt).strip() + + if "\x00" in txt: + return "" + + return txt + + +# ----------------------- +# DEDUP +# ----------------------- +def is_duplicate(txt: str) -> bool: + h = hashlib.blake2b(txt.encode("utf-8"), digest_size=8).hexdigest() + if h in seen: + return True + seen.add(h) + return False + + +# ----------------------- +# CHUNK +# ----------------------- +def split_chunks(txt: str): + for i in range(0, len(txt), CHUNK_SIZE): + chunk = txt[i:i + CHUNK_SIZE] + if len(chunk) >= MIN_LEN: + yield chunk + + +# ----------------------- +# WRITE +# ----------------------- +def process_text(txt: str): + global written + + txt = clean_text(txt) + if not txt or len(txt) < MIN_LEN: + return + + chunks = split_chunks(txt) if len(txt) > MAX_LEN else [txt] + + for chunk in chunks: + if written >= TARGET_SAMPLES: + return + + if is_duplicate(chunk): + continue + + out.write(json.dumps({"text": chunk}, ensure_ascii=False) + "\n") + written += 1 + + +# ----------------------- +# CHAT +# ----------------------- +def handle_chat(ds, ratio): + global written + target = int(TARGET_SAMPLES * ratio) + start = written + + for x in ds: + if written - start >= target: + break + + conv = x.get("conversations") + if not conv: + continue + + txt = "\n".join( + f"{m.get('from','')}: {m.get('value','')}" + for m in conv if m.get("value") + ) + + process_text(txt) + + +# ----------------------- +# TEXT +# ----------------------- +def handle_text(ds, field, ratio): + global written + target = int(TARGET_SAMPLES * ratio) + start = written + + for x in ds: + if written - start >= target: + break + + process_text(x.get(field)) + + +# ----------------------- +# CODE +# ----------------------- +def handle_code(ds, lang, ratio): + global written + target = int(TARGET_SAMPLES * ratio) + start = written + + for x in ds: + if written - start >= target: + break + + if x.get("lang") == lang: + process_text(x.get("content")) + + +# ======================= +# DATASETS (ONLY SAFE ONES) +# ======================= + +print("chat...") +ds = safe_load("teknium/OpenHermes-2.5", split="train", streaming=True) +handle_chat(ds, 0.35) + +print("en text...") +ds = safe_load("wikitext", "wikitext-103-raw-v1", split="train", streaming=True) +handle_text(ds, "text", 0.25) + +print("ru fallback (wiki dump alternative)...") + +# безопасная замена RU: +ds = safe_load("wikimedia/wikipedia", "20231101.ru", split="train", streaming=True) +handle_text(ds, "text", 0.2) + +print("rust...") +ds = safe_load("bigcode/the-stack-smol", split="train", streaming=True) +handle_code(ds, "Rust", 0.1) + +print("python...") +ds = safe_load("bigcode/the-stack-smol", split="train", streaming=True) +handle_code(ds, "Python", 0.1) + +out.close() + +print("written:", written) +``` \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..532090f --- /dev/null +++ b/config.json @@ -0,0 +1,56 @@ +{ + "architectures": [ + "NemotronHForCausalLM" + ], + "attention_bias": false, + "attention_dropout": 0.0, + "auto_map": { + "AutoConfig": "configuration_nemotron_h.NemotronHConfig", + "AutoModelForCausalLM": "modeling_nemotron_h.NemotronHForCausalLM" + }, + "bos_token_id": 1, + "chunk_size": 128, + "conv_kernel": 4, + "eos_token_id": 12, + "head_dim": 128, + "hidden_dropout": 0.0, + "hidden_size": 4480, + "hybrid_override_pattern": "M-M-M-MM-M-M-M*-M-M-M*-M-M-M-M*-M-M-M-M*-M-MM-M-M-M-M-M-", + "initializer_range": 0.02, + "intermediate_size": 15680, + "layer_norm_epsilon": 1e-05, + "mamba_head_dim": 80, + "mamba_hidden_act": "silu", + "mamba_num_groups": 8, + "mamba_num_heads": 128, + "mamba_proj_bias": false, + "mamba_state_dim": 128, + "max_position_embeddings": 131072, + "mlp_bias": false, + "mlp_hidden_act": "relu2", + "model_type": "nemotron_h", + "n_groups": 8, + "num_attention_heads": 40, + "num_hidden_layers": 56, + "num_key_value_heads": 8, + "num_logits_to_keep": 1, + "num_query_groups": 8, + "pad_token_id": 0, + "rescale_prenorm_residual": true, + "residual_in_fp32": false, + "rms_norm_eps": 1e-05, + "sliding_window": null, + "ssm_state_size": 128, + "tie_word_embeddings": false, + "time_step_floor": 0.0001, + "time_step_max": 0.1, + "time_step_min": 0.001, + "time_step_rank": 256, + "torch_dtype": "bfloat16", + "transformers_version": "4.51.3", + "use_bias": false, + "use_cache": true, + "use_conv_bias": true, + "use_mamba_kernels": true, + "vocab_size": 131072 +}