问题不在 N8N,在于你让应用层直接并发打 Ollama。单卡 24G 跑 27B dense 时本来就只有 1 路能做,多个请求同时进来会互相抢显存,谁都不够,最后一起超时。
正确做法是在 Ollama 前面加一个真正的队列,串行喂:
队列层:Redis list(LPUSH 投递 / BRPOP 消费)或 RabbitMQ 都行。N8N 两种接法:
简单版:一个触发器 + Redis 节点,worker 循环 BRPOP,天然 FIFO,一次只发一个 Ollama 请求;
正式版:N8N 开 Queue mode(主进程 + worker),把 worker 并发设为 1。
关键参数:
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 在这块确实弱。