快速结论:该问题出现在 llama.cpp / LM Studio 的 CUDA runtime 对 qwen4exp(Qwen3.8-Flash-Next)模型做长上下文 prefill 时,multi-GPU layer split(--split-mode layer)下会在固定 token 位置确定性崩溃;优先排查 sparse indexer / PLE gather 等按绝对 token 位置推导 kernel launch 配置的路径,而不是先怀疑 Flash Attention 或 CUDA graphs 开关。
适用环境:Windows 11;llama.cpp CUDA backend(LM Studio 内嵌 llama-server);受影响 runtime 包括 2.33.0=b10760、2.42.0=b11087、2.45.0=b11163、2.46.0=b11189;硬件为 7x Volta sm_70(Quadro GV100 + 6x Tesla V100 32GB),driver 582.78,CUDA 12.4;模型为 Qwen3.8-Flash-Next-Uncensored Q8_0 GGUF。Issue 明确说明未启用 P2P(GGML_CUDA_P2P 未设置)。
最快修复方案:暂无确认的一步修复方案。Issue 曾认为 PR #29803(commit ec7630a)已修复,但作者在包含该 commit 的 LM Studio runtime 2.51.0 上重新测试,同一 prompt 仍在同一 token(7633,progress 0.39)确定性崩溃。
注意事项:崩溃与量化无关(Q8_0 与 Q6_K 死在完全相同的 token 7633),且内容相关(同 session 下 18K 与 138K token 的新鲜 prefill 都能正常越过 7633)。Issue 目前仍标记为 bug-unconfirmed,作者提出的 indexer / PLE gather 位置边界假设属于推测方向,尚未被官方确认。
问题场景
用户在 Windows 11 上,通过 LM Studio 内嵌的 llama.cpp CUDA llama-server 运行 Qwen3.8-Flash-Next-Uncensored Q8_0 GGUF(约 176 GB),使用 multi-GPU layer split 配置:7 路 --split-mode layer、--main-gpu 0、--parallel 1、--ubatch-size 384、ctx 260096、KV f16、kv-unified off。
复现场景有两类:
- Session A(约 65–72K token 的 prompt):prefill 进行到约 1/3(n_tokens 约 21732~23780,progress 0.33)时确定性崩溃,4/4 复现。
- Session B(约 19.6K token 的 prompt):prefill 进行到约 39%(n_tokens = 7633,progress 0.39)时确定性崩溃,9/9 复现,覆盖不同 runtime、Flash Attention on/off、CUDA graphs enabled/disabled、
CUDA_MODULE_LOADING=EAGER有无。
崩溃在 Flash Attention 开与关、CUDA graphs 开与关下都能复现,因此不是 FA 或非 FA kernel 路径特有的问题,也与 CUDA graphs 无关。
报错原文
CUDA error: invalid argument
current device: 0, in function ggml_cuda_kernel_launch at ggml/src/ggml-cuda/common.cuh:1707
illegal memory access
(at cudaStreamSynchronize, ggml-cuda.cu:2547)
# 位置随 runtime 不同略有差异:
invalid argument @ ggml_cuda_kernel_launch (common.cuh:1676)
invalid argument @ launch (common.cuh:1707)
invalid argument @ launch (common.cuh:1716)
Windows WER Application Error 事件确认 faulting module 路径包含 cuda-avx2-<runtime version>(例如 cuda-avx2-2.51.0),exitCode=0xC0000409 fail-fast,因此不是陈旧进程残留。
原因分析
目前没有官方确认的根因。根据 Issue 中的证据,可以排除/弱化的方向包括:
- 不是 Flash Attention 配置表问题:原报告和修复后复测都在 FA on/off 两种模式下崩溃,与 PR #29803 改动的
fattn-mma-f16.cuhhead-dim 320/256 config 及fattn.cu的 gqa_ratio 路由无关。 - 不是量化 / 精度问题:Q8_0 与 Q6_K 在同一 prompt 的同一 token(7633)崩溃,说明更像是 shape 依赖的 kernel launch 配置问题,而非数据或精度问题。
- 不是 ubatch 边界:batch=2048 时边界在 2048/4096/6144,崩溃总发生在 progress 日志打印 n_tokens=7633 之后的下一步。
作者提出的可能原因(尚未确认):Qwen3.8-Flash-Next 使用 QSA head_dim=256 加 sparse indexer(top_k 2048),崩溃点的固定 token 位置与内容相关性指向 indexer / sparse-attention 路径中按绝对 token 位置推导 launch 配置的逻辑,例如 indexer 的 K-block 或 PLE gather 在某个位置边界(约 7633)越界,导致 kernel launch 参数不合法。
环境排查
- 确认 LM Studio / llama.cpp CUDA runtime 版本(b 号或 commit),例如 2.33.0=b10760、2.42.0=b11087、2.45.0=b11163、2.46.0=b11189;注意 #29803 对应 commit ec7630a 已包含在 LM Studio 2.51.0(llama-server 自报 commit 1fb7ef3e3)。
- 确认 CUDA runtime 版本与 driver 版本(Issue 环境为 CUDA 12.4、driver 582.78)。
- 确认 GPU 型号与数量、是否 sm_70(Issue 为 7x Volta:1x Quadro GV100 + 6x Tesla V100 32GB)。
- 确认是否设置
GGML_CUDA_P2P(Issue 未启用 peer access)。 - 确认启动参数:
--split-mode layer、--main-gpu 0、--parallel 1、--ubatch-size、--ctx-size、KV cache 类型、--kv-unified状态。 - 确认模型与量化类型(Q8_0、Q6_K 均已复现),以及 GGUF 头部架构元数据:blocks、attention heads / kv heads、head_dim、sparse indexer top_k、experts/top-k。
- 确认 Flash Attention 与 CUDA graphs 的开关状态(本 Issue 中两种状态均可复现)。
- 确认是否设置了
CUDA_MODULE_LOADING=EAGER(本 Issue 中设置与否均可复现)。 - 确认是否启用
CUDA_LAUNCH_BLOCKING=1(Issue 建议在 debug build 上开启以定位失败 kernel)。
解决步骤
- 先确认你的 runtime 是否已包含 PR #29803(commit ec7630a)。若尚未包含,可优先尝试升级到包含该 commit 的构建;但请注意该修复在本 Issue 的复现环境中被证明未能解决此特定签名。
- 如果你使用的是
--split-mode layer的多 GPU 配置,可优先尝试以下对照实验来缩小范围(Issue 中尚未逐一验证这些是否绕过崩溃):- 切换到
--split-mode row,观察崩溃点是否移动或消失。 - 改用单 GPU(
--main-gpu指定单一设备,不参与 layer split)跑同一 prompt,确认是否仍崩。 - 调整
--ubatch-size(Issue 中 ubatch 256/384/512 均复现,可作为排除项)。 - 使用与崩溃 prompt 不同的内容(Issue 中 18K 与 138K 的新鲜 prefill 均能正常越过 token 7633),确认是否为内容相关性触发。
- 切换到
- 在 debug build 上启用
CUDA_LAUNCH_BLOCKING=1,并让构建在common.cuh:1707(或对应版本行号)处 dump 失败 kernel 的名称与 grid/block 维度,以定位是哪个 kernel 的 launch 参数不合法。 - 收集 Windows 事件日志中 WER Application Error 事件的 faulting module 路径(确认包含
cuda-avx2-<version>)与 exitCode(0xC0000409)。 - 在 原 Issue 中附上放大的最小复现(相同 prompt、相同 token 位置、相同 runtime commit、相同启动参数),以便维护者定位 indexer / PLE gather 路径的位置边界。
验证方法
- 使用同一 prompt、同一 batch / ubatch / ctx / split 配置,重复运行 prefill,确认是否仍固定死在 n_tokens=7633(或 Session A 的 progress 0.33 位置)。
- 在同一 runtime 上换一个内容不同的 prompt(例如 Issue 中 18K、138K 的新鲜 prefill),确认其能正常越过崩溃点并完成 prefill 与首轮 decode。
- 对同一模型分别用 Q8_0 与 Q6_K 复测,确认崩溃点是否随量化改变;若仍在同一 token 位置,则支持 shape 依赖的 launch 配置假设。
- 在多轮 agent 流量下测试高 prefix-cache reuse(f_keep 约 0.96~0.99)的 partial-reuse prefill,确认是否仍出现
invalid argument @ ggml_cuda_kernel_launch (common.cuh:1707)并 fail-fast。 - 若维护者发布了针对 indexer / sparse-attention launch 路径的修复 commit,需在包含该 commit 的 runtime 上用上述确定性 prompt 重新复测,确认崩溃点消失。
参考来源
ggml-org/llama.cpp PR #29803(曾被标记为修复,但复测未通过)
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


