Tutorial: Cómputo de IA descentralizado (tipo torrent) — de Petals a AI Horde

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)


1. La idea en 30 segundos

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 — el protocolo existe y el cliente se conecta, pero el swarm público está vacío de seeders (0 servidores sirviendo bloques). En la práctica está muerto.
  • AI Horde — mismo concepto, pero 36+ workers de texto activos. Generar con una GPU ajena funcionó a la primera.

2. Intentando Petals (el “torrent P2P real”)

Qué es

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.

Por qué hubo que usar Python 3.11

  • El sistema tiene Python 3.14.
  • hivemind (la librería P2P) usa pkg_resources, que se eliminó en setuptools ≥ 81 → no compila en 3.14.
  • En 3.11 hay wheels precompilados de tokenizers==0.13.3 (pin fijo de petals).

Pasos

# 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.

Cliente de prueba

# 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()

Qué pasó

  • ✅ El cliente se conectó al bootstrap (bootstrap1.petals.dev:31337 OPEN; el 31338 filtrado).
  • ✅ Descargó la config del modelo desde el swarm ([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.


3. AI Horde — el swarm que SÍ tiene seeders

Qué es

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:

  • API: https://aihorde.net/api/v2 (REST, JSON)
  • Clave anónima: 0000000000 (prioridad mínima bajo carga)
  • Flujo: POST /generate/text/async -> te da un id -> GET /generate/text/status/{id} hasta done=true

Problema de red visto al principio

urllib 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).

El cliente final: horde.py

Script 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

4. Cómo usarlo (resumen rápido)

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).


5. Hacia dónde seguir (opcional)

  1. Registrarte → prioridad alta, respuestas rápidas (tutorial en la web de la Horde).
  2. Donar tu GTX 1050 (2GB) → podés correr un worker de texto con koboldcpp (modelos chicos como Llama-3.2-1B/3B entran en 2GB VRAM). Al aportar kudos a la red tu prioridad de cliente sube muchísimo. (Ojo: con 2GB no vas a poder con modelos grandes — un bloque de Llama-2-70B ≈ 1.6GB+.)
  3. Exo (exo-ex.com) → alternativa para cluster local: reparte un modelo entre tus propias máquinas por LAN (PC principal + Raspberry Pi + otras) sin depender de nadie.
  4. Tus propias respuestas a la pregunta de Hotz: la demo de Petals vacío es evidencia práctica de que los swarm de voluntarios sin incentivo mueren.

6. Archivos creados

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