update examples/launch.py

Signed-off-by: Sun Ruoxi <sunruoxi@4paradigm.com>
This commit is contained in:
2026-10-21 18:48:44 +08:00
parent 8952261b8c
commit 757bc9a8f3
2 changed files with 6 additions and 5 deletions

View File

@@ -52,7 +52,7 @@ nerdctl build --buildkit-host unix:///tmp/ppu-buildkit.sock \
构建时的 `RUN python .../scripts/apply.py --apply` 会先验证原始镜像内四个文件的 SHA-256,再替换源码。`nerdctl build` 成功即表示补丁已写入**新镜像**,原镜像标签不会被覆盖。构建失败若提示 `Installed source does not match this patch`,说明基础镜像中的 vLLM 源码与本项目的原始版本不同;应先比较源码,不要强行跳过校验。
创建服务容器时,沿用原容器的 PPU 设备映射、权限、共享内存和网络配置,改用 `deepseek-v4-pro:ppu-bf16-serial` 镜像,并将模型挂载到 `/model`。这台机器原容器的模型挂载源是 `/bmcp_lvm_fs/data/model/DeepSeek-V4-Pro`,容器目标是 `/model`,共享内存配置为 64 GiB。PPU 设备如何注入由机器的容器运行环境决定,应复用原容器的创建参数。新镜像已经默认设置四个环境变量:`VLLM_DISABLED_KERNELS`、`VLLM_PPU_BF16_O_PROJ`、`VLLM_PPU_SERIAL_ATTENTION`、`VLLM_MULTI_STREAM_GEMM_TOKEN_THRESHOLD`。
创建服务容器时,沿用原容器的 PPU 设备映射、权限、共享内存和网络配置,改用 `deepseek-v4-pro:ppu-bf16-serial` 镜像,并将模型挂载到 `/model`。这台机器原容器的模型挂载源是 `/bmcp_lvm_fs/data/model/DeepSeek-V4-Pro`,容器目标是 `/model`,共享内存配置为 64 GiB。PPU 设备如何注入由机器的容器运行环境决定,应复用原容器的创建参数。新镜像默认设置 `VLLM_DISABLED_KERNELS`、`VLLM_PPU_BF16_O_PROJ`、`VLLM_PPU_SERIAL_ATTENTION`、`VLLM_MULTI_STREAM_GEMM_TOKEN_THRESHOLD` 和 `VLLM_ENGINE_READY_TIMEOUT_S=3600`。后者为权重加载与首次 JIT 编译留出时间;默认的 600 秒在本机使 API 进程提前退出。
在新容器里启动已验证的配置(把 `deepseek_v4_patched` 换成实际容器名):
@@ -63,7 +63,7 @@ nerdctl exec -d \
python /opt/ppu-deepseek-v4-pro-patch/examples/launch.py serve.log
```
启动器读取 `examples/command-serial.json`,将日志写到 `/opt/ppu-deepseek-v4-pro-patch/examples/serve.log`。它运行的核心命令如下;如果按原有编排系统直接运行 `vllm serve`,需同时传入镜像默认的四个环境变量,并明确指定全部 16 张卡:
启动器读取 `examples/command-serial.json`。传入文件名时将日志写到 `examples/` 目录下该文件;不传文件名时,vLLM 的输出直接进入启动器的 stdout,例如在容器内前台运行 `python /opt/ppu-deepseek-v4-pro-patch/examples/launch.py`。它运行的核心命令如下;如果按原有编排系统直接运行 `vllm serve`,需同时传入镜像默认的五个环境变量,并明确指定全部 16 张卡:
```sh
vllm serve /model \

View File

@@ -1,14 +1,15 @@
import os,sys,json,resource,subprocess,signal,time
from contextlib import nullcontext
from pathlib import Path
base=Path(__file__).parent
resource.setrlimit(resource.RLIMIT_MEMLOCK,(resource.RLIM_INFINITY,resource.RLIM_INFINITY))
cfg=json.loads((base/"command-serial.json").read_text())
env=os.environ.copy();env.update(cfg["env"])
log=base/(sys.argv[1] if len(sys.argv)>1 else "serve-fixed.log")
with log.open("w") as f:
log=base/sys.argv[1] if len(sys.argv)>1 else None
with log.open("w") if log else nullcontext(None) as f:
p=subprocess.Popen(cfg["args"],env=env,stdout=f,stderr=subprocess.STDOUT,start_new_session=True,cwd="/workspace/pytorch")
(base/"serve.pid").write_text(str(p.pid))
print("SERVER_PID",p.pid,"LOG",log,flush=True)
print("SERVER_PID",p.pid,"LOG",log if log else "stdout",flush=True)
rc=p.wait()
print("SERVER_EXIT",rc,flush=True)
if rc: