# ViGent 手动部署指南

## 服务器信息

| 配置 | 规格 |
|------|------|
| 服务器 | Dell PowerEdge R730 |
| CPU | 2× Intel Xeon E5-2680 v4 (56 线程) |
| 内存 | 192GB DDR4 |
| GPU 0 | NVIDIA RTX 3090 24GB (MuseTalk + CosyVoice) |
| GPU 1 | NVIDIA RTX 3090 24GB (LatentSync) |
| 部署路径 | `/home/rongye/ProgramFiles/ViGent2` |

---

## 步骤 1: 环境检查

```bash
# 检查 GPU
nvidia-smi

# 检查 Python 版本 (需要 3.10+)
python3 --version

# 检查 Node.js 版本 (需要 18+)
node --version

# 检查 FFmpeg
ffmpeg -version

# 检查 Chrome (视频号发布)
google-chrome --version

# 检查 Xvfb
xvfb-run --help

# 检查 pm2 (用于服务管理)
pm2 --version

# 检查 Redis (任务状态存储，推荐)
redis-server --version
```

如果缺少依赖:
```bash
sudo apt update
sudo apt install ffmpeg

# 安装 Xvfb (视频号发布)
sudo apt install xvfb

# 安装 pm2
npm install -g pm2

# 安装 Chrome (视频号发布)
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/google-linux-signing-keyring.gpg
printf "deb [arch=amd64 signed-by=/usr/share/keyrings/google-linux-signing-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main\n" | sudo tee /etc/apt/sources.list.d/google-chrome.list > /dev/null
sudo apt update
sudo apt install -y google-chrome-stable
```

---

## 步骤 2: 创建目录结构

```bash
mkdir -p /home/rongye/ProgramFiles/ViGent2
cd /home/rongye/ProgramFiles/ViGent2
```

将项目文件复制到该目录。

---

## 步骤 3: 部署 AI 模型

### 3a. LatentSync 1.6 (短视频唇形同步, GPU1)

> ⚠️ **重要**：LatentSync 需要独立的 Conda 环境和 **~18GB VRAM**。请**不要**直接安装在后端环境中。

请参考详细的独立部署指南：
**[LatentSync 部署指南](../models/LatentSync/DEPLOY.md)**

该指南包含以下关键步骤，请务必严格按照文档操作：
1. 创建独立的 `latentsync` Conda 环境
2. 安装 PyTorch 2.5.1 和相关依赖
3. 下载模型权重 (HuggingFace CLI)
4. 复制核心推理代码
5. 验证推理脚本

**验证 LatentSync 部署**:
```bash
cd /home/rongye/ProgramFiles/ViGent2/models/LatentSync
conda activate latentsync
python -m scripts.server  # 测试能否启动，Ctrl+C 退出
```

### 3b. MuseTalk 1.5 (长视频唇形同步, GPU0)

> MuseTalk 是单步潜空间修复模型（非扩散模型），推理速度接近实时，适合达到路由阈值的长视频（本仓库当前 `.env` 示例为 >=100s）。与 CosyVoice 共享 GPU0，fp16 推理约需 4-8GB 显存。合成阶段已改为 FFmpeg rawvideo 管道直编码（`libx264` + 可配 CRF/preset）并保留 numpy blending，减少中间有损文件。

请参考详细的独立部署指南：
**[MuseTalk 部署指南](MUSETALK_DEPLOY.md)**

简要步骤：
1. 创建独立的 `musetalk` Conda 环境 (Python 3.10 + PyTorch 2.0.1 + CUDA 11.8)
2. 安装 mmcv/mmdet/mmpose 等依赖
3. 下载模型权重 (`download_weights.sh`)
4. 创建必要的软链接 (`musetalk/config.json`, `musetalk/musetalkV15`)

**验证 MuseTalk 部署**:
```bash
cd /home/rongye/ProgramFiles/ViGent2/models/MuseTalk
/home/rongye/ProgramFiles/miniconda3/envs/musetalk/bin/python scripts/server.py
# 另一个终端: curl http://localhost:8011/health
```

---

## 步骤 4: 安装后端依赖

```bash
cd /home/rongye/ProgramFiles/ViGent2/backend

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装 PyTorch (CUDA 12.1)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# 安装 Python 依赖
pip install -r requirements.txt

# 安装 Playwright 浏览器（社交发布需要）
playwright install chromium
```

> 提示：视频号发布建议使用系统 Chrome + xvfb-run（避免 headless 解码失败）。
> 抖音发布同样建议 headful 模式 (`DOUYIN_HEADLESS_MODE=headful`)。
> 四平台发布专项实现说明请见 `Docs/PUBLISH_DEPLOY.md`。

### 扫码登录注意事项

- **Cookie 按用户隔离**：每个用户的 Cookie 存储在 `backend/user_data/{uuid}/cookies/` 目录下，多用户并发登录互不干扰。
- **抖音 QR 登录关键教训**：
  - 扫码后绝对**不能重新加载 QR 页面**，否则会销毁会话 token
  - 使用**新标签页**检测登录完成状态（检查 URL 包含 `creator-micro` + session cookies 存在）
  - 抖音可能弹出**刷脸验证**，后端会自动提取验证二维码返回给前端展示
- **小红书 QR 登录关键点**：
  - 创作平台默认可能是短信登录视图，需先切换到扫码登录再抓取二维码
  - 扫码后可能跳转 `creator.xiaohongshu.com/new/home`，不一定命中旧 `publish` 成功指示 URL
- **微信视频号发布**：标题、描述、标签统一写入"视频描述"字段

---

### 可选：AI 标题/标签生成

> ✅ 如需启用“AI 标题/标签生成”功能，请确保后端可访问外网 API。

- 需要可访问 `https://open.bigmodel.cn`
- API Key 配置在 `backend/app/services/glm_service.py`（建议替换为自己的密钥）

---

## 步骤 5: 部署用户认证系统 (Supabase + Auth)

> 🔐 **包含**: 登录/注册、Supabase 数据库配置、JWT 认证、管理员后台

请参考独立的认证系统部署指南：
**[用户认证系统部署指南](AUTH_DEPLOY.md)**

---

## 步骤 6: 配置 Supabase RLS 策略 (重要)
 
 > ⚠️ **注意**：为了支持前端直传文件，必须配置存储桶的行级安全策略 (RLS)。
 
 1. 确保 Supabase 容器正在运行 (`docker ps`).
 2. 将项目根目录下的 `supabase_rls.sql` (如果有) 或以下 SQL 内容在数据库中执行。
 3. **执行命令**:
    ```bash
    # 进入后端目录
    cd /home/rongye/ProgramFiles/ViGent2/backend
    
    # 执行 SQL (允许 anon 角色上传/读取 materials 桶)
    docker exec -i supabase-db psql -U postgres <<EOF
    INSERT INTO storage.buckets (id, name, public) VALUES ('materials', 'materials', true) ON CONFLICT (id) DO NOTHING;
    INSERT INTO storage.buckets (id, name, public) VALUES ('outputs', 'outputs', true) ON CONFLICT (id) DO NOTHING;
    CREATE POLICY "Allow public uploads" ON storage.objects FOR INSERT TO anon WITH CHECK (bucket_id = 'materials');
    CREATE POLICY "Allow public read" ON storage.objects FOR SELECT TO anon USING (bucket_id = 'materials' OR bucket_id = 'outputs');
    EOF
    ```

> **注意**：后端启动时会自动创建额外的存储桶（`ref-audios`、`generated-audios`），无需手动创建。
 
 ---
 
 ## 步骤 7: 配置环境变量


```bash
cd /home/rongye/ProgramFiles/ViGent2/backend
```

> 💡 **说明**：当前仓库直接使用 `backend/.env`。请按你的环境替换敏感值并确认以下参数。  
> 如需自定义，可编辑 `.env` 修改以下参数：

