初始化:换发型/换发色/训练发型服务
包含: - hair_service_sd: 主服务(换发型/换发色/生发,端口8801) - photo_service: LoRA调度+训练(端口32678) - hair_grow_service: 调试测试页(端口8888,含4个测试页) - 批量训练脚本(batch_train_hairstyles.py) - 发际线mask自动识别(hairline_mask.py,4种方案) - 手绘mask换发型(hair_swap_manual.py) - 文档:README.md + LARGE_FILES.md + docs/ 大文件(模型权重200G、训练数据123G)已排除,见 LARGE_FILES.md OSS/COS密钥已脱敏为环境变量,原文件备份在本地
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
#!/bin/bash
|
||||
# 路径适配脚本:修正所有硬编码路径 + conda环境修复 + 端口适配
|
||||
# 在数据同步完成后执行
|
||||
|
||||
set -u
|
||||
BASE="/home/xsl/change_hair"
|
||||
PROJ="$BASE/project"
|
||||
LOG="$PROJ/logs/adapt.log"
|
||||
mkdir -p "$PROJ/logs"
|
||||
echo "路径适配开始: $(date '+%Y-%m-%d %H:%M:%S')" | tee "$LOG"
|
||||
|
||||
# ============================================================
|
||||
# 第一部分:conda 环境硬编码路径修复
|
||||
# ============================================================
|
||||
echo "=== [1/4] 修复 conda 环境 shebang/路径前缀 ===" | tee -a "$LOG"
|
||||
for ENV in py310 my_hair sdwebui; do
|
||||
ENVDIR="/home/xsl/miniconda3/envs/$ENV"
|
||||
if [ -d "$ENVDIR" ]; then
|
||||
# 替换所有文本文件里的旧前缀为新前缀
|
||||
# 旧前缀有两种:/home/szlc/miniconda3 和 /usr/local/miniconda3
|
||||
grep -rl '/home/szlc/miniconda3\|/usr/local/miniconda3' "$ENVDIR" 2>/dev/null | while read -r f; do
|
||||
sed -i 's|/home/szlc/miniconda3|/home/xsl/miniconda3|g; s|/usr/local/miniconda3|/home/xsl/miniconda3|g' "$f"
|
||||
done
|
||||
echo " [$ENV] 修复完成" | tee -a "$LOG"
|
||||
else
|
||||
echo " [$ENV] 目录不存在,跳过" | tee -a "$LOG"
|
||||
fi
|
||||
done
|
||||
|
||||
# ============================================================
|
||||
# 第二部分:hair_service_sd 配置和代码路径适配
|
||||
# ============================================================
|
||||
echo "=== [2/4] 适配 hair_service_sd 路径 ===" | tee -a "$LOG"
|
||||
HS="$PROJ/hair_service_sd"
|
||||
|
||||
# 安全替换函数:只处理 .py / .ini / .conf 文件,跳过权重/图片/二进制
|
||||
adapt_hair_paths() {
|
||||
local f="$1"
|
||||
[ -f "$f" ] || return 0
|
||||
case "$f" in
|
||||
*.py|*.ini|*.conf|*.sh|*.json|*.yaml|*.yml|*.txt) ;;
|
||||
*) return 0 ;;
|
||||
esac
|
||||
sed -i \
|
||||
-e 's|/home/szlc/project|/home/xsl/change_hair/project|g' \
|
||||
-e 's|/data/train_material|/home/xsl/change_hair/data/train_material|g' \
|
||||
-e 's|/home/szlc/miniconda3|/home/xsl/miniconda3|g' \
|
||||
-e 's|/usr/local/miniconda3|/home/xsl/miniconda3|g' \
|
||||
"$f"
|
||||
}
|
||||
|
||||
# 处理 hair_service_sd 顶层文件和 common/config 子目录
|
||||
for f in "$HS"/*.py "$HS"/*.ini "$HS"/*.sh "$HS"/*.conf "$HS"/common/*.py "$HS"/config/*.ini "$HS"/config/*.py "$HS"/core/*.py "$HS"/utils/*.py; do
|
||||
adapt_hair_paths "$f"
|
||||
done
|
||||
echo " hair_service_sd 配置/代码路径已适配" | tee -a "$LOG"
|
||||
|
||||
# ============================================================
|
||||
# 第三部分:photo_service 路径适配
|
||||
# 注意:photo_service 的 chinatszrn/kohya 路径属于 Docker 训练链路,
|
||||
# 本机不配 Docker,这些路径保留不动(不影响换发色/换发型)
|
||||
# 但基础路径和 callback_url 要适配
|
||||
# ============================================================
|
||||
echo "=== [3/4] 适配 photo_service 路径 ===" | tee -a "$LOG"
|
||||
PS="$PROJ/photo_service"
|
||||
for f in "$PS"/*.py; do
|
||||
[ -f "$f" ] || continue
|
||||
sed -i \
|
||||
-e 's|/home/szlc/project|/home/xsl/change_hair/project|g' \
|
||||
-e 's|/home/szlc/miniconda3|/home/xsl/miniconda3|g' \
|
||||
"$f"
|
||||
done
|
||||
echo " photo_service 基础路径已适配(kohya/Docker路径保留)" | tee -a "$LOG"
|
||||
|
||||
# ============================================================
|
||||
# 第四部分:onediff webui 路径适配
|
||||
# ============================================================
|
||||
echo "=== [4/4] 适配 onediff webui 路径 ===" | tee -a "$LOG"
|
||||
OD="$PROJ/onediff/stable-diffusion-webui"
|
||||
# webui config.json 里的 onediff compiler_caches 路径
|
||||
if [ -f "$OD/config.json" ]; then
|
||||
sed -i 's|/home/student/Documents/workspace_cxt_tianjing_hair/onediff|/home/xsl/change_hair/project/onediff|g; s|/home/szlc/project/onediff|/home/xsl/change_hair/project/onediff|g' "$OD/config.json"
|
||||
echo " webui config.json 已适配" | tee -a "$LOG"
|
||||
fi
|
||||
# webui 启动脚本
|
||||
for f in "$OD"/webui.sh "$OD"/webui-user.sh "$PROJ"/onediff/onediff/*.sh; do
|
||||
[ -f "$f" ] && sed -i 's|/home/szlc/miniconda3|/home/xsl/miniconda3|g' "$f"
|
||||
done
|
||||
|
||||
# ============================================================
|
||||
# 第五部分:Lora 软链接(photo_service 训练产物输出位置)
|
||||
# 本机用真实目录,不走 /gz-fs 软链
|
||||
# ============================================================
|
||||
echo "=== [5/5] 配置 Lora 目录 ===" | tee -a "$LOG"
|
||||
mkdir -p "$BASE/gz-fs/Lora"
|
||||
# webui 的 models/Lora 已随 onediff 拷贝过来(真实目录),无需软链
|
||||
echo " Lora 目录就绪: $BASE/gz-fs/Lora" | tee -a "$LOG"
|
||||
|
||||
echo "路径适配完成: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG"
|
||||
echo "请检查 $LOG 确认无误" | tee -a "$LOG"
|
||||
Reference in New Issue
Block a user