Issues / #2339

#2339 Intel Arc Pro B60: first benchmarks, and three setup blockers on Ubuntu 24.04

open · @StianNOR · 0 comentários · No GitHub

BenchmarksSetup & installServer & APIMulti-GPUAMD / HIPNVIDIA / CUDAModels & quantsDocumentation

Descrição

**Card:** Intel Arc Pro B60, 24 GB, `xe` driver, PCIe Gen4 x8 (~12 GB/s measured)
**Host:** AMD EPYC-class, 64c/128t, 96 GB RAM to the container, Proxmox LXC, Ubuntu 24.04
**Engine:** Strata 0.1.43.1, SYCL port, AOT `bmg-g21`
**Runtime:** compute-runtime 26.31.39395.14, oneAPI DPC++ 2026.1.1, Level Zero 1.17

Extends #870, which covered Coder IQ1_M at 32K on 0.1.40.x. This adds IQ2_XS and
IQ3_S, 131K context, and engine 0.1.43.1. All runs at 131,072 context, int8 KV,
`--kv-resident 32768`, `--prefill auto:32768`, `--vram-reserve-mib 2048`.
Medians of 3 from `./bench.sh`.

For comparison with #870: 41.4 tok/s decode here against 31-36 there, and 1,051
tok/s on a 16K prompt against ~657 on 6K. Different model and engine version, so
not a like-for-like, but the direction is useful.

| Model | Chat decode | 4K prompt | 16K prompt | Agent decode | Experts resident |
|---|---|---|---|---|---|
| IQ2_XS | 41.4 tok/s | 922 | 1051 | 44.5 | 11,792 / 24,576 |
| Coder IQ1_M | 39.7 tok/s | 947 | 1063 | 42.6 | — |
| IQ3_S | 35.4 tok/s | 837 | 1034 | 35.6 | 6,380 / 24,576 |

IQ3_S costs 14% decode and only 2% on 16K prompt reading versus IQ2_XS. For
long-context work that is close to free.

Coder IQ1_M benchmarked the same as IQ2_XS on this card. The residency win did not
materialise — worth noting, since the README implies Coder is faster.

### ctest: 28 of 31 pass on real hardware

| Test | Result |
|---|---|
| `gr_parity` | QFUSE subcheck fails — SYCL returns false by design |
| `ple_parity` | Needs a Q2_0 shard fixture |
| `s2_expert_grouped_parity` | Kernels differ bitwise, both within 1e-7 of host reference |

Matches the Arc B65 report in `bench/results/2026-10-07-community-arc-b65-v01402`.

`STRATA_QFUSE` defaults to `1` in `src/core/arch_defaults.cpp` but the SYCL path does
not implement it. Consider defaulting it to `0` when `STRATA_ENABLE_SYCL` is on.

---

### Blocker 1 — Ubuntu 24.04's archive runtime predates Battlemage

`apt install intel-opencl-icd` on Ubuntu 24.04 gives `23.43.27642.40`. Battlemage needs
roughly 24.45 or newer. Symptoms:

```
Could not determine device target: bmg-g21.
Error: Cannot get HW Info for device bmg-g21.
```

`clinfo -l` returns nothing. `INTEL_ARC.md` lists `intel-opencl-icd libze1
libze-intel-gpu1` with no version note, so this looks like a working install until
the AOT build fails.

**Fix:** `add-apt-repository ppa:kobuk-team/intel-graphics`. Worth adding to
`INTEL_ARC.md` — it cost about an hour to find.

### Blocker 2 — `strata-sycl.sh` hard-requires Docker with no fallback

`sycl/serve/strata-sycl.sh:37` execs `docker`. Without it:

```
/opt/Strata/sycl/serve/strata-sycl.sh: line 37: exec: docker: not found
```

`setup.sh --backend sycl` writes this `exe` into the config unconditionally, so a
working AOT build in `build-sycl/` is never used. `INTEL.md` documents running by hand,
but setup never offers it.

**Suggestion:** when `STRATA_SYCL_BIN` is set and the binary exists, write a direct
`exe` instead of the Docker wrapper. The config already carries `STRATA_SYCL_BIN`.

A three-line local wrapper is all that is needed:

```bash
#!/bin/bash
source /opt/intel/oneapi/setvars.sh >/dev/null 2>&1
export SYCL_CACHE_PERSISTENT=0 STRATA_QFUSE=0
export ONEAPI_DEVICE_SELECTOR=level_zero:gpu
exec /opt/Strata/build-sycl/strata "$@"
```

`ONEAPI_DEVICE_SELECTOR=level_zero:gpu` matters. Without it the engine can select the
OpenCL **CPU** device and report system RAM as VRAM:

```
cudaMalloc(1538035200) for the weight arena failed: 0 MiB of 128631 MiB VRAM free
get_memory_info: ext_intel_free_memory is not supported.
```

128 GB is the host's RAM, not a 24 GB card. A hard failure would beat a silent CPU
fallback here.

### Blocker 3 — `--setup` rewrites `exe` every run

Each `setup.sh --setup` restores the Docker wrapper, so the local `exe`, `host`,
`api_key` and `--prefill` have to be re-applied after installing any additional model.

---

### Also worth knowing

**`--vram-reserve-mib 0` is a trap.** `--expert-cache auto` fills the card to the
reserve before KV and prompt buffers exist. With a zero reserve it took all 24 GB,
left 73 MiB, and every request stalled — decode fell to **1.4 tok/s**. The engine does
warn (`LOW: requests may stall`), but a floor would be safer than a warning.

**Dual sm_60 layer split works.** `MULTI_GPU.md` states compute capability 7.5 is
required. With `STRATA_EXPERIMENTAL_SM60=1`, setup detected two Tesla P100s (sm_60) and
offered them as a pair, printing `layer split across GPUs [0, 1] (auto)`. Hardware
failure stopped the benchmark, but the path is clearly live. The docs say otherwise.

**Tesla P100 numbers** (single card, 16 GB, CUDA 12 engine, same model and context):

| | IQ2_XS |
|---|---|
| Chat decode | 40.1 tok/s |
| 4K prompt | 316 tok/s |
| 16K prompt | 350 tok/s |

Decode matches the Arc; prompt reading is 3x slower. Consistent with emulated `__dp4a`
on sm_60 hitting the integer kernels. `OLDER_GPUS.md` lists P100 as "not measured", so
this fills that row.

No site

Links install, modelos, releases.