无服务器冷启动:HF 缓存与预计算哈希

文章目录

    • 参考仓库
    • 两条优化分别解决什么?
    • [`cache.py` 在做什么?](#cache.py 在做什么?)
      • [1)预热 Hugging Face 缓存](#1)预热 Hugging Face 缓存)
      • [2)预计算哈希并写入 `cache.json`](#2)预计算哈希并写入 cache.json)
    • [Dockerfile 里怎么接?](#Dockerfile 里怎么接?)
    • [优化前 vs 优化后(定性结论)](#优化前 vs 优化后(定性结论))
    • [额外观察:启动时间很吃 CPU,尤其单核](#额外观察:启动时间很吃 CPU,尤其单核)
    • 小结

不少团队不仅把 Automatic1111(AUTOMATIC1111 stable-diffusion-webui) 当图形界面用,还直接把它当 HTTP API 层。在这种架构上扩缩容时,冷启动少几秒往往就是少付几轮排队与超时------如果你正在压 A1111 的安装与启动时间,下面的两条 Docker 级思路很实用。


参考仓库

说明(2026 年核对):主分支上可能已看不到与当年完全一致的 tree/main/serverless-automatic 路径,同类逻辑常出现在 archived/stable-diffusion-webui 或新版 official-templates 中。本文聚焦 方法论,具体 Dockerfile 行请以你实际 fork 的模板为准。

两条优化分别解决什么?

  1. 把 Hugging Face 侧需要的文件提前拉进镜像缓存

    避免每次 Serverless 冷启动 再从公网下载同一批文件。

  2. 在构建期预计算模型哈希并写入缓存文件

    避免容器每次启动时再跑一遍耗 CPU 的扫描与校验。

在当时的示例里,这两项通常集中在 执行 cache.py 的 Dockerfile 步骤 中完成(构建镜像时跑一次,而不是请求来了再跑)。

cache.py 在做什么?

cache.py 本身并不「魔法」:它会从 WebUI 本体里 import 若干函数(来自 webui、modules 等),在 非交互、构建阶段 的环境下把初始化流程跑一段。

效果上可以拆成两件大事:

1)预热 Hugging Face 缓存

脚本会触发下载并把文件放进默认缓存目录,例如:

plain 复制代码
/root/.cache/huggingface

如果你在打 无服务器镜像 时跳过这一步,那么 每一个冷启动的 Pod 都可能重新走一遍下载------网络抖动时尤其致命。

2)预计算哈希并写入 cache.json

计算结果会落到 WebUI 约定路径,例如:

plain 复制代码
/workspace/stable-diffusion-webui/cache.json

默认行为下,A1111 也可能在启动时自动做这件事;因此冷启动会明显吃 CPU。你也可以用命令行参数 --no-hashing 关掉启动时哈希,但更适合生产的方式往往是:构建期就算好并落盘,运行时直接读缓存。

Dockerfile 里怎么接?

思路是:在 已经安装好 WebUI 与依赖 之后,增加一步显式执行预热脚本(路径按你的仓库调整):

dockerfile 复制代码
# 示例:构建阶段执行缓存预热(具体路径以模板为准)
RUN python /workspace/serverless-automatic/cache.py

实际模板里可能是 WORKDIR + RUN python cache.py 等形式,和当时 serverless-automatic 的目录布局一致即可。

优化前 vs 优化后(定性结论)

原文给出的对比是:做完 HF 缓存 + 预计算哈希之后,冷启动路径会少掉「每次现下文件」和「每次现算哈希」两大块 同步 CPU/IO 尖峰。具体秒数依赖模型体积、磁盘与 CPU 型号,但方向是稳定的:把能在镜像里做完的事,不要交给 Serverless 的第一次请求。

额外观察:启动时间很吃 CPU,尤其单核

启动耗时与 CPU 关系很大,甚至与 单核性能 近似线性相关。也就是说,换更快的实例规格(尤其单核频率更高的 CPU)对「从进程起来到 API 可服务」同样有效,和 Docker 缓存是 互补 关系,不是二选一。

此外,导入 PyTorch、Gradio 等重型依赖本身仍要时间;后续文章还会专门讲如何压缩 import 时间------若你今天的瓶颈已经不在下载与哈希,而卡在 解释器 import,就需要另开一轮优化(例如延迟导入、精简依赖、换更瘦的启动路径等)。


小结

手段 作用
构建期跑 cache.py / 等价预热 把 HF 文件写入镜像层或构建期可复用层,避免冷启动下载
预写 cache.json 避免启动阶段全量模型哈希,降低 CPU 尖峰与尾延迟
更快 CPU / 更高单核 与镜像优化正交,直接缩短 import 与 Python 启动段

把 「构建期一次性」 和 「运行时每次」 分清,是无服务器服务能否稳定承接流量的分水岭之一。

相关推荐
Bode_200223 分钟前
机器人装配线的监测和预测
人工智能·机器人装配
Zhao-Jichao25 分钟前
AI Prompting for Everyone 课程笔记 - 03 联网搜索 Web Search
人工智能
xsd202411181 小时前
手机扫一眼盘子算食物体积方案
人工智能
阿里云基础软件1 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
服务器硬件项目经理1 小时前
《超节点修仙录》· 第一卷·炼气期【第04话】 超节点 vs 普通服务器——不就是多插了几张卡吗?
运维·服务器·人工智能·嵌入式硬件·深度学习·机器学习
前端 贾公子1 小时前
将CHATGPT/Codex 26.727.51351固定在MacOS Monterey 12上
人工智能
9i编程1 小时前
用 Codex 改代码,依据是什么?
人工智能·openai·ai编程
aixingkong9211 小时前
华为灵衢超节点参考架构白皮书深度解读
大数据·人工智能·华为
送外卖的工程师1 小时前
STM32图书馆环境监测系统(机智云)
人工智能·语音识别
李纲明1 小时前
微信小程序真机预览白屏或 request 失败:先核 request 合法域名与 TLS,再查体验版与本地缓存
缓存·微信小程序·小程序·小程序开发·devdiy·真机预览·合法域名