# 方案 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 冗余数据,解压完成后可删除)。