File size: 5,084 Bytes
e1acc15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env bash
# CPU-only prerequisite build. Run in an owned named tmux on x86host; never a unit.
set -euo pipefail
source ~/.config/ndm/paths.sh
umask 077
if [[ $(hostname -s) != x86host ]]; then
  echo 'PP4 runtime builds only on x86host.' >&2
  exit 3
fi
if [[ -z ${TMUX:-} ]]; then
  echo 'Run this long build in an owned named tmux with private TMUX_TMPDIR.' >&2
  exit 3
fi
PP4_BUILD_HERE=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
PP4_BUILD_ROOT=/opt/dsv41/x86host-data/pp4/runtime
PP4_BUILD_PYTHON=/home/operator/miniconda3/bin/python3
if [[ ${1:-} != --bounded-child ]]; then
  exec taskset -c 12-15,28-31 nice -n 19 bash "$0" --bounded-child
fi
export TMPDIR="$PP4_BUILD_ROOT/tmp" TMUX_TMPDIR="$PP4_BUILD_ROOT/tmux" PIP_CACHE_DIR="$PP4_BUILD_ROOT/pip-cache"
export TORCH_EXTENSIONS_DIR="$PP4_BUILD_ROOT/torch_extensions" TRITON_CACHE_DIR="$PP4_BUILD_ROOT/triton"
export CUDA_CACHE_PATH="$PP4_BUILD_ROOT/cuda_cache" PYTHONDONTWRITEBYTECODE=1 CUDA_VISIBLE_DEVICES=
export OMP_NUM_THREADS=8 MKL_NUM_THREADS=8 OPENBLAS_NUM_THREADS=8 NUMEXPR_NUM_THREADS=8 MAX_JOBS=8
export TORCH_CUDA_ARCH_LIST=8.6 CUDA_HOME="$PP4_BUILD_ROOT/cuda13/nvidia/cu13"
export DSPARK_P2P_CUDA_HOME="$CUDA_HOME"
mkdir -p "$TMPDIR" "$TMUX_TMPDIR" "$PIP_CACHE_DIR" "$TORCH_EXTENSIONS_DIR" "$TRITON_CACHE_DIR" "$CUDA_CACHE_PATH"
ulimit -v 50331648
"$PP4_BUILD_PYTHON" - <<'PY'
import importlib.metadata, os, resource, sys
import torch
if sys.version_info[:2] != (3, 13) or torch.__version__ != '2.12.1+cu130':
    raise RuntimeError('requires existing CPython3.13/Torch2.12.1+cu130; do not substitute')
if importlib.metadata.version('nvidia-cuda-runtime') != '13.0.96':
    raise RuntimeError('requires pinned existing nvidia-cuda-runtime13.0.96')
if os.sched_getaffinity(0) != {12,13,14,15,28,29,30,31} or os.getpriority(os.PRIO_PROCESS,0) != 19:
    raise RuntimeError('reserved affinity/nice19 missing')
if resource.getrlimit(resource.RLIMIT_AS)[0] > 48*1024**3:
    raise RuntimeError('48GiB virtual-memory cap missing')
PY
"$PP4_BUILD_PYTHON" -m pip download --no-deps --require-hashes \
  -r "$PP4_BUILD_HERE/requirements-runtime.lock" --dest "$PP4_BUILD_ROOT/wheels"
cp -- "$PP4_BUILD_HERE/runtime_reuse.py" "$PP4_BUILD_ROOT/runtime_reuse.py"
"$PP4_BUILD_PYTHON" - <<'PY'
from pathlib import Path
from zipfile import ZipFile
import shutil, subprocess
root=Path('/opt/dsv41/x86host-data/pp4/runtime')
for wheel in sorted((root/'wheels').glob('*.whl')):
    with ZipFile(wheel) as archive:
        for entry in archive.infolist():
            target=root/'cuda13'/entry.filename
            if entry.is_dir(): target.mkdir(parents=True,exist_ok=True); continue
            data=archive.read(entry)
            if not target.is_file() or target.read_bytes()!=data:
                target.parent.mkdir(parents=True,exist_ok=True);target.write_bytes(data)
cuda=root/'cuda13/nvidia/cu13'
installed=Path('/home/operator/miniconda3/lib/python3.13/site-packages/nvidia/cu13')
def same_bytes_copy(source,destination):
    destination=Path(destination)
    if not destination.is_file() or Path(source).read_bytes()!=destination.read_bytes():
        return shutil.copy2(source,destination)
    return str(destination)
shutil.copytree(installed/'include',cuda/'include',dirs_exist_ok=True,copy_function=same_bytes_copy)
(cuda/'lib64').mkdir(exist_ok=True)
for source in (installed/'lib').iterdir():
    target=cuda/'lib64'/source.name
    if not target.exists(): target.symlink_to(source)
link=cuda/'lib64/libcudart.so'
if not link.exists(): link.symlink_to(installed/'lib/libcudart.so.13')
for directory in (cuda/'bin',cuda/'nvvm/bin'):
    for path in directory.iterdir():
        if path.is_file(): path.chmod(path.stat().st_mode|0o111)
for name in ('exllamav3','exllamav3-facc'):
    source=Path.home()/'dsv41-offload/o2/src'/name
    revision=subprocess.run(['git','-C',str(source),'rev-parse','HEAD'],text=True,capture_output=True,check=True).stdout.strip()
    if revision!='151539c77abc7ab7425d30da7a4e8e3c5c154e7b':
        raise RuntimeError('public EXL3 source revision changed')
    destination=root/name
    if not destination.exists():
        shutil.copytree(source,destination,ignore=shutil.ignore_patterns('.git','build','*.egg-info','__pycache__'))
setup=root/'exllamav3-facc/setup.py'
original=root/'exllamav3-facc/setup.original.py'
if not original.exists(): original.write_bytes(setup.read_bytes())
setup.write_text('import sys\nsys.path.insert(0, "/opt/dsv41/x86host-data/pp4/runtime")\nimport runtime_reuse\nruntime_reuse.install()\n'+original.read_text())
PY
for PP4_BUILD_EXTENSION in exllamav3 exllamav3-facc; do
  (
    cd "$PP4_BUILD_ROOT/$PP4_BUILD_EXTENSION"
    "$PP4_BUILD_PYTHON" setup.py build_ext --inplace
  ) > "$PP4_BUILD_ROOT/build-$PP4_BUILD_EXTENSION.log" 2>&1
done
# Compile/import only. This does not create a CUDA context or touch either pair GPU.
export PP4_BUILD_HERE
export PYTHONPATH="$PP4_BUILD_ROOT/exllamav3:$PP4_BUILD_ROOT/exllamav3-facc"
"$PP4_BUILD_PYTHON" "$PP4_BUILD_HERE/build_p2p.py" \
  --source "$PP4_BUILD_HERE/../../worker/p2p/p2p.cu"