Download code/offload/launch/windows/tests/test_pp4_round16.py from ProprietaryLegal/dsv41-sampled-drafting: direct link, hf CLI and curl.
- Browser
- Download file 7.8 kB
-
https://huggingface.co/ProprietaryLegal/dsv41-sampled-drafting/resolve/main/code/offload/launch/windows/tests/test_pp4_round16.py
- Command line
-
hf download hf://ProprietaryLegal/dsv41-sampled-drafting/code/offload/launch/windows/tests/test_pp4_round16.py
-
curl -L -o test_pp4_round16.py https://huggingface.co/ProprietaryLegal/dsv41-sampled-drafting/resolve/main/code/offload/launch/windows/tests/test_pp4_round16.py
7.8 kB
| """PP4 Round 16: the admission client seam must not load torch/vllm into the async proxy (PP4-85b admission cmd/0109). | |
| 0109 ran up2_proxy_stats.py against PID 430, the out-of-process async proxy (rank 0's "through proxy process pid 430" | |
| log line), and it refused: "proxy loaded torch/CUDA library". R15's admission overlay inserted | |
| `from vllm.v1.worker.gpu import dsv41_pp4_admission` at the top of remote_dspark/client.py; the proxy imports client.py, | |
| and importing anything under `vllm` runs vllm/__init__.py -> vllm.env_override -> `import torch`. These tests rebuild | |
| that proxy start on CPU (the real BOOT import sequence under `python -I`, a dist-packages stand-in whose vllm imports | |
| torch exactly as the image's does) and run the real up2_proxy_stats.py against it. | |
| """ | |
| from __future__ import annotations | |
| import json | |
| import os | |
| import shutil | |
| import subprocess | |
| import sys | |
| from pathlib import Path | |
| import pytest | |
| from offload.dspark.probabilistic.pp3 import prepare_verifier as pp3 | |
| from offload.dspark.spark.remote_dspark import proxy_proc | |
| from offload.launch.windows import pf1_window as pf | |
| from offload.launch.windows import pp4_admission_prepare as p | |
| SOURCE = Path('/opt/dsv41/data/src-image') | |
| REMOTE = pf.ROOT/'offload/dspark/spark/remote_dspark' | |
| STATS = pf.ROOT/'offload/launch/windows/up2_proxy_stats.py' | |
| needs_image = pytest.mark.skipif(not (SOURCE/pp3.UTILS).is_file(), reason='image source snapshot absent') | |
| def prepared(tmp_path_factory: pytest.TempPathFactory) -> Path: | |
| out = tmp_path_factory.mktemp('r16')/'prepared' | |
| p.prepare(SOURCE, out) | |
| return out | |
| def r15_client(remote: Path) -> None: | |
| """Rewrite a prepared overlay back to R15's client import (the 0109 condition).""" | |
| client = remote/'client.py' | |
| text = client.read_text() | |
| assert text.count(p.CLIENT_IMPORT) == 1 | |
| client.write_text(text.replace(p.CLIENT_IMPORT, p.IMPORT)) | |
| (remote/p.SEAM).unlink() | |
| def test_image_vllm_import_loads_torch() -> None: | |
| """The mechanism: importing any vllm submodule runs vllm/__init__ -> vllm.env_override -> import torch.""" | |
| if not (SOURCE/'vllm/env_override.py').is_file(): | |
| pytest.skip('image source snapshot absent') | |
| assert 'import vllm.env_override' in (SOURCE/'vllm/__init__.py').read_text() | |
| assert '\nimport torch\n' in (SOURCE/'vllm/env_override.py').read_text() | |
| def test_admission_client_imports_the_package_local_seam(prepared: Path) -> None: | |
| remote = prepared/'remote_dspark' | |
| client = (remote/'client.py').read_text() | |
| assert p.CLIENT_IMPORT in client and p.IMPORT not in client | |
| assert (remote/p.SEAM).read_bytes() == (prepared/p.HELPER).read_bytes() == \ | |
| (pf.ROOT/'offload/launch/windows/pp4_admission_engine.py').read_bytes() | |
| # Engine-side seams (runner, verifier) still reach the vllm-installed helper: they run in the engine. | |
| assert p.IMPORT in (prepared/pp3.RUNNER).read_text() and p.IMPORT in (prepared/pp3.UTILS).read_text() | |
| receipt = json.loads((prepared/'receipt.json').read_text()) | |
| assert 'remote_dspark/'+p.SEAM in receipt['output_sha256'] | |
| assert not (REMOTE/p.SEAM).exists() # the ordinary overlay is untouched | |
| def test_static_proxy_closure_reproduces_and_clears_0109(prepared: Path, tmp_path: Path) -> None: | |
| assert p.proxy_torch_free(REMOTE) == [] | |
| assert p.proxy_torch_free(prepared/'remote_dspark') == [] | |
| assert p.SEAM.removesuffix('.py') in p.proxy_closure(prepared/'remote_dspark') | |
| r15 = tmp_path/'remote_dspark' | |
| shutil.copytree(prepared/'remote_dspark', r15) | |
| r15_client(r15) | |
| assert p.proxy_torch_free(r15) == ['client.py:10 imports vllm.v1.worker.gpu'] | |
| def test_prepare_refuses_an_overlay_that_leaks_into_the_proxy(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: | |
| monkeypatch.setattr(p, 'CLIENT_IMPORT', p.IMPORT) | |
| with pytest.raises(ValueError, match='load torch/vllm in the async proxy'): | |
| p.prepare(SOURCE, tmp_path/'prepared') | |
| def site_with(remote: Path, helper: Path, root: Path) -> tuple[Path, Path]: | |
| """dist-packages stand-in: vllm whose import loads torch (as the image's does), the helper at HELPER, the overlay.""" | |
| site = root/'site' | |
| vllm = site/'vllm' | |
| for package in (vllm, vllm/'v1', vllm/'v1/worker', vllm/'v1/worker/gpu', vllm/'v1/worker/gpu/spec_decode'): | |
| package.mkdir(parents=True, exist_ok=True) | |
| (package/'__init__.py').write_text('') | |
| (vllm/'__init__.py').write_text('import torch # image: vllm/__init__ -> vllm.env_override -> import torch\n') | |
| shutil.copy(helper, site/p.HELPER) | |
| pkg = vllm/'v1/worker/gpu/spec_decode/remote_dspark' | |
| shutil.copytree(remote, pkg, ignore=shutil.ignore_patterns('__pycache__', '*.pyc')) | |
| return site, pkg | |
| def boot_proxy_and_check(site: Path, pkg: Path) -> tuple[dict[str, bool], subprocess.CompletedProcess[str]]: | |
| """The proxy's own BOOT under `python -I` (dist-packages on sys.path), stopped after its imports; then 0109's script.""" | |
| stop = 'from remote_dspark.proxy_proc import main\nsys.exit(main(fd))\n' | |
| assert proxy_proc.BOOT.endswith(stop) | |
| boot = (f'import sys; sys.path.insert(0, {str(site)!r})\n' + proxy_proc.BOOT.replace(stop, | |
| 'from remote_dspark.proxy_proc import main\nimport json\n' | |
| 'print(json.dumps({"torch": "torch" in sys.modules, "vllm": "vllm" in sys.modules}), flush=True)\n' | |
| 'sys.stdin.read()\n')) | |
| env = {k: v for k, v in os.environ.items() if k not in ('PYTHONPATH',)} | |
| child = subprocess.Popen([sys.executable, '-I', '-c', boot, str(pkg), '0'], stdin=subprocess.PIPE, | |
| stdout=subprocess.PIPE, text=True, env=env) | |
| try: | |
| assert child.stdout is not None | |
| line = child.stdout.readline() | |
| assert line, 'proxy boot failed before its imports completed' | |
| loaded = json.loads(line) | |
| check = subprocess.run([sys.executable, '-', '--pid', str(child.pid)], input=STATS.read_text(), | |
| capture_output=True, text=True, timeout=120, env=env, check=False) | |
| return loaded, check | |
| finally: | |
| assert child.stdin is not None | |
| child.stdin.close() | |
| child.wait(timeout=60) | |
| def test_0109_stats_check_against_a_real_proxy_boot(prepared: Path, tmp_path: Path, variant: str) -> None: | |
| remote = tmp_path/'remote_dspark' | |
| shutil.copytree(REMOTE if variant == 'ordinary' else prepared/'remote_dspark', remote, | |
| ignore=shutil.ignore_patterns('__pycache__', '*.pyc')) | |
| if variant == 'r15': | |
| r15_client(remote) | |
| loaded, check = boot_proxy_and_check(*site_with(remote, prepared/p.HELPER, tmp_path)) | |
| if variant == 'r15': | |
| assert loaded == {'torch': True, 'vllm': True} | |
| assert check.returncode != 0 and 'proxy loaded torch/CUDA library' in check.stderr # exactly cmd/0109 | |
| else: | |
| assert loaded == {'torch': False, 'vllm': False} | |
| # Past the torch/CUDA check; this CPU stand-in has no shared-memory region, so the NEXT check stops it. | |
| assert check.returncode != 0 and 'proxy loaded torch/CUDA library' not in check.stderr | |
| assert 'expected one distinct proxy memfd' in check.stderr | |
| def test_0109_pid_is_the_async_proxy() -> None: | |
| """The PID came from rank 0's speculator log of ProxyProcess.pid, which PF1's log filter parses.""" | |
| text = ' '.join((REMOTE/'speculator.py').read_text().split()) | |
| assert 'through proxy process pid %d; rank-0 " "buffers: %.1f MiB device, %.1f MiB shared region", cfg.policy, cfg.endpoint, rnd.proxy.pid' in text | |
| assert r'through proxy process pid (\d+)' in pf.LOG_FILTER | |
| assert 'return self.proc.pid' in (REMOTE/'proxy_proc.py').read_text() | |