# 腾显存 / 恢复清单 > 生成于 2026-08-18,为 minimax-h3 部署腾显存前的现场快照。 > 用户已授权「部署 H3 时其他占显存的模型都可以停」,但**恢复方式必须先记全再动手**。 ## 现场(停机前) | PID/容器 | 服务 | 端口 | 显存 | 恢复方式 | |---|---|---|---|---| | 容器 `llm38` | Qwen3.8-27B llama.cpp | 8000 | **57.3 GB** | `docker start` | | 容器 `whisper` | 语音转写 | 8002 | **3.2 GB** | `docker start` | | PM2 app `m3e` | m3e embedding gunicorn | 7590 | 668 MiB | `pm2 start m3e` | | PM2 app `sd-forge` | SD WebUI Forge | 7860(仅本机) | 174 MiB | `pm2 start sd-forge` | **用户 2026-08-18 明确指示:需要显存时四个全停。** 这是测试机,不是生产环境。 合计腾出 **61.4 GB**,四卡各回到约 21.5 GB 空闲。 ### ★ 后两个是 PM2 托管的,不是手工拉起 ★ **2026-08-18 实测更正**:本文件早期版本写它们「无 systemd 单元、手工拉起、是恢复环节的主要风险点」——**错了**。 它们由 **PM2 God Daemon(PID 1467, v5.3.1)** 托管,`pm2 list` 里叫 `m3e` 和 `sd-forge`。 后果很实际:**`kill ` 是没用的,PM2 会在几秒内把它们拉回来**(实测 kill 后 60 秒内自动重启,显存又被占回去)。必须用 `pm2 stop`。 好消息是恢复也因此变简单——一条 `pm2 start` 即可,不需要手抄启动命令。 pm2 二进制在 **`/usr/local/node/bin/pm2`**(不在默认 PATH 里,SSH 非交互 shell 下要写全路径)。 PM2 还托管着 5 条 frpc 隧道(`frpc-ssh` / `frpc-qwen-client` / `frpc-m3e-client` / `frpc-sd-client` / `frpc-comfyui-client`)和几个 stopped 的条目(`qwen` / `deepseek` / `deepseek-14b`)。**隧道不占显存,不要停。** ## 一键全停 ```bash docker stop llm38 whisper /usr/local/node/bin/pm2 stop m3e sd-forge # ← 必须用 pm2,kill 会被自动拉回 sleep 6 nvidia-smi --query-compute-apps=pid,used_memory --format=csv,noheader # 应为空 nvidia-smi --query-gpu=index,memory.free --format=csv,noheader # 实测四卡各 22002 MiB ``` 实测结果(2026-08-18 18:58):**四卡各 22002 MiB 空闲,合计 88 GB,计算进程为零。** > ⚠️ 别用 `pgrep -f "gunicorn.*7590"` 找 PID——**它会匹配到你自己那条 SSH 命令行**,照着 kill 会误杀。 > 用 `nvidia-smi --query-compute-apps=pid` 报出来的 PID 反查才可靠。 ## 恢复命令 ### llm38(docker,首选) ```bash docker start llm38 # 验证(约 15 秒) curl -sf http://127.0.0.1:8000/health docker logs llm38 2>&1 | grep n_ctx_slot | tail -1 # 应为 n_ctx_slot = 262144 docker inspect llm38 --format '{{.State.Health.Status}}' # healthy ``` 起不来时的兜底:`/home/admin/qwen38-deploy/ctx256k.sh`(自带失败回滚), 或旧配置容器 `llm38_prev`:`docker rm -f llm38 && docker rename llm38_prev llm38 && docker start llm38` ### whisper(docker) ```bash docker start whisper ss -tln | grep 8002 ``` ### m3e embedding + SD WebUI Forge(PM2) ```bash /usr/local/node/bin/pm2 start m3e sd-forge /usr/local/node/bin/pm2 list # 两者应为 online ss -tln | grep -E '7590|7860' # 7590 全网 / 7860 仅 127.0.0.1 ``` > 手工拉起的命令留档备查(**正常情况下用不到,PM2 里有配置**): > - m3e:cwd `/home/admin/llm/embedding`, > `/home/admin/.cache/pypoetry/virtualenvs/embedding-LbDC8KEi-py3.10/bin/python .../bin/gunicorn -w 1 -b 0.0.0.0:7590 --timeout 300 embedding.app:app --log-level info` > - sd-forge:cwd `/data/models/stable-diffusion-webui-forge`,`bash webui.sh --api` ## 收工检查 ```bash nvidia-smi --query-compute-apps=pid,used_memory --format=csv,noheader ss -tln | grep -E '7590|7860|8000|8002' # 四个端口都要在 curl -sf http://127.0.0.1:8000/health && echo OK ```