3 puntos por GN⁺ 2025-02-17 | 1 comentarios | Compartir por WhatsApp
  • En distributed-llama v0.12.2, al ejecutar el modelo deepseek_r1_distill_llama_8b_q40 en 4 Raspberry Pi 5 de 8 GB, tanto la velocidad de evaluación como la de generación resultaron superiores a las de una configuración de 2 unidades
  • La configuración de 2 unidades registró Evaluation 7.70 tok/s y Prediction 3.54 tok/s, mientras que la de 4 unidades registró Evaluation 11.68 tok/s y Prediction 6.43 tok/s
  • El log de Prediction de la configuración de 4 unidades muestra aproximadamente 155.60 ms por token, frente a unos 282.22 ms por token en la configuración de 2 unidades, lo que evidencia la diferencia de velocidad de procesamiento al aumentar la cantidad de nodos con el mismo modelo
  • Otro usuario compartió resultados en v0.12.7 con 8 nodos, LAN de 2.5G y una configuración basada en CPUs Intel antiguas: Evaluation 33.64 tok/s y Prediction 16.63 tok/s
  • En un caso donde el proceso se terminaba por falta de memoria en 2 Raspberry Pi 5 de 8 GB, se respondió que era necesario reducir el tamaño del contexto con --max-seq-len 4096

Resultados de ejecución en una configuración con Raspberry Pi 5 de 8 GB

  • El modelo probado fue deepseek_r1_distill_llama_8b_q40, y la versión de distributed-llama fue la 0.12.2
  • La comparación fue entre configuraciones de 2 x Raspberry Pi 5 8GB y 4 x Raspberry Pi 5 8GB
Configuración Evaluation Prediction
2 x Raspberry Pi 5 8GB 7.70 tok/s 3.54 tok/s
4 x Raspberry Pi 5 8GB 11.68 tok/s 6.43 tok/s

Cifras del log de la configuración de 2 unidades

  • La configuración de 2 x Raspberry Pi 5 8GB registró las siguientes cifras en Evaluation
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 7.70
    • 129.89 ms/tok
  • En Prediction registró las siguientes cifras
    • nTokens: 77
    • tokens/s: 3.54
    • 282.22 ms/tok
  • Al finalizar la ejecución, el log mostró Network is closed

Cifras del log de la configuración de 4 unidades

  • La configuración de 4 x Raspberry Pi 5 8GB registró las siguientes cifras en Evaluation
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 11.68
    • 85.63 ms/tok
  • En Prediction registró las siguientes cifras
    • nTokens: 77
    • tokens/s: 6.43
    • 155.60 ms/tok
  • En el log se muestra repetidamente, durante la generación de tokens, envío de 864 kB y recepción de 1191 kB

Resultados de otro usuario con 8 nodos

  • Un usuario compartió resultados usando 8 nodos en distributed-llama v0.12.7
    • En su mayoría, CPUs Intel antiguas en configuraciones de 4 o 6 núcleos
    • Soporte para AVX2
    • Conexión LAN de 2.5G
  • Los resultados de ejecución de esta configuración fueron los siguientes
    • Evaluation: 33.64 tok/s, 29.73 ms/tok
    • Prediction: 16.63 tok/s, 60.13 ms/tok
    • La cantidad de tokens de Prediction fue 245
  • El comando usado tenía la forma de ./dllama inference, especificando modelo, tokenizer, --buffer-float-type q80, --nthreads 6, --max-seq-len 4096, varios --workers y --steps 256

Problemas de ejecución y respuestas

  • Se compartió un caso en una configuración de 2 Raspberry Pi 5 de 8 GB donde, durante la ejecución, aparecía RequiredMemory: 20474 MB y luego el proceso terminaba con Killed
    • El comando del nodo raíz incluía --buffer-float-type q80, --steps 16, --nthreads 4 y 1 dirección de worker
    • La respuesta indicó que había que reducir el tamaño del contexto con --max-seq-len 4096
  • Otro usuario compartió un fenómeno en el que, después de conectarse a varios workers, ante el prompt what is 99+12 solo se imprimían espacios y puntos
    • El log mostraba RopeScaling: f=8.0, l=1.0, h=4.0, o=8192, RequiredMemory: 3310 MB, Chat template: deepSeek3
    • El administrador preguntó qué versión estaba usando y respondió que verificara si había hecho pull de los últimos cambios y en qué CPU lo estaba ejecutando

