Skip to content

[XPU] feat: add Docker image for verl + Intel XPU plugin - #23

Draft
kahlun wants to merge 3 commits into
verl-project:mainfrom
kahlun:feature/xpu-docker
Draft

kahlun wants to merge 3 commits into
verl-project:mainfrom
kahlun:feature/xpu-docker

Conversation

@kahlun

@kahlun kahlun commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a Docker image for running verl + this plugin together on Intel GPU.
Builds this repo (verl-hardware-plugin) as the container's build context and
clones verl-core in at a pinned ref, rather than the other way round. See
docker/intel_gpu/README.md for build/run instructions.

Motivation

No vendor has shipped a Dockerfile in this repo before. verl-core's own
docker/rocm and docker/ascend use verl-core as the build context — that
shape doesn't fit a plugin repo, where the natural build context is the
plugin itself and a known-good verl-core is something you pull in, not
something you're developing against.

Changes

  • docker/intel_gpu/Dockerfile.intel_gpu (new) — Intel DLE 2026.1.0 base,
    Intel GPU user-mode driver install, vLLM built from source (pinned
    v0.27.0) for XPU, verl-core cloned at VERL_GIT_REPO/VERL_REF, this
    plugin installed --no-deps -e . from the local build context on top.
  • docker/intel_gpu/requirements-intel-gpu.txt (new) — verl's own runtime
    deps for this image (torch==2.13.0+xpu hard pin, transformers>=5.17.0
    for the flash-attn2 Hub-kernel fallback — see the file for why that
    diverges safely from verl's project-wide transformers pin).
  • docker/intel_gpu/README.md (new) — build/run instructions, dependency
    table, known Level-Zero-IPC workarounds for multi-GPU.

One decision a reviewer is likely to question:

VERL_GIT_REPO/VERL_REF default to kahlun/verl:intel-xpu-plugin-e2e-vllm,
not verl-project/verl:main.
This plugin's platform_xpu.py/profilers/
override four PlatformBase hooks (is_reduce_avg_supported,
attention_utils_module, profiler_markers, dist_profiler_cls) that don't
exist on verl-project/verl:main yet — they're in an unmerged upstream PR
(verl-project/verl#7917). Building against main today would silently no-op
those overrides. Switch both build args once #7917 merges.

Testing

  • docker build -t verl-intel-gpu:latest -f docker/intel_gpu/Dockerfile.intel_gpu .
    — not yet run in this environment; flagging rather than claiming green.
  • Runtime sanity checks from the README (torch.xpu.is_available(),
    vLLM platform, verl platform/vendor) after build.
  • End-to-end GRPO run — tracked separately as the e2e PR, not blocking
    this one.

Acceptance Baseline (for new hardware adaptation PRs)

Skipped — this PR adds a build artifact, not a platform/engine change.

Checklist

  • Code follows the project's style and passes pre-commit checks — not
    yet run against this diff.
  • Documentation updated — docker/intel_gpu/README.md added alongside.
  • No secrets or credentials included

Builds this repo (verl-hardware-plugin) as the container's build context,
cloning verl-core in at a pinned ref (VERL_GIT_REPO/VERL_REF) rather than
requiring a local verl checkout — the intended user already has this plugin
checked out and wants a known-good verl paired with it.

VERL_GIT_REPO/VERL_REF default to kahlun/verl:intel-xpu-plugin-e2e-vllm
until verl-project/verl#7917 (the PlatformBase hooks this plugin's
platform_xpu.py/profilers/ override) merges upstream.

No vendor has previously shipped a Dockerfile in this repo; verl-core's
docker/ascend and docker/rocm use verl-core as build context instead, which
doesn't fit a plugin that isn't built into verl-core.
VLLM_VERSION v0.27.0 -> v0.29.0 for vllm_xpu_kernels 0.1.14.1.

Also fixes a real placement bug: the plugin was being installed editable
at /workspace/verl-hardware-plugin, which devctl's session-PVC mount at
/workspace makes invisible at runtime (only /workspace/local and
/workspace/remote survive that mount) -- the same failure mode verl-core
itself hit before being moved to /opt/verl. Moved to /opt/verl-hardware-plugin
to match.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant