Commit
·
2eb3c9e
1
Parent(s):
ca72048
Upload 3 files
Browse files- 5_Jk_short_skirt.7z +3 -0
- lora-scripts-main.zip +3 -0
- 阿里云云端部署训练1lora (1).ipynb +456 -0
5_Jk_short_skirt.7z
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b0ca2dca14a0be87e4d0a4c9802c1d038a44d0780b43ec88b2ba87c9a12e9c06
|
| 3 |
+
size 10413571
|
lora-scripts-main.zip
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7cb5aeedc6b794fadcbc6600a94963d6846a38cc3f6538c581d2f5d39517a5c0
|
| 3 |
+
size 157829
|
阿里云云端部署训练1lora (1).ipynb
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "markdown",
|
| 5 |
+
"metadata": {
|
| 6 |
+
"id": "2xPpy2V_bm6q",
|
| 7 |
+
"jp-MarkdownHeadingCollapsed": true
|
| 8 |
+
},
|
| 9 |
+
"source": [
|
| 10 |
+
"# **基于Bilibili UP主:[秋葉aaaki](https://space.bilibili.com/12566101)发布的[保姆式LoRA模型一键包文件](https://www.bilibili.com/video/BV1fs4y1x7p2/)和WSH032大佬于colab的依赖代码修改而来。**\n",
|
| 11 |
+
"\n",
|
| 12 |
+
"\n",
|
| 13 |
+
"\n",
|
| 14 |
+
"最核心的文件的整合与代码均由主要作者[秋葉aaaki](https://github.com/Akegarasu/lora-scripts)完成。\n",
|
| 15 |
+
"开始前**建议阅读**:\n",
|
| 16 |
+
"\n",
|
| 17 |
+
"1. [保姆式LoRA模型一键包文件](https://www.bilibili.com/video/BV1fs4y1x7p2/)\n",
|
| 18 |
+
"\n",
|
| 19 |
+
"2. [参数心得](https://www.bilibili.com/video/BV1GM411E7vk/)\n",
|
| 20 |
+
"\n",
|
| 21 |
+
"3. [训练教程](https://www.bilibili.com/read/cv21926598)\n",
|
| 22 |
+
"\n",
|
| 23 |
+
"4. [阿里云部署教程](https://www.bilibili.com/video/BV1po4y1877P/?vd_source=e6294619bd5137ea0025a3d001e715a7#reply161206731712)\n",
|
| 24 |
+
"\n",
|
| 25 |
+
"5. [nas部署教程](https://www.bilibili.com/video/BV1Ao4y1j77z/?vd_source=e6294619bd5137ea0025a3d001e715a7)\n",
|
| 26 |
+
"\n",
|
| 27 |
+
"> 本人只是完成阿里云下的依赖安装,使用的下载源不保证长期有效。本人对python与linux的使用能力有限,代码在各位大佬的指导下完成,不足部分,有兴趣者可修改并分享。\n",
|
| 28 |
+
"> 2023年4月20日实测阿里云的A10可运行\n",
|
| 29 |
+
"> *--分享的责任与获取的自由*\n",
|
| 30 |
+
"**待解决问题**:\n",
|
| 31 |
+
"\n",
|
| 32 |
+
"> 1.train.sh中训练参数的设定和更改模型输出路径需要自己打开文件中手动完成,如何像下载模型那样添加一个交互呢?\n",
|
| 33 |
+
"\n",
|
| 34 |
+
"> 2.由于镜像问题,无法使用Python3。10作为环境配置,只能使用wsh032大佬留有的备份数据源训练包\n",
|
| 35 |
+
"\n",
|
| 36 |
+
"> 3.关于数据集的挂载,我这边没有相应教程如有需要可看第五nas的部署教程,也是一位up主的视频只不过这样的方法既要花钱又很麻烦如无必要不推荐,\n",
|
| 37 |
+
"但是如果配置了数据集就可以在停止实例后仍旧保持环境,不需要重新配置倒也不失为一种方法。而本文会介绍如何在不使用挂载的情况下载和上传文件\n",
|
| 38 |
+
"\n",
|
| 39 |
+
" \n",
|
| 40 |
+
"常见问题:\n",
|
| 41 |
+
"1. Q:输出代码的最后出现*(kill:9)*字样\n",
|
| 42 |
+
"\n",
|
| 43 |
+
" A:爆ram了,更换小的底模"
|
| 44 |
+
]
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"cell_type": "markdown",
|
| 48 |
+
"metadata": {
|
| 49 |
+
"id": "k-OOv-mDlY8b"
|
| 50 |
+
},
|
| 51 |
+
"source": [
|
| 52 |
+
"# **A. 一训练前准备(第一次使用请打开阅读!!!不挂载方法):**"
|
| 53 |
+
]
|
| 54 |
+
},
|
| 55 |
+
{
|
| 56 |
+
"cell_type": "markdown",
|
| 57 |
+
"metadata": {
|
| 58 |
+
"cellView": "form",
|
| 59 |
+
"id": "HP5TpWB6IHL6"
|
| 60 |
+
},
|
| 61 |
+
"source": [
|
| 62 |
+
"**训练前准备(这只是教程,不是代码块,不需要你运行):**\n",
|
| 63 |
+
"**注意** 按下文步骤运行\n",
|
| 64 |
+
"**使用前强烈建议观看\n",
|
| 65 |
+
"1. [保姆式LoRA模型一键包文件](https://www.bilibili.com/video/BV1fs4y1x7p2/)\n",
|
| 66 |
+
"\n",
|
| 67 |
+
"2. [参数心得](https://www.bilibili.com/video/BV1GM411E7vk/)\n",
|
| 68 |
+
"\n",
|
| 69 |
+
"3. [训练教程](https://www.bilibili.com/read/cv21926598)\n",
|
| 70 |
+
"\n",
|
| 71 |
+
"4. [阿里云部署教程](https://www.bilibili.com/video/BV1po4y1877P/?vd_source=e6294619bd5137ea0025a3d001e715a7#reply161206731712)\n",
|
| 72 |
+
"\n",
|
| 73 |
+
"5. [nas部署教程](https://www.bilibili.com/video/BV1Ao4y1j77z/?vd_source=e6294619bd5137ea0025a3d001e715a7)\n",
|
| 74 |
+
"\n",
|
| 75 |
+
"在阿里云中如果我们不采用数据集的挂载,上传文件和下载文件以及删除文件都相当困难,而现在我将教授大家一种相对简单的方法\n",
|
| 76 |
+
"\n",
|
| 77 |
+
"1.注册https://huggingface.co/ 进行仓库建立\n",
|
| 78 |
+
"!点击new model 进入界面填写仓库名字 然后选择public License选择:openrail然后创建然后我们就有了一个数据库大家只要自行上传文件然后复制当前的链接网址便可以使用了"
|
| 79 |
+
]
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"cell_type": "code",
|
| 83 |
+
"execution_count": 1,
|
| 84 |
+
"metadata": {
|
| 85 |
+
"id": "RBYsZ0r-EmPV"
|
| 86 |
+
},
|
| 87 |
+
"outputs": [],
|
| 88 |
+
"source": [
|
| 89 |
+
"# **B. 开始训练按序执行即可**"
|
| 90 |
+
]
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"cell_type": "code",
|
| 94 |
+
"execution_count": null,
|
| 95 |
+
"metadata": {},
|
| 96 |
+
"outputs": [],
|
| 97 |
+
"source": [
|
| 98 |
+
"#@title ### 1.1 查看GPU信息**(确保你用的是GPU运行时)\n",
|
| 99 |
+
"#查看是什么GPU\n",
|
| 100 |
+
"!nvidia-smi"
|
| 101 |
+
]
|
| 102 |
+
},
|
| 103 |
+
{
|
| 104 |
+
"cell_type": "code",
|
| 105 |
+
"execution_count": null,
|
| 106 |
+
"metadata": {},
|
| 107 |
+
"outputs": [],
|
| 108 |
+
"source": [
|
| 109 |
+
"#@title ### 1.2 克隆github中的lora训练模型必须运行)**\n",
|
| 110 |
+
"\n",
|
| 111 |
+
"#@markdown **此代码块执行完后,lora训练文件会从相应的github克隆过来,你可以在安装依赖时去配置train.sh文件**\n",
|
| 112 |
+
"%cd /mnt/workspace/\n",
|
| 113 |
+
"choose_version = \"py3.8\" #@param [\"Akegarasu\", \"WSH\", \"py3.8\"]\n",
|
| 114 |
+
"#删��先前下载的lora训练模型\n",
|
| 115 |
+
"!mkdir -p /mnt/workspace/lora-scripts/ #防止报错\n",
|
| 116 |
+
"!rm -r /mnt/workspace/lora-scripts/\n",
|
| 117 |
+
"#选择github库\n",
|
| 118 |
+
"if choose_version == \"Akegarasu\":\n",
|
| 119 |
+
" git_https = \"https://github.com/Akegarasu/lora-scripts\"\n",
|
| 120 |
+
"elif choose_version == \"WSH\":\n",
|
| 121 |
+
" git_https = \"https://github.com/WSH032/lora-scripts.git\"\n",
|
| 122 |
+
"elif choose_version == \"py3.8\":\n",
|
| 123 |
+
" #这是一个2023年3月1日的备份源,可以让你使用兼容py3.8的lora训练\n",
|
| 124 |
+
" git_https = \"https://github.com/WSH032/temp.git\"\n",
|
| 125 |
+
"else:\n",
|
| 126 |
+
" print(\"git选择出错\")\n",
|
| 127 |
+
"#从git仓库下载Lora训练模型\n",
|
| 128 |
+
"print(f\"{choose_version}的github克隆中\")\n",
|
| 129 |
+
"!git clone --recurse-submodules {git_https}\n",
|
| 130 |
+
"!cd lora-scripts && git pull && git submodule update --init --recursive\n",
|
| 131 |
+
"#对于py3.8的lora训练模型需要做一个移动\n",
|
| 132 |
+
"if choose_version == \"py3.8\":\n",
|
| 133 |
+
" !mv /mnt/workspace/temp/lora-scripts/ /mnt/workspace/lora-scripts/\n",
|
| 134 |
+
" !rm -r /mnt/workspace/temp\n",
|
| 135 |
+
"print(f\"{choose_version}的github克隆完成 你可以在安装依赖时去配置train.sh文件\")\n",
|
| 136 |
+
"###################################################################################\n",
|
| 137 |
+
"#这是一个使用正则表达式匹配编辑文件的函数,用于在(七)中对train.sh的修改\n",
|
| 138 |
+
"\n",
|
| 139 |
+
"#导入正则表达式模块\n",
|
| 140 |
+
"import re\n",
|
| 141 |
+
"#########\n",
|
| 142 |
+
"#设置train.sh文件路径,这个在函数中会被使用\n",
|
| 143 |
+
"train_sh_path = r'/mnt/workspace/lora-scripts/train.sh'\n",
|
| 144 |
+
"#########\n",
|
| 145 |
+
"#定义函数,编辑train_sh_path路径的文件,为search的参数赋予值input\n",
|
| 146 |
+
"#search为字符串,input可以为数值和字符串\n",
|
| 147 |
+
"def search_input(search, input):\n",
|
| 148 |
+
" # 使用正则表达式进行替换\n",
|
| 149 |
+
" #匹配标志: 1匹配search=\"\" , 2匹配search=5 , 3专门专门匹配extArgs=()\n",
|
| 150 |
+
" search_type_flag = 0\n",
|
| 151 |
+
"\n",
|
| 152 |
+
" #search不是字符串就报错\n",
|
| 153 |
+
" if not( isinstance(search, str) ):\n",
|
| 154 |
+
" return \"非字符串的'search'参数\"\n",
|
| 155 |
+
"\n",
|
| 156 |
+
" #如果search输入的是\"\",则专门匹配extArgs=()\n",
|
| 157 |
+
" if search == \"\":\n",
|
| 158 |
+
" search = \"extArgs\"\n",
|
| 159 |
+
" pattern = rf'^{search}=(\\(.*?\\))'\n",
|
| 160 |
+
" replace = rf'{search}=({input})'\n",
|
| 161 |
+
" search_type_flag = 3\n",
|
| 162 |
+
" else:\n",
|
| 163 |
+
" # 如果input是字符串类型,匹配search=\"\"\n",
|
| 164 |
+
" if isinstance(input, str):\n",
|
| 165 |
+
" #pattern = rf'{search}=(\".*?\")'\n",
|
| 166 |
+
" #replace = f\"{search}=\\\"{input}\\\"\"\n",
|
| 167 |
+
" pattern = rf'^{search}=(\".*?\")'\n",
|
| 168 |
+
" replace = rf'{search}=\"{input}\"'\n",
|
| 169 |
+
" search_type_flag = 1\n",
|
| 170 |
+
" # 如果input是数值类型,匹配search= (可以匹配小数、整数、科学计数)\n",
|
| 171 |
+
" elif isinstance(input, (int, float)):\n",
|
| 172 |
+
" pattern = rf'^{search}=([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?)'\n",
|
| 173 |
+
" replace = rf'{search}={input}'\n",
|
| 174 |
+
" search_type_flag = 2\n",
|
| 175 |
+
" else: # 其他情况,就返回错误信息 \n",
|
| 176 |
+
" return \"错误的匹配input\"\n",
|
| 177 |
+
"\n",
|
| 178 |
+
" #使用with语句打开文件,并读取内容\n",
|
| 179 |
+
" with open(train_sh_path, 'r', encoding='utf-8') as f:\n",
|
| 180 |
+
" content = f.read()\n",
|
| 181 |
+
" re_get = re.findall(pattern, content, flags=re.MULTILINE|re.DOTALL)\n",
|
| 182 |
+
" #检查是否匹配到,匹配不到则报错并退出\n",
|
| 183 |
+
" if not(re_get):\n",
|
| 184 |
+
" print(f\"警告!!!对于'{search}'的正则表达式并未匹配,请手动设置该参数,并B站私信我更新!\")\n",
|
| 185 |
+
" return\n",
|
| 186 |
+
" #如果匹配到了执行接下来操作\n",
|
| 187 |
+
" #使用re.sub函数进行替换,并加上re.MULTILINE标志\n",
|
| 188 |
+
" new_content = re.sub(pattern, replace, content, flags=re.MULTILINE|re.DOTALL, count=1)\n",
|
| 189 |
+
" #如果内容未更改,提示未改变以及值\n",
|
| 190 |
+
" if new_content == content:\n",
|
| 191 |
+
" print(f\"{search}={re_get[0]}\")\n",
|
| 192 |
+
" return\n",
|
| 193 |
+
" #如果改变则写入,输出改变信息\n",
|
| 194 |
+
" else:\n",
|
| 195 |
+
" with open(train_sh_path, 'w', encoding='utf-8') as f:\n",
|
| 196 |
+
" f.write(new_content)\n",
|
| 197 |
+
" if search_type_flag == 1: right = left = \"\\\"\"\n",
|
| 198 |
+
" elif search_type_flag == 2: right = left = \"\"\n",
|
| 199 |
+
" elif search_type_flag == 3: right = \")\" ; left = \"(\" \n",
|
| 200 |
+
" else: print(\"输入参数错误\")\n",
|
| 201 |
+
" print(f\"发生修改,{search}={re_get[0]}现在为{left}{input}{right}\")\n",
|
| 202 |
+
"\n",
|
| 203 |
+
"#模型输出地址被更改至\"/mnt/workspace/drive/MyDrive/Lora/output/\" \n",
|
| 204 |
+
"search_input(\" --output_dir\", \"/mnt/workspace/drive/MyDrive/Lora/output/\")\n",
|
| 205 |
+
"print(\"\\b模型输出地址默认被更改至:/mnt/workspace/drive/MyDrive/Lora/output/\")\n",
|
| 206 |
+
"#训练集路径设置为/mnt/workspace/lora-scripts/train/aki\n",
|
| 207 |
+
"search_input(\"train_data_dir\", \"/mnt/workspace/lora-scripts/train/aki/\")\n",
|
| 208 |
+
"print(\"\\b训练集路径设置为:/mnt/workspace/lora-scripts/train/aki/\")\n",
|
| 209 |
+
"#################################################################\n",
|
| 210 |
+
"#声明extArgs_Content类,用于在不同代码块中更新extArgs的内容\n",
|
| 211 |
+
"class ExtArgsContent(object):\n",
|
| 212 |
+
" def __init__(self):\n",
|
| 213 |
+
" self.base_model = \"\"\n",
|
| 214 |
+
" self.vae = \"\"\n",
|
| 215 |
+
" self.common_parameter = \"\"\n",
|
| 216 |
+
" self.sample_parameter = \"\"\n",
|
| 217 |
+
" self.plus_parameter = \"\"\n",
|
| 218 |
+
" #合并全部类属性字符串\n",
|
| 219 |
+
" def all(self):\n",
|
| 220 |
+
" result = \"\"\n",
|
| 221 |
+
" attributes = self.__dict__.values()\n",
|
| 222 |
+
" for attribute in attributes:\n",
|
| 223 |
+
" result += attribute\n",
|
| 224 |
+
" return result\n",
|
| 225 |
+
"#将在(六、七)中被使用\n",
|
| 226 |
+
"extArgs_content = ExtArgsContent()\n",
|
| 227 |
+
"#默认不采样(将在7.2中使用)\n",
|
| 228 |
+
"enable_sample = False"
|
| 229 |
+
]
|
| 230 |
+
},
|
| 231 |
+
{
|
| 232 |
+
"cell_type": "markdown",
|
| 233 |
+
"metadata": {
|
| 234 |
+
"id": "UIMsiQtyDAcT"
|
| 235 |
+
},
|
| 236 |
+
"source": [
|
| 237 |
+
"##安装环境及拷贝材料"
|
| 238 |
+
]
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"cell_type": "code",
|
| 242 |
+
"execution_count": null,
|
| 243 |
+
"metadata": {},
|
| 244 |
+
"outputs": [],
|
| 245 |
+
"source": [
|
| 246 |
+
"在terminal分别执行两条语句\n",
|
| 247 |
+
"apt-get update \n",
|
| 248 |
+
"apt-get install "
|
| 249 |
+
]
|
| 250 |
+
},
|
| 251 |
+
{
|
| 252 |
+
"cell_type": "code",
|
| 253 |
+
"execution_count": null,
|
| 254 |
+
"metadata": {},
|
| 255 |
+
"outputs": [],
|
| 256 |
+
"source": [
|
| 257 |
+
"pip_all_number = 7\n",
|
| 258 |
+
"pip_count = 2\n",
|
| 259 |
+
"#安装aria2\n",
|
| 260 |
+
"!apt install -y aria2 > /dev/null 2>&1\n",
|
| 261 |
+
"#安装其他依赖\n",
|
| 262 |
+
"print(f\"其他依赖安装中,此步耗时较长,请耐心等待\")\n",
|
| 263 |
+
"%cd /mnt/workspace/lora-scripts/sd-scripts/\n",
|
| 264 |
+
"!pip -q install --upgrade -r requirements.txt > /dev/null 2>&1\n",
|
| 265 |
+
"print(f\"其他依赖安装完成 {pip_count}/{pip_all_number}\")\n",
|
| 266 |
+
"pip_count+=1\n",
|
| 267 |
+
"#安装兼容torch1.14.1的torchvision0.14.1\n",
|
| 268 |
+
"print(f\"torchvision安装中\")\n",
|
| 269 |
+
"!pip -q install torchvision==0.14.1 > /dev/null 2>&1\n",
|
| 270 |
+
"print(f\"torchvision-0.14.1安装完成 {pip_count}/{pip_all_number}\")\n",
|
| 271 |
+
"pip_count+=1\n",
|
| 272 |
+
"#安装xformers 0.0.16版本\n",
|
| 273 |
+
"print(f\"xformers安装中\")\n",
|
| 274 |
+
"!pip -q install xformers==0.0.16 > /dev/null 2>&1\n",
|
| 275 |
+
"print(f\"xformers-0.0.16安装完成 {pip_count}/{pip_all_number}\")\n",
|
| 276 |
+
"pip_count+=1\n",
|
| 277 |
+
"#安装Triton\n",
|
| 278 |
+
"print(f\"triton安装中\")\n",
|
| 279 |
+
"!pip -q install triton==2.0.0.dev20221202 > /dev/null 2>&1\n",
|
| 280 |
+
"print(f\"Triton安装完成 {pip_count}/{pip_all_number}\")\n",
|
| 281 |
+
"pip_count+=1\n",
|
| 282 |
+
"#安装lion优化器、lycoris\n",
|
| 283 |
+
"print(f\"lion优化器、lycoris安装中\")\n",
|
| 284 |
+
"!pip -q install --upgrade lion-pytorch lycoris-lora > /dev/null 2>&1\n",
|
| 285 |
+
"print(f\"lion优化器、lycoris安装完成 {pip_count}/{pip_all_number}\")\n",
|
| 286 |
+
"pip_count+=1\n",
|
| 287 |
+
"#安装Dadaption优化器\n",
|
| 288 |
+
"print(f\"Dadaption优化器安装中\")\n",
|
| 289 |
+
"!pip -q install dadaptation > /dev/null 2>&1\n",
|
| 290 |
+
"print(f\"Dadaption优化器安装完成 {pip_count}/{pip_all_number}\")\n",
|
| 291 |
+
"pip_count+=1"
|
| 292 |
+
]
|
| 293 |
+
},
|
| 294 |
+
{
|
| 295 |
+
"cell_type": "code",
|
| 296 |
+
"execution_count": null,
|
| 297 |
+
"metadata": {},
|
| 298 |
+
"outputs": [],
|
| 299 |
+
"source": [
|
| 300 |
+
"!apt install -y aria2 "
|
| 301 |
+
]
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"cell_type": "markdown",
|
| 305 |
+
"metadata": {
|
| 306 |
+
"id": "9GeMKE6hie8_",
|
| 307 |
+
"tags": []
|
| 308 |
+
},
|
| 309 |
+
"source": [
|
| 310 |
+
"###从仓库中拷贝训练材料"
|
| 311 |
+
]
|
| 312 |
+
},
|
| 313 |
+
{
|
| 314 |
+
"cell_type": "code",
|
| 315 |
+
"execution_count": null,
|
| 316 |
+
"metadata": {},
|
| 317 |
+
"outputs": [],
|
| 318 |
+
"source": [
|
| 319 |
+
"!mkdir -p /mnt/workspace/lora-scripts/train/ #防止首次运行报错\n",
|
| 320 |
+
"!rm -r /mnt/workspace/lora-scripts/train/\n",
|
| 321 |
+
"#@markdown model_url的位置是你训练集的上传链接你可以先传到https://huggingface.co/上然后到你上传文件的根目录复制其链接请注意链接如果出现中blob的路径请替换为resolve\n",
|
| 322 |
+
"def aria2(url, filename, d):\n",
|
| 323 |
+
" !aria2c --console-log-level=error -c -x 16 -s 16 {url} -o {filename} -d {d}\n",
|
| 324 |
+
"\n",
|
| 325 |
+
"model_url = \"https://huggingface.co/\"\n",
|
| 326 |
+
"\n",
|
| 327 |
+
"aria2(model_url, model_url.split(\"/\")[-1], \"/mnt/workspace/lora-scripts/train/aki/\")\n",
|
| 328 |
+
"\n",
|
| 329 |
+
"#@markdown 请注意训练集可以压缩包的形式上传然后可以在terminal的命令窗口执行依次执行 窗口在上方请注意将上传压缩包的名字命名为1\n",
|
| 330 |
+
"#@markdown apt-get update \n",
|
| 331 |
+
"#@markdown apt-get install \n",
|
| 332 |
+
"#@markdown zip unzip /mnt/workspace/lora-scripts/train/aki/1.zip -d /mnt/workspace/lora-scripts/train/aki\n",
|
| 333 |
+
"#@markdown 完成解压之后请手动删除压缩包\n",
|
| 334 |
+
"%cd /mnt/workspace/lora-scripts"
|
| 335 |
+
]
|
| 336 |
+
},
|
| 337 |
+
{
|
| 338 |
+
"cell_type": "code",
|
| 339 |
+
"execution_count": null,
|
| 340 |
+
"metadata": {
|
| 341 |
+
"id": "2wRUt_h0FHy5"
|
| 342 |
+
},
|
| 343 |
+
"outputs": [],
|
| 344 |
+
"source": [
|
| 345 |
+
"##下载底层模型"
|
| 346 |
+
]
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"cell_type": "code",
|
| 350 |
+
"execution_count": null,
|
| 351 |
+
"metadata": {},
|
| 352 |
+
"outputs": [],
|
| 353 |
+
"source": [
|
| 354 |
+
"#@markdown model_url此位置同上可以替换成自己喜欢的底膜注意问题同上\n",
|
| 355 |
+
"def aria2(url, filename, d):\n",
|
| 356 |
+
" !aria2c --console-log-level=error -c -x 16 -s 16 {url} -o {filename} -d {d}\n",
|
| 357 |
+
"model_url = \"https://huggingface.co/cloud768/perfectworld/resolve/main/chilloutmix_NiPrunedFp32Fix.safetensors\"\n",
|
| 358 |
+
"aria2(model_url, model_url.split(\"/\")[-1], \"/mnt/workspace/lora-scripts/sd-models/\")"
|
| 359 |
+
]
|
| 360 |
+
},
|
| 361 |
+
{
|
| 362 |
+
"cell_type": "markdown",
|
| 363 |
+
"metadata": {
|
| 364 |
+
"id": "vhwhQZEEq65p",
|
| 365 |
+
"tags": []
|
| 366 |
+
},
|
| 367 |
+
"source": [
|
| 368 |
+
"\n",
|
| 369 |
+
"##修改train.sh参数\n",
|
| 370 |
+
"\n",
|
| 371 |
+
"1、你需要打开*lora-scripts/train.sh*手动设置其它参数\n",
|
| 372 |
+
"\n",
|
| 373 |
+
"**2、注意,如果你手动配置参数,除非你知道你在做什么,不然不要修改底模路径和训练集图片路径**\n",
|
| 374 |
+
"\n",
|
| 375 |
+
"3、输出的模型会自动保存至你的阿里云/Lora/output/(output_folder_name)目录下\n",
|
| 376 |
+
"\n",
|
| 377 |
+
"如果你没有挂载nas,则模型会存储在阿里云临时环境中的drive/MyDrive/Lora/output/(output_folder_name)这个路径下。但是请注意,一旦实例重启会被清除,请**及时下载保存**模型。\n",
|
| 378 |
+
"\n"
|
| 379 |
+
]
|
| 380 |
+
},
|
| 381 |
+
{
|
| 382 |
+
"cell_type": "markdown",
|
| 383 |
+
"metadata": {
|
| 384 |
+
"id": "kqddLa2TFY2D",
|
| 385 |
+
"tags": []
|
| 386 |
+
},
|
| 387 |
+
"source": [
|
| 388 |
+
"##开始训练"
|
| 389 |
+
]
|
| 390 |
+
},
|
| 391 |
+
{
|
| 392 |
+
"cell_type": "code",
|
| 393 |
+
"execution_count": null,
|
| 394 |
+
"metadata": {},
|
| 395 |
+
"outputs": [],
|
| 396 |
+
"source": [
|
| 397 |
+
"#@title ###开始训练\n",
|
| 398 |
+
"#@markdown 若正确运行,训练完成后,模型会自动保存/Lora/output/`\n",
|
| 399 |
+
"\n",
|
| 400 |
+
"#@markdown 如果不到1分钟就运行完了,多半是出错了,把输出信息复制到ChatGPT问下罢! :(\n",
|
| 401 |
+
"\n",
|
| 402 |
+
"#@markdown Q:输出代码的最后出现(kill:9)字样 \n",
|
| 403 |
+
"\n",
|
| 404 |
+
"#@markdown A:爆ram了,更换小的底模\n",
|
| 405 |
+
"\n",
|
| 406 |
+
"##################注意!!!请先修改配置文件!!!###########################\n",
|
| 407 |
+
"#开始训练!\n",
|
| 408 |
+
"%cd /mnt/workspace/lora-scripts/\n",
|
| 409 |
+
"!bash train.sh\n",
|
| 410 |
+
"!echo \"完成了 XXXD.\""
|
| 411 |
+
]
|
| 412 |
+
}
|
| 413 |
+
],
|
| 414 |
+
"metadata": {
|
| 415 |
+
"accelerator": "GPU",
|
| 416 |
+
"colab": {
|
| 417 |
+
"collapsed_sections": [
|
| 418 |
+
"2xPpy2V_bm6q",
|
| 419 |
+
"k-OOv-mDlY8b",
|
| 420 |
+
"W9wqv5U3iVZq",
|
| 421 |
+
"19nEZDbHMzsv",
|
| 422 |
+
"g8uAVOwb4wd8",
|
| 423 |
+
"EP59EDzIH3AL",
|
| 424 |
+
"awjy39L8jZWU",
|
| 425 |
+
"GQ7GziwME6Fi"
|
| 426 |
+
],
|
| 427 |
+
"private_outputs": true,
|
| 428 |
+
"provenance": [
|
| 429 |
+
{
|
| 430 |
+
"file_id": "1_f0qJdM43BSssNJWtgjIlk9DkIzLPadx",
|
| 431 |
+
"timestamp": 1680405616878
|
| 432 |
+
}
|
| 433 |
+
]
|
| 434 |
+
},
|
| 435 |
+
"gpuClass": "standard",
|
| 436 |
+
"kernelspec": {
|
| 437 |
+
"display_name": "Python 3 (ipykernel)",
|
| 438 |
+
"language": "python",
|
| 439 |
+
"name": "python3"
|
| 440 |
+
},
|
| 441 |
+
"language_info": {
|
| 442 |
+
"codemirror_mode": {
|
| 443 |
+
"name": "ipython",
|
| 444 |
+
"version": 3
|
| 445 |
+
},
|
| 446 |
+
"file_extension": ".py",
|
| 447 |
+
"mimetype": "text/x-python",
|
| 448 |
+
"name": "python",
|
| 449 |
+
"nbconvert_exporter": "python",
|
| 450 |
+
"pygments_lexer": "ipython3",
|
| 451 |
+
"version": "3.8.13"
|
| 452 |
+
}
|
| 453 |
+
},
|
| 454 |
+
"nbformat": 4,
|
| 455 |
+
"nbformat_minor": 4
|
| 456 |
+
}
|