1 comentarios

 
GN⁺ 2025-02-17
Opiniones de Hacker News
  • Los anuncios sobre ejecutar Deepseek R1 en Raspberry Pi suelen seguir el mismo patrón: en realidad se parecen más a ejecutar Llama o Qwen modificados con la técnica de destilación de DeepSeek

    • Un modo de falla común en los modelos DeepSeek destilados es que no se dan cuenta de que están dando vueltas en el mismo lugar.
      DeepSeek induce a los modelos de lenguaje grandes destilados a cortar su propia salida con “Wait.” para que razonen hasta cierto punto, pero esto es mucho más débil que la capacidad de razonamiento del modelo completo, y puede caer en un bucle de dudar de sí mismo repitiendo “Wait.” sin fin, en vez de desarrollar con nuevos matices una conclusión ya alcanzada
    • No sé si cambiaron el título del envío, pero ahora dice explícitamente Deepseek R1 Distill 8B Q40, así que llamarlo “Deepseek R1” efectivamente representa mal el resultado.
      Aun así, si se mira la sección Distilled Model Evaluation[1] del repositorio oficial de R1, DeepSeek-R1-Distill-Llama-8B también es bastante bueno, y se dice que en algunos benchmarks supera a 4o-0513 y Sonnet-1022.
      También hay que recordar que existe el muestreo desde una gramática formal. llama.cpp tiene GBNF, y también se agregó configuración de lazy grammar[2], así que para algunos usos ya se volvió bastante útil. Significa que la gramática interviene después.
      Además, todavía hay margen para ajuste fino adicional. Varias empresas ya ofrecen servicios de “RFT”, que enriquecen datasets comunes de ajuste fino supervisado con datos sintéticos de razonamiento creados por un R1 grande. Por eso, este resultado podría ser un resultado preliminar mucho más valioso de lo que parece.
      Una decodificación de 6 tok/s no es rápida, pero a quienes usan Raspberry Pi esas cosas no les importan mucho.
      [1] https://github.com/deepseek-ai/DeepSeek-R1#distilled-model-e...
      [2] https://github.com/ggerganov/llama.cpp/pull/9639
    • Me gustaría que alguien le explicara a un ingeniero de software que no se dedica al machine learning qué significa este método de destilación.
      Me da curiosidad qué quiere decir que R1 entrene un modelo Llama y qué tiene de especial el método de destilación de DeepSeek
    • Esto no es más que un LLaMa ajustado finamente para generar una cadena de pensamiento parecida a la de DeepSeek.
      Si fuera un modelo de “destilación” propiamente dicho, tendría que haberse entrenado desde cero para imitar por completo a un modelo más grande, pero aquí eso no ocurre
    • Realmente no me gusta que estos modelos puedan ser promocionados con el nombre Deepseek R1
  • Como siempre, hay que tomar las cifras de tok/s con muchísima cautela.
    En la demo “resuelven” una pregunta de menos de 500 tokens. Que sea posible sigue siendo sorprendente, pero cuando se trata de problemas reales y de un modelo “pensante” con una longitud de contexto realmente útil, es decir, 8~16k tokens, es difícil acercarse a esa velocidad. Incluso un Epyc con muchos canales cae a 2~4 tok/s cuando la longitud de contexto pasa de alrededor de 4096

    • Probé una ejecución larga en cuatro Raspberry Pi 5, es decir, para ver cómo se comporta la predicción.
      pos=0 => P 138 ms S 864 kB R 1191 kB Connect
      pos=2000 => P 215 ms S 864 kB R 1191 kB .
      pos=4000 => P 256 ms S 864 kB R 1191 kB manager
      pos=6000 => P 335 ms S 864 kB R 1191 kB the
    • Los robots pequeños normalmente tratan con problemas pequeños.
      Con que el modelo ayude un poco, pueden volverse mucho más capaces que ahora
  • No es un mal resultado, pero si vas a gastar £320 en cuatro Pi 5, podrías conseguir una 3080 usada de 12GB, y la velocidad de tokens probablemente sería más de 10 veces mayor

    • O podrías conectar directamente una GPU de 12GB o 16GB a una sola Pi 5 y obtener más de 20 tok/s incluso con modelos más grandes.
      https://github.com/geerlingguy/ollama-benchmark?tab=readme-o...
    • “Deepseek R1 Distill 8B Q40 on 1x 3080, 60.43 tok/s (eval 110.68 tok/s)” probablemente no habría llegado a Hacker News
    • Aun así, el consumo eléctrico es 48W frente a 320W
    • También está la opción de usar un par de 3060 de 12GB
  • Lo interesante aquí es que se puede ejecutar la inferencia de Llama de forma distribuida entre varias computadoras

    • Entonces me pregunto dónde está el equivalente a GPU distribuida.
      ¿No se podría conectar herramientas a un modelo R1 completo lento distribuido por todo el mundo, como Seti@HOME, y hacerlo razonar públicamente sobre tareas profundas y complejas?
  • Esto es un clúster Beowulf moderno

    • Sinceramente, no entiendo muy bien el meme de los clústeres de Raspberry Pi.
      Por un poco más de dinero que cuatro Pi 5, puedes encontrar en eBay un servidor Dell 1U con una CPU Epyc de 32 núcleos y 64GB de memoria, y obtener un rendimiento al menos un orden de magnitud superior.
      Si quieres hablar de un clúster Beowulf en un homelab, creo que al menos deberías ejecutar algo como Slurm+Lustre o k8s+OpenStack+Ceph en nodos de cómputo conectados con una red FDR Infiniband muy barata. Algo así, con cuatro nodos lentos que ni siquiera escalan linealmente, es difícil de defender
  • No vi ni entendí cómo se usan varias Raspberry Pi en paralelo.
    Sería bueno que alguien me orientara

  • ¿Cuándo podremos instalar estas geniales nuevas herramientas de IA con apt-get install?

    • En Mac, brew install ollama puede ser un buen punto de partida
    • Será posible cuando la distribución que usas empiece a empaquetar herramientas de modelos de lenguaje grandes, o cuando te cambies a una distribución que lo haga
    • ollama pull se le acerca bastante
    • Aunque estrictamente no es apt-get, la mayoría de los componentes de infraestructura bajo “herramientas de IA” se pueden instalar con conda install
    • También puedes descargar lm-studio como una versión con GUI atractiva
      Guarda las conversaciones y facilita la descarga de modelos
  • Si quieres probar este modelo en Mac, el modelo usado parece ser algo como DeepSeek-R1-Distill-Llama-8B, y puedes ejecutarlo así con el nuevo plugin llm-mlx
    brew install llm # or pipx install llm or uv tool install llm
    llm install llm-mlx
    llm mlx download-model mlx-community/DeepSeek-R1-Distill-Llama-8B
    llm -m mlx-community/DeepSeek-R1-Distill-Llama-8B 'poem about an otter'
    El rendimiento también es bastante bueno: cuando lo acabo de ejecutar me dio 22 tokens/second: https://gist.github.com/simonw/dada46d027602d6e46ba9e4f48477...

  • ¿Ayudaría agregar más memoria? Hace poco salió una Rpi 5 con 16GB RAM

    • La velocidad de inferencia depende mucho más de la velocidad de lectura/escritura que del tamaño de la memoria
      Mientras el modelo quepa en memoria, lo que determina el funcionamiento real es el ancho de banda de la memoria
    • Mientras el modelo y el contexto quepan en memoria, la capacidad de memoria en sí no ayuda
      Un modelo Q4 de 8B parámetros debería caber incluso en una sola Pi de 8GB
    • La Pi 5 de 16GB llegó y desapareció enseguida
      Cuando hace poco Adafruit recibió stock apenas alcancé a comprar una, pero se agotó de nuevo de inmediato
      Aun así, independientemente del rendimiento, hay modelos que requieren más de 8GB para ejecutarse y que Ollama directamente no puede correr
  • Hace falta un producto como Alexa o Google Home
    Pero en vez de conectarse a la nube, debería ejecutar un modelo de lenguaje grande local. No sé por qué todavía no existe o por qué nadie lo está construyendo

    • Supongo que será por el precio
      Un buen modelo de lenguaje grande es caro, así que la verdadera pregunta es si se puede fabricar algo lo bastante barato como para dejar margen, pero con un modelo lo bastante útil como para que la gente lo compre
    • Con Home Assistant se puede llegar a algo parecido en cierta medida
      No estoy seguro de si puede usar herramientas, pero sí puedes exponer cosas que la gente podría preguntar, como el clima
    • ¿Con modelo de lenguaje grande local te refieres a algo como Ollama + llamacpp?