
“Overrun of a stack-based buffer” error when running Phi4
快速结论:该报错通常出现在 Windows 系统下 Ollama 运行 Phi4 模型时。优先排查 Ollama 版本(0.30.7 及更早版本可能存在问题),并尝试更新 Ollama 到最新版本或回退到已知稳定的版本。
问题场景
用户在 Windows 系统(NVIDIA GPU + AMD CPU)上使用 Ollama 0.30.7 运行 Phi4 模型时触发。复现方式包括命令行运行 ollama run phi4 以及调用 /api/chat 端点。
报错原文
llama-server process has terminated: exit status 0xc0000409: The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.
原因分析
可能原因:系统检测到基于栈的缓冲区溢出(stack-based buffer overrun),这通常意味着某个函数或组件写入的缓冲区大小超过了预分配的空间。结合 Ollama 0.30.7 版本以及 Phi4 模型的特性,推测可能是:
- Ollama 在特定版本中处理 Phi4 模型时存在内存管理 bug,导致栈缓冲区溢出。
- 模型加载时,某个后端(如 llama.cpp)在处理模型权重或配置时产生了越界写入。
- Windows 系统编译器、运行时库或安全机制(如 /GS 标志)捕获到了栈缓冲区溢出,但具体根因需进一步排查。
环境排查
- Ollama 版本:0.30.7(或更早版本)
- 操作系统:Windows
- GPU:NVIDIA(用户使用 GeForce RTX 3050)
- CPU:AMD
- Ollama 配置:注意用户日志中开启了
OLLAMA_FLASH_ATTENTION:true和OLLAMA_VULKAN:true等参数,这可能影响内存使用。 - 模型:phi4(可能是某个变体或默认版本)
- 其他模型是否正常:用户提到“This seems that this is the only model affected at the moment in my Ollama setup.”,排除普遍性问题。
解决步骤
- 升级 Ollama 到最新版本:前往 Ollama 官网 下载并安装最新稳定版(例如 0.30.8 或更高)。该 Issue 在关闭时已合并修复,新版本应已包含该补丁。
- 回退到已知稳定版本:如果无法升级,可尝试安装 0.30.6 或更早版本(如 0.30.5),避免使用 0.30.7。
- 检查模型完整性:删除并重新拉取 Phi4 模型:
ollama rm phi4然后ollama pull phi4。如果本地模型文件损坏,可能导致加载异常。 - 禁用或调整可能导致缓冲溢出的功能:
- 关闭
OLLAMA_FLASH_ATTENTION:设置环境变量OLLAMA_FLASH_ATTENTION=0或直接删除该配置。 - 尝试使用默认的
OLLAMA_KV_CACHE_TYPE(例如设为f16而非q8_0)。 - 减少上下文长度:设为
OLLAMA_CONTEXT_LENGTH=2048测试。 - 关闭 Vulkan 后端:设置
OLLAMA_VULKAN=false,仅使用 CUDA。
- 关闭
- 检查系统依赖和运行时:
- 确保 Visual C++ Redistributable(例如 2015-2022 版本)已安装且最新。
- 更新 GPU 驱动到最新版本(NVIDIA Studio 或 Game Ready 驱动)。
- 检查 Windows 更新,确保系统安全补丁已安装。
- 尝试使用其他模型加载方式:在 Ollama 设置中切换后端(如使用 llama.cpp 的特定编译版本),或参考官方文档使用
--no-flash-attn等参数(如果命令行支持)。
注:以上步骤中,升级 Ollama 到最新版本和重新拉取模型可优先尝试。
验证方法
重现相同场景运行 ollama run phi4 或调用 API,若不再出现 “Overrun of a stack-based buffer” 报错,且模型能正常输出响应,则问题已解决。