| 配置项 | 当前示例值 | 说明 |
|--------|------------|------|
| `SUPABASE_URL` | `http://localhost:8008` | Supabase API 内部地址 |
| `SUPABASE_PUBLIC_URL` | `https://api.hbyrkj.top` | Supabase API 公网地址 (前端访问) |
| `LATENTSYNC_GPU_ID` | 1 | GPU 选择 (0 或 1) |
| `LATENTSYNC_USE_SERVER` | true | 设为 true 以启用常驻服务加速 |
| `LATENTSYNC_INFERENCE_STEPS` | 30 | 推理步数 (16-50) |
| `LATENTSYNC_GUIDANCE_SCALE` | 1.9 | 引导系数 (1.0-3.0) |
| `LATENTSYNC_ENABLE_DEEPCACHE` | true | DeepCache 推理加速 |
| `LATENTSYNC_SEED` | 1247 | 固定随机种子（可复现） |
| `DEBUG` | true | 生产环境改为 false |
| `REDIS_URL` | `redis://localhost:6379/0` | 任务状态存储（不可用时回退内存） |
| `WEIXIN_HEADLESS_MODE` | headless-new | 视频号 Playwright 模式 (headful/headless-new) |
| `WEIXIN_CHROME_PATH` | `/usr/bin/google-chrome` | 系统 Chrome 路径 |
| `WEIXIN_BROWSER_CHANNEL` |  | Chromium 通道 (可选) |
| `WEIXIN_USER_AGENT` | Chrome 120 UA | 视频号浏览器指纹 UA |
| `WEIXIN_LOCALE` | zh-CN | 视频号语言环境 |
| `WEIXIN_TIMEZONE_ID` | Asia/Shanghai | 视频号时区 |
| `WEIXIN_FORCE_SWIFTSHADER` | true | 强制软件 WebGL，避免 context lost |
| `WEIXIN_TRANSCODE_MODE` | reencode | 上传前转码 (reencode/faststart/off) |
| `DOUYIN_HEADLESS_MODE` | headless-new | 抖音 Playwright 模式 (headful/headless-new) |
| `DOUYIN_CHROME_PATH` | `/usr/bin/google-chrome` | 抖音 Chrome 路径 |
| `DOUYIN_BROWSER_CHANNEL` |  | 抖音 Chromium 通道 (可选) |
| `DOUYIN_USER_AGENT` | Chrome/144 UA | 抖音浏览器指纹 UA |
| `DOUYIN_LOCALE` | zh-CN | 抖音语言环境 |
| `DOUYIN_TIMEZONE_ID` | Asia/Shanghai | 抖音时区 |
| `DOUYIN_FORCE_SWIFTSHADER` | true | 强制软件 WebGL |
| `XIAOHONGSHU_HEADLESS_MODE` | headless-new | 小红书 Playwright 模式 (headful/headless-new) |
| `XIAOHONGSHU_CHROME_PATH` | `/usr/bin/google-chrome` | 小红书 Chrome 路径 |
| `XIAOHONGSHU_BROWSER_CHANNEL` |  | 小红书 Chromium 通道 (可选) |
| `XIAOHONGSHU_USER_AGENT` | Chrome/144 UA | 小红书浏览器指纹 UA |
| `XIAOHONGSHU_LOCALE` | zh-CN | 小红书语言环境 |
| `XIAOHONGSHU_TIMEZONE_ID` | Asia/Shanghai | 小红书时区 |
| `XIAOHONGSHU_FORCE_SWIFTSHADER` | true | 强制软件 WebGL |
| `DOUYIN_DEBUG_ARTIFACTS` | false | 保留调试截图 |
| `DOUYIN_RECORD_VIDEO` | false | 录制浏览器操作视频 |
| `DOUYIN_KEEP_SUCCESS_VIDEO` | false | 成功后保留录屏 |
| `CORS_ORIGINS` | `*` | CORS 允许源 (生产环境建议白名单) |
| `MUSETALK_GPU_ID` | 0 | MuseTalk GPU 编号 |
| `MUSETALK_API_URL` | `http://localhost:8011` | MuseTalk 常驻服务地址 |
| `MUSETALK_BATCH_SIZE` | 32 | MuseTalk 推理批大小 |
| `MUSETALK_VERSION` | v15 | MuseTalk 模型版本 |
| `MUSETALK_USE_FLOAT16` | true | MuseTalk 半精度加速 |
| `LIPSYNC_DURATION_THRESHOLD` | 100 | 秒，>=此值用 MuseTalk，<此值用 LatentSync（代码默认 120，建议在 `.env` 显式配置） |
| `ALIPAY_APP_ID` | 空 | 支付宝应用 APPID |
| `ALIPAY_PRIVATE_KEY_PATH` | 空 | 应用私钥 PEM 文件路径 |
| `ALIPAY_PUBLIC_KEY_PATH` | 空 | 支付宝公钥 PEM 文件路径 |
| `ALIPAY_NOTIFY_URL` | 空 | 支付宝异步回调地址 (公网 HTTPS) |
| `ALIPAY_RETURN_URL` | 空 | 支付完成后浏览器跳转地址 |
| `PAYMENT_AMOUNT` | `999.00` | 会员价格 (元) |
| `PAYMENT_EXPIRE_DAYS` | `365` | 会员有效天数 |

