RESTORE-GPU.md 3.8 KB

腾显存 / 恢复清单

生成于 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 <pid> 是没用的,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)。隧道不占显存,不要停。

一键全停

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,首选)

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)

docker start whisper
ss -tln | grep 8002

m3e embedding + SD WebUI Forge(PM2)

/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

收工检查

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