### 🔀 [#377](https://github.com/ikawrakow/ik_llama.cpp/pull/377) - Support for Llama-3-Nemotron models | **Author** | `saood06` | | :--- | :--- | | **State** | ❌ **Closed** | | **Created** | 2025-05-04 | | **Updated** | 2025-05-09 | --- #### Description Port of https://github.com/ggml-org/llama.cpp/pull/10669 It compiles, have not tested yet. Testers welcome, but will try to test myself later. --- #### 💬 Conversation 👤 **saood06** commented the **2025-05-04** at **12:31:11**:
I downloaded the source model and was able to convert it with `convert_hf_to_gguf.py` but I hit an error when attempting to quantize it. `llama.cpp:19268: GGML_ASSERT((qs.n_attention_wv == 0 || qs.n_attention_wv == (int)model.hparams.n_layer || qs.n_attention_wv == 3 * (int)model.hparams.n_layer) && "n_attention_wv is unexpected") failed` --- 👤 **ikawrakow** commented the **2025-05-04** at **12:38:47**:
Well, you see what `n_attention_wv` is and add another rule for accepting it. This is because of the layers that don't have the usual attention mechanism, I guess. --- 👤 **saood06** commented the **2025-05-04** at **13:02:38**:
It's quantizing now. --- 👤 **ikawrakow** commented the **2025-05-04** at **13:10:46**:
Apart from the 253B version that is beyond my reach, this will add support for this model: https://huggingface.co/nvidia/Llama-3_1-Nemotron-51B-Instruct ? What about https://huggingface.co/nvidia/Llama-3_3-Nemotron-Super-49B-v1 which seems more recent? --- 👤 **saood06** commented the **2025-05-04** at **13:14:52**:
> Apart from the 253B version that is beyond my reach Support for that is not added yet, that one is missing https://github.com/ggml-org/llama.cpp/pull/12843 > this will add support for this model: https://huggingface.co/nvidia/Llama-3_1-Nemotron-51B-Instruct ? That is the one I am testing with right now. > What about https://huggingface.co/nvidia/Llama-3_3-Nemotron-Super-49B-v1 which seems more recent? That one should work (maybe the convert python might not?) but you may need to add the n_attention_wv value if it is different. --- 👤 **saood06** commented the **2025-05-04** at **13:18:16**:
It is coherent in the cli. Will sweep-bench it later. --- 👤 **ikawrakow** submitted a review the **2025-05-04** at **14:02:57**: 💬 `COMMENTED` --- 👤 **ikawrakow** commented the **2025-05-04** at **14:05:15**:
I get this error when I try to run the [49B model](https://huggingface.co/nvidia/Llama-3_3-Nemotron-Super-49B-v1) (after adjusting the `n_attention_vw` check): ``` llama_model_load: error loading model: error loading model vocabulary: cannot find tokenizer merges in model file ``` --- 👤 **ikawrakow** commented the **2025-05-04** at **14:16:43**:
Works if I convert with mainline, so something is missing in the conversion script. --- 👤 **saood06** submitted a review the **2025-05-04** at **14:19:07**: 💬 `COMMENTED` --- 👤 **saood06** commented during a code review the **2025-05-04** at **14:19:07** on `src/llama.cpp`:
Sorry I didn't notice these. They are in the original PR as well (which I cherry-picked as it was from when they hadn't diverged too much), I'll take them out. Right now I'm working on the larger model as that can't be cherry-picked --- 👤 **saood06** commented the **2025-05-04** at **14:19:52**:
> Works if I convert with mainline, so something is missing in the conversion script. Thanks for testing that, I'll look into the script. --- 👤 **saood06** commented the **2025-05-04** at **15:23:42**:
@Lissanro Can you try Llama-3_1-Nemotron-Ultra-253B now, the n_attention_vw check may be broken but everything else I think should be fine. --- 👤 **ikawrakow** commented the **2025-05-04** at **15:29:05**:
> the n_attention_vw check may be broken but everything else I think should be fine. Oh, I forgot to comment on that one. I solved it for the 49B model by simply accepting `n_attention_vw` if `model.arch == LLM_ARCH_DECI`. In that way we don't need to adjust that check for every variation they may come up with. --- 👤 **saood06** commented the **2025-05-04** at **15:41:08**:
@ikawrakow Can you test the conversion again? This is good to review again, I'm done pushing changes. --- 👤 **ikawrakow** commented the **2025-05-04** at **15:48:16**:
I'm running something on the computer where I downloaded the model. I'll test in a bit when the run finishes. --- 👤 **saood06** commented the **2025-05-04** at **15:52:22**:
>I'll test in a bit when the run finishes. Take your time, I'm heading off for now anyways. --- 👤 **Panchovix** commented the **2025-05-04** at **19:39:28**:
Thanks for the work! I'm trying L3 Nemotron 253B Q3_K_XL from unsloth (https://huggingface.co/unsloth/Llama-3_1-Nemotron-Ultra-253B-v1-GGUF/tree/main/UD-Q3_K_XL), here how is the log looks ``` pancho@fedora:/run/media/pancho/6AE20D1AE20CEBDF/ChatIAs/ik_llama.cpp/build_linux/bin$ ./llama-server -m /run/media/pancho/08329F4A329F3B9E/models_llm/Llama-3_1-Nemotron-Ultra-253B-v1-UD-Q3_K_XL-00001-of-00003.gguf -c 12228 -ngl 163 -ts 6.5,6,10,4 --no-warmup -fa -ctk q8_0 -ctv q4_0 -mg 2 INFO [ main] build info | tid="139738867924992" timestamp=1746386578 build=3671 commit="0e001215" INFO [ main] system info | tid="139738867924992" timestamp=1746386578 n_threads=8 n_threads_batch=-1 total_threads=16 system_info="AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | AVX512_BF16 = 1 | FMA = 1 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 1 | " llama_model_loader: additional 2 GGUFs metadata loaded. llama_model_loader: loaded meta data with 43 key-value pairs and 648 tensors from /run/media/pancho/08329F4A329F3B9E/models_llm/Llama-3_1-Nemotron-Ultra-253B-v1-UD-Q3_K_XL-00001-of-00003.gguf (version GGUF V3 (latest)) llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output. llama_model_loader: - kv 0: general.architecture str = deci llama_model_loader: - kv 1: general.type str = model llama_model_loader: - kv 2: general.name str = Llama_Nemotron_Ultra llama_model_loader: - kv 3: general.version str = v1 llama_model_loader: - kv 4: general.finetune str = 3_1-Nemotron-Ultra llama_model_loader: - kv 5: general.basename str = Llama-3_1-Nemotron-Ultra-253B-V1 llama_model_loader: - kv 6: general.quantized_by str = Unsloth llama_model_loader: - kv 7: general.size_label str = 253B llama_model_loader: - kv 8: general.license str = other llama_model_loader: - kv 9: general.license.name str = nvidia-open-model-license llama_model_loader: - kv 10: general.license.link str = https://www.nvidia.com/en-us/agreemen... llama_model_loader: - kv 11: general.repo_url str = https://huggingface.co/unsloth llama_model_loader: - kv 12: general.tags arr[str,4] = ["nvidia", "llama-3", "pytorch", "tex... llama_model_loader: - kv 13: general.languages arr[str,1] = ["en"] llama_model_loader: - kv 14: deci.rope.freq_base f32 = 500000.000000 llama_model_loader: - kv 15: deci.attention.head_count_kv arr[i32,162] = [8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, ... llama_model_loader: - kv 16: deci.attention.head_count arr[i32,162] = [128, 128, 128, 128, 128, 128, 128, 1... llama_model_loader: - kv 17: deci.feed_forward_length arr[i32,162] = [5376, 10752, 16128, 16128, 16128, 16... llama_model_loader: - kv 18: deci.block_count u32 = 162 llama_model_loader: - kv 19: deci.context_length u32 = 131072 llama_model_loader: - kv 20: deci.embedding_length u32 = 16384 llama_model_loader: - kv 21: deci.attention.layer_norm_rms_epsilon f32 = 0.000010 llama_model_loader: - kv 22: deci.attention.key_length u32 = 128 llama_model_loader: - kv 23: deci.attention.value_length u32 = 128 llama_model_loader: - kv 24: deci.vocab_size u32 = 128256 llama_model_loader: - kv 25: deci.rope.dimension_count u32 = 128 llama_model_loader: - kv 26: tokenizer.ggml.model str = gpt2 llama_model_loader: - kv 27: tokenizer.ggml.pre str = llama-bpe llama_model_loader: - kv 28: tokenizer.ggml.tokens arr[str,128256] = ["!", "\"", "#", "$", "%", "&", "'", ... llama_model_loader: - kv 29: tokenizer.ggml.token_type arr[i32,128256] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... llama_model_loader: - kv 30: tokenizer.ggml.merges arr[str,280147] = ["Ġ Ġ", "Ġ ĠĠĠ", "ĠĠ ĠĠ", "... llama_model_loader: - kv 31: tokenizer.ggml.bos_token_id u32 = 128000 llama_model_loader: - kv 32: tokenizer.ggml.eos_token_id u32 = 128009 llama_model_loader: - kv 33: tokenizer.chat_template str = {{- bos_token }}{%- if messages[0]['r... llama_model_loader: - kv 34: general.quantization_version u32 = 2 llama_model_loader: - kv 35: general.file_type u32 = 12 llama_model_loader: - kv 36: quantize.imatrix.file str = Llama-3_1-Nemotron-Ultra-253B-v1-GGUF... llama_model_loader: - kv 37: quantize.imatrix.dataset str = unsloth_calibration_Llama-3_1-Nemotro... llama_model_loader: - kv 38: quantize.imatrix.entries_count i32 = 499 llama_model_loader: - kv 39: quantize.imatrix.chunks_count i32 = 544 llama_model_loader: - kv 40: split.no u16 = 0 llama_model_loader: - kv 41: split.tensors.count i32 = 648 llama_model_loader: - kv 42: split.count u16 = 3 llama_model_loader: - type f32: 147 tensors llama_model_loader: - type q3_K: 162 tensors llama_model_loader: - type q4_K: 326 tensors llama_model_loader: - type q5_K: 13 tensors llm_load_vocab: special tokens cache size = 256 llm_load_vocab: token to piece cache size = 0.7999 MB llm_load_print_meta: format = GGUF V3 (latest) llm_load_print_meta: arch = deci llm_load_print_meta: vocab type = BPE llm_load_print_meta: n_vocab = 128256 llm_load_print_meta: n_merges = 280147 llm_load_print_meta: vocab_only = 0 llm_load_print_meta: n_ctx_train = 131072 llm_load_print_meta: n_embd = 16384 llm_load_print_meta: n_layer = 162 llm_load_print_meta: n_head = [128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 0, 0, 0, 128, 128, 128, 0, 128, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 128, 128, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128] llm_load_print_meta: n_head_kv = [8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 8, 8, 8, 0, 8, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 8, 8, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 8, 8, 8, 8, 8, 8, 8, 8] llm_load_print_meta: n_rot = 128 llm_load_print_meta: n_swa = 0 llm_load_print_meta: n_swa_pattern = 1 llm_load_print_meta: n_embd_head_k = 128 llm_load_print_meta: n_embd_head_v = 128 llm_load_print_meta: n_gqa = [16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 16, 16, 16, 0, 16, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 16, 16, 16, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 16, 16, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16] llm_load_print_meta: n_embd_k_gqa = [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 0, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 1024, 1024, 1024, 0, 1024, 0, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 0, 0, 0, 0, 0, 1024, 1024, 0, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 1024, 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024] llm_load_print_meta: n_embd_v_gqa = [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 0, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 1024, 1024, 1024, 0, 1024, 0, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 0, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 1024, 1024, 1024, 1024, 0, 0, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 0, 0, 0, 0, 0, 1024, 1024, 0, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 1024, 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024] llm_load_print_meta: f_norm_eps = 0.0e+00 llm_load_print_meta: f_norm_rms_eps = 1.0e-05 llm_load_print_meta: f_clamp_kqv = 0.0e+00 llm_load_print_meta: f_max_alibi_bias = 0.0e+00 llm_load_print_meta: f_logit_scale = 0.0e+00 llm_load_print_meta: n_ff = [5376, 10752, 16128, 16128, 16128, 16128, 16128, 16128, 21504, 0, 0, 0, 0, 21504, 21504, 21504, 53248, 53248, 0, 0, 0, 0, 0, 0, 53248, 53248, 53248, 0, 0, 0, 0, 0, 53248, 53248, 53248, 26624, 0, 0, 0, 21504, 21504, 21504, 21504, 53248, 53248, 0, 0, 0, 0, 0, 53248, 53248, 53248, 53248, 0, 0, 0, 0, 0, 53248, 53248, 53248, 53248, 0, 0, 0, 0, 0, 53248, 53248, 53248, 53248, 0, 0, 0, 0, 0, 53248, 53248, 53248, 53248, 0, 0, 0, 0, 0, 53248, 37376, 37376, 37376, 0, 0, 32000, 26624, 26624, 26624, 26624, 26624, 26624, 0, 26624, 26624, 26624, 26624, 26624, 26624, 26624, 26624, 0, 0, 0, 0, 0, 32000, 53248, 53248, 53248, 0, 0, 0, 0, 0, 0, 0, 0, 399360, 0, 0, 0, 0, 0, 0, 0, 0, 425984, 0, 0, 0, 0, 0, 0, 0, 0, 343040, 0, 0, 0, 0, 0, 301056, 21504, 21504, 26624, 0, 26624, 26624, 37376, 53248, 53248, 53248, 53248, 26624] llm_load_print_meta: n_expert = 0 llm_load_print_meta: n_expert_used = 0 llm_load_print_meta: causal attn = 1 llm_load_print_meta: pooling type = 0 llm_load_print_meta: rope type = 0 llm_load_print_meta: rope scaling = linear llm_load_print_meta: freq_base_train = 500000.0 llm_load_print_meta: freq_scale_train = 1 llm_load_print_meta: n_ctx_orig_yarn = 131072 llm_load_print_meta: rope_finetuned = unknown llm_load_print_meta: ssm_d_conv = 0 llm_load_print_meta: ssm_d_inner = 0 llm_load_print_meta: ssm_d_state = 0 llm_load_print_meta: ssm_dt_rank = 0 llm_load_print_meta: model type = 405B llm_load_print_meta: model ftype = Q3_K - Medium llm_load_print_meta: model params = 253.401 B llm_load_print_meta: model size = 115.764 GiB (3.924 BPW) llm_load_print_meta: repeating layers = 113.318 GiB (3.906 BPW, 249.199 B parameters) llm_load_print_meta: general.name = Llama_Nemotron_Ultra llm_load_print_meta: BOS token = 128000 '<|begin_of_text|>' llm_load_print_meta: EOS token = 128009 '<|eot_id|>' llm_load_print_meta: LF token = 128 'Ä' llm_load_print_meta: EOT token = 128009 '<|eot_id|>' llm_load_print_meta: max token length = 256 ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no ggml_cuda_init: found 4 CUDA devices: Device 0: NVIDIA GeForce RTX 4090, compute capability 8.9, VMM: yes Device 1: NVIDIA GeForce RTX 4090, compute capability 8.9, VMM: yes Device 2: NVIDIA RTX A6000, compute capability 8.6, VMM: yes Device 3: NVIDIA GeForce RTX 5090, compute capability 12.0, VMM: yes llm_load_tensors: ggml ctx size = 1.99 MiB llm_load_tensors: offloading 162 repeating layers to GPU llm_load_tensors: offloading non-repeating layers to GPU llm_load_tensors: offloaded 163/163 layers to GPU llm_load_tensors: CPU buffer size = 1127.25 MiB llm_load_tensors: CUDA0 buffer size = 21995.70 MiB llm_load_tensors: CUDA1 buffer size = 22587.26 MiB llm_load_tensors: CUDA2 buffer size = 45199.39 MiB llm_load_tensors: CUDA3 buffer size = 27632.88 MiB ..................................................................................... llama_new_context_with_model: n_ctx = 12288 llama_new_context_with_model: n_batch = 2048 llama_new_context_with_model: n_ubatch = 512 llama_new_context_with_model: flash_attn = 1 llama_new_context_with_model: mla_attn = 0 llama_new_context_with_model: attn_max_b = 0 llama_new_context_with_model: fused_moe = 0 llama_new_context_with_model: ser = -1, 0 llama_new_context_with_model: freq_base = 500000.0 llama_new_context_with_model: freq_scale = 1 llama_kv_cache_init: CUDA0 KV buffer size = 429.02 MiB llama_kv_cache_init: CUDA1 KV buffer size = 292.52 MiB llama_kv_cache_init: CUDA2 KV buffer size = 331.53 MiB llama_kv_cache_init: CUDA3 KV buffer size = 195.01 MiB llama_new_context_with_model: KV self size = 1248.00 MiB, K (q8_0): 816.00 MiB, V (q4_0): 432.00 MiB llama_new_context_with_model: CUDA_Host output buffer size = 0.98 MiB llama_new_context_with_model: pipeline parallelism enabled (n_copies=1) llama_new_context_with_model: CUDA0 compute buffer size = 412.00 MiB llama_new_context_with_model: CUDA1 compute buffer size = 420.00 MiB llama_new_context_with_model: CUDA2 compute buffer size = 2560.00 MiB llama_new_context_with_model: CUDA3 compute buffer size = 2086.00 MiB llama_new_context_with_model: CUDA_Host compute buffer size = 56.01 MiB llama_new_context_with_model: graph nodes = 1708 llama_new_context_with_model: graph splits = 5 INFO [ init] initializing slots | tid="139738867924992" timestamp=1746386887 n_slots=1 INFO [ init] new slot | tid="139738867924992" timestamp=1746386887 id_slot=0 n_ctx_slot=12288 INFO [ main] model loaded | tid="139738867924992" timestamp=1746386887 INFO [ main] chat template | tid="139738867924992" timestamp=1746386887 chat_example="<|start_header_id|>system<|end_header_id|>\n\nYou are a helpful assistant<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHello<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nHi there<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHow are you?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" built_in=true INFO [ main] HTTP server listening | tid="139738867924992" timestamp=1746386887 n_threads_http="15" port="8080" hostname="127.0.0.1" INFO [ update_slots] all slots are idle | tid="139738867924992" timestamp=1746386887 ``` And it seems to work without issues ![image](https://github.com/user-attachments/assets/7c8f4a1b-1b05-4af8-99c4-736238fe9bad) Not sure if there's a flag that could improve things for dense models. Also not exactly sure how to enable thinking, but maybe that depends of the UI when using it via API. --- 👤 **ikawrakow** commented the **2025-05-05** at **06:58:29**:
With the commit that I just pushed `convert_hf_to_gguf.py` now converts the [Nemotron-Super-49B](https://huggingface.co/nvidia/Llama-3_3-Nemotron-Super-49B-v1) model correctly. But then I see a difference in PPL. I didn't run the `bf16` model directly (comes dangerously close to the total RAM I have), but using `Q8_0` quantization. I arrive at a lower PPL using the HF->GGUF conversion script in this PR compared to using mainline conversion: * `PPL = 7.0801` using mainline HF->GGUF * `PPL = `7.0347` using this PR HF->GGUF Quantization is done in exactly the same way, I'm running with exact same parameters on the same hardware, so something else is different in the converted `bf16` models (and just simple `diff` tells me that the files differ). --- 👤 **ikawrakow** submitted a review the **2025-05-05** at **13:14:51**: ✅ `APPROVED`
From my perspective this is ready to merge. Just waiting for @Lissanro to confirm that it is working for them. --- 👤 **Lissanro** commented the **2025-05-05** at **15:18:43**:
I tried at first using this command: ``` ~/pkgs/ik_llama.cpp/build/bin/llama-server \ --model /mnt/secondary/neuro/Llama-3_1-Nemotron-Ultra-253B-v1-GGUF-UD-Q4_K_XL-131072seq/Llama-3_1-Nemotron-Ultra-253B-v1-UD-Q4_K_XL-00001-of-00004.gguf \ --ctx-size 81920 --n-gpu-layers 36 --tensor-split 25,25,25,25 \ -fa -ctk q8_0 -ctv q8_0 --threads 64 --host 0.0.0.0 --port 5000 --split-mode row ``` It loaded successfully, but when trying inference I got this error: ``` CUDA error: an illegal memory access was encountered current device: 0, in function ggml_backend_cuda_synchronize at /home/lissanro/pkgs/ik_llama.cpp/ggml/src/ggml-cuda.cu:3054 cudaStreamSynchronize(cuda_ctx->stream()) /home/lissanro/pkgs/ik_llama.cpp/ggml/src/ggml-cuda.cu:110: CUDA error ``` With 12 layers on GPU the error is the same (loads fine, but crashes when I try to use it). If I remove `--split-mode row`, it also results with the same error. As a last resort, I tried to load only on CPU (`CUDA_VISIBLE_DEVICES="" is necessary otherwise it still tries to use CUDA): ` ``` CUDA_VISIBLE_DEVICES="" ~/pkgs/ik_llama.cpp/build/bin/llama-server \ --model /mnt/secondary/neuro/Llama-3_1-Nemotron-Ultra-253B-v1-GGUF-UD-Q4_K_XL-131072seq/Llama-3_1-Nemotron-Ultra-253B-v1-UD-Q4_K_XL-00001-of-00004.gguf \ --ctx-size 81920 -fa -ctk q8_0 -ctv q8_0 --threads 64 --host 0.0.0.0 --port 5000 ``` ...then at first I thought it worked. So it seems there is an issue specific to CUDA, but CPU-only mode works. Please let me know if additional debugging from my side could help, and if so what steps I need to follow. --- 👤 **ikawrakow** commented the **2025-05-05** at **15:23:43**:
Can you try ``` ~/pkgs/ik_llama.cpp/build/bin/llama-server \ --model /mnt/secondary/neuro/Llama-3_1-Nemotron-Ultra-253B-v1-GGUF-UD-Q4_K_XL-131072seq/Llama-3_1-Nemotron-Ultra-253B-v1-UD-Q4_K_XL-00001-of-00004.gguf \ --ctx-size 81920 --n-gpu-layers 36 --tensor-split 25,25,25,25 \ -fa -ctk q8_0 -ctv q8_0 --threads 64 --host 0.0.0.0 --port 5000 -fmoe ``` Thanks. --- 👤 **saood06** commented the **2025-05-05** at **22:20:08**:
> With the commit that I just pushed `convert_hf_to_gguf.py` now converts the [Nemotron-Super-49B](https://huggingface.co/nvidia/Llama-3_3-Nemotron-Super-49B-v1) model correctly. Nice, I see you grabbed the only changes to the vocab.py file that we were behind: https://github.com/ggml-org/llama.cpp/commit/8ba38584b2bf744814e1131f6f6aec97df5a57e1 and https://github.com/ggml-org/llama.cpp/commit/a686171ea71ed8cb8a324850d146cb65a001e141. I think you might have been able to cherry-pick those commits directly. > > But then I see a difference in PPL. > > I didn't run the `bf16` model directly (comes dangerously close to the total RAM I have), but using `Q8_0` quantization. I arrive at a lower PPL using the HF->GGUF conversion script in this PR compared to using mainline conversion: > > * `PPL = 7.0801` using mainline HF->GGUF > > * `PPL = 7.0347` using this PR HF->GGUF > > > Quantization is done in exactly the same way, I'm running with exact same parameters on the same hardware, so something else is different in the converted `bf16` models (and just simple `diff` tells me that the files differ). > > OK, doing `diff` on the logs, I see this difference: > > ``` > llama_model_loader: - type f32: 131 tensors (mainline) > vs > llama_model_loader: - type f32: 130 tensors (this PR) > ``` Interesting, do you mind checking with gguf-hash or some other tool if that one changed tensor is the only difference? I am curious to know why this PR does one tensor less of f32 than mainline. --- 👤 **Lissanro** commented the **2025-05-05** at **22:48:49**:
> Can you try > ~/pkgs/ik_llama.cpp/build/bin/llama-server \ > --model /mnt/secondary/neuro/Llama-3_1-Nemotron-Ultra-253B-v1-GGUF-UD-Q4_K_XL-131072seq/Llama-3_1-Nemotron-Ultra-253B-v1-UD-Q4_K_XL-00001-of-00004.gguf \ > --ctx-size 81920 --n-gpu-layers 36 --tensor-split 25,25,25,25 \ > -fa -ctk q8_0 -ctv q8_0 --threads 64 --host 0.0.0.0 --port 5000 -fmoe Sure, here is the full log: https://pastebin.com/TjqnExDv - it loaded fine, then when I attempted inference it crashed with this error: ``` CUDA error: an illegal memory access was encountered current device: 0, in function ggml_backend_cuda_synchronize at /home/lissanro/pkgs/ik_llama.cpp/ggml/src/ggml-cuda.cu:3054 cudaStreamSynchronize(cuda_ctx->stream()) /home/lissanro/pkgs/ik_llama.cpp/ggml/src/ggml-cuda.cu:110: CUDA error ``` --- 👤 **Panchovix** commented the **2025-05-06** at **15:26:40**:
Correct me if I'm wrong but isn't nemotron 253B a dense model? So no experts and such --- 👤 **ikawrakow** commented the **2025-05-06** at **15:35:26**:
> Correct me if I'm wrong but isn't nemotron 253B a dense model? So no experts and such Oops, I'm getting confused. Doing too many things at a time. Not sure then why partial offload is not working. --- 👤 **saood06** commented the **2025-05-07** at **01:47:18**:
> I used `gguf-dump.py`, and the missing tensor is `rope_freqs`. I'm not sure why it is missing (and whether it would cause worse quality at long contexts), the conversion script looks like it handles it. I can see that tensor in gguf's that are on huggingface for these models, so it does seem like it should be there. > The other difference is that ours is `general.file_type = 24`, while theirs is `general.file_type = 32`. I don't know what that means. This one I understand, they both map to MOSTLY_BF16 ([ik_llama.cpp source](https://github.com/ikawrakow/ik_llama.cpp/blob/6c23618ca5d680bd00f06a143dc4a1b386c827e3/gguf-py/gguf/constants.py#L1327C5-L1327C28) and [llama.cpp source](https://github.com/ggml-org/llama.cpp/blob/141a908a59bbc68ceae3bf090b850e33322a2ca9/gguf-py/gguf/constants.py#L2117)). --- 👤 **Lissanro** commented the **2025-05-07** at **20:37:15**:
If there is still something I need to test, please let me know (my understanding the last command was given under assumption it was MoE, but since it is a dense model, I assume I need some other command to test or maybe I already provided all debug info that is possible from my side). In any case, thank you very much for looking into this. --- 👤 **ikawrakow** commented the **2025-05-09** at **07:09:55**:
I think I'll merge this one despite the missing `rope_freqs` tensors. We can try to sort out later why is it missing if people find performance degradation with long context. --- 👤 **saood06** commented the **2025-05-09** at **07:54:55**:
> I think I'll merge this one despite the missing `rope_freqs` tensors. We can try to sort out later why is it missing if people find performance degradation with long context. I think I figured it out (or at least I found one reason why it is missing if it turns out there is more), I'll make a PR later (heading off for a bit right now).