微调stable diffusion
一. 代码参考
不在stable diffusion官方仓库中修改,而是到huggingface 中找到微调的文件微调stable diffusion, 在其上面进行修改,
二. 出现的问题:
huggingface模型下载不下来一些尝试
安装clash 使服务器能够连接外网,依旧不能连接 打算从huggingface上下载到本地,手动创建目录太难 使用git lfs,但依旧很麻烦,同时需要注意的是目录下有多个模型 不需要都下载,只需要下载自己想要的就行 从镜像网址安装 huggingface 镜像网站,要看下面的教程
,而不是直接自己搜然后下载到本地上传啥的具体步骤:
安装依赖:
pip install -U huggingface_hub
设置环境变量这句话,写入~/.bashrc
export HF_ENDPOINT=https://hf-mirror.com
对于from-pretrained的在命令行里面加上需要的自己的huggingface的token就行huggingface-cli download --token hf_*** --resume-download meta-llama/Llama-2-7b-hf --local-dir Llama-2-7b-hf
可以添加 --local-dir-use-symlinks False
参数禁用文件软链接,这样下载路径下所见即所得,要不然下载文件夹里的文件是符号链接,真正的文件在root/.cache/..
中
一些错误
好不容易下载模型下来后。发现有警告一些模型没有参数之后就突然Killed
了
原因:不是模型不匹配的原因,而是使用autodl的时候设置无卡模式,没有卡来训练就被Killed
了
2. 想要加入配置文件调试
背景:微调stable diffusion的程序一般需要设置很多参数,为了更好地了解程序文件每一步干什么,才能方便修改,所以需要使用配置文件调试,但是不想每一个参数手动写入,就可以vpdb,自动生成调试文件。
安装vpdb库
pip install vpdb
使用vpdb
vpdb python main.py --dataset cifar10 --imgsize 32 --epoch 100000
之后vscode的调试文件就自动生成调试文件了
微调stable diffusion unet根本无法更新self.unet,optimizer, self.train_dataloader, lr_scheduler = accelerator.prepare(
self.unet,optimizer, self.train_dataloader, lr_scheduler
)
胡乱解决:结果把prepare里的unet去掉self
就可以了, 但是会产生一个问题:两个客户端的unet的是共享同一个地址的,不符合联邦学习
找到原因:因为optimizer是关联着unet的而不是self.unet,所以跑才会不更新,感谢同门
三. 一些有用的知识
.sh 的使用设置可见的cuda环境 要在前面加export
export CUDA_VISIBLE_DEVICES=5,6,7,8
运行时最好使用bash test.sh 而不是使用sh 后者容易出现语法错误
accelerate的configaccelerate config --config_file config.yaml # This will create a config file on your server to `config.yaml`
accelerate launch --config_file config.yaml ./cv_example.py --data_dir path_to_data # This will run the script on your server
注意:要修改accelerate的config不能直接修改该文件,而是要使用第一条命令再配置一次
总结
### 微调Stable Diffusion总结#### 一、代码参考
针对Stable Diffusion的微调,本文推荐不在其官方仓库直接修改,而是转向Hugging Face平台寻找和调整相关微调文件。这种方式旨在避免直接改动官方源代码的复杂性,便于利用Hugging Face社区提供的丰富资源和工具进行定制化开发。
#### 二、遇到的问题及解决方案
##### 1. Hugging Face模型下载难题
- **问题描述**:从Hugging Face下载模型时遭遇障碍,即使尝试多种网络连接手段仍无法成功下载。
- **解决方案**:
- **镜像站点**: 通过配置环境变量使用Hugging Face的镜像网站进行下载(如hf-mirror.com),有效解决了直接下载失败的问题。
- **命令行操作**:利用`huggingface-cli download`命令配合模型token和`--resume-download`参数实现模型的可靠下载。
- **软链接处理**:添加`--local-dir-use-symlinks False`参数避免下载文件以软链接形式存储在不可见路径,确保文件直接下载到指定目录。
##### 2. 模型下载后的错误处理
- **警告与Killed问题**:模型下载成功后,遇到警告信息和“Killed”错误。这通常是因为在无GPU环境下设置了需要GPU的训练参数,调整为合适的硬件配置即可解决。
- **调试配置**:
- **vpdb库**:利用vpdb库自动生成调试文件,简化配置流程,便于理解和调试程序。
- **代码修改**:微调过程中发现U-Net更新问题,通过移除`prepare`函数中`unet`前的`self.`,虽解决了更新问题,但引入了客户端间模型共享的新问题,提示需要更细致的联邦学习设计。
#### 三、实用知识与技巧
- **Shell脚本执行**(.sh文件):使用`bash test.sh`而非`sh`执行脚本,避免语法错误。
- **CUDA环境配置**:通过`export CUDA_VISIBLE_DEVICES=5,6,7,8`命令设置可见GPU设备,便于管理资源。
- **Accelerate配置与优化**:
- 第一次使用`accelerate config --config_file config.yaml`生成配置文件。
- 通过`accelerate launch --config_file config.yaml ./cv_example.py --data_dir path_to_data`命令以配置好的参数启动模型训练。
- 注意配置文件的变更需重新通过配置命令生成,避免手动修改引发的潜在问题。
通过这样的总结,可以更清晰地理解在微调Stable Diffusion过程中可能遇到的问题及其解决方法,同时掌握一些实用的技巧和知识,提高开发效率和模型优化能力。