Skip to content
This repository was archived by the owner on Nov 8, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions mseries/OS9-HANDOFF.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
## Warren local AI and eGPU updates — 2026-10-30

Installed `mseries-nvidia-open-source` `595.112.07+apple.1-1` (SHA-256 `a397b68a...b209ab23`) containing the three prepared NVIDIA fixes and license at `/usr/src/mseries-nvidia-open-595.112.07`. This is source only; no NVIDIA module or matching CUDA userspace is installed. The [source package script](nvidia-egpu/package-source.sh) verifies the exact prepared diff before packaging.

ConnectX kernel CI run 41049918349 passed, all artifact checksums passed, and package `b18e89d1...21601b5` is installed beside wip5; `mlx5_core` and `mlxfw` match its kernel release. No ConnectX boot entry was staged because `/boot` has ~45 MiB free; no adapter is attached. Combined revision 2 includes AMDGPU, Nouveau and ConnectX; native build run 41059424955 is running. The prior revision-1 build was cancelled to replace its Nouveau-disabled configuration.

Installed `mseries-tensorfold-vulkan` 0.1+git.b3ab9ba-1, with an opt-in private-Honeykrisp launcher. Installed binary matches the tested source build; guarded Qwen 2B loopback smoke passed. MLX remains the default service. The combined kernel revision 2 enables AMDGPU, Nouveau and ConnectX, and NVIDIA graphics firmware is installed. NVIDIA-open 595 source preparation includes upstream 16K PRs #1480/#1481 and a 595 rebase of #1482; its 29 additions match upstream, with the 615 original retained as reference. Kernel headers and matching NVIDIA userspace are not supplied. [TensorFold](local-ai/receipts/2026-10-30-tensorfold-package/README.md), [NVIDIA kit](nvidia-egpu/README.md).

Added `unified72-combined`, a distinct downstream kernel profile carrying #188 plus both AMDGPU and ConnectX Ethernet modules so one kernel can provide both. Source preparation, 12 PMP host tests, 88 Aurora tests and GCC olddefconfig passed. Native build pending. Existing eGPU trial remains staged; `/boot` has about 45 MiB free, insufficient for another Image plus initramfs without a storage plan. [Details](aurora/unified72/README.md#combined-egpu-and-connectx-package--october-30-2026).

Owner clarified that upstream acceptance is not ours to duplicate; downstream regression testing and packaging are requested. Deployed official MLX v0.7.35 wheel (`39671c8a...19fba82`) to the live venv with the previous venv retained at `~/.local/share/mlx-omarchy/venv.before-v0.7.35-20261030`. Qwen 2B baseline/work120k gate passed; Granite 1B short text matched earlier baseline; reply service restarted and returned `ready`, expected private ICD and server patches checked. Installer/source pins now target `42b30a2d`. [Receipt](local-ai/receipts/2026-10-30-mlx-v0735-deploy/README.md).
Expand Down
4 changes: 2 additions & 2 deletions mseries/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -5644,6 +5644,6 @@ Keep the unified T3 Wingpanel menu and use the Dock launcher to open the T3 wind

The separate Aurora `unified72-egpu` profile carries upstream #188 with AMDGPU enabled. Its CI-built package and AMD firmware are installed, and a non-default trial entry is staged; running wip5 and shared boot DTB remain in place. J314S dock, recovery, matched-DTB and actual eGPU testing remain. See [candidate status](aurora/unified72/README.md#separate-egpu-candidate--october-30-2026).

