Skip to content

Commit a6393d2

Browse files
gtaclaude
andcommitted
Address PR review comments: security, config cleanup, and naming improvements
This commit addresses all requested changes from reviewers: **Security (vhpintel):** - Change vLLM pod to run as non-root (UID 1001) with supplementalGroups for GPU access - Add seccompProfile: RuntimeDefault for enhanced security - Add detailed comments on validating render/video GIDs per host **Config Cleanup (AhmedSeemalK):** - Remove hardcoded proxy settings (proxy-dmz.intel.com) from all.yml - Remove hardcoded DNS servers (10.248.x.x, 10.45.x.x, 10.2.x.x) from all.yml - Remove hardcoded domains (intel.com, bmgaisolutions.com) from no_proxy - Remove hardcoded ansible_user from hosts.yaml - Convert all config values to placeholders/comments **Naming & Extensibility (amberjain1):** - Rename all BMG models from "bmg-*" to "xpu-*" for future GPU support - Updated 6 model identifiers (llama-8b, mistral-7b, deepseek, qwen-2-5-7b, falcon3-7b, qwen-coder-3b) - Updated all ansible playbook tasks, helm releases, and service names **Resource Naming (vhpintel):** - Rename accelDeviceResource → xpuDeviceResource across all helm charts - Add driver compatibility notes (gpu.intel.com/xe vs i915) **Documentation:** - Add cpu_or_gpu → device migration guide with before/after examples - Document all accepted device values (cpu/hpu/xpu/gaudi2/gaudi3) - Update vLLM image version to 0.17.0-xpu (fixes torch.compile crash in 0.14.1) - Fix circular doc reference (intel-arc-bmg-setup.md → prerequisites.md) - Fix typo: "Enteprise" → "Enterprise" **Bug Fixes:** - Remove merge conflict marker from README.md Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
1 parent 19ea8fa commit a6393d2

10 files changed

Lines changed: 180 additions & 137 deletions

File tree

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
<<<<<<< HEAD
21
# Intel® AI for Enterprise Inference
32

43
Unleash the power of AI Inference on Intel Silicon

core/helm-charts/vllm/bmg-values.yaml

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,49 @@
77

88
# Intel XPU accelerator device (Arc GPU)
99
accelDevice: "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

1315
block_size: 64 # XPU-optimised KV cache block size (must be >= 64 for 0.14.1-xpu IPEX chunked prefill)
1416
max_num_seqs: 128 # Max concurrent sequences (tuned for Arc B-series VRAM)
1517
max_seq_len_to_capture: 2048
1618
d_type: "float16"
1719
max_model_len: 8192
20+
tensor_parallel_size: "1" # Arc Pro B50 has 1 GPU; adjust for multi-GPU setups
1821

1922
image:
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.
2642
podSecurityContext:
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

3054
securityContext:
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
4269
affinity:
@@ -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",

core/helm-charts/vllm/templates/deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ spec:
196196
{{- end }}
197197
{{- else }}
198198
limits:
199-
{{ .Values.accelDeviceResource | default "habana.ai/gaudi" }}: {{ .Values.tensor_parallel_size | default (index .Values.modelConfigs .Values.LLM_MODEL_ID | default dict).tensor_parallel_size | default .Values.defaultModelConfigs.tensor_parallel_size | quote}}
199+
{{ .Values.xpuDeviceResource | default "habana.ai/gaudi" }}: {{ .Values.tensor_parallel_size | default (index .Values.modelConfigs .Values.LLM_MODEL_ID | default dict).tensor_parallel_size | default .Values.defaultModelConfigs.tensor_parallel_size | quote}}
200200
{{- end }}
201201
{{- end }}
202202

core/helm-charts/vllm/values.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ autoscaling:
1717

1818
# empty for CPU (longer latencies are tolerated before HPA scaling unaccelerated service)
1919
accelDevice: ""
20-
# Kubernetes resource name for the accelerator (e.g. habana.ai/gaudi, gpu.intel.com/xe)
21-
accelDeviceResource: ""
20+
# Kubernetes resource name for the accelerator (e.g. habana.ai/gaudi, gpu.intel.com/xe or gpu.intel.com/i915)
21+
xpuDeviceResource: ""
2222

2323
port: 2080
2424
shmSize: 1Gi

core/inventory/hosts.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ all:
22
hosts:
33
master1:
44
ansible_connection: local
5-
ansible_user: gta
5+
# ansible_user: your-username
66
ansible_become: true
77
children:
88
kube_control_plane:

core/inventory/metadata/all.yml

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ loadbalancer_apiserver_healthcheck_port: 8081
3838
# disable_host_nameservers: false
3939

4040
## Upstream dns servers
41-
upstream_dns_servers:
42-
- "10.248.2.1"
43-
- "10.45.15.7"
44-
- "10.2.71.6"
41+
# upstream_dns_servers:
4542
# - 8.8.8.8
4643
# - 8.8.4.4
4744

