Nunchaku FLUX.1-dev模型版本管理Git LFSHugging Face Model Hub同步你是不是也遇到过这样的烦恼好不容易在本地部署好了最新的Nunchaku FLUX.1-dev模型结果团队里其他人还在用旧版本生成的图片效果天差地别或者你更新了模型结果发现工作流突然报错排查半天才发现是模型文件不匹配今天我就来分享一个解决这些问题的“神器组合”——用Git LFS和Hugging Face Model Hub来管理你的Nunchaku FLUX.1-dev模型版本。这不仅能让你和团队保持模型版本一致还能像管理代码一样管理模型文件再也不用担心“我本地能跑你那里就报错”的尴尬了。1. 为什么需要模型版本管理在深入技术细节之前我们先聊聊为什么这件事这么重要。想象一下这几个场景场景一团队协作的噩梦小王在本地用Nunchaku FLUX.1-dev的INT4版本生成了几张效果不错的电商海报把工作流分享给了设计师小李。小李运行后却发现效果完全不对——颜色偏差、细节丢失。折腾了一下午才发现小王用的是svdq-int4_r32-flux.1-dev.safetensors而小李本地还是老版本的FP16模型。场景二实验复现的困境你上周用某个特定版本的FLUX.1-dev模型特定的LoRA组合生成了一批非常满意的概念设计图。这周想复现同样的效果却怎么调参数都不对。最后发现是模型文件被自动更新了但你又不知道具体更新到了哪个版本。场景三多环境部署的混乱你在开发机上调试好的ComfyUI工作流部署到生产服务器上就各种报错。模型路径、文件权限、依赖版本……每一个环节都可能出问题。这些问题归根结底都是模型版本管理缺失导致的。传统的做法——手动下载、复制、重命名——在个人使用时还能勉强应付一旦涉及团队协作或多环境部署就变成了维护的噩梦。2. Git LFS Hugging Face Model Hub黄金组合那么怎么解决这些问题呢我的答案是用Git LFS管理大文件用Hugging Face Model Hub作为中央仓库。2.1 这个方案能解决什么问题让我先说说这个组合方案的实际价值版本一致性团队所有成员都使用完全相同的模型文件消除“在我机器上能跑”的问题变更追踪像代码一样能看到模型文件的每一次更新记录、谁更新的、为什么更新快速回滚如果新模型有问题一键回退到上一个稳定版本自动化部署CI/CD流水线可以自动拉取指定版本的模型实现自动化测试和部署存储优化Git LFS只存储文件指针实际文件存在Hugging Face不占用Git仓库空间2.2 基础概念快速理解如果你对这两个工具不太熟悉我用大白话解释一下Git LFS大文件存储想象成Git的“外挂”。普通Git不适合存大文件比如几个GB的模型Git LFS帮你把这些大文件存在别的地方Git仓库里只留一个“借条”文件指针。当你需要时它再帮你去把实际文件取回来。Hugging Face Model Hub可以理解为“AI模型的GitHub”。它专门用来存储和分享AI模型支持版本管理、访问控制、社区协作等功能。最关键的是它和Git LFS天然兼容。3. 环境准备与工具安装在开始之前我们需要确保环境准备就绪。这部分和普通的ComfyUI部署有些不同因为我们还要处理版本管理相关的工具。3.1 硬件与软件要求硬件要求NVIDIA显卡支持CUDA这是运行FLUX.1-dev模型的基础显存建议INT4版本至少8GBFP8版本至少12GBFP16版本建议24GB存储空间除了模型文件本身还需要为Git LFS缓存预留空间软件要求Python 3.10这是ComfyUI和Nunchaku插件的要求Git 2.25.0需要支持LFS功能Git LFS扩展这是核心工具huggingface_hub Python库用于与Model Hub交互3.2 安装Git LFSGit LFS不是Git自带的需要单独安装。不同系统的安装方法在Ubuntu/Debian上# 添加Git LFS的官方仓库 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash # 安装Git LFS sudo apt-get install git-lfs # 初始化Git LFS git lfs install在macOS上# 使用Homebrew安装 brew install git-lfs # 初始化 git lfs install在Windows上下载Git LFS安装程序https://git-lfs.github.com/运行安装程序打开Git Bash或命令行执行git lfs install验证安装是否成功git lfs version # 应该显示类似git-lfs/3.5.1 (GitHub; linux amd64; go 1.21.6)3.3 安装Python依赖除了ComfyUI的基础依赖我们还需要huggingface_hub来与Model Hub交互# 在ComfyUI目录下 pip install --upgrade huggingface_hub # 如果你还没有安装ComfyUI先安装基础依赖 git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI pip install -r requirements.txt4. 创建模型版本管理仓库现在我们来创建一个专门用于管理Nunchaku FLUX.1-dev模型的Git仓库。这个仓库会包含模型文件、配置文件、以及使用说明。4.1 初始化Git仓库并配置LFS首先创建一个新的目录作为我们的模型管理仓库# 创建仓库目录 mkdir nunchaku-flux-models cd nunchaku-flux-models # 初始化Git仓库 git init # 初始化Git LFS git lfs install --local # 告诉Git LFS我们要跟踪哪些类型的文件 # 模型文件通常是.safetensors或.ckpt格式 git lfs track *.safetensors git lfs track *.ckpt git lfs track *.pth git lfs track *.bin # 这个命令会创建.gitattributes文件 # 查看一下内容 cat .gitattributes.gitattributes文件应该包含类似这样的内容*.safetensors filterlfs difflfs mergelfs -text *.ckpt filterlfs difflfs mergelfs -text *.pth filterlfs difflfs mergelfs -text *.bin filterlfs difflfs mergelfs -text4.2 创建标准的目录结构一个好的目录结构能让管理变得更简单。我推荐这样的结构# 创建目录结构 mkdir -p models/{unet,loras,text_encoders,vae,controlnet} mkdir -p configs mkdir -p scripts mkdir -p docs # 查看结构 tree -L 3结构说明models/unet/存放FLUX.1-dev主模型models/loras/存放LoRA模型models/text_encoders/存放文本编码器models/vae/存放VAE模型configs/存放配置文件如ComfyUI工作流JSONscripts/存放辅助脚本如下载脚本、验证脚本docs/存放文档如版本说明、使用指南4.3 创建基础配置文件我们需要一些配置文件来记录模型版本信息创建configs/model_versions.yaml# Nunchaku FLUX.1-dev 模型版本配置 # 最后更新: 2024-03-20 flux_dev: base_model: name: Nunchaku FLUX.1-dev version: 1.0.0 release_date: 2024-02-25 quantizations: int4: filename: svdq-int4_r32-flux.1-dev.safetensors size_gb: 8.2 vram_required: 8 compatible_gpus: [All NVIDIA GPUs] fp8: filename: svdq-fp8_r32-flux.1-dev.safetensors size_gb: 16.5 vram_required: 12 compatible_gpus: [All NVIDIA GPUs] fp16: filename: svdq-fp16_r32-flux.1-dev.safetensors size_gb: 33.0 vram_required: 24 compatible_gpus: [RTX 3090/4090/A100等] fp4: filename: svdq-fp4_r32-flux.1-dev.safetensors size_gb: 4.1 vram_required: 6 compatible_gpus: [Blackwell系列GPU] dependencies: text_encoders: - name: CLIP-L filename: clip_l.safetensors source: comfyanonymous/flux_text_encoders - name: T5-XXL filename: t5xxl_fp16.safetensors source: comfyanonymous/flux_text_encoders vae: - name: FLUX.1 VAE filename: ae.safetensors source: black-forest-labs/FLUX.1-schnell loras: - name: FLUX.1-Turbo-Alpha filename: flux.1-turbo-alpha.safetensors recommended: true description: 加速生成减少推理步数 - name: Ghibsky Illustration filename: ghibsky-illustration.safetensors recommended: false description: 吉卜力风格插画 comfyui_workflows: - name: nunchaku-flux.1-dev.json description: 基础文生图工作流支持多LoRA min_steps: 4 recommended_steps: 20 - name: nunchaku-flux.1-dev-qencoder.json description: 使用4-bit T5编码器降低显存占用 min_steps: 4 recommended_steps: 20创建scripts/download_models.py#!/usr/bin/env python3 Nunchaku FLUX.1-dev 模型下载脚本 自动从Hugging Face下载指定版本的模型文件 import os import argparse from pathlib import Path from huggingface_hub import hf_hub_download, snapshot_download import yaml def load_config(config_pathconfigs/model_versions.yaml): 加载模型版本配置 with open(config_path, r, encodingutf-8) as f: return yaml.safe_load(f) def ensure_dir(path): 确保目录存在 Path(path).mkdir(parentsTrue, exist_okTrue) return path def download_model(repo_id, filename, local_dir, revisionNone): 下载单个模型文件 print(f下载 {filename} 从 {repo_id}...) try: # 使用hf_hub_download下载单个文件 local_path hf_hub_download( repo_idrepo_id, filenamefilename, local_dirlocal_dir, revisionrevision, # 可以指定版本号或tag resume_downloadTrue, local_files_onlyFalse ) print(f✓ 下载完成: {local_path}) return local_path except Exception as e: print(f✗ 下载失败: {e}) return None def download_all_models(config, model_typeint4, download_depsTrue): 下载所有需要的模型文件 config_data load_config(config) flux_config config_data[flux_dev] # 创建模型目录 base_dir Path(models) # 下载主模型 model_info flux_config[base_model][quantizations][model_type] model_file model_info[filename] # 这里需要根据实际情况设置repo_id # Nunchaku FLUX.1-dev 模型在Hugging Face的仓库 repo_id nunchaku-tech/nunchaku-flux.1-dev local_path download_model( repo_idrepo_id, filenamemodel_file, local_dirensure_dir(base_dir / unet) ) if not local_path: print(主模型下载失败停止下载依赖) return False if download_deps: # 下载文本编码器 for encoder in flux_config[dependencies][text_encoders]: download_model( repo_idencoder[source], filenameencoder[filename], local_dirensure_dir(base_dir / text_encoders) ) # 下载VAE for vae in flux_config[dependencies][vae]: download_model( repo_idvae[source], filenamevae[filename], local_dirensure_dir(base_dir / vae) ) # 下载推荐的LoRA for lora in flux_config[loras]: if lora.get(recommended, False): # LoRA的repo_id需要根据实际情况设置 lora_repo_id fnunchaku-tech/{lora[name].lower().replace( , -)} download_model( repo_idlora_repo_id, filenamelora[filename], local_dirensure_dir(base_dir / loras) ) print(\n *50) print(下载完成模型文件已保存到以下目录) print(f主模型: models/unet/{model_file}) print(f文本编码器: models/text_encoders/) print(fVAE: models/vae/) if download_deps: print(fLoRA: models/loras/) print(*50) return True if __name__ __main__: parser argparse.ArgumentParser(description下载Nunchaku FLUX.1-dev模型) parser.add_argument(--type, choices[int4, fp8, fp16, fp4], defaultint4, help模型量化类型) parser.add_argument(--config, defaultconfigs/model_versions.yaml, help配置文件路径) parser.add_argument(--skip-deps, actionstore_true, help跳过依赖下载只下载主模型) args parser.parse_args() success download_all_models( configargs.config, model_typeargs.type, download_depsnot args.skip_deps ) exit(0 if success else 1)5. 配置Hugging Face Model Hub同步有了本地仓库后我们需要把它和Hugging Face Model Hub关联起来这样团队其他成员才能访问。5.1 在Hugging Face上创建模型仓库登录Hugging Face网站https://huggingface.co/点击右上角头像 → New Model填写模型信息名称例如your-org/nunchaku-flux-dev-models权限选择Private私有或Public公开License选择合适的许可证其他信息按需填写创建完成后你会看到一个空的模型仓库页面5.2 配置本地仓库与远程同步回到本地仓库添加Hugging Face远程仓库# 在nunchaku-flux-models目录下 # 添加Hugging Face远程仓库 git remote add origin https://huggingface.co/your-org/nunchaku-flux-dev-models # 或者使用SSH方式推荐更安全 git remote add origin githf.co:your-org/nunchaku-flux-dev-models # 查看远程仓库配置 git remote -v5.3 配置Git LFS和Hugging Face的认证为了让Git LFS能正常上传大文件到Hugging Face我们需要配置认证方法一使用Hugging Face Token推荐在Hugging Face网站生成Token点击右上角头像 → Settings → Access Tokens点击New Token选择Write权限复制生成的Token配置Git使用这个Token# 设置全局认证所有Hugging Face仓库 git config --global credential.helper store echo https://huggingface.co/your-org/nunchaku-flux-dev-models ~/.git-credentials # 这里需要输入你的用户名和Token # 用户名你的Hugging Face用户名 # 密码刚才复制的Token方法二使用SSH密钥生成SSH密钥如果还没有ssh-keygen -t ed25519 -C your-emailexample.com将公钥添加到Hugging Face复制~/.ssh/id_ed25519.pub的内容在Hugging Face网站Settings → SSH Keys → Add new SSH key测试SSH连接ssh -T githf.co # 应该看到Welcome to Hugging Face Git!5.4 首次提交和推送现在我们可以把本地配置和脚本提交到仓库了# 添加所有文件到Git git add . # 提交更改 git commit -m 初始提交Nunchaku FLUX.1-dev模型管理仓库配置 # 推送到Hugging Face git push -u origin main # 如果是第一次推送可能需要设置上游分支 # git push --set-upstream origin main注意这时候我们还没有推送模型文件本身。模型文件很大我们需要用Git LFS来管理。6. 管理模型文件的完整工作流现在到了最核心的部分如何用Git LFS实际管理模型文件。我会用一个完整的例子来演示。6.1 场景团队需要统一升级到新版本模型假设Nunchaku发布了FLUX.1-dev的v1.1.0版本我们需要更新团队所有人的模型。步骤1下载新版本模型# 首先确保你在正确的分支上 git checkout main git pull origin main # 运行我们的下载脚本下载新版本模型 python scripts/download_models.py --type int4 --config configs/model_versions.yaml # 假设新版本文件名是svdq-int4_r32-flux.1-dev-v1.1.0.safetensors # 我们需要更新配置文件步骤2更新版本配置文件编辑configs/model_versions.yaml更新版本信息flux_dev: base_model: name: Nunchaku FLUX.1-dev version: 1.1.0 # 更新版本号 release_date: 2024-03-20 # 更新发布日期 quantizations: int4: filename: svdq-int4_r32-flux.1-dev-v1.1.0.safetensors # 更新文件名 size_gb: 8.5 # 更新文件大小 vram_required: 8 compatible_gpus: [All NVIDIA GPUs] changes: # 添加变更说明 - 修复了某些提示词下的颜色偏差问题 - 优化了低显存下的推理性能 - 添加了对新LoRA格式的支持步骤3使用Git LFS跟踪新模型文件# 添加新模型文件到Git LFS跟踪 git lfs track models/unet/svdq-int4_r32-flux.1-dev-v1.1.0.safetensors # 查看.gitattributes文件确认已添加 cat .gitattributes # 添加所有更改到暂存区 git add . # 查看哪些文件被LFS跟踪 git lfs status步骤4提交和推送# 提交更改 git commit -m feat: 升级到FLUX.1-dev v1.1.0 - 更新主模型到v1.1.0版本 - 修复颜色偏差问题 - 优化低显存性能 - 添加新LoRA格式支持 # 推送到Hugging Face git push origin main步骤5创建版本标签重要为了能方便地回滚到特定版本我们应该创建Git标签# 创建带注释的标签 git tag -a v1.1.0 -m Nunchaku FLUX.1-dev version 1.1.0 主要变更 - 修复颜色偏差问题 - 优化低显存性能 - 支持新LoRA格式 # 推送标签到远程 git push origin v1.1.0 # 也可以在Hugging Face网页端创建Release # 这样团队成员可以清楚地看到每个版本的变化6.2 团队其他成员如何获取更新当团队其他成员需要获取最新模型时# 拉取最新更改 git pull origin main # 获取LFS文件模型文件 git lfs pull # 或者使用组合命令 git pull origin main git lfs pull如果只需要特定版本的模型# 查看可用标签 git tag -l # 切换到特定版本 git checkout v1.1.0 # 获取该版本的LFS文件 git lfs pull6.3 自动化同步脚本为了让团队使用更简单我们可以创建一个自动化脚本创建scripts/sync_models.sh#!/bin/bash # Nunchaku FLUX.1-dev 模型同步脚本 # 用法: ./sync_models.sh [版本标签] set -e # 遇到错误立即退出 VERSION${1:-main} REPO_URLhttps://huggingface.co/your-org/nunchaku-flux-dev-models LOCAL_DIR./models echo 同步 Nunchaku FLUX.1-dev 模型 (版本: $VERSION) echo # 检查Git LFS是否安装 if ! command -v git-lfs /dev/null; then echo 错误: Git LFS未安装 echo 请先安装Git LFS: https://git-lfs.com/ exit 1 fi # 检查是否在Git仓库中 if [ ! -d .git ]; then echo 当前目录不是Git仓库正在初始化... git init git remote add origin $REPO_URL 2/dev/null || true fi # 获取指定版本 echo 获取版本: $VERSION if [ $VERSION main ]; then git fetch origin git checkout main git pull origin main else git fetch origin --tags git checkout tags/$VERSION fi # 获取LFS文件 echo 下载模型文件... git lfs pull # 验证文件完整性 echo 验证文件完整性... python scripts/verify_models.py --config configs/model_versions.yaml echo 同步完成 echo 模型文件位置: $LOCAL_DIR echo 当前版本: $(git describe --tags 2/dev/null || echo main)创建scripts/verify_models.py#!/usr/bin/env python3 验证模型文件完整性和版本一致性 import os import hashlib import yaml from pathlib import Path def calculate_file_hash(filepath, algorithmsha256): 计算文件哈希值 hash_func hashlib.new(algorithm) with open(filepath, rb) as f: for chunk in iter(lambda: f.read(4096), b): hash_func.update(chunk) return hash_func.hexdigest() def verify_model_files(config_pathconfigs/model_versions.yaml): 验证所有模型文件是否存在且完整 with open(config_path, r, encodingutf-8) as f: config yaml.safe_load(f) flux_config config[flux_dev] all_good True print(验证模型文件...) print(*60) # 检查主模型 model_type int4 # 默认检查INT4版本可以根据需要修改 model_info flux_config[base_model][quantizations][model_type] model_file Path(models/unet) / model_info[filename] if model_file.exists(): file_size model_file.stat().st_size / (1024**3) # GB expected_size model_info[size_gb] print(f✓ 主模型: {model_file.name}) print(f 路径: {model_file}) print(f 大小: {file_size:.1f}GB (预期: {expected_size}GB)) if abs(file_size - expected_size) 0.1: # 允许0.1GB误差 print(f ⚠ 警告: 文件大小与预期不符) else: print(f✗ 缺失: 主模型 {model_file.name}) all_good False print(-*60) # 检查文本编码器 print(检查文本编码器...) for encoder in flux_config[dependencies][text_encoders]: encoder_file Path(models/text_encoders) / encoder[filename] if encoder_file.exists(): print(f ✓ {encoder[name]}: {encoder_file.name}) else: print(f ✗ 缺失: {encoder[name]} - {encoder_file.name}) all_good False # 检查VAE print(检查VAE...) for vae in flux_config[dependencies][vae]: vae_file Path(models/vae) / vae[filename] if vae_file.exists(): print(f ✓ {vae[name]}: {vae_file.name}) else: print(f ✗ 缺失: {vae[name]} - {vae_file.name}) all_good False print(*60) if all_good: print(✅ 所有模型文件验证通过) return True else: print(❌ 模型文件不完整请重新下载) return False if __name__ __main__: import argparse parser argparse.ArgumentParser(description验证模型文件) parser.add_argument(--config, defaultconfigs/model_versions.yaml, help配置文件路径) args parser.parse_args() success verify_model_files(args.config) exit(0 if success else 1)7. 在ComfyUI中集成版本管理现在我们已经有了版本管理的仓库接下来看看怎么在ComfyUI中实际使用。7.1 创建符号链接管理模型文件我们不建议直接把模型文件复制到ComfyUI的目录而是使用符号链接软链接这样一份模型文件可以被多个ComfyUI实例共享创建scripts/link_to_comfyui.py#!/usr/bin/env python3 创建从模型仓库到ComfyUI目录的符号链接 import os import sys from pathlib import Path def create_symlinks(comfyui_path, model_repo_path.): 创建符号链接 comfyui_path Path(comfyui_path).resolve() model_repo_path Path(model_repo_path).resolve() # 定义链接映射 link_mappings { unet: unet, loras: loras, text_encoders: text_encoders, vae: vae, controlnet: controlnet } print(fComfyUI路径: {comfyui_path}) print(f模型仓库路径: {model_repo_path}) print(*60) created_links [] skipped_links [] for src_name, dst_name in link_mappings.items(): src_dir model_repo_path / models / src_name dst_dir comfyui_path / models / dst_name # 确保目标目录存在 dst_dir.mkdir(parentsTrue, exist_okTrue) if src_dir.exists(): # 遍历源目录中的所有模型文件 for model_file in src_dir.glob(*): if model_file.is_file(): dst_file dst_dir / model_file.name # 如果目标文件已存在检查是否是符号链接 if dst_file.exists(): if dst_file.is_symlink(): current_target dst_file.resolve() if current_target model_file.resolve(): skipped_links.append(f{dst_name}/{model_file.name} (已链接)) continue else: # 删除旧的符号链接 dst_file.unlink() print(f移除旧的符号链接: {dst_file}) # 创建符号链接 try: dst_file.symlink_to(model_file) created_links.append(f{dst_name}/{model_file.name}) print(f✓ 创建链接: {dst_name}/{model_file.name}) except Exception as e: print(f✗ 创建链接失败 {dst_name}/{model_file.name}: {e}) else: print(f⚠ 源目录不存在: {src_dir}) print(*60) print(f创建了 {len(created_links)} 个新链接) print(f跳过了 {len(skipped_links)} 个已存在的链接) if created_links: print(\n新建的链接:) for link in created_links: print(f - {link}) return len(created_links) 0 if __name__ __main__: if len(sys.argv) ! 2: print(用法: python link_to_comfyui.py comfyui_path) print(示例: python link_to_comfyui.py /path/to/ComfyUI) sys.exit(1) comfyui_path sys.argv[1] if not Path(comfyui_path).exists(): print(f错误: ComfyUI路径不存在: {comfyui_path}) sys.exit(1) create_symlinks(comfyui_path)使用这个脚本# 在模型仓库目录下运行 python scripts/link_to_comfyui.py /path/to/your/ComfyUI # 例如 python scripts/link_to_comfyui.py ~/ComfyUI7.2 版本特定的工作流配置不同版本的模型可能需要不同的工作流设置。我们可以创建版本特定的工作流配置创建configs/workflow_versions.yaml# ComfyUI工作流版本配置 # 匹配不同版本的FLUX.1-dev模型 workflows: flux_dev_v1_0_0: compatible_models: [svdq-int4_r32-flux.1-dev.safetensors] workflow_file: nunchaku-flux.1-dev.json settings: steps: 20 cfg: 3.5 sampler: euler scheduler: simple notes: 初始版本需要20步以上推理步数 flux_dev_v1_1_0: compatible_models: [svdq-int4_r32-flux.1-dev-v1.1.0.safetensors] workflow_file: nunchaku-flux.1-dev-v1.1.0.json settings: steps: 16 # 新版本优化了可以减少步数 cfg: 3.5 sampler: euler scheduler: simple notes: 优化版本16步即可获得良好效果 flux_dev_with_turbo: compatible_models: - svdq-int4_r32-flux.1-dev.safetensors - svdq-int4_r32-flux.1-dev-v1.1.0.safetensors workflow_file: nunchaku-flux.1-dev-turbo.json settings: steps: 4 # 使用Turbo LoRA只需4步 cfg: 1.5 sampler: euler scheduler: simple requirements: loras: - flux.1-turbo-alpha.safetensors weight: 0.8 notes: 使用Turbo LoRA加速生成7.3 自动化部署脚本最后我们可以创建一个完整的部署脚本一键完成所有设置创建scripts/deploy_comfyui.sh#!/bin/bash # ComfyUI Nunchaku FLUX.1-dev 一键部署脚本 set -e echo 开始部署 ComfyUI 与 Nunchaku FLUX.1-dev... echo # 配置变量 COMFYUI_DIR${1:-$HOME/ComfyUI} MODEL_REPO_DIR$(cd $(dirname ${BASH_SOURCE[0]})/.. pwd) MODEL_VERSION${2:-v1.1.0} MODEL_TYPE${3:-int4} echo ComfyUI目录: $COMFYUI_DIR echo 模型仓库目录: $MODEL_REPO_DIR echo 模型版本: $MODEL_VERSION echo 模型类型: $MODEL_TYPE # 步骤1: 检查ComfyUI if [ ! -d $COMFYUI_DIR ]; then echo ComfyUI未安装正在克隆... git clone https://github.com/comfyanonymous/ComfyUI.git $COMFYUI_DIR cd $COMFYUI_DIR pip install -r requirements.txt else echo ✓ ComfyUI已安装 fi # 步骤2: 安装Nunchaku插件 cd $COMFYUI_DIR if [ ! -d custom_nodes/nunchaku_nodes ]; then echo 安装Nunchaku插件... cd custom_nodes git clone https://github.com/mit-han-lab/ComfyUI-nunchaku nunchaku_nodes cd .. else echo ✓ Nunchaku插件已安装 fi # 步骤3: 同步模型文件 cd $MODEL_REPO_DIR echo 同步模型文件 (版本: $MODEL_VERSION, 类型: $MODEL_TYPE)... # 切换到指定版本 if [ $MODEL_VERSION ! main ]; then git fetch origin --tags git checkout tags/$MODEL_VERSION 2/dev/null || git checkout $MODEL_VERSION else git checkout main git pull origin main fi # 下载模型文件 echo 下载模型文件... python scripts/download_models.py --type $MODEL_TYPE --config configs/model_versions.yaml # 验证文件 echo 验证模型文件... python scripts/verify_models.py --config configs/model_versions.yaml # 步骤4: 创建符号链接 echo 创建符号链接到ComfyUI... python scripts/link_to_comfyui.py $COMFYUI_DIR # 步骤5: 复制工作流文件 echo 复制工作流文件... mkdir -p $COMFYUI_DIR/user/default/example_workflows cp $MODEL_REPO_DIR/configs/*.json $COMFYUI_DIR/user/default/example_workflows/ 2/dev/null || true echo echo ✅ 部署完成 echo echo 启动ComfyUI: echo cd $COMFYUI_DIR echo python main.py echo echo 然后在浏览器中打开: http://localhost:8188 echo echo 使用的工作流: echo nunchaku-flux.1-dev.json (基础工作流) echo nunchaku-flux.1-dev-turbo.json (加速工作流) echo echo 模型版本: $MODEL_VERSION ($MODEL_TYPE)8. 总结通过Git LFS和Hugging Face Model Hub的组合我们为Nunchaku FLUX.1-dev模型建立了一套完整的版本管理系统。这套方案解决了团队协作中的几个核心问题解决了什么问题版本一致性团队所有成员使用完全相同的模型文件消除环境差异变更可追溯每次模型更新都有完整的提交记录和说明快速回滚通过Git标签可以随时切换到任意历史版本自动化部署一键脚本完成从模型下载到ComfyUI配置的全过程存储优化大模型文件不占用Git仓库空间通过LFS管理实际工作流简化对于日常使用团队只需要记住几个简单命令# 获取最新模型 git pull git lfs pull # 切换到特定版本 git checkout v1.1.0 git lfs pull # 一键部署到ComfyUI ./scripts/deploy_comfyui.sh ~/ComfyUI v1.1.0 int4扩展可能性这套方案还可以进一步扩展添加CI/CD流水线自动测试新模型版本集成模型性能监控记录不同版本的生成质量建立模型卡Model Card详细记录每个版本的特性和适用场景与Docker结合创建包含特定模型版本的可移植环境模型版本管理可能看起来有些复杂但一旦建立起来它能节省大量的调试和协作时间。特别是在团队环境中当每个人都在使用相同的模型版本时问题排查会变得简单很多——你可以确定问题不是出在模型文件差异上。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。