From 4a0353dd16eca059de293c962567f5062dd83929 Mon Sep 17 00:00:00 2001 From: haritabh-z01 Date: Wed, 10 Dec 2025 10:59:49 +0530 Subject: [PATCH] feat: enable acceleration via vulkan --- .github/workflows/release.yml | 13 +++++++------ packages/whisper-wrapper/WHISPER_CPP_VERSION | 2 +- packages/whisper-wrapper/bin/build-addon.js | 9 +++++++++ packages/whisper-wrapper/package.json | 3 ++- .../whisper-wrapper/scripts/build-native.js | 4 +++- packages/whisper-wrapper/src/loader.ts | 18 ++++++++++-------- packages/whisper-wrapper/whisper.cpp | 2 +- 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9af5176..a16afa6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,7 @@ on: branches: - feat.windows.support - feat/whisper.migration + - feat/vulkan-support tags: - 'v*' workflow_dispatch: @@ -71,12 +72,12 @@ jobs: node-version: '24.1.0' cache: 'pnpm' - - name: Install CUDA Toolkit + - name: Install Vulkan SDK if: matrix.os == 'windows' - uses: Jimver/cuda-toolkit@v0.2.15 + uses: humbletim/install-vulkan-sdk@v1.2 with: - cuda: '12.4.1' - method: 'network' + version: 1.3.290.0 + cache: true - name: Log Node.js architecture and platform run: | @@ -98,11 +99,11 @@ jobs: GGML_NATIVE: OFF # CI mac runners lack i8mm support; keep CPU features conservative here run: pnpm --filter @amical/whisper-wrapper build:native - - name: Build whisper native binaries (cuda) + - name: Build whisper native binaries (vulkan) if: matrix.os == 'windows' env: GGML_NATIVE: OFF - run: pnpm --filter @amical/whisper-wrapper build:native:cuda + run: pnpm --filter @amical/whisper-wrapper build:native:vulkan - name: Download Node.js binaries working-directory: apps/desktop diff --git a/packages/whisper-wrapper/WHISPER_CPP_VERSION b/packages/whisper-wrapper/WHISPER_CPP_VERSION index 12751ca..57f5271 100644 --- a/packages/whisper-wrapper/WHISPER_CPP_VERSION +++ b/packages/whisper-wrapper/WHISPER_CPP_VERSION @@ -1 +1 @@ -v1.7.6 +v1.8.2 diff --git a/packages/whisper-wrapper/bin/build-addon.js b/packages/whisper-wrapper/bin/build-addon.js index 208415b..c311311 100644 --- a/packages/whisper-wrapper/bin/build-addon.js +++ b/packages/whisper-wrapper/bin/build-addon.js @@ -185,6 +185,9 @@ function variantFromName(name, platform, arch) { if (name.includes("-cuda")) { envOverrides.GGML_CUDA = "1"; } + if (name.includes("-vulkan")) { + envOverrides.GGML_VULKAN = "1"; + } if (name.startsWith("darwin-")) { envOverrides.GGML_USE_ACCELERATE = envOverrides.GGML_USE_ACCELERATE || "1"; } @@ -262,6 +265,12 @@ for (const variant of variants) { }; propagateCMakeBool("GGML_NATIVE"); + propagateCMakeBool("GGML_VULKAN"); + propagateCMakeBool("GGML_METAL"); + propagateCMakeBool("GGML_CUDA"); + propagateCMakeBool("GGML_OPENBLAS"); + propagateCMakeBool("GGML_BLAS"); + propagateCMakeBool("GGML_USE_ACCELERATE"); run(cmakeParts.join(" "), { cwd: addonDir, diff --git a/packages/whisper-wrapper/package.json b/packages/whisper-wrapper/package.json index 4e0041f..ebc006f 100644 --- a/packages/whisper-wrapper/package.json +++ b/packages/whisper-wrapper/package.json @@ -19,7 +19,8 @@ "build": "tsc -p tsconfig.json", "postinstall": "node ./bin/build-addon.js", "build:native": "node ./scripts/build-native.js", - "build:native:cuda": "node ./scripts/build-native.js --cuda" + "build:native:cuda": "node ./scripts/build-native.js --cuda", + "build:native:vulkan": "node ./scripts/build-native.js --vulkan" }, "dependencies": { "cmake-js": "^7.3.1", diff --git a/packages/whisper-wrapper/scripts/build-native.js b/packages/whisper-wrapper/scripts/build-native.js index 57c7dfb..a3012fd 100755 --- a/packages/whisper-wrapper/scripts/build-native.js +++ b/packages/whisper-wrapper/scripts/build-native.js @@ -12,7 +12,9 @@ function build(targets) { }); } -if (process.argv.includes("--cuda")) { +if (process.argv.includes("--vulkan")) { + build(["win32-x64-vulkan", "win32-x64"]); +} else if (process.argv.includes("--cuda")) { build(["win32-x64-cuda", "win32-x64"]); } else { build([]); diff --git a/packages/whisper-wrapper/src/loader.ts b/packages/whisper-wrapper/src/loader.ts index 5132ca8..6fc09fe 100644 --- a/packages/whisper-wrapper/src/loader.ts +++ b/packages/whisper-wrapper/src/loader.ts @@ -1,7 +1,7 @@ import path from "node:path"; import fs from "node:fs"; -const GPU_FIRST_CANDIDATES = ["metal", "openblas", "cuda"] as const; +const GPU_FIRST_CANDIDATES = ["metal", "openblas", "cuda", "vulkan"] as const; function candidateDirs(platform: string, arch: string): string[] { return [ @@ -66,13 +66,15 @@ export function loadBinding(): any { // Store the loaded binding info const bindingType = dir.includes("-cuda") ? "cuda" - : dir.includes("-metal") - ? "metal" - : dir.includes("-openblas") - ? "openblas" - : dir === "cpu-fallback" - ? "cpu-fallback" - : "cpu"; + : dir.includes("-vulkan") + ? "vulkan" + : dir.includes("-metal") + ? "metal" + : dir.includes("-openblas") + ? "openblas" + : dir === "cpu-fallback" + ? "cpu-fallback" + : "cpu"; loadedBindingInfo = { path: candidate, type: bindingType, diff --git a/packages/whisper-wrapper/whisper.cpp b/packages/whisper-wrapper/whisper.cpp index a8d002c..4979e04 160000 --- a/packages/whisper-wrapper/whisper.cpp +++ b/packages/whisper-wrapper/whisper.cpp @@ -1 +1 @@ -Subproject commit a8d002cfd879315632a579e73f0148d06959de36 +Subproject commit 4979e04f5dcaccb36057e059bbaed8a2f5288315