> 支付宝完整配置步骤（密钥生成、PEM 格式、产品开通等）请参考 **[支付宝部署指南](ALIPAY_DEPLOY.md)**。

---

## 步骤 8: 安装前端依赖

```bash
cd /home/rongye/ProgramFiles/ViGent2/frontend

# 安装依赖
npm install

# 生产环境构建 (可选)
npm run build
```

---

## 步骤 9: 测试运行

> 💡 先手动启动测试，确认一切正常后再配置 pm2 常驻服务。

### 启动后端 (终端 1)

```bash
cd /home/rongye/ProgramFiles/ViGent2/backend
source venv/bin/activate
uvicorn app.main:app --host 0.0.0.0 --port 8006
```

推荐使用项目脚本启动后端（已内置 xvfb + headful 发布环境）：
```bash
cd /home/rongye/ProgramFiles/ViGent2
./run_backend.sh  # 默认 8006，可用 PORT 覆盖
```

### 启动前端 (终端 2)

```bash
cd /home/rongye/ProgramFiles/ViGent2/frontend
npm run dev -- -H 0.0.0.0 --port 3002
```

### 启动 LatentSync (终端 3, 可选加速)

```bash
cd /home/rongye/ProgramFiles/ViGent2/models/LatentSync
conda activate latentsync
python -m scripts.server
```

### 启动 MuseTalk (终端 4, 长视频唇形同步)

```bash
cd /home/rongye/ProgramFiles/ViGent2/models/MuseTalk
/home/rongye/ProgramFiles/miniconda3/envs/musetalk/bin/python scripts/server.py
```
 
### 验证

1. 访问 http://服务器IP:3002 查看前端
2. 访问 http://服务器IP:8006/docs 查看 API 文档
3. 上传测试视频，生成口播视频

---

## 步骤 10: 使用 pm2 管理常驻服务

> 推荐使用 pm2 管理所有服务，支持自动重启和日志管理。

### 1. 启动后端服务 (FastAPI)

建议使用 Shell 脚本启动以避免环境问题。

1. 创建启动脚本 `run_backend.sh`:
```bash
cat > run_backend.sh << 'EOF'
#!/usr/bin/env bash
set -e
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
export WEIXIN_HEADLESS_MODE=headful
export DOUYIN_HEADLESS_MODE=headful
export WEIXIN_DEBUG_ARTIFACTS=false
export WEIXIN_RECORD_VIDEO=false
export DOUYIN_DEBUG_ARTIFACTS=false
export DOUYIN_RECORD_VIDEO=false
PORT=${PORT:-8006}
cd "$BASE_DIR/backend"
exec xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" \
  ./venv/bin/uvicorn app.main:app --host 0.0.0.0 --port "$PORT"
EOF
chmod +x run_backend.sh
```

2. 使用 pm2 启动:
```bash
pm2 start ./run_backend.sh --name vigent2-backend
```

### 2. 启动前端服务 (Next.js)

⚠️ **注意**：生产模式启动前必须先进行构建。

```bash
cd /home/rongye/ProgramFiles/ViGent2/frontend

# 1. 构建项目 (如果之前没跑过或代码有更新)
npm run build

# 2. 启动服务
pm2 start npm --name vigent2-frontend -- run start -- -p 3002
```

### 3. 启动 LatentSync 模型服务

