Skip to content

Commit 9c66c91

Browse files
committed
Enable Vulkan local inference by default on Windows and Linux
1 parent 9407a8a commit 9c66c91

13 files changed

Lines changed: 61 additions & 17 deletions

File tree

.github/workflows/build-cli.yml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ jobs:
115115
cross --version
116116
117117
export CC="${{ matrix.cc || ''}}"
118-
cross build --release --target ${TARGET} -p goose-cli
118+
if [[ "${TARGET}" == *"unknown-linux-gnu" ]]; then
119+
cross build --release --target ${TARGET} -p goose-cli --features vulkan
120+
else
121+
cross build --release --target ${TARGET} -p goose-cli
122+
fi
119123
120124
- name: Setup Rust (Windows)
121125
if: matrix.os == 'windows'
@@ -124,15 +128,24 @@ jobs:
124128
rustup show
125129
rustup target add x86_64-pc-windows-msvc
126130
131+
- name: Install Vulkan SDK (Windows)
132+
if: matrix.os == 'windows'
133+
shell: pwsh
134+
run: |
135+
choco install vulkan-sdk --yes --no-progress
136+
$sdk = Get-ChildItem "C:\VulkanSDK" -Directory | Sort-Object Name -Descending | Select-Object -First 1
137+
if (-not $sdk) { throw "Vulkan SDK installation did not create C:\VulkanSDK" }
138+
"VULKAN_SDK=$($sdk.FullName)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
139+
127140
- name: Build CLI (Windows)
128141
if: matrix.os == 'windows'
129142
shell: bash
130143
run: |
131144
echo "🚀 Building Windows CLI executable..."
132145
if [ "${{ inputs.windows_variant }}" = "cuda" ]; then
133-
cargo build --release --target x86_64-pc-windows-msvc -p goose-cli --features cuda
146+
cargo build --release --target x86_64-pc-windows-msvc -p goose-cli --features "cuda vulkan"
134147
else
135-
cargo build --release --target x86_64-pc-windows-msvc -p goose-cli
148+
cargo build --release --target x86_64-pc-windows-msvc -p goose-cli --features vulkan
136149
fi
137150
138151
if [ ! -f "./target/x86_64-pc-windows-msvc/release/goose.exe" ]; then

.github/workflows/bundle-desktop-linux.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ jobs:
6464
sudo apt-get update
6565
sudo apt-get install -y \
6666
build-essential \
67+
glslc \
6768
libnss3-dev \
6869
libatk-bridge2.0-dev \
6970
libdrm2 \
@@ -73,6 +74,7 @@ jobs:
7374
libgbm1 \
7475
libxss1 \
7576
libasound2t64 \
77+
libvulkan-dev \
7678
rpm \
7779
fakeroot \
7880
dpkg-dev \
@@ -110,7 +112,7 @@ jobs:
110112
source ./bin/activate-hermit
111113
export TARGET="x86_64-unknown-linux-gnu"
112114
rustup target add "${TARGET}"
113-
cross build --release --target ${TARGET} -p goose-server
115+
cross build --release --target ${TARGET} -p goose-server --features vulkan
114116
115117
- name: Copy binaries into Electron folder
116118
run: |

.github/workflows/bundle-desktop-windows.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,22 @@ jobs:
8282
rustup show
8383
rustup target add x86_64-pc-windows-msvc
8484
85+
- name: Install Vulkan SDK (Windows)
86+
shell: pwsh
87+
run: |
88+
choco install vulkan-sdk --yes --no-progress
89+
$sdk = Get-ChildItem "C:\VulkanSDK" -Directory | Sort-Object Name -Descending | Select-Object -First 1
90+
if (-not $sdk) { throw "Vulkan SDK installation did not create C:\VulkanSDK" }
91+
"VULKAN_SDK=$($sdk.FullName)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
92+
8593
- name: Build Windows executable
8694
shell: bash
8795
run: |
8896
echo "🚀 Building Windows executable..."
8997
if [ "${{ inputs.windows_variant }}" = "cuda" ]; then
90-
cargo build --release --target x86_64-pc-windows-msvc -p goose-server --features cuda
98+
cargo build --release --target x86_64-pc-windows-msvc -p goose-server --features "cuda vulkan"
9199
else
92-
cargo build --release --target x86_64-pc-windows-msvc -p goose-server
100+
cargo build --release --target x86_64-pc-windows-msvc -p goose-server --features vulkan
93101
fi
94102
95103
# Verify build succeeded

Cross.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ pre-build = [
1111
apt-get update --fix-missing && apt-get install -y \
1212
curl \
1313
unzip \
14+
glslc \
1415
pkg-config \
1516
libssl-dev:arm64 \
1617
libdbus-1-dev:arm64 \
1718
libxcb1-dev:arm64 \
19+
libvulkan-dev:arm64 \
1820
gcc-10
1921
"""
2022
]
@@ -26,10 +28,12 @@ pre-build = [
2628
apt-get update && apt-get install -y \
2729
curl \
2830
unzip \
31+
glslc \
2932
pkg-config \
3033
libssl-dev \
3134
libdbus-1-dev \
3235
libxcb1-dev \
36+
libvulkan-dev \
3337
gcc-10
3438
"""
3539
]

