Este artículo busca ser lo más fácil de entender posible, permitiendo que cualquier jugador novato domine la implementación de modelos locales y construya su propio flujo de trabajo.
Este año, los modelos de código abierto nacionales han estado muy activos. DeepSeek, Qwen, Kimi, GLM, MiniMax... aparecen nuevos modelos uno tras otro, abriendo constantemente sus pesos y comenzando a competir con los modelos cerrados de Estados Unidos.
Pero cuantos más modelos hay, más me importa una pregunta específica: ¿pueden estos modelos no solo quedarse en páginas web y APIs, sino instalarse realmente en nuestras propias máquinas, conectándose a archivos locales, herramientas y flujos de trabajo?
Aunque el precio unitario de los tokens de API generalmente está disminuyendo, el costo sigue siendo alto cuando se enfrentan llamadas de alta frecuencia y textos largos. A esto se suman problemas como la privacidad, la red y el control de datos, por lo que la implementación local se está convirtiendo en la opción para más y más desarrolladores y empresas.
Así que esta vez, quiero elegir un modelo con un tamaño desafiante y representativo de la implementación en una sola máquina para recorrer el proceso completo de implementación local.
El protagonista finalmente seleccionado es Ling-3.0-flash, de código abierto de Ant Bailing: un modelo Mixture of Experts (MoE) con un total de 124B de parámetros. Resulta que tengo un NVIDIA DGX Spark a mano, que justo puede ejecutarlo.
Sin más preámbulos, comencemos con el tema principal.

01 Glosario de Términos
Antes de empezar, presentemos algunos términos relacionados con los modelos para que todos se pongan al día ✌🏻
Precisión del Modelo
Un mismo modelo a menudo ofrece diferentes versiones de precisión o cuantizadas, lo que afecta directamente el tamaño del modelo y el umbral de ejecución.

Esta vez estamos usando la versión oficial Ling INT4, que ocupa aproximadamente 71.75 GB.
Denso o MoE

Ten en cuenta que 5.1B es solo el número de parámetros activados por inferencia; los pesos completos de 124B aún deben cargarse en la memoria.
Motor de Inferencia
El motor de inferencia se encarga de cargar los pesos, gestionar el contexto y la concurrencia, y proporcionar interfaces. Es la herramienta para ejecutar el modelo, no el modelo en sí.

Elegimos vLLM esta vez porque la adaptación oficial actual es compatible con los pesos INT4 de Ling-3.0-flash y la decodificación especulativa MTP.
02 Instalación e Implementación del Modelo
Primero, presentemos el entorno de instalación: estoy usando un NVIDIA DGX Spark, equipado con un chip GB10 y 121.6 GB de memoria unificada, ejecutando Ubuntu 24.04 en arquitectura ARM64. La implementación es Ling-3.0-flash-INT4, y las pruebas de rendimiento posteriores usarán el Qwen 3.8-27B local como referencia.
El oficial proporciona una versión básica y diferentes versiones de precisión como FP8, FP4 e INT4. Puedes elegir según tu hardware.
También hay un Ling-3.0-tiny de 8B y sus versiones FP8 e INT4. Los usuarios con una Mac normal o una sola 4090 pueden priorizar probar las versiones de baja precisión de Tiny.

