Buckets:

hf-doc-build/doc / diffusers /main /es /training /distributed_inference.html
mishig's picture
download
raw
10.9 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Inferencia distribuida&quot;,&quot;local&quot;:&quot;distributed-inference&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Elegir una estrategia&quot;,&quot;local&quot;:&quot;choosing-a-strategy&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/>
<link href="/docs/diffusers/main/en/_app/immutable/entry/start.0S0_iEoG.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/I9eooN77.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/Bupkjr9f.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/entry/app.CPdOxCbw.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/CyvZ3FS5.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/l0QnnOED.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.DteTvmQZ.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/CoSrdQax.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/nodes/368.MZuJGICn.js" rel="modulepreload">
<link href="/docs/diffusers/main/en/_app/immutable/chunks/DSPDl1gz.js" rel="modulepreload">
<!--el5ux9--><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Distributed inference&quot;,&quot;local&quot;:&quot;distributed-inference&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Choosing a strategy&quot;,&quot;local&quot;:&quot;choosing-a-strategy&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="distributed-inference" 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="#distributed-inference"><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><!---->Inferencia distribuida<!----></span></h1><!--]--><!----> <p>La inferencia distribuida divide la carga de trabajo entre varias GPU. Es útil para ajustar modelos más grandes en la memoria y para procesar más prompts a la vez.</p> <p>Diffusers admite cuatro estrategias. Cada una tiene su propia guía y esta página te ayuda a elegir una.</p> <!--[1--><h2 class="relative group"><a id="choosing-a-strategy" 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="#choosing-a-strategy"><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><!---->Elegir una estrategia<!----></span></h2><!--]--><!----> <p>Cada estrategia resuelve un problema diferente, por lo que elige una en función del recurso que te limite.</p> <table><thead><tr><th>Estrategia</th><th>Divisiones</th><th>Reduce</th><th>Latencia para un solo prompt</th><th>Mejor cuando</th></tr></thead><tbody><tr><td><a href="../optimization/data_parallelism">Paralelismo de datos</a></td><td>prompts entre réplicas</td><td>nada, ya que cada GPU mantiene una copia completa</td><td>sin cambios</td><td>el modelo ya cabe y tienes muchos prompts</td></tr><tr><td><a href="../optimization/device_map">device_map</a></td><td>componentes entre dispositivos</td><td>memoria de pesos</td><td>ligeramente peor</td><td>el modelo no cabe y el interconector es lento</td></tr><tr><td><a href="../optimization/context_parallelism">Paralelismo de contexto</a></td><td>la secuencia de entrada</td><td>memoria de activación</td><td>lower</td><td>las secuencias son largas, como imágenes de alta resolución o video</td></tr><tr><td><a href="../optimization/tensor_parallelism">Paralelismo de tensores</a></td><td>matrices de pesos</td><td>memoria de pesos</td><td>lower</td><td>los pesos de un componente no caben y el interconector es rápido</td></tr></tbody></table> <p>Algunas orientaciones prácticas:</p> <ul><li>Si el modelo ya cabe y tienes muchos prompts, usa paralelismo de datos. Escala el throughput con el número de GPUs sin tocar el modelo y deja la latencia de un solo prompt intacta. Configúralo con <a href="../optimization/data_parallelism#accelerate">Accelerate</a> o <a href="../optimization/data_parallelism#pytorch-distributed">PyTorch Distributed</a>.</li> <li>Si los pesos de un solo componente no caben, prueba primero con la paralelización de tensores, ya que reduce tanto la memoria como la latencia. La paralelización de tensores comunica en cada límite de bloque, por lo que necesita un interconexión rápida como NVLink. En PCIe, el tráfico por capa puede superar el cómputo que ahorra, y <code>device_map</code> se convierte en la mejor opción. <code>device_map</code> también maneja el caso en que los componentes son individualmente adecuados pero colectivamente demasiado grandes.</li> <li>Si el problema son las activaciones y no los pesos, usa el paralelismo de contexto. Esto ayuda con secuencias largas, como imágenes grandes y videos con muchos fotogramas. Elige un backend a partir de los benchmarks de la guía de <a href="../optimization/context_parallelism">Context parallelism</a>.</li> <li>Si tanto los pesos como la secuencia son demasiado grandes, Diffusers no puede aplicar la paralelización de tensores y de contexto al mismo modelo. <code>ParallelConfig</code> genera un error si se pasan ambas configuraciones, y <code>enable_parallelism</code> no se puede llamar una segunda vez en un modelo que ya esté paralelizado.</li></ul> <p>Las integraciones de la comunidad <a href="../optimization/xdit">xDiT</a> y <a href="../optimization/para_attn">ParaAttention</a> ofrecen sus propias implementaciones de paralelismo de contexto.</p> <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/training/distributed_inference.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_1qsdbwf = {
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.0S0_iEoG.js"),
import("/docs/diffusers/main/en/_app/immutable/entry/app.CPdOxCbw.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 368],
data: [null,null],
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
10.9 kB
·
Xet hash:
3f399739172f221b2b15883ac0d0ae699d0e5ef98150eba15694457a17205b09

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