Buckets:

hf-doc-build/doc / diffusers /main /fr /training /distributed_inference.html
mishig's picture
download
raw
11.2 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Inférence distribuée&quot;,&quot;local&quot;:&quot;distributed-inference&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Choisir une stratégie&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><!---->Inférence distribuée<!----></span></h1><!--]--><!----> <p>L’inférence distribuée répartit la charge de travail sur plusieurs GPU. Elle est utile pour faire tenir des modèles plus volumineux en mémoire et pour traiter davantage de prompts simultanément.</p> <p>Diffusers prend en charge quatre stratégies. Chacune dispose de son propre guide, et cette page vous aide à en choisir une.</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><!---->Choisir une stratégie<!----></span></h2><!--]--><!----> <p>Chaque stratégie résout un problème différent, choisissez donc celle qui correspond à la ressource qui vous limite.</p> <table><thead><tr><th>Stratégie</th><th>Splits</th><th>Réduit</th><th>Latence pour un seul prompt</th><th>Le plus adapté</th></tr></thead><tbody><tr><td><a href="../optimization/data_parallelism">Parallélisme de données</a></td><td>prompts entre les répliques</td><td>rien, car chaque GPU détient une copie complète</td><td>inchangé</td><td>le modèle tient déjà et vous avez de nombreux prompts</td></tr><tr><td><a href="../optimization/device_map">device_map</a></td><td>composants sur les différents appareils</td><td>mémoire des poids</td><td>légèrement moins bon</td><td>le modèle ne tient pas et l'interconnexion est lente</td></tr><tr><td><a href="../optimization/context_parallelism">Parallélisme de contexte</a></td><td>la séquence d'entrée</td><td>mémoire d'activation</td><td>lower</td><td>les séquences sont longues, comme des images haute résolution ou des vidéos</td></tr><tr><td><a href="../optimization/tensor_parallelism">Parallélisme de tenseurs</a></td><td>matrices de poids</td><td>mémoire des poids</td><td>lower</td><td>les poids d’un composant ne tiennent pas et l’interconnexion est rapide</td></tr></tbody></table> <p>Quelques conseils pratiques :</p> <ul><li>Si le modèle tient déjà en mémoire et que vous avez de nombreux prompts, utilisez le parallélisme de données. Il augmente le débit en fonction du nombre de GPU sans modifier le modèle, et il laisse la latence des prompts unitaires inchangée. Configurez-le avec <a href="../optimization/data_parallelism#accelerate">Accelerate</a> ou <a href="../optimization/data_parallelism#pytorch-distributed">PyTorch Distributed</a>.</li> <li>Si les poids d’un composant unique ne tiennent pas, essayez d’abord le parallélisme de tenseurs, car il réduit à la fois la mémoire et la latence. Le parallélisme de tenseurs communique à chaque frontière de bloc, il a donc besoin d’un interconnect rapide comme NVLink. Sur PCIe, le trafic par couche peut dépasser le calcul qu’il économise, et <code>device_map</code> devient alors le meilleur choix. <code>device_map</code> gère également le cas où les composants sont individuellement corrects mais collectivement trop volumineux.</li> <li>Si ce sont les activations, et non les poids, qui posent problème, utilisez le parallélisme de contexte. Cela est utile pour les séquences longues, comme les grandes images et les vidéos avec de nombreuses images. Choisissez un backend à partir des benchmarks du guide <a href="../optimization/context_parallelism">Context parallelism</a>.</li> <li>Si les poids et la séquence sont tous deux trop volumineux, Diffusers ne peut pas appliquer le parallélisme de tenseurs et le parallélisme de contexte au même modèle. <code>ParallelConfig</code> lève une erreur si vous passez les deux configurations, et <code>enable_parallelism</code> ne peut pas être appelé une seconde fois sur un modèle déjà parallélisé.</li></ul> <p>Les intégrations communautaires <a href="../optimization/xdit">xDiT</a> et <a href="../optimization/para_attn">ParaAttention</a> proposent leurs propres implémentations du parallélisme de contexte.</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:
11.2 kB
·
Xet hash:
bdba8ad9a927a0e639cab2131784031fb65a7d56b3559400a3edc976de8b9097

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