Paso 1: Descargar el modelo. Esta vez usé la versión INT4 oficial. Enlaces de descarga 👇🏻
- Hugging Face: Ling-3.0-flash-int4
- ModelScope: Ling-3.0-flash-int4
Si acceder a Hugging Face es complicado, puedes descargar manualmente desde ModelScope. Después de la descarga, hay 24 fragmentos safetensors, que suman aproximadamente 71.75 GB. También debes dejar espacio para el motor de inferencia y la caché KV durante la ejecución.
Paso 2: Preparar el entorno. La arquitectura BailingMoeV3 de Ling-3.0-flash es bastante nueva. Intenté usar GGUF con llama.cpp, pero dio error con unknown model architecture: 'bailingmoe3'. Así que esta vez, usé directamente la rama vLLM adaptada oficialmente:
1pip install uv2uv venv ~/my_ling_env3source ~/my_ling_env/bin/activate45git clone -b ling_3_0 https://github.com/inclusionAI/vllm-ling-v3.git6cd vllm-ling-v37VLLM_USE_PRECOMPILED=1 uv pip install --editable . --torch-backend=auto
Paso 3: Iniciar el servicio de inferencia. Reemplaza la ruta del modelo con tus pesos INT4 descargados localmente:
1vllm serve /path/to/Ling-3.0-flash-int4 \2 --served-model-name ling-int4 \3 --host 127.0.0.1 \4 --port 30000 \5 --trust-remote-code \6 --max-model-len 16384 \7 --gpu-memory-utilization 0.8 \8 --max-num-seqs 8 \9 --reasoning-parser ling3 \10 --speculative-config '{"method":"bailing_hybrid_v3_mtp","num_speculative_tokens":1}'
⚠️
Reemplaza las rutas en el comando con las rutas reales en tu máquina.
Aquí, el límite de contexto se establece en 16K, la concurrencia en 8 y la decodificación especulativa MTP está habilitada.
Nota: MTP (Multi-Token Prediction) permite que el modelo intente predecir múltiples tokens a la vez. Las partes correctamente predichas se pueden adoptar directamente, reduciendo las rondas de cálculo para generar tokens uno por uno y aumentando la velocidad de salida.
Paso 4: Verificar el servicio. Una vez iniciado, envía una solicitud simple:
1curl -s http://127.0.0.1:30000/v1/chat/completions \2 -H "Content-Type: application/json" \3 -d '{"model":"ling-int4",4 "messages":[{"role":"user","content":"Hola, preséntate en una frase."}],5 "stream":true}'
La terminal comienza a devolver contenido en streaming, lo que indica que este modelo de 124B se está ejecutando localmente.

03 Prueba de Rendimiento y Capacidad del Modelo
- Rendimiento de Tokens Cuando el modelo se inició por primera vez, ejecuté una ronda de pruebas usando el benchmark integrado de vLLM. Las 20 solicitudes se completaron, con un rendimiento de salida de 84.34 tok/s, un rendimiento total de tokens de 133.10 tok/s y una tasa de aceptación de MTP del 67.35%.

Registro de salida original 👇🏻
1============ Serving Benchmark Result ============2Successful requests: 203Failed requests: 04Request rate configured (RPS): 2.005Benchmark duration (s): 60.716Total input tokens: 29607Total generated tokens: 51208Request throughput (req/s): 0.339Output token throughput (tok/s): 84.3410Peak output token throughput (tok/s): 61.0011Peak concurrent requests: 20.0012Total token throughput (tok/s): 133.1013---------------Time to First Token----------------14Mean TTFT (ms): 19692.9815Median TTFT (ms): 18877.9916P99 TTFT (ms): 40039.0217-----Time per Output Token (excl. 1st token)------18Mean TPOT (ms): 44.6119Median TPOT (ms): 44.0920P99 TPOT (ms): 49.6821---------------Inter-token Latency----------------22Mean ITL (ms): 74.0923Median ITL (ms): 72.3924P99 ITL (ms): 280.7125---------------Speculative Decoding---------------26Acceptance rate (%): 67.3527Acceptance length: 1.6728Drafts: 305129Draft tokens: 305130Accepted tokens: 205531Per-position acceptance (%):32 Position 0: 67.3533==================================================
Posteriormente, realicé pruebas de concurrencia en Ling y en el Qwen 3.8-27B local. Con 8 de concurrencia, el rendimiento agregado de Ling fue de 141.38 tok/s, mientras que el de Qwen 3.8 fue de 32.61 tok/s, una diferencia de aproximadamente 4.34 veces en esta ronda.
🔥🔥🔥Comparación de Pruebas de Estrés: Ling-3.0-Flash vs Qwen3.8-27B

Ling-3.0-flash

Qwen 3.8 -27B


Algunos podrían preguntarse: ¿por qué la concurrencia única de Ling es solo de 34.77 tok/s, pero con 8 de concurrencia se convierte en 141.38 tok/s? Los amigos técnicos también podrían preguntar si esta puntuación de concurrencia única es lenta en comparación con los datos oficiales.
Aquí debemos explicar el método de prueba específico y las diferencias de velocidad causadas por diferentes métodos de evaluación:
- Método de prueba y enlace completo de extremo a extremo: Esta prueba utiliza una interfaz local compatible con OpenAI, realizando pruebas de estrés a través de solicitudes HTTP en streaming, no una prueba de inferencia fuera de línea separada del marco de servicio. Cada solicitud de Ling usa un prompt de texto largo de aproximadamente 150 tokens, generando hasta 512 tokens. El tiempo comienza desde la solicitud HTTP del cliente hasta que la respuesta en streaming se completa, incluyendo así llamadas HTTP locales, programación del servicio, procesamiento del Tokenizer, Prefill, decodificación token por token y retorno en streaming.
- Tasa de salida de un solo flujo vs. Rendimiento agregado de la máquina: Velocidad de un solo flujo (experiencia real del usuario): Con $c=1$, la tasa de salida de extremo a extremo es de aproximadamente 35.34 tok/s (pruebas reales de conversación única a 38+ tok/s), equivalente a más de 35 caracteres chinos por segundo, lo cual es extremadamente rápido visualmente; Rendimiento agregado (salida total bajo concurrencia): A medida que aumenta la concurrencia, vLLM usa Continuous Batching para combinar múltiples solicitudes en cálculos de GPU, utilizando completamente el ancho de banda de memoria unificada de Blackwell. Con 8 de concurrencia, el rendimiento agregado de la máquina se disparó a 141.38 tok/s.
En cuanto a por qué difiere de algunos benchmarks oficiales, la clave está en los criterios de prueba. La precisión del modelo, el motor de inferencia, la longitud del contexto, el recuento de tokens de entrada/salida, la escala de concurrencia y si se usa inferencia fuera de línea o servicios HTTP afectan el resultado final. Solo cuando estas condiciones son básicamente consistentes, los números son adecuados para una comparación directa.
En pocas palabras: La velocidad varía según los métodos de evaluación—si se prueba con concurrencia extremadamente alta (como 32/64) o en un entorno de computación puro sin protocolos de red, los números de rendimiento total se verían más altos; en nuestras llamadas diarias de conversación individual o producción de código, la velocidad de un solo flujo de Ling de 35+ tok/s y la latencia del primer token de menos de 220 ms ya se sienten extremadamente suaves y sin retrasos.
Con concurrencia única, la velocidad promedio de un solo flujo de Ling es de aproximadamente 35.34 tok/s; con 8 de concurrencia, el rendimiento agregado alcanza 141.38 tok/s. El rendimiento agregado de Qwen3.8 con 8 de concurrencia es de 32.61 tok/s. En esta ronda, la ventaja de Ling se refleja principalmente en la velocidad de salida y el rendimiento concurrente, con respuestas notablemente más rápidas en el uso real.
2. Capacidades Reales
Los benchmarks solo reflejan parte del rendimiento; la usabilidad real depende del desempeño del modelo en problemas específicos. Elegí tres direcciones para pruebas simples.
(1) Razonamiento Lógico
Preparé una variación del problema de las gallinas y los conejos, un problema clásico de lavado de autos y un problema de máquina de lavado de autos, principalmente para ver si puede entender con precisión las condiciones en lugar de aplicar una respuesta de apariencia familiar. Entre ellos, el problema de las gallinas y los conejos incluía 4 pájaros mecánicos con tres patas para romper patrones convencionales.

(2) Límites de Seguridad: A continuación, probé su reacción a operaciones de alto riesgo: si ejecuta directamente o identifica riesgos, confirma con el usuario y proporciona alternativas más seguras.

(3) Texto Largo
Finalmente, una ronda de pruebas de texto largo. Oculté información clave en un contexto largo para ver si podía encontrarla y responder con precisión, mientras observaba la velocidad de salida y la estabilidad bajo texto largo.

04 De API a TUI, luego a Llamada de Herramientas
Hemos completado la implementación del modelo y las pruebas de capacidad, pero para los usuarios comunes, curl es más adecuado para verificar interfaces que para el uso diario. Para hablar con un modelo local durante mucho tiempo, se necesita una interfaz de interacción más conveniente.
Así que primero hice un TUI simple, una interfaz de chat que se ejecuta en la terminal. No es un software complejo; hice que la IA escribiera un script de Python para encapsular llamadas de interfaz local, salida en streaming e historial de conversación, y luego lo inicié con un comando:
1python3 ling-3.0-chat.py
De esta manera, no tengo que escribir curl cada vez. Abro la terminal y chateo directamente; las respuestas llegan en streaming y puedo ver TPS, TTFT y recuentos de tokens. Completé las pruebas de capacidad anteriores en esta interfaz.
Sin embargo, en este punto, el TUI es solo una herramienta de chat de texto sin la capacidad de llamar herramientas. El modelo grande es como un "cerebro" responsable de pensar, pero no tiene "manos y pies" para leer archivos, ejecutar comandos o conocer el estado actual del sistema.
Para que pueda llamar a las capacidades del sistema, necesitamos agregar llamadas de herramientas. En pocas palabras, operaciones como la ejecución de comandos, la lectura y escritura de archivos se encapsulan como herramientas. El modelo primero juzga qué información necesita, luego inicia un tool use; el script de Python lo ejecuta y entrega el resultado al modelo para su posterior procesamiento.
Por ejemplo, inicialmente, cuando le pedí que verificara la información de la GPU del sistema, no sabía el uso real y solo podía decirme cómo verificarlo. Después de agregar la llamada de herramientas, pudo ejecutar comandos del sistema por sí mismo y organizar los resultados de la consulta directamente en el TUI.
Basado en el mismo principio, puedes continuar conectando búsqueda web, interfaces empresariales internas, bases de datos, etc. Las herramientas específicas se pueden expandir según las necesidades del negocio.

05 Conexión a una Interfaz Visual
Para uso personal, un TUI con llamada de herramientas es realmente suficiente. Para ir más allá y poner el modelo en un banco de trabajo de Agent más completo, puedes conectarte a un framework de agentes como Harness.
Esta vez elegí DeepSeek Harness de Liang Sheng, que no solo agrega una página de chat, sino que también proporciona gestión de contexto, espacios de trabajo, llamada de herramientas, control de permisos y planificación de tareas, con una interfaz de usuario web integrada. Utiliza una arquitectura de "todo es un plugin", lo que permite una futura expansión funcional.
Ten en cuenta que DeepSeek Harness todavía está en la etapa de vista previa para desarrolladores y se actualiza rápidamente, lo que puede provocar cambios incompatibles. Hay muchos otros frameworks de Agent de código abierto; puedes elegir según tus necesidades.
El proceso de conexión no es complejo: el núcleo es agregar un servicio de modelo personalizado y apuntar la dirección a la interfaz local proporcionada por vLLM. Además de configurar en la interfaz de usuario web, también puedes modificar el archivo de configuración como se muestra:
1llm-pi-ai:2 providers:3 ling:4 displayName: "Ling-3.0-flash (124B)"5 api: openai-completions6 baseURL: http://127.0.0.1:30000/v17 apiKeyEnv: OPENAI_API_KEY8 models:9 - id: ling-int410 name: Ling-3.0-flash (124B MoE)
Después de iniciar la interfaz de usuario web, abre la dirección predeterminada en tu navegador:
1http://localhost:3080
De esta manera, el chat diario, el historial y el cambio de modelo se pueden hacer en DeepSeek Harness. Harness en sí mismo proporciona operaciones de archivos, ejecución de comandos y planificación de tareas, que se pueden extender aún más a través de plugins. Para el uso específico y los plugins de terceros, los amigos interesados pueden buscarlos.
Ten en cuenta que las herramientas que escribí en el TUI de Python no se migrarán automáticamente. Para usarlas en Harness, deben reintegrarse según su mecanismo de plugins. A continuación se muestra el efecto de integración real que hice para Ling; puedes ver la grabación.

06 Construcción de un Flujo de Trabajo de IA
En este punto, el enlace de modelo único desde la implementación hasta la interfaz y la llamada de herramientas para Ling-3.0-flash está completamente establecido.
Sin embargo, en proyectos reales, generalmente no usamos solo un modelo. Diferentes modelos sobresalen en diferentes cosas; combinarlos suele ser mejor que tener un solo modelo que maneje todo.
La ventaja de Ling-3.0-flash es el procesamiento de texto y la velocidad de generación, pero no admite entrada multimodal nativa. Si una tarea requiere comprender imágenes o videos, puedes conectar un modelo multimodal como Qwen3.8-27B; si necesitas generar video, puedes conectar el recientemente lanzado MiniMax H3. Cada modelo maneja lo que mejor sabe hacer, pasando los resultados al siguiente.
Por ejemplo, para construir un flujo de trabajo de generación de video, Ling puede primero entender los requisitos, escribir guiones y dividir storyboards, luego el modelo multimodal verifica los materiales de referencia y la consistencia visual, y finalmente, el modelo de video genera. Después de la generación, se puede hacer otra ronda de inspección visual para modificar los prompts y regenerar según los resultados:
1Requisitos y Materiales2→ Ling genera guión y storyboards3→ Modelo multimodal verifica materiales y requisitos visuales4→ MiniMax H3 genera video5→ Modelo multimodal verifica visuales y continuidad6→ Ling ajusta prompts según retroalimentación7→ Humano completa la revisión final
El video a continuación muestra el efecto real de los prompts generados por Ling-3.0-flash y luego entregados a MiniMax H3 para su generación.

Una vez que este proceso está fijo, solo necesitas cambiar los requisitos y materiales para un uso repetido. Sin embargo, ejecutar múltiples modelos grandes localmente simultáneamente tiene requisitos muy altos de VRAM y memoria. Ling INT4 es de aproximadamente 72 GB, Qwen3.8-27B BF16 es de aproximadamente 51.77 GB, más la caché KV y los modelos de video; es difícil mantenerlos todos residentes en este Spark.
Antes de la implementación real, asegúrate de calcular cuánta VRAM o memoria unificada necesita cada modelo. Cuando los recursos son insuficientes, puedes cambiar modelos paso a paso, elegir versiones cuantizadas o dividir modelos en múltiples dispositivos. Múltiples modelos ya no se ejecutan de forma independiente, sino que colaboran en torno a la misma tarea: este es un flujo de trabajo de IA multimodelo verdaderamente utilizable.
07 Reflexiones Finales
Desde la implementación del modelo, el TUI y la llamada de herramientas hasta los flujos de trabajo multimodelo, todo el enlace está completo. Este artículo tiene como objetivo compartir un método repetible en lugar de una configuración fija.
Los modelos de código abierto continuarán actualizándose. En el futuro, ya sea que cambies modelos, versiones de cuantización o motores de inferencia, el camino desde la descarga de pesos y el inicio de servicios hasta la conexión de herramientas y flujos de trabajo no cambiará mucho.
Si las condiciones lo permiten, todavía recomiendo que todos implementen modelos locales personalmente:
- Control de Datos: Los archivos, conversaciones y datos comerciales permanecen en tu máquina o intranet, con permisos de directorio y comandos restringidos por ti.
- Adecuado para Uso de Alta Frecuencia: No es necesario calcular el costo de tokens por uso, reduciendo la dependencia de la red y servicios de terceros.
- Fácil Personalización: Los modelos, la precisión de cuantización, los motores de inferencia y las herramientas se pueden ajustar, y se pueden conectar interfaces internas y bases de datos.
A medida que los modelos de código abierto se vuelven más potentes, la implementación local se convertirá en la opción para más personas. Puedes construir herramientas y flujos de trabajo según las necesidades de tu tarea, las condiciones del equipo y el presupuesto. Espero que todos puedan tener su propio Agent local en el futuro, sin tener que mirar el consumo de tokens cada vez, logrando realmente su propia "Libertad de Tokens".
Recursos Relacionados
- Hugging Face: Pesos Ling-3.0-flash INT4
- ModelScope: Pesos Ling-3.0-flash INT4
- Repositorio Oficial de Adaptación vLLM
📚 Resumen de Artículos Anteriores
- Guía Práctica de Hermes Agent: De la Ansiedad por X a la Acumulación Automática
- Guía Anticaída del Cabello para Programadores
- Conectando Hermes a iMessage
- Conectando Hermes a X Premium
- Guía Completa de Hermes Agent
- Guía de Introducción a Hermes Agent: Modelos Auxiliares
- Guía de Introducción a Hermes Agent
- Guía Avanzada de Hermes Agent
- Guía Incompleta de Hermes Agent
- Guía Completa para Suscripción a Claude Pro en Nigeria
- Tutorial para Registrar Apple ID en Nigeria
- Suscripción a ChatGPT Plus a Mitad de Precio en Turquía
- Registro de Apple ID en EE. UU.
- Suscripción a Claude/ChatGPT/Gemini con Alipay
- Tutorial Completo para Implementación Local de LLM en Mac
- Verificación de Calidad de IP
- Por Qué Doubao No Recomienda Tu Marca
- Cómo Explicarle a Tu Abuela Que Lo Que Dijo Doubao No Es Verdad
Si esto fue útil, por favor sigue + marca como favorito + comparte 👏🏻
Sigue a @Lonely__MH para actualizaciones continuas sobre tutoriales para principiantes y análisis de herramientas de IA.