1. 创建启动脚本 `run_latentsync.sh` (使用你的 conda python 路径):
```bash
cat > run_latentsync.sh << 'EOF'
#!/bin/bash
cd /home/rongye/ProgramFiles/ViGent2/models/LatentSync
# 替换为你的实际 Python 路径
/home/rongye/ProgramFiles/miniconda3/envs/latentsync/bin/python -m scripts.server
EOF
chmod +x run_latentsync.sh
```

2. 使用 pm2 启动:
```bash
pm2 start ./run_latentsync.sh --name vigent2-latentsync
```

### 4. 启动 CosyVoice 3.0 声音克隆服务 (可选)

> 如需使用声音克隆功能，需要启动此服务。详细部署步骤见 [CosyVoice 3.0 部署文档](COSYVOICE3_DEPLOY.md)。

1. 启动脚本位于项目根目录: `run_cosyvoice.sh`

2. 使用 pm2 启动:
```bash
cd /home/rongye/ProgramFiles/ViGent2
pm2 start ./run_cosyvoice.sh --name vigent2-cosyvoice
pm2 save
```

3. 验证服务:
```bash
# 检查健康状态
curl http://localhost:8010/health
```

### 5. 启动 MuseTalk 长视频唇形同步服务

> 达到阈值（当前 `.env` 示例为 >=100s）自动路由到 MuseTalk。MuseTalk 不可用时自动回退 LatentSync。
> 详细部署步骤见 [MuseTalk 部署指南](MUSETALK_DEPLOY.md)。

1. 启动脚本位于项目根目录: `run_musetalk.sh`

2. 使用 pm2 启动:
```bash
cd /home/rongye/ProgramFiles/ViGent2
pm2 start ./run_musetalk.sh --name vigent2-musetalk
pm2 save
```

3. 验证服务:
```bash
curl http://localhost:8011/health
# {"status":"ok","model_loaded":true}
```

### 6. 启动服务看门狗 (Watchdog)

> 🛡️ **推荐**：监控 CosyVoice 和 LatentSync 服务健康状态，卡死时自动重启。

```bash
cd /home/rongye/ProgramFiles/ViGent2
pm2 start ./run_watchdog.sh --name vigent2-watchdog
pm2 save
```

### 6. 保存当前列表 (开机自启)

```bash
pm2 save
pm2 startup
```

> **提示**: 完整的 PM2 进程列表应包含 5-6 个服务: vigent2-backend, vigent2-frontend, vigent2-latentsync, vigent2-cosyvoice, vigent2-musetalk, vigent2-watchdog。

### pm2 常用命令

```bash
pm2 status                    # 查看所有服务状态
pm2 logs                      # 查看所有日志
pm2 logs vigent2-backend      # 查看后端日志
pm2 logs vigent2-cosyvoice    # 查看 CosyVoice 日志
pm2 logs vigent2-musetalk     # 查看 MuseTalk 日志
pm2 restart all               # 重启所有服务
pm2 stop vigent2-latentsync   # 停止 LatentSync 服务
pm2 delete all                # 删除所有服务
```


---

## 步骤 11: 配置 Nginx HTTPS (可选 - 公网访问)

如果您需要通过公网域名 HTTPS 访问 (如 `https://vigent.hbyrkj.top`)，请参考以下 Nginx 配置。

