包含: - hair_service_sd: 换发型/换发色算法服务 (端口 8801) - photo_service: LoRA 训练调度服务 (端口 32678) - stable-diffusion-webui: SD WebUI 推理服务 (端口 57860) - kohya_ss_home: 训练环境代码 - meidaojia: 监控测试脚本 - setup.sh: 一键部署脚本 (conda环境恢复 + 配置生成 + 完整性检查) - start_all_services.sh: 启动3个服务 - configure.ini.template: 路径模板化 (BASE_DIR自动推导) - conda_envs/py310.yml: py310 环境定义 大文件 (weights/, models/, data/, conda_envs/*.tar.gz 等) 通过 .gitignore 排除, 由网盘单独上传。
81 lines
3.1 KiB
Bash
Executable File
81 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
||
set -e
|
||
|
||
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
CONDA_BASE="${CONDA_BASE:-/home/szlc/miniconda3}"
|
||
|
||
# 初始化 conda(脚本中需要 source 才能用 conda activate)
|
||
if [ -f "$CONDA_BASE/etc/profile.d/conda.sh" ]; then
|
||
source "$CONDA_BASE/etc/profile.d/conda.sh"
|
||
else
|
||
echo "WARNING: 未找到 conda.sh,请确认 CONDA_BASE=$CONDA_BASE 正确"
|
||
fi
|
||
|
||
echo "=== 换发型项目部署脚本 ==="
|
||
echo "BASE_DIR: $BASE_DIR"
|
||
|
||
# 1. 检查前提条件
|
||
echo "[1/7] 检查前提条件..."
|
||
command -v git >/dev/null || { echo "ERROR: git 未安装"; exit 1; }
|
||
command -v conda >/dev/null || { echo "ERROR: conda 未安装"; exit 1; }
|
||
nvidia-smi >/dev/null 2>&1 || { echo "ERROR: NVIDIA 驱动未安装"; exit 1; }
|
||
|
||
# 2. 生成 configure.ini
|
||
echo "[2/7] 生成 configure.ini..."
|
||
sed "s|__BASE_DIR__|$BASE_DIR|g" "$BASE_DIR/hair_service_sd/config/configure.ini.template" > "$BASE_DIR/hair_service_sd/config/configure.ini"
|
||
echo " configure.ini 已生成"
|
||
|
||
# 3. 恢复 conda 环境(conda-pack)
|
||
echo "[3/7] 恢复 conda 环境..."
|
||
for env_name in my_hair sdwebui; do
|
||
if [ -f "$BASE_DIR/conda_envs/${env_name}.tar.gz" ]; then
|
||
echo " 恢复 $env_name ..."
|
||
rm -rf "$CONDA_BASE/envs/$env_name"
|
||
mkdir -p "$CONDA_BASE/envs/$env_name"
|
||
tar -xzf "$BASE_DIR/conda_envs/${env_name}.tar.gz" -C "$CONDA_BASE/envs/$env_name"
|
||
conda activate "$env_name"
|
||
conda-unpack # 修复打包后的硬编码路径
|
||
conda deactivate
|
||
echo " ✓ $env_name 已恢复"
|
||
else
|
||
echo " ✗ conda_envs/${env_name}.tar.gz 不存在,请从网盘下载"
|
||
fi
|
||
done
|
||
|
||
# 4. 创建 py310 环境(从 yml)
|
||
echo "[4/7] 创建 py310 环境..."
|
||
if [ -f "$BASE_DIR/conda_envs/py310.yml" ]; then
|
||
conda env create -f "$BASE_DIR/conda_envs/py310.yml" -n py310 2>/dev/null || echo " py310 环境已存在,跳过"
|
||
echo " ✓ py310 已就绪"
|
||
else
|
||
echo " ✗ conda_envs/py310.yml 不存在"
|
||
fi
|
||
|
||
# 5. 检查模型/数据目录
|
||
echo "[5/7] 检查模型和数据目录..."
|
||
for dir in hair_service_sd/weights stable-diffusion-webui/models/Lora stable-diffusion-webui/models/Stable-diffusion stable-diffusion-webui/extensions/sd-webui-controlnet stable-diffusion-webui/repositories kohya_ss_home/.local kohya_ss_home/kohya_ss data/ref_hairstyle; do
|
||
if [ -d "$BASE_DIR/$dir" ]; then
|
||
echo " ✓ $dir"
|
||
else
|
||
echo " ✗ $dir 缺失,请从网盘下载"
|
||
fi
|
||
done
|
||
|
||
# 6. 检查训练底模
|
||
echo "[6/7] 检查 majicmixRealistic_v7..."
|
||
if [ -f "$BASE_DIR/stable-diffusion-webui/models/Stable-diffusion/majicmixRealistic_v7.safetensors" ]; then
|
||
echo " ✓ majicmixRealistic_v7.safetensors 已存在"
|
||
else
|
||
echo " ✗ majicmixRealistic_v7.safetensors 缺失,请从网上下载并放置到 stable-diffusion-webui/models/Stable-diffusion/"
|
||
fi
|
||
|
||
# 7. 创建运行时目录
|
||
echo "[7/7] 创建运行时目录..."
|
||
mkdir -p "$BASE_DIR/logs"
|
||
mkdir -p "$BASE_DIR/data/tmp" "$BASE_DIR/data/res_dir" "$BASE_DIR/data/userImage" "$BASE_DIR/data/user_info"
|
||
mkdir -p "$BASE_DIR/kohya_ss_home/train_material"
|
||
|
||
echo ""
|
||
echo "=== 部署完成 ==="
|
||
echo "启动服务: ./start_all_services.sh"
|