diff --git a/network-poc/USER-README.md b/network-poc/USER-README.md index a139de7..26de717 100644 --- a/network-poc/USER-README.md +++ b/network-poc/USER-README.md @@ -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"]`). -## 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):** -```bash -google-chrome --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist --use-angle=vulkan --ozone-platform=x11 https://kipina.studio +- Kirjoita selaimen osoiteriville: `chrome://flags` (tai `brave://flags` / `edge://flags`) +- Etsi hakusanalla **WebGPU** tai **Unsafe WebGPU** (`#enable-unsafe-webgpu`). +- 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):** -```bash -flatpak run com.google.Chrome --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist --use-angle=vulkan --ozone-platform=x11 https://kipina.studio - -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 +- Kirjoita osoiteriville: `about:config` +- Etsi `dom.webgpu.enabled` ja aseta se arvoon `true`. +- Etsi `gfx.webgpu.force-enabled` ja aseta se arvoon `true`. ## Projektin rakenne diff --git a/network-poc/node/Cargo.toml b/network-poc/node/Cargo.toml index e7201ae..26cd341 100644 --- a/network-poc/node/Cargo.toml +++ b/network-poc/node/Cargo.toml @@ -26,9 +26,9 @@ web-sys = { version = "0.3.68", features = [ ] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -burn = { version = "0.14.0", features = ["wgpu", "ndarray"] } -burn-wgpu = "0.14.0" -burn-ndarray = "0.14.0" +burn = { version = "0.21.0-pre.2", default-features = false, features = ["wgpu", "ndarray"] } +burn-wgpu = "0.21.0-pre.2" +burn-ndarray = "0.21.0-pre.2" wasm-bindgen-futures = "0.4" console_error_panic_hook = "0.1.7" reqwest = { version = "0.12", default-features = false, features = ["json"] } diff --git a/network-poc/node/src/burn_smollm/loader.rs b/network-poc/node/src/burn_smollm/loader.rs index d5cf29b..6c1fcd3 100644 --- a/network-poc/node/src/burn_smollm/loader.rs +++ b/network-poc/node/src/burn_smollm/loader.rs @@ -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::Device as CandleDevice; use burn::module::Param; diff --git a/network-poc/node/src/smollm.rs b/network-poc/node/src/smollm.rs index 0a622d4..feb80a2 100644 --- a/network-poc/node/src/smollm.rs +++ b/network-poc/node/src/smollm.rs @@ -120,11 +120,10 @@ pub async fn run_smollm_inference(prompt: String, ws: Rc>) { let use_gpu = crate::HAS_WEBGPU.load(std::sync::atomic::Ordering::SeqCst); if use_gpu { - console_log!("[SmolLM] Alustetaan Burn WebGPU..."); - burn_wgpu::init_async::(&Default::default(), Default::default()).await; + console_log!("[SmolLM] Burn WebGPU inferenssi..."); run_burn_inference::(prompt, model_bytes, tokenizer, ws, perf.clone()).await; } else { - console_log!("[SmolLM] Käytetään CPU NdArrayta (vanha tapa)..."); + console_log!("[SmolLM] Burn NdArray (CPU) inferenssi..."); run_burn_inference::(prompt, model_bytes, tokenizer, ws, perf.clone()).await; } } diff --git a/network-poc/static/index.html b/network-poc/static/index.html index 4cac502..99f97f0 100644 --- a/network-poc/static/index.html +++ b/network-poc/static/index.html @@ -1020,7 +1020,14 @@ try { const adapter = await navigator.gpu.requestAdapter(); 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 maxBuf = Number(adapter.limits.maxBufferSize || 0); // maxBufferSize antaa arvion VRAM:sta — tyypillisesti ~25% todellisesta @@ -1297,7 +1304,15 @@ if (navigator.gpu) { try { 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) {} } await start_agent_node(wsUrl, coderHasWebGPU, JSON.stringify(deviceInfo), taskId);