Buckets:

hf-doc-build/doc / diffusers /main /fr /training /cogvideox.html
mishig's picture
download
raw
57.6 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;CogVideoX&quot;,&quot;local&quot;:&quot;cogvideox&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Préparation des données&quot;,&quot;local&quot;:&quot;data-preparation&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Petit format&quot;,&quot;local&quot;:&quot;small-format&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Format de flux&quot;,&quot;local&quot;:&quot;stream-format&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Entraînement&quot;,&quot;local&quot;:&quot;training&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Inférence&quot;,&quot;local&quot;:&quot;inference&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Réduire l'utilisation de la mémoire&quot;,&quot;local&quot;:&quot;reduce-memory-usage&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;: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="{&quot;title&quot;:&quot;CogVideoX&quot;,&quot;local&quot;:&quot;cogvideox&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Data Preparation&quot;,&quot;local&quot;:&quot;data-preparation&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Small format&quot;,&quot;local&quot;:&quot;small-format&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Stream format&quot;,&quot;local&quot;:&quot;stream-format&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Training&quot;,&quot;local&quot;:&quot;training&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Inference&quot;,&quot;local&quot;:&quot;inference&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Reduce memory usage&quot;,&quot;local&quot;:&quot;reduce-memory-usage&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/><!---->
<link href="/docs/diffusers/main/en/_app/immutable/assets/0.tn0RQdqM.css" rel="modulepreload"> <!--[--><!--[0--><!--[--><!--[0--><!--[--><p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"><div dir="ltr" class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----></span> <span dir="auto">Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg><!----></button></div> <!--[-1--><!--]--></div><!----> <!--[0--><h1 class="relative group"><a id="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 est un modèle de génération de vidéo à partir de texte, axé sur la création de vidéos plus cohérentes et alignées sur le prompt. Il y parvient à l'aide de plusieurs méthodes.</p> <ul><li><p>un auto-encodeur variationnel 3D qui compresse les vidéos spatialement et temporellement, améliorant le taux de compression et la précision des vidéos.</p></li> <li><p>un bloc transformer expert pour aider à aligner le texte et la vidéo, et un module d'attention complète 3D pour capturer et créer des vidéos spatialement et temporellement précises.</p></li></ul> <p>Le test réel de la dimension des instructions vidéo a révélé que CogVideoX obtient de bons résultats en matière de thème cohérent, d'informations dynamiques, de fond cohérent, d'informations sur les objets, de mouvement fluide, de couleur, de scène, de style d'apparence et de style temporel, mais qu'il ne parvient pas à obtenir de bons résultats pour les actions humaines, les relations spatiales et les objets multiples.</p> <p>Le fine-tuning avec Diffusers peut aider à compenser ces résultats médiocres.</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><!---->Préparation des données<!----></span></h2><!--]--><!----> <p>Les scripts d'entraînement acceptent les données dans deux formats.</p> <p>Le premier format est adapté à l’entraînement à petite échelle, tandis que le second utilise un format CSV, plus approprié pour le flux de données lors d’un entraînement à grande échelle. À l’avenir, Diffusers prendra en charge la balise <code>&lt;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><!---->Petit format<!----></span></h3><!--]--><!----> <p>Deux fichiers, l’un contenant des prompts séparés par des lignes et l’autre contenant des chemins vers des données vidéo séparés par des lignes (le chemin vers les fichiers vidéo doit être relatif au chemin que vous transmettez lors de la spécification de <code>--instance_data_root</code>). Examinons un exemple pour mieux comprendre !</p> <p>Supposons que vous ayez spécifié <code>--instance_data_root</code> comme <code>/dataset</code>, et que ce répertoire contienne les fichiers : <code>prompts.txt</code> et <code>videos.txt</code>.</p> <p>Le fichier <code>prompts.txt</code> doit contenir des prompts séparés par des lignes :</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> Copié</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&#x27;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&#x27;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">&#x27;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>Le fichier <code>videos.txt</code> doit contenir des chemins vers des fichiers vidéo, séparés par des lignes. Notez que le chemin doit être <em>relatif</em> au répertoire <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> Copié</div><!----></button><!----></div> <pre class=" "><!---->videos<span class="hljs-symbol">/00000.mp4</span>
videos<span class="hljs-symbol">/00001.mp4</span>
...<!----></pre></div><!----> <p>Dans l'ensemble, voici à quoi ressemblerait votre jeu de données si vous exécutiez la commande <code>tree</code> sur le répertoire racine du jeu de données :</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> Copié</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>Lors de l'utilisation de ce format, <code>--caption_column</code> doit être <code>prompts.txt</code> et <code>--video_column</code> doit être <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><!---->Format de flux<!----></span></h3><!--]--><!----> <p>Vous pouvez utiliser un seul fichier CSV. Pour les besoins de cet exemple, supposez que vous disposez d'un fichier <code>metadata.csv</code>. Le format attendu est le suivant :</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> Copié</div><!----></button><!----></div> <pre class=" "><!---->&lt;CAPTION_COLUMN&gt;,&lt;PATH_TO_VIDEO_COLUMN&gt;
<span class="hljs-string">&quot;&quot;&quot;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.&quot;&quot;&quot;</span>,<span class="hljs-string">&quot;&quot;&quot;00000.mp4&quot;&quot;&quot;</span>
<span class="hljs-string">&quot;&quot;&quot;A black and white animated sequence on a ship&#x27;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&#x27;s interior remains static in the background, with minimalistic details such as a bell and open door. The character&#x27;s dynamic movements and changing expressions drive the narrative, with no camera movement to distract from its evolving reactions and physical gestures.&quot;&quot;&quot;</span>,<span class="hljs-string">&quot;&quot;&quot;00001.mp4&quot;&quot;&quot;</span>
...<!----></pre></div><!----> <p>Dans ce cas, <code>--instance_data_root</code> doit correspondre à l’emplacement où les vidéos sont stockées et <code>--dataset_name</code> doit être soit un chemin vers un dossier local, soit un jeu de données compatible <a href="https://huggingface.co/docs/datasets/main/en/package_reference/loading_methods#datasets.load_dataset" rel="nofollow">load_dataset</a> hébergé sur le Hub. En supposant que vous avez des vidéos de gameplay Minecraft sur <code>https://huggingface.co/datasets/my-awesome-username/minecraft-videos</code>, vous devez spécifier <code>my-awesome-username/minecraft-videos</code>.</p> <p>Lors de l'utilisation de ce format, <code>--caption_column</code> doit être <code>&lt;CAPTION_COLUMN></code> et <code>--video_column</code> doit être <code>&lt;PATH_TO_VIDEO_COLUMN></code>.</p> <p>Vous n’êtes pas strictement limité au format CSV. Tout format fonctionne à condition que la méthode <code>load_dataset</code> prenne en charge le format de fichier pour charger une colonne de base <code>&lt;PATH_TO_VIDEO_COLUMN></code> et <code>&lt;CAPTION_COLUMN></code>. La raison pour laquelle il faut passer par ces acrobaties d’organisation de jeu de données pour charger des données vidéo est que <code>load_dataset</code> ne prend pas entièrement en charge tous les types de formats vidéo.</p> <blockquote class="note"><p>CogVideoX fonctionne de manière optimale avec des prompts longs et descriptifs, enrichis par un LLM, pour la génération de vidéos. Nous recommandons de prétraiter vos vidéos en générant d’abord un résumé à l’aide d’un VLM, puis d’enrichir les prompts avec un LLM. Pour générer les légendes ci-dessus, nous utilisons <a href="https://huggingface.co/openbmb/MiniCPM-V-2_6" rel="nofollow">MiniCPM-V-26</a> et <a href="https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct" rel="nofollow">Llama-3.1-8B-Instruct</a>. Un exemple très minimaliste et sans fioritures est disponible <a href="https://gist.github.com/a-r-r-o-w/4dee20250e82f4e44690a02351324a4a" rel="nofollow">ici</a>. La recommandation officielle pour l’enrichissement des prompts est <a href="https://huggingface.co/THUDM?search_models=chatglm" rel="nofollow">ChatGLM</a>, et une longueur de 50 à 100 mots est considérée comme appropriée.</p></blockquote> <blockquote><p>![NOTE]
Il est attendu que votre jeu de données soit déjà prétraité. Sinon, un prétraitement de base peut être effectué en jouant avec les paramètres suivants : <code>--height</code>, <code>--width</code>, <code>--fps</code>, <code>--max_num_frames</code>, <code>--skip_frames_start</code> et <code>--skip_frames_end</code>.
Actuellement, toutes les vidéos de votre jeu de données doivent contenir le même nombre de frames vidéo lorsque la taille du lot d'entraînement est &gt; 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><!---->Entraînement<!----></span></h2><!--]--><!----> <p>Vous devez configurer votre environnement de développement en installant les dépendances nécessaires. Les paquets suivants sont requis :</p> <ul><li>Torch 2.0 ou supérieur, en fonction des fonctionnalités d'entraînement que vous utilisez (les versions les plus récentes ou les versions nocturnes peuvent être requises pour l'entraînement quantifié/deepspeed)</li> <li><code>pip install diffusers transformers accelerate peft huggingface_hub</code> pour tout ce qui concerne la modélisation et l’entraînement</li> <li><code>pip install datasets decord</code> pour charger des données d'entraînement vidéo</li> <li><code>pip install bitsandbytes</code> pour utiliser les optimiseurs Adam ou AdamW en 8 bits pour un entraînement optimisé en mémoire</li> <li><code>pip install wandb</code> en option pour surveiller les journaux d'entraînement</li> <li><code>pip install deepspeed</code> éventuellement pour l'entraînement <a href="https://github.com/microsoft/DeepSpeed" rel="nofollow">DeepSpeed</a></li> <li><code>pip install prodigyopt</code> si vous souhaitez utiliser l’optimiseur Prodigy pour l’entraînement</li></ul> <p>Pour vous assurer de pouvoir exécuter avec succès les dernières versions des scripts d'exemple, nous vous recommandons vivement de <strong>l'installer à partir du code source</strong> et de maintenir l'installation à jour, car nous mettons à jour les scripts d'exemple fréquemment et installons certaines dépendances spécifiques aux exemples. Pour ce faire, exécutez les étapes suivantes dans un nouvel environnement virtuel :</p> <p>Avant d'exécuter le script, assurez-vous d'installer la bibliothèque à partir du code source :</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> Copié</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>Puis accédez au dossier d'exemple contenant le script d'entraînement et installez les dépendances requises pour le script que vous utilisez :</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> Copié</div><!----></button><!----></div> <pre class="language-bash "><!----><span class="hljs-built_in">cd</span> examples/cogvideo
pip install -r requirements.txt<!----></pre></div><!----> <p>Et initialisez un environnement <a href="https://github.com/huggingface/accelerate/" rel="nofollow">🤗 Accelerate</a> avec :</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> Copié</div><!----></button><!----></div> <pre class="language-bash "><!---->accelerate config<!----></pre></div><!----> <p>Ou, pour une configuration par défaut d'Accelerate sans répondre à des questions sur votre environnement</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> Copié</div><!----></button><!----></div> <pre class="language-bash "><!---->accelerate config default<!----></pre></div><!----> <p>Ou si votre environnement ne prend pas en charge un shell interactif (par exemple, un 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> Copié</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>Lors de l’exécution de <code>accelerate config</code>, l’utilisation de torch.compile peut entraîner des accélérations spectaculaires. La bibliothèque PEFT est utilisée comme backend pour l’entraînement LoRA, assurez-vous donc d’avoir <code>peft>=0.6.0</code> installé dans votre environnement.</p> <p>Si vous souhaitez publier votre modèle sur le Hub après l’entraînement, avec une fiche modèle soignée, assurez-vous d’être connecté :</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> Copié</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>Assurez-vous que vos données sont préparées comme décrit dans <a href="#data-preparation">Préparation des données</a>. Une fois prêt, vous pouvez commencer l'entraînement !</p> <p>En supposant que vous entraînez sur 50 vidéos d’un concept similaire, nous avons constaté que 1500 à 2000 étapes fonctionnent bien. La recommandation officielle est toutefois de 100 vidéos avec un total de 4000 étapes. En supposant que vous entraînez sur un seul GPU avec un <code>--train_batch_size</code> de <code>1</code> :</p> <ul><li>1500 étapes sur 50 vidéos correspondraient à <code>30</code> époques d'entraînement</li> <li>4000 étapes sur 100 vidéos correspondraient à <code>40</code> époques d'entraînement</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> Copié</div><!----></button><!----></div> <pre class="language-bash "><!----><span class="hljs-meta">#!/bin/bash</span>
GPU_IDS=<span class="hljs-string">&quot;0&quot;</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 &lt;CACHE_DIR&gt; \
--instance_data_root &lt;PATH_TO_WHERE_VIDEO_FILES_ARE_STORED&gt; \
--dataset_name my-awesome-name/my-awesome-dataset \
--caption_column &lt;CAPTION_COLUMN&gt; \
--video_column &lt;PATH_TO_VIDEO_COLUMN&gt; \
--id_token &lt;ID_TOKEN&gt; \
--validation_prompt <span class="hljs-string">&quot;&lt;ID_TOKEN&gt; 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&#x27;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&#x27;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&quot;</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>Pour mieux suivre nos expériences d'entraînement, nous utilisons les drapeaux suivants dans la commande ci-dessus :</p> <ul><li><code>--report_to wandb</code> garantit que les exécutions d’entraînement sont suivies sur Weights and Biases. Pour l’utiliser, assurez-vous d’installer <code>wandb</code> avec <code>pip install wandb</code>.</li> <li><code>validation_prompt</code> et <code>validation_epochs</code> pour permettre au script d’effectuer quelques exécutions d’inférence de validation. Cela nous permet de vérifier qualitativement si l’entraînement progresse comme prévu.</li></ul> <p>Définir le <code>&lt;ID_TOKEN></code> n’est pas obligatoire. D’après quelques expérimentations limitées, nous avons constaté que cela fonctionne mieux (car cela ressemble à l’entraînement <a href="./dreambooth">Dreambooth</a>) que sans. Lorsqu’il est fourni, le <code>&lt;ID_TOKEN></code> est ajouté au début de chaque invite. Ainsi, si votre <code>&lt;ID_TOKEN></code> était <code>"DISNEY"</code> et votre invite <code>"Spiderman swinging over buildings"</code>, l’invite effective utilisée lors de l’entraînement serait <code>"DISNEY Spiderman swinging over buildings"</code>. S’il n’est pas fourni, vous entraînez soit sans aucun jeton supplémentaire, soit vous pouvez enrichir votre jeu de données pour appliquer le jeton à l’endroit souhaité avant de démarrer l’entraînement.</p> <blockquote class="note"><p>Vous pouvez passer <code>--use_8bit_adam</code> pour réduire les besoins en mémoire de l'entraînement.</p></blockquote> <blockquote class="important"><p>Les paramètres suivants ont été testés lors de l’ajout de la prise en charge de l’entraînement LoRA pour CogVideoX :</p> <ul><li>Nos tests ont été effectués principalement sur CogVideoX-2b. Nous travaillerons bientôt sur CogVideoX-5b et CogVideoX-5b-I2V</li> <li>Un jeu de données composé de 70 vidéos d'entraînement de résolution <code>200 x 480 x 720</code> (F x H x W). À partir de celui-ci, en utilisant le saut de frames lors du prétraitement des données, nous avons créé deux jeux de données plus petits de 49 et 16 frames pour des expérimentations plus rapides et parce que la limite maximale recommandée par l'équipe CogVideoX est de 49 frames. Sur les 70 vidéos, nous avons créé trois groupes de 10, 25 et 50 vidéos. Toutes les vidéos étaient similaires en termes de nature du concept entraîné.</li> <li>25 vidéos ou plus ont donné les meilleurs résultats pour l’entraînement de nouveaux concepts et styles.</li> <li>Nous avons constaté qu'il est préférable d'entraîner avec un jeton d'identifiant qui peut être spécifié via <code>--id_token</code>. Cela ressemble à un entraînement de type Dreambooth, mais un simple affinement sans un tel jeton fonctionne également.</li> <li>Le concept entraîné semblait fonctionner assez bien lorsqu'il était combiné à des prompts totalement sans rapport. Nous nous attendons à des résultats encore meilleurs si CogVideoX-5B est affiné.</li> <li>Le dépôt d'origine utilise un <code>lora_alpha</code> de <code>1</code>. Nous avons constaté que cette valeur n'était pas adaptée lors de nombreuses exécutions, possiblement en raison de différences entre les backends de modélisation et les paramètres d'entraînement. Nous recommandons de définir le <code>lora_alpha</code> sur <code>rank</code> ou <code>rank // 2</code>.</li> <li>Si vous entraînez sur des données dont les légendes produisent de mauvais résultats avec le modèle d’origine, un <code>rank</code> de 64 ou plus est recommandé, c’est d’ailleurs la recommandation de l’équipe derrière CogVideoX. Si les générations sont déjà modérément bonnes sur vos légendes d’entraînement, un <code>rank</code> de 16/32 devrait fonctionner. Nous avons constaté que définir le rank trop bas, par exemple <code>4</code>, n’est pas idéal et ne produit pas de résultats prometteurs.</li> <li>Les auteurs de CogVideoX recommandent 4000 étapes d’entraînement et 100 vidéos d’entraînement au total pour obtenir le meilleur résultat. Bien que cela puisse donner les meilleurs résultats, nos expériences limitées ont montré que 2000 étapes et 25 vidéos pouvaient également suffire.</li> <li>Lors de l’utilisation de l’optimiseur Prodigy pour l’entraînement, on peut suivre les recommandations de ce <a href="https://huggingface.co/blog/sdxl_lora_advanced_script" rel="nofollow">blog</a>. Prodigy a tendance à sur-apprendre rapidement. D’après mes tests très limités, j’ai trouvé qu’un taux d’apprentissage de <code>0.5</code> était adapté, en plus de <code>--prodigy_use_bias_correction</code>, <code>prodigy_safeguard_warmup</code> et <code>--prodigy_decouple</code>.</li> <li>Le taux d'apprentissage recommandé par les auteurs de CogVideoX et issu de nos expérimentations avec Adam/AdamW se situe entre <code>1e-3</code> et <code>1e-4</code> pour un jeu de données de plus de 25 vidéos.</li></ul> <p>Notez que nos tests ne sont pas exhaustifs en raison du temps limité consacré à l'exploration. Notre recommandation serait de tester les différents paramètres pour trouver les réglages optimaux pour vos données.</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><!---->Inférence<!----></span></h2><!--]--><!----> <p>Une fois que vous avez entraîné un modèle lora, l’inférence peut être effectuée en chargeant simplement les poids lora dans le <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> Copié</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">&quot;THUDM/CogVideoX-2b&quot;</span>, dtype=torch.float16)
<span class="hljs-comment"># pipe.load_lora_weights(&quot;/path/to/lora/weights&quot;, adapter_name=&quot;cogvideox-lora&quot;) # Or,</span>
pipe.load_lora_weights(<span class="hljs-string">&quot;my-awesome-hf-username/my-awesome-lora-name&quot;</span>, adapter_name=<span class="hljs-string">&quot;cogvideox-lora&quot;</span>) <span class="hljs-comment"># If loading from the HF Hub</span>
pipe.to(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-comment"># or &quot;mps&quot;, &quot;xpu&quot;, &quot;cpu&quot;</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">&quot;cogvideox-lora&quot;</span>], [<span class="hljs-number">32</span> / <span class="hljs-number">64</span>])
prompt = <span class="hljs-string">&quot;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.&quot;</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">&quot;output.mp4&quot;</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><!---->Réduire l'utilisation de la mémoire<!----></span></h2><!--]--><!----> <p>Lors des tests effectués avec la bibliothèque diffusers, toutes les optimisations incluses dans la bibliothèque diffusers étaient activées. Ce schéma n'a pas été testé en termes d'utilisation mémoire réelle sur des dispositifs autres que les architectures <strong>NVIDIA A100 / H100</strong>.
En général, ce schéma peut être adapté à tous les dispositifs de l'architecture <strong>NVIDIA Ampere</strong> et supérieure. Si les optimisations sont désactivées, la consommation mémoire sera multipliée, l'utilisation mémoire de pointe étant environ 3 fois la valeur indiquée dans le tableau.
Cependant, la vitesse augmentera d'environ 3 à 4 fois. Vous pouvez désactiver sélectivement certaines optimisations, notamment :</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> Copié</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>Pour l'inférence multi-GPU, l'optimisation <code>enable_sequential_cpu_offload()</code> doit être désactivée.</li> <li>L’utilisation de modèles INT8 ralentira l’inférence, ce qui est fait pour prendre en charge des GPU à faible mémoire tout en maintenant une perte de qualité vidéo minimale, bien que la vitesse d’inférence diminuera considérablement.</li> <li>Le modèle CogVideoX-2B a été entraîné en précision <code>FP16</code>, et tous les modèles CogVideoX-5B ont été entraînés en précision <code>BF16</code>.
Nous recommandons d’utiliser la précision dans laquelle le modèle a été entraîné pour l’inférence.</li> <li><a href="https://github.com/pytorch/ao" rel="nofollow">PytorchAO</a> et <a href="https://github.com/huggingface/optimum-quanto/" rel="nofollow">Optimum-quanto</a> peuvent être utilisés pour quantiser les modules encodeur de texte, transformer et VAE afin de réduire les besoins en mémoire de CogVideoX. Cela permet d’exécuter le modèle sur des Colabs T4 gratuits ou sur des GPU dotés d’une mémoire plus faible ! Notez également que la quantisation TorchAO est entièrement compatible avec <code>torch.compile</code>, ce qui peut améliorer considérablement la vitesse d’inférence. La précision FP8 doit être utilisée sur des équipements NVIDIA H100 et supérieurs, nécessitant l’installation depuis le code source des paquets Python <code>torch</code>, <code>torchao</code>, <code>diffusers</code> et <code>accelerate</code>. CUDA 12.4 est recommandé.</li> <li>Les tests de vitesse d'inférence ont également utilisé le schéma d'optimisation de la mémoire ci-dessus. Sans optimisation de la mémoire, la vitesse d'inférence augmente d'environ 10 %. Seule la version <code>diffusers</code> du modèle prend en charge la quantification.</li> <li>Le modèle ne prend en charge que les entrées en anglais ; les autres langues peuvent être traduites en anglais pour être utilisées via un raffinement par un grand modèle.</li> <li>La consommation mémoire de l’ajustement fin du modèle est testée dans un environnement <code>8 * H100</code>, et le programme utilise automatiquement l’optimisation <code>Zero 2</code>. Si un nombre spécifique de GPU est indiqué dans le tableau, il faut utiliser ce nombre de GPU ou plus pour l’ajustement fin.</li></ul> <table><thead><tr><th><strong>Attribut</strong></th><th><strong>CogVideoX-2B</strong></th><th><strong>CogVideoX-5B</strong></th></tr></thead><tbody><tr><td><strong>Nom du modèle</strong></td><td>CogVideoX-2B</td><td>CogVideoX-5B</td></tr><tr><td><strong>Précision d'inférence</strong></td><td>FP16<em>(Recommandé), BF16, FP32, FP8</em>, INT8, INT4 non pris en charge</td><td>BF16 (Recommandé), FP16, FP32, FP8*, INT8, INT4 non pris en charge</td></tr><tr><td><strong>VRAM d'inférence sur GPU unique</strong></td><td>FP16 : Utilisation de diffusers 12,5 Go<em>INT8 : Utilisation de diffusers avec torchao 7,8 Go</em></td><td>BF16 : Utilisation de diffusers 20,7 Go<em>INT8 : Utilisation de diffusers avec torchao 11,4 Go</em></td></tr><tr><td><strong>VRAM pour l'inférence multi-GPU</strong></td><td>FP16 : Utilisation de diffusers 10 Go*</td><td>BF16 : Utilisation de diffusers 15 Go*</td></tr><tr><td><strong>Vitesse d'inférence</strong></td><td>A100 unique : ~90 secondes, H100 unique : ~45 secondes</td><td>A100 unique : ~180 secondes, H100 unique : ~90 secondes</td></tr><tr><td><strong>Précision de l'ajustement fin</strong></td><td>FP16</td><td>BF16</td></tr><tr><td><strong>Consommation de VRAM lors de l'ajustement fin</strong></td><td>47 Go (bs=1, LORA) 61 Go (bs=2, LORA) 62 Go (bs=1, SFT)</td><td>63 Go (bs=1, LORA) 80 Go (bs=2, LORA) 75 Go (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:
57.6 kB
·
Xet hash:
a849f70a3da06b4dfe1f9b33aa546eea52c0602c5f502845f291038661c651fe

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