Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"Philosophie","local":"philosophy","sections":[{"title":"Privilégier l'ergonomie à la performance","local":"usability-over-performance","sections":[],"depth":2},{"title":"Simple, cuit à point","local":"simple-over-easy","sections":[],"depth":2},{"title":"Abstraction modifiable et conviviale pour les contributeurs","local":"tweakable-contributor-friendly-over-abstraction","sections":[],"depth":2},{"title":"Détails de la philosophie de conception","local":"design-philosophy-in-details","sections":[{"title":"Pipelines","local":"pipelines","sections":[],"depth":3},{"title":"Diffuseurs modulaires","local":"modular-diffusers","sections":[],"depth":3},{"title":"Modèles","local":"models","sections":[],"depth":3},{"title":"Planificateurs","local":"schedulers","sections":[],"depth":3}],"depth":2}],"depth":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/5.BaK0t02u.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/D2YP2_0L.js" rel="modulepreload"> | |
| <!--80qojn--><meta name="hf:doc:metadata" content="{"title":"Philosophy","local":"philosophy","sections":[{"title":"Usability over Performance","local":"usability-over-performance","sections":[],"depth":2},{"title":"Simple over easy","local":"simple-over-easy","sections":[],"depth":2},{"title":"Tweakable, contributor-friendly over abstraction","local":"tweakable-contributor-friendly-over-abstraction","sections":[],"depth":2},{"title":"Design Philosophy in Details","local":"design-philosophy-in-details","sections":[{"title":"Pipelines","local":"pipelines","sections":[],"depth":3},{"title":"Modular Diffusers","local":"modular-diffusers","sections":[],"depth":3},{"title":"Models","local":"models","sections":[],"depth":3},{"title":"Schedulers","local":"schedulers","sections":[],"depth":3}],"depth":2}],"depth":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="philosophy" 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="#philosophy"><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><!---->Philosophie<!----></span></h1><!--]--><!----> <p>🧨 Diffusers fournit des modèles de diffusion préentraînés <strong>de pointe</strong> sur plusieurs modalités. | |
| Son objectif est de servir de <strong>boîte à outils modulaire</strong> pour l'inférence et l'entraînement.</p> <p>Nous visons à créer une bibliothèque qui résistera à l'épreuve du temps et prenons donc très au sérieux la conception de l'API.</p> <p>En résumé, Diffusers est conçu pour être une extension naturelle de PyTorch. Par conséquent, la plupart de nos choix de conception reposent sur les <a href="https://pytorch.org/docs/stable/community/design.html#pytorch-design-philosophy" rel="nofollow">principes de conception de PyTorch</a>. Passons en revue les plus importants :</p> <!--[1--><h2 class="relative group"><a id="usability-over-performance" 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="#usability-over-performance"><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><!---->Privilégier l'ergonomie à la performance<!----></span></h2><!--]--><!----> <ul><li>Bien que Diffusers intègre de nombreuses fonctionnalités d’optimisation des performances (voir <a href="../optimization/overview">Optimiser et mettre à l’échelle</a>), les modèles sont toujours chargés avec la plus haute précision et la plus faible optimisation. Par conséquent, par défaut, les pipelines de diffusion sont toujours instanciés sur CPU avec une précision float32, sauf si l’utilisateur en définit autrement. Cela garantit une utilisabilité sur différentes plateformes et accélérateurs et signifie qu’aucune installation complexe n’est requise pour exécuter la bibliothèque.</li> <li>Diffusers vise à être un package <strong>léger</strong> et a donc très peu de dépendances obligatoires, mais de nombreuses dépendances optionnelles qui peuvent améliorer les performances (telles que <code>accelerate</code>, <code>safetensors</code>, <code>onnx</code>, etc…). Nous nous efforçons de garder la bibliothèque aussi légère que possible afin qu’elle puisse être ajoutée sans grande préoccupation en tant que dépendance d’autres packages.</li> <li>Diffusers privilégie un code simple et auto-explicatif plutôt qu'un code condensé et « magique ». Cela signifie que les syntaxes abrégées, telles que les fonctions lambda, ainsi que les opérateurs avancés de PyTorch sont souvent indésirables.</li></ul> <!--[1--><h2 class="relative group"><a id="simple-over-easy" 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="#simple-over-easy"><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><!---->Simple, cuit à point<!----></span></h2><!--]--><!----> <p>Comme le souligne PyTorch, <strong>l’explicite est préférable à l’implicite</strong> et <strong>le simple est préférable au complexe</strong>. Cette philosophie de conception se reflète dans plusieurs parties de la bibliothèque :</p> <ul><li>Nous suivons l’API de PyTorch avec des méthodes comme <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.to"><code>DiffusionPipeline.to</code></a> pour laisser à l’utilisateur la gestion des appareils.</li> <li>Il est préférable de lever des messages d’erreur concis plutôt que de corriger silencieusement une entrée erronée. Diffusers vise à enseigner à l’utilisateur, plutôt qu’à rendre la bibliothèque aussi facile à utiliser que possible.</li> <li>La logique complexe du modèle par rapport à celle du planificateur est exposée plutôt que gérée de manière magique en interne. Les planificateurs/échantillonneurs sont séparés des modèles de diffusion, avec des dépendances minimales entre eux. Cela oblige l'utilisateur à écrire la boucle de débruitage déroulée. Toutefois, cette séparation facilite le débogage et offre à l'utilisateur un meilleur contrôle pour adapter le processus de débruitage ou remplacer les modèles de diffusion ou les planificateurs.</li> <li>Les composants entraînés séparément du pipeline de diffusion, <em>par exemple</em> l’encodeur de texte, l’unet et l’auto-encodeur variationnel, disposent chacun de leur propre classe de modèle. Cela oblige l’utilisateur à gérer l’interaction entre les différents composants du modèle, et le format de sérialisation sépare les composants du modèle dans des fichiers distincts. Toutefois, cela facilite le débogage et la personnalisation. L’entraînement DreamBooth ou Textual Inversion est très simple grâce à la capacité de Diffusers à séparer les composants individuels du pipeline de diffusion.</li></ul> <!--[1--><h2 class="relative group"><a id="tweakable-contributor-friendly-over-abstraction" 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="#tweakable-contributor-friendly-over-abstraction"><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><!---->Abstraction modifiable et conviviale pour les contributeurs<!----></span></h2><!--]--><!----> <p>Pour une grande partie de la bibliothèque, Diffusers adopte un principe de conception important de la <a href="https://github.com/huggingface/transformers" rel="nofollow">bibliothèque Transformers</a>, qui consiste à privilégier le code copié-collé plutôt que des abstractions hâtives. Ce principe de conception est très tranché et contraste fortement avec des principes de conception populaires tels que <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="nofollow">Ne vous répétez pas (DRY)</a>. | |
| En bref, tout comme Transformers le fait pour les fichiers de modélisation, Diffusers préfère maintenir un niveau d'abstraction extrêmement bas et un code très autonome pour les pipelines et les planificateurs. | |
| Les fonctions, les longs blocs de code et même les classes peuvent être copiés dans plusieurs fichiers, ce qui peut sembler au premier abord un choix de conception négligé et de mauvaise qualité, rendant la bibliothèque intenable. <strong>Cependant</strong>, cette conception s'est avérée extrêmement réussie pour Transformers et a beaucoup de sens pour les bibliothèques d'apprentissage automatique open source et communautaires, car :</p> <ul><li>Le Machine Learning est un domaine en évolution extrêmement rapide, dans lequel les paradigmes, les architectures de modèles et les algorithmes changent constamment, ce qui rend donc très difficile la définition d’abstractions de code pérennes.</li> <li>Les praticiens du Machine Learning apprécient de pouvoir ajuster rapidement du code existant pour l’idéation et la recherche, et préfèrent donc un code autonome à un code contenant de nombreuses abstractions.</li> <li>Les bibliothèques open source s’appuient sur les contributions de la communauté et doivent donc construire une bibliothèque facile à laquelle contribuer. Plus le code est abstrait, plus il y a de dépendances, plus il est difficile à lire et à faire évoluer. Les contributeurs cessent simplement de contribuer aux bibliothèques très abstraites par peur de casser des fonctionnalités vitales. Si contribuer à une bibliothèque ne peut pas casser d’autres code fondamentaux, non seulement c’est plus accueillant pour les nouveaux contributeurs potentiels, mais c’est aussi plus facile à examiner et à faire évoluer sur plusieurs parties en parallèle.</li></ul> <p>Chez Hugging Face, nous appelons cette conception la <strong>politique du fichier unique</strong>, ce qui signifie que la quasi-totalité du code d'une classe donnée doit être écrite dans un fichier unique et autonome. Pour en savoir plus sur cette philosophie, vous pouvez consulter <a href="https://huggingface.co/blog/transformers-design-philosophy" rel="nofollow">ce billet de blog</a>.</p> <p>Dans Diffusers, nous appliquons cette philosophie aux pipelines, aux planificateurs et aux modèles. Certains modèles plus anciens antérieurs à cette convention sont conservés tels quels ; toutes les nouvelles architectures de modèles sont regroupées dans des fichiers autonomes. Consultez la section <a href="#models">Models</a> ci-dessous pour plus de détails.</p> <p>Parfait, vous devriez maintenant avoir une idée générale de la raison pour laquelle 🧨 Diffusers est conçu ainsi 🤗. | |
| Nous cherchons à appliquer ces principes de conception de manière cohérente dans toute la bibliothèque. Néanmoins, il existe quelques exceptions mineures à la philosophie ou certains choix de conception malheureux. Si vous avez des retours concernant la conception, nous serions ❤️ ravis de les entendre <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feedback.md&title=" rel="nofollow">directement sur GitHub</a>.</p> <!--[1--><h2 class="relative group"><a id="design-philosophy-in-details" 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="#design-philosophy-in-details"><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><!---->Détails de la philosophie de conception<!----></span></h2><!--]--><!----> <p>Passons maintenant aux détails concrets de la philosophie de conception. Diffusers vous offre deux façons de composer des <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">modèles</a> et des <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow">schedulers</a> en un workflow exécutable : les <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines" rel="nofollow">pipelines</a> standard, qui sont monolithiques avec une tâche par classe de pipeline, et Modular Diffusers, qui est composable et basé sur des blocs. Les sections ci-dessous couvrent successivement les pipelines, les pipelines modulaires, les modèles et les schedulers.</p> <!--[2--><h3 class="relative group"><a id="pipelines" 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="#pipelines"><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><!---->Pipelines<!----></span></h3><!--]--><!----> <p>Les pipelines, qu’ils soient standard ou modulaires, sont destinés uniquement à l’inférence. Ils sont conçus pour être faciles à utiliser (ils ne suivent donc pas à 100 % le principe <a href="#simple-over-easy">Simple over easy</a>) : lisibles, explicites, faciles à ajuster, et à considérer avant tout comme des exemples d’utilisation des <a href="#models">modèles</a> et des <a href="#schedulers">schedulers</a>. Ils ne sont pas exhaustifs en termes de fonctionnalités. Pour construire des interfaces utilisateur complètes sur la base de Diffusers, utilisez <a href="../modular_diffusers/overview">Modular Diffusers</a>.</p> <p>Les principes de conception suivants sont appliqués :</p> <ul><li>Les pipelines suivent la politique du fichier unique. Tous les pipelines se trouvent dans des répertoires individuels sous src/diffusers/pipelines. Un dossier de pipeline correspond à un article, projet ou release de diffusion. Plusieurs fichiers de pipeline peuvent être regroupés dans un même dossier de pipeline, comme c’est le cas pour <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines/stable_diffusion" rel="nofollow"><code>src/diffusers/pipelines/stable-diffusion</code></a>. Si des pipelines partagent des fonctionnalités similaires, on peut utiliser le <a href="https://github.com/huggingface/diffusers/blob/125d783076e5bd9785beb05367a2d2566843a271/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py#L251" rel="nofollow">mécanisme # Copied from</a>.</li> <li>Tous les pipelines héritent de <a href="/docs/diffusers/main/fr/api/pipelines/overview#diffusers.DiffusionPipeline">DiffusionPipeline</a>.</li> <li>Chaque pipeline est composé de différents composants de modèle et de planificateur, documentés dans le fichier <a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/model_index.json" rel="nofollow"><code>model_index.json</code></a>, accessibles sous le même nom en tant qu'attributs du pipeline et partageables entre les pipelines à l'aide de la fonction <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.components"><code>DiffusionPipeline.components</code></a>.</li> <li>Chaque pipeline doit être chargeable via la fonction <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained"><code>DiffusionPipeline.from_pretrained</code></a>.</li> <li>Chaque pipeline doit disposer d'une et d'une seule méthode pour l'exécuter, à savoir la méthode <code>__call__</code>. La nomenclature des arguments de <code>__call__</code> doit être cohérente entre tous les pipelines.</li> <li>Les pipelines doivent être nommés d'après la tâche qu'ils sont censés résoudre.</li></ul> <!--[2--><h3 class="relative group"><a id="modular-diffusers" 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="#modular-diffusers"><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><!---->Diffuseurs modulaires<!----></span></h3><!--]--><!----> <p>Modular Diffusers est l’alternative composable aux pipelines standard. Vous construisez un flux de travail à partir de <em>blocs de pipeline</em> réutilisables que vous pouvez combiner, assembler, remplacer et partager. Les pipelines standard sont des exemples de référence non contraignants sur l’utilisation des modèles et des planificateurs. Modular Diffusers est la voie recommandée pour construire des interfaces utilisateur complètes sur la base de Diffusers, et pour permettre à la communauté de créer et de partager de nouveaux pipelines de manière décentralisée.</p> <p>Les principes de conception suivants sont appliqués :</p> <ul><li>Les pipelines modulaires suivent la politique du fichier unique. Chacun est situé dans son propre dossier sous <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/modular_pipelines" rel="nofollow">src/diffusers/modular_pipelines/</a>, et le dossier répartit le flux de travail sur un fichier par étape : <code>encoders.py</code>, <code>before_denoise.py</code>, <code>denoise.py</code> et <code>decoders.py</code>. Deux fichiers supplémentaires complètent le pipeline. <code>modular_blocks_<model>.py</code> assemble les étapes, et <code>modular_pipeline.py</code> définit la sous-classe <a href="/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline">ModularPipeline</a> propre à chaque modèle. Les pipelines modulaires n’importent pas les uns des autres.</li> <li>Each modular pipeline is defined as a set of <a href="/docs/diffusers/main/fr/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks">ModularPipelineBlocks</a>. Leaf blocks live in the stage files (<code>encoders.py</code>, <code>before_denoise.py</code>, <code>denoise.py</code>, <code>decoders.py</code>), and <code>modular_blocks_<model>.py</code> assembles them into the full workflow with container classes like <a href="/docs/diffusers/main/fr/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks">SequentialPipelineBlocks</a> and <a href="/docs/diffusers/main/fr/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a>. This splits apart two concepts that <code>DiffusionPipeline combines</code>. A block is a pure definition. It declares inputs, outputs, and component dependencies, but holds no weights and can’t run. A <a href="/docs/diffusers/main/fr/api/modular_diffusers/pipeline#diffusers.ModularPipeline">ModularPipeline</a>, created with <code>.init_pipeline(repo_id)</code>, is the runnable counterpart. Keeping blocks stateless and weight-free is what makes them freely composable, swappable, and shareable across workflows.</li> <li>Pour prendre en charge une nouvelle tâche, écrivez les blocs spécifiques à la tâche, composez-les avec les blocs existants et enregistrez le flux de travail dans <code>_workflow_map</code> sur l’assemblage de blocs de niveau supérieur. Un seul <code>ModularPipeline</code> peut prendre en charge de nombreux flux de travail, tels que text-to-image, image-to-image et inpainting, tandis qu’un <code>DiffusionPipeline</code> n’exécute qu’un seul flux de travail.</li></ul> <p>Consultez la <a href="../modular_diffusers/overview">documentation de Modular Diffusers</a> pour le guide complet de conception et d'utilisation.</p> <!--[2--><h3 class="relative group"><a id="models" 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="#models"><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><!---->Modèles<!----></span></h3><!--]--><!----> <p>Les modèles sont conçus comme des boîtes à outils configurables, qui constituent des extensions naturelles de la classe <a href="https://pytorch.org/docs/stable/generated/torch.nn.Module.html" rel="nofollow">Module de PyTorch</a>. Ils doivent respecter la <em>politique du fichier unique</em>. Certains modèles plus anciens antérieurs à cette convention sont conservés en l’état. Considérez-les comme des exceptions de legacy, et non comme des modèles à suivre pour les nouveaux modèles. Par exemple, la classe <a href="/docs/diffusers/main/fr/api/models/unet2d-cond#diffusers.UNet2DConditionModel">UNet2DConditionModel</a> d’origine était utilisée pour plusieurs variations de UNet.</p> <p>Les principes de conception suivants sont appliqués :</p> <ul><li>Chaque type d’architecture de modèle se trouve dans son propre dossier sous <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">src/diffusers/models</a>, par exemple <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models/transformers" rel="nofollow">transformers/</a>, <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models/autoencoders" rel="nofollow">autoencoders/</a> ou <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models/unets" rel="nofollow">unets/</a>. Chaque famille de modèles possède son propre fichier dans ce dossier, comme <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_flux.py" rel="nofollow">transformer_flux.py</a> et <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_wan.py" rel="nofollow">transformer_wan.py</a>.</li> <li>Les modèles suivent la politique du fichier unique. Chaque fichier de modèle doit être autonome, à l'exception d'un petit nombre de modules standard que chaque modèle utilise de manière identique, tels que les embeddings de timestep et les couches de normalisation. Importez-les depuis <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/embeddings.py" rel="nofollow">embeddings.py</a> et <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/normalization.py" rel="nofollow">normalization.py</a>.</li> <li>Les modèles visent à exposer la complexité, tout comme la classe <code>Module</code> de PyTorch, et à fournir des messages d'erreur clairs.</li> <li>Tous les modèles héritent de <code>ModelMixin</code> et <code>ConfigMixin</code>.</li> <li>Les modèles peuvent être optimisés pour les performances lorsque cela ne nécessite pas de modifications majeures du code, préserve la compatibilité ascendante et procure un gain significatif en mémoire ou en calcul.</li> <li>Les modèles doivent par défaut avoir la plus haute précision et le réglage de performance le plus bas.</li> <li>Pour intégrer une nouvelle architecture de modèle similaire à une existante, copiez le fichier existant comme point de départ et adaptez-le. Utilisez les annotations <a href="./contribution#copied-from-mechanism"><code># Copied from</code></a> sur les couches qui restent identiques afin que <code>make fix-copies</code> les maintienne synchronisées.</li></ul> <!--[2--><h3 class="relative group"><a id="schedulers" 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="#schedulers"><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><!---->Planificateurs<!----></span></h3><!--]--><!----> <p>Les Schedulers sont chargés de guider le processus de débruitage lors de l'inférence ainsi que de définir un calendrier de bruit pour l'entraînement. Ils sont conçus sous forme de classes individuelles avec des fichiers de configuration chargeables et suivent strictement la <strong>politique du fichier unique</strong>.</p> <p>Les principes de conception suivants sont appliqués :</p> <ul><li>Tous les planificateurs se trouvent dans <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow"><code>src/diffusers/schedulers</code></a>.</li> <li>Les Schedulers ne sont <strong>pas</strong> autorisés à importer depuis les fichiers utils volumineux et doivent rester très autonomes.</li> <li>Un fichier Python de planificateur correspond à un algorithme de planificateur (tel qu'il peut être défini dans un article).</li> <li>Si les planificateurs partagent des fonctionnalités similaires, nous pouvons utiliser le mécanisme <code># Copied from</code>.</li> <li>Les planificateurs héritent tous de <code>SchedulerMixin</code> et de <code>ConfigMixin</code>.</li> <li>Les planificateurs peuvent être facilement remplacés à l'aide de la méthode <a href="../api/configuration#diffusers.ConfigMixin.from_config"><code>ConfigMixin.from_config</code></a>, comme expliqué en détail <a href="../using-diffusers/schedulers">ici</a>.</li> <li>Chaque planificateur doit disposer d'une fonction <code>set_num_inference_steps</code> et d'une fonction <code>step</code>. <code>set_num_inference_steps(...)</code> doit être appelé avant chaque processus de débruitage, <em>c'est-à-dire</em> avant l'appel de <code>step(...)</code>.</li> <li>Chaque planificateur expose les pas de temps à parcourir via l'attribut <code>timesteps</code>, qui est un tableau des pas de temps pour lesquels le modèle sera appelé.</li> <li>La fonction <code>step(...)</code> prend en entrée la sortie prédite du modèle et l'échantillon « actuel » (x_t), puis renvoie l'échantillon « précédent », légèrement moins bruité (x_t-1).</li> <li>Compte tenu de la complexité des planificateurs de diffusion, la fonction <code>step</code> n’expose pas toute cette complexité et peut apparaître comme une sorte de « boîte noire ».</li> <li>Dans presque tous les cas, les nouveaux planificateurs doivent être implémentés dans un nouveau fichier de planification.</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/conceptual/philosophy.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, 5], | |
| data: [null,null], | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 37.7 kB
- Xet hash:
- 1492b693c51d9beefe100e3f0d573d109ee33f3539f5f96b11347e3a36d06e51
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.