**前置条件**：
1. 已申请 SSL 证书 (如 Let's Encrypt)。
2. 使用 FRP 或其他方式将本地 3002 端口映射到服务器。

**配置示例** (`/etc/nginx/conf.d/vigent.conf`):

```nginx
server {
    listen 80;
    server_name your.domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your.domain.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3002;  # 转发给 Next.js 前端
        
        # 必须配置 WebSocket 支持，否则热更和即时通信失效
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

---


---

---

## 步骤 13: 部署可选功能 (字幕与文案助手)

本节介绍如何部署逐字高亮字幕、片头标题以及文案提取助手功能。

### 13.1 部署字幕系统 (Subtitle System)

包含 `faster-whisper` (字幕生成) 和 `Remotion` (视频渲染) 组件。

详细步骤请参考：**[字幕功能部署指南](SUBTITLE_DEPLOY.md)**

简要步骤：
1. 安装 Python 依赖: `faster-whisper`
2. 安装 Node.js 依赖: `npm install` (在 `remotion/` 目录)
3. 验证: `npx remotion --version`

### 13.2 部署文案提取助手 (Copywriting Assistant)

支持 B站/抖音/TikTok 视频链接提取文案与 AI 洗稿。

1. **安装核心依赖**:
   ```bash
   cd /home/rongye/ProgramFiles/ViGent2/backend
   source venv/bin/activate
   pip install yt-dlp zai-sdk
   ```

2. **配置 AI 洗稿 (GLM)**:
   确保 `.env` 中已配置 `GLM_API_KEY`:
   ```ini
   GLM_API_KEY=your_zhipu_api_key
   ```

3. **验证**:
   访问 `http://localhost:8006/docs`，测试 `/api/tools/extract-script` 接口。

---

## 步骤 14: 配置阿里云 Nginx 网关 (关键)

> ⚠️ **CRITICAL**: 如果使用 `api.hbyrkj.top` 等域名作为入口，必须在阿里云 (或公网入口) 的 Nginx 配置中解除上传限制。
> **这是导致 500/413 错误的核心原因。**

**关键配置项**：
```nginx
server {
    listen 443 ssl;
    server_name api.hbyrkj.top;
    
    # ... 其他 SSL 配置 ...

    # 允许大文件上传 (0 表示不限制，或设置为 100M, 500M)
    client_max_body_size 0; 

    location / {
        proxy_pass http://127.0.0.1:YOUR_FRP_PORT;
        
        # 延长超时时间
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}
```

**后果**：如果没有这个配置，上传会在 ~1MB 或 ~10MB 时直接断开，报 413 Payload Too Large 或 500/502 错误。

---

## 故障排除


### GPU 不可用

```bash
# 检查 CUDA
nvidia-smi
python3 -c "import torch; print(torch.cuda.is_available())"
```

### 端口被占用

```bash
# 查看端口占用
sudo lsof -i :8006
sudo lsof -i :3002
sudo lsof -i :8007
sudo lsof -i :8010  # CosyVoice
sudo lsof -i :8011  # MuseTalk
```

### 查看日志

```bash
# pm2 日志
pm2 logs vigent2-backend
pm2 logs vigent2-frontend
pm2 logs vigent2-latentsync
pm2 logs vigent2-cosyvoice
pm2 logs vigent2-musetalk
```

### SSH 连接卡顿 / 系统响应慢

**原因**：LatentSync 模型服务启动时会占用大量 I/O 和 CPU 资源，或者模型加载到 GPU 时导致瞬时负载过高。

**解决**：
1. 检查系统负载：`top` 或 `htop`
2. 如果不需要实时生成视频，可以暂时停止 LatentSync 服务：
   ```bash
   pm2 stop vigent2-latentsync
   ```
3. 确保服务器有足够的 RAM 和 Swap 空间。
4. **代码级优化**：已在 `scripts/server.py` 和 `scripts/inference.py` 中强制限制 `OMP_NUM_THREADS=8`，防止 PyTorch 占用所有 CPU 核心导致系统假死。

---

## 依赖清单

### 后端关键依赖

| 依赖 | 用途 |
|------|------|
| `fastapi` | Web API 框架 |
| `uvicorn` | ASGI 服务器 |
| `edge-tts` | 微软 TTS 配音 |
| `httpx` | GLM API HTTP 客户端 |
| `playwright` | 社交媒体自动发布 |
| `biliup` | B站视频上传 |
| `loguru` | 日志管理 |
| `python-alipay-sdk` | 支付宝支付集成 |

### 前端关键依赖

| 依赖 | 用途 |
|------|------|
| `next` | React 框架 |
| `swr` | 数据请求与缓存 |
| `tailwindcss` | CSS 样式 |
| `wavesurfer.js` | 音频波形（时间轴编辑器） |

### LatentSync 关键依赖

| 依赖 | 用途 |
|------|------|
| `torch` 2.5.1 | PyTorch GPU 推理 |
| `diffusers` | Latent Diffusion 模型 |
| `accelerate` | 模型加速 |