crates/goose-server/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ code-mode = ["goose/code-mode"]
1717
local-inference = ["goose/local-inference"]
1818
aws-providers = ["goose/aws-providers"]
1919
cuda = ["goose/cuda", "local-inference"]
20+
vulkan = ["goose/vulkan", "local-inference"]
2021
telemetry = ["goose/telemetry"]
2122
otel = ["goose/otel"]
2223
rustls-tls = [

crates/goose/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ aws-providers = [
3737
"dep:aws-sdk-sagemakerruntime",
3838
]
3939
cuda = ["local-inference", "candle-core/cuda", "candle-nn/cuda", "llama-cpp-2/cuda"]
40+
vulkan = ["local-inference", "llama-cpp-2/vulkan"]
4041
rustls-tls = [
4142
"reqwest/rustls",
4243
"rmcp/reqwest",

documentation/docs/getting-started/installation.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ import { PanelLeft } from 'lucide-react';
9898
3. Run `sudo dpkg -i (filename).deb`
9999
4. Launch goose from the app menu
100100

101+
:::info Linux Vulkan support
102+
Linux Desktop packages now include Vulkan local inference support by default. The `.deb` and `.rpm` packages declare the Vulkan loader dependency, but you still need a working Vulkan-capable driver/ICD for GPU acceleration.
103+
:::
104+
101105
:::tip Updating goose
102106
It's best to periodically [update goose](/docs/guides/updating-goose).
103107
:::
@@ -117,6 +121,10 @@ import { PanelLeft } from 'lucide-react';
117121
curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | CONFIGURE=false bash
118122
```
119123

124+
:::info Linux Vulkan support
125+
The standard Linux CLI build includes Vulkan local inference support. If you want GPU acceleration, install a Vulkan loader and a working Vulkan driver/ICD for your system.
126+
:::
127+
120128
:::tip Updating goose
121129
It's best to keep goose updated. To update goose, run:
122130
```sh
@@ -142,7 +150,7 @@ import { PanelLeft } from 'lucide-react';
142150
2. Run the executable file to launch the goose Desktop application.
143151

144152
:::info Windows variants
145-
`Windows` is the standard general-purpose build. `Windows CUDA` is for NVIDIA GPUs with a compatible CUDA driver/runtime.
153+
`Windows Vulkan` is the standard general-purpose build with Vulkan local inference support on supported GPUs. `Windows CUDA` is the NVIDIA-optimized variant for systems with a compatible CUDA driver/runtime.
146154
:::
147155

148156
:::tip Updating goose
@@ -156,7 +164,7 @@ import { PanelLeft } from 'lucide-react';
156164
- **MSYS2**: Available from [msys2.org](https://www.msys2.org/)
157165
- **PowerShell**: Available on Windows 10/11 by default
158166

159-
Use the standard build for the general-purpose Windows install. Use the CUDA variant if you have an NVIDIA GPU with a compatible CUDA driver/runtime.
167+
Use the standard build for the general-purpose Windows install with Vulkan local inference support on supported GPUs. Use the CUDA variant if you have an NVIDIA GPU with a compatible CUDA driver/runtime and want the NVIDIA-optimized build.
160168

161169
**Git Bash / MSYS2: Standard**
162170

documentation/src/components/WindowsDesktopInstallButtons.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const WindowsDesktopInstallButtons = () => {
1010
className="button button--primary button--lg"
1111
to="https://github.com/aaif-goose/goose/releases/download/stable/Goose-win32-x64.zip"
1212
>
13-
<IconDownload /> Windows
13+
<IconDownload /> Windows Vulkan
1414
</Link>
1515
<Link
1616
className="button button--primary button--lg"

download_cli.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# $env:GOOSE_VERSION - Optional: specific version to install (e.g., "v1.0.25"). Can be in the format vX.Y.Z, vX.Y.Z-suffix, or X.Y.Z
1717
# $env:GOOSE_PROVIDER - Optional: provider for goose
1818
# $env:GOOSE_MODEL - Optional: model for goose
19-
# $env:GOOSE_WINDOWS_VARIANT - Optional: Windows package variant to install ("standard" or "cuda")
19+
# $env:GOOSE_WINDOWS_VARIANT - Optional: Windows package variant to install ("standard" for the Vulkan-enabled general-purpose build, or "cuda" for the NVIDIA-optimized build)
2020
# $env:CANARY - Optional: if set to "true", downloads from canary release instead of stable
2121
# $env:CONFIGURE - Optional: if set to "false", disables running goose configure interactively
2222
##############################################################################

download_cli.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ set -eu
1818
# GOOSE_VERSION - Optional: specific version to install (e.g., "v1.0.25"). Overrides CANARY. Can be in the format vX.Y.Z, vX.Y.Z-suffix, or X.Y.Z
1919
# GOOSE_PROVIDER - Optional: provider for goose
2020
# GOOSE_MODEL - Optional: model for goose
21-
# GOOSE_WINDOWS_VARIANT - Optional: Windows package variant to install (`standard` or `cuda`)
21+
# GOOSE_WINDOWS_VARIANT - Optional: Windows package variant to install (`standard` for the Vulkan-enabled general-purpose build, or `cuda` for the NVIDIA-optimized build)
2222
# CANARY - Optional: if set to "true", downloads from canary release instead of stable
2323
# CONFIGURE - Optional: if set to "false", disables running goose configure interactively
2424
# ** other provider specific environment variables (eg. DATABRICKS_HOST)

0 commit comments

Comments
 (0)