77
88# Intel XPU accelerator device (Arc GPU)
99accelDevice : " xpu"
10- # Kubernetes resource name exposed by the Intel GPU device plugin
11- accelDeviceResource : " gpu.intel.com/xe"
10+ # Kubernetes resource name exposed by the Intel GPU device plugin.
11+ # Use "gpu.intel.com/xe" with the newer Xe kernel driver (Ubuntu 25.10 / Arc B-series),
12+ # or "gpu.intel.com/i915" on hosts still using the i915 driver.
13+ xpuDeviceResource : " gpu.intel.com/xe"
1214
1315block_size : 64 # XPU-optimised KV cache block size (must be >= 64 for 0.14.1-xpu IPEX chunked prefill)
1416max_num_seqs : 128 # Max concurrent sequences (tuned for Arc B-series VRAM)
1517max_seq_len_to_capture : 2048
1618d_type : " float16"
1719max_model_len : 8192
20+ tensor_parallel_size : " 1" # Arc Pro B50 has 1 GPU; adjust for multi-GPU setups
1821
1922image :
2023 repository : intel/vllm
21- tag : " 0.14.1 -xpu"
24+ tag : " 0.17.0 -xpu"
2225 pullPolicy : IfNotPresent
2326 command : ["vllm", "serve"]
2427
25- # intel/vllm:0.14.1-xpu runs as root (no user defined in image)
28+ # --- Security context (non-root, scanner-compliant) ---
29+ # The intel/vllm:0.17.0-xpu image defaults to root, but the workload runs fine as
30+ # a non-root user (UID 1001) provided it can reach the Arc render node
31+ # (/dev/dri/renderD*). That device is owned by root:render on the host, so the pod
32+ # must join the host's "render" (and typically "video") group via supplementalGroups.
33+ # HF_HOME is set to /data (the model-volume mount); fsGroup: 1001 makes that volume
34+ # and the /tmp + /dev/shm emptyDirs group-writable, so caches work without root.
35+ #
36+ # IMPORTANT — validate the host GIDs on the BMG node before deploying (they vary by
37+ # distro/kernel). On the target node run:
38+ # getent group render video # e.g. render:x:993 video:x:44
39+ # stat -c '%g %G' /dev/dri/renderD128
40+ # then set supplementalGroups below to the matching numeric GIDs. A GPU permission
41+ # error at startup almost always means the render GID here does not match the host.
2642podSecurityContext :
27- fsGroup : 0
28- runAsUser : 0
43+ runAsNonRoot : true
44+ runAsUser : 1001
45+ runAsGroup : 1001
46+ fsGroup : 1001
47+ # [<render GID>, <video GID>] — verify per host with `getent group render video`.
48+ # Validated on the Arc Pro B50 test host (Ubuntu 25.10): render=992, video=44.
49+ # These GIDs are NOT guaranteed across distros/kernels — re-check on each node.
50+ supplementalGroups : [992, 44]
51+ seccompProfile :
52+ type : RuntimeDefault
2953
3054securityContext :
3155 allowPrivilegeEscalation : false
@@ -34,9 +58,12 @@ securityContext:
3458 - ALL
3559 add :
3660 - SYS_NICE
61+ # vLLM/IPEX writes SYCL and compile caches at runtime, so the root filesystem
62+ # cannot be fully read-only; model/HF caches live on the mounted /data volume.
3763 readOnlyRootFilesystem : false
38- runAsNonRoot : false
39- runAsUser : 0
64+ runAsNonRoot : true
65+ runAsUser : 1001
66+ runAsGroup : 1001
4067
4168# Node affinity for BMG inference nodes
4269affinity :
@@ -181,6 +208,8 @@ defaultModelConfigs:
181208 DO_NOT_TRACK : " 1"
182209 VLLM_WORKER_MULTIPROC_METHOD : " spawn"
183210 HF_HUB_DISABLE_XET : " 1"
211+ HOME : " /tmp" # Non-root UID 1001 not in /etc/passwd; HOME avoids getpass.getuser() in PyTorch cache
212+ PYTORCH_DISABLE_TORCH_INDUCTOR : " 1" # Workaround: inductor cache requires getpass.getuser(), which fails for non-root UID 1001
184213 extraCmdArgs :
185214 [
186215 " --dtype" , "float16",
0 commit comments