Currently, Large frontier models:
Not a great deal.
Local Private AI is the how we retain human agency - trained for us, by us. Blue Pill. Every post on reddit, google search, funny video provides higher-quality input data to the next pre-training or synthetic training run.
So what if we, as a society, make a choice to starve the models and instead allocate the capital to narrow-AI that runs in the house?
Spent some time this week finally getting my head around farming out to multiple backends:
Got Daytona vibe configured for self-hosted model development to train the “End to End” Pipeline from Data Wrangling to Quantizing for a RPI with executorch.
I’ll begin picking through the AI generated mistakes this week, hopefully ahead of a thursday meetup.
Speaking of fine-tuning, Modal is online now and the sandbox funciton is quite interesting. Apparently all the big frontier labs are investing massively in container/vm boot times…
On the deployment side, ExecuTorch has been a game changer for edge inference. I’ve got my first toy model running on a rpi4, after fixing a bug (pending merge). Exciting stuff.
Currently targeting:
The export pipeline from PyTorch is surprisingly smooth. Quantized models run comfortably on constrained hardware. Local inference means no cloud dependencies for privacy-sensitive detection tasks.
Now I just need a better model (e.g. nothing I’ve hand rolled)
Network refresh time. Revisiting IPv6 ULA (Unique Local Addresses) for my multi-building network isolation.
fd79:797a:e9ef::/48 is the base prefix
ULA gives me RFC 4193 compliant private addressing without the NAT mess of IPv4. Each device gets a stable, routable address within its VLAN. Benefits:
fd79:797a:e9ef:0000::/52 → Building 1 (Guest/IoT - 512+ devices)
├── fd79:797a:e9ef:0000::/56 → Mixed Network (Phones, Desktops)
├── fd79:797a:e9ef:0100::/56 → Guest/Untrusted Network
├── fd79:797a:e9ef:0200::/56 → IoT Network
└── fd79:797a:e9ef:0300::/56 → Reserved
fd79:797a:e9ef:0400::/58 → Building 2 (60 devices)
fd79:797a:e9ef:0401::/58 → Building 3 (60 devices)
fd79:797a:e9ef:0402::/58 → Building 4 (reserved)
fd79:797a:e9ef:0403::/58 → Building 5 (reserved)
fd79:797a:e9ef:0404::/58 → Building 6 (reserved)
Building 1 gets a /52, giving me room to split into multiple /56 subnets as needed. Buildings 2 and 3 use /58s (64 /64 subnets each) for up to 60 devices.
# /etc/network/interfaces.d/building1-mixed
auto b1-mixed
iface b1-mixed inet6 static
address fd79:797a:e9ef:0000::1
netmask 56
gateway fd79:797a:e9ef:ffff::1
# /etc/network/interfaces.d/building1-guest
auto b1-guest
iface b1-guest inet6 static
address fd79:797a:e9ef:0100::1
netmask 56
# /etc/network/interfaces.d/building1-iot
auto b1-iot
iface b1-iot inet6 static
address fd79:797a:e9ef:0200::1
netmask 56
Pi-hole handles DNS for each network segment, providing consistent resolution and filtering:
# Pi-hole can bind to specific interfaces
PIHOLE_INTERFACE=b1-mixed
DNSMASQ_LISTENING=local
# nftables snippet for Building 1 boundary
table ip6 filter {
chain forward {
# Allow established/related connections
iifname "b1-mixed" oifname "wan" ct state established,related accept
iifname "b1-guest" oifname "wan" ct state established,related accept
iifname "b1-iot" oifname "wan" ct state established,related accept
# Block guest from reaching mixed network
iifname "b1-guest" oifname "b1-mixed" drop
# Block guest from reaching IoT network
iifname "b1-guest" oifname "b1-iot" drop
# Allow IoT to initiate to mixed if needed
iifname "b1-iot" oifname "b1-mixed" accept
# Allow all outbound from mixed
oifname "b1-mixed" accept
oifname "b1-guest" accept
oifname "b1-iot" accept
}
}
[ISP Gateway]
|
v
[Debian Router]
|
+---+---+---+---+---+
| | | | |
[B1- [B1- [B1- [B2] [B3]
Mixed] Guest] IoT] |
(B4-B6 reserved)
Static routes on the router handle inter-VLAN communication. The /52 for Building 1 keeps all Guest/IoT networks under one administrative block while maintaining clear security boundaries between untrusted and trusted segments.
This infrastructure foundation unlocks a few projects I’ve been wanting to build:
The pieces are starting to click together.