186 lines
7.7 KiB
Markdown
186 lines
7.7 KiB
Markdown
# Kipinä Agentic Network — Hajautettu AI-laskentaverkko
|
|
|
|
Kipinä Agentic Network on hajautettu tekoälylaskentaverkko, jossa selaimet ja natiivit solmut tarjoavat GPU-laskentatehoa yhteiseen käyttöön. Hub-palvelin koordinoi tehtäviä ja solmut suorittavat ne WebGPU:lla tai CPU:lla.
|
|
|
|
## Miten se toimii
|
|
|
|
```
|
|
┌──────────┐ WebSocket ┌──────────┐ WebSocket ┌──────────────┐
|
|
│ Selain │◄─────────────────►│ Hub │◄─────────────────►│ Natiivi-node │
|
|
│ (Wasm) │ tehtävät/tulokset│ (Axum) │ tehtävät/tulokset│ (Rust) │
|
|
│ WebGPU │ │ :3000 │ │ NVML/sysinfo │
|
|
└──────────┘ └──────────┘ └──────────────┘
|
|
│ │
|
|
└── CPU fallback (NdArray) └── Dashboard + statistiikat
|
|
jos WebGPU ei tuettu
|
|
```
|
|
|
|
**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ä.
|
|
|
|
## Kolme tapaa osallistua verkkoon
|
|
|
|
### 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. 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
|
|
- Lataa mallin automaattisesti HuggingFace Hubista (~990 MB, cachetetaan)
|
|
|
|
## Käynnistys
|
|
|
|
### Docker Compose (suositeltu)
|
|
|
|
```bash
|
|
# Hub + selainsolmu
|
|
docker compose up
|
|
|
|
# Hub + selainsolmu + natiivi-node (vaatii nvidia-container-toolkit)
|
|
docker compose --profile native up
|
|
```
|
|
|
|
Dashboard avautuu osoitteessa http://localhost:3000 | https://kipina.studio
|
|
|
|
### Ilman Dockeria
|
|
|
|
```bash
|
|
# 1. Rakenna Wasm-paketti (vaatii wasm-pack)
|
|
cd node && wasm-pack build --target web --out-dir ../static/pkg && cd ..
|
|
|
|
# 2. Käynnistä hub (terminaali 1)
|
|
cargo run -p hub
|
|
|
|
# 3. Avaa selain: http://localhost:3000 | https://kipina.studio
|
|
|
|
# 4. Valinnainen: natiivi-node LLM-inferenssillä (terminaali 2)
|
|
# Lataa Qwen2.5-0.5B automaattisesti HuggingFacesta (~990 MB, cachetetaan)
|
|
# Release-moodissa ~11 tok/s CPU:lla (32 ydintä)
|
|
CARGO_TARGET_DIR=target-native HUB_URL=ws://localhost:3000/ws ALLOCATED_GB=4 cargo run --release -p native-node
|
|
|
|
|
|
# Tai yhdistä tuotantopalvelimeen:
|
|
CARGO_TARGET_DIR=target-native HUB_URL=wss://kipina.studio/ws ALLOCATED_GB=4 cargo run --release -p native-node
|
|
```
|
|
|
|
### CUDA-tuki
|
|
|
|
CUDA on oletuksena päällä native-nodessa. Vaatii `nvidia-cuda-toolkit`:n:
|
|
|
|
```bash
|
|
# Asenna (Ubuntu/Pop!_OS)
|
|
sudo apt install nvidia-cuda-toolkit
|
|
|
|
# Tarkista
|
|
nvcc --version
|
|
|
|
# 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
|
|
|
|
# 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:
|
|
|
|
**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
|
|
|
|
brave-browser --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist --use-angle=vulkan --ozone-platform=x11 https://kipina.studio
|
|
```
|
|
|
|
**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
|
|
|
|
## Projektin rakenne
|
|
|
|
```
|
|
network-poc/
|
|
├── hub/ # Keskuspalvelin (Rust + Axum)
|
|
│ └── 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 # 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 + Koodilaboratorio
|
|
│ └── pkg/ # Wasm-build (generoidaan)
|
|
├── 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
|
|
|
|
| Muuttuja | Oletus | Kuvaus |
|
|
|---|---|---|
|
|
| `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 |
|
|
|
|
## Admin-sivu
|
|
|
|
`https://kipina.studio/admin` (Basic Auth, salasana: `ADMIN_PASSWORD`)
|
|
|
|
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)
|