kylä lähtee!
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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"] }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
if use_gpu {
|
||||
console_log!("[SmolLM] Alustetaan Burn WebGPU...");
|
||||
burn_wgpu::init_async::<burn_wgpu::AutoGraphicsApi>(&Default::default(), Default::default()).await;
|
||||
console_log!("[SmolLM] Burn WebGPU inferenssi...");
|
||||
run_burn_inference::<burn::backend::Wgpu>(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::<burn::backend::NdArray>(prompt, model_bytes, tokenizer, ws, perf.clone()).await;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1020,7 +1020,14 @@
|
||||
try {
|
||||
const adapter = await navigator.gpu.requestAdapter();
|
||||
if (adapter) {
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user