The separate `unified72-connectx` profile enables the Mellanox Ethernet module on wip5 source; it requires a native build and real-adapter link and throughput qualification. [Status](aurora/unified72/README.md#separate-connectx-candidate--october-30-2026).
The separate `unified72-connectx` profile enables the Mellanox Ethernet module on wip5 source; its native package is installed, while boot and real-adapter link and throughput tests remain. [Status](aurora/unified72/README.md#separate-connectx-candidate--october-30-2026).

The `unified72-combined` profile packages both driver sets in one kernel; native build, boot-space planning and device regression tests remain. [Status](aurora/unified72/README.md#combined-egpu-and-connectx-package--october-30-2026).
The `unified72-combined` profile packages AMDGPU, Nouveau and ConnectX in one kernel; native build, boot-space planning and device regression tests remain. [Status](aurora/unified72/README.md#combined-egpu-and-connectx-package--october-30-2026).
2 changes: 1 addition & 1 deletion mseries/aurora/test_qualification.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ def test_unified72_combines_egpu_and_connectx_without_overwriting_either(self):
self.assertEqual(config["MLX5_CORE"], "m")
self.assertEqual(config["MLX5_CORE_EN"], "y")
self.assertEqual(config["MLXFW"], "m")
self.assertEqual(config["DRM_NOUVEAU"], "n")
self.assertEqual(config["DRM_NOUVEAU"], "m")
self.assertEqual([p["sha256"] for p in data["patches"]],
[p["sha256"] for p in egpu["patches"]])

Expand Down
4 changes: 2 additions & 2 deletions mseries/aurora/unified72/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

## Combined eGPU and ConnectX package — October 30, 2026

`unified72-combined` builds one distinct kernel from the #188 merge and the wip5 display patch series, with both `DRM_AMDGPU=m` and ConnectX Ethernet (`MLX5_CORE=m`, `MLX5_CORE_EN=y`, `MLXFW=m`). RDMA and Nouveau are not enabled by this profile. The original individual profiles remain available and do not share its package or kernel identity. Source preparation and the 12 PMP host tests passed, all 88 Aurora unit tests passed, and a local GCC `olddefconfig` retained both driver sets and 16K pages. The native [package build](https://github.com/techmore/ElementaryOS_MSeries/actions/runs/41057113100) was submitted at `f70f5cc8`; hardware checks are separate. The existing eGPU trial stays staged; only about 45 MiB remains on `/boot`, so adding another boot entry requires a storage plan rather than removing existing recovery files.
Revision 2 of `unified72-combined` builds one distinct kernel from the #188 merge and wip5 display patches with AMDGPU, Nouveau and ConnectX Ethernet modules. RDMA is not enabled. A GCC `olddefconfig` retained `DRM_AMDGPU=m`, `DRM_NOUVEAU=m`, `MLX5_CORE=m`, `MLX5_CORE_EN=y`, `MLXFW=m` and 16K pages; all 88 Aurora unit tests pass. Revision 1 CI run 41057113100 was cancelled because it omitted Nouveau; the revision 2 [native build](https://github.com/techmore/ElementaryOS_MSeries/actions/runs/41059424955) is running at `b3a3e9cb`. The staged eGPU trial and recovery entries remain intact, and about 45 MiB is free on `/boot`. The separately packaged NVIDIA-open/CUDA source kit is documented in [NVIDIA eGPU](../../nvidia-egpu/README.md).

## Separate ConnectX candidate — October 30, 2026

The running wip5 kernel has `NET_VENDOR_MELLANOX` disabled. `connectx-series.json` defines an independent `unified72-connectx` candidate on the same wip5 source and five display patches, with `NET_VENDOR_MELLANOX=y`, `MLX5_CORE=m`, `MLX5_CORE_EN=y` and `MLXFW=m`. AMDGPU remains off; RDMA is not enabled by this profile. It has its own package and kernel identity; it does not replace the wip5 or eGPU profiles. The author reports that a ConnectX-5 Ex enumerated on M2 Max without special PCI or DT changes; that result is not a J314S or network throughput qualification ([setup](https://github.com/joshuaswarren/omarchy-egpu/blob/main/cards/connectx-5/README.md)).

Pinned source verification, patch preparation and 12 PMP host tests passed. A GCC `olddefconfig` retained all four ConnectX settings and 16K pages. The native LLVM kernel and module build, boot, an attached adapter, link stability and throughput remain untested. No ConnectX card appeared in this machine's PCI inventory. The Aurora workflow's manual `unified72-connectx` profile was submitted as [CI run 41049918349](https://github.com/techmore/ElementaryOS_MSeries/actions/runs/41049918349), queued behind the eGPU build. Do not promote it from configuration checks alone.
Pinned source verification, patch preparation and 12 PMP host tests passed. A GCC `olddefconfig` retained all four ConnectX settings and 16K pages. The native LLVM kernel and module build passed in CI; boot, an attached adapter, link stability and throughput remain untested. No ConnectX card appeared in this machine's PCI inventory. The [CI run 41049918349](https://github.com/techmore/ElementaryOS_MSeries/actions/runs/41049918349) passed. Its internal SHA256SUMS passed; package SHA-256 `b18e89d1552b6614bb554a348a4488162e677c72c9bd13ff9b7325f7d21601b5` was installed as `linux-image-elementary-aurora72-connectx-test` alongside wip5. The `mlx5_core` and `mlxfw` modules are present with the matching kernel release; no boot entry was staged due to limited boot space. The running kernel is still wip5.

An additional local GCC compile of `mlx5_core` and `mlxfw` completed after `modules_prepare`. It used `KBUILD_MODPOST_WARN=1` without a full-kernel `Module.symvers`, so modpost reported unresolved symbols and skipped BTF: this proves source compilation only, not link or load compatibility. These private build outputs must not be installed or loaded. The diagnostic build wrote into the prepared source directory, invalidating its recorded source-tree digest; create a fresh prepared tree for any subsequent `candidate.py check` or full build. Logs remain in `~/.cache/mseries-connectx-20261030/`.

Expand Down
13 changes: 7 additions & 6 deletions mseries/aurora/unified72/combined-series.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"schema": 1,
"base_source": "c46d7dcdb8712ea9aeb0ce47b439ffae76371e55",
"revision": 1,
"revision": 2,
"source": {
"repository": "omacom/linux-aurora",
"commit": "c506e1c3c1d7808eddc251e3029b72e9f17e00df",
Expand All @@ -15,10 +15,10 @@
"sha256": "13cfc68aa95ffd0ac858e1a57d95691a10499a4800f3a8ae6deefc7394f238e2"
},
"kernel_release": {
"unified72-combined": "7.2.11-elementary-aurora72-combined-test"
"unified72-combined": "7.2.11-elementary-aurora72-combined2-test"
},
"debian_package": "linux-image-elementary-aurora72-combined-test",
"debian_version": "7.2.11+elementary.aurora72.combined.test-1",
"debian_package": "linux-image-elementary-aurora72-combined2-test",
"debian_version": "7.2.11+elementary.aurora72.combined2.test-1",
"patches": [
{
"file": "0001-drm-apple-srgb-external-display-colour.patch",
Expand Down Expand Up @@ -72,14 +72,15 @@
"NET_VENDOR_MELLANOX": "y",
"MLX5_CORE": "m",
"MLX5_CORE_EN": "y",
"MLXFW": "m"
"MLXFW": "m",
"DRM_NOUVEAU": "m"
}
},
"host_tests": [
"tools/asahi/pmp-bootargs-tests.rs",
"tools/asahi/pmp-power-tests.rs"
],
"qualification": "Combined downstream candidate: Aurora #188 merge and wip5 display patches, AMDGPU and ConnectX Ethernet modules enabled. Build, boot, shared-DTB fallback, dock and adapter testing remain separate.",
"qualification": "Combined downstream candidate: Aurora #188 merge and wip5 display patches, AMDGPU, Nouveau and ConnectX Ethernet modules enabled. Build, boot, shared-DTB fallback, dock and adapter testing remain separate.",
"superseded_patches": [
{
"file": "0001-stock-bindgen-layout-policy.patch",
Expand Down
2 changes: 2 additions & 0 deletions mseries/local-ai/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

The installed desktop uses private Linux MLX v0.7.35, Newelle for desktop and personal assistance, and a separate 16K coding profile for Crush. Qwen3.5 4B is the measured default for the 32 GB M1 Pro; Qwen9 is an optional larger preset. [Measured results, methods and limits](receipts/2026-10-16.md) explain the provisional model choices. [Exact revisions and licenses](receipts/2026-10-16/source-pins.json) accompany the synthetic raw results.

TensorFold Vulkan is available as an opt-in Debian package and launcher (`mseries-tensorfold`); see the [package and regression receipt](receipts/2026-10-30-tensorfold-package/README.md). The existing MLX service remains available.

## Install and launch

```sh
Expand Down
6 changes: 3 additions & 3 deletions mseries/local-ai/engine-compare.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
DRIVER = (ICD.parent / 'mesa-git-sha').read_text().strip() if (ICD.parent / 'mesa-git-sha').exists() else 'unknown'
RAPID_PATH = f"{HOME}/.cache/mseries-metal2vk/rapid-python:{HOME}/.cache/mseries-metal2vk/rapid-src"
RAPID_REV = '1d09cdb684bbf58fac130f5804b08ee2e1f56558'
TF_BIN = HOME / '.cache/mseries-tensorfold/src/zig-out/native/bin/tensorfold-native-vulkan'
TF_REV = '92bb49db5c313c105cbf4b44638d1e1896615174' # PR 1544; receipts record the rev they ran
TF_BIN = Path('/usr/libexec/mseries/tensorfold-native-vulkan')
TF_REV = 'b3ab9ba217a80c63fcc48f7643ddfe339a8f4bdc' # PR 1544; receipts record the rev they ran
PROMPT = 'Explain in plain language how a rainbow forms. Give four distinct sentences.'
LONG_PROMPT = ('Explain in detail how a rainbow forms, including refraction, reflection, color '
'and viewing angle. Write at least 350 words.')
Expand Down Expand Up @@ -384,7 +384,7 @@ def main():
print(f'skipping omlx-120k: {OMLX_BIN} missing (omarchy-mlx packaging/omlx-linux/install.sh)', file=sys.stderr)
arms.remove('omlx-120k')
if 'tensorfold' in arms and not TF_BIN.exists():
raise SystemExit('TensorFold server missing: run tensorfold-vulkan.sh build')
raise SystemExit('TensorFold server missing: build and install the mseries-tensorfold-vulkan package')
out = a.output or Path(__file__).resolve().parent / 'receipts' / (
f"{time.strftime('%Y-%m-%d')}-engine-compare-{a.model}-{'long' if a.long else 'short'}"
+ ('' if DRIVER == '7faf04c065' else f'-hk{DRIVER}') + (f'-c{CONCURRENCY}' if CONCURRENCY > 1 else '')
Expand Down
33 changes: 33 additions & 0 deletions mseries/local-ai/package-tensorfold-vulkan.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash
# Package the previously built, pinned TensorFold Vulkan server without boot hooks.
set -euo pipefail
here=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
root=${MSERIES_TENSORFOLD_ROOT:-$HOME/.cache/mseries-tensorfold}
src=$root/src
pin=b3ab9ba217a80c63fcc48f7643ddfe339a8f4bdc
binary=$src/zig-out/native/bin/tensorfold-native-vulkan
[[ $(git -C "$src" rev-parse HEAD) == "$pin" ]] || { echo 'Unexpected TensorFold revision' >&2; exit 1; }
[[ -z $(git -C "$src" status --porcelain --untracked-files=no) ]] || { echo 'TensorFold source has tracked edits' >&2; exit 1; }
[[ -x $binary ]] || { echo 'Build the TensorFold server first' >&2; exit 1; }
out=${1:?usage: package-tensorfold-vulkan.sh NEW_OUTPUT_DEB}
[[ ! -e $out ]] || { echo 'Refusing to overwrite output' >&2; exit 1; }
work=$(mktemp -d "$root/package.XXXXXXXX")
trap 'rm -rf "$work"' EXIT
mkdir -p "$work/DEBIAN" "$work/usr/bin" "$work/usr/libexec/mseries" "$work/usr/share/doc/mseries-tensorfold-vulkan"
install -m755 "$binary" "$work/usr/libexec/mseries/tensorfold-native-vulkan"
install -m755 "$here/tensorfold-launcher.sh" "$work/usr/bin/mseries-tensorfold"
cp "$src/LICENSE" "$work/usr/share/doc/mseries-tensorfold-vulkan/copyright"
cp -a "$src/LICENSES" "$work/usr/share/doc/mseries-tensorfold-vulkan/"
printf '%s\n' "$pin" > "$work/usr/share/doc/mseries-tensorfold-vulkan/source-revision"
cat > "$work/DEBIAN/control" <<'CONTROL'
Package: mseries-tensorfold-vulkan
Version: 0.1+git.b3ab9ba-1
Architecture: arm64
Maintainer: ElementaryOS MSeries contributors <builder@localhost>
Depends: libc6, libvulkan1
Section: utils
Priority: optional
Description: TensorFold Vulkan local inference engine for Apple Silicon
Opt-in Qwen3.5-2B Vulkan engine, built from upstream PR 1544.
CONTROL
dpkg-deb --root-owner-group --build "$work" "$out"
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# TensorFold Vulkan Debian package — 2026-10-30

Packaged and installed the upstream PR 1544 source revision `b3ab9ba217a80c63fcc48f7643ddfe339a8f4bdc` as `mseries-tensorfold-vulkan` version `0.1+git.b3ab9ba-1`. The .deb SHA-256 is `aff78db1e028d4d80a8f5dbd3abd25469e6d8ae492d9add4113e2602d8fd21f2`; the installed engine SHA-256 `eae8c9f955f39d2be33af57cbfe254225fb2a8a349d577b749743e174e89511b` matches the tested build. The package retains upstream licenses, has no maintainer scripts, and installs `mseries-tensorfold`, which selects the private Honeykrisp ICD for its own process.

The installed engine passed a guarded loopback Qwen3.5-2B 32-token serving smoke and produced the prior expected text hash; [raw result](installed-smoke.json). The underlying revision's five GPU stages, six kernel-contract groups, long generation and teacher-forced comparisons are recorded in [its test receipt](../2026-10-30-tensorfold-b3ab9ba/README.md). It is an opt-in engine; the installed MLX service remains the default. Upstream PR 1544 is open, and the announced TensorFold submit-batching improvement is not included in this revision.

Rebuild with `MSERIES_TENSORFOLD_ROOT=... bash mseries/local-ai/tensorfold-vulkan.sh build`, then `MSERIES_TENSORFOLD_ROOT=... bash mseries/local-ai/package-tensorfold-vulkan.sh OUTPUT.deb`. Install the resulting package with `sudo dpkg -i OUTPUT.deb`. Run `mseries-tensorfold serve MODEL_DIR --backend vulkan --no-update-check` for a compatible Qwen3.5-2B checkpoint; use loopback binding and existing resource policy.
Loading
Loading