Fecha: septiembre 2026 · PC: GTX 1050 2GB VRAM, 7.7GB RAM, 6 cores, Python 3.14 en sistema Disco de trabajo:
/mnt/linux2(~430GB libres)
Como el torrent, pero para IAs: otros prestan sus GPUs para correr los pesos de un modelo grande partido en bloques; vos te conectás como cliente y usás ese cómputo ajeno sin necesitar GPU propia. La pregunta de fondo: ¿existe en 2026 una red así que funcione de verdad?
Veredicto tras probarlo:
Petals (bigscience-workshop/petals) reparte un modelo (ej. StableBeluga2 de 65B) en bloques
(layers). Cada voluntario sirve algunos bloques en su GPU; el cliente camina por la red
haciendo forward layer por layer, como un torrent ensambla piezas. Usa libp2p/hivemind
con un DHT (tabla distribuida de peers), igual que los trackers de un torrent.
hivemind (la librería P2P) usa pkg_resources, que se eliminó en setuptools ≥ 81 → no compila en 3.14.tokenizers==0.13.3 (pin fijo de petals).# 1) Instalar uv (gestor de Pythons) apuntando el almacenamiento a /mnt/linux2
export UV_PYTHON_INSTALL_DIR=/mnt/linux2/uv-python
export UV_CACHE_DIR=/mnt/linux2/uv-cache
# ... (descargar el binario uv, /home/esotericwarfare/.local/bin)
# 2) Instalar Python 3.11 y crear venv
uv python install 3.11
uv venv /mnt/linux2/petals-client/.venv --python 3.11
# 3) Instalar el stack de petals
/mnt/linux2/petals-client/.venv/bin/pip install \
setuptools==80.10.2 wheel \
torch==2.3.1+cu121 --index-url https://download.pytorch.org/whl/cu121
# 4) hivemind 1.1.12 es incompatible con torch 2.3.1 -> pin correcto es el que pide petals
/mnt/linux2/petals-client/.venv/bin/pip install --no-build-isolation \
hivemind==1.1.10.post2 petals==2.2.0.post1 transformers==4.33.3
# 5) PARCHE (torch 2.3 movió _refresh_per_optimizer_state a torch.amp.grad_scaler):
# editar site-packages/hivemind/optim/grad_scaler.py línea 8:
# envolver el import en try/except que importa de torch.amp.grad_scaler como fallback.
# dht_check.py
from petals import AutoDistributedModelForCausalLM
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained(MODEL, use_fast=False)
model = AutoDistributedModelForCausalLM.from_pretrained(MODEL, max_length=32)
inputs = tok("A cat is flying", return_tensors="pt")["input_ids"]
outputs = model.generate(inputs, max_new_tokens=8)
model.shutdown()
bootstrap1.petals.dev:31337 OPEN; el 31338 filtrado).[71s] loaded model) — o sea sí trazó la ruta.MissingBlocksError: No servers holding blocks [0..79] are online en StableBeluga2 y también en bloom-560m (bloques 0-23).El health monitor oficial muestra el swarm “healthy” pero ningún servidor tiene bloques online.
Extra: health.petals.dev sale de timeout (issue #624 de petals, sitio caído desde 2025).
Conclusión Petals: el “torrent” técnico funciona, pero sin semillas no hay forma de ensamblar. Lo que confirma la postura de George Hotz al respecto (su tweet de 2026-03-02: “Own your own computer! Don’t dial in to their timeshare.”). La red de voluntarios está desierta.
Versión centralizada-bastarda del mismo concepto: los voluntarios (workers) corren KoboldAI u otros backends con modelos LLM e imágenes, se conectan a un servidor central y atienden pedidos anónimos. No es P2P torrent-torrent, pero cumple lo buscado: generar usando GPUs ajenas de un clúster de voluntarios, sin GPU propia y sin registrarse.
Infra:
https://aihorde.net/api/v2 (REST, JSON)0000000000 (prioridad mínima bajo carga)POST /generate/text/async -> te da un id -> GET /generate/text/status/{id} hasta done=trueurllib manda un User-Agent de Python que Cloudflare bloquea (error 1010).
Solución: usar User-Agent de Firefox:
headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"}
Y el endpoint pide apikey en header (0000000000 para anónimo).
horde.pyScript autocontenido (solo python3, sin dependencias):
python3 horde.py "tu prompt" # modelo default: Llama-3.2-3B
python3 horde.py "tu prompt" "modelo" 128 # otro modelo y más tokens
python3 horde.py --models # listar modelos del swarm
Prueba real exitosa (~57s, anónimo):
prompt: A cat is flying / cuento del pescador / "explica compilado vs interpretado"
resultado: texto generado por worker "Kobold-Scribe" (GPU ajena)
modelo: koboldcpp/Llama-3.2-3B-Instruct-Q4_K_M
Verificación del worker (quién “sembró”):
model: koboldcpp/Llama-3.2-3B-Instruct-Q4_K_M
worker: Kobold-Scribe | 5f9fb893-5859-4c76-b751-de495d2b8f7b
cd /mnt/linux2/petals-client
# generar texto
python3 horde.py "Escribe un haiku sobre el asado argentino"
# elegir modelo + longitud
python3 horde.py "Explain transformers simply" "google/gemma-4-31b" 100
# ver modelos vivos del swarm
python3 horde.py --models
Si la cola anónima está llena (prioridad mínima), registrate gratis en
https://stablehorde.net y pegá la clave generada en API_KEY del script (0000000000 por defecto).
| Archivo | Para qué |
|---|---|
/mnt/linux2/petals-client/.venv/ |
venv Python 3.11 (petals, hivemind patcheado, torch 2.3.1+cu121) |
/mnt/linux2/petals-client/dht_check.py |
cliente de prueba Petals (carga modelo del swarm, falla al generar) |
/mnt/linux2/petals-client/peer_check.py |
introspección del DHT de Petals (falla = API cambió) |
/mnt/linux2/petals-client/horde_client.py |
primera versión del cliente API directo |
/mnt/linux2/petals-client/horde.py |
cliente final CLI (el que usás) |
/mnt/linux2/petals-client/TUTORIAL.md |
este documento |
/mnt/linux2/uv-python, /mnt/linux2/uv-cache |
instalaciones y caché de uv |