diff --git a/docs/方案A-上传文件清单.md b/docs/方案A-上传文件清单.md new file mode 100644 index 0000000..69d3fd3 --- /dev/null +++ b/docs/方案A-上传文件清单.md @@ -0,0 +1,302 @@ +# 方案 A:换发型服务本机部署 — 上传文件清单 + +> 适用场景:从原服务器打包上传 conda 环境 + SD WebUI 代码,在本机完成换发型推理部署。 +> +> 本机路径:`/home/ubuntu/change_hair`(GPU:RTX 5090 32G,CUDA 12.8) +> +> 原服务器参考:`szlc@192.168.101.63` +> +> 更新日期:2026-07-09(核实本机已有资源,更新上传清单) + +--- + +## 一、本机已有资源(已到位,无需再传)✅ + +以下资源已确认存在于本机项目中: + +| 本机路径 | 大小 | 说明 | +|---------|------|------| +| `project/hair_service_sd/weights/` | 9.9G | 核心推理权重(28个文件,含 GAN/分割/关键点/人脸等全部模型) | +| `project/onediff/stable-diffusion-webui/models/` | 4.6G | SD 底模 `v1-5-pruned-emaonly.safetensors` + ESRGAN `4x-UltraSharp.pth` + GFPGAN 全套 | +| `project/data/ref_hairstyle/` | 40M | 5 个发型材质(config.json + npy + png + txt) | +| `project/data/hair_template_material/` | 24M | 5 个发型模板(pkl + png + matting) | +| `project/data/upload_train_imgs/` | 2.5M | 5 个发型原图(jpg) | +| `data/train_material/` | 739M | 5 个发型 LoRA 权重(`hairstyle_hd_lora.safetensors`)+ 训练图像 | + +**当前可用发型(5 个):** + +- `chang_bolang`(长波浪) +- `chang_huaban`(长花瓣) +- `chang_tuoyuan`(长椭圆) +- `chang_xinxing`(长心形) +- `chang_zhixian`(长直线) + +> 以上发型可做换发型推理。如需更多发型,见第四节可选上传。 + +**项目代码(已在 git 仓库中,无需上传):** + +- `project/hair_service_sd/`(代码,不含 weights) +- `project/photo_service/` +- `hair_grow_service/` +- 启动脚本、测试脚本等 + +--- + +## 二、必须上传(换发型推理最低配置)🔴 + +以下 4 项需要从原服务器打包上传,**总计约 18–30G**。 + +### 2.1 Conda 环境 × 3 + +从原服务器 `/home/szlc/miniconda3/envs/` 打包,上传到本机 `/home/ubuntu/miniconda3/envs/`。 + +| 环境名 | 原服务器路径 | 本机目标路径 | 用途 | 预估大小 | +|--------|-------------|-------------|------|---------| +| `my_hair` | `/home/szlc/miniconda3/envs/my_hair/` | `/home/ubuntu/miniconda3/envs/my_hair/` | hair_service_sd 主服务(端口 8801) | ~5–8G | +| `sdwebui` | `/home/szlc/miniconda3/envs/sdwebui/` | `/home/ubuntu/miniconda3/envs/sdwebui/` | SD WebUI 推理(端口 57860) | ~8–12G | +| `py310` | `/home/szlc/miniconda3/envs/py310/` | `/home/ubuntu/miniconda3/envs/py310/` | photo_service LoRA 调度(端口 32678) | ~2–4G | + +> ⚠️ **为什么必须上传,不能从公网安装?** 这三个环境包含特定版本的 PyTorch + CUDA 扩展、历史版本的 pip 包、以及编译好的 C++/CUDA 算子,依赖关系复杂。项目中的 `env.yaml` 是旧的 Python 3.7 规格,与实际运行环境(Python 3.10)不一致,无法用于重建。 + +#### 原服务器打包示例 + +```bash +# 在原服务器(szlc@192.168.101.63)执行 +cd /home/szlc/miniconda3/envs +tar czf my_hair.tar.gz my_hair/ +tar czf sdwebui.tar.gz sdwebui/ +tar czf py310.tar.gz py310/ +``` + +#### 本机解压示例 + +```bash +# 在本机执行(上传完成后) +mkdir -p /home/ubuntu/miniconda3/envs +cd /home/ubuntu/miniconda3/envs +tar xzf /path/to/my_hair.tar.gz +tar xzf /path/to/sdwebui.tar.gz +tar xzf /path/to/py310.tar.gz +``` + +--- + +### 2.2 SD WebUI 代码(不含 models) + +从原服务器打包 **webui 程序本体**,**排除 models 目录**(本机已有 4.6G 模型权重)。 + +| 原服务器路径 | 本机目标路径 | 说明 | 预估大小 | +|-------------|-------------|------|---------| +| `/home/szlc/project/onediff/stable-diffusion-webui/`(排除 `models/`) | `/home/ubuntu/change_hair/project/onediff/stable-diffusion-webui/` | webui.py、modules/、extensions/、repositories/ 等 | ~2–5G | + +> ⚠️ 本机当前 `project/onediff/stable-diffusion-webui/` 目录只有 `models/` 子目录(4.6G 模型权重),缺少 `webui.py`、`modules/`、`extensions/` 等所有代码文件。 + +**必须包含的关键文件/目录:** + +``` +stable-diffusion-webui/ +├── webui.py # 主入口(必需) +├── webui.sh # 启动脚本 +├── webui-user.sh # 用户配置 +├── launch.py +├── modules/ # webui 核心模块 +├── extensions/ # 扩展(如有) +├── repositories/ # 依赖仓库(如有) +├── config.json # 配置文件 +├── ui-config.json # UI 配置(如有) +└── style.css / javascript/ # 前端资源 +``` + +**不要上传(本机已有,勿覆盖):** + +``` +models/Stable-diffusion/v1-5-pruned-emaonly.safetensors # 4.0G +models/ESRGAN/4x-UltraSharp.pth # 64M +models/GFPGAN/GFPGANv1.4.pth # 333M +models/GFPGAN/detection_Resnet50_Final.pth # 105M +models/GFPGAN/parsing_parsenet.pth # 82M +``` + +#### 原服务器打包示例(排除 models) + +```bash +# 在原服务器(szlc@192.168.101.63)执行 +cd /home/szlc/project/onediff +tar czf webui_code.tar.gz \ + --exclude='stable-diffusion-webui/models' \ + stable-diffusion-webui/ +``` + +#### 本机解压示例 + +```bash +# 在本机执行(保留已有 models 目录) +cd /home/ubuntu/change_hair/project/onediff +tar xzf /path/to/webui_code.tar.gz +# 解压后确认 models/ 仍在且未被覆盖 +ls -lh stable-diffusion-webui/models/Stable-diffusion/ +``` + +--- + +## 三、上传清单速查表 + +复制以下列表,在原服务器逐项确认后打包: + +``` +# ===== 必须上传(方案 A,共 4 项,约 18–30G)===== + +# 1. Conda 环境(3 个) +/home/szlc/miniconda3/envs/my_hair/ → /home/ubuntu/miniconda3/envs/my_hair/ +/home/szlc/miniconda3/envs/sdwebui/ → /home/ubuntu/miniconda3/envs/sdwebui/ +/home/szlc/miniconda3/envs/py310/ → /home/ubuntu/miniconda3/envs/py310/ + +# 2. SD WebUI 代码(排除 models/) +/home/szlc/project/onediff/stable-diffusion-webui/(排除 models/) + → /home/ubuntu/change_hair/project/onediff/stable-diffusion-webui/ +``` + +--- + +## 四、可选上传(非换发型推理必需)🟡 + +以下功能暂不需要时可跳过,后续按需补传。 + +### 4.1 训练新发型 + +| 原服务器路径 | 本机目标路径 | 预估大小 | +|-------------|-------------|---------| +| `/home/szlc/project/kohya_ss_home/` | `/home/ubuntu/change_hair/project/kohya_ss_home/` | ~13G | +| `/home/szlc/miniconda3/envs/kohya/` | `/home/ubuntu/miniconda3/envs/kohya/` | ~5G | + +### 4.2 换发色功能 + +| 原服务器路径 | 本机目标路径 | +|-------------|-------------| +| `/home/szlc/project/data/ref_haircolor/` | `/home/ubuntu/change_hair/project/data/ref_haircolor/` | +| `/home/szlc/project/data/ref_color/` | `/home/ubuntu/change_hair/project/data/ref_color/` | +| `/home/szlc/project/data/ref_color_imgs/` | `/home/ubuntu/change_hair/project/data/ref_color_imgs/` | +| `/home/szlc/.../weights/classify_3_2499.pth` | `project/hair_service_sd/weights/classify_3_2499.pth` | + +### 4.3 更多发型 + +当前只有 5 个发型。如需更多,从原服务器追加: + +``` +/data/train_material// → data/train_material// +/home/szlc/project/data/ref_hairstyle// → project/data/ref_hairstyle// +/home/szlc/project/data/hair_template_material// → project/data/hair_template_material// +/home/szlc/project/data/upload_train_imgs// → project/data/upload_train_imgs// +``` + +原服务器约有 338 个发型,全量 `train_material` 约 121G。 + +### 4.4 小文件(可选) + +| 文件 | 用途 | 大小 | +|------|------|------| +| `weights/mediapipe/face_landmarker.task` | 发际线检测 | ~3.6M | + +--- + +## 五、上传方式建议 + +### 方式 1:rsync 直传(推荐,支持断点续传) + +```bash +# 从原服务器直传到本机(在本机执行) +rsync -avP --partial \ + szlc@192.168.101.63:/home/szlc/miniconda3/envs/my_hair/ \ + /home/ubuntu/miniconda3/envs/my_hair/ + +rsync -avP --partial \ + szlc@192.168.101.63:/home/szlc/miniconda3/envs/sdwebui/ \ + /home/ubuntu/miniconda3/envs/sdwebui/ + +rsync -avP --partial \ + szlc@192.168.101.63:/home/szlc/miniconda3/envs/py310/ \ + /home/ubuntu/miniconda3/envs/py310/ + +rsync -avP --partial \ + --exclude='models/' \ + szlc@192.168.101.63:/home/szlc/project/onediff/stable-diffusion-webui/ \ + /home/ubuntu/change_hair/project/onediff/stable-diffusion-webui/ +``` + +### 方式 2:先 tar 再上传到 `/home/ubuntu/data` + +若通过网盘中转,先 tar 再上传到 `/home/ubuntu/data/`,上传完成后告知我解压。 + +--- + +## 六、上传完成后的验证 + +上传完成后,在本机执行以下命令确认文件到位: + +```bash +# 1. Conda 环境 +ls /home/ubuntu/miniconda3/envs/my_hair/bin/python +ls /home/ubuntu/miniconda3/envs/sdwebui/bin/python +ls /home/ubuntu/miniconda3/envs/py310/bin/python + +# 2. WebUI 代码 +ls /home/ubuntu/change_hair/project/onediff/stable-diffusion-webui/webui.py + +# 3. 模型未被覆盖 +ls -lh /home/ubuntu/change_hair/project/onediff/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors +``` + +期望结果:4 项均存在,SD 底模约 4.0G。 + +--- + +## 七、上传完成后我会做的事 + +你上传完毕并告知后,我会依次执行: + +1. **路径适配**:运行 `adapt_paths.sh`,将所有硬编码路径从 `/home/xsl/change_hair` 改为 `/home/ubuntu/change_hair`,`/home/xsl/miniconda3` 改为 `/home/ubuntu/miniconda3` +2. **Conda 路径修复**:运行 `fix_conda_paths.py`,修复 3 个环境中二进制文件的 shebang 和内部路径前缀 +3. **安装 Miniconda 基础环境**(如尚未安装):从 `repo.anaconda.com` 下载安装 +4. **启动服务**:`bash start_all.sh start`(依赖顺序:webui → photo_service → hair_service_sd) +5. **接口测试**:用 `test_swaphair.py` 验证换发型功能 + +--- + +## 八、部署后服务端口 + +| 服务 | 端口 | 说明 | +|------|------|------| +| webui | 57860 | SD img2img 推理 | +| photo_service | 32678 | LoRA 加载与调度 | +| hair_service_sd | 8801 | 换发型主接口 | +| hair_grow_service | 8899 | 生发前端(独立 Flask) | + +换发型接口: + +``` +POST http://127.0.0.1:8801/api/swapHair/v1 +``` + +--- + +## 九、常见问题 + +**Q:能否只上传 miniconda3 整包,不传单个 env?** + +可以。上传 `/home/szlc/miniconda3/` 整包到 `/home/ubuntu/miniconda3/` 也行,体积更大(约 20–30G)但更省事。 + +**Q:webui 上传时不小心覆盖了 models 怎么办?** + +重新从 `/home/ubuntu/data/sdwebui/models/` 或原服务器补传 models 目录即可。 + +**Q:本机没有 miniconda 基础安装,只传 envs 够吗?** + +不够。3 个 env 内的 python 依赖 miniconda 基础库(如 `libstdc++`、`libgcc` 等)。我会在上传完成后先安装 miniconda,再修复 env 内部路径。 + +**Q:上传后启动报 xformers 错误?** + +webui 启动参数可能需要去掉 `--xformers`,改用 `--opt-sdp-no-mem-attention`(RTX 5090 支持,我会在路径适配时处理)。 + +**Q:本机磁盘空间是否足够?** + +当前 `/home` 剩余约 30G。3 个 conda 环境约 20–25G,解压后可能吃紧。建议解压一个删一个 tar 包,或考虑清理 `/home/ubuntu/data/`(已有 16G 冗余数据,解压完成后可删除)。