kylä lähtee!

This commit is contained in:
2026-04-02 16:19:57 +03:00
parent 92c952c07a
commit 6cdd695a3b
5 changed files with 33 additions and 31 deletions

View File

@@ -94,32 +94,20 @@ CARGO_TARGET_DIR=target-native HUB_URL=wss://kipina.studio/ws cargo run --releas
Jos CUDA:a ei ole, poista feature: `candle-core = { version = "0.8" }` (ilman `features = ["cuda"]`). Jos CUDA:a ei ole, poista feature: `candle-core = { version = "0.8" }` (ilman `features = ["cuda"]`).
## WebGPU-asetukset selaimessa ## Kuinka saat WebGPU:n aktivoitua selaimessasi:
WebGPU ei ole oletuksena päällä kaikissa selaimissa. Jos "Liity laskentaverkkoon" -nappi käynnistää CPU-fallbackin vaikka koneessa on näytönohjain: Jos käytät Chromea, Bravea tai Edgeä (Chromium-pohjainen):
**Chrome / Brave (Linux APT/DEB):** - Kirjoita selaimen osoiteriville: `chrome://flags` (tai `brave://flags` / `edge://flags`)
```bash - Etsi hakusanalla **WebGPU** tai **Unsafe WebGPU** (`#enable-unsafe-webgpu`).
google-chrome --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist --use-angle=vulkan --ozone-platform=x11 https://kipina.studio - Vaihda asetus tilaan **Enabled**.
- *(Linuxilla erityisesti saatat joutua käynnistämään selaimen terminaalin kautta komennoilla `--enable-unsafe-webgpu --enable-features=Vulkan`, aivan kuten olit tehnyt tämän kehityssession alussa!)*
brave-browser --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist --use-angle=vulkan --ozone-platform=x11 https://kipina.studio Jos käytät Firefoxia:
```
**Chrome / Brave (Linux Flatpak):** - Kirjoita osoiteriville: `about:config`
```bash - Etsi `dom.webgpu.enabled` ja aseta se arvoon `true`.
flatpak run com.google.Chrome --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist --use-angle=vulkan --ozone-platform=x11 https://kipina.studio - Etsi `gfx.webgpu.force-enabled` ja aseta se arvoon `true`.
flatpak run com.brave.Browser --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist --use-angle=vulkan --ozone-platform=x11 https://kipina.studio
```
**Chrome / Brave (Windows / Mac):**
1. Avaa `chrome://flags`
2. Ota käyttöön "WebGPU" ja "Vulkan"
3. Käynnistä selain uudelleen
**Firefox:** `about:config``dom.webgpu.enabled` = `true`
**Safari:** Develop → Feature Flags → WebGPU
## Projektin rakenne ## Projektin rakenne

View File

@@ -26,9 +26,9 @@ web-sys = { version = "0.3.68", features = [
] } ] }
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0" serde_json = "1.0"
burn = { version = "0.14.0", features = ["wgpu", "ndarray"] } burn = { version = "0.21.0-pre.2", default-features = false, features = ["wgpu", "ndarray"] }
burn-wgpu = "0.14.0" burn-wgpu = "0.21.0-pre.2"
burn-ndarray = "0.14.0" burn-ndarray = "0.21.0-pre.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
console_error_panic_hook = "0.1.7" console_error_panic_hook = "0.1.7"
reqwest = { version = "0.12", default-features = false, features = ["json"] } reqwest = { version = "0.12", default-features = false, features = ["json"] }

View File

@@ -1,4 +1,4 @@
use burn::tensor::{backend::Backend, Tensor, Data}; use burn::tensor::{backend::Backend, Tensor, TensorData};
use candle_core::safetensors; use candle_core::safetensors;
use candle_core::Device as CandleDevice; use candle_core::Device as CandleDevice;
use burn::module::Param; use burn::module::Param;

View File

@@ -120,11 +120,10 @@ pub async fn run_smollm_inference(prompt: String, ws: Rc<RefCell<WebSocket>>) {
let use_gpu = crate::HAS_WEBGPU.load(std::sync::atomic::Ordering::SeqCst); let use_gpu = crate::HAS_WEBGPU.load(std::sync::atomic::Ordering::SeqCst);
if use_gpu { if use_gpu {
console_log!("[SmolLM] Alustetaan Burn WebGPU..."); console_log!("[SmolLM] Burn WebGPU inferenssi...");
burn_wgpu::init_async::<burn_wgpu::AutoGraphicsApi>(&Default::default(), Default::default()).await;
run_burn_inference::<burn::backend::Wgpu>(prompt, model_bytes, tokenizer, ws, perf.clone()).await; run_burn_inference::<burn::backend::Wgpu>(prompt, model_bytes, tokenizer, ws, perf.clone()).await;
} else { } else {
console_log!("[SmolLM] Käytetään CPU NdArrayta (vanha tapa)..."); console_log!("[SmolLM] Burn NdArray (CPU) inferenssi...");
run_burn_inference::<burn::backend::NdArray>(prompt, model_bytes, tokenizer, ws, perf.clone()).await; run_burn_inference::<burn::backend::NdArray>(prompt, model_bytes, tokenizer, ws, perf.clone()).await;
} }
} }

View File

@@ -1020,7 +1020,14 @@
try { try {
const adapter = await navigator.gpu.requestAdapter(); const adapter = await navigator.gpu.requestAdapter();
if (adapter) { if (adapter) {
hasWebGPU = true; try {
const testDevice = await adapter.requestDevice({ requiredLimits: { maxInterStageShaderComponents: 60 } });
hasWebGPU = true;
testDevice.destroy();
} catch(e) {
console.log("[WebGPU] Legacy-tuki rajoittaa WebGPU:n: " + e.message);
hasWebGPU = false; // Fallback to CPU NdArray avoiding WASM panic
}
const info = adapter.info || {}; const info = adapter.info || {};
const maxBuf = Number(adapter.limits.maxBufferSize || 0); const maxBuf = Number(adapter.limits.maxBufferSize || 0);
// maxBufferSize antaa arvion VRAM:sta — tyypillisesti ~25% todellisesta // maxBufferSize antaa arvion VRAM:sta — tyypillisesti ~25% todellisesta
@@ -1297,7 +1304,15 @@
if (navigator.gpu) { if (navigator.gpu) {
try { try {
const adapter = await navigator.gpu.requestAdapter(); const adapter = await navigator.gpu.requestAdapter();
coderHasWebGPU = !!adapter; if (adapter) {
try {
const testDevice = await adapter.requestDevice({ requiredLimits: { maxInterStageShaderComponents: 60 } });
coderHasWebGPU = true;
testDevice.destroy();
} catch(e) {
coderHasWebGPU = false;
}
}
} catch(e) {} } catch(e) {}
} }
await start_agent_node(wsUrl, coderHasWebGPU, JSON.stringify(deviceInfo), taskId); await start_agent_node(wsUrl, coderHasWebGPU, JSON.stringify(deviceInfo), taskId);