Skip to content

[BUG] EXL3 crashes on model split on single GPU user - please allow exllamav2 again! #497

Closed

Description

@maniac-0s

OS

Linux

GPU Library

CUDA 12.x

Python version

3.12

Describe the bug

I have gpu_split_auto on false (shouldn't split anyways on single GPU user) and gpu_split with different values, empty [], 0, 11GB, 15GB, 16GB. No matter what it always crashes with the same error.

I tried to lower the cache down to 4096 and it still crashes.

VRAM gets from zero up to 12758MiB / 16380MiB and then crashes.

Reproduction steps

On a 4060 TI with 16GB VRAM try to load a 12B EXL3 at 5.0bpw

Python 3.14
Cuda 13.x

`Thu Oct 8 14:57:04 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 615.71.09 KMD Version: 615.71.09 CUDA UMD Version: 13.4 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 Ti Off | 00000000:01:00.0 On | N/A |
| 0% 48C P5 12W / 165W | 18MiB / 16380MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
`

Expected behavior

The bug is most likely not your fault but an [exllamav3 issue](turboderp-org/exllamav3#50 however turboderp closed this on Sep 5 (one month ago).

Alternatively please allow to use exllamav2 where this issue doesn't exist. You deprecated exl2 while the exl3 version you include is still buggy.

Logs

14:47:42.637 INFO: Response parsing: tool format mistral_old (tokenizer, architecture), no reasoning parsing
14:47:42.639 INFO: Loading model /mnt/nvmepci/llms/Violet_Magcap-12B-EXL3 (manual GPU split)
14:47:44.249 ERROR: Error Traceback (most recent call last):
File "/mnt/nvmepci/tabbyAPI/endpoints/OAI/utils/common_.py", line 214, in load_inline_model
await model.load_model(
...<2 lines>...
)
File "/mnt/nvmepci/tabbyAPI/common/model.py", line 265, in load_model
async for _ in load_model_gen(model_path, **kwargs):
pass
File "/mnt/nvmepci/tabbyAPI/common/model.py", line 233, in load_model_gen
async for module, modules in load_status:
...<17 lines>...
progress.stop()
File "/mnt/nvmepci/tabbyAPI/backends/exllamav3/model.py", line 908, in load_gen
async for value in iterate_in_threadpool(generator):
yield value
File "/mnt/nvmepci/tabbyAPI/common/concurrency.py", line 30, in iterate_in_threadpool
yield await asyncio.to_thread(gen_next, generator)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/asyncio/threads.py", line 26, in to_thread
return await loop.run_in_executor(None, func_call)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/concurrent/futures/thread.py", line 86, in run
result = ctx.run(self.task)
File "/usr/lib/python3.14/concurrent/futures/thread.py", line 73, in run
return fn(*args, **kwargs)
File "/mnt/nvmepci/tabbyAPI/common/concurrency.py", line 20, in gen_next
return next(generator)
File "/mnt/nvmepci/tabbyAPI/venv/lib/python3.14/site-packages/torch/utils/_contextlib.py", line 61, in generator_context
response = gen.send(request)
File "/mnt/nvmepci/tabbyAPI/backends/exllamav3/model.py", line 1037, in load_model_sync
for value in self.model.load_gen(
~~~~~~~~~~~~~~~~~~~^
tensor_p=self.use_tp,
^^^^^^^^^^^^^^^^^^^^^
...<5 lines>...
max_batch_size=self.max_batch_size,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
File "/mnt/nvmepci/tabbyAPI/venv/lib/python3.14/site-packages/exllamav3/model/model.py", line 639, in load_gen
yield from self._load_autosplit(
...<15 lines>...
)
File "/mnt/nvmepci/tabbyAPI/venv/lib/python3.14/site-packages/exllamav3/model/model_ls.py", line 301, in _load_autosplit
raise RuntimeError("Insufficient VRAM in split for model and cache")
RuntimeError: Insufficient VRAM in split for model and cache
14:47:44.254 ERROR: Sent to request: Model Violet_Magcap-12B-EXL3 failed to load: Insufficient VRAM in split for model and cache

Additional context

config.yml

model:
model_dir: "..."
current_model: ""

gpu_split_auto: false
gpu_split: []

max_seq_len: 4096
override_base_seq_len: 4096

cache_mode: Q8
cache_size: 4096

chunk_size: 512

fastlayers: true
draft_model: ""
gpu_peer_copy: false
rope_scale: 1.0
alpha_value: 1.0

Acknowledgements

  • I have looked for similar issues before submitting this one.
  • I have read the disclaimer, and this issue is related to a code bug. If I have a question, I will use the Discord server.
  • I understand that the developers have lives and my issue will be answered when possible.
  • I understand the developers of this program are human, and I will ask my questions politely.

Activity

  1. turboderp commented on Oct 9, 2026

    @turboderp
    Collaborator

    I believe what's happening here is:

    • You're using inline model loading. With that option, the config is loaded from tabby_config.yml in the model's directory. Values are only inherited from the main config.yml if you add those keys under use_as_default. Otherwise your main-config cache_size and cache_mode are ignored.
    • If there's no tabby_config.yml in the model's directory, it falls back to model's defaults
    • The default context length for this model is 1M tokens, so Tabby tries to create a 1M token cache and has a bad time :(

    I've added some warnings to the output to make this a little clearer. But the fix should be either:

    • Create a tabby_config.yml file along with the model that contains the model: etc. sections you want to apply to that model specifically, or:
    • Add cache_size, cache_mode etc. under use_as_default in the main config, or:
    • Set inline_model_loading: false and load the model at startup with the main config options

    For the last option, here is what your config could look like (Everything else would be the defaults from config_sample.yml):

    model:
      model_dir: /mnt/nvmepci/llms
      model_name: Violet_Magcap-12B-EXL3
      max_seq_len: 4096
      cache_size: 4096
      cache_mode: Q8

    If you still want to support inline loading, it could be, instead:

    model:
      model_dir: /mnt/nvmepci/llms
      model_name: Violet_Magcap-12B-EXL3
      inline_model_loading: true
      use_as_default: [max_seq_len, cache_size, cache_mode]
      max_seq_len: 4096
      cache_size: 4096
      cache_mode: Q8

    A couple of notes about the particular model:

    The quant you seem to be using defines a linear RoPE scale in its config.json. The base model it's converted from doesn't, so that's likely to result in weird and broken behavior. I tested it at KLD=1.05 which is a huge deviation from the source model. I recommend removing these lines if you're having issues:

        "rope_scaling": {
            "type": "linear",
            "factor": 2.65
        },

    It's also an old quant. Without the section above it still seems to work fine (KLD=0.01), but it is still using an old codebook so performance may be less than you'd see from a more recent quant. It's a small model. so I made a 4.00 bpw and a 5.00 bpw version you can test with.

    ExLlamaV2 is sadly too much of a maintenance burden to keep supporting. You can switch over to the exl2_checkpoint branch, which contains the latest version that has EXL2 support. I don't recommend it, though, since ExLlamaV3 should ultimately use less memory than V2, run faster, and support many more architectures. It has fewer issues overall, receives updates, and it allows you to use smaller, higher-quality EXL3 quants.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions