Commit 1c05717c authored by 孙傲's avatar 孙傲

完善lora-scripts

parent 295834b8
...@@ -27,8 +27,13 @@ d----- 2023/7/10 14:48 tools ...@@ -27,8 +27,13 @@ d----- 2023/7/10 14:48 tools
双击 `D:\awesome-stable-diffusion-master\tools\Git-2.41.0.2-64-bit.exe` 安装 `git`,安装过程中一路下一步即可。 双击 `D:\awesome-stable-diffusion-master\tools\Git-2.41.0.2-64-bit.exe` 安装 `git`,安装过程中一路下一步即可。
3. 安装 `Python` 3. 安装 `Python`
双击 `D:\awesome-stable-diffusion-master\tools\python-3.10.11-amd64.exe` 安装 `Python`,**安装过程中勾选 `Add python.exe to PATH`**,一路下一步即可。 双击 `D:\awesome-stable-diffusion-master\tools\python-3.10.11-amd64.exe` 安装 `Python`
**注意:** 安装界面的第一步最下面就有`Add python.exe to PATH`选项,勾选后直接选第一个 `Install Now` 即可。 **注意:安装过程中勾选 `Add python.exe to PATH`**
安装界面的第一步最下面就有`Add python.exe to PATH`选项,勾选后直接选第一个 `Install Now`,一路下一步即可。
4. 配置 `Stable Diffusion web UI`
双击 `D:\awesome-stable-diffusion-master\stable-diffusion-webui\webui-user.bat` 程序自动安装依赖,安装过程中过下载较大文件,**耐心等待**。
5. 配置 `LoRA` 训练环境
右键点击 `D:\awesome-stable-diffusion-master\lora-scripts\install-cn.ps1`,选择 `使用 PowerShell 运行`**耐心等待**
4. 安装 `Stable Diffusion web UI`
双击 `D:\awesome-stable-diffusion-master\stable-diffusion-webui\webui-user.bat` 程序自动安装依赖,安装过程中过下载较大文件,耐心等待。
\ No newline at end of file
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.49">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<title>SD 训练 UI</title><meta name="description" content="">
<link rel="modulepreload" href="/assets/app.fe4df4fe.js"><link rel="modulepreload" href="/assets/404.html.0f583043.js"><link rel="modulepreload" href="/assets/404.html.686caba0.js"><link rel="prefetch" href="/assets/index.html.9d7cc666.js"><link rel="prefetch" href="/assets/tagger.html.ddeabc3c.js"><link rel="prefetch" href="/assets/tensorboard.html.37ea225e.js"><link rel="prefetch" href="/assets/index.html.fbbfced2.js"><link rel="prefetch" href="/assets/about.html.5b0c0de9.js"><link rel="prefetch" href="/assets/settings.html.3a303daf.js"><link rel="prefetch" href="/assets/basic.html.f70a3f10.js"><link rel="prefetch" href="/assets/index.html.b97ec799.js"><link rel="prefetch" href="/assets/master.html.3cab76fc.js"><link rel="prefetch" href="/assets/params.html.c8cc13ef.js"><link rel="prefetch" href="/assets/index.html.dc5838ca.js"><link rel="prefetch" href="/assets/tagger.html.de59860d.js"><link rel="prefetch" href="/assets/tensorboard.html.7b8e6327.js"><link rel="prefetch" href="/assets/index.html.798a797d.js"><link rel="prefetch" href="/assets/about.html.13e41973.js"><link rel="prefetch" href="/assets/settings.html.52ef2a95.js"><link rel="prefetch" href="/assets/basic.html.f90c26cb.js"><link rel="prefetch" href="/assets/index.html.92c6a36d.js"><link rel="prefetch" href="/assets/master.html.29c8e104.js"><link rel="prefetch" href="/assets/params.html.0f790382.js"><link rel="prefetch" href="/assets/404.4218269e.js"><link rel="prefetch" href="/assets/layout.832a8147.js">
<link rel="stylesheet" href="/assets/style.a0675c8c.css">
</head>
<body>
<div id="app"><!--[--><div class="theme-container"><main class="page"><div class="theme-default-content"><h1>404</h1><blockquote>That&#39;s a Four-Oh-Four.</blockquote><a href="/" class="">Take me home</a></div></main></div><!----><!--]--></div>
<script type="module" src="/assets/app.fe4df4fe.js" defer></script>
</body>
</html>
import{_ as i,f as d,u as p,g as f,r as v,o as k,c as g,a as e,t as c,d as L,w as x,b as B,h as l}from"./app.fe4df4fe.js";const N={class:"theme-container"},T={class:"page"},b={class:"theme-default-content"},C=e("h1",null,"404",-1),M=d({__name:"404",setup(R){var a,s,n;const _=p(),o=f(),t=(a=o.value.notFound)!=null?a:["Not Found"],r=()=>t[Math.floor(Math.random()*t.length)],u=(s=o.value.home)!=null?s:_.value,m=(n=o.value.backToHome)!=null?n:"Back to home";return(V,w)=>{const h=v("RouterLink");return k(),g("div",N,[e("main",T,[e("div",b,[C,e("blockquote",null,c(r()),1),L(h,{to:l(u)},{default:x(()=>[B(c(l(m)),1)]),_:1},8,["to"])])])])}}});var F=i(M,[["__file","404.vue"]]);export{F as default};
import{_ as e,o as _,c}from"./app.fe4df4fe.js";const r={};function t(o,a){return _(),c("div")}var s=e(r,[["render",t],["__file","404.html.vue"]]);export{s as default};
const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"404"},"excerpt":"","headers":[],"filePathRelative":null}');export{t as data};
import{_ as n,r as o,o as s,c,a as e,b as r,d as a}from"./app.fe4df4fe.js";const h={},i=e("h2",{id:"\u5173\u4E8E",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u5173\u4E8E","aria-hidden":"true"},"#"),r(" \u5173\u4E8E")],-1),d={href:"https://github.com/shigma/schemastery",target:"_blank",rel:"noopener noreferrer"},l=e("h3",{id:"\u53CD\u9988",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u53CD\u9988","aria-hidden":"true"},"#"),r(" \u53CD\u9988")],-1),_={href:"https://github.com/Akegarasu/lora-scripts/issues",target:"_blank",rel:"noopener noreferrer"},u=e("h3",{id:"\u8054\u7CFB\u65B9\u5F0F",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u8054\u7CFB\u65B9\u5F0F","aria-hidden":"true"},"#"),r(" \u8054\u7CFB\u65B9\u5F0F")],-1),p=e("p",null,"\u90AE\u7BB1\uFF1Awork@anzu.link",-1),f={href:"https://discord.gg/Uu3syD9PnR",target:"_blank",rel:"noopener noreferrer"};function m(b,k){const t=o("ExternalLinkIcon");return s(),c("div",null,[i,e("p",null,[r("\u7531 "),e("a",d,[r("schemastery"),a(t)]),r(" \u5F3A\u529B\u9A71\u52A8")]),l,e("p",null,[r("\u8BF7\u524D\u5F80 Github \u63D0\u4EA4 "),e("a",_,[r("issue"),a(t)])]),u,p,e("p",null,[e("a",f,[r("discord \u9891\u9053"),a(t)])])])}var x=n(h,[["render",m],["__file","about.html.vue"]]);export{x as default};
const t=JSON.parse('{"key":"v-b5471278","path":"/other/about.html","title":"","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"filePathRelative":"other/about.md"}');export{t as data};
This diff is collapsed.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.484 28.284"><g transform="translate(-229 -126.358)" fill="currentColor"><rect width="35" height="5" rx="2" transform="rotate(-45 296.902 -200.874)"/><rect width="35" height="5" rx="2" transform="rotate(-135 169.502 20.377)"/></g></svg>
\ No newline at end of file
const e=JSON.parse(`{"key":"v-3e43d6e2","path":"/lora/basic.html","title":"LoRA \u8BAD\u7EC3 \u65B0\u624B\u6A21\u5F0F","lang":"en-US","frontmatter":{"example":true,"trainType":"lora-basic","code":"Schema.intersect([\\n Schema.object({\\n pretrained_model_name_or_path: Schema.string().role('folder').default(\\"./sd-models/model.ckpt\\").description(\\"\u5E95\u6A21\u8DEF\u5F84\\"),\\n }).description(\\"\u8BAD\u7EC3\u7528\u6A21\u578B\\"),\\n\\n Schema.object({\\n train_data_dir: Schema.string().role('folder').default(\\"./train/aki\\").description(\\"\u8BAD\u7EC3\u6570\u636E\u96C6\u8DEF\u5F84\\"),\\n reg_data_dir: Schema.string().role('folder').description(\\"\u6B63\u5219\u5316\u6570\u636E\u96C6\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u4E0D\u4F7F\u7528\u6B63\u5219\u5316\u56FE\u50CF\\"),\\n resolution: Schema.string().default(\\"512,512\\").description(\\"\u8BAD\u7EC3\u56FE\u7247\u5206\u8FA8\u7387\uFF0C\u5BBDx\u9AD8\u3002\u652F\u6301\u975E\u6B63\u65B9\u5F62\uFF0C\u4F46\u5FC5\u987B\u662F 64 \u500D\u6570\u3002\\"),\\n }).description(\\"\u6570\u636E\u96C6\u8BBE\u7F6E\\"),\\n\\n Schema.object({\\n output_name: Schema.string().default(\\"aki\\").description(\\"\u6A21\u578B\u4FDD\u5B58\u540D\u79F0\\"),\\n output_dir: Schema.string().default(\\"./output\\").description(\\"\u6A21\u578B\u4FDD\u5B58\u6587\u4EF6\u5939\\"),\\n save_every_n_epochs: Schema.number().default(2).description(\\"\u6BCF N epoch\uFF08\u8F6E\uFF09\u81EA\u52A8\u4FDD\u5B58\u4E00\u6B21\u6A21\u578B\\"),\\n }).description(\\"\u4FDD\u5B58\u8BBE\u7F6E\\"),\\n\\n Schema.object({\\n max_train_epochs: Schema.number().min(1).default(10).description(\\"\u6700\u5927\u8BAD\u7EC3 epoch\uFF08\u8F6E\u6570\uFF09\\"),\\n train_batch_size: Schema.number().min(1).default(1).description(\\"\u6279\u91CF\u5927\u5C0F\\"),\\n }).description(\\"\u8BAD\u7EC3\u76F8\u5173\u53C2\u6570\\"),\\n\\n Schema.intersect([\\n Schema.object({\\n unet_lr: Schema.string().default(\\"1e-4\\").description(\\"U-Net \u5B66\u4E60\u7387\\"),\\n text_encoder_lr: Schema.string().default(\\"1e-5\\").description(\\"\u6587\u672C\u7F16\u7801\u5668\u5B66\u4E60\u7387\\"),\\n lr_scheduler: Schema.union([\\n \\"cosine\\",\\n \\"cosine_with_restarts\\",\\n \\"constant\\",\\n \\"constant_with_warmup\\",\\n ]).default(\\"cosine_with_restarts\\").description(\\"\u5B66\u4E60\u7387\u8C03\u5EA6\u5668\u8BBE\u7F6E\\"),\\n optimizer_type: Schema.union([\\n \\"AdamW8bit\\",\\n \\"Lion\\",\\n ]).default(\\"AdamW8bit\\").description(\\"\u4F18\u5316\u5668\u8BBE\u7F6E\\"),\\n }).description(\\"\u5B66\u4E60\u7387\u4E0E\u4F18\u5316\u5668\u8BBE\u7F6E\\"),\\n\\n Schema.union([\\n Schema.object({\\n lr_scheduler: Schema.const('cosine_with_restarts'),\\n lr_scheduler_num_cycles: Schema.number().default(1).description('\u91CD\u542F\u6B21\u6570'),\\n }),\\n Schema.object({\\n lr_scheduler: Schema.const('constant_with_warmup'),\\n lr_warmup_steps: Schema.number().default(100).description('\u70ED\u8EAB\u6B65\u6570'),\\n }),\\n Schema.object({}),\\n ]),\\n ]),\\n\\n Schema.intersect([\\n Schema.object({\\n enable_preview: Schema.boolean().default(false).description('\u542F\u7528\u8BAD\u7EC3\u9884\u89C8\u56FE\uFF0C\u4F1A\u6D88\u8017\u66F4\u591A\u663E\u5B58\u62D6\u6162\u901F\u5EA6'),\\n }).description('\u8BAD\u7EC3\u9884\u89C8\u56FE\u8BBE\u7F6E'),\\n\\n Schema.union([\\n Schema.object({\\n enable_preview: Schema.const(true).required(),\\n sample_prompts: Schema.string().default(\\"./toml/sample_prompts.txt\\").description(\\"\u9884\u89C8\u56FE\u751F\u6210\u53C2\u6570\uFF0C\u586B\u5199 txt \u6587\u4EF6\u76EE\u5F55\u3002\u9ED8\u8BA4\u4E3A sample_prompts.txt\uFF0C\u53EF\u4EE5\u81EA\u5DF1\u53C2\u8003\u8BE5\u6587\u4EF6\u4FEE\u6539\u3002\\"),\\n sample_sampler: Schema.union([\\"ddim\\", \\"pndm\\", \\"lms\\", \\"euler\\", \\"euler_a\\", \\"heun\\", \\"dpm_2\\", \\"dpm_2_a\\", \\"dpmsolver\\", \\"dpmsolver++\\", \\"dpmsingle\\", \\"k_lms\\", \\"k_euler\\", \\"k_euler_a\\", \\"k_dpm_2\\", \\"k_dpm_2_a\\"]).default(\\"euler_a\\").description(\\"\u751F\u6210\u9884\u89C8\u56FE\u6240\u7528\u91C7\u6837\u5668\\"),\\n sample_every_n_epochs: Schema.number().default(2).description(\\"\u6BCF n \u4E2A epoch \u751F\u6210\u4E00\u6B21\u9884\u89C8\u56FE\\"),\\n }),\\n Schema.object({}),\\n ]),\\n ]),\\n\\n Schema.intersect([\\n Schema.object({\\n network_weights: Schema.string().role('folder').description(\\"\u4ECE\u5DF2\u6709\u7684 LoRA \u6A21\u578B\u4E0A\u7EE7\u7EED\u8BAD\u7EC3\uFF0C\u586B\u5199\u8DEF\u5F84\\"),\\n network_dim: Schema.number().min(8).max(256).step(8).default(32).description(\\"\u7F51\u7EDC\u7EF4\u5EA6\uFF0C\u5E38\u7528 4~128\uFF0C\u4E0D\u662F\u8D8A\u5927\u8D8A\u597D\\"),\\n network_alpha: Schema.number().min(1).default(32).description(\\n \\"\u5E38\u7528\u4E0E network_dim \u76F8\u540C\u7684\u503C\u6216\u8005\u91C7\u7528\u8F83\u5C0F\u7684\u503C\uFF0C\u5982 network_dim \u7684\u4E00\u534A\u3002\u4F7F\u7528\u8F83\u5C0F\u7684 alpha \u9700\u8981\u63D0\u5347\u5B66\u4E60\u7387\u3002\\"\\n ),\\n }).description(\\"\u7F51\u7EDC\u8BBE\u7F6E\\"),\\n ]),\\n\\n Schema.object({\\n shuffle_caption: Schema.boolean().default(true).description(\\"\u8BAD\u7EC3\u65F6\u968F\u673A\u6253\u4E71 tokens\\"),\\n keep_tokens: Schema.number().min(0).max(255).step(1).default(0).description(\\"\u5728\u968F\u673A\u6253\u4E71 tokens \u65F6\uFF0C\u4FDD\u7559\u524D N \u4E2A\u4E0D\u53D8\\"),\\n }).description(\\"caption \u9009\u9879\\"),\\n]);\\n"},"excerpt":"","headers":[],"filePathRelative":"lora/basic.md"}`);export{e as data};
import{_ as a,o as t,c as o,a as e,b as c}from"./app.fe4df4fe.js";const r={},s=e("h1",{id:"lora-\u8BAD\u7EC3-\u65B0\u624B\u6A21\u5F0F",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#lora-\u8BAD\u7EC3-\u65B0\u624B\u6A21\u5F0F","aria-hidden":"true"},"#"),c(" LoRA \u8BAD\u7EC3 \u65B0\u624B\u6A21\u5F0F")],-1),_=e("p",null,"\u9ED8\u8BA4\u8BBE\u7F6E\u4E3A\u4F60\u51C6\u5907\u597D\u4E86\u6240\u6709\u9700\u8981\u7684\u53C2\u6570\uFF0C\u53EA\u9700\u8981\u4F60\u4FEE\u6539\u5E95\u6A21\u8DEF\u5F84\u3001\u8BAD\u7EC3\u96C6\u8DEF\u5F84\u3001\u8BAD\u7EC3\u8F6E\u6570\u5373\u53EF\u4E00\u952E\u8BAD\u7EC3\u6A21\u578B\u3002",-1),n=[s,_];function d(i,l){return t(),o("div",null,n)}var f=a(r,[["render",d],["__file","basic.html.vue"]]);export{f as default};
import{_ as t,o as a,c as o,a as e,b as r}from"./app.fe4df4fe.js";const c={},n=e("h1",{id:"dreambooth-\u8BAD\u7EC3",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#dreambooth-\u8BAD\u7EC3","aria-hidden":"true"},"#"),r(" Dreambooth \u8BAD\u7EC3")],-1),s=e("p",null,"\u8FD8\u5728\u5F00\u53D1\u4E2D\uFF0C\u656C\u8BF7\u671F\u5F85\u3002",-1),d=[n,s];function _(h,i){return a(),o("div",null,d)}var m=t(c,[["render",_],["__file","index.html.vue"]]);export{m as default};
import{_ as t,o,c as n,a as e,b as s}from"./app.fe4df4fe.js";const a={},l=e("h1",{id:"lora-\u8BAD\u7EC3",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#lora-\u8BAD\u7EC3","aria-hidden":"true"},"#"),s(" LoRA \u8BAD\u7EC3")],-1),c=e("p",null,"\u672C LoRA \u8BAD\u7EC3\u754C\u9762\u5206\u4E3A\u4E24\u79CD\u6A21\u5F0F\u3002",-1),i=e("ul",null,[e("li",null,"\u9488\u5BF9\u65B0\u624B\u7684\u7B80\u6613\u8BAD\u7EC3\u53EA\u6709\u90E8\u5206\u53EF\u8C03\u8282\u53C2\u6570"),e("li",null,"\u9488\u5BF9\u6709\u4E00\u5B9A\u7ECF\u9A8C\u7684\u7528\u6237\u7684\u4E13\u5BB6\u6A21\u5F0F\uFF0C\u5F00\u653E\u5168\u90E8\u7684\u9AD8\u7EA7\u53C2\u6570")],-1),r=e("div",{class:"custom-container tip"},[e("p",{class:"custom-container-title"},"TIP"),e("p",null,"\u5982\u679C\u4F60\u662F\u65B0\u624B\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u65B0\u624B\u6A21\u5F0F\uFF0C\u4E0D\u8981\u901E\u5F3A\u4F7F\u7528\u4E13\u5BB6\u6A21\u5F0F\uFF0C\u5426\u5219\u53EF\u80FD\u4F1A\u51FA\u73B0\u610F\u60F3\u4E0D\u5230\u7684\u95EE\u9898\u3002")],-1),_=[l,c,i,r];function d(u,h){return o(),n("div",null,_)}var m=t(a,[["render",d],["__file","index.html.vue"]]);export{m as default};
const e=JSON.parse('{"key":"v-8daa1a0e","path":"/","title":"SD-Trainer","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"filePathRelative":"index.md"}');export{e as data};
const e=JSON.parse('{"key":"v-14e91824","path":"/lora/","title":"LoRA \u8BAD\u7EC3","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"filePathRelative":"lora/index.md"}');export{e as data};
import{_ as r,r as d,o as l,c as n,a as e,b as a,d as o,e as t}from"./app.fe4df4fe.js";const h={},c=e("h1",{id:"sd-trainer",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#sd-trainer","aria-hidden":"true"},"#"),a(" SD-Trainer")],-1),s={href:"https://space.bilibili.com/12566101",target:"_blank",rel:"noopener noreferrer"},u=t('<h3 id="\u66F4\u65B0\u65E5\u5FD7" tabindex="-1"><a class="header-anchor" href="#\u66F4\u65B0\u65E5\u5FD7" aria-hidden="true">#</a> \u66F4\u65B0\u65E5\u5FD7</h3><h4 id="v1-3-2" tabindex="-1"><a class="header-anchor" href="#v1-3-2" aria-hidden="true">#</a> v1.3.2</h4><ul><li>\u6837\u5F0F\u4F18\u5316</li><li>\u6DFB\u52A0\u5FD8\u8BB0\u7684 lycoris.kohya \u7684 dylora \u9009\u9879</li></ul><h4 id="v1-3-1" tabindex="-1"><a class="header-anchor" href="#v1-3-1" aria-hidden="true">#</a> v1.3.1</h4><ul><li>\u4FEE\u590D\u4E86 \u7531\u4E8E \u201C\u4FEE\u590D\u4E86 <code>dropout</code> \u53C2\u6570\u7684 bug\u201D \u4EA7\u751F\u7684 bug</li><li>\u5176\u4ED6\u7EC6\u5FAE\u8C03\u6574</li></ul><h4 id="v1-3-0" tabindex="-1"><a class="header-anchor" href="#v1-3-0" aria-hidden="true">#</a> v1.3.0</h4><ul><li>\u66F4\u65B0\u5E76\u4FEE\u590D\u4E86 <code>dropout</code> \u53C2\u6570\u7684 bug</li><li>\u65B0\u589E\u529F\u80FD\uFF1A\u4E13\u5BB6\u6A21\u5F0F\u53EF\u4EE5\u81EA\u5B9A\u4E49 <code>network_args</code> \u4E0E <code>optimizer_args</code> \u53C2\u6570\u3002\u65E0\u9700\u7B49\u5F85 UI \u52A0\u5165\u65B0\u53C2\u6570\uFF0C\u81EA\u5B9A\u4E49\u7684\u6743\u9650\u662F\u4F60\u7684\uFF01</li></ul><h4 id="v1-2-1" tabindex="-1"><a class="header-anchor" href="#v1-2-1" aria-hidden="true">#</a> v1.2.1</h4><ul><li>\u66F4\u6539\u5E76\u4E14\u4FEE\u590D\u4E86 DAdaptation \u7684\u4E00\u4E9B\u53C2\u6570</li></ul><h4 id="v1-2-0" tabindex="-1"><a class="header-anchor" href="#v1-2-0" aria-hidden="true">#</a> v1.2.0</h4><ul><li>\u6DFB\u52A0\u4E86 UI \u8BBE\u7F6E\u3002\u73B0\u5728\u6253\u5F00 Tensorboard \u7684 IP \u5730\u5740\u548C\u7AEF\u53E3\u53F7\u53EF\u4EE5\u81EA\u5B9A\u4E49\u4E86</li><li>\u4FEE\u6539\u4E00\u4E9B\u65B0\u624B\u6A21\u5F0F\u4E2D\u65E0\u7528\u7684\u53C2\u6570\u663E\u793A</li><li>\u4F18\u5316\u4E86\u4E00\u4E9B\u4E13\u5BB6\u8BBE\u7F6E\u4E2D\u53C2\u6570\u7684\u6446\u653E</li></ul><h4 id="v1-1-0" tabindex="-1"><a class="header-anchor" href="#v1-1-0" aria-hidden="true">#</a> v1.1.0</h4><ul><li>\u65B0\u624B\u6A21\u5F0F\u652F\u6301\u8BAD\u7EC3\u9884\u89C8\u56FE</li><li>\u6DFB\u52A0\u4E00\u5768 DAdaptation \u7CFB\u5217\u7684\u4F18\u5316\u5668</li><li>\u4E3A Tagger \u6DFB\u52A0\u4E86\u66F4\u591A\u6A21\u578B\u9009\u9879</li></ul>',13);function v(_,f){const i=d("ExternalLinkIcon");return l(),n("div",null,[c,e("p",null,[a("Stable Diffusion \u8BAD\u7EC3 UI v1.3.2 by "),e("a",s,[a("\u79CB\u8449aaaki"),o(i)])]),u])}var x=r(h,[["render",v],["__file","index.html.vue"]]);export{x as default};
const e=JSON.parse('{"key":"v-33a23463","path":"/dreambooth/","title":"Dreambooth \u8BAD\u7EC3","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"filePathRelative":"dreambooth/index.md"}');export{e as data};
This diff is collapsed.
import{_ as a,o as t,c as r,a as e,b as o}from"./app.fe4df4fe.js";const s={},c=e("h1",{id:"lora-\u8BAD\u7EC3-\u4E13\u5BB6\u6A21\u5F0F",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#lora-\u8BAD\u7EC3-\u4E13\u5BB6\u6A21\u5F0F","aria-hidden":"true"},"#"),o(" LoRA \u8BAD\u7EC3 \u4E13\u5BB6\u6A21\u5F0F")],-1),_=e("p",null,"\u4F60\u6240\u70ED\u7231\u7684 \u5C31\u662F\u4F60\u7684\u53C2\u6570",-1),n=[c,_];function d(l,i){return t(),r("div",null,n)}var f=a(s,[["render",d],["__file","master.html.vue"]]);export{f as default};
This diff is collapsed.
This diff is collapsed.
const a=JSON.parse('{"key":"v-0f9e746f","path":"/lora/params.html","title":"\u8BAD\u7EC3\u53C2\u6570\u8C03\u8282","lang":"en-US","frontmatter":{},"excerpt":"","headers":[],"filePathRelative":"lora/params.md"}');export{a as data};
const e=JSON.parse(`{"key":"v-72e1da3e","path":"/other/settings.html","title":"\u8BAD\u7EC3 UI \u8BBE\u7F6E","lang":"en-US","frontmatter":{"type":"settings","code":"Schema.intersect([\\n Schema.object({\\n tensorboard_host: Schema.string().role('folder').description(\\"tensorboard \u76D1\u542C\u5730\u5740\\"),\\n tensorboard_port: Schema.string().role('folder').description(\\"tensorboard \u76D1\u542C\u7AEF\u53E3\\"),\\n }).description(\\"\u8BAD\u7EC3 UI \u8BBE\u7F6E\\"),\\n]);\\n"},"excerpt":"","headers":[],"filePathRelative":"other/settings.md"}`);export{e as data};
import{_ as t,o as s,c as a,a as e,b as c}from"./app.fe4df4fe.js";const n={},o=e("h1",{id:"\u8BAD\u7EC3-ui-\u8BBE\u7F6E",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u8BAD\u7EC3-ui-\u8BBE\u7F6E","aria-hidden":"true"},"#"),c(" \u8BAD\u7EC3 UI \u8BBE\u7F6E")],-1),r=e("p",null,"\u4E0D\u61C2\u7684\u4E0D\u8981\u78B0\u8FD9\u4E2A",-1),_=[o,r];function i(d,l){return s(),a("div",null,_)}var u=t(n,[["render",i],["__file","settings.html.vue"]]);export{u as default};
This source diff could not be displayed because it is too large. You can view the blob instead.
const e=JSON.parse(`{"key":"v-51615306","path":"/tagger.html","title":"Tagger \u6807\u6CE8\u5DE5\u5177","lang":"en-US","frontmatter":{"type":"tagger","code":"Schema.intersect([\\n Schema.object({\\n path: Schema.string().role('folder').required().description(\\"\u56FE\u7247\u6587\u4EF6\u5939\u8DEF\u5F84\\"),\\n threshold: Schema.number().role(\\"slider\\").min(0).max(1).step(0.01).default(0.5).description(\\"\u9608\u503C\\"),\\n additional_tags: Schema.string().role('folder').description(\\"\u9644\u52A0\u63D0\u793A\u8BCD (\u9017\u53F7\u5206\u9694)\\"),\\n interrogator_model: Schema.union([\\"wd14-convnextv2-v2\\", \\"wd14-swinv2-v2\\", \\"wd14-vit-v2\\"]).default(\\"wd14-convnextv2-v2\\").description(\\"Tagger \u6A21\u578B\\"),\\n replace_underscore: Schema.boolean().default(true).description(\\"\u4F7F\u7528\u7A7A\u683C\u4EE3\u66FF\u4E0B\u5212\u7EBF\\"),\\n escape_tag: Schema.boolean().default(true).description(\\"\u5C06\u7ED3\u679C\u4E2D\u7684\u62EC\u53F7\u8FDB\u884C\u8F6C\u4E49\u5904\u7406\\"),\\n batch_output_action_on_conflict: Schema.union([\\"ignore\\", \\"copy\\", \\"prepend\\"]).default(\\"copy\\").description(\\"\u82E5\u5DF2\u7ECF\u5B58\u5728\u8BC6\u522B\u7684 Tag \u6587\u4EF6\uFF0C\u5219\\"),\\n }).description(\\"Tagger \u53C2\u6570\u8BBE\u7F6E\\"),\\n]);\\n"},"excerpt":"","headers":[],"filePathRelative":"tagger.md"}`);export{e as data};
import{_ as a,o as n,c as o,a as e,b as t}from"./app.fe4df4fe.js";const r={},s=e("h1",{id:"tagger-\u6807\u6CE8\u5DE5\u5177",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tagger-\u6807\u6CE8\u5DE5\u5177","aria-hidden":"true"},"#"),t(" Tagger \u6807\u6CE8\u5DE5\u5177")],-1),c=e("p",null,"\u540E\u7AEF\u57FA\u4E8E wd14-tagger \u5F00\u53D1\u3002",-1),d=e("p",null,[t("\u6A21\u578B\u9ED8\u8BA4\u4F7F\u7528 "),e("code",null,"SmilingWolf/wd-v1-4-convnextv2-tagger-v2"),t("\u3002")],-1),_=e("p",null,"\u5982\u679C\u4F60\u9009\u62E9\u4E86\u5176\u4ED6\u6A21\u578B\uFF0C\u53EF\u80FD\u9700\u8981\u989D\u5916\u8FDE\u63A5\u5230 Huggingface \u8FDB\u884C\u4E0B\u8F7D\u3002",-1),i=e("h3",{id:"\u63A8\u8350\u53C2\u6570",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u63A8\u8350\u53C2\u6570","aria-hidden":"true"},"#"),t(" \u63A8\u8350\u53C2\u6570")],-1),l=e("p",null,"\u9608\u503C\u5927\u4E8E 0.35",-1),h=[s,c,d,_,i,l];function g(u,f){return n(),o("div",null,h)}var m=a(r,[["render",g],["__file","tagger.html.vue"]]);export{m as default};
const e=JSON.parse('{"key":"v-13efe3c5","path":"/tensorboard.html","title":"","lang":"en-US","frontmatter":{"type":"iframe","iframe":"http://127.0.0.1:6006"},"excerpt":"","headers":[],"filePathRelative":"tensorboard.md"}');export{e as data};
import{_ as e,o as r,c as o}from"./app.fe4df4fe.js";const t={};function c(_,a){return r(),o("div")}var s=e(t,[["render",c],["__file","tensorboard.html.vue"]]);export{s as default};
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.49">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<title>Dreambooth 训练 | SD 训练 UI</title><meta name="description" content="">
<link rel="modulepreload" href="/assets/app.fe4df4fe.js"><link rel="modulepreload" href="/assets/index.html.798a797d.js"><link rel="modulepreload" href="/assets/index.html.fbbfced2.js"><link rel="prefetch" href="/assets/index.html.9d7cc666.js"><link rel="prefetch" href="/assets/tagger.html.ddeabc3c.js"><link rel="prefetch" href="/assets/tensorboard.html.37ea225e.js"><link rel="prefetch" href="/assets/about.html.5b0c0de9.js"><link rel="prefetch" href="/assets/settings.html.3a303daf.js"><link rel="prefetch" href="/assets/basic.html.f70a3f10.js"><link rel="prefetch" href="/assets/index.html.b97ec799.js"><link rel="prefetch" href="/assets/master.html.3cab76fc.js"><link rel="prefetch" href="/assets/params.html.c8cc13ef.js"><link rel="prefetch" href="/assets/404.html.686caba0.js"><link rel="prefetch" href="/assets/index.html.dc5838ca.js"><link rel="prefetch" href="/assets/tagger.html.de59860d.js"><link rel="prefetch" href="/assets/tensorboard.html.7b8e6327.js"><link rel="prefetch" href="/assets/about.html.13e41973.js"><link rel="prefetch" href="/assets/settings.html.52ef2a95.js"><link rel="prefetch" href="/assets/basic.html.f90c26cb.js"><link rel="prefetch" href="/assets/index.html.92c6a36d.js"><link rel="prefetch" href="/assets/master.html.29c8e104.js"><link rel="prefetch" href="/assets/params.html.0f790382.js"><link rel="prefetch" href="/assets/404.html.0f583043.js"><link rel="prefetch" href="/assets/404.4218269e.js"><link rel="prefetch" href="/assets/layout.832a8147.js">
<link rel="stylesheet" href="/assets/style.a0675c8c.css">
</head>
<body>
<div id="app"><!--[--><div class="theme-container no-navbar"><!--[--><!----><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar" data-v-6550c740><div class="el-scrollbar" data-v-6550c740><div class="el-scrollbar__wrap el-scrollbar__wrap--hidden-default" style=""><div class="el-scrollbar__view" style=""><!--[--><div class="sidebar-container" data-v-6550c740><!----><ul class="sidebar-items" data-v-6550c740><!--[--><li><a href="/" class="sidebar-item sidebar-heading" aria-label="SD-Trainer"><!--[--><!--]--> SD-Trainer <!--[--><!--]--></a><!----></li><li><a href="/lora/index.md" class="sidebar-item sidebar-heading" aria-label="LoRA训练"><!--[--><!--]--> LoRA训练 <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/lora/basic.md" class="sidebar-item" aria-label="新手"><!--[--><!--]--> 新手 <!--[--><!--]--></a><!----></li><li><a href="/lora/master.md" class="sidebar-item" aria-label="专家"><!--[--><!--]--> 专家 <!--[--><!--]--></a><!----></li><li><a href="/lora/params.md" class="sidebar-item" aria-label="参数详解"><!--[--><!--]--> 参数详解 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a href="/tensorboard.md" class="sidebar-item sidebar-heading" aria-label="Tensorboard"><!--[--><!--]--> Tensorboard <!--[--><!--]--></a><!----></li><li><a href="/tagger.md" class="sidebar-item sidebar-heading" aria-label="WD 1.4 标签器"><!--[--><!--]--> WD 1.4 标签器 <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item sidebar-heading">其他 <!----></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/other/settings.md" class="sidebar-item" aria-label="UI 设置"><!--[--><!--]--> UI 设置 <!--[--><!--]--></a><!----></li><li><a href="/other/about.md" class="sidebar-item" aria-label="关于"><!--[--><!--]--> 关于 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><ul class="sidebar-bottom" data-v-6550c740><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> Github <a class="icon" href="https://github.com/hanamizuki-ai" target="_blank" aria-label="GitHub" data-v-6550c740><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" data-v-6550c740><path d="M12 2C6.475 2 2 6.475 2 12a9.994 9.994 0 0 0 6.838 9.488c.5.087.687-.213.687-.476c0-.237-.013-1.024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.338 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.688c-.1-.25-.45-1.275.1-2.65c0 0 .837-.262 2.75 1.026a9.28 9.28 0 0 1 2.5-.338c.85 0 1.7.112 2.5.337c1.912-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.016 10.016 0 0 0 22 12c0-5.525-4.475-10-10-10z" fill="currentColor" data-v-6550c740></path></svg></a></li><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> 灯泡 <button class="toggle-color-mode-button" title="toggle color mode" data-v-6550c740><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button></li></ul></div><!--]--></div></div><!--[--><div class="el-scrollbar__bar is-horizontal" style="display:none;"><div class="el-scrollbar__thumb" style="width:0;transform:translateX(0%);"></div></div><div class="el-scrollbar__bar is-vertical" style="display:none;"><div class="el-scrollbar__thumb" style="height:0;transform:translateY(0%);"></div></div><!--]--></div></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><!--]--><div><h1 id="dreambooth-训练" tabindex="-1"><a class="header-anchor" href="#dreambooth-训练" aria-hidden="true">#</a> Dreambooth 训练</h1><p>还在开发中,敬请期待。</p></div><!--[--><!--]--></div><footer class="page-meta"><!----><!----><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
<script type="module" src="/assets/app.fe4df4fe.js" defer></script>
</body>
</html>
This diff is collapsed.
This diff is collapsed.
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.49">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<title>LoRA 训练 | SD 训练 UI</title><meta name="description" content="">
<link rel="modulepreload" href="/assets/app.fe4df4fe.js"><link rel="modulepreload" href="/assets/index.html.92c6a36d.js"><link rel="modulepreload" href="/assets/index.html.b97ec799.js"><link rel="prefetch" href="/assets/index.html.9d7cc666.js"><link rel="prefetch" href="/assets/tagger.html.ddeabc3c.js"><link rel="prefetch" href="/assets/tensorboard.html.37ea225e.js"><link rel="prefetch" href="/assets/index.html.fbbfced2.js"><link rel="prefetch" href="/assets/about.html.5b0c0de9.js"><link rel="prefetch" href="/assets/settings.html.3a303daf.js"><link rel="prefetch" href="/assets/basic.html.f70a3f10.js"><link rel="prefetch" href="/assets/master.html.3cab76fc.js"><link rel="prefetch" href="/assets/params.html.c8cc13ef.js"><link rel="prefetch" href="/assets/404.html.686caba0.js"><link rel="prefetch" href="/assets/index.html.dc5838ca.js"><link rel="prefetch" href="/assets/tagger.html.de59860d.js"><link rel="prefetch" href="/assets/tensorboard.html.7b8e6327.js"><link rel="prefetch" href="/assets/index.html.798a797d.js"><link rel="prefetch" href="/assets/about.html.13e41973.js"><link rel="prefetch" href="/assets/settings.html.52ef2a95.js"><link rel="prefetch" href="/assets/basic.html.f90c26cb.js"><link rel="prefetch" href="/assets/master.html.29c8e104.js"><link rel="prefetch" href="/assets/params.html.0f790382.js"><link rel="prefetch" href="/assets/404.html.0f583043.js"><link rel="prefetch" href="/assets/404.4218269e.js"><link rel="prefetch" href="/assets/layout.832a8147.js">
<link rel="stylesheet" href="/assets/style.a0675c8c.css">
</head>
<body>
<div id="app"><!--[--><div class="theme-container no-navbar"><!--[--><!----><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar" data-v-6550c740><div class="el-scrollbar" data-v-6550c740><div class="el-scrollbar__wrap el-scrollbar__wrap--hidden-default" style=""><div class="el-scrollbar__view" style=""><!--[--><div class="sidebar-container" data-v-6550c740><!----><ul class="sidebar-items" data-v-6550c740><!--[--><li><a href="/" class="sidebar-item sidebar-heading" aria-label="SD-Trainer"><!--[--><!--]--> SD-Trainer <!--[--><!--]--></a><!----></li><li><a href="/lora/index.md" class="sidebar-item sidebar-heading active" aria-label="LoRA训练"><!--[--><!--]--> LoRA训练 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a href="/lora/basic.md" class="sidebar-item" aria-label="新手"><!--[--><!--]--> 新手 <!--[--><!--]--></a><!----></li><li><a href="/lora/master.md" class="sidebar-item" aria-label="专家"><!--[--><!--]--> 专家 <!--[--><!--]--></a><!----></li><li><a href="/lora/params.md" class="sidebar-item" aria-label="参数详解"><!--[--><!--]--> 参数详解 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a href="/tensorboard.md" class="sidebar-item sidebar-heading" aria-label="Tensorboard"><!--[--><!--]--> Tensorboard <!--[--><!--]--></a><!----></li><li><a href="/tagger.md" class="sidebar-item sidebar-heading" aria-label="WD 1.4 标签器"><!--[--><!--]--> WD 1.4 标签器 <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item sidebar-heading">其他 <!----></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/other/settings.md" class="sidebar-item" aria-label="UI 设置"><!--[--><!--]--> UI 设置 <!--[--><!--]--></a><!----></li><li><a href="/other/about.md" class="sidebar-item" aria-label="关于"><!--[--><!--]--> 关于 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><ul class="sidebar-bottom" data-v-6550c740><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> Github <a class="icon" href="https://github.com/hanamizuki-ai" target="_blank" aria-label="GitHub" data-v-6550c740><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" data-v-6550c740><path d="M12 2C6.475 2 2 6.475 2 12a9.994 9.994 0 0 0 6.838 9.488c.5.087.687-.213.687-.476c0-.237-.013-1.024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.338 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.688c-.1-.25-.45-1.275.1-2.65c0 0 .837-.262 2.75 1.026a9.28 9.28 0 0 1 2.5-.338c.85 0 1.7.112 2.5.337c1.912-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.016 10.016 0 0 0 22 12c0-5.525-4.475-10-10-10z" fill="currentColor" data-v-6550c740></path></svg></a></li><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> 灯泡 <button class="toggle-color-mode-button" title="toggle color mode" data-v-6550c740><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button></li></ul></div><!--]--></div></div><!--[--><div class="el-scrollbar__bar is-horizontal" style="display:none;"><div class="el-scrollbar__thumb" style="width:0;transform:translateX(0%);"></div></div><div class="el-scrollbar__bar is-vertical" style="display:none;"><div class="el-scrollbar__thumb" style="height:0;transform:translateY(0%);"></div></div><!--]--></div></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><!--]--><div><h1 id="lora-训练" tabindex="-1"><a class="header-anchor" href="#lora-训练" aria-hidden="true">#</a> LoRA 训练</h1><p>本 LoRA 训练界面分为两种模式。</p><ul><li>针对新手的简易训练只有部分可调节参数</li><li>针对有一定经验的用户的专家模式,开放全部的高级参数</li></ul><div class="custom-container tip"><p class="custom-container-title">TIP</p><p>如果你是新手,建议使用新手模式,不要逞强使用专家模式,否则可能会出现意想不到的问题。</p></div></div><!--[--><!--]--></div><footer class="page-meta"><!----><!----><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
<script type="module" src="/assets/app.fe4df4fe.js" defer></script>
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.49">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<title>SD 训练 UI</title><meta name="description" content="">
<link rel="modulepreload" href="/assets/app.fe4df4fe.js"><link rel="modulepreload" href="/assets/about.html.13e41973.js"><link rel="modulepreload" href="/assets/about.html.5b0c0de9.js"><link rel="prefetch" href="/assets/index.html.9d7cc666.js"><link rel="prefetch" href="/assets/tagger.html.ddeabc3c.js"><link rel="prefetch" href="/assets/tensorboard.html.37ea225e.js"><link rel="prefetch" href="/assets/index.html.fbbfced2.js"><link rel="prefetch" href="/assets/settings.html.3a303daf.js"><link rel="prefetch" href="/assets/basic.html.f70a3f10.js"><link rel="prefetch" href="/assets/index.html.b97ec799.js"><link rel="prefetch" href="/assets/master.html.3cab76fc.js"><link rel="prefetch" href="/assets/params.html.c8cc13ef.js"><link rel="prefetch" href="/assets/404.html.686caba0.js"><link rel="prefetch" href="/assets/index.html.dc5838ca.js"><link rel="prefetch" href="/assets/tagger.html.de59860d.js"><link rel="prefetch" href="/assets/tensorboard.html.7b8e6327.js"><link rel="prefetch" href="/assets/index.html.798a797d.js"><link rel="prefetch" href="/assets/settings.html.52ef2a95.js"><link rel="prefetch" href="/assets/basic.html.f90c26cb.js"><link rel="prefetch" href="/assets/index.html.92c6a36d.js"><link rel="prefetch" href="/assets/master.html.29c8e104.js"><link rel="prefetch" href="/assets/params.html.0f790382.js"><link rel="prefetch" href="/assets/404.html.0f583043.js"><link rel="prefetch" href="/assets/404.4218269e.js"><link rel="prefetch" href="/assets/layout.832a8147.js">
<link rel="stylesheet" href="/assets/style.a0675c8c.css">
</head>
<body>
<div id="app"><!--[--><div class="theme-container no-navbar"><!--[--><!----><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar" data-v-6550c740><div class="el-scrollbar" data-v-6550c740><div class="el-scrollbar__wrap el-scrollbar__wrap--hidden-default" style=""><div class="el-scrollbar__view" style=""><!--[--><div class="sidebar-container" data-v-6550c740><!----><ul class="sidebar-items" data-v-6550c740><!--[--><li><a href="/" class="sidebar-item sidebar-heading" aria-label="SD-Trainer"><!--[--><!--]--> SD-Trainer <!--[--><!--]--></a><!----></li><li><a href="/lora/index.md" class="sidebar-item sidebar-heading" aria-label="LoRA训练"><!--[--><!--]--> LoRA训练 <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/lora/basic.md" class="sidebar-item" aria-label="新手"><!--[--><!--]--> 新手 <!--[--><!--]--></a><!----></li><li><a href="/lora/master.md" class="sidebar-item" aria-label="专家"><!--[--><!--]--> 专家 <!--[--><!--]--></a><!----></li><li><a href="/lora/params.md" class="sidebar-item" aria-label="参数详解"><!--[--><!--]--> 参数详解 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a href="/tensorboard.md" class="sidebar-item sidebar-heading" aria-label="Tensorboard"><!--[--><!--]--> Tensorboard <!--[--><!--]--></a><!----></li><li><a href="/tagger.md" class="sidebar-item sidebar-heading" aria-label="WD 1.4 标签器"><!--[--><!--]--> WD 1.4 标签器 <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item sidebar-heading active">其他 <!----></p><ul style="" class="sidebar-item-children"><!--[--><li><a href="/other/settings.md" class="sidebar-item" aria-label="UI 设置"><!--[--><!--]--> UI 设置 <!--[--><!--]--></a><!----></li><li><a href="/other/about.md" class="sidebar-item active" aria-label="关于"><!--[--><!--]--> 关于 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><ul class="sidebar-bottom" data-v-6550c740><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> Github <a class="icon" href="https://github.com/hanamizuki-ai" target="_blank" aria-label="GitHub" data-v-6550c740><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" data-v-6550c740><path d="M12 2C6.475 2 2 6.475 2 12a9.994 9.994 0 0 0 6.838 9.488c.5.087.687-.213.687-.476c0-.237-.013-1.024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.338 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.688c-.1-.25-.45-1.275.1-2.65c0 0 .837-.262 2.75 1.026a9.28 9.28 0 0 1 2.5-.338c.85 0 1.7.112 2.5.337c1.912-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.016 10.016 0 0 0 22 12c0-5.525-4.475-10-10-10z" fill="currentColor" data-v-6550c740></path></svg></a></li><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> 灯泡 <button class="toggle-color-mode-button" title="toggle color mode" data-v-6550c740><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button></li></ul></div><!--]--></div></div><!--[--><div class="el-scrollbar__bar is-horizontal" style="display:none;"><div class="el-scrollbar__thumb" style="width:0;transform:translateX(0%);"></div></div><div class="el-scrollbar__bar is-vertical" style="display:none;"><div class="el-scrollbar__thumb" style="height:0;transform:translateY(0%);"></div></div><!--]--></div></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><!--]--><div><h2 id="关于" tabindex="-1"><a class="header-anchor" href="#关于" aria-hidden="true">#</a> 关于</h2><p><a href="https://github.com/shigma/schemastery" target="_blank" rel="noopener noreferrer">schemastery<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a> 强力驱动</p><h3 id="反馈" tabindex="-1"><a class="header-anchor" href="#反馈" aria-hidden="true">#</a> 反馈</h3><p>请前往 Github 提交 <a href="https://github.com/Akegarasu/lora-scripts/issues" target="_blank" rel="noopener noreferrer">issue<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><h3 id="联系方式" tabindex="-1"><a class="header-anchor" href="#联系方式" aria-hidden="true">#</a> 联系方式</h3><p>邮箱:work@anzu.link</p><p><a href="https://discord.gg/Uu3syD9PnR" target="_blank" rel="noopener noreferrer">discord 频道<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></div><!--[--><!--]--></div><footer class="page-meta"><!----><!----><!----></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
<script type="module" src="/assets/app.fe4df4fe.js" defer></script>
</body>
</html>
This diff is collapsed.
This diff is collapsed.
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.49">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<title>SD 训练 UI</title><meta name="description" content="">
<link rel="modulepreload" href="/assets/app.fe4df4fe.js"><link rel="modulepreload" href="/assets/tensorboard.html.7b8e6327.js"><link rel="modulepreload" href="/assets/tensorboard.html.37ea225e.js"><link rel="prefetch" href="/assets/index.html.9d7cc666.js"><link rel="prefetch" href="/assets/tagger.html.ddeabc3c.js"><link rel="prefetch" href="/assets/index.html.fbbfced2.js"><link rel="prefetch" href="/assets/about.html.5b0c0de9.js"><link rel="prefetch" href="/assets/settings.html.3a303daf.js"><link rel="prefetch" href="/assets/basic.html.f70a3f10.js"><link rel="prefetch" href="/assets/index.html.b97ec799.js"><link rel="prefetch" href="/assets/master.html.3cab76fc.js"><link rel="prefetch" href="/assets/params.html.c8cc13ef.js"><link rel="prefetch" href="/assets/404.html.686caba0.js"><link rel="prefetch" href="/assets/index.html.dc5838ca.js"><link rel="prefetch" href="/assets/tagger.html.de59860d.js"><link rel="prefetch" href="/assets/index.html.798a797d.js"><link rel="prefetch" href="/assets/about.html.13e41973.js"><link rel="prefetch" href="/assets/settings.html.52ef2a95.js"><link rel="prefetch" href="/assets/basic.html.f90c26cb.js"><link rel="prefetch" href="/assets/index.html.92c6a36d.js"><link rel="prefetch" href="/assets/master.html.29c8e104.js"><link rel="prefetch" href="/assets/params.html.0f790382.js"><link rel="prefetch" href="/assets/404.html.0f583043.js"><link rel="prefetch" href="/assets/404.4218269e.js"><link rel="prefetch" href="/assets/layout.832a8147.js">
<link rel="stylesheet" href="/assets/style.a0675c8c.css">
</head>
<body>
<div id="app"><!--[--><div class="theme-container no-navbar"><!--[--><!----><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar" data-v-6550c740><div class="el-scrollbar" data-v-6550c740><div class="el-scrollbar__wrap el-scrollbar__wrap--hidden-default" style=""><div class="el-scrollbar__view" style=""><!--[--><div class="sidebar-container" data-v-6550c740><!----><ul class="sidebar-items" data-v-6550c740><!--[--><li><a href="/" class="sidebar-item sidebar-heading" aria-label="SD-Trainer"><!--[--><!--]--> SD-Trainer <!--[--><!--]--></a><!----></li><li><a href="/lora/index.md" class="sidebar-item sidebar-heading" aria-label="LoRA训练"><!--[--><!--]--> LoRA训练 <!--[--><!--]--></a><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/lora/basic.md" class="sidebar-item" aria-label="新手"><!--[--><!--]--> 新手 <!--[--><!--]--></a><!----></li><li><a href="/lora/master.md" class="sidebar-item" aria-label="专家"><!--[--><!--]--> 专家 <!--[--><!--]--></a><!----></li><li><a href="/lora/params.md" class="sidebar-item" aria-label="参数详解"><!--[--><!--]--> 参数详解 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a href="/tensorboard.md" class="sidebar-item sidebar-heading active" aria-label="Tensorboard"><!--[--><!--]--> Tensorboard <!--[--><!--]--></a><!----></li><li><a href="/tagger.md" class="sidebar-item sidebar-heading" aria-label="WD 1.4 标签器"><!--[--><!--]--> WD 1.4 标签器 <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item sidebar-heading">其他 <!----></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/other/settings.md" class="sidebar-item" aria-label="UI 设置"><!--[--><!--]--> UI 设置 <!--[--><!--]--></a><!----></li><li><a href="/other/about.md" class="sidebar-item" aria-label="关于"><!--[--><!--]--> 关于 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><ul class="sidebar-bottom" data-v-6550c740><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> Github <a class="icon" href="https://github.com/hanamizuki-ai" target="_blank" aria-label="GitHub" data-v-6550c740><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" data-v-6550c740><path d="M12 2C6.475 2 2 6.475 2 12a9.994 9.994 0 0 0 6.838 9.488c.5.087.687-.213.687-.476c0-.237-.013-1.024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.338 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.688c-.1-.25-.45-1.275.1-2.65c0 0 .837-.262 2.75 1.026a9.28 9.28 0 0 1 2.5-.338c.85 0 1.7.112 2.5.337c1.912-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.016 10.016 0 0 0 22 12c0-5.525-4.475-10-10-10z" fill="currentColor" data-v-6550c740></path></svg></a></li><li class="sidebar-item sidebar-heading appearance" data-v-6550c740> 灯泡 <button class="toggle-color-mode-button" title="toggle color mode" data-v-6550c740><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button></li></ul></div><!--]--></div></div><!--[--><div class="el-scrollbar__bar is-horizontal" style="display:none;"><div class="el-scrollbar__thumb" style="width:0;transform:translateX(0%);"></div></div><div class="el-scrollbar__bar is-vertical" style="display:none;"><div class="el-scrollbar__thumb" style="height:0;transform:translateY(0%);"></div></div><!--]--></div></aside><!--]--><!--[--><!----><!--]--></div><!----><!--]--></div>
<script type="module" src="/assets/app.fe4df4fe.js" defer></script>
</body>
</html>
...@@ -38,8 +38,8 @@ if ($install_torch -eq "y" -or $install_torch -eq "Y" -or $install_torch -eq "") ...@@ -38,8 +38,8 @@ if ($install_torch -eq "y" -or $install_torch -eq "Y" -or $install_torch -eq "")
pip install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple pip install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple
Check "其他依赖安装失败。" Check "其他依赖安装失败。"
pip install --upgrade lion-pytorch dadaptation -i https://mirror.baidu.com/pypi/simple pip install --upgrade lion-pytorch dadaptation prodigyopt -i https://mirror.baidu.com/pypi/simple
Check "Lion、dadaptation 优化器安装失败。" Check "Lion、dadaptation、prodigyopt 优化器安装失败。"
pip install --upgrade lycoris-lora -i https://mirror.baidu.com/pypi/simple pip install --upgrade lycoris-lora -i https://mirror.baidu.com/pypi/simple
Check "lycoris 安装失败。" Check "lycoris 安装失败。"
pip install --upgrade fastapi uvicorn -i https://mirror.baidu.com/pypi/simple pip install --upgrade fastapi uvicorn -i https://mirror.baidu.com/pypi/simple
......
...@@ -48,7 +48,7 @@ echo "Installing deps..." ...@@ -48,7 +48,7 @@ echo "Installing deps..."
cd "$script_dir/sd-scripts" || exit cd "$script_dir/sd-scripts" || exit
pip install --upgrade -r requirements.txt pip install --upgrade -r requirements.txt
pip install --upgrade lion-pytorch lycoris-lora dadaptation fastapi uvicorn wandb pip install --upgrade lion-pytorch lycoris-lora dadaptation prodigyopt fastapi uvicorn wandb
cd "$script_dir" || exit cd "$script_dir" || exit
......
...@@ -17,7 +17,7 @@ cp .\bitsandbytes_windows\*.dll ..\venv\Lib\site-packages\bitsandbytes\ ...@@ -17,7 +17,7 @@ cp .\bitsandbytes_windows\*.dll ..\venv\Lib\site-packages\bitsandbytes\
cp .\bitsandbytes_windows\cextension.py ..\venv\Lib\site-packages\bitsandbytes\cextension.py cp .\bitsandbytes_windows\cextension.py ..\venv\Lib\site-packages\bitsandbytes\cextension.py
cp .\bitsandbytes_windows\main.py ..\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py cp .\bitsandbytes_windows\main.py ..\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py
pip install --upgrade lion-pytorch dadaptation lycoris-lora fastapi uvicorn wandb pip install --upgrade lion-pytorch dadaptation prodigyopt lycoris-lora fastapi uvicorn wandb
Write-Output "Install completed" Write-Output "Install completed"
Read-Host | Out-Null ; Read-Host | Out-Null ;
\ No newline at end of file
---
# yamllint disable rule:line-length
name: Typos
on: # yamllint disable-line rule:truthy
push:
pull_request:
types:
- opened
- synchronize
- reopened
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: typos-action
uses: crate-ci/typos@v1.13.10
logs
__pycache__
wd14_tagger_model
venv
*.egg-info
build
.vscode
wandb
This diff is collapsed.
## リポジトリについて
Stable Diffusionの学習、画像生成、その他のスクリプトを入れたリポジトリです。
[README in English](./README.md) ←更新情報はこちらにあります
GUIやPowerShellスクリプトなど、より使いやすくする機能が[bmaltais氏のリポジトリ](https://github.com/bmaltais/kohya_ss)で提供されています(英語です)のであわせてご覧ください。bmaltais氏に感謝します。
以下のスクリプトがあります。
* DreamBooth、U-NetおよびText Encoderの学習をサポート
* fine-tuning、同上
* 画像生成
* モデル変換(Stable Diffision ckpt/safetensorsとDiffusersの相互変換)
## 使用法について
当リポジトリ内およびnote.comに記事がありますのでそちらをご覧ください(将来的にはすべてこちらへ移すかもしれません)。
* [学習について、共通編](./docs/train_README-ja.md) : データ整備やオプションなど
* [データセット設定](./docs/config_README-ja.md)
* [DreamBoothの学習について](./docs/train_db_README-ja.md)
* [fine-tuningのガイド](./docs/fine_tune_README_ja.md):
* [LoRAの学習について](./docs/train_network_README-ja.md)
* [Textual Inversionの学習について](./docs/train_ti_README-ja.md)
* [画像生成スクリプト](./docs/gen_img_README-ja.md)
* note.com [モデル変換スクリプト](https://note.com/kohya_ss/n/n374f316fe4ad)
## Windowsでの動作に必要なプログラム
Python 3.10.6およびGitが必要です。
- Python 3.10.6: https://www.python.org/ftp/python/3.10.6/python-3.10.6-amd64.exe
- git: https://git-scm.com/download/win
PowerShellを使う場合、venvを使えるようにするためには以下の手順でセキュリティ設定を変更してください。
(venvに限らずスクリプトの実行が可能になりますので注意してください。)
- PowerShellを管理者として開きます。
- 「Set-ExecutionPolicy Unrestricted」と入力し、Yと答えます。
- 管理者のPowerShellを閉じます。
## Windows環境でのインストール
以下の例ではPyTorchは1.12.1/CUDA 11.6版をインストールします。CUDA 11.3版やPyTorch 1.13を使う場合は適宜書き換えください。
(なお、python -m venv~の行で「python」とだけ表示された場合、py -m venv~のようにpythonをpyに変更してください。)
通常の(管理者ではない)PowerShellを開き以下を順に実行します。
```powershell
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
python -m venv venv
.\venv\Scripts\activate
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl
cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py
accelerate config
```
<!--
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
pip install --use-pep517 --upgrade -r requirements.txt
pip install -U -I --no-deps xformers==0.0.16
-->
コマンドプロンプトでは以下になります。
```bat
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
python -m venv venv
.\venv\Scripts\activate
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl
copy /y .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
copy /y .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
copy /y .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py
accelerate config
```
(注:``python -m venv venv`` のほうが ``python -m venv --system-site-packages venv`` より安全そうなため書き換えました。globalなpythonにパッケージがインストールしてあると、後者だといろいろと問題が起きます。)
accelerate configの質問には以下のように答えてください。(bf16で学習する場合、最後の質問にはbf16と答えてください。)
※0.15.0から日本語環境では選択のためにカーソルキーを押すと落ちます(……)。数字キーの0、1、2……で選択できますので、そちらを使ってください。
```txt
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
```
※場合によって ``ValueError: fp16 mixed precision requires a GPU`` というエラーが出ることがあるようです。この場合、6番目の質問(
``What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:``)に「0」と答えてください。(id `0`のGPUが使われます。)
### PyTorchとxformersのバージョンについて
他のバージョンでは学習がうまくいかない場合があるようです。特に他の理由がなければ指定のバージョンをお使いください。
### オプション:Lion8bitを使う
Lion8bitを使う場合には`bitsandbytes`を0.38.0以降にアップグレードする必要があります。`bitsandbytes`をアンインストールし、Windows環境では例えば[こちら](https://github.com/jllllll/bitsandbytes-windows-webui)などからWindows版のwhlファイルをインストールしてください。たとえば以下のような手順になります。
```powershell
pip install https://github.com/jllllll/bitsandbytes-windows-webui/raw/main/bitsandbytes-0.38.1-py3-none-any.whl
```
アップグレード時には`pip install .`でこのリポジトリを更新し、必要に応じて他のパッケージもアップグレードしてください。
## アップグレード
新しいリリースがあった場合、以下のコマンドで更新できます。
```powershell
cd sd-scripts
git pull
.\venv\Scripts\activate
pip install --use-pep517 --upgrade -r requirements.txt
```
コマンドが成功すれば新しいバージョンが使用できます。
## 謝意
LoRAの実装は[cloneofsimo氏のリポジトリ](https://github.com/cloneofsimo/lora)を基にしたものです。感謝申し上げます。
Conv2d 3x3への拡大は [cloneofsimo氏](https://github.com/cloneofsimo/lora) が最初にリリースし、KohakuBlueleaf氏が [LoCon](https://github.com/KohakuBlueleaf/LoCon) でその有効性を明らかにしたものです。KohakuBlueleaf氏に深く感謝します。
## ライセンス
スクリプトのライセンスはASL 2.0ですが(Diffusersおよびcloneofsimo氏のリポジトリ由来のものも同様)、一部他のライセンスのコードを含みます。
[Memory Efficient Attention Pytorch](https://github.com/lucidrains/memory-efficient-attention-pytorch): MIT
[bitsandbytes](https://github.com/TimDettmers/bitsandbytes): MIT
[BLIP](https://github.com/salesforce/BLIP): BSD-3-Clause
This diff is collapsed.
import torch
from typing import Union, List, Optional, Dict, Any, Tuple
from diffusers.models.unet_2d_condition import UNet2DConditionOutput
def unet_forward_XTI(self,
sample: torch.FloatTensor,
timestep: Union[torch.Tensor, float, int],
encoder_hidden_states: torch.Tensor,
class_labels: Optional[torch.Tensor] = None,
return_dict: bool = True,
) -> Union[UNet2DConditionOutput, Tuple]:
r"""
Args:
sample (`torch.FloatTensor`): (batch, channel, height, width) noisy inputs tensor
timestep (`torch.FloatTensor` or `float` or `int`): (batch) timesteps
encoder_hidden_states (`torch.FloatTensor`): (batch, sequence_length, feature_dim) encoder hidden states
return_dict (`bool`, *optional*, defaults to `True`):
Whether or not to return a [`models.unet_2d_condition.UNet2DConditionOutput`] instead of a plain tuple.
Returns:
[`~models.unet_2d_condition.UNet2DConditionOutput`] or `tuple`:
[`~models.unet_2d_condition.UNet2DConditionOutput`] if `return_dict` is True, otherwise a `tuple`. When
returning a tuple, the first element is the sample tensor.
"""
# By default samples have to be AT least a multiple of the overall upsampling factor.
# The overall upsampling factor is equal to 2 ** (# num of upsampling layears).
# However, the upsampling interpolation output size can be forced to fit any upsampling size
# on the fly if necessary.
default_overall_up_factor = 2**self.num_upsamplers
# upsample size should be forwarded when sample is not a multiple of `default_overall_up_factor`
forward_upsample_size = False
upsample_size = None
if any(s % default_overall_up_factor != 0 for s in sample.shape[-2:]):
logger.info("Forward upsample size to force interpolation output size.")
forward_upsample_size = True
# 0. center input if necessary
if self.config.center_input_sample:
sample = 2 * sample - 1.0
# 1. time
timesteps = timestep
if not torch.is_tensor(timesteps):
# TODO: this requires sync between CPU and GPU. So try to pass timesteps as tensors if you can
# This would be a good case for the `match` statement (Python 3.10+)
is_mps = sample.device.type == "mps"
if isinstance(timestep, float):
dtype = torch.float32 if is_mps else torch.float64
else:
dtype = torch.int32 if is_mps else torch.int64
timesteps = torch.tensor([timesteps], dtype=dtype, device=sample.device)
elif len(timesteps.shape) == 0:
timesteps = timesteps[None].to(sample.device)
# broadcast to batch dimension in a way that's compatible with ONNX/Core ML
timesteps = timesteps.expand(sample.shape[0])
t_emb = self.time_proj(timesteps)
# timesteps does not contain any weights and will always return f32 tensors
# but time_embedding might actually be running in fp16. so we need to cast here.
# there might be better ways to encapsulate this.
t_emb = t_emb.to(dtype=self.dtype)
emb = self.time_embedding(t_emb)
if self.config.num_class_embeds is not None:
if class_labels is None:
raise ValueError("class_labels should be provided when num_class_embeds > 0")
class_emb = self.class_embedding(class_labels).to(dtype=self.dtype)
emb = emb + class_emb
# 2. pre-process
sample = self.conv_in(sample)
# 3. down
down_block_res_samples = (sample,)
down_i = 0
for downsample_block in self.down_blocks:
if hasattr(downsample_block, "has_cross_attention") and downsample_block.has_cross_attention:
sample, res_samples = downsample_block(
hidden_states=sample,
temb=emb,
encoder_hidden_states=encoder_hidden_states[down_i:down_i+2],
)
down_i += 2
else:
sample, res_samples = downsample_block(hidden_states=sample, temb=emb)
down_block_res_samples += res_samples
# 4. mid
sample = self.mid_block(sample, emb, encoder_hidden_states=encoder_hidden_states[6])
# 5. up
up_i = 7
for i, upsample_block in enumerate(self.up_blocks):
is_final_block = i == len(self.up_blocks) - 1
res_samples = down_block_res_samples[-len(upsample_block.resnets) :]
down_block_res_samples = down_block_res_samples[: -len(upsample_block.resnets)]
# if we have not reached the final block and need to forward the
# upsample size, we do it here
if not is_final_block and forward_upsample_size:
upsample_size = down_block_res_samples[-1].shape[2:]
if hasattr(upsample_block, "has_cross_attention") and upsample_block.has_cross_attention:
sample = upsample_block(
hidden_states=sample,
temb=emb,
res_hidden_states_tuple=res_samples,
encoder_hidden_states=encoder_hidden_states[up_i:up_i+3],
upsample_size=upsample_size,
)
up_i += 3
else:
sample = upsample_block(
hidden_states=sample, temb=emb, res_hidden_states_tuple=res_samples, upsample_size=upsample_size
)
# 6. post-process
sample = self.conv_norm_out(sample)
sample = self.conv_act(sample)
sample = self.conv_out(sample)
if not return_dict:
return (sample,)
return UNet2DConditionOutput(sample=sample)
def downblock_forward_XTI(
self, hidden_states, temb=None, encoder_hidden_states=None, attention_mask=None, cross_attention_kwargs=None
):
output_states = ()
i = 0
for resnet, attn in zip(self.resnets, self.attentions):
if self.training and self.gradient_checkpointing:
def create_custom_forward(module, return_dict=None):
def custom_forward(*inputs):
if return_dict is not None:
return module(*inputs, return_dict=return_dict)
else:
return module(*inputs)
return custom_forward
hidden_states = torch.utils.checkpoint.checkpoint(create_custom_forward(resnet), hidden_states, temb)
hidden_states = torch.utils.checkpoint.checkpoint(
create_custom_forward(attn, return_dict=False), hidden_states, encoder_hidden_states[i]
)[0]
else:
hidden_states = resnet(hidden_states, temb)
hidden_states = attn(hidden_states, encoder_hidden_states=encoder_hidden_states[i]).sample
output_states += (hidden_states,)
i += 1
if self.downsamplers is not None:
for downsampler in self.downsamplers:
hidden_states = downsampler(hidden_states)
output_states += (hidden_states,)
return hidden_states, output_states
def upblock_forward_XTI(
self,
hidden_states,
res_hidden_states_tuple,
temb=None,
encoder_hidden_states=None,
upsample_size=None,
):
i = 0
for resnet, attn in zip(self.resnets, self.attentions):
# pop res hidden states
res_hidden_states = res_hidden_states_tuple[-1]
res_hidden_states_tuple = res_hidden_states_tuple[:-1]
hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1)
if self.training and self.gradient_checkpointing:
def create_custom_forward(module, return_dict=None):
def custom_forward(*inputs):
if return_dict is not None:
return module(*inputs, return_dict=return_dict)
else:
return module(*inputs)
return custom_forward
hidden_states = torch.utils.checkpoint.checkpoint(create_custom_forward(resnet), hidden_states, temb)
hidden_states = torch.utils.checkpoint.checkpoint(
create_custom_forward(attn, return_dict=False), hidden_states, encoder_hidden_states[i]
)[0]
else:
hidden_states = resnet(hidden_states, temb)
hidden_states = attn(hidden_states, encoder_hidden_states=encoder_hidden_states[i]).sample
i += 1
if self.upsamplers is not None:
for upsampler in self.upsamplers:
hidden_states = upsampler(hidden_states, upsample_size)
return hidden_states
\ No newline at end of file
# Files for typos
# Instruction: https://github.com/marketplace/actions/typos-action#getting-started
[default.extend-identifiers]
[default.extend-words]
NIN="NIN"
parms="parms"
nin="nin"
extention="extention" # Intentionally left
nd="nd"
[files]
extend-exclude = ["_typos.toml"]
import ctypes as ct
from pathlib import Path
from warnings import warn
from .cuda_setup.main import evaluate_cuda_setup
class CUDALibrary_Singleton(object):
_instance = None
def __init__(self):
raise RuntimeError("Call get_instance() instead")
def initialize(self):
binary_name = evaluate_cuda_setup()
package_dir = Path(__file__).parent
binary_path = package_dir / binary_name
if not binary_path.exists():
print(f"CUDA SETUP: TODO: compile library for specific version: {binary_name}")
legacy_binary_name = "libbitsandbytes.so"
print(f"CUDA SETUP: Defaulting to {legacy_binary_name}...")
binary_path = package_dir / legacy_binary_name
if not binary_path.exists():
print('CUDA SETUP: CUDA detection failed. Either CUDA driver not installed, CUDA not installed, or you have multiple conflicting CUDA libraries!')
print('CUDA SETUP: If you compiled from source, try again with `make CUDA_VERSION=DETECTED_CUDA_VERSION` for example, `make CUDA_VERSION=113`.')
raise Exception('CUDA SETUP: Setup Failed!')
# self.lib = ct.cdll.LoadLibrary(binary_path)
self.lib = ct.cdll.LoadLibrary(str(binary_path)) # $$$
else:
print(f"CUDA SETUP: Loading binary {binary_path}...")
# self.lib = ct.cdll.LoadLibrary(binary_path)
self.lib = ct.cdll.LoadLibrary(str(binary_path)) # $$$
@classmethod
def get_instance(cls):
if cls._instance is None:
cls._instance = cls.__new__(cls)
cls._instance.initialize()
return cls._instance
lib = CUDALibrary_Singleton.get_instance().lib
try:
lib.cadam32bit_g32
lib.get_context.restype = ct.c_void_p
lib.get_cusparse.restype = ct.c_void_p
COMPILED_WITH_CUDA = True
except AttributeError:
warn(
"The installed version of bitsandbytes was compiled without GPU support. "
"8-bit optimizers and GPU quantization are unavailable."
)
COMPILED_WITH_CUDA = False
"""
extract factors the build is dependent on:
[X] compute capability
[ ] TODO: Q - What if we have multiple GPUs of different makes?
- CUDA version
- Software:
- CPU-only: only CPU quantization functions (no optimizer, no matrix multiple)
- CuBLAS-LT: full-build 8-bit optimizer
- no CuBLAS-LT: no 8-bit matrix multiplication (`nomatmul`)
evaluation:
- if paths faulty, return meaningful error
- else:
- determine CUDA version
- determine capabilities
- based on that set the default path
"""
import ctypes
from .paths import determine_cuda_runtime_lib_path
def check_cuda_result(cuda, result_val):
# 3. Check for CUDA errors
if result_val != 0:
error_str = ctypes.c_char_p()
cuda.cuGetErrorString(result_val, ctypes.byref(error_str))
print(f"CUDA exception! Error code: {error_str.value.decode()}")
def get_cuda_version(cuda, cudart_path):
# https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART____VERSION.html#group__CUDART____VERSION
try:
cudart = ctypes.CDLL(cudart_path)
except OSError:
# TODO: shouldn't we error or at least warn here?
print(f'ERROR: libcudart.so could not be read from path: {cudart_path}!')
return None
version = ctypes.c_int()
check_cuda_result(cuda, cudart.cudaRuntimeGetVersion(ctypes.byref(version)))
version = int(version.value)
major = version//1000
minor = (version-(major*1000))//10
if major < 11:
print('CUDA SETUP: CUDA version lower than 11 are currently not supported for LLM.int8(). You will be only to use 8-bit optimizers and quantization routines!!')
return f'{major}{minor}'
def get_cuda_lib_handle():
# 1. find libcuda.so library (GPU driver) (/usr/lib)
try:
cuda = ctypes.CDLL("libcuda.so")
except OSError:
# TODO: shouldn't we error or at least warn here?
print('CUDA SETUP: WARNING! libcuda.so not found! Do you have a CUDA driver installed? If you are on a cluster, make sure you are on a CUDA machine!')
return None
check_cuda_result(cuda, cuda.cuInit(0))
return cuda
def get_compute_capabilities(cuda):
"""
1. find libcuda.so library (GPU driver) (/usr/lib)
init_device -> init variables -> call function by reference
2. call extern C function to determine CC
(https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__DEVICE__DEPRECATED.html)
3. Check for CUDA errors
https://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-using-the-cuda-runtime-api
# bits taken from https://gist.github.com/f0k/63a664160d016a491b2cbea15913d549
"""
nGpus = ctypes.c_int()
cc_major = ctypes.c_int()
cc_minor = ctypes.c_int()
device = ctypes.c_int()
check_cuda_result(cuda, cuda.cuDeviceGetCount(ctypes.byref(nGpus)))
ccs = []
for i in range(nGpus.value):
check_cuda_result(cuda, cuda.cuDeviceGet(ctypes.byref(device), i))
ref_major = ctypes.byref(cc_major)
ref_minor = ctypes.byref(cc_minor)
# 2. call extern C function to determine CC
check_cuda_result(
cuda, cuda.cuDeviceComputeCapability(ref_major, ref_minor, device)
)
ccs.append(f"{cc_major.value}.{cc_minor.value}")
return ccs
# def get_compute_capability()-> Union[List[str, ...], None]: # FIXME: error
def get_compute_capability(cuda):
"""
Extracts the highest compute capbility from all available GPUs, as compute
capabilities are downwards compatible. If no GPUs are detected, it returns
None.
"""
ccs = get_compute_capabilities(cuda)
if ccs is not None:
# TODO: handle different compute capabilities; for now, take the max
return ccs[-1]
return None
def evaluate_cuda_setup():
print('')
print('='*35 + 'BUG REPORT' + '='*35)
print('Welcome to bitsandbytes. For bug reports, please submit your error trace to: https://github.com/TimDettmers/bitsandbytes/issues')
print('For effortless bug reporting copy-paste your error into this form: https://docs.google.com/forms/d/e/1FAIpQLScPB8emS3Thkp66nvqwmjTEgxp8Y9ufuWTzFyr9kJ5AoI47dQ/viewform?usp=sf_link')
print('='*80)
return "libbitsandbytes_cuda116.dll" # $$$
binary_name = "libbitsandbytes_cpu.so"
#if not torch.cuda.is_available():
#print('No GPU detected. Loading CPU library...')
#return binary_name
cudart_path = determine_cuda_runtime_lib_path()
if cudart_path is None:
print(
"WARNING: No libcudart.so found! Install CUDA or the cudatoolkit package (anaconda)!"
)
return binary_name
print(f"CUDA SETUP: CUDA runtime path found: {cudart_path}")
cuda = get_cuda_lib_handle()
cc = get_compute_capability(cuda)
print(f"CUDA SETUP: Highest compute capability among GPUs detected: {cc}")
cuda_version_string = get_cuda_version(cuda, cudart_path)
if cc == '':
print(
"WARNING: No GPU detected! Check your CUDA paths. Processing to load CPU-only library..."
)
return binary_name
# 7.5 is the minimum CC vor cublaslt
has_cublaslt = cc in ["7.5", "8.0", "8.6"]
# TODO:
# (1) CUDA missing cases (no CUDA installed by CUDA driver (nvidia-smi accessible)
# (2) Multiple CUDA versions installed
# we use ls -l instead of nvcc to determine the cuda version
# since most installations will have the libcudart.so installed, but not the compiler
print(f'CUDA SETUP: Detected CUDA version {cuda_version_string}')
def get_binary_name():
"if not has_cublaslt (CC < 7.5), then we have to choose _nocublaslt.so"
bin_base_name = "libbitsandbytes_cuda"
if has_cublaslt:
return f"{bin_base_name}{cuda_version_string}.so"
else:
return f"{bin_base_name}{cuda_version_string}_nocublaslt.so"
binary_name = get_binary_name()
return binary_name
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
DreamBoothのガイドです。
[学習についての共通ドキュメント](./train_README-ja.md) もあわせてご覧ください。
# 概要
DreamBoothとは、画像生成モデルに特定の主題を追加学習し、それを特定の識別子で生成する技術です。[論文はこちら](https://arxiv.org/abs/2208.12242)
具体的には、Stable Diffusionのモデルにキャラや画風などを学ばせ、それを `shs` のような特定の単語で呼び出せる(生成画像に出現させる)ことができます。
スクリプトは[DiffusersのDreamBooth](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth)を元にしていますが、以下のような機能追加を行っています(いくつかの機能は元のスクリプト側もその後対応しています)。
スクリプトの主な機能は以下の通りです。
- 8bit Adam optimizerおよびlatentのキャッシュによる省メモリ化([Shivam Shrirao氏版](https://github.com/ShivamShrirao/diffusers/tree/main/examples/dreambooth)と同様)。
- xformersによる省メモリ化。
- 512x512だけではなく任意サイズでの学習。
- augmentationによる品質の向上。
- DreamBoothだけではなくText Encoder+U-Netのfine tuningに対応。
- Stable Diffusion形式でのモデルの読み書き。
- Aspect Ratio Bucketing。
- Stable Diffusion v2.0対応。
# 学習の手順
あらかじめこのリポジトリのREADMEを参照し、環境整備を行ってください。
## データの準備
[学習データの準備について](./train_README-ja.md) を参照してください。
## 学習の実行
スクリプトを実行します。最大限、メモリを節約したコマンドは以下のようになります(実際には1行で入力します)。それぞれの行を必要に応じて書き換えてください。12GB程度のVRAMで動作するようです。
```
accelerate launch --num_cpu_threads_per_process 1 train_db.py
--pretrained_model_name_or_path=<.ckptまたは.safetensordまたはDiffusers版モデルのディレクトリ>
--dataset_config=<データ準備で作成した.tomlファイル>
--output_dir=<学習したモデルの出力先フォルダ>
--output_name=<学習したモデル出力時のファイル名>
--save_model_as=safetensors
--prior_loss_weight=1.0
--max_train_steps=1600
--learning_rate=1e-6
--optimizer_type="AdamW8bit"
--xformers
--mixed_precision="fp16"
--cache_latents
--gradient_checkpointing
```
`num_cpu_threads_per_process` には通常は1を指定するとよいようです。
`pretrained_model_name_or_path` に追加学習を行う元となるモデルを指定します。Stable Diffusionのcheckpointファイル(.ckptまたは.safetensors)、Diffusersのローカルディスクにあるモデルディレクトリ、DiffusersのモデルID("stabilityai/stable-diffusion-2"など)が指定できます。
`output_dir` に学習後のモデルを保存するフォルダを指定します。`output_name` にモデルのファイル名を拡張子を除いて指定します。`save_model_as` でsafetensors形式での保存を指定しています。
`dataset_config``.toml` ファイルを指定します。ファイル内でのバッチサイズ指定は、当初はメモリ消費を抑えるために `1` としてください。
`prior_loss_weight` は正則化画像のlossの重みです。通常は1.0を指定します。
学習させるステップ数 `max_train_steps` を1600とします。学習率 `learning_rate` はここでは1e-6を指定しています。
省メモリ化のため `mixed_precision="fp16"` を指定します(RTX30 シリーズ以降では `bf16` も指定できます。環境整備時にaccelerateに行った設定と合わせてください)。また `gradient_checkpointing` を指定します。
オプティマイザ(モデルを学習データにあうように最適化=学習させるクラス)にメモリ消費の少ない 8bit AdamW を使うため、 `optimizer_type="AdamW8bit"` を指定します。
`xformers` オプションを指定し、xformersのCrossAttentionを用います。xformersをインストールしていない場合やエラーとなる場合(環境にもよりますが `mixed_precision="no"` の場合など)、代わりに `mem_eff_attn` オプションを指定すると省メモリ版CrossAttentionを使用します(速度は遅くなります)。
省メモリ化のため `cache_latents` オプションを指定してVAEの出力をキャッシュします。
ある程度メモリがある場合は、`.toml` ファイルを編集してバッチサイズをたとえば `4` くらいに増やしてください(高速化と精度向上の可能性があります)。また `cache_latents` を外すことで augmentation が可能になります。
### よく使われるオプションについて
以下の場合には [学習の共通ドキュメント](./train_README-ja.md) の「よく使われるオプション」を参照してください。
- Stable Diffusion 2.xまたはそこからの派生モデルを学習する
- clip skipを2以上を前提としたモデルを学習する
- 75トークンを超えたキャプションで学習する
### DreamBoothでのステップ数について
当スクリプトでは省メモリ化のため、ステップ当たりの学習回数が元のスクリプトの半分になっています(対象の画像と正則化画像を同一のバッチではなく別のバッチに分割して学習するため)。
元のDiffusers版やXavierXiao氏のStable Diffusion版とほぼ同じ学習を行うには、ステップ数を倍にしてください。
(学習画像と正則化画像をまとめてから shuffle するため厳密にはデータの順番が変わってしまいますが、学習には大きな影響はないと思います。)
### DreamBoothでのバッチサイズについて
モデル全体を学習するためLoRA等の学習に比べるとメモリ消費量は多くなります(fine tuningと同じ)。
### 学習率について
Diffusers版では5e-6ですがStable Diffusion版は1e-6ですので、上のサンプルでは1e-6を指定しています。
### 以前の形式のデータセット指定をした場合のコマンドライン
解像度やバッチサイズをオプションで指定します。コマンドラインの例は以下の通りです。
```
accelerate launch --num_cpu_threads_per_process 1 train_db.py
--pretrained_model_name_or_path=<.ckptまたは.safetensordまたはDiffusers版モデルのディレクトリ>
--train_data_dir=<学習用データのディレクトリ>
--reg_data_dir=<正則化画像のディレクトリ>
--output_dir=<学習したモデルの出力先ディレクトリ>
--output_name=<学習したモデル出力時のファイル名>
--prior_loss_weight=1.0
--resolution=512
--train_batch_size=1
--learning_rate=1e-6
--max_train_steps=1600
--use_8bit_adam
--xformers
--mixed_precision="bf16"
--cache_latents
--gradient_checkpointing
```
## 学習したモデルで画像生成する
学習が終わると指定したフォルダに指定した名前でsafetensorsファイルが出力されます。
v1.4/1.5およびその他の派生モデルの場合、このモデルでAutomatic1111氏のWebUIなどで推論できます。models\Stable-diffusionフォルダに置いてください。
v2.xモデルでWebUIで画像生成する場合、モデルの仕様が記述された.yamlファイルが別途必要になります。v2.x baseの場合はv2-inference.yamlを、768/vの場合はv2-inference-v.yamlを、同じフォルダに置き、拡張子の前の部分をモデルと同じ名前にしてください。
![image](https://user-images.githubusercontent.com/52813779/210776915-061d79c3-6582-42c2-8884-8b91d2f07313.png)
各yamlファイルは[Stability AIのSD2.0のリポジトリ](https://github.com/Stability-AI/stablediffusion/tree/main/configs/stable-diffusion)にあります。
# DreamBooth特有のその他の主なオプション
すべてのオプションについては別文書を参照してください。
## Text Encoderの学習を途中から行わない --stop_text_encoder_training
stop_text_encoder_trainingオプションに数値を指定すると、そのステップ数以降はText Encoderの学習を行わずU-Netだけ学習します。場合によっては精度の向上が期待できるかもしれません。
(恐らくText Encoderだけ先に過学習することがあり、それを防げるのではないかと推測していますが、詳細な影響は不明です。)
## Tokenizerのパディングをしない --no_token_padding
no_token_paddingオプションを指定するとTokenizerの出力をpaddingしません(Diffusers版の旧DreamBoothと同じ動きになります)。
<!--
bucketing(後述)を利用しかつaugmentation(後述)を使う場合の例は以下のようになります。
```
accelerate launch --num_cpu_threads_per_process 8 train_db.py
--pretrained_model_name_or_path=<.ckptまたは.safetensordまたはDiffusers版モデルのディレクトリ>
--train_data_dir=<学習用データのディレクトリ>
--reg_data_dir=<正則化画像のディレクトリ>
--output_dir=<学習したモデルの出力先ディレクトリ>
--resolution=768,512
--train_batch_size=20 --learning_rate=5e-6 --max_train_steps=800
--use_8bit_adam --xformers --mixed_precision="bf16"
--save_every_n_epochs=1 --save_state --save_precision="bf16"
--logging_dir=logs
--enable_bucket --min_bucket_reso=384 --max_bucket_reso=1280
--color_aug --flip_aug --gradient_checkpointing --seed 42
```
-->
这是DreamBooth的指南。
请同时查看[关于学习的通用文档](./train_README-zh.md)
# 概要
DreamBooth是一种将特定主题添加到图像生成模型中进行学习,并使用特定识别子生成它的技术。论文链接。
具体来说,它可以将角色和绘画风格等添加到Stable Diffusion模型中进行学习,并使用特定的单词(例如`shs`)来调用(呈现在生成的图像中)。
脚本基于Diffusers的DreamBooth,但添加了以下功能(一些功能已在原始脚本中得到支持)。
脚本的主要功能如下:
- 使用8位Adam优化器和潜在变量的缓存来节省内存(与Shivam Shrirao版相似)。
- 使用xformers来节省内存。
- 不仅支持512x512,还支持任意尺寸的训练。
- 通过数据增强来提高质量。
- 支持DreamBooth和Text Encoder + U-Net的微调。
- 支持以Stable Diffusion格式读写模型。
- 支持Aspect Ratio Bucketing。
- 支持Stable Diffusion v2.0。
# 训练步骤
请先参阅此存储库的README以进行环境设置。
## 准备数据
请参阅[有关准备训练数据的说明](./train_README-zh.md)
## 运行训练
运行脚本。以下是最大程度地节省内存的命令(实际上,这将在一行中输入)。请根据需要修改每行。它似乎需要约12GB的VRAM才能运行。
```
accelerate launch --num_cpu_threads_per_process 1 train_db.py
--pretrained_model_name_or_path=<.ckpt或.safetensord或Diffusers版模型的目录>
--dataset_config=<数据准备时创建的.toml文件>
--output_dir=<训练模型的输出目录>
--output_name=<训练模型输出时的文件名>
--save_model_as=safetensors
--prior_loss_weight=1.0
--max_train_steps=1600
--learning_rate=1e-6
--optimizer_type="AdamW8bit"
--xformers
--mixed_precision="fp16"
--cache_latents
--gradient_checkpointing
```
`num_cpu_threads_per_process` 通常应该设置为1。
`pretrained_model_name_or_path` 指定要进行追加训练的基础模型。可以指定 Stable Diffusion 的 checkpoint 文件(.ckpt 或 .safetensors)、Diffusers 的本地模型目录或模型 ID(如 "stabilityai/stable-diffusion-2")。
`output_dir` 指定保存训练后模型的文件夹。在 `output_name` 中指定模型文件名,不包括扩展名。使用 `save_model_as` 指定以 safetensors 格式保存。
`dataset_config` 中指定 `.toml` 文件。初始批处理大小应为 `1`,以减少内存消耗。
`prior_loss_weight` 是正则化图像损失的权重。通常设为1.0。
将要训练的步数 `max_train_steps` 设置为1600。在这里,学习率 `learning_rate` 被设置为1e-6。
为了节省内存,设置 `mixed_precision="fp16"`(在 RTX30 系列及更高版本中也可以设置为 `bf16`)。同时指定 `gradient_checkpointing`
为了使用内存消耗较少的 8bit AdamW 优化器(将模型优化为适合于训练数据的状态),指定 `optimizer_type="AdamW8bit"`
指定 `xformers` 选项,并使用 xformers 的 CrossAttention。如果未安装 xformers 或出现错误(具体情况取决于环境,例如使用 `mixed_precision="no"`),则可以指定 `mem_eff_attn` 选项以使用省内存版的 CrossAttention(速度会变慢)。
为了节省内存,指定 `cache_latents` 选项以缓存 VAE 的输出。
如果有足够的内存,请编辑 `.toml` 文件将批处理大小增加到大约 `4`(可能会提高速度和精度)。此外,取消 `cache_latents` 选项可以进行数据增强。
### 常用选项
对于以下情况,请参阅“常用选项”部分。
- 学习 Stable Diffusion 2.x 或其衍生模型。
- 学习基于 clip skip 大于等于2的模型。
- 学习超过75个令牌的标题。
### 关于DreamBooth中的步数
为了实现省内存化,该脚本中每个步骤的学习次数减半(因为学习和正则化的图像在训练时被分为不同的批次)。
要进行与原始Diffusers版或XavierXiao的Stable Diffusion版几乎相同的学习,请将步骤数加倍。
(虽然在将学习图像和正则化图像整合后再打乱顺序,但我认为对学习没有太大影响。)
关于DreamBooth的批量大小
与像LoRA这样的学习相比,为了训练整个模型,内存消耗量会更大(与微调相同)。
关于学习率
在Diffusers版中,学习率为5e-6,而在Stable Diffusion版中为1e-6,因此在上面的示例中指定了1e-6。
当使用旧格式的数据集指定命令行时
使用选项指定分辨率和批量大小。命令行示例如下。
```
accelerate launch --num_cpu_threads_per_process 1 train_db.py
--pretrained_model_name_or_path=<.ckpt或.safetensord或Diffusers版模型的目录>
--train_data_dir=<训练数据的目录>
--reg_data_dir=<正则化图像的目录>
--output_dir=<训练后模型的输出目录>
--output_name=<训练后模型输出文件的名称>
--prior_loss_weight=1.0
--resolution=512
--train_batch_size=1
--learning_rate=1e-6
--max_train_steps=1600
--use_8bit_adam
--xformers
--mixed_precision="bf16"
--cache_latents
--gradient_checkpointing
```
## 使用训练好的模型生成图像
训练完成后,将在指定的文件夹中以指定的名称输出safetensors文件。
对于v1.4/1.5和其他派生模型,可以在此模型中使用Automatic1111先生的WebUI进行推断。请将其放置在models\Stable-diffusion文件夹中。
对于使用v2.x模型在WebUI中生成图像的情况,需要单独的.yaml文件来描述模型的规格。对于v2.x base,需要v2-inference.yaml,对于768/v,则需要v2-inference-v.yaml。请将它们放置在相同的文件夹中,并将文件扩展名之前的部分命名为与模型相同的名称。
![image](https://user-images.githubusercontent.com/52813779/210776915-061d79c3-6582-42c2-8884-8b91d2f07313.png)
每个yaml文件都在[Stability AI的SD2.0存储库](https://github.com/Stability-AI/stablediffusion/tree/main/configs/stable-diffusion)……之中。
# DreamBooth的其他主要选项
有关所有选项的详细信息,请参阅另一份文档。
## 不在中途开始对文本编码器进行训练 --stop_text_encoder_training
如果在stop_text_encoder_training选项中指定一个数字,则在该步骤之后,将不再对文本编码器进行训练,只会对U-Net进行训练。在某些情况下,可能会期望提高精度。
(我们推测可能会有时候仅仅文本编码器会过度学习,而这样做可以避免这种情况,但详细影响尚不清楚。)
## 不进行分词器的填充 --no_token_padding
如果指定no_token_padding选项,则不会对分词器的输出进行填充(与Diffusers版本的旧DreamBooth相同)。
<!--
如果使用分桶(bucketing)和数据增强(augmentation),则使用示例如下:
```
accelerate launch --num_cpu_threads_per_process 8 train_db.py
--pretrained_model_name_or_path=<.ckpt或.safetensord或Diffusers版模型的目录>
--train_data_dir=<训练数据的目录>
--reg_data_dir=<正则化图像的目录>
--output_dir=<训练后模型的输出目录>
--resolution=768,512
--train_batch_size=20 --learning_rate=5e-6 --max_train_steps=800
--use_8bit_adam --xformers --mixed_precision="bf16"
--save_every_n_epochs=1 --save_state --save_precision="bf16"
--logging_dir=logs
--enable_bucket --min_bucket_reso=384 --max_bucket_reso=1280
--color_aug --flip_aug --gradient_checkpointing --seed 42
```
-->
This diff is collapsed.
This diff is collapsed.
[Textual Inversion](https://textual-inversion.github.io/) の学習についての説明です。
[学習についての共通ドキュメント](./train_README-ja.md) もあわせてご覧ください。
実装に当たっては https://github.com/huggingface/diffusers/tree/main/examples/textual_inversion を大いに参考にしました。
学習したモデルはWeb UIでもそのまま使えます。
# 学習の手順
あらかじめこのリポジトリのREADMEを参照し、環境整備を行ってください。
## データの準備
[学習データの準備について](./train_README-ja.md) を参照してください。
## 学習の実行
``train_textual_inversion.py`` を用います。以下はコマンドラインの例です(DreamBooth手法)。
```
accelerate launch --num_cpu_threads_per_process 1 train_textual_inversion.py
--dataset_config=<データ準備で作成した.tomlファイル>
--output_dir=<学習したモデルの出力先フォルダ>
--output_name=<学習したモデル出力時のファイル名>
--save_model_as=safetensors
--prior_loss_weight=1.0
--max_train_steps=1600
--learning_rate=1e-6
--optimizer_type="AdamW8bit"
--xformers
--mixed_precision="fp16"
--cache_latents
--gradient_checkpointing
--token_string=mychar4 --init_word=cute --num_vectors_per_token=4
```
``--token_string`` に学習時のトークン文字列を指定します。__学習時のプロンプトは、この文字列を含むようにしてください(token_stringがmychar4なら、``mychar4 1girl`` など)__。プロンプトのこの文字列の部分が、Textual Inversionの新しいtokenに置換されて学習されます。DreamBooth, class+identifier形式のデータセットとして、`token_string` をトークン文字列にするのが最も簡単で確実です。
プロンプトにトークン文字列が含まれているかどうかは、``--debug_dataset`` で置換後のtoken idが表示されますので、以下のように ``49408`` 以降のtokenが存在するかどうかで確認できます。
```
input ids: tensor([[49406, 49408, 49409, 49410, 49411, 49412, 49413, 49414, 49415, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407]])
```
tokenizerがすでに持っている単語(一般的な単語)は使用できません。
``--init_word`` にembeddingsを初期化するときのコピー元トークンの文字列を指定します。学ばせたい概念が近いものを選ぶとよいようです。二つ以上のトークンになる文字列は指定できません。
``--num_vectors_per_token`` にいくつのトークンをこの学習で使うかを指定します。多いほうが表現力が増しますが、その分多くのトークンを消費します。たとえばnum_vectors_per_token=8の場合、指定したトークン文字列は(一般的なプロンプトの77トークン制限のうち)8トークンを消費します。
以上がTextual Inversionのための主なオプションです。以降は他の学習スクリプトと同様です。
`num_cpu_threads_per_process` には通常は1を指定するとよいようです。
`pretrained_model_name_or_path` に追加学習を行う元となるモデルを指定します。Stable Diffusionのcheckpointファイル(.ckptまたは.safetensors)、Diffusersのローカルディスクにあるモデルディレクトリ、DiffusersのモデルID("stabilityai/stable-diffusion-2"など)が指定できます。
`output_dir` に学習後のモデルを保存するフォルダを指定します。`output_name` にモデルのファイル名を拡張子を除いて指定します。`save_model_as` でsafetensors形式での保存を指定しています。
`dataset_config``.toml` ファイルを指定します。ファイル内でのバッチサイズ指定は、当初はメモリ消費を抑えるために `1` としてください。
学習させるステップ数 `max_train_steps` を10000とします。学習率 `learning_rate` はここでは5e-6を指定しています。
省メモリ化のため `mixed_precision="fp16"` を指定します(RTX30 シリーズ以降では `bf16` も指定できます。環境整備時にaccelerateに行った設定と合わせてください)。また `gradient_checkpointing` を指定します。
オプティマイザ(モデルを学習データにあうように最適化=学習させるクラス)にメモリ消費の少ない 8bit AdamW を使うため、 `optimizer_type="AdamW8bit"` を指定します。
`xformers` オプションを指定し、xformersのCrossAttentionを用います。xformersをインストールしていない場合やエラーとなる場合(環境にもよりますが `mixed_precision="no"` の場合など)、代わりに `mem_eff_attn` オプションを指定すると省メモリ版CrossAttentionを使用します(速度は遅くなります)。
ある程度メモリがある場合は、`.toml` ファイルを編集してバッチサイズをたとえば `8` くらいに増やしてください(高速化と精度向上の可能性があります)。
### よく使われるオプションについて
以下の場合にはオプションに関するドキュメントを参照してください。
- Stable Diffusion 2.xまたはそこからの派生モデルを学習する
- clip skipを2以上を前提としたモデルを学習する
- 75トークンを超えたキャプションで学習する
### Textual Inversionでのバッチサイズについて
モデル全体を学習するDreamBoothやfine tuningに比べてメモリ使用量が少ないため、バッチサイズは大きめにできます。
# Textual Inversionのその他の主なオプション
すべてのオプションについては別文書を参照してください。
* `--weights`
* 学習前に学習済みのembeddingsを読み込み、そこから追加で学習します。
* `--use_object_template`
* キャプションではなく既定の物体用テンプレート文字列(``a photo of a {}``など)で学習します。公式実装と同じになります。キャプションは無視されます。
* `--use_style_template`
* キャプションではなく既定のスタイル用テンプレート文字列で学習します(``a painting in the style of {}``など)。公式実装と同じになります。キャプションは無視されます。
## 当リポジトリ内の画像生成スクリプトで生成する
gen_img_diffusers.pyに、``--textual_inversion_embeddings`` オプションで学習したembeddingsファイルを指定してください(複数可)。プロンプトでembeddingsファイルのファイル名(拡張子を除く)を使うと、そのembeddingsが適用されます。
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
{
"architectures": [
"BertModel"
],
"attention_probs_dropout_prob": 0.1,
"hidden_act": "gelu",
"hidden_dropout_prob": 0.1,
"hidden_size": 768,
"initializer_range": 0.02,
"intermediate_size": 3072,
"layer_norm_eps": 1e-12,
"max_position_embeddings": 512,
"model_type": "bert",
"num_attention_heads": 12,
"num_hidden_layers": 12,
"pad_token_id": 0,
"type_vocab_size": 2,
"vocab_size": 30524,
"encoder_width": 768,
"add_cross_attention": true
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
# NAI compatible
import torch
class HypernetworkModule(torch.nn.Module):
def __init__(self, dim, multiplier=1.0):
super().__init__()
linear1 = torch.nn.Linear(dim, dim * 2)
linear2 = torch.nn.Linear(dim * 2, dim)
linear1.weight.data.normal_(mean=0.0, std=0.01)
linear1.bias.data.zero_()
linear2.weight.data.normal_(mean=0.0, std=0.01)
linear2.bias.data.zero_()
linears = [linear1, linear2]
self.linear = torch.nn.Sequential(*linears)
self.multiplier = multiplier
def forward(self, x):
return x + self.linear(x) * self.multiplier
class Hypernetwork(torch.nn.Module):
enable_sizes = [320, 640, 768, 1280]
# return self.modules[Hypernetwork.enable_sizes.index(size)]
def __init__(self, multiplier=1.0) -> None:
super().__init__()
self.modules = []
for size in Hypernetwork.enable_sizes:
self.modules.append((HypernetworkModule(size, multiplier), HypernetworkModule(size, multiplier)))
self.register_module(f"{size}_0", self.modules[-1][0])
self.register_module(f"{size}_1", self.modules[-1][1])
def apply_to_stable_diffusion(self, text_encoder, vae, unet):
blocks = unet.input_blocks + [unet.middle_block] + unet.output_blocks
for block in blocks:
for subblk in block:
if 'SpatialTransformer' in str(type(subblk)):
for tf_block in subblk.transformer_blocks:
for attn in [tf_block.attn1, tf_block.attn2]:
size = attn.context_dim
if size in Hypernetwork.enable_sizes:
attn.hypernetwork = self
else:
attn.hypernetwork = None
def apply_to_diffusers(self, text_encoder, vae, unet):
blocks = unet.down_blocks + [unet.mid_block] + unet.up_blocks
for block in blocks:
if hasattr(block, 'attentions'):
for subblk in block.attentions:
if 'SpatialTransformer' in str(type(subblk)) or 'Transformer2DModel' in str(type(subblk)): # 0.6.0 and 0.7~
for tf_block in subblk.transformer_blocks:
for attn in [tf_block.attn1, tf_block.attn2]:
size = attn.to_k.in_features
if size in Hypernetwork.enable_sizes:
attn.hypernetwork = self
else:
attn.hypernetwork = None
return True # TODO error checking
def forward(self, x, context):
size = context.shape[-1]
assert size in Hypernetwork.enable_sizes
module = self.modules[Hypernetwork.enable_sizes.index(size)]
return module[0].forward(context), module[1].forward(context)
def load_from_state_dict(self, state_dict):
# old ver to new ver
changes = {
'linear1.bias': 'linear.0.bias',
'linear1.weight': 'linear.0.weight',
'linear2.bias': 'linear.1.bias',
'linear2.weight': 'linear.1.weight',
}
for key_from, key_to in changes.items():
if key_from in state_dict:
state_dict[key_to] = state_dict[key_from]
del state_dict[key_from]
for size, sd in state_dict.items():
if type(size) == int:
self.modules[Hypernetwork.enable_sizes.index(size)][0].load_state_dict(sd[0], strict=True)
self.modules[Hypernetwork.enable_sizes.index(size)][1].load_state_dict(sd[1], strict=True)
return True
def get_state_dict(self):
state_dict = {}
for i, size in enumerate(Hypernetwork.enable_sizes):
sd0 = self.modules[i][0].state_dict()
sd1 = self.modules[i][1].state_dict()
state_dict[size] = [sd0, sd1]
return state_dict
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
import threading
from typing import *
def fire_in_thread(f, *args, **kwargs):
threading.Thread(target=f, args=args, kwargs=kwargs).start()
\ No newline at end of file
import argparse
import os
import torch
from safetensors.torch import load_file
def main(file):
print(f"loading: {file}")
if os.path.splitext(file)[1] == '.safetensors':
sd = load_file(file)
else:
sd = torch.load(file, map_location='cpu')
values = []
keys = list(sd.keys())
for key in keys:
if 'lora_up' in key or 'lora_down' in key:
values.append((key, sd[key]))
print(f"number of LoRA modules: {len(values)}")
for key, value in values:
value = value.to(torch.float32)
print(f"{key},{str(tuple(value.size())).replace(', ', '-')},{torch.mean(torch.abs(value))},{torch.min(torch.abs(value))}")
def setup_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser()
parser.add_argument("file", type=str, help="model file to check / 重みを確認するモデルファイル")
return parser
if __name__ == '__main__':
parser = setup_parser()
args = parser.parse_args()
main(args.file)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
accelerate==0.15.0
transformers==4.26.0
ftfy==6.1.1
albumentations==1.3.0
opencv-python==4.7.0.68
einops==0.6.0
diffusers[torch]==0.10.2
pytorch-lightning==1.9.0
bitsandbytes==0.35.0
tensorboard==2.10.1
safetensors==0.2.6
# gradio==3.16.2
altair==4.2.2
easygui==0.98.3
toml==0.10.2
voluptuous==0.13.1
# for BLIP captioning
requests==2.28.2
timm==0.6.12
fairscale==0.4.13
# for WD14 captioning
# tensorflow<2.11
tensorflow==2.10.1
huggingface-hub==0.13.3
# for kohya_ss library
.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment