在AI绘画领域,Stable Diffusion和ComfyUI是两个最常用的工具。它们都需要加载基础模型文件才能工作,其中v1-5-pruned-emaonly.safetensors是最常用的基础模型之一,文件大小约为4GB。
很多用户同时使用这两个工具时,会发现一个尴尬的问题:两个软件各自存储了一份完全相同的模型文件,导致硬盘空间被重复占用。这不仅浪费了宝贵的存储资源,而且在管理模型版本时也容易造成混乱。
提示:模型文件之所以这么大,是因为它们包含了经过大量图像数据训练得到的神经网络权重参数。这些参数决定了AI生成图像的质量和风格。
解决这个问题的核心技术是文件系统链接,主要分为两种类型:
硬链接(Hard Link)
软链接(Symbolic Link)
对于模型文件共享的场景,硬链接是更好的选择,因为:
在开始操作前,请确认:
code复制C:\Users\你的用户名\stable-diffusion-webui\models\Stable-diffusion
code复制C:\Users\你的用户名\ComfyUI\models\checkpoints
code复制/home/你的用户名/stable-diffusion-webui/models/Stable-diffusion
code复制/home/你的用户名/ComfyUI/models/checkpoints
注意:如果你的安装路径不同,请根据实际情况调整。
bash复制del "C:\Users\你的用户名\ComfyUI\models\checkpoints\v1-5-pruned-emaonly.safetensors"
bash复制mklink /H "C:\Users\你的用户名\ComfyUI\models\checkpoints\v1-5-pruned-emaonly.safetensors" "C:\Users\你的用户名\stable-diffusion-webui\models\Stable-diffusion\v1-5-pruned-emaonly.safetensors"
bash复制rm /home/你的用户名/ComfyUI/models/checkpoints/v1-5-pruned-emaonly.safetensors
bash复制ln /home/你的用户名/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors /home/你的用户名/ComfyUI/models/checkpoints/v1-5-pruned-emaonly.safetensors
bash复制dir "C:\Users\你的用户名\ComfyUI\models\checkpoints\v1-5-pruned-emaonly.safetensors"
正常应该显示文件信息,没有"快捷方式"字样。
bash复制ls -l /home/你的用户名/ComfyUI/models/checkpoints/v1-5-pruned-emaonly.safetensors
检查inode号是否与原始文件一致:
bash复制ls -i /home/你的用户名/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
除了基础模型,还可以共享以下文件:
Windows批量创建硬链接示例:
bash复制mklink /H "C:\Users\你的用户名\ComfyUI\models\vae\共享的vae模型.safetensors" "C:\Users\你的用户名\stable-diffusion-webui\models\VAE\共享的vae模型.safetensors"
对于需要共享多个模型文件的情况,可以创建批处理脚本:
Windows示例(save as share_models.bat):
bat复制@echo off
set SD_PATH=C:\Users\你的用户名\stable-diffusion-webui\models\Stable-diffusion
set COMFY_PATH=C:\Users\你的用户名\ComfyUI\models\checkpoints
del "%COMFY_PATH%\v1-5-pruned-emaonly.safetensors"
mklink /H "%COMFY_PATH%\v1-5-pruned-emaonly.safetensors" "%SD_PATH%\v1-5-pruned-emaonly.safetensors"
del "%COMFY_PATH%\vae-ft-mse-840000-ema-pruned.safetensors"
mklink /H "%COMFY_PATH%\vae-ft-mse-840000-ema-pruned.safetensors" "%SD_PATH%\..\VAE\vae-ft-mse-840000-ema-pruned.safetensors"
问题现象:
解决方案:
可能原因:
解决方法:
可能原因:
解决方法:
使用链接文件不会对模型加载速度或生成速度产生任何影响,因为:
备份策略:
更新模型:
磁盘清理:
在Unix-like系统中,每个文件由以下部分组成:
创建硬链接时,文件系统只是新增了一个目录项指向同一个inode。inode中有一个计数器记录有多少个目录项指向它,只有当计数器归零时,文件数据才会被真正删除。
因为inode编号只在同一个文件系统内唯一。不同分区/设备有不同的inode编号空间,所以无法直接跨分区创建硬链接。
软链接是一个特殊类型的文件,其内容是目标文件的路径。当系统访问软链接时,会先读取链接文件内容,然后重定向到目标路径。
可以通过设置环境变量让两个软件使用同一个模型目录:
bash复制# Linux/macOS
export COMFYUI_MODEL_PATH=/path/to/sd/models
优点:
缺点:
在Linux/macOS下可以使用mount --bind:
bash复制sudo mount --bind /sd/models /comfyui/models
优点:
缺点:
| 方法 | 复杂度 | 稳定性 | 跨平台 | 维护难度 |
|---|---|---|---|---|
| 硬链接 | 中 | 高 | 是 | 低 |
| 软链接 | 低 | 中 | 是 | 中 |
| 环境变量 | 高 | 高 | 是 | 高 |
| 目录挂载 | 高 | 中 | 否 | 高 |
假设你同时使用多个版本的Stable Diffusion模型:
可以通过链接方式让ComfyUI选择性共享部分模型:
bash复制# 只共享v1.5模型
ln /sd/models/v1-5-pruned-emaonly.safetensors /comfyui/models/
在团队开发环境中,可以将模型文件放在网络存储上,每个成员本地创建链接:
bash复制ln /mnt/nas/ai-models/v1-5-pruned-emaonly.safetensors ~/ComfyUI/models/
这样既保证了模型统一,又节省了每个成员的本地存储空间。
权限管理:
防误删:
备份策略:
创建一个专门的模型目录,然后用符号链接组织不同用途的模型:
code复制/models/
├── base/ (存放原始文件)
│ ├── v1-5-pruned-emaonly.safetensors
│ └── v2-1-768-pruned-emaonly.safetensors
├── sd/ (给Stable Diffusion使用)
│ ├── default -> ../base/v1-5-pruned-emaonly.safetensors
│ └── v2 -> ../base/v2-1-768-pruned-emaonly.safetensors
└── comfy/ (给ComfyUI使用)
├── main -> ../base/v1-5-pruned-emaonly.safetensors
└── alt -> ../base/v2-1-768-pruned-emaonly.safetensors
编写脚本自动检测新模型并创建链接:
python复制import os
import glob
SD_PATH = "/path/to/sd/models"
COMFY_PATH = "/path/to/comfyui/models"
for model in glob.glob(os.path.join(SD_PATH, "*.safetensors")):
model_name = os.path.basename(model)
comfy_model = os.path.join(COMFY_PATH, model_name)
if not os.path.exists(comfy_model):
os.link(model, comfy_model)
print(f"Created link for {model_name}")
SSD存储:
内存缓存:
bash复制vmtouch -t /path/to/model/files
文件系统选择:
需要启用"开发者模式"才能创建符号链接:
某些防病毒软件可能会阻止链接创建,需要临时禁用。
bash复制sudo mount -o nobrowse -t apfs /dev/diskXsY /mnt
bash复制sudo mount --bind /original/path /new/path
现象:在文件管理器中,链接文件显示的大小与原始文件不同。
原因:这是GUI工具的显示问题,实际磁盘使用量是正确的。
验证方法:
bash复制# Linux/macOS
du -h /path/to/link/file
# Windows
dir /a /s
可能原因:
解决步骤:
bash复制# Linux/macOS
ls -l /path/to/link
# Windows
dir /a /l
code复制models/*.safetensors
models/*.ckpt
高级用户可以使用Git子模块在团队间共享模型路径配置:
bash复制git init models-config
bash复制git submodule add /network/share/models models
假设你有:
不共享时总占用:
code复制(5×4) + (3×0.3) + (10×0.15) = 20 + 0.9 + 1.5 = 22.4GB
共享后总占用:
code复制(5×4) + (3×0.3) + (10×0.15) = 20GB
(VAE和LoRA通常不需要共享)
实际节省:2.4GB(约10.7%)
bash复制# Linux/macOS
find ~ -name "*.safetensors" -exec ls -l {} + | sort -k5 -n
对于高级用户,可以考虑搭建模型服务器:
实现自动化的模型缓存策略:
模型许可证:
企业环境:
版权合规:
根据Stable Diffusion和ComfyUI社区的经验,推荐以下做法:
目录结构标准化:
code复制~/ai-models/
├── sd/
│ ├── stable-diffusion/
│ ├── vae/
│ └── lora/
└── comfy/
├── checkpoints -> ../sd/stable-diffusion
├── vae -> ../sd/vae
└── lora -> ../sd/lora
文档记录:
定期维护: