论坛网站需要多大的空间,济南seo外包公司,还是正式公司好,泰州网站建设优化完整的 LoRA 模型训练步骤#xff1a;如何使用 Kohya_ss 进行 LoRA 训练 一、环境配置1. 安装 Python 和虚拟环境2. 克隆 Kohya_ss 仓库3. 安装依赖4. 启动 GUI lora训练1. 准备数据 图片处理打标签2. 配置 LoRA 训练2.2 配置图片文件夹和输出目录 训练解决方法#xff1a; 使… 完整的 LoRA 模型训练步骤如何使用 Kohya_ss 进行 LoRA 训练 一、环境配置1. 安装 Python 和虚拟环境2. 克隆 Kohya_ss 仓库3. 安装依赖4. 启动 GUI lora训练1. 准备数据 图片处理打标签2. 配置 LoRA 训练2.2 配置图片文件夹和输出目录 训练解决方法 使用kohya_ss来进行lora训练难点就是各种报错的问题
如果你自己的CUDApythonpytorch版本还和官网推荐的不一样更是报错更多
Kohya_ss 是一个功能强大的工具专为 Stable Diffusion 模型的训练设计可以帮助用户使用 LoRA 方法对模型进行微调。在本文中我们将详细介绍如何使用 Kohya_ss 进行 LoRA 模型训练的完整步骤包括环境配置、数据处理、以及模型训练等。
我是Linux centOS系列用的英伟达CUDA11.2的服务器虽然官方使用至少是CUDA11.8但从底层的算子逻辑原理上CUDA11.2是兼容的。
具体步骤如下
一、环境配置
1. 安装 Python 和虚拟环境
首先你需要在 CentOS 系统上创建一个 Python 虚拟环境。以下是详细步骤
安装 Conda: 如果你没有安装 Anaconda 或 Miniconda可以从官方网站下载并安装它们。 创建 Python 3.10.9 环境: 安装完成后使用以下命令创建一个 Python 3.10.9 的虚拟环境
conda create --name kohya_ss python3.10.9注意必须是3.10.9不然后续安装一些库的时候不兼容报错
激活环境:
conda activate your_env_name2. 克隆 Kohya_ss 仓库
Kohya_ss 项目托管在 GitHub 上你可以使用以下命令克隆仓库
git clone --recursive https://github.com/bmaltais/kohya_ss.git
cd kohya_ss3. 安装依赖
在 kohya_ss 目录下运行以下命令安装必要的依赖
chmod x ./setup.sh
./setup.sh如果安装这里报错或者没有权限去安装也可以打开项目的requirements_linux.txt和requirements.txt的文件手动pip安装。
我的CUDA是11.2 兼容的torch版本正好就是文件里requirements_linux.txt的
pip install torch2.1.2cu118 torchvision0.16.2cu118 xformers0.0.23.post1cu118 --extra-index-url https://download.pytorch.org/whl/cu118最后安装完所有通过python -m bitsandbytes验证如果没有报错就说明安装没问题了。
python -m bitsandbytes4. 启动 GUI
若要在 Linux 上启动 GUI你可以使用以下命令
bash gui.sh --listen 0.0.0.0 --server_port 7860 --inbrowser --share这里 0.0.0.0 表示可以从任何 IP 地址访问服务器7860 是端口号–share 参数允许你共享链接。你可以根据需要调整这些参数。
后续在训练的时间需要通过网络访问huggingface下载预训练模型但通常linux服务器没有代理是无法访问的下载不了模型或者在下载模型时出现连接超时的问题
我的方法是
HF_ENDPOINThttps://hf-mirror.com bash gui.sh --listen 0.0.0.0 --server_port 7860 --inbrowser --share利用一个镜像地址 http://hf-mirror.com下载
lora训练
1. 准备数据 图片处理打标签
首先你需要准备原始训练图片并使用 Kohya_ss 中的 BLIP Captioning 工具对这些图片进行描述。
在 Kohya_ss 的 GUI 中点击 Utilities然后选择 Captioning 和 BLIP Captioning。 在弹出的界面中选择存储训练图片的文件夹
并在 “Prefix to add to BLIP caption” 栏目中填写图片描述的前缀文字可选不填的话后续点Caption images生成标签过程也会下载预训练的blip模型给你图像描述的。
点击 Caption images 按钮开始对图片进行处理。
此时BLIP 将生成每张图片的文字描述这些描述将用于训练LoRA 模型。
linux日志出现如下就说明生成出来了 为什么打标签标签为模型学习提供明确的目标和方向。在 LoRA 训练中模型通过对数据集中图像和对应标签的学习理解不同数据特征与期望输出之间的关系。例如在训练一个生成动漫角色的 LoRA 模型时标签可以是角色的名字、性格特点、所属动漫等信息。模型在训练过程中依据这些标签将图像中的人物外貌、服饰风格等特征与标签内容建立联系从而学习到如何生成符合特定角色设定的图像。如果没有标签模型就无法得知这些图像代表的具体概念难以进行针对性学习。 2. 配置 LoRA 训练
在 Configuration file 部分你可以选择加载一个预定义的配置文件。可以在网上找到一些常用的配置文件或者根据你的需求自行编写。这个文件通常是一个 JSON 格式的文件包含了训练过程的参数和设置其实也不需要自己准备在你loragui界面训练的时候就会自动生成可以直接跳过这里。
例如配置文件可能看起来像这样
{LoRA_type: Standard,LyCORIS_preset: full,adaptive_noise_scale: 0,additional_parameters: ,async_upload: false,block_alphas: ,block_dims: ,block_lr_zero_threshold: ,bucket_no_upscale: true,bucket_reso_steps: 64,bypass_mode: false,cache_latents: true,cache_latents_to_disk: false,caption_dropout_every_n_epochs: 0,caption_dropout_rate: 0,caption_extension: .txt,clip_skip: 1,color_aug: false,constrain: 0,conv_alpha: 1,conv_block_alphas: ,conv_block_dims: ,conv_dim: 1,dataset_config: ,debiased_estimation_loss: false,decompose_both: false,dim_from_weights: false,dora_wd: false,down_lr_weight: ,dynamo_backend: no,dynamo_mode: default,dynamo_use_dynamic: false,dynamo_use_fullgraph: false,enable_bucket: true,epoch: 1,extra_accelerate_launch_args: ,factor: -1,flip_aug: false,fp8_base: false,full_bf16: false,full_fp16: false,gpu_ids: ,gradient_accumulation_steps: 1,gradient_checkpointing: false,huber_c: 0.1,huber_schedule: snr,huggingface_path_in_repo: ,huggingface_repo_id: ,huggingface_repo_type: ,huggingface_repo_visibility: ,huggingface_token: ,ip_noise_gamma: 0,ip_noise_gamma_random_strength: false,keep_tokens: 0,learning_rate: 0.0001,log_tracker_config: ,log_tracker_name: ,log_with: ,logging_dir: /data/kohya_ss/logs,loss_type: l2,lr_scheduler: cosine,lr_scheduler_args: ,lr_scheduler_num_cycles: 1,lr_scheduler_power: 1,lr_warmup: 10,main_process_port: 0,masked_loss: false,max_bucket_reso: 2048,max_data_loader_n_workers: 0,max_grad_norm: 1,max_resolution: 512,512,max_timestep: 1000,max_token_length: 75,max_train_epochs: 0,max_train_steps: 1600,mem_eff_attn: false,metadata_author: ,metadata_description: ,metadata_license: ,metadata_tags: ,metadata_title: ,mid_lr_weight: ,min_bucket_reso: 256,min_snr_gamma: 0,min_timestep: 0,mixed_precision: fp16,model_list: ,module_dropout: 0,multi_gpu: false,multires_noise_discount: 0.3,multires_noise_iterations: 0,network_alpha: 1,network_dim: 8,network_dropout: 0,network_weights: ,noise_offset: 0,noise_offset_random_strength: false,noise_offset_type: Original,num_cpu_threads_per_process: 2,num_machines: 1,num_processes: 1,optimizer: AdamW8bit,optimizer_args: ,output_dir: /data/kohya_ss/outputs,output_name: tianqiong1,persistent_data_loader_workers: false,pretrained_model_name_or_path: runwayml/stable-diffusion-v1-5,prior_loss_weight: 1,random_crop: false,rank_dropout: 0,rank_dropout_scale: false,reg_data_dir: ,rescaled: false,resume: ,resume_from_huggingface: ,sample_every_n_epochs: 0,sample_every_n_steps: 0,sample_prompts: ,sample_sampler: euler_a,save_every_n_epochs: 1,save_every_n_steps: 0,save_last_n_steps: 0,save_last_n_steps_state: 0,save_model_as: safetensors,save_precision: fp16,save_state: false,save_state_on_train_end: false,save_state_to_huggingface: false,scale_v_pred_loss_like_noise_pred: false,scale_weight_norms: 0,sdxl: false,sdxl_cache_text_encoder_outputs: false,sdxl_no_half_vae: false,seed: 0,shuffle_caption: false,stop_text_encoder_training_pct: 0,text_encoder_lr: 0.0001,train_batch_size: 1,train_data_dir: /data/kohya_ss/dataset,train_norm: false,train_on_input: true,training_comment: ,unet_lr: 0.0001,unit: 1,up_lr_weight: ,use_cp: false,use_scalar: false,use_tucker: false,v2: false,v_parameterization: false,v_pred_like_loss: 0,vae: ,vae_batch_size: 0,wandb_api_key: ,wandb_run_name: ,weighted_captions: false,xformers: xformers
}2.2 配置图片文件夹和输出目录
在 Kohya_ss 的 GUI 中点击 loRA然后选择 Training 在 Image folder 选项中选择你存储训练图片的文件夹。在 Output folder 中选择你希望保存训练结果LoRA 文件的目录。
放图片的文件夹用数字_英文的格式比如100_abc这样的名字来命名100代表重复图像100次如果你要训练500次就改成500_abc。jpg和txt都放在一起。为什么要这么取名字因为这是kohya_ss软件作者定的规矩
文件夹必须放在kohya_ss/dataset下面 后面详细的参数配置里有Epoch和Max train step Train batch size (训练批量大小) 这个参数指定了每次训练时输入到模型中的样本数量。它决定了每一轮batch计算的训练数据量。大批量训练能够利用GPU的并行计算能力但也会消耗更多的内存。较小的批量大小则会减少内存占用但可能会导致训练速度变慢。
举例来说 如果设置为 batch size 64每次训练时会使用64张图片进行 前向传播和反向传播。 如果内存较小可能需要降低批量大小以避免内存溢出。 Max train epoch (最大训练周期数) 训练周期数epoch指的是整个训练数据集被模型完整使用的次数。一个 epoch 代表训练集中的所有图像都被用来训练了一次。如果这个参数设置为 1那么模型只会遍历一次训练数据集。
如果设置为 Max train epoch 1表示在训练过程中数据集将只被使用一次。如果你希望模型多次遍历数据集以进行优化可以增加这个值。 Max train steps (最大训练步数) 训练步数指的是模型参数更新的次数。每个训练步骤对应于一批数据的处理和权重更新。如果设置了 Max train steps训练将会在达到指定的步数后停止。
如果设置为 Max train steps 1600意味着模型将在达到1600步之后停止训练尽管最大训练周期数可能允许更多的遍历。
注意如果你同时设置了 Max train epoch 和 Max train steps训练将会根据更先达到的条件停止。即如果训练步骤达到了最大步数训练会提前停止。
还记得之前的文件夹命名吗10_abc就等于把文件夹里所有的图片乘以100下也就是有1000张图片下面用一段案列分析 假设你有 1000 张图像epoch 设置为 50batch_size 为 1以下是一些相关参数的影响和内存占用的计算。 内存占用分析 内存占用主要取决于以下几个因素
每张图像的大小例如尺寸、颜色通道等批量大小batch_size图像数量num_train_images模型本身的内存占用
但在此情况下我们主要关注每次训练时的图像数据占用。
假设 每张图像的尺寸假设每张图像大小为 256 x 256 x 3RGB图像。 图像数据存储每个像素点使用 4 字节float32即 32 位。 每张图像的内存占用 每次训练的内存占用 由于 batch_size 1每个批次会加载一张图像到内存中因此每次训练所需的内存大小就是每张图像的大小。对于每个批次 总训练内存占用 每个 epoch 会遍历所有训练图像一次。在你的配置中epoch 50每个 epoch 会训练 1000 张图像。所以 每次训练时每个批次都要将当前的图像加载到 GPU 内存中因此每个 epoch 的内存占用大约为 750 MiB。所有训练的时候要考虑一下文件夹命名需要重复几次还有图像的分辨率如果太高了很可能导致GPU内存不足
训练
点击start training 可能会出现报错
解决方法
在 CentOS 上设置虚拟显示器Xvfb的方法与 Ubuntu 类似。以下是为 CentOS 配置 Xvfb 和运行 GUI 程序的详细步骤 安装 Xvfb 首先安装 Xvfb 包 我是centOS用的yuml如果是Ubuntu用lapt-getl
yum install xorg-x11-server-Xvfb启动 Xvfb 启动 Xvfb 服务器并指定显示编号通常使用 :99
Xvfb :99 这个命令将启动一个虚拟显示器并且在后台运行。 设置 DISPLAY 环境变量 然后设置 DISPLAY 环境变量让系统知道应该使用虚拟显示器
export DISPLAY:99这一步非常重要必须指向 Xvfb 模拟的显示器。你可以将这行代码添加到 .bashrc 或 .bash_profile 文件中以便在每次登录时自动设置。
验证模型训练好了找到文件模型可以在stable diffusion weui或者comfyui上验证我用的comfyui我先找到一张原图通过反向推理提示词生成提示词文本导入到clip进行生成。