Buckets:

mishig's picture
download
raw
36.2 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Filosofia&quot;,&quot;local&quot;:&quot;philosophy&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Usabilidade em vez de desempenho&quot;,&quot;local&quot;:&quot;usability-over-performance&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Simples e fácil&quot;,&quot;local&quot;:&quot;simple-over-easy&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Abstração ajustável e amigável para contribuidores&quot;,&quot;local&quot;:&quot;tweakable-contributor-friendly-over-abstraction&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Detalhes da filosofia de design&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;Diffusers modulares&quot;,&quot;local&quot;:&quot;modular-diffusers&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Modelos&quot;,&quot;local&quot;:&quot;models&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Agendadores&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><!---->Filosofia<!----></span></h1><!--]--><!----> <p>🧨 O Diffusers oferece modelos de difusão pré-treinados <strong>de última geração</strong> em várias modalidades.
Seu objetivo é servir como uma <strong>caixa de ferramentas modular</strong> para inferência e treinamento.</p> <p>Nosso objetivo é construir uma biblioteca que resista ao teste do tempo, e por isso levamos o design da API muito a sério.</p> <p>Em resumo, o Diffusers foi construído para ser uma extensão natural do PyTorch. Portanto, a maioria das nossas escolhas de design é baseada nos <a href="https://pytorch.org/docs/stable/community/design.html#pytorch-design-philosophy" rel="nofollow">Princípios de Design do PyTorch</a>. Vamos revisar os mais importantes:</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><!---->Usabilidade em vez de desempenho<!----></span></h2><!--]--><!----> <ul><li>Embora o Diffusers possua muitos recursos integrados para melhorar o desempenho (veja <a href="../optimization/overview">Otimizar e escalar</a>), os modelos são sempre carregados com a maior precisão e a menor otimização. Portanto, por padrão, os pipelines de difusão são sempre instanciados na CPU com precisão float32, a menos que o usuário defina o contrário. Isso garante a usabilidade em diferentes plataformas e aceleradores e significa que nenhuma instalação complexa é necessária para executar a biblioteca.</li> <li>Diffusers busca ser um pacote <strong>leve</strong> e, portanto, possui poucas dependências obrigatórias, mas muitas dependências opcionais que podem melhorar o desempenho (como <code>accelerate</code>, <code>safetensors</code>, <code>onnx</code>, etc…). Esforçamo-nos para manter a biblioteca o mais leve possível, para que possa ser adicionada como dependência de outros pacotes sem grandes preocupações.</li> <li>Diffusers prefere código simples e autoexplicável em vez de código condensado e mágico. Isso significa que sintaxes de código abreviadas, como funções lambda, e operadores avançados do PyTorch geralmente não são desejados.</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><!---->Simples e fácil<!----></span></h2><!--]--><!----> <p>Conforme afirma o PyTorch, <strong>explícito é melhor que implícito</strong> e <strong>simples é melhor que complexo</strong>. Essa filosofia de design é refletida em várias partes da biblioteca:</p> <ul><li>Seguimos a API do PyTorch com métodos como <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.to"><code>DiffusionPipeline.to</code></a> para permitir que o usuário gerencie os dispositivos.</li> <li>A geração de mensagens de erro concisas é preferível à correção silenciosa de entradas incorretas. O Diffusers visa ensinar o usuário, em vez de tornar a biblioteca o mais fácil de usar possível.</li> <li>A lógica complexa do modelo em comparação com a do agendador é exposta, em vez de ser tratada magicamente internamente. Agendadores/Amostradores são separados dos modelos de difusão, com dependências mínimas entre si. Isso obriga o usuário a escrever o loop de desruido desenrolado. No entanto, essa separação permite um depuramento mais fácil e dá ao usuário mais controle sobre a adaptação do processo de desruido ou a troca de modelos de difusão ou agendadores.</li> <li>Os componentes treinados separadamente do pipeline de difusão, <em>por exemplo</em> o codificador de texto, o unet e o autoencoder variacional, cada um possui sua própria classe de modelo. Isso obriga o usuário a lidar com a interação entre os diferentes componentes do modelo, e o formato de serialização separa os componentes do modelo em arquivos diferentes. No entanto, isso permite um depuramento e personalização mais fáceis. O treinamento de DreamBooth ou Textual Inversion é muito simples graças à capacidade do Diffusers de separar componentes individuais do pipeline de difusão.</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><!---->Abstração ajustável e amigável para contribuidores<!----></span></h2><!--]--><!----> <p>Para grande parte da biblioteca, o Diffusers adota um importante princípio de design da <a href="https://github.com/huggingface/transformers" rel="nofollow">biblioteca Transformers</a>, que é preferir código copiado e colado a abstrações apressadas. Esse princípio de design é muito opinativo e contrasta fortemente com princípios de design populares, como <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="nofollow">Não se repita (DRY)</a>.
Em resumo, assim como o Transformers faz para os arquivos de modelagem, o Diffusers prefere manter um nível de abstração extremamente baixo e um código muito autocontido para pipelines e agendadores.
Funções, blocos de código longos e até mesmo classes podem ser copiados para vários arquivos, o que, à primeira vista, pode parecer uma escolha de design ruim e desleixada que torna a biblioteca impossível de manter. <strong>No entanto</strong>, esse design se provou extremamente bem-sucedido para o Transformers e faz muito sentido para bibliotecas de aprendizado de máquina abertas e impulsionadas pela comunidade, porque:</p> <ul><li>Machine Learning é um campo em evolução extremamente rápida, no qual paradigmas, arquiteturas de modelos e algoritmos mudam rapidamente, o que torna muito difícil definir abstrações de código duradouras.</li> <li>Praticantes de Machine Learning gostam de poder ajustar rapidamente o código existente para ideação e pesquisa e, portanto, preferem código autossuficiente em vez de um que contenha muitas abstrações.</li> <li>Bibliotecas de código aberto dependem de contribuições da comunidade e, portanto, devem construir uma biblioteca que seja fácil de contribuir. Quanto mais abstrato for o código, mais dependências ele terá, mais difícil será de ler e mais difícil será de contribuir. Os contribuidores simplesmente deixam de contribuir para bibliotecas muito abstratas por medo de quebrar funcionalidades vitais. Se contribuir para uma biblioteca não puder quebrar outro código fundamental, isso não apenas torna o processo mais convidativo para novos contribuidores em potencial, mas também facilita a revisão e a contribuição para múltiplas partes em paralelo.</li></ul> <p>Na Hugging Face, chamamos esse design de <strong>política de arquivo único</strong>, o que significa que quase todo o código de uma determinada classe deve ser escrito em um único arquivo autossuficiente. Para ler mais sobre a filosofia, você pode dar uma olhada
em <a href="https://huggingface.co/blog/transformers-design-philosophy" rel="nofollow">este post no blog</a>.</p> <p>No Diffusers, seguimos essa filosofia para pipelines, schedulers e modelos. Alguns modelos mais antigos antecederam essa convenção e são mantidos como estão; todas as novas arquiteturas de modelos estão em seus próprios arquivos autossuficientes. Consulte a seção <a href="#models">Models</a> abaixo para mais detalhes.</p> <p>Ótimo, agora você deve ter compreendido em geral por que o 🧨 Diffusers é projetado da forma como é 🤗.
Tentamos aplicar esses princípios de design de forma consistente em toda a biblioteca. No entanto, existem algumas pequenas exceções à filosofia ou algumas escolhas de design infelizes. Se você tiver feedback sobre o design, gostaríamos ❤️ de ouvi-lo <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feedback.md&amp;title=" rel="nofollow">diretamente no 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><!---->Detalhes da filosofia de design<!----></span></h2><!--]--><!----> <p>Agora, os detalhes práticos da filosofia de design. O Diffusers oferece duas formas de compor <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">modelos</a> e <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow">schedulers</a> em um fluxo de trabalho executável: os <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines" rel="nofollow">pipelines</a> padrão, que são monolíticos, com uma tarefa por classe de pipeline, e o Modular Diffusers, que é composível e baseado em blocos. As seções a seguir abordam, em ordem, pipelines, pipelines modulares, modelos e 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>Pipelines, padrão ou modulares, destinam-se apenas à inferência. Eles são projetados para serem fáceis de usar (portanto, não seguem <a href="#simple-over-easy">Simple over easy</a> 100%): legíveis, autoexplicativos, fáceis de ajustar e vistos idealmente como exemplos de como usar <a href="#models">models</a> e <a href="#schedulers">schedulers</a>. Eles não possuem funcionalidade completa. Para construir interfaces de usuário com funcionalidade completa sobre o Diffusers, use <a href="../modular_diffusers/overview">Modular Diffusers</a>.</p> <p>Os seguintes princípios de design são seguidos:</p> <ul><li>Pipelines follow the single-file policy. All pipelines can be found in individual directories under src/diffusers/pipelines. One pipeline folder corresponds to one diffusion paper/project/release. Multiple pipeline files can be gathered in one pipeline folder, as it’s done for <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines/stable_diffusion" rel="nofollow"><code>src/diffusers/pipelines/stable-diffusion</code></a>. If pipelines share similar functionality, one can make use of the <a href="https://github.com/huggingface/diffusers/blob/125d783076e5bd9785beb05367a2d2566843a271/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py#L251" rel="nofollow"># Copied from mechanism</a>.</li> <li>Todos os pipelines herdam de <a href="/docs/diffusers/main/pt/api/pipelines/overview#diffusers.DiffusionPipeline">DiffusionPipeline</a>.</li> <li>Cada pipeline consiste em diferentes componentes de modelo e agendador, que estão documentados no <a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/model_index.json" rel="nofollow">arquivo <code>model_index.json</code></a>, são acessíveis como atributos do pipeline com o mesmo nome e podem ser compartilhados entre pipelines com a função <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.components"><code>DiffusionPipeline.components</code></a>.</li> <li>Todo pipeline deve ser carregável por meio da função <a href="../api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained"><code>DiffusionPipeline.from_pretrained</code></a>.</li> <li>Cada pipeline deve ter uma única forma de ser executado por meio de um método <code>__call__</code>. A nomenclatura dos argumentos de <code>__call__</code> deve ser consistente em todos os pipelines.</li> <li>Os pipelines devem ser nomeados de acordo com a tarefa que se destinam a resolver.</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 modulares<!----></span></h3><!--]--><!----> <p>Modular Diffusers é a alternativa composível aos pipelines padrão. Você constrói um fluxo de trabalho a partir de <em>blocos de pipeline</em> reutilizáveis que podem ser combinados, trocados e compartilhados. Os pipelines padrão são exemplos de referência soltos sobre como usar modelos e agendadores. O Modular Diffusers é o caminho recomendado para construir interfaces de usuário completas em cima do Diffusers e para que a comunidade construa e compartilhe novos pipelines de forma descentralizada.</p> <p>Os seguintes princípios de design são seguidos:</p> <ul><li>Os pipelines modulares seguem a política de arquivo único. Cada um fica em sua própria pasta sob <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/modular_pipelines" rel="nofollow">src/diffusers/modular_pipelines/</a>, e a pasta divide o fluxo de trabalho em um arquivo por etapa: <code>encoders.py</code>, <code>before_denoise.py</code>, <code>denoise.py</code> e <code>decoders.py</code>. Mais dois arquivos completam o pipeline. <code>modular_blocks_&lt;model>.py</code> monta as etapas, e <code>modular_pipeline.py</code> define a subclasse <a href="/docs/diffusers/main/pt/api/modular_diffusers/pipeline#diffusers.ModularPipeline">ModularPipeline</a> específica para cada modelo. Os pipelines modulares não fazem importações cruzadas entre si.</li> <li>Each modular pipeline is defined as a set of <a href="/docs/diffusers/main/pt/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_&lt;model>.py</code> assembles them into the full workflow with container classes like <a href="/docs/diffusers/main/pt/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks">SequentialPipelineBlocks</a> and <a href="/docs/diffusers/main/pt/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/pt/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>Para suportar uma nova tarefa, escreva os blocos específicos da tarefa, componha-os com os existentes e registre o fluxo de trabalho em <code>_workflow_map</code> na montagem do bloco de nível superior. Um único <code>ModularPipeline</code> pode suportar muitos fluxos de trabalho, como texto-para-imagem, imagem-para-imagem e inpainting, enquanto um <code>DiffusionPipeline</code> executa apenas um.</li></ul> <p>Consulte a <a href="../modular_diffusers/overview">documentação do Modular Diffusers</a> para o guia completo de design e uso.</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><!---->Modelos<!----></span></h3><!--]--><!----> <p>Os modelos são projetados como caixas de ferramentas configuráveis que são extensões naturais da <a href="https://pytorch.org/docs/stable/generated/torch.nn.Module.html" rel="nofollow">classe Module do PyTorch</a>. Eles devem seguir a <em>política de arquivo único</em>. Alguns modelos mais antigos antecede essa convenção e são mantidos como estão. Trate-os como exceções legadas, não como padrões a serem seguidos para novos modelos. Por exemplo, a classe original <a href="/docs/diffusers/main/pt/api/models/unet2d-cond#diffusers.UNet2DConditionModel">UNet2DConditionModel</a> foi usada para várias variações de UNet.</p> <p>Os seguintes princípios de design são seguidos:</p> <ul><li>Cada tipo de arquitetura de modelo fica em sua própria pasta sob <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/models" rel="nofollow">src/diffusers/models</a>, por exemplo <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>. Cada família de modelos tem seu próprio arquivo dentro dessa pasta, como <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_flux.py" rel="nofollow">transformer_flux.py</a> e <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_wan.py" rel="nofollow">transformer_wan.py</a>.</li> <li>Os modelos seguem a política de arquivo único. Cada arquivo de modelo deve ser autocontido, exceto por um pequeno número de módulos padrão que todos os modelos usam de forma idêntica, como incorporações de passo de tempo e camadas de normalização. Importe-os de <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/embeddings.py" rel="nofollow">embeddings.py</a> e <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/normalization.py" rel="nofollow">normalization.py</a>.</li> <li>Os modelos pretendem expor a complexidade, assim como a classe <code>Module</code> do PyTorch, e fornecer mensagens de erro claras.</li> <li>Todos os modelos herdam de <code>ModelMixin</code> e <code>ConfigMixin</code>.</li> <li>Os modelos podem ser otimizados para desempenho quando isso não exige alterações significativas no código, mantém a compatibilidade reversa e proporciona ganhos substanciais de memória ou de computação.</li> <li>Os modelos devem, por padrão, ter a configuração de maior precisão e menor desempenho.</li> <li>Para integrar uma nova arquitetura de modelo semelhante a uma existente, copie o arquivo existente como ponto de partida e adapte-o. Use as anotações <a href="./contribution#copied-from-mechanism"><code># Copied from</code></a> em camadas que permanecem idênticas para que o <code>make fix-copies</code> as mantenha sincronizadas.</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><!---->Agendadores<!----></span></h3><!--]--><!----> <p>Os Schedulers são responsáveis por orientar o processo de remoção de ruído durante a inferência, bem como por definir um cronograma de ruído para o treinamento. Eles são projetados como classes individuais com arquivos de configuração carregáveis e seguem rigorosamente a <strong>política de arquivo único</strong>.</p> <p>Os seguintes princípios de design são seguidos:</p> <ul><li>Todos os agendadores estão em <a href="https://github.com/huggingface/diffusers/tree/main/src/diffusers/schedulers" rel="nofollow"><code>src/diffusers/schedulers</code></a>.</li> <li>Os Schedulers <strong>não</strong> podem importar de arquivos de utilitários grandes e devem ser mantidos muito autocontidos.</li> <li>Um arquivo Python de agendador corresponde a um algoritmo de agendamento (como pode ser definido em um artigo).</li> <li>Se os agendadores compartilham funcionalidades semelhantes, podemos fazer uso do mecanismo <code># Copied from</code>.</li> <li>Todos os Schedulers herdam de <code>SchedulerMixin</code> e <code>ConfigMixin</code>.</li> <li>Os agendadores podem ser facilmente substituídos pelo método <a href="../api/configuration#diffusers.ConfigMixin.from_config"><code>ConfigMixin.from_config</code></a>, conforme explicado em detalhes <a href="../using-diffusers/schedulers">aqui</a>.</li> <li>Todo scheduler precisa ter um <code>set_num_inference_steps</code> e uma função <code>step</code>. <code>set_num_inference_steps(...)</code> precisa ser chamado antes de todo processo de desruidamento, <em>ou seja</em>, antes de <code>step(...)</code> ser chamado.</li> <li>Cada scheduler expõe os timesteps a serem percorridos por meio de um atributo <code>timesteps</code>, que é um array de timesteps em que o modelo será chamado.</li> <li>A função <code>step(...)</code> recebe a saída prevista do modelo e a amostra “atual” (x_t) e retorna a amostra “anterior”, ligeiramente menos ruidosa (x_t-1).</li> <li>Dada a complexidade dos agendadores de difusão, a função <code>step</code> não expõe toda essa complexidade e pode ser um pouco uma “caixa-preta”.</li> <li>Na grande maioria dos casos, novos agendadores devem ser implementados em um novo arquivo de agendamento.</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:
36.2 kB
·
Xet hash:
91e0b9124f889c1cc00ec0e0bfe0a24194a76fdd6affb2183d99d38d0ea55da6

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