首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

适用于Apple Metal的Automatic1111,sd1.5加速40%

2026-08-13 1 阅读 约6分钟阅读 dmikey831
分享:
字号:
我在 Apple 硬件上经常使用 Draw Things,但有一点一直困扰着我:Automatic1111 感觉比应有的速度要慢。并不是慢得不能用。只要慢到你注意到即可。在我的 M3 Pro 上,Automatic1111 中简短的五步 DPM++ SDE 生成通常会在 8-10 秒左右完成。 Draw Things 已经向我展示了 Apple Silicon 上的稳定扩散可能比这更直接。所以我想看看这个差距有多少是真正必要的。 stable-diffusion-webui-metal,用于Apple Silicon的微调automatic1111,下载stable-diffusion-webui-metal的源码_GitHub_帮酷适用于 Apple Silicon 的微调自动 1111。通过在 GitHub 上创建帐户来为 dmikey/stable-diffusion-webui-metal 开发做出贡献。有一个重要的限制:我不想替换Automatic1111。我想要相同的 WebUI、检查点、LoRA、采样器、扩展、API、提示语法和一般工作流程。我对将所有内容转换为 Core ML 并围绕它构建另一个推理引擎不感兴趣。目标要窄得多:如果我们让重要的部分表现得更像苹果原生软件,Automatic1111 能达到多快?答案是,至少对于我正在运行的工作负载来说,速度要快得多。同一级别的一代在我的 M3 Pro 上花费大约 8 至 10 秒,现在通常在 3 至 7 秒之间。 13-20,现在在我的 M1 Mac Mini 上达到 8-10。这些是我当前工作负载中观察到的范围,而不是声称普遍 2 倍改进的受控基准。运行时改进和 NGMS 之间还有一个重要区别,它实际上减少了正在执行的指导工作量。尽管如此,实际使用中的差异还是很大的。然而,比最终数字更有趣的是达到这一目标需要付出什么代价。这不是一项优化。从工作负载开始,而不是基准测试 我关心的工作负载非常具体:稳定扩散 1.x DPM++ SDE Karras 5 步骤 CFG 大约 1.15 384×640 和 512×512 FP16 UNet,默认情况下在 MPS FP32 VAE 上 这种特殊性很重要。早期,DPM++ 2M 看起来是一种节省时间的简单方法。它速度更快,但在短时间内并没有产生我想要的结果。那不是优化。这是不同的工作量。这基本上成为了接下来的所有事情的规则:如果优化单独看起来很棒,但在保留我试图产生的结果的同时并没有使实际生成速度更快,那么它就不算数。注意力显然是起点。 PyTorch 的 MPS 后端已经变得更好,但仍然存在稳定的扩散注意力形状,直接转向 Metal 是有意义的。错误在于将自定义 Metal 实现视为普遍更快。事实并非如此。相反,我专门为 SD 1.x 形状添加了一条 Metal Flash Attention 路径,它在测试中实际获胜。路由器在概念上看起来像这样: if inference and fp16_mps and query_tokens >= 192 and head_dim in (40, 80, 160): return metal_flash_attention(q, k, v) return pytorch_sdpa(q, k, v) 关于掩码、训练、dropout、张量布局、分组查询注意力和支持的类型还有其他检查,但这是基本思想。金属不是默认设置,因为金属听起来更快。当我们测量了该形状并且它应得的时,它就得到了操作。其他一切都通过 PyTorch 返回。这个后备措施很重要。 Automatic1111 支持的配置远多于我的五步 SD 1.x 工作流程。我不想要一个更快的叉子,只有在没有人碰任何东西的情况下才起作用。内核并不是问题的全部,吸引人们对 Metal 的关注有所帮助,但它暴露了一些更有趣的东西。本机扩展在每次注意调用后提交 MPS 命令缓冲区。在每次 UNet 评估中,稳定扩散都会反复引起人们的注意。通过简短的五步生成,重复提交微小的工作块开始成为总运行时的有意义的部分。因此,我没有将 Metal 内核视为自己的小应用程序,而是将其集成到 PyTorch 当前的 MPS 流中。该扩展结束 PyTorch 当前的内核合并,将 Metal Flash Attention 操作编码到当前命令缓冲区中,然后让 PyTorch MPS 的其余工作从那里继续。每次关注电话消失后的显式提交。这最终成为整个项目中最重要的教训之一。如果您在每次调用后提交命令缓冲区,那么最快的内核仍然会失败。在这个世代,开销很重要。您不再只是优化 GPU 矩阵乘法的速度。您正在优化 Python、PyTorch、MPSGraph 和 Metal 相互协调的频率。还有一个非常明显的提醒,不要相信计时器:早期版本之一产生了绿色图像。速度很快。它也是绿色的。 Metal 路径现在在执行之前运行一个独立的注意力加投影正确性测试
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