Buckets:

download
raw
8.27 kB
import"../chunks/DsnmJJEf.js";import{i as f,h as u,C as g,H as a,a as s,E as b,s as w}from"../chunks/DdZvggmf.js";import{p as B,o as Z,s as l,f as G,a as T,b as V,c as m,n as R}from"../chunks/BbekZcyp.js";const C='{"title":"Metal Performance Shaders (MPS)","local":"metal-performance-shaders-mps","sections":[{"title":"故障排除","local":"故障排除","sections":[{"title":"注意力切片","local":"注意力切片","sections":[],"depth":3},{"title":"批量推理","local":"批量推理","sections":[],"depth":3}],"depth":2}],"depth":1}';var S=m('<meta name="hf:doc:metadata"/>'),F=m('<p></p> <!> <!> <blockquote class="tip"><p>带有 <img alt="MPS" src="https://img.shields.io/badge/MPS-000000?style=flat&amp;logo=apple&amp;logoColor=white%22"/> 徽章的管道表示模型可以利用 Apple silicon 设备上的 MPS 后端进行更快的推理。欢迎提交 <a href="https://github.com/huggingface/diffusers/compare" rel="nofollow">Pull Request</a> 来为缺少此徽章的管道添加它。</p></blockquote> <p>🤗 Diffusers 与 Apple silicon(M1/M2 芯片)兼容,使用 PyTorch 的 <a href="https://pytorch.org/docs/stable/notes/mps.html" rel="nofollow"><code>mps</code></a> 设备,该设备利用 Metal 框架来发挥 MacOS 设备上 GPU 的性能。您需要具备:</p> <ul><li>配备 Apple silicon(M1/M2)硬件的 macOS 计算机</li> <li>macOS 12.6 或更高版本(推荐 13.0 或更高)</li> <li>arm64 版本的 Python</li> <li><a href="https://pytorch.org/get-started/locally/" rel="nofollow">PyTorch 2.0</a>(推荐)或 1.13(支持 <code>mps</code> 的最低版本)</li></ul> <p><code>mps</code> 后端使用 PyTorch 的 <code>.to()</code> 接口将 Stable Diffusion 管道移动到您的 M1 或 M2 设备上:</p> <!> <blockquote class="warning"><p>PyTorch <a href="https://pytorch.org/docs/stable/notes/mps.html" rel="nofollow">mps</a> 后端不支持大小超过 <code>2**32</code> 的 NDArray。如果您遇到此问题,请提交 <a href="https://github.com/huggingface/diffusers/issues/new/choose" rel="nofollow">Issue</a> 以便我们调查。</p></blockquote> <p>如果您使用 <strong>PyTorch 1.13</strong>,您需要通过管道进行一次额外的”预热”传递。这是一个临时解决方法,用于解决首次推理传递产生的结果与后续传递略有不同的问题。您只需要执行此传递一次,并且在仅进行一次推理步骤后可以丢弃结果。</p> <!> <!> <p>本节列出了使用 <code>mps</code> 后端时的一些常见问题及其解决方法。</p> <!> <p>M1/M2 性能对内存压力非常敏感。当发生这种情况时,系统会自动交换内存,这会显著降低性能。</p> <p>为了防止这种情况发生,我们建议使用<em>注意力切片</em>来减少推理过程中的内存压力并防止交换。这在您的计算机系统内存少于 64GB 或生成非标准分辨率(大于 512×512 像素)的图像时尤其相关。在您的管道上调用 <code>enable_attention_slicing()</code> 函数:</p> <!> <p>注意力切片将昂贵的注意力操作分多个步骤执行,而不是一次性完成。在没有统一内存的计算机中,它通常能提高约 20% 的性能,但我们观察到在大多数 Apple 芯片计算机中,除非您有 64GB 或更多 RAM,否则性能会<em>更好</em>。</p> <!> <p>批量生成多个提示可能会导致崩溃或无法可靠工作。如果是这种情况,请尝试迭代而不是批量处理。</p> <!> <p></p>',1);function E(d,h){B(h,!1),Z(()=>{new URLSearchParams(window.location.search).get("fw")}),f();var o=F();u("122qmil",r=>{var y=S();w(y,"content",C),T(r,y)});var e=l(G(o),2);g(e,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var t=l(e,2);a(t,{title:"Metal Performance Shaders (MPS)",local:"metal-performance-shaders-mps",headingTag:"h1"});var i=l(t,10);s(i,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBJTBBcGlwZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMjJzdGFibGUtZGlmZnVzaW9uLXYxLTUlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIpJTBBcGlwZSUyMCUzRCUyMHBpcGUudG8oJTIybXBzJTIyKSUwQSUwQSUyMyUyMCVFNSVBNiU4MiVFNiU5RSU5QyVFNiU4MiVBOCVFNyU5QSU4NCVFOCVBRSVBMSVFNyVBRSU5NyVFNiU5QyVCQSVFNSU4NiU4NSVFNSVBRCU5OCVFNSVCMCU4RiVFNCVCQSU4RSUyMDY0JTIwR0IlRUYlQkMlOEMlRTYlOEUlQTglRTglOEQlOTAlRTQlQkQlQkYlRTclOTQlQTglMEFwaXBlLmVuYWJsZV9hdHRlbnRpb25fc2xpY2luZygpJTBBJTBBcHJvbXB0JTIwJTNEJTIwJTIyYSUyMHBob3RvJTIwb2YlMjBhbiUyMGFzdHJvbmF1dCUyMHJpZGluZyUyMGElMjBob3JzZSUyMG9uJTIwbWFycyUyMiUwQWltYWdlJTIwJTNEJTIwcGlwZShwcm9tcHQpLmltYWdlcyU1QjAlNUQlMEFpbWFnZQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;stable-diffusion-v1-5/stable-diffusion-v1-5&quot;</span>)
pipe = pipe.to(<span class="hljs-string">&quot;mps&quot;</span>)
<span class="hljs-comment"># 如果您的计算机内存小于 64 GB,推荐使用</span>
pipe.enable_attention_slicing()
prompt = <span class="hljs-string">&quot;a photo of an astronaut riding a horse on mars&quot;</span>
image = pipe(prompt).images[<span class="hljs-number">0</span>]
image`,lang:"python",wrap:!1});var p=l(i,6);s(p,{code:"JTIwJTIwZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBJTBBJTIwJTIwcGlwZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMjJzdGFibGUtZGlmZnVzaW9uLXYxLTUlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIpLnRvKCUyMm1wcyUyMiklMEElMjAlMjBwaXBlLmVuYWJsZV9hdHRlbnRpb25fc2xpY2luZygpJTBBJTBBJTIwJTIwcHJvbXB0JTIwJTNEJTIwJTIyYSUyMHBob3RvJTIwb2YlMjBhbiUyMGFzdHJvbmF1dCUyMHJpZGluZyUyMGElMjBob3JzZSUyMG9uJTIwbWFycyUyMiUwQSUyMCUyMCUyMyUyMCVFNSVBNiU4MiVFNiU5RSU5QyUyMFB5VG9yY2glMjAlRTclODklODglRTYlOUMlQUMlRTYlOTglQUYlMjAxLjEzJUVGJUJDJThDJUU4JUJGJTlCJUU4JUExJThDJUU5JUE2JTk2JUU2JUFDJUExJTIyJUU5JUEyJTg0JUU3JTgzJUFEJTIyJUU0JUJDJUEwJUU5JTgwJTkyJTBBJTJCJTIwXyUyMCUzRCUyMHBpcGUocHJvbXB0JTJDJTIwbnVtX2luZmVyZW5jZV9zdGVwcyUzRDEpJTBBJTBBJTIwJTIwJTIzJTIwJUU5JUEyJTg0JUU3JTgzJUFEJUU0JUJDJUEwJUU5JTgwJTkyJUU1JTkwJThFJUVGJUJDJThDJUU3JUJCJTkzJUU2JTlFJTlDJUU0JUI4JThFJTIwQ1BVJTIwJUU4JUFFJUJFJUU1JUE0JTg3JUU0JUI4JThBJUU3JTlBJTg0JUU3JUJCJTkzJUU2JTlFJTlDJUU1JThDJUI5JUU5JTg1JThEJUUzJTgwJTgyJTBBJTIwJTIwaW1hZ2UlMjAlM0QlMjBwaXBlKHByb21wdCkuaW1hZ2VzJTVCMCU1RA==",highlighted:` from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(&quot;stable-diffusion-v1-5/stable-diffusion-v1-5&quot;).to(&quot;mps&quot;)
pipe.enable_attention_slicing()
prompt = &quot;a photo of an astronaut riding a horse on mars&quot;
# 如果 PyTorch 版本是 1.13,进行首次&quot;预热&quot;传递
<span class="hljs-addition">+ _ = pipe(prompt, num_inference_steps=1)</span>
# 预热传递后,结果与 CPU 设备上的结果匹配。
image = pipe(prompt).images[0]`,lang:"diff",wrap:!1});var n=l(p,2);a(n,{title:"故障排除",local:"故障排除",headingTag:"h2"});var U=l(n,4);a(U,{title:"注意力切片",local:"注意力切片",headingTag:"h3"});var J=l(U,6);s(J,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBaW1wb3J0JTIwdG9yY2glMEElMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMjJzdGFibGUtZGlmZnVzaW9uLXYxLTUlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYlMkMlMjB2YXJpYW50JTNEJTIyZnAxNiUyMiUyQyUyMHVzZV9zYWZldGVuc29ycyUzRFRydWUpLnRvKCUyMm1wcyUyMiklMEFwaXBlbGluZS5lbmFibGVfYXR0ZW50aW9uX3NsaWNpbmcoKQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline
<span class="hljs-keyword">import</span> torch
pipeline = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;stable-diffusion-v1-5/stable-diffusion-v1-5&quot;</span>, torch_dtype=torch.float16, variant=<span class="hljs-string">&quot;fp16&quot;</span>, use_safetensors=<span class="hljs-literal">True</span>).to(<span class="hljs-string">&quot;mps&quot;</span>)
pipeline.enable_attention_slicing()`,lang:"py",wrap:!1});var c=l(J,4);a(c,{title:"批量推理",local:"批量推理",headingTag:"h3"});var M=l(c,4);b(M,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/optimization/mps.md"}),R(2),T(d,o),V()}export{E as component};

Xet Storage Details

Size:
8.27 kB
·
Xet hash:
1ddfb512e345a99b824698c012db6cf572c0113062131ffcf43eb27b8dcafbae

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.