@@ -58,15 +55,15 @@ upstream_dns_servers:
5855
# external_cloud_provider:
5956

6057
## Set these proxy values in order to update package manager and docker daemon to use proxies and custom CA for https_proxy if needed
61-
http_proxy: "http://proxy-dmz.intel.com:912"
62-
https_proxy: "http://proxy-dmz.intel.com:912"
58+
# http_proxy: ""
59+
# https_proxy: ""
6360
# https_proxy_cert_file: ""
6461

6562
# DO NOT CHANGE INDENTATION - used by Automation
66-
env_proxy:
67-
http_proxy: "http://proxy-dmz.intel.com:912"
68-
https_proxy: "http://proxy-dmz.intel.com:912"
69-
no_proxy: "localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,192.168.0.0/16,.svc,.cluster.local,10.233.0.1,10.233.0.0/18,10.0.0.0/8,intel.com,bmgaisolutions.com,api.example.com"
63+
# env_proxy:
64+
# http_proxy: ""
65+
# https_proxy: ""
66+
# no_proxy: "localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,192.168.0.0/16,.svc,.cluster.local,10.233.0.1,10.233.0.0/18,10.0.0.0/8"
7067

7168
## Refer to roles/kubespray-defaults/defaults/main/main.yml before modifying no_proxy
7269
# no_proxy: ""

core/lib/models/model-selection.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,42 +275,42 @@ get_model_names() {
275275
echo "Error: XPU model identifier provided for cpu/hpu deployment/removal." >&2
276276
exit 1
277277
fi
278-
model_names+=("bmg-llama-8b")
278+
model_names+=("xpu-llama-8b")
279279
;;
280280
32)
281281
if [ "$device" = "cpu" ] || [ "$device" = "hpu" ]; then
282282
echo "Error: XPU model identifier provided for cpu/hpu deployment/removal." >&2
283283
exit 1
284284
fi
285-
model_names+=("bmg-mistral-7b")
285+
model_names+=("xpu-mistral-7b")
286286
;;
287287
33)
288288
if [ "$device" = "cpu" ] || [ "$device" = "hpu" ]; then
289289
echo "Error: XPU model identifier provided for cpu/hpu deployment/removal." >&2
290290
exit 1
291291
fi
292-
model_names+=("bmg-deepseek-r1-distill-llama8b")
292+
model_names+=("xpu-deepseek-r1-distill-llama8b")
293293
;;
294294
34)
295295
if [ "$device" = "cpu" ] || [ "$device" = "hpu" ]; then
296296
echo "Error: XPU model identifier provided for cpu/hpu deployment/removal." >&2
297297
exit 1
298298
fi
299-
model_names+=("bmg-qwen-2-5-7b")
299+
model_names+=("xpu-qwen-2-5-7b")
300300
;;
301301
35)
302302
if [ "$device" = "cpu" ] || [ "$device" = "hpu" ]; then
303303
echo "Error: XPU model identifier provided for cpu/hpu deployment/removal." >&2
304304
exit 1
305305
fi
306-
model_names+=("bmg-falcon3-7b")
306+
model_names+=("xpu-falcon3-7b")
307307
;;
308308
36)
309309
if [ "$device" = "cpu" ] || [ "$device" = "hpu" ]; then
310310
echo "Error: XPU model identifier provided for cpu/hpu deployment/removal." >&2
311311
exit 1
312312
fi
313-
model_names+=("bmg-qwen-2-5-coder-3b")
313+
model_names+=("xpu-qwen-2-5-coder-3b")
314314
;;
315315
"llama-8b"|"llama-70b"|"codellama-34b"|"mixtral-8x-7b"|"mistral-7b"|"tei"|"tei-rerank"|"falcon3-7b"|"deepseek-r1-distill-qwen-32b"|"deepseek-r1-distill-llama8b"|"llama3-405b"|"llama-3-3-70b"|"llama-4-scout-17b"|"qwen-2-5-32b")
316316
if [ "$device" = "cpu" ] || [ "$device" = "xpu" ]; then
@@ -326,7 +326,7 @@ get_model_names() {
326326
fi
327327
model_names+=("$model")
328328
;;
329-
"bmg-llama-8b"|"bmg-mistral-7b"|"bmg-deepseek-r1-distill-llama8b"|"bmg-qwen-2-5-7b"|"bmg-falcon3-7b"|"bmg-qwen-2-5-coder-3b")
329+
"xpu-llama-8b"|"xpu-mistral-7b"|"xpu-deepseek-r1-distill-llama8b"|"xpu-qwen-2-5-7b"|"xpu-falcon3-7b"|"xpu-qwen-2-5-coder-3b")
330330
if [ "$device" = "cpu" ] || [ "$device" = "hpu" ]; then
331331
echo "Error: XPU model identifier provided for cpu/hpu deployment/removal." >&2
332332
exit 1

0 commit comments

Comments
 (0)