Kaggle + ComfyUI 完整操作指南
在 Kaggle 免费 GPU 上跑文生图、文生视频、图生视频:双卡双开 + 固定域名 + 模型持久化,全流程一次讲清。
0. 架构总览
/kaggle/working 里会随版本保存,自动审查系统会扫描。违规会导致内容下架乃至账号封禁。请勿在 Kaggle 上生成或保存 NSFW 内容。1. 前置准备
1.1 Kaggle 账号与 Notebook 设置
- Kaggle 账号需完成手机验证才能用免费 GPU。
- 新建 Notebook 后,右侧 Settings 里确认三件事:Accelerator 选 GPU(T4 x2)、Internet 设为 ON。
- Internet 默认是关闭的,不打开下载不了模型。
1.2 Secrets(两个 Token,分开用途)
在 Notebook 的 Add-ons → Secrets 里添加,并勾选授权给这个 Notebook:
| Secret 名 | 是什么 | 在哪拿 | 用来干什么 |
|---|---|---|---|
CF_TUNNEL_TOKEN | Cloudflare 隧道的连接器 Token | Zero Trust 后台 → Networks → Tunnels → 点进隧道复制 | 固定域名(comfy / comfy2)。不加也能跑,自动回落临时网址。 |
KAGGLE_API_TOKEN | Kaggle 新版 API Token(KGAT_ 开头) | Kaggle 设置页 → Generate New Token(只显示一次,生成时复制) | 只给附录的 Dataset 发布单元用。CLI 需 ≥ 1.8;旧的 username + key 是另一套,别混用。 |
1.3 Cloudflare 隧道与路由
- 在 Zero Trust 后台建一条 Named Tunnel(名字如
comfy),拿到 Token 放进 Secrets。 - 在隧道里配两条 Public Hostname 路由(同一条隧道,不用建两个):
comfy.goodpcb.kdns.fr→http://localhost:8188comfy2.goodpcb.kdns.fr→http://localhost:8189
- 保存路由后 DNS 的 CNAME 会自动生成。Notebook 里一个连接器进程,两个路由一起接。
2. Notebook 导入与运行
- 下载上面那个
.ipynb文件。 - 在 Kaggle 里新建 Notebook 时选导入/上传这个文件。
- 导入后先检查 §1.1 的三项设置(新 Notebook 不继承旧的设置,Secrets 也要重新勾选授权)。
- 如果已经发布过 Dataset:点 Add data → 你的 Datasets → 把
comfyui-models加为 Input。 - 按顺序跑 1~6 号单元(或 Run All)。各单元的分工:
| 单元 | 做什么 | 备注 |
|---|---|---|
| 1/6 | 检查 GPU 与磁盘 | 确认两张 T4、临时空间可用。 |
| 2/6 | 安装 ComfyUI 到临时空间 | 克隆 + 装依赖;Kaggle 自带 torch,一般只补少量包。 |
| 3/6 | 模型:Dataset 挂载优先,挂不上才下载 | 8 个文件约 41GB,断点续传(先下 .tmp 再改名,残文件不会被误判)。旧版 6 文件 Dataset 会先复制已有的、只补下新增 2 个。 |
| 4/6 | 启动第一个 ComfyUI(GPU 0,端口 8188) | 后台运行,输出到 /kaggle/working/comfy-output。 |
| 5/6 | 启动第二个 ComfyUI(可选,GPU 1,端口 8189) | 不需要双开就跳过。见 §5。 |
| 6/6 | 隧道 | 有 Token 走固定域名;没 Token 走临时隧道(两个实例各一条)。 |
跑完打开固定域名就能用。附录的 Dataset 发布单元只在要发布/更新 Dataset 时跑,平时不用。
3. 模型清单与 Dataset 持久化
8 个文件全部来自 HuggingFace 上 Comfy-Org 的官方重打包仓库,非门控、无需 Token:
| 用途 | 文件 | 仓库 | 大小 |
|---|---|---|---|
| 文生图 Z-Image Turbo | z_image_turbo_bf16.safetensors(扩散模型) | Comfy-Org/Z-Image-Turbo | 12.3 GB |
qwen_3_4b.safetensors(文本编码器) | 8.0 GB | ||
ae.safetensors(VAE) | 0.34 GB | ||
| 文生视频 Wan2.1 T2V 1.3B | wan2.1_t2v_1.3B_fp16.safetensors(扩散模型) | Comfy-Org/Wan_2.1_ComfyUI_repackaged | 约 2.6 GB |
umt5_xxl_fp8_e4m3fn_scaled.safetensors(文本编码器) | 约 6.7 GB | ||
wan_2.1_vae.safetensors(VAE) | 约 0.3 GB | ||
| 图生视频 Wan2.2 TI2V 5B | wan2.2_ti2v_5B_fp16.safetensors(扩散模型) | Comfy-Org/Wan_2.2_ComfyUI_Repackaged | 10 GB |
wan2.2_vae.safetensors(VAE,2.2 专用) | 1.4 GB |
文本编码器 umt5 由 Wan2.1 和 Wan2.2 共用,不用重下。图/视频本地开源权重没有 LLM 式的拒答,不用专门找消融版。
Dataset 持久化(只需做一次)
- 会话结束会清掉临时空间里的模型;不做持久化,下次开机要重下 41GB。
- 办法:跑完第 3 号单元后,跑附录发布单元,把模型上传成你账号下的私有 Dataset(
comfyui-models,默认私有)。6 个基础文件约 30GB;Wan2.2 的 2 个文件如果已下载会一起传,否则只发 6 个、以后再跑一次推新版本。 - 以后每次开机:Add data 里挂载这个 Dataset,第 3 号单元自动跳过下载。
- Dataset 上传/存储不收费(单个 Dataset 上限 200GB、私有 Dataset 总额上限 200GB);烧的是每周 30 小时的 GPU 额度时间。上传 30GB 要十几到二十几分钟,进度实时显示在单元输出里;超过 40 分钟没动静再排查。
- 如果发布时报许可证错误,把 metadata 里的
Apache-2.0改成CC0-1.0再跑。
4. 三种模式:文生图 / 文生视频 / 图生视频
mat1 and mat2 shapes cannot be multiplied / CLIPLoader 词表大小不匹配)。换模型就去模板库重开对应模板。4.1 文生图(Z-Image Turbo)
- 模板库搜 Z-Image Turbo 载入;三个加载器选:
z_image_turbo_bf16、qwen_3_4b、ae。 - 参数:8 步、CFG 1.0。几十秒一张。
4.2 文生视频(Wan2.1 T2V 1.3B)
- 模板库搜 Wan 2.1 Text to Video 载入;三个加载器选:
wan2.1_t2v_1.3B_fp16、umt5_xxl_fp8、wan_2.1_vae。 - 提示词写英文更稳。5 秒 720P 在 T4 上要十几二十分钟,先拿小分辨率试一条确认流程通。
- 当前 Wan2.1 T2V-1.3B 不支持图生视频,图生视频用 Wan2.2。
4.3 图生视频(Wan2.2 TI2V 5B)
- 模板库搜 Wan 2.2,打开 TI2V 5B 模板;三个加载器选:
wan2.2_ti2v_5B_fp16、umt5(和 Wan2.1 共用同一个)、wan2.2_vae。 - Load Image 节点上传图片:先用 Z-Image 生成一张、下载下来,再传到这个节点;提示词描述“让图里的人/物怎么动”。
- 5B 比 1.3B 慢,同样先小分辨率、短帧数试。14B I2V 版(双专家约 28.6GB)不适合单卡 16GB,不推荐。
4.4 通用操作
- 运行按钮旁边的数字是排队次数:显示 6 就是点一次运行连跑 6 次(每次种子递增)。跑视频前先改成 1,不然 6 条连跑要烧一两个小时额度。
- 成品在界面右侧队列里点开看、下载;文件也存在
/kaggle/working/comfy-output(第二个实例是comfy-output-2),会随 Notebook 版本保存。 - 画布上多余的、没连线的加载器节点(比如重复的 UNet 加载器)选中按 Delete 删掉即可。UNet 加载器是加载扩散模型(去噪“大脑”)的节点,名字是历史遗留,Wan/Z-Image 实际是 Transformer 架构。
5. 双卡双开:用上第二张 T4
为什么默认只用一张卡?ComfyUI(以及 PyTorch 推理)默认单卡跑一个任务:两张卡的显存不合并,模型整个载入 0 号卡;单次生成是顺序计算,没法自动拆到两张卡上。两张 T4 之间没有 NVLink 高速互联,硬拆反而更慢。
用法是再起一个实例:第 5 号单元启动第二个 ComfyUI,关键三点:
CUDA_VISIBLE_DEVICES=1:让新进程只看到 1 号卡(编号从 0 开始:nvidia-smi里的 GPU 0 是在跑的那张,GPU 1 是闲置的那张;=1指的就是闲置那张)。进程里它仍叫cuda:0,ComfyUI 不用改任何配置。--user-directory指向单独目录:避免两个进程抢同一份用户数据。目录必须事先存在,ComfyUI 不会自己建,不存在会直接报错退出(启动单元里循环等端口、看起来“卡住不动”就是这个原因)。--output-directory指向单独目录(comfy-output-2),避免文件名冲突。模型文件两个实例共用一份,不用重下。
验证:新单元跑 !nvidia-smi,两张卡都应该有 python 进程、显存被占用。两个实例队列、历史各自独立:一个跑视频时,另一个照常出图。
6. 隧道与固定域名
为什么一条隧道能挂两个端口?隧道里跑的是按域名分流,不是按端口分流:边缘收到请求后看域名查路由表,comfy 走 8188、comfy2 走 8189,两条路由共用同一根隧道连接,最后一段才由 cloudflared 分别拨到两个本地端口。隧道是一根电话线,域名是分机号。只有换机器、换账号、或想彻底独立开关时,才需要建两个隧道。
- 固定隧道:Named Tunnel + Token,网址每次开机不变。Notebook 的第 6 号单元检测到
CF_TUNNEL_TOKEN就启动固定隧道,一个连接器两个路由一起接。 - 临时隧道:没 Token 时自动回落,cloudflared 给一个随机的
trycloudflare.com网址,每次开机都变、会话结束失效。临时隧道挂不上 Access。 - 530 排查:域名解析了但返回 530,意思是边缘没有到这台机器的活动隧道连接——先确认路由是加在正在跑连接器的那条隧道下面(新建的独立隧道有自己的 Token,得另跑一个连接器),再确认路由的 Service 端口没写错,等 1~2 分钟让配置下发。
7. 安全:给两个域名加上 Access 验证
ComfyUI 自己没有登录功能,固定域名裸奔在公网上:谁拿到网址都能进、烧你的 GPU 额度、看你生成的内容。固定子域名在证书记录里能查到,靠“别人猜不到”防不住。Cloudflare Access(Zero Trust 免费版,50 用户内够用)是标准解法。
注意:Tunnel 面板里没有 Access 的开关。建策略、选登录方式都在 Access 板块;Tunnel 里唯一的 Access 相关项是路由高级设置里的 “Enforce Access JWT validation”,只是加固开关,前提是已经建好了应用。分工就是:Tunnel 管“网址指向哪台机器”,Access 管“谁能进”。
- Zero Trust 后台 → Access → Applications → Add an application → Self-hosted,域名填
comfy.goodpcb.kdns.fr(一个应用里可以加多个域名,把comfy2.goodpcb.kdns.fr也加进去)。 - Policy:动作选 Allow,Include 规则选 Emails,填你能收到邮件的邮箱。任意邮箱都行,不用是 Cloudflare 账号邮箱、也不用是自己域名的邮箱。
- 登录方式选 One-time PIN(邮箱验证码)。如果列表里没有,先去 Settings → Authentication 里添加 One-time PIN 这个登录方式。
- 保存后立即生效,不用动 Notebook。用无痕窗口打开域名自验:应先出现 Cloudflare 登录页,输邮箱、收验证码,通过后才能进 ComfyUI。
收不到验证码先看垃圾箱。会话停后隧道下线、暴露自行解除,但下次开机固定域名会再次暴露,所以还是建议加上。
8. 常见问题与排查
- 内容政策红线:Kaggle 禁止 NSFW 内容(含 Notebook 保存的输出文件),违规会下架内容、封禁账号。详见页首警告。
- 显存不足(OOM):Z-Image 的 BF16 版在 16GB 卡上很满。把扩散模型换成同一仓库里的
z_image_turbo_int8_convrot.safetensors(6.2GB)、文本编码器换成qwen_3_4b_fp8_mixed.safetensors(5.6GB);视频则把分辨率/帧数调低。 - 视频很慢:正常。T4 上一条 5 秒 480P 短片要几分钟到十几分钟,别反复点 Queue。
- 实例起不来、启动单元一直“启动中”不动:先点 Stop 中断(中断不会杀后台进程),再看日志,关键看最后一行。第一个实例:
comfyui.log;第二个实例:comfyui2.log;隧道:cloudflared.log(都在安装目录下)。常见原因:--user-directory指向的目录不存在。 - GPU 利用率不高:交互式推理天生跑不满,看出图/出片速度别看百分比。9B 级小模型只占几 GB 显存是正常的。
- 会话结束后:模型和 ComfyUI 在临时空间里会被清掉,下次开机重新跑 1~6 号单元(挂载 Dataset 后第 3 号单元跳过下载);生成的内容在
/kaggle/working/comfy-output*里,会随 Notebook 版本保存。 - 省额度:直接在 Kaggle 里停止整个会话才不烧额度,光停进程不省。
- 隧道网址打不开:重新跑第 6 号单元;临时隧道偶尔抽风,多试一次一般就好。
9. 示例:小猫跳迈克的舞
先用 Z-Image 模板出图(提示词):
An adorable fluffy orange tabby kitten standing on its hind legs on a concert stage, wearing a black fedora hat, a black sequined jacket and a single white sparkling glove on its front paw, one paw tipping the hat, dramatic spotlight from above, dark background with colorful stage lights, cute and photorealistic, full body shot, centered composition
再用 Wan2.2 TI2V 模板,把图传到 Load Image 节点(提示词):
The kitten dances like Michael Jackson: it moonwalks backwards smoothly across the stage, then spins around on its hind legs, tips its fedora with its paw, and does a smooth 45-degree lean, tail swishing to the rhythm, stage lights flashing, smooth natural motion, full body visible throughout
负面提示词:
blurry, distorted, extra limbs, deformed paws, static image, no movement, low quality
动作词写具体(moonwalk、spin、lean),模型按词执行;先拿小分辨率、短帧数试一条,确认动作对了再上 720P。