Buckets:

mishig's picture
download
raw
45.8 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Философия&quot;,&quot;local&quot;:&quot;philosophy&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Удобство в ущерб производительности&quot;,&quot;local&quot;:&quot;usability-over-performance&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Просто и легко&quot;,&quot;local&quot;:&quot;simple-over-easy&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Гибкая абстракция, удобная для контрибьюторов&quot;,&quot;local&quot;:&quot;tweakable-contributor-friendly-over-abstraction&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Детали философии проектирования&quot;,&quot;local&quot;:&quot;design-philosophy-in-details&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Пайплайны&quot;,&quot;local&quot;:&quot;pipelines&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Модульные Diffusers&quot;,&quot;local&quot;:&quot;modular-diffusers&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Модели&quot;,&quot;local&quot;:&quot;models&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Планировщики&quot;,&quot;local&quot;:&quot;schedulers&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&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/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="{&quot;title&quot;:&quot;Philosophy&quot;,&quot;local&quot;:&quot;philosophy&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Usability over Performance&quot;,&quot;local&quot;:&quot;usability-over-performance&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Simple over easy&quot;,&quot;local&quot;:&quot;simple-over-easy&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Tweakable, contributor-friendly over abstraction&quot;,&quot;local&quot;:&quot;tweakable-contributor-friendly-over-abstraction&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Design Philosophy in Details&quot;,&quot;local&quot;:&quot;design-philosophy-in-details&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Pipelines&quot;,&quot;local&quot;:&quot;pipelines&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Modular Diffusers&quot;,&quot;local&quot;:&quot;modular-diffusers&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Models&quot;,&quot;local&quot;:&quot;models&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Schedulers&quot;,&quot;local&quot;:&quot;schedulers&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&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="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><!---->Философия<!----></span></h1><!--]--><!----> <p>🧨 Diffusers предоставляет <strong>передовые</strong> предобученные диффузионные модели для различных модальностей.
Его цель — служить <strong>модульным инструментарием</strong> как для инференса, так и для обучения.</p> <p>Мы стремимся создать библиотеку, которая выдержит испытание временем, и поэтому очень серьёзно относимся к проектированию API.</p> <p>Если коротко, Diffusers создан как естественное расширение PyTorch. Поэтому большинство наших проектных решений основаны на <a href="https://pytorch.org/docs/stable/community/design.html#pytorch-design-philosophy" rel="nofollow">принципах проектирования PyTorch</a>. Рассмотрим самые важные из них:</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><!---->Удобство в ущерб производительности<!----></span></h2><!--]--><!----> <ul><li>Хотя Diffusers содержит множество встроенных функций для повышения производительности (см. <a href="../optimization/overview">Оптимизация и масштабирование</a>), модели всегда загружаются с наивысшей точностью и минимальной оптимизацией. Поэтому по умолчанию диффузионные пайплайны всегда создаются на CPU с точностью float32, если пользователь не определил иное. Это обеспечивает совместимость с различными платформами и ускорителями и означает, что для запуска библиотеки не требуется сложная установка.</li> <li>Diffusers стремится быть <strong>лёгким</strong> пакетом и поэтому имеет очень мало обязательных зависимостей, но много необязательных, которые могут улучшить производительность (например, <code>accelerate</code>, <code>safetensors</code>, <code>onnx</code> и т. д.). Мы стараемся сделать библиотеку максимально лёгкой, чтобы её можно было добавлять в зависимости других пакетов без лишних забот.</li> <li>Diffusers предпочитает простой, самодостаточный код сжатому «магическому» коду. Это означает, что сокращённый синтаксис, такой как lambda-функции, и продвинутые операторы PyTorch часто нежелательны.</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><!---->Просто и легко<!----></span></h2><!--]--><!----> <p>Как утверждает PyTorch, <strong>явное лучше неявного</strong> и <strong>простое лучше сложного</strong>. Эта философия дизайна отражена в нескольких частях библиотеки:</p> <ul><li>Мы следуем API PyTorch, предоставляя методы вроде <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.to"><code>DiffusionPipeline.to</code></a>, чтобы пользователь мог самостоятельно управлять устройствами.</li> <li>Предпочтительнее вызывать краткие сообщения об ошибках, чем молча исправлять неверный ввод. Diffusers стремится обучать пользователя, а не делать библиотеку максимально простой в использовании.</li> <li>Сложная логика взаимодействия модели и планировщика явно вынесена наружу, а не обрабатывается «магическим» образом внутри. Планировщики/сэмплеры отделены от диффузионных моделей и имеют минимальные взаимные зависимости. Это требует от пользователя самостоятельно написать развёрнутый цикл денойзинга. Однако такое разделение упрощает отладку и предоставляет пользователю больше контроля над адаптацией процесса денойзинга или заменой диффузионных моделей и планировщиков.</li> <li>Отдельно обученные компоненты конвейера диффузии, <em>например</em> текстовый энкодер, unet и вариационный автоэнкодер, имеют собственные классы моделей. Это требует от пользователя самостоятельно управлять взаимодействием между различными компонентами модели, а формат сериализации разделяет компоненты модели на разные файлы. Однако это упрощает отладку и кастомизацию. Обучение DreamBooth или Textual Inversion
очень простое благодаря возможности Diffusers разделять отдельные компоненты конвейера диффузии.</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><!---->Гибкая абстракция, удобная для контрибьюторов<!----></span></h2><!--]--><!----> <p>Во многих частях библиотеки Diffusers придерживается важного принципа проектирования, заимствованного из <a href="https://github.com/huggingface/transformers" rel="nofollow">библиотеки Transformers</a>: предпочтение отдаётся коду, скопированному из других мест, а не поспешным абстракциям. Этот принцип очень категоричен и резко контрастирует с популярными подходами, такими как <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="nofollow">«Не повторяйся» (DRY)</a>.
Короче говоря, так же как Transformers делает это для файлов моделирования, Diffusers стремится поддерживать крайне низкий уровень абстракции и максимально самодостаточный код для пайплайнов и планировщиков.
Функции, длинные блоки кода и даже классы могут дублироваться в нескольких файлах, что на первый взгляд может показаться неудачным и небрежным решением, делающим библиотеку непригодной для поддержки. <strong>Однако</strong> этот подход доказал свою высокую эффективность в Transformers и имеет большой смысл для открытых библиотек машинного обучения, развиваемых сообществом, потому что:</p> <ul><li>Machine Learning — это область, которая развивается чрезвычайно быстро: парадигмы, архитектуры моделей и алгоритмы постоянно меняются, что делает крайне сложным создание долговременных абстракций в коде.</li> <li>Практики машинного обучения ценят возможность быстро вносить изменения в существующий код для генерации идей и исследований, поэтому предпочитают самодостаточный код коду с множеством абстракций.</li> <li>Открытые библиотеки опираются на вклад сообщества, поэтому им необходимо создавать библиотеки, к которым легко вносить изменения. Чем абстрактнее код и чем больше зависимостей, тем сложнее его читать и тем труднее вносить в него изменения. Вкладчики просто перестают работать с чрезмерно абстрактными библиотеками из-за страха сломать критически важные функции. Если внесение изменений в библиотеку не может нарушить работу других фундаментальных частей кода, это не только привлекает новых потенциальных вкладчиков, но и упрощает ревью и параллельную работу над несколькими частями.</li></ul> <p>В Hugging Face мы называем такой подход <strong>политикой одного файла</strong>, что означает: почти весь код определённого класса должен быть написан в одном самодостаточном файле. Чтобы узнать больше о философии этого подхода, посмотрите <a href="https://huggingface.co/blog/transformers-design-philosophy" rel="nofollow">этот пост в блоге</a>.</p> <p>В Diffusers мы придерживаемся этой философии для пайплайнов, планировщиков и моделей. Некоторые старые модели предшествуют этому соглашению и сохраняются без изменений; все новые архитектуры моделей находятся в собственных самодостаточных файлах. Подробности см. в разделе <a href="#models">Models</a> ниже.</p> <p>Отлично, теперь вы в целом понимаете, почему 🧨 Diffusers устроен именно так 🤗.
Мы стараемся последовательно применять эти принципы проектирования во всей библиотеке. Тем не менее, существуют некоторые незначительные отклонения от философии или неудачные решения в дизайне. Если у вас есть отзывы о проектировании, мы будем ❤️ рады услышать их <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feedback.md&amp;title=" rel="nofollow">напрямую на 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><!---->Детали философии проектирования<!----></span></h2><!--]--><!----> <p>Теперь перейдём к деталям философии проектирования. Diffusers предлагает два способа компоновки <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">моделей</a> и <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow">планировщиков</a> в рабочий процесс: стандартные <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines" rel="nofollow">пайплайны</a>, которые являются монолитными и выполняют одну задачу на класс пайплайна, и Modular Diffusers, который является модульным и основан на блоках. В разделах ниже последовательно рассматриваются пайплайны, модульные пайплайны, модели и планировщики.</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><!---->Пайплайны<!----></span></h3><!--]--><!----> <p>Пайплайны, стандартные или модульные, предназначены только для инференса. Они созданы для простоты использования (поэтому не следуют принципу <a href="#simple-over-easy">Simple over easy</a> на 100%): читаемы, самоочевидны, легко настраиваются и лучше всего воспринимаются как примеры использования <a href="#models">моделей</a> и <a href="#schedulers">планировщиков</a>. Они не обладают полным набором функций. Чтобы создать полнофункциональные пользовательские интерфейсы на базе Diffusers, используйте <a href="../modular_diffusers/overview">Modular Diffusers</a>.</p> <p>Следуются следующие принципы проектирования:</p> <ul><li>Pipelines следуют политике одного файла. Все pipelines находятся в отдельных каталогах под src/diffusers/pipelines. Одна папка pipeline соответствует одной статье/проекту/релизу по диффузии. Несколько файлов pipeline могут быть собраны в одной папке pipeline, как это сделано для <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines/stable_diffusion" rel="nofollow"><code>src/diffusers/pipelines/stable-diffusion</code></a>. Если pipelines имеют схожую функциональность, можно воспользоваться механизмом <a href="https://github.com/huggingface/diffusers/blob/125d783076e5bd9785beb05367a2d2566843a271/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py#L251" rel="nofollow"># Copied from</a>.</li> <li>Все конвейеры наследуются от <a href="/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline">DiffusionPipeline</a>.</li> <li>Каждый конвейер состоит из различных компонентов модели и планировщика, которые задокументированы в файле <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>, доступны как атрибуты конвейера под тем же именем и могут передаваться между конвейерами с помощью функции <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.components"><code>DiffusionPipeline.components</code></a>.</li> <li>Каждый пайплайн должен быть загружаемым с помощью функции <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained"><code>DiffusionPipeline.from_pretrained</code></a>.</li> <li>Каждый пайплайн должен иметь один и только один способ запуска через метод <code>__call__</code>. Именование аргументов <code>__call__</code> должно быть единообразным во всех пайплайнах.</li> <li>Pipelines следует называть по задаче, которую они предназначены для решения.</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><!---->Модульные Diffusers<!----></span></h3><!--]--><!----> <p>Modular Diffusers — это модульная альтернатива стандартным пайплайнам. Вы собираете рабочий процесс из переиспользуемых <em>блоков пайплайна</em>, которые можно комбинировать, заменять и передавать другим. Стандартные пайплайны служат примерами того, как использовать модели и планировщики. Modular Diffusers — рекомендуемый способ создания полнофункциональных пользовательских интерфейсов на базе Diffusers, а также децентрализованного создания и обмена новыми пайплайнами сообществом.</p> <p>Следуются следующие принципы проектирования:</p> <ul><li>Модульные пайплайны следуют политике одного файла. Каждый из них находится в собственной папке под <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/modular_pipelines" rel="nofollow">src/diffusers/modular_pipelines/</a>, а внутри папки рабочий процесс разделён на один файл на каждый этап: <code>encoders.py</code>, <code>before_denoise.py</code>, <code>denoise.py</code> и <code>decoders.py</code>. Ещё два файла завершают пайплайн. <code>modular_blocks_&lt;model>.py</code> собирает этапы, а <code>modular_pipeline.py</code> определяет подкласс <a href="/docs/diffusers/main/ru/api/modular_diffusers/pipeline#diffusers.ModularPipeline">ModularPipeline</a> для каждой модели. Модульные пайплайны не импортируют друг друга.</li> <li>Каждый модульный конвейер определяется как набор <a href="/docs/diffusers/main/ru/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks">ModularPipelineBlocks</a>. Блоки-листья находятся в файлах стадий (<code>encoders.py</code>, <code>before_denoise.py</code>, <code>denoise.py</code>, <code>decoders.py</code>), а <code>modular_blocks_&lt;model>.py</code> собирает их в полный рабочий процесс с помощью контейнерных классов, таких как <a href="/docs/diffusers/main/ru/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks">SequentialPipelineBlocks</a> и <a href="/docs/diffusers/main/ru/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a>. Это разделяет два понятия, которые <code>DiffusionPipeline combines</code>. Блок — это чистое определение. Он объявляет входные и выходные данные, а также зависимости от компонентов, но не содержит весов и не может выполняться. <a href="/docs/diffusers/main/ru/api/modular_diffusers/pipeline#diffusers.ModularPipeline">ModularPipeline</a>, создаваемый с помощью <code>.init_pipeline(repo_id)</code>, является исполняемой частью. То, что блоки не имеют состояния и весов, делает их свободно комбинируемыми, заменяемыми и переносимыми между рабочими процессами.</li> <li>Для поддержки новой задачи напишите специфические для неё блоки, скомбинируйте их с существующими и зарегистрируйте рабочий процесс в <code>_workflow_map</code> на верхнем уровне сборки блоков. Один <code>ModularPipeline</code> может поддерживать множество рабочих процессов, таких как генерация изображений по тексту, преобразование изображения в изображение и inpainting, тогда как <code>DiffusionPipeline</code> выполняет только один.</li></ul> <p>См. <a href="../modular_diffusers/overview">документацию Modular Diffusers</a> для полного руководства по проектированию и использованию.</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><!---->Модели<!----></span></h3><!--]--><!----> <p>Модели спроектированы как настраиваемые наборы инструментов, являющиеся естественным расширением класса <a href="https://pytorch.org/docs/stable/generated/torch.nn.Module.html" rel="nofollow">Module в PyTorch</a>. Они должны следовать <em>политике одного файла</em>. Некоторые старые модели предшествуют этому соглашению и сохраняются в неизменном виде. Рассматривайте их как устаревшие исключения, а не как образец для новых моделей. Например, исходный класс <a href="/docs/diffusers/main/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel">UNet2DConditionModel</a> использовался для нескольких вариантов UNet.</p> <p>Следуются следующие принципы проектирования:</p> <ul><li>Каждый тип архитектуры модели находится в собственной папке под <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">src/diffusers/models</a>, например <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> или <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models/unets" rel="nofollow">unets/</a>. Каждая модельная семья имеет собственный файл в этой папке, например <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_flux.py" rel="nofollow">transformer_flux.py</a> и <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_wan.py" rel="nofollow">transformer_wan.py</a>.</li> <li>Модели следуют политике одного файла. Каждый файл модели должен быть самодостаточным, за исключением небольшого числа стандартных модулей, которые каждая модель использует идентичным образом, таких как эмбеддинги временных шагов и слои нормализации. Импортируйте их из <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/embeddings.py" rel="nofollow">embeddings.py</a> и <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/normalization.py" rel="nofollow">normalization.py</a>.</li> <li>Модели призваны раскрывать сложность, подобно классу <code>Module</code> в PyTorch, и выдавать понятные сообщения об ошибках.</li> <li>Все модели наследуются от <code>ModelMixin</code> и <code>ConfigMixin</code>.</li> <li>Модели можно оптимизировать для повышения производительности, если это не требует существенных изменений в коде, сохраняет обратную совместимость и обеспечивает значительную экономию памяти или вычислительных ресурсов.</li> <li>По умолчанию модели должны иметь наивысшую точность и наименьшую производительность.</li> <li>Чтобы интегрировать новую архитектуру модели, похожую на существующую, скопируйте существующий файл в качестве отправной точки и адаптируйте его. Используйте аннотации <a href="./contribution#copied-from-mechanism"><code># Copied from</code></a> для слоёв, которые остаются идентичными, чтобы <code>make fix-copies</code> поддерживал их синхронизацию.</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><!---->Планировщики<!----></span></h3><!--]--><!----> <p>Schedulers отвечают за управление процессом удаления шума при инференсе, а также за определение расписания шума для обучения. Они реализованы в виде отдельных классов с загружаемыми файлами конфигурации и строго следуют <strong>политике одного файла</strong>.</p> <p>Следуются следующие принципы проектирования:</p> <ul><li>Все планировщики находятся в <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow"><code>src/diffusers/schedulers</code></a>.</li> <li>Планировщикам <strong>запрещено</strong> импортировать из крупных файлов утилит; они должны быть максимально самодостаточными.</li> <li>Один файл планировщика на Python соответствует одному алгоритму планировщика (как он может быть описан в научной статье).</li> <li>Если планировщики имеют схожие функции, мы можем воспользоваться механизмом <code># Copied from</code>.</li> <li>Все планировщики наследуются от <code>SchedulerMixin</code> и <code>ConfigMixin</code>.</li> <li>Планировщики можно легко заменить с помощью метода <a href="../api/configuration#diffusers.ConfigMixin.from_config"><code>ConfigMixin.from_config</code></a>, как подробно описано <a href="../using-diffusers/schedulers">здесь</a>.</li> <li>Каждый планировщик должен иметь <code>set_num_inference_steps</code> и функцию <code>step</code>. <code>set_num_inference_steps(...)</code> необходимо вызывать перед каждым процессом удаления шума, <em>то есть</em> перед вызовом <code>step(...)</code>.</li> <li>Каждый планировщик предоставляет шаги, по которым необходимо «итерироваться», через атрибут <code>timesteps</code>, представляющий собой массив шагов, для которых будет вызываться модель.</li> <li>Функция <code>step(...)</code> принимает предсказанный вывод модели и «текущий» образец (x_t) и возвращает «предыдущий», слегка менее зашумленный образец (x_t-1).</li> <li>Учитывая сложность диффузионных планировщиков, функция <code>step</code> не раскрывает всю эту сложность и может восприниматься как «чёрный ящик».</li> <li>В подавляющем большинстве случаев новые планировщики следует реализовывать в отдельном файле планирования.</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:
45.8 kB
·
Xet hash:
c862bfcb62d0f96c3c3b0817a14e9bc39b53eaef3b2460e2a0d6967bd9899de1

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