Repository navigation
Add a Windows / Intel Core Ultra guide: which artifacts, and how to start them - #575
Merged
Merged
Conversation
…tart them For a machine that has Maven and several JDKs in Program Files and nothing else: no JBang, no C++ toolchain, no checkout. Four steps, every command PowerShell, everything run out of the local Maven repository -- two small poms, one `dependency:go-offline` up front, then `mvn exec:java` with the JDK the window's JAVA_HOME points at. Worked through on a Core Ultra 7 165U (Meteor Lake-U), because "which classifier do I take" has a different answer per CPU generation and the question keeps coming up. What the guide says: - Which jars: the classes jar plus cpu-windows-x86-64, and vulkan-windows-x86-64 for the Arc iGPU -- 29 MiB, the only GPU backend here that needs nothing installed. SYCL only against the oneAPI 2026 runtime, OpenCL and the other GPU jars not at all, and not llama-platform on a known machine: it carries six platforms' library jars for the one that is used. - Why alderlake is the CPU module here (AVX2 + AVX-VNNI, no AVX-512), and that the variant exists only because the Windows CPU jar is built with plain clang -- clang-cl cannot build it. - The two JDKs: the core and both servers are Java 8+, the agent is Java 21 bytecode and fails in the compiler below that. So JAVA_HOME per window, and the machine-wide default stays on 8. - Step 2, pre-loading, with the two things measured about it: it must run per pom, because that is what caches the plugins (without it the first offline run fails with "No plugin found for prefix 'exec'"), and go-offline resolves the tree without honouring <exclusions>, so the agent pom also caches the other five platforms' library jars. - Step 3: the server with its WebUI on a port, plus the two Invoke-RestMethod calls to test /health and a chat completion. - Step 4: the agent against that server (one loaded model, driven over HTTP), its web console on 8787, and the --model variant without a server. - Thread count as the biggest knob: not all 14 threads, because ggml's barrier waits for the two LP-E cores in the SoC tile. - What the start-up log proves, and that net.ladenthin.llama.backend is a filter rather than a switch. - The NPU: openvino-windows-x86-64 is the only path to it, is opt-in for the measured reason, and is explicitly unmeasured on this hardware. Verified rather than written from the documentation: go-offline then a fully offline `mvn -o exec:java` on a packaging=pom project starts the server off the m2 repository (natives extracted, Vulkan and CPU registered, listening); and the main class is declared as the property exec.mainClass on purpose -- an explicit <mainClass> in the plugin configuration wins over the command line, so -Dexec.mainClass=...Diagnose would silently start the server instead, which is what happened while checking it. The README gets a five-line pointer in "Choosing the natives jars"; the guide is a new file so it does not collide with other edits, and carries an inline SPDX header like docs/c-api.md, so REUSE.toml stays untouched. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E2h8gXyyE5UeimkL9vQv9G
bernardladenthin
had a problem deploying
to
maven-central
October 26, 2026 10:10 — with
GitHub Actions
Failure
bernardladenthin
had a problem deploying
to
maven-central
October 26, 2026 10:10 — with
GitHub Actions
Failure
|
5 of 7 tasks
This branch had an error being deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Adds
docs/windows-intel-core-ultra.mdplus a five-line pointer in the README's "Choosing the natives jars".Why
"Which classifier do I take?" has a different answer per CPU generation, and the answer for a modern Intel laptop part is not obvious: no AVX-512, but AVX-VNNI; an iGPU that Vulkan reaches for free; an NPU only OpenVINO can address, and that one is opt-in for a measured reason. The guide works one concrete machine through end to end — an Intel Core Ultra 7 165U (Meteor Lake-U) — and holds for any Windows x86-64 machine with an Intel iGPU.
The target environment is deliberately narrow: Maven and several JDKs in
C:\Program Files\Java, nothing else. No JBang, no C++ toolchain, no checkout. Four steps, every command PowerShell, everything run out of the local Maven repository.What it says
cpu-windows-x86-64+vulkan-windows-x86-64= 29 MiB. Whyalderlakeis the CPU module this CPU gets, and that the variant exists only because the Windows CPU jar is built with plain clang (clang-clcannot build it). Why SYCL costs a oneAPI 2026 install, why ggml's OpenCL backend is irrelevant here, and whyllama-platformis the wrong choice on a known machine — it carries six platforms' library jars for the one that is used.JAVA_HOMEper window; the machine-wide default stays on 8.mvn dependency:go-offline, per pom.Invoke-RestMethodcalls to test/healthand a chat completion.--modelvariant without a server.net.ladenthin.llama.backendis a filter rather than a switch.openvino-windows-x86-64is the only path to it, is opt-in for the measured reason indocs/benchmarks/gpu-module-jars.md, and is explicitly flagged as unmeasured on this hardware.Verified rather than written from the documentation
exec-maven-plugin3.6.4 is compiled for Java 8 (mojo.java.target=8, prerequisite Maven 3.6.3) andmaven-dependency-plugin3.11.0 declares Java 8 — read off their poms, which is what lets the claim "a stock Maven 3.9 on a JDK 8 runs every server example" stand.dependency:go-offlinefollowed by a fully offlinemvn -o exec:javaon apackaging=pomproject starts the server out of the m2 repository: natives extracted,[RPC, Vulkan, CPU]registered, listening on 9931. The first attempt failed withNo plugin found for prefix 'exec', which is why the guide saysgo-offlinemust run per pom — that is the step that caches the plugins.go-offlineresolves the dependency tree without honouring<exclusions>, so the agent pom also caches the other five platforms' library jars (~113 MiB). Harmless for a pre-load, and the effective classpath still honours the exclusion.exec.mainClass, not as the plugin's<mainClass>: an explicit<mainClass>wins over the command line, so-Dexec.mainClass=…Diagnosesilently started the server instead — observed while checking it, then fixed and re-verified.Sizes in the guide come from the Maven Central directory listings of 6.0.0.
Notes
docs/c-api.md, soREUSE.tomlis untouched.check-natives.py: 0 disagreements.reuse lint: clean. Every relative link and anchor resolves.docs/post-release-check); both branch offmainand touch different files.🤖 Generated with Claude Code
https://claude.ai/code/session_01E2h8gXyyE5UeimkL9vQv9G