笔记 · 2025-04-27

手把手教你部署 flux模型训练项目fluxgym!超详细图文教程来了​

一、前言

Flux Lora 模型在 AI 绘画、图像生成等领域展现出强大潜力,其高效生成高质量图像的能力,正被广泛应用于个性化创作、虚拟场景构建等场景。但稳定的部署环境是模型训练与推理的基础,无论你是初次接触 AI 模型的爱好者,还是希望拓展技能的开发者,本文都将以 Windows 系统为例,提供从入门到实战的全流程指南。其他系统用户可参考关键逻辑调整命令,轻松完成部署。

二、部署前的准备工作

在开始部署前,需确认硬件与软件基础条件。硬件方面,建议配备支持 CUDA 的 Nvidia 显卡(如 RTX 3060 及以上)以保障训练效率,同时确保系统拥有至少 12GB 内存和 20GB 以上硬盘空间(含模型存储)。软件层面,需提前安装 Git(用于代码克隆,下载地址:https://git-scm.com/)和 Python 3.10+(需添加到环境变量,下载地址:https://www.python.org/),为后续操作奠定基础。

强烈推荐python 3.10版本,比较稳定不容易出问题。

三、部署

首先打开命令行工具,在指定路径创建项目文件夹并进入,通过以下命令克隆 Fluxgym 主项目。

git clone https://github.com/cocktailpeanut/fluxgym

完成后需继续克隆 sd-scripts 工具库,切换到 fluxgym 目录后执行:

git clone -b sd3 https://github.com/kohya-ss/sd-scripts

注意指定sd3分支以确保兼容性,后续若版本更新需留意分支变化。

接下来创建并激活虚拟环境以避免依赖冲突。

Windows 用户创建环境:

python -m venv env

激活环境(激活后命令行前缀显示 “env”):

env\Scripts\activate

Linux/macOS 用户创建环境:

python3 -m venv env

Linux/macOS 用户激活环境:

source env/bin/activate。

激活环境后进入 sd-scripts 目录,使用pip install -r requirements.txt安装sd-scripts的依赖。国内用户可添加清华源加速(-i https://pypi.tuna.tsinghua.edu.cn/simple),若遇版本问题可通过pip install –upgrade pip升级 pip。

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

回到fluxgym文件夹,安装fluxygm的依赖,由于国内访问 Hugging Face 源速度较慢,需修改依赖文件。

用文本编辑器打开 fluxgym 目录下的 requirements.txt,将gradio_logsview@https://huggingface.co替换为gradio_logsview@https://hf-mirror.com,保存后执行命令安装依赖:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

最后安装 PyTorch CUDA 版本,执行注意通过nvidia-smi命令查看显卡支持的 CUDA 版本,确保与cu121匹配。

pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121,

完成依赖安装后,返回 fluxgym 主目录启动服务。

Windows 用户可以自己指定端口:

set GRADIO_SERVER_NAME=0.0.0.0
set GRADIO_SERVER_PORT=8080

Linux/macOS 用户指定端口,用export替代set即可。

最后执行命令启动 Web 服务:

python app.py

如果指定了端口,就访问自己指定的端口,否则默认的端口会是7860,你也可以直接复制控制台的地址进行访问。

最后是模型下载和修改模型models.yaml文件。

模型下载的代码如下:

import os
import requests
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm

# 下载任务配置(FP8精度版本)
download_tasks = [
    {
        "url": "https://hf-mirror.com/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors?download=true",
        "save_path": "models/clip/clip_l.safetensors"
    },
    {
        "url": f"https://hf-mirror.com/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp16.safetensors?download=true",
        "save_path": "models/clip/t5xxl_fp16.safetensors"
    },
    {
        "url": "https://cnb.cool/itq5/comfyui_models/-/lfs/afc8e28272cd15db3919bacdb6918ce9c1ed22e96cb12c4d5ed0fba823529e38?name=ae.sft",
        "save_path": "models/vae/ae.sft"
    },
    {
        "url": "https://cnb.cool/itq5/comfyui_models/-/lfs/062dad72b2fee99af172463b3a2c84c1da793aaf80eaa0543138e05be55cdbbf?name=majicflus_v134.safetensors",
        "save_path": "models/unet/majicflus_v134.safetensors"
    }
]

def download_file(url, save_path):
    """下载单个文件并显示进度条"""
    # 创建保存目录
    os.makedirs(os.path.dirname(save_path), exist_ok=True)
    
    # 设置请求头(部分镜像站需要)
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    
    # 设置流式下载
    try:
        response = requests.get(url, headers=headers, stream=True, timeout=30)
        response.raise_for_status()
        
        # 获取文件总大小
        total_size = int(response.headers.get('content-length', 0))
        
        # 检查是否已部分下载
        if os.path.exists(save_path):
            existing_size = os.path.getsize(save_path)
            if existing_size == total_size:
                print(f"文件已存在且完整: {save_path}")
                return
            elif 0 < existing_size < total_size:
                headers['Range'] = f'bytes={existing_size}-'
                response = requests.get(url, headers=headers, stream=True, timeout=30)
        
        # 使用tqdm显示进度条
        progress_bar = tqdm(
            desc=os.path.basename(save_path),
            total=total_size,
            unit='B',
            unit_scale=True,
            unit_divisor=1024,
            initial=existing_size if 'Range' in headers else 0
        )
        
        # 写入文件(追加模式如果支持断点续传)
        mode = 'ab' if 'Range' in headers else 'wb'
        with open(save_path, mode) as f:
            for chunk in response.iter_content(chunk_size=8192):
                if chunk:
                    f.write(chunk)
                    progress_bar.update(len(chunk))
        
        progress_bar.close()
        
        # 验证文件完整性
        if total_size != 0 and os.path.getsize(save_path) != total_size:
            raise Exception(f"下载不完整: {save_path}")
            
    except Exception as e:
        # 清理不完整的文件
        if os.path.exists(save_path):
            os.remove(save_path)
        raise Exception(f"下载失败: {url} -> {str(e)}")

def download_all():
    """多线程下载所有文件"""
    print("开始从国内镜像站下载FP8精度模型...")
    print("使用的镜像站: MIRROR_URL")
    
    with ThreadPoolExecutor(max_workers=4) as executor:
        futures = []
        for task in download_tasks:
            futures.append(
                executor.submit(
                    download_file, 
                    task["url"], 
                    task["save_path"]
                )
            )
        
        # 等待所有任务完成
        for future in futures:
            try:
                future.result()
            except Exception as e:
                print(f"\n错误: {str(e)}")
    
    print("\n所有下载任务完成!")
    print("模型保存位置:")
    for task in download_tasks:
        print(f"- {task['save_path']}")

if __name__ == "__main__":
    download_all()

在虚拟环境中执行:

python down_models.py

如果需要,可更改models.yaml的模型配置文件,自行选择需要的模型,以下是一个麦橘模型的案例,直接复制替换一组flux1-dev模型即可,如下:

majicflus_v134:
repo: .
base: .
license: other
license_name: flux1-dev-fp8-license
file: majicflus_v134.safetensors

失败,需检查是否在 fluxgym 目录下执行命令,确保路径正确;

依赖安装报错时,可尝试pip install –ignore-installed强制安装或手动补装缺失包(如gradio、torchvision)。

遇到端口被占用的情况,只需修改GRADIO_SERVER_PORT为其他未用端口(如 7860)并重启服务。

若模型下载缓慢,可手动从 Hugging Face 模型库下载文件并放入指定目录,避免程序自动下载的延迟。

国内用户可全程使用清华源、HF 镜像等加速渠道,同时提前从Nvidia 官网下载匹配的 CUDA 驱动,确保 PyTorch 运行顺畅。训练时建议关闭其他占用资源的程序,Windows 用户可通过任务管理器监控内存和显卡使用情况,Linux 用户可用nvidia-smi实时查看。此外,记录各组件版本(如 Git 提交哈希、Python 版本)至关重要,便于后续复现环境或回滚操作。

完成上述步骤后,你已成功搭建 Flux Lora 模型训练环境,接下来即可通过 Web 界面开启 AI 训练。期待你在留言区分享部署经验或遇到的问题,我将及时解答。

目录