hetki ennen webgpu inferenssiä

This commit is contained in:
2026-04-02 12:49:40 +03:00
parent d2920e5ab4
commit e1326b145e
10 changed files with 375 additions and 80 deletions

View File

@@ -15,20 +15,29 @@ Kipinä Agentic Network on hajautettu tekoälylaskentaverkko, jossa selaimet ja
jos WebGPU ei tuettu
```
**Hub** jakaa tokenisointitehtäviä satunnaisesti 10 sekunnin välein. Solmut tokenisoivat syötteen Qwen2.5-Coder-tokenizerin avulla ja palauttavat tuloksen. Hub näyttää tulokset terminaalissa ja välittää ne dashboardiin.
**Hub** jakaa tehtäviä (tokenisointiparit, LLM-promptit, kooditehtävät) 10 sekunnin välein. Solmut käsittelevät vain valitsemansa tehtävätyypin mukaisia viestejä.
## Kaksi tapaa osallistua verkkoon
## Kolme tapaa osallistua verkkoon
### 1. Selainsolmu (Wasm + WebGPU)
- Avaa `http://localhost:3000` | `https://kipina.studio` selaimessa ja klikkaa "Liity laskentaverkkoon"
- Selain tunnistaa automaattisesti WebGPU-tuen — jos ei löydy, käytetään CPU-fallbackia
- Tokenizer ladataan HuggingFacesta ensimmäisellä kerralla ja tallennetaan IndexedDB:hen
- GPU-kuormitusta voi säätää sliderilla (075 %)
### 1. Selainsolmu — Laskentaverkko
- Avaa `http://localhost:3000` | `https://kipina.studio` ja valitse tehtävä:
- **Tokenisointivertailu** — EN/FI-kieliparien BPE-tokenisointitehokkuus (~7 MB lataus)
- **SmolLM 135M** — kevyt LLM-inferenssi (~269 MB, ~1.2 tok/s)
- **Qwen2.5 0.5B** — tehokkaampi LLM (~990 MB, ~0.4 tok/s)
- **Phi-3 Mini 3.8B** — vain native-nodella
- WebGPU tunnistetaan automaattisesti, CPU-fallback jos ei tuettu
- Mallit ja tokenizerit cachetetaan IndexedDB:hen
### 2. Natiivi-node (Rust + NVML)
### 2. Selainsolmu — Koodilaboratorio
- Erillinen välilehti: **Qwen2.5-Coder** koodigenerointi
- Valittavissa **0.5B** (nopea) tai **3B** (laadukas, 6.2 GB lataus)
- Oma promptti: kirjoita Python-ohjelmointitehtävä ja paina "Generate"
- Syntaksikorostettu koodivastaus
### 3. Natiivi-node (Rust + CUDA/CPU)
- Qwen2.5-0.5B-Instruct inferenssi CUDA:lla (~50-100 tok/s RTX 4090) tai CPU:lla (~11 tok/s)
- Kerää nvidia-smi-tason laitteistotiedot: GPU-nimi, VRAM, lämpötila, kuormitus
- Raportoi järjestelmätiedot: CPU-malli, ytimet, RAM, OS
- Yhdistää hubiin ja vastaanottaa tehtäviä
- Lataa mallin automaattisesti HuggingFace Hubista (~990 MB, cachetetaan)
## Käynnistys
@@ -65,23 +74,26 @@ CARGO_TARGET_DIR=target-native HUB_URL=ws://localhost:3000/ws ALLOCATED_GB=4 car
CARGO_TARGET_DIR=target-native HUB_URL=wss://kipina.studio/ws ALLOCATED_GB=4 cargo run --release -p native-node
```
### CUDA-tuki (valinnainen)
### CUDA-tuki
Jos koneessa on NVIDIA GPU ja CUDA toolkit:
CUDA on oletuksena päällä native-nodessa. Vaatii `nvidia-cuda-toolkit`:n:
```bash
# Asenna CUDA toolkit (Ubuntu/Pop!_OS)
# Asenna (Ubuntu/Pop!_OS)
sudo apt install nvidia-cuda-toolkit
# Muokkaa native-node/Cargo.toml:
# candle-core = { version = "0.8", features = ["cuda"] }
# Tarkista
nvcc --version
# Aja — malli käyttää automaattisesti GPU:ta
# Aja — tunnistaa CUDA:n automaattisesti, fallback CPU:lle
CARGO_TARGET_DIR=target-native HUB_URL=ws://localhost:3000/ws cargo run --release -p native-node
CARGO_TARGET_DIR=target-native HUB_URL=ws://kipina.studio/ws cargo run --release -p native-node
# Tuotantoon
CARGO_TARGET_DIR=target-native HUB_URL=wss://kipina.studio/ws cargo run --release -p native-node
```
Jos CUDA:a ei ole, poista feature: `candle-core = { version = "0.8" }` (ilman `features = ["cuda"]`).
## WebGPU-asetukset selaimessa
WebGPU ei ole oletuksena päällä kaikissa selaimissa. Jos "Liity laskentaverkkoon" -nappi käynnistää CPU-fallbackin vaikka koneessa on näytönohjain:
@@ -114,19 +126,31 @@ flatpak run com.brave.Browser --enable-unsafe-webgpu --enable-features=Vulkan --
```
network-poc/
├── hub/ # Keskuspalvelin (Rust + Axum)
│ └── src/main.rs # WebSocket-reititin, tehtävien jakelu, statistiikat
│ └── src/
│ ├── main.rs # WebSocket-reititin, tehtävien jakelu, admin HTML, Basic Auth
│ └── db.rs # SQLite: node_sessions, pair_results
├── node/ # Selainsolmu (Rust → Wasm)
│ └── src/
│ ├── lib.rs # WebGPU/NdArray-laskenta, tokenisaatio, WS-yhteys
── storage.rs # IndexedDB-välimuisti (tokenizer)
├── native-node/ # Natiivi-solmu (Rust)
└── src/main.rs # NVML GPU-tunnistus, sysinfo, WS-yhteys
│ ├── lib.rs # Wasm-entrypoint, tehtävävalinta, WS-handler
── storage.rs # IndexedDB-välimuisti
│ ├── sampling.rs # Top-k sampling (EOS-penaltti)
├── smollm.rs # SmolLM 135M inferenssi
│ ├── qwen.rs # Qwen2.5 0.5B inferenssi
│ ├── qwen_coder.rs # Qwen2.5-Coder 0.5B/3B koodigenerointi
│ └── phi3.rs # Phi-3 placeholder
├── native-node/ # Natiivi-solmu (Rust + CUDA)
│ └── src/
│ ├── main.rs # GPU-tunnistus, WS-yhteys, tehtäväkäsittely
│ └── inference.rs # Qwen2.5-0.5B Candle-inferenssi (CUDA/CPU)
├── static/
│ ├── index.html # Dashboard-käyttöliittymä
│ ├── index.html # Dashboard + Koodilaboratorio
│ └── pkg/ # Wasm-build (generoidaan)
├── docker-compose.yml
├── Dockerfile.dev # Hub + Wasm-build
── Dockerfile.native-node
├── deploy.sh # Lokaali build → palvelimelle
├── docker-compose.yml # Kehitys
── docker-compose.prod.yml # Tuotanto (Caddy + Hub)
├── docker-compose.client.yml # Client-nodejen Docker
├── Dockerfile.prod # Tuotanto-image (cache mount)
└── Caddyfile.prod # TLS + reverse proxy
```
## Ympäristömuuttujat
@@ -135,15 +159,27 @@ network-poc/
|---|---|---|
| `HUB_URL` | `ws://hub:3000/ws` | Hub-palvelimen WebSocket-osoite (native-node) |
| `ALLOCATED_GB` | `4` | Solmun varaama muisti verkosta (GB) |
| `ADMIN_PASSWORD` | `kipina` | Admin-sivun ja API:n salasana (Basic Auth) |
| `DATABASE_PATH` | `nodes.db` | SQLite-tietokannan polku |
| `STATIC_DIR` | `../static` | Staattisten tiedostojen kansio |
## Kehitysvaihe
## Admin-sivu
Tämä on proof-of-concept. Toimivat osat:
- Hub-palvelin, WebSocket-viestintä, dashboard
- WebGPU-tensorilaskenta selaimessa (Burn + Wgpu)
- CPU-fallback selaimissa ilman WebGPU-tukea (Burn + NdArray)
- Natiivi-node nvidia-smi-tason laitteistotiedoilla
- Qwen2.5-Coder-tokenizer + IndexedDB-välimuisti
- GPU-kuormituksen säätö (duty cycle throttling)
`https://kipina.studio/admin` (Basic Auth, salasana: `ADMIN_PASSWORD`)
Seuraavaksi: oikea LLM-inferenssi hajautetusti (mallin painojen lataus, transformer-arkkitehtuuri Wasm/WebGPU:lla).
Sisältää:
- Node-sessiot: IP, laitetiedot, GPU, WebGPU-tuki, tehtävätyyppi, uptime
- Tokenisointitulokset: EN/FI-vertailut, ylikustannus-%
- Yhteenvetotilastot: sessiot, WebGPU vs CPU, keskiarvot
## Projektin tila
Toimivat ominaisuudet:
- Tokenisointivertailu (EN/FI, BPE, top-k sampling)
- SmolLM 135M inferenssi selaimessa (Candle + Wasm)
- Qwen2.5 0.5B inferenssi selaimessa (Candle + Wasm)
- Qwen2.5-Coder 0.5B/3B koodigenerointi (Koodilaboratorio-välilehti)
- Native node + CUDA (RTX 4090: ~50-100 tok/s)
- Admin-dashboard + SQLite + Basic Auth
- Deploy-skripti (lokaali build → palvelin)
- WebGPU + CPU fallback, GPU-tunnistus (NVIDIA/AMD/Apple)