在 Mac 上本地训练 Flux
谨以此文献给所有正在努力进行设置的人。
(由 A.C.T. soon® 根据 Hughescr 的帖子/仓库和 Ostris 的 ai-toolkit Flux 训练脚本重新阐述)
此工作流程并非基于 Diffusers。然而,我尚未遇到适用于 Mac/mps 的本地 Flux 训练的 Diffusers 实现。如果存在这样的工作流程/管道,我将不胜感激,如果您能提供链接(或/以及提供实施细节方面的建议)。例如通过 alekseycalvin@gmail.com,或在某处评论……比方说,我在 Huggingface 上的某个 Flux LoRA 仓库……(顺便说一句,看看它们?为了改进 Flux Schnell,请使用 Historic Color Schnell。)
言归正传,在 Mac 上本地训练的仓库在此,作为 Ostris ai-toolkit 训练脚本 git 的某种修改分支。
下面是为 MacOS 修改的 ai-toolkit 仓库链接: https://github.com/hughescr/ai-toolkit
需要明确的是,我并非此分支的创建者,而是在花费数小时广泛寻找任何适用于 MacOS/silicon 的 Flux 训练解决方案后,偶然发现了它。因此,如果这对您有效,请感谢这位了不起的巫师 Ostris(ai-toolkit 训练脚本的开发者),以及此面向 Mac 的分支的神秘作者:某位 Hughescr。
此外,也向所有那些——在对看似不可逾越的限制抱持长期怀疑的态度下——顽固地修修补补并寻求选择、解决方案和可能性的人们致敬并表示声援。
无论如何,基于 Hughescr 的另一篇指南文章,以及我自己为清晰起见添加的一些注释/细节,我刚刚整理了以下关于使用 ai-toolkit + Hughescr 分支在 Mac 上设置本地 Flux 训练的简短指南。
请注意:未经进一步优化,这很可能无法在统一内存不足的 Mac 系统上运行!
在 Mac/OSX/mps 上训练 FLUX 的工作流程
在终端中,克隆 https://github.com/hughescr/ai-toolkit,并遵循其中的 README 文件中的 Linux 说明。
如同
git clone https://github.com/hughescr/ai-toolkit
然后进入克隆的目录
cd ai-toolkit
执行此操作
git submodule update --init --recursive
然后从同一文件夹创建虚拟环境
python3 -m venv venv
激活它
source venv/bin/activate
安装 PyTorch :
pip3 install torch
安装 ai-toolkit 的要求,这应该也会通过 Hughescr 更新/引入的某些子模块来扩展它:
pip3 install -r requirements.txt
**以下是 Hughescr 为 Ostris ai-toolkit 训练脚本的该分支所引入的所有内容,以使其适应 Mac OSX(我引用了他们帖子中的以下内容):
——使用 torch.amp 代替 torch.cuda.amp (这对于 CUDA 也应该有效,但允许 MPS 工作,使用兼容 MPS 的 GradScaler)。
——多进程强制使用 spawn 而不是 fork。
——关闭 T5 量化器,因为它在 MPS 上无法工作。
——强制 dataloader 将 num_workers 设置为 0(否则进程在 Mac 上会中断)。 这可以通过将 "num_workers=0" 添加到您预期训练的配置文件中来实现:在这种情况下,这将是您从 /ai-toolkit/config/examples 中的某个 (.yaml) 模板配置文件修改而来的版本。ai-toolkit 的 Hughescr 分支应该已经预先强制此特定选项,即使与配置文件无关,但手动再次确认可能更好。
旁注:对于那些刚接触训练脚本或相对缺乏代码经验、渴望成为 Flux 重建模者的朋友们:模板配置文件,通常以 .yaml 或 .json 格式存在(例如 Kohya ss),是启动本地训练(至少在没有 GUI 界面容器/应用程序的情况下)的重要组成部分,并且通常具有严格的内部格式规则,这些规则对应于其数据类型,更具体地说是训练器的家族/架构。因此,在指定 "num_workers=0" 或填写训练参数或修改配置 .yaml (或 .json 等)中的任何其他内容时,请务必严格遵循配置模板中找到的格式和语法!否则,在运行时会遇到令人沮丧的回溯。
相关地,/ai-toolkit 本地训练器脚本文件夹包含各种模板配置,不仅用于训练 Flux,还用于许多其他类型的模型。那里有很多值得探索和尝试的东西。然而,对于我们当前的情况来说,关键是针对 Flux Dev 和 Flux Schnell 的特定模板配置 .yaml 文件。这些配置,train_lora_flux_24gb.yaml 和 train_lora_flux_schnell_24gb.yaml,位于克隆到 /ai-toolkit 文件夹的 ** /config/examples/ ** 子文件夹中:相关的配置(用于训练 Dev 或 Schnell)应由您复制,然后进行修改以供训练脚本使用。如果要在 Terminal 中直接从配置启动训练器,这些配置可以作为 run.py 启动器的参数引入。或者配置可以拖入/通过专用 UI 打开。内置的 ai-toolkit UI 可以从同一 /ai-toolkit 文件夹通过 flux_train_ui.py Python 可执行文件启动。)
🌕🌖🌗🌘🌑🌒🌓🌔🌕🌖🌗🌘🌑🌒🌓🌔🌕🌖🌗🌘🌑🌒🌓🌔🌕
现在,要运行/修改脚本,请遵循此处提供的进一步使用说明
https://github.com/hughescr/ai-toolkit#tutorial
最后,为了规避 MPS 中尚未实现的函数,需要使用以下参数启动训练脚本的 Python 可执行文件
PYTORCH_ENABLE_MPS_FALLBACK=1
这基本上是一种启用操作选择性/临时 CPU 卸载的方式,这些操作无法在 MPS/硅芯片上运行。
如同
PYTORCH_ENABLE_MPS_FALLBACK=1 python run.py config/your-custom-config-file.yaml
这将启动自定义训练配置,从而启动训练本身!
最后,为了清晰起见,以防有读者是手动启动训练的新手,我将重申
要指定诸如 数据集文件夹位置输入、模型输出文件夹位置、触发短语/标记、学习率、优化器等 内容,必须复制并修改您 /ai-toolkit 文件夹的 /config 或 /config/examples/ 子文件夹中的 .yaml 配置文件...
现在就去试试吧!
此致,
A.C.T. SOON®