Ubuntu + 7900XTX + Ollama 多任务排队方案求助(N8N实现FIFO)
-
硬件:Ubuntu Desktop + AMD 7900XTX 24G + ROCm + Ollama + Qwen3.8:27b Dense
单任务没有问题。主要场景:
- 读大量代码,理解 repo,完成 feature 或维护
- 搜集 YouTube 视频字幕,整理成高信息密度文档
遇到的问题
多任务时会出现:
- 每个任务时间不固定(10 分钟到 240 分钟),不可预测
- 同时给多个任务,基本都会失败。模型重试几次后停止,两个任务都会超时
例子:
- 任务1:改代码
- 任务2:爬取某个 YouTube 频道
- 任务3:爬取另一个 YouTube 频道
- ……任务 N
期望:有 FIFO 队列机制,睡前丢多个 Goal 进去,睡醒直接看结果。
请问有什么解决方案?
-
问题不在 N8N,在于你让应用层直接并发打 Ollama。单卡 24G 跑 27B dense 时本来就只有 1 路能做,多个请求同时进来会互相抢显存,谁都不够,最后一起超时。
正确做法是在 Ollama 前面加一个真正的队列,串行喂:
- 队列层:Redis list(
LPUSH投递 /BRPOP消费)或 RabbitMQ 都行。N8N 两种接法:- 简单版:一个触发器 + Redis 节点,worker 循环
BRPOP,天然 FIFO,一次只发一个 Ollama 请求; - 正式版:N8N 开 Queue mode(主进程 + worker),把 worker 并发设为 1。
- 简单版:一个触发器 + Redis 节点,worker 循环
- 关键参数:
OLLAMA_NUM_PARALLEL=1、OLLAMA_MAX_LOADED_MODELS=1,把显存留给单任务;OLLAMA_KEEP_ALIVE调大(如2h或-1),避免任务间隙反复加载 27B;- 队列层设任务级超时。你的任务 10–240 分钟,别用 N8N 默认 5 分钟,会把长任务中间掐掉。
- 重试放在队列层做,别让模型层重试。你「模型重试几次后停止、两个任务都超时」就是重试风暴把队列打爆了。任务要幂等,失败能重入。
- 分工:YouTube 字幕抓取是网络/IO 任务,和推理分开两个 worker 队列,否则抓取卡住会占着推理位。推理队列并发=1,抓取可以多并发。
- 结果落盘 + 通知:每个 Goal 完成写结果文件(或发 Telegram/webhook),早上直接看目录。
想再省心,把 Ollama 换成 SGLang/vLLM 起服务,它们自带请求队列 + continuous batching,就是为多请求场景设计的;Ollama 在这块确实弱。
- 队列层:Redis list(