Buckets:

mishig's picture
download
raw
19 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Tổng quan&quot;,&quot;local&quot;:&quot;overview&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Lộ trình khởi đầu&quot;,&quot;local&quot;:&quot;starter-path&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Kỹ thuật tối ưu&quot;,&quot;local&quot;:&quot;optimization-techniques&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/>
<link href="/docs/diffusers/main/en/_app/immutable/entry/start.B6roO9Zr.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/CjYFLaCl.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/Cc4T7sti.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/entry/app.CxxEVG8A.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/C8F28shN.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/BTnLXsn-.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/DnVIJfC5.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/DsnmJJEf.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/nodes/0.CmHT0Edy.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/C7Ky3Ped.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/nodes/10.B5TmysUP.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/D2YP2_0L.js" rel="modulepreload">
<!--h94dja--><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Overview&quot;,&quot;local&quot;:&quot;overview&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Starter path&quot;,&quot;local&quot;:&quot;starter-path&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Optimization techniques&quot;,&quot;local&quot;:&quot;optimization-techniques&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/><!---->
<link href="/docs/diffusers/main/en/_app/immutable/assets/0.tn0RQdqM.css" rel="modulepreload"> <!--[--><!--[0--><!--[--><!--[0--><!--[--><p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"><div dir="ltr" class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----></span> <span dir="auto">Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg><!----></button></div> <!--[-1--><!--]--></div><!----> <!--[0--><h1 class="relative group"><a id="overview" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#overview"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Tổng quan<!----></span></h1><!--]--><!----> <p>Việc suy luận mô hình khuếch tán (diffusion) tốn nhiều tài nguyên tính toán, và bạn thường phải chạy <a href="/docs/diffusers/main/vi/api/pipelines/overview#diffusers.DiffusionPipeline">DiffusionPipeline</a> nhiều lần trước khi hài lòng với kết quả. Trang này cung cấp cái nhìn tổng quan về các kỹ thuật tối ưu hóa chính của Diffusers, chúng hoạt động như thế nào và khi nào nên sử dụng chúng.</p> <!--[1--><h2 class="relative group"><a id="starter-path" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#starter-path"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Lộ trình khởi đầu<!----></span></h2><!--]--><!----> <p>Khi model vừa trên một GPU, hãy bắt đầu với cấu hình tải cơ sở này. Đặt <code>dtype</code> và đặt pipeline trên một accelerator. Chỉ sử dụng model CPU offload khi bộ nhớ bị hạn chế. Bạn cũng có thể tăng tốc suy luận bằng cách giảm số bước hoặc dùng một scheduler nhanh hơn.</p> <p>Khi bạn bỏ qua <code>dtype</code>, Diffusers sẽ nạp các thành phần ở <code>float32</code>. Hãy truyền <code>dtype=torch.bfloat16</code> (hoặc <code>torch.float16</code> nếu bfloat16 không được hỗ trợ), sau đó đặt pipeline lên bộ tăng tốc bằng <code>pipeline.to("cuda")</code>.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Đã sao chép</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
<span class="hljs-string">&quot;stabilityai/stable-diffusion-xl-base-1.0&quot;</span>,
dtype=torch.bfloat16,
)
pipeline.to(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-comment"># or &quot;mps&quot;, &quot;xpu&quot;</span>
prompt = <span class="hljs-string">&quot;&quot;&quot;
cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California
highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain
&quot;&quot;&quot;</span>
pipeline(prompt).images[<span class="hljs-number">0</span>]<!----></pre></div><!----> <p>Nếu pipeline không vừa, hoặc bộ nhớ đang hạn chế, hãy gọi <a href="/docs/diffusers/main/vi/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload">enable_model_cpu_offload()</a> thay vì giữ mọi thứ trên GPU. Hàm này đặt model đang hoạt động lên GPU và giữ các thành phần khác trên CPU.</p> <p>Bỏ qua khi mô hình vừa đủ bộ nhớ. Việc offload sẽ chậm hơn khi bạn không cần đến nó.</p> <p>Để biết thêm các tùy chọn offloading, hãy xem <a href="./memory#offloading">Giảm mức sử dụng bộ nhớ</a>.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Đã sao chép</div><!----></button><!----></div> <pre class="language-py "><!---->pipeline = DiffusionPipeline.from_pretrained(
<span class="hljs-string">&quot;stabilityai/stable-diffusion-xl-base-1.0&quot;</span>,
dtype=torch.bfloat16,
)
pipeline.enable_model_cpu_offload()<!----></pre></div><!----> <p>Giảm độ trễ bằng cách sử dụng ít <code>num_inference_steps</code> hơn hoặc một trình lập lịch nhanh hơn như <a href="/docs/diffusers/main/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler">DPMSolverMultistepScheduler</a>. Điều đó thường giúp tăng tốc độ tạo ảnh nhưng có thể làm giảm chất lượng hình ảnh so với một trình lập lịch chậm hơn, chất lượng cao hơn. Xem <a href="#optimization-techniques">Các kỹ thuật tối ưu hóa</a> bên dưới để biết thêm các kỹ thuật tăng tốc.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Đã sao chép</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">import</span> time
<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DPMSolverMultistepScheduler
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)
start_time = time.perf_counter()
image = pipeline(prompt, num_inference_steps=<span class="hljs-number">25</span>).images[<span class="hljs-number">0</span>]
end_time = time.perf_counter()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Image generation took <span class="hljs-subst">{end_time - start_time:<span class="hljs-number">.3</span>f}</span> seconds&quot;</span>)<!----></pre></div><!----> <!--[1--><h2 class="relative group"><a id="optimization-techniques" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#optimization-techniques"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Kỹ thuật tối ưu<!----></span></h2><!--]--><!----> <p>Khi đường dẫn khởi đầu không đủ, hãy sử dụng các kỹ thuật sau. Nếu suy luận quá chậm, hãy bắt đầu với <code>torch.compile</code>, bộ nhớ đệm hoặc các backend chú ý. Nếu bạn hết bộ nhớ, hãy bắt đầu với việc offload hoặc lượng tử hóa.</p> <p>Suy luận nhanh hơn:</p> <ul><li><a href="./fp16#torchcompile">torch.compile</a> — Biên dịch UNet, transformer hoặc VAE thành các kernel tối ưu.</li> <li><a href="./fp16#regional-compilation">Biên dịch theo vùng</a> — Biên dịch các khối lặp lại để giảm độ trễ khởi động lạnh của <code>torch.compile</code> và tái sử dụng các sản phẩm đã biên dịch.</li> <li><a href="./cache">Caching</a> — Tái sử dụng các giá trị trung gian giữa các bước khử nhiễu khi bạn muốn tăng tốc độ và có thể chấp nhận tốn thêm bộ nhớ.</li> <li><a href="./attention_backends">Các backend Attention</a> — Thay thế các cài đặt attention của Diffusers thông qua một API thống nhất khi attention là nút thắt cổ chai.</li> <li><a href="./fp16#kernels">Kernels</a> — Nạp các kernel tính toán tối ưu từ Hub (attention và các op CUDA tùy chỉnh như RMSNorm hoặc RoPE) khi bạn cần tăng tốc cụ thể cho phần cứng vượt ra ngoài khả năng của PyTorch mặc định.</li></ul> <p>Ít bộ nhớ hơn:</p> <ul><li><a href="./memory#offloading">Offloading</a> — Di chuyển các mô hình hoặc lớp không hoạt động sang CPU bằng cách offloading CPU, mô hình hoặc nhóm.</li> <li><a href="../quantization/overview">Lượng tử hóa</a> — Nạp các trọng số nhỏ hơn để giảm bộ nhớ (một số backend cũng tăng tốc suy luận). <a href="../quantization/gguf">GGUF</a> là điểm khởi đầu phổ biến.</li> <li><a href="./memory#vae-slicing">VAE slicing</a> và <a href="./memory#vae-tiling">VAE tiling</a> — Giải mã các lô lớn hoặc ảnh độ phân giải cao theo từng phần để giảm bộ nhớ đỉnh.</li></ul> <p>Cả hai:</p> <ul><li><a href="./speed-memory-optims">Lượng tử hóa, biên dịch và chuyển tải</a> — Kết hợp lượng tử hóa, <code>torch.compile</code> và chuyển tải khi một kỹ thuật không đủ.</li></ul> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/diffusers/blob/main/docs/source/en/optimization/overview.md" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg><!----> <span><span class="underline">Update</span> on GitHub</span></a><!----> <p></p><!--]--><!----><!--]--><!--]--><!--]--> <!--[-1--><!--]--><!--]-->
<script>
{
__sveltekit_kft2r9 = {
base: "/docs/diffusers/main/en",
assets: "/docs/diffusers/main/en"
};
const element = document.currentScript.parentElement;
Promise.all([
import("/docs/diffusers/main/en/_app/immutable/entry/start.B6roO9Zr.js"),
import("/docs/diffusers/main/en/_app/immutable/entry/app.CxxEVG8A.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 10],
data: [null,null],
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
19 kB
·
Xet hash:
bde5a6342481f88edff7b092da2a10bdae522065540bca4af92088a4d76201ea

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