Publicaciones
avatar

#Claude #Codex # Probé ejecutar un LLM local en la GPU Ryzen Zen3 (Comparación y análisis de rendimiento de Qwen3-8B Heretic CPU y GPU) ¡Ánimo, AMD, ¡ánimo, Vulkan! Pensé que como era una GPU para juegos, no sería gran cosa, y tenía razón Dicen que el ancho de banda de memoria es el cuello de botella (porque la VRAM es pequeña y se usa memoria principal; espero en la Mac M5 Studio) El más reciente de AMD es Zen6, así que este es un CPU de tres generaciones atrás (con GPU integrada) ---- # Comparación y análisis de rendimiento de Qwen3-8B Heretic CPU y GPU Fecha de medición: 2026-11-02 / Objetivo: Máquina Ubuntu ## Conclusión - **La GPU (GPU integrada Radeon) es más rápida en la carga del prompt, aproximadamente 2.5 veces más que el CPU.** - **La generación de texto solo es un 1.1 a 1.2 veces más rápida con la GPU.** La velocidad de generación está limitada por la velocidad de transferencia de memoria, y la GPU integrada comparte la misma memoria que el CPU. - En usos como OpenClaw, donde se envía un largo instruccional cada vez, **el caché del prompt** tiene un impacto mucho mayor que la GPU; desde el segundo prompt, el tiempo se redujo de aproximadamente 7 minutos a aproximadamente 1 minuto. ## Entorno de medición | Elemento | Contenido | |---|---| | CPU | AMD Ryzen 7 7730U (8 núcleos, 16 hilos, Zen 3) | | GPU | GPU integrada AMD Radeon Graphics (Barcelo, equivalente a Vega 8) | | Memoria | 30 GB (especificación: DDR4-3200 dual channel; no verificado en el dispositivo real) | | Memoria para GPU | VRAM dedicada de 512 MB + memoria compartida (GTT) aproximadamente 15.4 GB. LM Studio puede usar 10.59 GiB | | OS / Controlador | Ubuntu 24.04.5 LTS, Mesa 25.2.8 (RADV) | | LM Studio | Versión sin interfaz (llmster), llama.cpp 2.66.0 | | Tiempo de ejecución para CPU | `llama.cpp-linux-x86_64-avx2` | | Tiempo de ejecución para GPU | `llama.cpp-linux-x86_64-vulkan-avx2` (todas las capas asignadas a la GPU, `--gpu max`) | | Modelo | DreamFast/qwen3-8b-heretic Q4_K_M (5.03 GB) | | Configuración de carga | Longitud del contexto: 32768, número simultáneo de procesamientos: 1 | ## Método de medición - Se envió el mismo prompt a la API de LM Studio (`/api/v0/chat/completions`) y se compararon los resultados entre CPU y GPU. - Cada condición se ejecutó dos veces. En la segunda ejecución, el prompt ya estaba en caché, por lo que **la velocidad de carga utiliza el valor de la primera ejecución**. - La velocidad de generación se basa en `tokens_per_second` devuelto por LM Studio. - El pensamiento previo a la respuesta se detuvo con `/no_think`, y `temperature` se estableció en 0. - Después de medir la GPU, se enfrió durante 2 minutos antes de medir el CPU. - Los scripts y registros están en `~/bench/bench.py`, `~/bench/run.sh` y `~/bench/result.log` en la máquina Ubuntu. ## Resultados ### Resumen de comparación | Contenido | Elemento | CPU | GPU | Diferencia | |---|---|---|---|---| | Pregunta corta (24 tokens) generando 256 tokens | Velocidad de generación | 7.3 tokens/seg | 8.2 tokens/seg | 1.13x | | | Tiempo total | 35.7 segundos | 31.4 segundos | | | Prompt de 921 tokens | Velocidad de carga | 30.5 tokens/seg | 76.3 tokens/seg | **2.5x** | | | Hasta el primer carácter | 30.2 segundos | 12.1 segundos | | | | Velocidad de generación | 7.0 tokens/seg | 8.0 tokens/seg | 1.13x | | Prompt de 3,621 tokens | Velocidad de carga | 35.4 tokens/seg | 87.5 tokens/seg | **2.5x** | | | Hasta el primer carácter | 102.3 segundos | 41.4 segundos | | | | Velocidad de generación | 5.9 tokens/seg | 7.2 tokens/seg | 1.2x | ### Detalles de las mediciones | Método | Contenido | Intento | Prompt | Generación | Tiempo total | Hasta el primer carácter | Velocidad de generación | |---|---|---|---|---|---|---|---| | GPU | Pregunta corta | 1 | 24 | 256 | 31.4 segundos | 0.50 segundos | 8.26 | | GPU | Pregunta corta | 2 | 24 | 256 | 31.2 segundos | 0.12 segundos | 8.23 | | GPU | Prompt ~1,000 | 1 | 921 | 32 | 16.0 segundos | 12.07 segundos | 7.97 | | GPU | Prompt ~1,000 (caché) | 2 | 921 | 32 | 4.0 segundos | 0.14 segundos | 7.98 | | GPU | Prompt ~4,000 | 1 | 3,621 | 32 | 45.7 segundos | 41.38 segundos | 7.18 || GPU | Prompt aproximadamente 4.000 | 2 (caché) | 3.621 | 32 | 4,5 segundos | 0,14 segundos | 7,22 | | CPU | Pregunta corta | 1 | 24 | 256 | 35,7 segundos | 0,73 segundos | 7,29 | | CPU | Pregunta corta | 2 | 24 | 241 | 32,8 segundos | 0,14 segundos | 7,36 | | CPU | Prompt aproximadamente 1.000 | 1 | 921 | 32 | 34,7 segundos | 30,21 segundos | 7,03 | | CPU | Prompt aproximadamente 1.000 | 2 (caché) | 921 | 32 | 4,6 segundos | 0,15 segundos | 6,96 | | CPU | Prompt aproximadamente 4.000 | 1 | 3.621 | 32 | 107,5 segundos | 102,30 segundos | 5,94 | | CPU | Prompt aproximadamente 4.000 | 2 (caché) | 3.621 | 32 | 5,4 segundos | 0,17 segundos | 5,96 | Las unidades de prompt y generación son tokens; la unidad de velocidad de generación es tokens/segundo. ### Corrección Cuando realizamos la primera medición preliminar, mencionamos que la velocidad de generación en GPU aumentó aproximadamente 2,2 veces, pero esto fue un error. El valor de 3,86 tokens/segundo del CPU correspondía a un prompt de aproximadamente 14.000 tokens procesado en bot2. Dado que los prompts largos también ralentizan la generación, compararlos con los valores de preguntas cortas fue incorrecto. Al comparar bajo las mismas condiciones, la diferencia en generación es de solo 1,1 a 1,2 veces. ## Razones por las que el uso de GPU no resulta tan rápido como se esperaba ### 1. La generación está limitada por la velocidad de transferencia de memoria Cada vez que un LLM genera un token, debe leer todos los pesos del modelo desde la memoria. El límite superior de la velocidad de generación está determinado aproximadamente por: “velocidad de transferencia de memoria ÷ tamaño del modelo”. | Artículo | Valor | |---|---| | Velocidad de transferencia de memoria (teórica) | Aproximadamente 51 GB/s con DDR4-3200 en modo dual channel | | Cantidad leída por token | Aproximadamente 5 GB (modelo completo) | | Límite teórico superior de velocidad de generación | 51 ÷ 5,03 ≒ **aproximadamente 10 tokens/segundo** | | Medición real (GPU) | 8,2 tokens/segundo (aproximadamente el 80 % del límite) | | Medición real (CPU) | 7,3 tokens/segundo (aproximadamente el 70 % del límite) | La GPU integrada comparte la misma memoria principal que el CPU, por lo que su límite es casi idéntico al del CPU. Incluso con GPU, solo hay un margen de mejora del 10-20 % para acercarse al límite. Las GPUs externas tienen memoria dedicada y rápida, por lo que este límite es mucho más alto. | GPU | Velocidad de transferencia de memoria | Proporción respecto a esta máquina Ubuntu | |---|---|---| | GPU integrada de esta máquina Ubuntu | Aproximadamente 51 GB/s (compartida con CPU) | 1x | | RTX 4060 | Aproximadamente 272 GB/s | Aproximadamente 5x | | RTX 4090 | Aproximadamente 1.008 GB/s | Aproximadamente 20x | ### 2. La carga del prompt depende del poder de cómputo, pero la GPU integrada tiene poca potencia Durante la carga del prompt se procesan muchos tokens simultáneamente, por lo que la velocidad depende más del poder de cómputo que de la memoria. Aquí es donde se aprecia el efecto de la GPU: en las mediciones reales se logró un aumento de hasta 2,5 veces. Sin embargo, esta GPU tiene las siguientes limitaciones que impiden superar ese factor: | Limitación | Detalles | |---|---| | Pocos unidades de cómputo | Solo ocho. Estimadas en aproximadamente 2 TFLOPS en precisión simple, una fracción del poder de una GPU para juegos | | Sin circuitos dedicados para operaciones matriciales | No posee circuitos dedicados como los Tensor Cores de NVIDIA para IA | | No se puede usar ROCm | La plataforma de cómputo AMD ROCm no admite oficialmente esta GPU integrada; se ejecuta sobre Vulkan genérico | Para un modelo de 8B, se requieren aproximadamente 16 GFLOP por token procesado. Con una potencia de aproximadamente 2 TFLOPS, el límite teórico sería de unos 120 tokens/segundo. Las mediciones reales (76–88 tokens/segundo) representan entre el 60 % y el 70 % de ese límite. ### 3. Cuanto más largo es el prompt, más lento se vuelve A medida que aumenta el contexto, cada token debe referirse a más tokens anteriores, lo que ralentiza tanto la carga como la generación. | Condición | Velocidad de carga | Velocidad de generación | |---|---|---| | GPU, prompt aproximadamente 1.000 tokens | 76 tokens/segundo | 8,0 tokens/segundo | | GPU, prompt aproximadamente 3.600 tokens | 88 tokens/segundo | 7,2 tokens/segundo | | GPU, OpenClaw (15.686 tokens), primeros 2.048 tokens | 78,7 tokens/segundo | — | | GPU, OpenClaw (15.686 tokens), promedio general | 44,1 tokens/segundo | 5,1 tokens/segundo | | CPU, OpenClaw (14.021 tokens) | Aproximadamente 19,5 tokens/segundo | 3,86 tokens/segundo |Hasta 3,600 tokens, la carga se volvió más rápida debido al aumento en la cantidad procesable simultáneamente. Al superar los 15,000 tokens, la velocidad cayó hasta 46 tokens/segundo al final. ## Validación de caché en OpenClaw (bot2 mei) En una sesión de validación, se enviaron dos mensajes consecutivos utilizando Qwen3 ejecutado en GPU. | Elemento | Primer mensaje | Segundo mensaje | |---|---|---| | Prompt enviado por OpenClaw | 15,686 tokens | 15,744 tokens | | Tokens realmente cargados | 15,686 (todos) | **135 (solo los nuevos)** | | Tiempo de carga | 356.1 segundos | **6.1 segundos** | | Generación | 247 tokens, 48.1 segundos (5.11 tokens/segundo) | 249 tokens, 48.5 segundos (5.11 tokens/segundo) | | Total | **410 segundos** | **58 segundos** | - OpenClaw siempre envía el mismo contenido al inicio de las instrucciones, por lo que en el segundo mensaje se reutilizó directamente la parte ya procesada (98%). - La mayor parte del tiempo de espera en el segundo mensaje corresponde al razonamiento de aproximadamente 240 tokens. Incluso con `--thinking off`, el razonamiento no se detuvo. Si se pudiera desactivar el razonamiento, se estima que el tiempo se reduciría a unos 10 segundos. - La caché no expira por el tiempo. Se elimina solo cuando el modelo se desconecta, cuando otra operación interrumpe (debido a que solo se permite un procesamiento simultáneo), o cuando la conversación se comprime. ## Opciones para acelerar Como no se puede modificar la velocidad de transferencia de memoria, reducir la cantidad de datos cargados por token es efectivo. | Método | Efecto estimado | Notas | |---|---|---| | Utilizar caché del prompt | La carga en el segundo y siguientes mensajes se reduce a unos pocos segundos (validado) | Puede eliminarse por interrupciones o compresión | | Desactivar el razonamiento de Qwen3 | Reducción de aproximadamente 48 segundos por mensaje | La calidad de la respuesta puede disminuir ligeramente | | Cambiar a Qwen3-30B-A3B tipo MoE | Se utilizan aproximadamente 3B de pesos por token; se espera que la generación sea 2-3 veces más rápida y también más inteligente | Tamaño aproximado de 18 GB; no cabe en los 10.6 GiB de GPU, por lo que parte se procesará en CPU. No se ha confirmado si existe una versión sin censura | | Usar un modelo más pequeño (Qwen3-4B) | La generación será aproximadamente el doble de rápida | La inteligencia disminuye | | Utilizar decodificación especulativa | Usar Qwen3-0.6B como borrador; se espera que la generación sea 1.3-2 veces más rápida | El efecto varía según el contenido | | Cuantizar aún más (Q3, etc.) | Mejora del 10-20% | Se reduce la precisión | | Acortar las instrucciones | Reduce el tiempo de carga del primer mensaje y tras la pérdida de caché | Se pierden funciones | Los efectos indicados en esta tabla, excepto la caché del prompt, son estimaciones y no han sido medidos experimentalmente. ## Estado actual (al 2026-11-03) | Elemento | Estado | |---|---| | LM Studio | Detenido. Inicio automático deshabilitado | | Runtime seleccionado | Vulkan (GPU) | | bot2 (mei) | gpt-5.4-mini | | Puerto para bot2 | Detenido. Inicio automático deshabilitado | | Configuración de bot2 para Qwen3 | `~/.openclaw-bot2/openclaw.json.bak-qwen3-active-*` |

Este contenido es solo para fines informativos y educativos. Puede incluir opiniones de terceros, contenido patrocinado o material promocional por el que el creador puede recibir una compensación. Nada en este feed constituye asesoramiento de inversión ni una garantía de rentabilidad. Eres el único responsable de tus propias decisiones de inversión. Investiga siempre por tu cuenta y actúa con precaución antes de operar. No garantizamos la exactitud de la información de terceros y no nos hacemos responsables de las pérdidas que puedas sufrir. El rendimiento pasado no es indicativo de resultados futuros. Consulta nuestros Términos de la Comunidad y la Declaración de Riesgos para más detalles.

avatarPublica tu respuesta

Comentar