Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"CogVideoX","local":"cogvideox","sections":[{"title":"Preparação de Dados","local":"data-preparation","sections":[{"title":"Formato pequeno","local":"small-format","sections":[],"depth":3},{"title":"Formato de stream","local":"stream-format","sections":[],"depth":3}],"depth":2},{"title":"Treinamento","local":"training","sections":[],"depth":2},{"title":"Inferência","local":"inference","sections":[],"depth":2},{"title":"Reduzir o uso de memória","local":"reduce-memory-usage","sections":[],"depth":2}],"depth":1}"/> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/start.D3LnKZ4R.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/BF9UNEM9.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DPnyVmXs.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/app.C0rBoMxR.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DSGUT_OW.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/C045MWWx.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.DTZsP_3B.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/IaDvMxLQ.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/nodes/314.Clt70fkN.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/bKdwVYpU.js" rel="modulepreload"> | |
| <!--26s02k--><meta name="hf:doc:metadata" content="{"title":"CogVideoX","local":"cogvideox","sections":[{"title":"Data Preparation","local":"data-preparation","sections":[{"title":"Small format","local":"small-format","sections":[],"depth":3},{"title":"Stream format","local":"stream-format","sections":[],"depth":3}],"depth":2},{"title":"Training","local":"training","sections":[],"depth":2},{"title":"Inference","local":"inference","sections":[],"depth":2},{"title":"Reduce memory usage","local":"reduce-memory-usage","sections":[],"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="cogvideox" 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="#cogvideox"><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><!---->CogVideoX<!----></span></h1><!--]--><!----> <p>CogVideoX é um modelo de geração de vídeo a partir de texto focado em criar vídeos mais coerentes alinhados a um prompt. Ele alcança isso usando vários métodos.</p> <ul><li><p>um autoencoder variacional 3D que comprime vídeos espacialmente e temporalmente, melhorando a taxa de compressão e a precisão do vídeo.</p></li> <li><p>um bloco transformer especializado para ajudar a alinhar texto e vídeo, e um módulo de atenção total 3D para capturar e criar vídeos espacial e temporalmente precisos.</p></li></ul> <p>O teste real da dimensão de instrução de vídeo constatou que o CogVideoX apresenta bons efeitos em tema consistente, informações dinâmicas, fundo consistente, informações de objetos, movimento suave, cor, cena, estilo de aparência e estilo temporal, mas não consegue alcançar bons resultados com ação humana, relação espacial e múltiplos objetos.</p> <p>O ajuste fino com Diffusers pode ajudar a compensar esses resultados ruins.</p> <!--[1--><h2 class="relative group"><a id="data-preparation" 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="#data-preparation"><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><!---->Preparação de Dados<!----></span></h2><!--]--><!----> <p>Os scripts de treinamento aceitam dados em dois formatos.</p> <p>O primeiro formato é adequado para treinamento em pequena escala, e o segundo formato usa o formato CSV, que é mais apropriado para streaming de dados para treinamento em larga escala. No futuro, o Diffusers suportará a tag <code><Video></code>.</p> <!--[2--><h3 class="relative group"><a id="small-format" 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="#small-format"><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><!---->Formato pequeno<!----></span></h3><!--]--><!----> <p>Dois arquivos, em que um contém prompts separados por linha e o outro contém caminhos separados por linha para os dados de vídeo (o caminho para os arquivos de vídeo deve ser relativo ao caminho que você passa ao especificar <code>--instance_data_root</code>). Vamos dar uma olhada em um exemplo para entender melhor!</p> <p>Suponha que você tenha especificado <code>--instance_data_root</code> como <code>/dataset</code> e que este diretório contenha os arquivos: <code>prompts.txt</code> e <code>videos.txt</code>.</p> <p>O arquivo <code>prompts.txt</code> deve conter prompts separados por linha:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class=" "><!---->A <span class="hljs-keyword">black </span><span class="hljs-keyword">and </span>white animated sequence featuring a rabbit, named Rabbity Ribfried, <span class="hljs-keyword">and </span>an anthropomorphic goat in a musical, playful environment, <span class="hljs-keyword">showcasing </span>their evolving interaction. | |
| A <span class="hljs-keyword">black </span><span class="hljs-keyword">and </span>white animated sequence on a <span class="hljs-keyword">ship's </span>deck features a <span class="hljs-keyword">bulldog </span>character, named <span class="hljs-keyword">Bully </span><span class="hljs-keyword">Bulldoger, </span><span class="hljs-keyword">showcasing </span>exaggerated facial expressions <span class="hljs-keyword">and </span><span class="hljs-keyword">body </span>language. The character progresses from confident to focused, then to strained <span class="hljs-keyword">and </span><span class="hljs-keyword">distressed, </span><span class="hljs-keyword">displaying </span>a range of emotions as it navigates challenges. The <span class="hljs-keyword">ship's </span>interior remains static in the <span class="hljs-keyword">background, </span>with minimalistic details such as a <span class="hljs-keyword">bell </span><span class="hljs-keyword">and </span>open door. The character<span class="hljs-string">'s dynamic movements and changing expressions drive the narrative, with no camera movement to distract from its evolving reactions and physical gestures. | |
| ...</span><!----></pre></div><!----> <p>O arquivo <code>videos.txt</code> deve conter caminhos para arquivos de vídeo separados por linha. Observe que o caminho deve ser <em>relativo</em> ao diretório <code>--instance_data_root</code>.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class=" "><!---->videos<span class="hljs-symbol">/00000.mp4</span> | |
| videos<span class="hljs-symbol">/00001.mp4</span> | |
| ...<!----></pre></div><!----> <p>No geral, é assim que o seu conjunto de dados se pareceria se você executasse o comando <code>tree</code> no diretório raiz do conjunto de dados:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class=" "><!---->/dataset | |
| ├── prompts<span class="hljs-selector-class">.txt</span> | |
| ├── videos<span class="hljs-selector-class">.txt</span> | |
| ├── videos | |
| ├── videos/<span class="hljs-number">00000</span><span class="hljs-selector-class">.mp4</span> | |
| ├── videos/<span class="hljs-number">00001</span><span class="hljs-selector-class">.mp4</span> | |
| ├── ...<!----></pre></div><!----> <p>Ao usar este formato, o <code>--caption_column</code> deve ser <code>prompts.txt</code> e o <code>--video_column</code> deve ser <code>videos.txt</code>.</p> <!--[2--><h3 class="relative group"><a id="stream-format" 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="#stream-format"><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><!---->Formato de stream<!----></span></h3><!--]--><!----> <p>Você pode usar um único arquivo CSV. Para fins deste exemplo, assuma que você tem um arquivo <code>metadata.csv</code>. O formato esperado é:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class=" "><!----><CAPTION_COLUMN>,<PATH_TO_VIDEO_COLUMN> | |
| <span class="hljs-string">"""A black and white animated sequence featuring a rabbit, named Rabbity Ribfried, and an anthropomorphic goat in a musical, playful environment, showcasing their evolving interaction."""</span>,<span class="hljs-string">"""00000.mp4"""</span> | |
| <span class="hljs-string">"""A black and white animated sequence on a ship's deck features a bulldog character, named Bully Bulldoger, showcasing exaggerated facial expressions and body language. The character progresses from confident to focused, then to strained and distressed, displaying a range of emotions as it navigates challenges. The ship's interior remains static in the background, with minimalistic details such as a bell and open door. The character's dynamic movements and changing expressions drive the narrative, with no camera movement to distract from its evolving reactions and physical gestures."""</span>,<span class="hljs-string">"""00001.mp4"""</span> | |
| ...<!----></pre></div><!----> <p>Nesse caso, o <code>--instance_data_root</code> deve ser o local onde os vídeos estão armazenados e o <code>--dataset_name</code> deve ser um caminho para uma pasta local ou um dataset compatível com <a href="https://huggingface.co/docs/datasets/main/en/package_reference/loading_methods#datasets.load_dataset" rel="nofollow">load_dataset</a> hospedado no Hub. Supondo que você tenha vídeos de gameplay de Minecraft em <code>https://huggingface.co/datasets/my-awesome-username/minecraft-videos</code>, você precisaria especificar <code>my-awesome-username/minecraft-videos</code>.</p> <p>Ao usar este formato, o <code>--caption_column</code> deve ser <code><CAPTION_COLUMN></code> e o <code>--video_column</code> deve ser <code><PATH_TO_VIDEO_COLUMN></code>.</p> <p>Você não é estritamente limitado ao formato CSV. Qualquer formato funciona, desde que o método <code>load_dataset</code> suporte o formato de arquivo para carregar uma coluna básica <code><PATH_TO_VIDEO_COLUMN></code> e <code><CAPTION_COLUMN></code>. A razão para passar por essas acrobacias de organização de dataset para carregar dados de vídeo é que o <code>load_dataset</code> não suporta totalmente todos os tipos de formatos de vídeo.</p> <blockquote class="note"><p>CogVideoX funciona melhor com prompts longos e descritivos, aprimorados por LLMs, para a geração de vídeos. Recomendamos pré-processar seus vídeos gerando primeiro um resumo usando um VLM e, em seguida, aprimorando os prompts com um LLM. Para gerar as legendas acima, usamos <a href="https://huggingface.co/openbmb/MiniCPM-V-2_6" rel="nofollow">MiniCPM-V-26</a> e <a href="https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct" rel="nofollow">Llama-3.1-8B-Instruct</a>. Um exemplo muito básico e sem complicações para isso está disponível <a href="https://gist.github.com/a-r-r-o-w/4dee20250e82f4e44690a02351324a4a" rel="nofollow">aqui</a>. A recomendação oficial para aprimorar prompts é <a href="https://huggingface.co/THUDM?search_models=chatglm" rel="nofollow">ChatGLM</a> e um comprimento de 50 a 100 palavras é considerado adequado.</p></blockquote> <blockquote><p>![NOTE] | |
| É esperado que seu conjunto de dados já esteja pré-processado. Caso contrário, alguns pré-processamentos básicos podem ser realizados ajustando os seguintes parâmetros: <code>--height</code>, <code>--width</code>, <code>--fps</code>, <code>--max_num_frames</code>, <code>--skip_frames_start</code> e <code>--skip_frames_end</code>. | |
| Atualmente, todos os vídeos do seu conjunto de dados devem conter o mesmo número de quadros de vídeo ao usar um tamanho de lote de treinamento > 1.</p></blockquote> <!--[1--><h2 class="relative group"><a id="training" 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="#training"><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><!---->Treinamento<!----></span></h2><!--]--><!----> <p>Você precisa configurar seu ambiente de desenvolvimento instalando os requisitos necessários. Os seguintes pacotes são obrigatórios:</p> <ul><li>Torch 2.0 ou superior, com base nos recursos de treinamento que você está utilizando (pode exigir versões mais recentes ou noturnas para treinamento quantizado/deepspeed)</li> <li><code>pip install diffusers transformers accelerate peft huggingface_hub</code> para tudo relacionado a modelagem e treinamento</li> <li><code>pip install datasets decord</code> para carregar dados de treinamento de vídeo</li> <li><code>pip install bitsandbytes</code> para usar os otimizadores Adam ou AdamW de 8 bits para treinamento otimizado em memória</li> <li><code>pip install wandb</code> opcionalmente para monitorar os logs de treinamento</li> <li><code>pip install deepspeed</code> opcionalmente para treinamento com <a href="https://github.com/microsoft/DeepSpeed" rel="nofollow">DeepSpeed</a></li> <li><code>pip install prodigyopt</code> opcionalmente, caso você queira usar o otimizador Prodigy para o treinamento</li></ul> <p>Para garantir que você consiga executar com sucesso as versões mais recentes dos scripts de exemplo, recomendamos fortemente <strong>instalar a partir do código-fonte</strong> e manter a instalação atualizada, pois atualizamos os scripts de exemplo com frequência e instalamos alguns requisitos específicos de exemplo. Para isso, execute as etapas a seguir em um novo ambiente virtual:</p> <p>Antes de executar o script, certifique-se de instalar a biblioteca a partir do código-fonte:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-bash "><!---->git <span class="hljs-built_in">clone</span> https://github.com/huggingface/diffusers | |
| <span class="hljs-built_in">cd</span> diffusers | |
| pip install -e .<!----></pre></div><!----> <p>Em seguida, navegue até a pasta de exemplo que contém o script de treinamento e instale as dependências necessárias para o script que você está usando:</p> <ul><li>PyTorch</li></ul> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-bash "><!----><span class="hljs-built_in">cd</span> examples/cogvideo | |
| pip install -r requirements.txt<!----></pre></div><!----> <p>E inicialize um ambiente <a href="https://github.com/huggingface/accelerate/" rel="nofollow">🤗 Accelerate</a> com:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-bash "><!---->accelerate config<!----></pre></div><!----> <p>Ou para uma configuração padrão do Accelerate sem responder perguntas sobre seu ambiente</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-bash "><!---->accelerate config default<!----></pre></div><!----> <p>Ou, se o seu ambiente não suporta um shell interativo (por exemplo, um notebook)</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">from</span> accelerate.utils <span class="hljs-keyword">import</span> write_basic_config | |
| write_basic_config()<!----></pre></div><!----> <p>Ao executar <code>accelerate config</code>, se você usar torch.compile, é possível obter aumentos de velocidade significativos. A biblioteca PEFT é usada como backend para o treinamento LoRA, portanto, certifique-se de ter <code>peft>=0.6.0</code> instalado no seu ambiente.</p> <p>Se você deseja enviar seu modelo para o Hub após a conclusão do treinamento, com um cartão de modelo bem organizado, certifique-se de que você está conectado:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-bash "><!---->hf auth login | |
| <span class="hljs-comment"># Alternatively, you could upload your model manually using:</span> | |
| <span class="hljs-comment"># hf upload my-cool-account-name/my-cool-lora-name /path/to/awesome/lora</span><!----></pre></div><!----> <p>Certifique-se de que seus dados estejam preparados conforme descrito em <a href="#data-preparation">Preparação de dados</a>. Quando estiver pronto, você pode começar o treinamento!</p> <p>Assumindo que você está treinando com 50 vídeos de um conceito semelhante, descobrimos que 1500-2000 passos funcionam bem. A recomendação oficial, no entanto, é de 100 vídeos com um total de 4000 passos. Assumindo que você está treinando em uma única GPU com um <code>--train_batch_size</code> de <code>1</code>:</p> <ul><li>1500 passos em 50 vídeos corresponderiam a <code>30</code> épocas de treinamento</li> <li>4000 passos em 100 vídeos corresponderiam a <code>40</code> épocas de treinamento</li></ul> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-bash "><!----><span class="hljs-meta">#!/bin/bash</span> | |
| GPU_IDS=<span class="hljs-string">"0"</span> | |
| accelerate launch --gpu_ids <span class="hljs-variable">$GPU_IDS</span> examples/cogvideo/train_cogvideox_lora.py \ | |
| --pretrained_model_name_or_path THUDM/CogVideoX-2b \ | |
| --cache_dir <CACHE_DIR> \ | |
| --instance_data_root <PATH_TO_WHERE_VIDEO_FILES_ARE_STORED> \ | |
| --dataset_name my-awesome-name/my-awesome-dataset \ | |
| --caption_column <CAPTION_COLUMN> \ | |
| --video_column <PATH_TO_VIDEO_COLUMN> \ | |
| --id_token <ID_TOKEN> \ | |
| --validation_prompt <span class="hljs-string">"<ID_TOKEN> Spiderman swinging over buildings:::A panda, dressed in a small, red jacket and a tiny hat, sits on a wooden stool in a serene bamboo forest. The panda's fluffy paws strum a miniature acoustic guitar, producing soft, melodic tunes. Nearby, a few other pandas gather, watching curiously and some clapping in rhythm. Sunlight filters through the tall bamboo, casting a gentle glow on the scene. The panda's face is expressive, showing concentration and joy as it plays. The background includes a small, flowing stream and vibrant green foliage, enhancing the peaceful and magical atmosphere of this unique musical performance"</span> \ | |
| --validation_prompt_separator ::: \ | |
| --num_validation_videos 1 \ | |
| --validation_epochs 10 \ | |
| --seed 42 \ | |
| --rank 64 \ | |
| --lora_alpha 64 \ | |
| --mixed_precision fp16 \ | |
| --output_dir /raid/aryan/cogvideox-lora \ | |
| --height 480 --width 720 --fps 8 --max_num_frames 49 --skip_frames_start 0 --skip_frames_end 0 \ | |
| --train_batch_size 1 \ | |
| --num_train_epochs 30 \ | |
| --checkpointing_steps 1000 \ | |
| --gradient_accumulation_steps 1 \ | |
| --learning_rate 1e-3 \ | |
| --lr_scheduler cosine_with_restarts \ | |
| --lr_warmup_steps 200 \ | |
| --lr_num_cycles 1 \ | |
| --enable_slicing \ | |
| --enable_tiling \ | |
| --optimizer Adam \ | |
| --adam_beta1 0.9 \ | |
| --adam_beta2 0.95 \ | |
| --max_grad_norm 1.0 \ | |
| --report_to wandb<!----></pre></div><!----> <p>Para acompanhar melhor nossos experimentos de treinamento, estamos usando as seguintes flags no comando acima:</p> <ul><li><code>--report_to wandb</code> garante que as execuções de treinamento sejam rastreadas no Weights and Biases. Para usá-lo, certifique-se de instalar o <code>wandb</code> com <code>pip install wandb</code>.</li> <li><code>validation_prompt</code> e <code>validation_epochs</code> para permitir que o script execute algumas inferências de validação. Isso nos permite verificar qualitativamente se o treinamento está progredindo como esperado.</li></ul> <p>Definir o <code><ID_TOKEN></code> não é necessário. A partir de algumas experimentações limitadas, descobrimos que funciona melhor (pois se assemelha ao treinamento de <a href="./dreambooth">Dreambooth</a>) do que sem ele. Quando fornecido, o <code><ID_TOKEN></code> é adicionado ao início de cada prompt. Portanto, se o seu <code><ID_TOKEN></code> fosse <code>"DISNEY"</code> e o seu prompt fosse <code>"Spiderman swinging over buildings"</code>, o prompt efetivo usado no treinamento seria <code>"DISNEY Spiderman swinging over buildings"</code>. Quando não fornecido, você estaria treinando sem nenhum token adicional ou poderia aumentar seu conjunto de dados para aplicar o token onde desejar antes de iniciar o treinamento.</p> <blockquote class="note"><p>Você pode passar <code>--use_8bit_adam</code> para reduzir os requisitos de memória do treinamento.</p></blockquote> <blockquote class="important"><p>As seguintes configurações foram testadas no momento da adição do suporte ao treinamento de LoRA para o CogVideoX:</p> <ul><li>Nossos testes foram realizados principalmente no CogVideoX-2b. Trabalharemos no CogVideoX-5b e no CogVideoX-5b-I2V em breve</li> <li>Um conjunto de dados composto por 70 vídeos de treinamento com resoluções <code>200 x 480 x 720</code> (F x H x W). A partir dele, utilizando a técnica de frame skipping no pré-processamento de dados, criamos dois conjuntos de dados menores, com 49 e 16 frames, para experimentação mais rápida e porque o limite máximo recomendado pela equipe do CogVideoX é de 49 frames. Dos 70 vídeos, criamos três grupos com 10, 25 e 50 vídeos. Todos os vídeos eram semelhantes em relação à natureza do conceito sendo treinado.</li> <li>Vídeos com 25+ funcionaram melhor para treinar novos conceitos e estilos.</li> <li>Descobrimos que é melhor treinar com um token de identificador que pode ser especificado como <code>--id_token</code>. Isso é semelhante ao treinamento do tipo Dreambooth, mas o ajuste fino normal sem esse token também funciona.</li> <li>O conceito treinado pareceu funcionar razoavelmente bem quando combinado com prompts completamente não relacionados. Esperamos resultados ainda melhores se o CogVideoX-5B for finetunado.</li> <li>O repositório original usa um <code>lora_alpha</code> de <code>1</code>. Descobrimos que isso não é adequado em muitas execuções, possivelmente devido a diferenças nos backends de modelagem e nas configurações de treinamento. Nossa recomendação é definir o <code>lora_alpha</code> como <code>rank</code> ou <code>rank // 2</code>.</li> <li>Se você está treinando com dados cujas legendas geram resultados ruins com o modelo original, um <code>rank</code> de 64 ou superior é adequado e também é a recomendação da equipe por trás do CogVideoX. Se as gerações já forem moderadamente boas com as legendas do seu treinamento, um <code>rank</code> de 16/32 deve funcionar. Descobrimos que definir o rank muito baixo, por exemplo <code>4</code>, não é ideal e não produz resultados promissores.</li> <li>Os autores do CogVideoX recomendam 4000 etapas de treinamento e 100 vídeos de treinamento no total para alcançar o melhor resultado. Embora isso possa gerar os melhores resultados, descobrimos, em nossa experimentação limitada, que 2000 etapas e 25 vídeos também podem ser suficientes.</li> <li>Ao usar o otimizador Prodigy para treinamento, é possível seguir as recomendações deste <a href="https://huggingface.co/blog/sdxl_lora_advanced_script" rel="nofollow">blog</a>. O Prodigy tende a sofrer overfitting rapidamente. Com base em testes muito limitados, descobri que uma taxa de aprendizado de <code>0.5</code> é adequada, além de <code>--prodigy_use_bias_correction</code>, <code>prodigy_safeguard_warmup</code> e <code>--prodigy_decouple</code>.</li> <li>A taxa de aprendizado recomendada pelos autores do CogVideoX e pela nossa experimentação com Adam/AdamW está entre <code>1e-3</code> e <code>1e-4</code> para um conjunto de dados com 25+ vídeos.</li></ul> <p>Observe que nossos testes não são exaustivos devido ao tempo limitado para exploração. Nossa recomendação seria experimentar diferentes parâmetros para encontrar as melhores configurações para seus dados.</p></blockquote> <!--[1--><h2 class="relative group"><a id="inference" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#inference"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Inferência<!----></span></h2><!--]--><!----> <p>Depois de treinar um modelo lora, a inferência pode ser feita simplesmente carregando os pesos do lora no <code>CogVideoXPipeline</code>.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class="language-python "><!----><span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> CogVideoXPipeline | |
| <span class="hljs-keyword">from</span> diffusers.utils <span class="hljs-keyword">import</span> export_to_video | |
| pipe = CogVideoXPipeline.from_pretrained(<span class="hljs-string">"THUDM/CogVideoX-2b"</span>, dtype=torch.float16) | |
| <span class="hljs-comment"># pipe.load_lora_weights("/path/to/lora/weights", adapter_name="cogvideox-lora") # Or,</span> | |
| pipe.load_lora_weights(<span class="hljs-string">"my-awesome-hf-username/my-awesome-lora-name"</span>, adapter_name=<span class="hljs-string">"cogvideox-lora"</span>) <span class="hljs-comment"># If loading from the HF Hub</span> | |
| pipe.to(<span class="hljs-string">"cuda"</span>) <span class="hljs-comment"># or "mps", "xpu", "cpu"</span> | |
| <span class="hljs-comment"># Assuming lora_alpha=32 and rank=64 for training. If different, set accordingly</span> | |
| pipe.set_adapters([<span class="hljs-string">"cogvideox-lora"</span>], [<span class="hljs-number">32</span> / <span class="hljs-number">64</span>]) | |
| prompt = <span class="hljs-string">"A vast, shimmering ocean flows gracefully under a twilight sky, its waves undulating in a mesmerizing dance of blues and greens. The surface glints with the last rays of the setting sun, casting golden highlights that ripple across the water. Seagulls soar above, their cries blending with the gentle roar of the waves. The horizon stretches infinitely, where the ocean meets the sky in a seamless blend of hues. Close-ups reveal the intricate patterns of the waves, capturing the fluidity and dynamic beauty of the sea in motion."</span> | |
| frames = pipe(prompt, guidance_scale=<span class="hljs-number">6</span>, use_dynamic_cfg=<span class="hljs-literal">True</span>).frames[<span class="hljs-number">0</span>] | |
| export_to_video(frames, <span class="hljs-string">"output.mp4"</span>, fps=<span class="hljs-number">8</span>)<!----></pre></div><!----> <!--[1--><h2 class="relative group"><a id="reduce-memory-usage" 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="#reduce-memory-usage"><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><!---->Reduzir o uso de memória<!----></span></h2><!--]--><!----> <p>Durante os testes com a biblioteca diffusers, todas as otimizações incluídas na biblioteca diffusers foram habilitadas. Este esquema não foi testado para uso real de memória em dispositivos fora das arquiteturas <strong>NVIDIA A100 / H100</strong>. | |
| Em geral, este esquema pode ser adaptado a todos os dispositivos da <strong>NVIDIA Ampere architecture</strong> e superiores. Se as otimizações forem desabilitadas, o consumo de memória será multiplicado, com o uso de memória de pico sendo cerca de 3 vezes o valor na tabela. | |
| No entanto, a velocidade aumentará cerca de 3-4 vezes. Você pode desabilitar seletivamente algumas otimizações, incluindo:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg 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><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> Copiado</div><!----></button><!----></div> <pre class=" "><!---->pipe<span class="hljs-selector-class">.enable_sequential_cpu_offload</span>() | |
| pipe<span class="hljs-selector-class">.vae</span><span class="hljs-selector-class">.enable_slicing</span>() | |
| pipe<span class="hljs-selector-class">.vae</span><span class="hljs-selector-class">.enable_tiling</span>()<!----></pre></div><!----> <ul><li>Para inferência em múltiplas GPUs, a otimização <code>enable_sequential_cpu_offload()</code> precisa ser desativada.</li> <li>O uso de modelos INT8 reduzirá a velocidade de inferência, o que é feito para acomodar GPUs com menos memória, mantendo uma perda mínima na qualidade do vídeo, embora a velocidade de inferência diminua significativamente.</li> <li>O modelo CogVideoX-2B foi treinado em precisão <code>FP16</code>, e todos os modelos CogVideoX-5B foram treinados em precisão <code>BF16</code>. | |
| Recomendamos usar a precisão em que o modelo foi treinado para inferência.</li> <li><a href="https://github.com/pytorch/ao" rel="nofollow">PytorchAO</a> e <a href="https://github.com/huggingface/optimum-quanto/" rel="nofollow">Optimum-quanto</a> podem ser | |
| usados para quantizar os módulos de text encoder, transformer e VAE, reduzindo os requisitos de memória do CogVideoX. Isso | |
| permite que o modelo rode em Colabs T4 gratuitos ou em GPUs com memória menor! Além disso, observe que a quantização TorchAO é totalmente | |
| compatível com <code>torch.compile</code>, o que pode melhorar significativamente a velocidade de inferência. A precisão FP8 deve ser usada em | |
| dispositivos com NVIDIA H100 ou superior, exigindo a instalação a partir do código-fonte dos pacotes Python <code>torch</code>, <code>torchao</code>, <code>diffusers</code> e <code>accelerate</code>. O CUDA 12.4 é recomendado.</li> <li>Os testes de velocidade de inferência também utilizaram o esquema de otimização de memória descrito acima. Sem a otimização de memória, a velocidade de inferência aumenta em cerca de 10%. Apenas a versão do modelo do <code>diffusers</code> suporta quantização.</li> <li>O modelo suporta apenas entrada em inglês; outros idiomas podem ser traduzidos para inglês para uso por meio de refinamento por modelos de grande escala.</li> <li>O uso de memória no ajuste fino de modelos é testado em um ambiente <code>8 * H100</code>, e o programa usa automaticamente a otimização <code>Zero 2</code>. Se um número específico de GPUs for indicado na tabela, é necessário usar esse número ou mais GPUs para o ajuste fino.</li></ul> <table><thead><tr><th><strong>Atributo</strong></th><th><strong>CogVideoX-2B</strong></th><th><strong>CogVideoX-5B</strong></th></tr></thead><tbody><tr><td><strong>Nome do Modelo</strong></td><td>CogVideoX-2B</td><td>CogVideoX-5B</td></tr><tr><td><strong>Precisão de Inferência</strong></td><td>FP16<em>(Recomendado), BF16, FP32, FP8</em>, INT8, INT4 não suportado</td><td>BF16 (Recomendado), FP16, FP32, FP8*, INT8, Não suportado INT4</td></tr><tr><td><strong>VRAM para inferência em GPU única</strong></td><td>FP16: Usando diffusers 12,5 GB<em>INT8: Usando diffusers com torchao 7,8 GB</em></td><td>BF16: Usando diffusers 20.7GB<em>INT8: Usando diffusers com torchao 11.4GB</em></td></tr><tr><td><strong>VRAM para inferência em múltiplas GPUs</strong></td><td>FP16: Usando diffusers 10GB*</td><td>BF16: Usando diffusers 15GB*</td></tr><tr><td><strong>Velocidade de Inferência</strong></td><td>A100 único: ~90 segundos, H100 único: ~45 segundos</td><td>A100 único: ~180 segundos, H100 único: ~90 segundos</td></tr><tr><td><strong>Precisão do ajuste fino</strong></td><td>FP16</td><td>BF16</td></tr><tr><td><strong>Consumo de VRAM no fine-tuning</strong></td><td>47 GB (bs=1, LORA) 61 GB (bs=2, LORA) 62GB (bs=1, SFT)</td><td>63 GB (bs=1, LORA) 80 GB (bs=2, LORA) 75GB (bs=1, SFT)</td></tr></tbody></table> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/diffusers/blob/main/docs/source/en/training/cogvideox.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_g37pnb = { | |
| 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.D3LnKZ4R.js"), | |
| import("/docs/diffusers/main/en/_app/immutable/entry/app.C0rBoMxR.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 314], | |
| data: [null,null], | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 56.2 kB
- Xet hash:
- 310a76696a844645407a8df3cd05f7097f3bfe3c2f2ca282466a03d76c3d36aa
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.