Flatten QUICKSTART commands to single lines for easier copy-paste.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Dobromir Popov
2026-07-08 17:38:00 +02:00
parent 7419ace926
commit 194fa1d926

View File

@@ -131,10 +131,7 @@ URL that nodes should use for outbound relay connections:
.venv/bin/meshnet-relay --host 0.0.0.0 --port 8765 .venv/bin/meshnet-relay --host 0.0.0.0 --port 8765
# Terminal 2 — tracker # Terminal 2 — tracker
.venv/bin/meshnet-tracker start \ .venv/bin/meshnet-tracker start --host 0.0.0.0 --port 8081 --relay-url wss://ai.neuron.d-popov.com/ws
--host 0.0.0.0 \
--port 8081 \
--relay-url wss://ai.neuron.d-popov.com/ws
``` ```
If this host sits behind Nginx Proxy Manager, point `/` and `/v1/*` at tracker If this host sits behind Nginx Proxy Manager, point `/` and `/v1/*` at tracker
@@ -249,9 +246,7 @@ meshnet-node start --tracker https://ai.neuron.d-popov.com --model Qwen/Qwen2.5-
If the wrong entry point is shadowing, invoke via the full conda path: If the wrong entry point is shadowing, invoke via the full conda path:
```powershell ```powershell
C:\Users\popov\miniforge3\Scripts\meshnet-node.exe start ` C:\Users\popov\miniforge3\Scripts\meshnet-node.exe start --tracker https://ai.neuron.d-popov.com --model Qwen/Qwen2.5-0.5B-Instruct
--tracker https://ai.neuron.d-popov.com `
--model Qwen/Qwen2.5-0.5B-Instruct
``` ```
#### Option B — isolated virtualenv (fresh machine, no existing torch) #### Option B — isolated virtualenv (fresh machine, no existing torch)
@@ -297,12 +292,7 @@ Use the IPv4 address on the active Ethernet/Wi-Fi adapter, for example
Administrator once: Administrator once:
```powershell ```powershell
New-NetFirewallRule ` New-NetFirewallRule -DisplayName "Meshnet node 8005" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8005
-DisplayName "Meshnet node 8005" `
-Direction Inbound `
-Action Allow `
-Protocol TCP `
-LocalPort 8005
``` ```
5. Start the Windows node from normal PowerShell. Replace the tracker and 5. Start the Windows node from normal PowerShell. Replace the tracker and
@@ -310,18 +300,10 @@ advertised host values with your actual LAN addresses:
```powershell ```powershell
$env:HF_HOME = "D:\DEV\models" $env:HF_HOME = "D:\DEV\models"
.\.venv\Scripts\meshnet-node.exe start --tracker http://192.168.0.179:8081 --model Qwen/Qwen2.5-0.5B-Instruct --shard-start 12 --shard-end 23 --quantization bfloat16 --host 0.0.0.0 --advertise-host 192.168.0.42 --port 8005
.\.venv\Scripts\meshnet-node.exe start `
--tracker http://192.168.0.179:8081 `
--model Qwen/Qwen2.5-0.5B-Instruct `
--shard-start 12 --shard-end 23 `
--quantization bfloat16 `
--host 0.0.0.0 `
--advertise-host 192.168.0.42 `
--port 8005
``` ```
One-line variants (direct LAN — node must be reachable by IP from other machines): Other start examples (direct LAN — node must be reachable by IP from other machines):
```powershell ```powershell
.\.venv\Scripts\meshnet-node.exe start --tracker http://192.168.0.179:8081 --model Qwen/Qwen2.5-0.5B-Instruct --advertise-host 192.168.0.20 .\.venv\Scripts\meshnet-node.exe start --tracker http://192.168.0.179:8081 --model Qwen/Qwen2.5-0.5B-Instruct --advertise-host 192.168.0.20
@@ -466,10 +448,7 @@ After NPM is correct, start relay and tracker on the LAN machine:
.venv/bin/meshnet-relay --host 0.0.0.0 --port 8765 .venv/bin/meshnet-relay --host 0.0.0.0 --port 8765
# Terminal 2 — tracker (advertises relay to nodes) # Terminal 2 — tracker (advertises relay to nodes)
.venv/bin/meshnet-tracker start \ .venv/bin/meshnet-tracker start --host 0.0.0.0 --port 8081 --relay-url wss://ai.neuron.d-popov.com/ws
--host 0.0.0.0 \
--port 8081 \
--relay-url wss://ai.neuron.d-popov.com/ws
``` ```
Nodes using `https://ai.neuron.d-popov.com` should then log: Nodes using `https://ai.neuron.d-popov.com` should then log:
@@ -491,9 +470,7 @@ opens a persistent outbound WebSocket. If the relay connection drops, the node
keeps retrying it. keeps retrying it.
```bash ```bash
.venv/bin/meshnet-node start \ .venv/bin/meshnet-node start --tracker https://ai.neuron.d-popov.com --model Qwen/Qwen2.5-0.5B-Instruct
--tracker https://ai.neuron.d-popov.com \
--model Qwen/Qwen2.5-0.5B-Instruct
``` ```
No authentication is required in the prototype. The first public node for a model No authentication is required in the prototype. The first public node for a model
@@ -555,16 +532,10 @@ In WSL2 (which gets a `172.x.x.x` virtual IP — unreachable from other machines
```bash ```bash
# WSL2 Terminal 1 — head node (layers 011, handles chat requests) # WSL2 Terminal 1 — head node (layers 011, handles chat requests)
.venv/bin/meshnet-node start \ .venv/bin/meshnet-node start --tracker https://ai.neuron.d-popov.com --model Qwen/Qwen2.5-0.5B-Instruct --shard-start 0 --shard-end 11
--tracker https://ai.neuron.d-popov.com \
--model Qwen/Qwen2.5-0.5B-Instruct \
--shard-start 0 --shard-end 11
# WSL2 Terminal 2 — tail node (layers 1223) # WSL2 Terminal 2 — tail node (layers 1223)
.venv/bin/meshnet-node start \ .venv/bin/meshnet-node start --tracker https://ai.neuron.d-popov.com --model Qwen/Qwen2.5-0.5B-Instruct --shard-start 12 --shard-end 23
--tracker https://ai.neuron.d-popov.com \
--model Qwen/Qwen2.5-0.5B-Instruct \
--shard-start 12 --shard-end 23
``` ```
Both nodes connect to the relay automatically. When a chat request arrives at Node A, Both nodes connect to the relay automatically. When a chat request arrives at Node A,
@@ -573,14 +544,7 @@ it forwards activations to Node B via `wss://ai.neuron.d-popov.com/rpc/{peer_id_
Send inference through the tracker (which picks the head node and injects the route): Send inference through the tracker (which picks the head node and injects the route):
```bash ```bash
curl -s https://ai.neuron.d-popov.com/v1/chat/completions \ curl -s https://ai.neuron.d-popov.com/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-mesh-<your-key>" -d '{"model": "Qwen/Qwen2.5-0.5B-Instruct", "messages": [{"role": "user", "content": "What is 7 times 8?"}], "stream": false}' | python3 -m json.tool
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-mesh-<your-key>" \
-d '{
"model": "Qwen/Qwen2.5-0.5B-Instruct",
"messages": [{"role": "user", "content": "What is 7 times 8?"}],
"stream": false
}' | python3 -m json.tool
``` ```
Or send directly to Node A's local port (within WSL): Or send directly to Node A's local port (within WSL):
@@ -608,24 +572,18 @@ refill during testing.
```bash ```bash
# 1. Register (once) # 1. Register (once)
curl -s https://<tracker>/v1/auth/register \ curl -s https://<tracker>/v1/auth/register -H "Content-Type: application/json" -d '{"email": "you@example.com", "password": "hunter22-or-better"}'
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "password": "hunter22-or-better"}'
# → {"session_token": "...", ...} # → {"session_token": "...", ...}
# 2. Create an API key (session token from step 1) # 2. Create an API key (session token from step 1)
curl -s https://<tracker>/v1/account/keys -X POST \ curl -s https://<tracker>/v1/account/keys -X POST -H "Authorization: Bearer <session_token>"
-H "Authorization: Bearer <session_token>"
# → {"api_key": "sk-mesh-...", "caller_credit_granted": true} # → {"api_key": "sk-mesh-...", "caller_credit_granted": true}
# 3. Check balance / usage # 3. Check balance / usage
curl -s https://<tracker>/v1/account -H "Authorization: Bearer <session_token>" curl -s https://<tracker>/v1/account -H "Authorization: Bearer <session_token>"
# 4. (devnet trackers only) top up a key # 4. (devnet trackers only) top up a key
curl -s https://<tracker>/v1/account/topup -X POST \ curl -s https://<tracker>/v1/account/topup -X POST -H "Authorization: Bearer <session_token>" -H "Content-Type: application/json" -d '{"api_key": "sk-mesh-..."}'
-H "Authorization: Bearer <session_token>" \
-H "Content-Type: application/json" \
-d '{"api_key": "sk-mesh-..."}'
``` ```
Operator side: both features default to 1 USDT (`--starting-credit` / Operator side: both features default to 1 USDT (`--starting-credit` /
@@ -661,12 +619,7 @@ Keep this terminal open.
```bash ```bash
cd /run/media/popov/d/DEV/repos/d-popov.com/AI cd /run/media/popov/d/DEV/repos/d-popov.com/AI
HF_HOME=/run/media/popov/d/DEV/models \ HF_HOME=/run/media/popov/d/DEV/models .venv/bin/meshnet-node start --model Qwen/Qwen2.5-0.5B-Instruct --quantization bfloat16 --tracker http://localhost:8080 --port 8001
.venv/bin/meshnet-node start \
--model Qwen/Qwen2.5-0.5B-Instruct \
--quantization bfloat16 \
--tracker http://localhost:8080 \
--port 8001
``` ```
Shard range is **auto-detected** from the curated catalog (no network call for known Shard range is **auto-detected** from the curated catalog (no network call for known
@@ -708,13 +661,7 @@ If you started the node with `--port 8001`, send the request directly to that
head node: head node:
```bash Qwen2.5-0.5B-Instruct ```bash Qwen2.5-0.5B-Instruct
curl -s http://localhost:8001/v1/chat/completions \ curl -s http://localhost:8001/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "qwen2.5-0.5b", "messages": [{"role": "user", "content": "What is 7 times 8? Answer in one word."}], "stream": false}' | python3 -m json.tool
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-0.5b",
"messages": [{"role": "user", "content": "What is 7 times 8? Answer in one word."}],
"stream": false
}' | python3 -m json.tool
``` ```
If you did not pass `--port`, `meshnet-node start` uses the first free port at If you did not pass `--port`, `meshnet-node start` uses the first free port at
@@ -724,21 +671,13 @@ To test tracker routing/proxying, send the same OpenAI-compatible request to the
tracker, using either the full HuggingFace repo or the quick alias: tracker, using either the full HuggingFace repo or the quick alias:
```bash ```bash
curl -s http://localhost:8080/v1/chat/completions \ curl -s http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "qwen2.5-0.5b", "messages": [{"role": "user", "content": "What is 7 times 8? Answer in one word."}], "stream": false}' | python3 -m json.tool
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-0.5b",
"messages": [{"role": "user", "content": "What is 7 times 8? Answer in one word."}],
"stream": false
}' | python3 -m json.tool
``` ```
Or use the test script: Or use the test script:
```bash ```bash
.venv/bin/python scripts/test_lan_inference.py \ .venv/bin/python scripts/test_lan_inference.py --tracker http://localhost:8080 --gateway http://localhost:8001
--tracker http://localhost:8080 \
--gateway http://localhost:8001
``` ```
--- ---
@@ -749,24 +688,12 @@ Split Qwen2.5-0.5B's 24 layers across two node processes to test the sharded pip
**Node A — layers 011 (tracker mode, serves chat completions):** **Node A — layers 011 (tracker mode, serves chat completions):**
```bash ```bash
HF_HOME=/run/media/popov/d/DEV/models \ HF_HOME=/run/media/popov/d/DEV/models .venv/bin/meshnet-node start --model Qwen/Qwen2.5-0.5B-Instruct --shard-start 0 --shard-end 11 --quantization bfloat16 --tracker http://localhost:8080 --port 8001
.venv/bin/meshnet-node start \
--model Qwen/Qwen2.5-0.5B-Instruct \
--shard-start 0 --shard-end 11 \
--quantization bfloat16 \
--tracker http://localhost:8080 \
--port 8001
``` ```
**Node B — layers 1223:** **Node B — layers 1223:**
```bash ```bash
HF_HOME=/run/media/popov/d/DEV/models \ HF_HOME=/run/media/popov/d/DEV/models .venv/bin/meshnet-node start --model Qwen/Qwen2.5-0.5B-Instruct --shard-start 12 --shard-end 23 --quantization bfloat16 --tracker http://localhost:8080 --port 8002
.venv/bin/meshnet-node start \
--model Qwen/Qwen2.5-0.5B-Instruct \
--shard-start 12 --shard-end 23 \
--quantization bfloat16 \
--tracker http://localhost:8080 \
--port 8002
``` ```
Send the request to Node A — it tokenizes, runs layers 011, passes binary Send the request to Node A — it tokenizes, runs layers 011, passes binary