Cet article vise à être aussi compréhensible que possible, permettant à tout joueur novice de maîtriser facilement le déploiement de modèles locaux et de construire son propre flux de travail.
Cette année, les grands modèles open source nationaux ont été très actifs. DeepSeek, Qwen, Kimi, GLM, MiniMax... de nouveaux modèles apparaissent les uns après les autres, ouvrant constamment leurs poids, et commençant à rivaliser avec les modèles closed source américains.
Mais plus il y a de modèles, plus je me soucie d'une question spécifique : ces modèles peuvent-ils non seulement rester dans des pages web et des API, mais être véritablement installés dans nos propres machines, se connectant aux fichiers, outils et flux de travail locaux ?
Bien que le prix unitaire des tokens d'API diminue généralement, le coût reste élevé en cas d'appels fréquents et de textes longs. Ajouté à cela des problèmes comme la confidentialité, la mise en réseau et le contrôle des données, le déploiement local devient le choix d'un nombre croissant de développeurs et d'entreprises.
Alors cette fois, je veux choisir un modèle de taille ambitieuse et représentatif du déploiement sur une seule machine pour exécuter l'ensemble du processus de déploiement local.
Le protagoniste finalement sélectionné est Ling-3.0-flash, open-sourcé par Ant Bailing — un modèle Mixture of Experts (MoE) avec un nombre total de paramètres de 124B. J'ai justement un NVIDIA DGX Spark sous la main, qui peut tout à fait le faire tourner.
Sans plus attendre, commençons le spectacle.

01 Préambule Terminologique
Avant de commencer, présentons quelques termes liés aux modèles pour mettre tout le monde à niveau ✌🏻
Précision du Modèle
Un même modèle propose souvent différentes versions de précision ou quantifiées, ce qui affecte directement la taille du modèle et le seuil de fonctionnement.

Cette fois, nous utilisons la version officielle Ling INT4, qui pèse environ 71,75 Go.
Dense ou MoE

Notez que 5,1B est uniquement le nombre de paramètres activés par inférence ; la totalité des 124B de poids doit encore être chargée en mémoire.
Moteur d'Inférence
Le moteur d'inférence est responsable du chargement des poids, de la gestion du contexte et de la concurrence, et de la fourniture d'interfaces. C'est l'outil pour exécuter le modèle, pas le modèle lui-même.

Nous avons choisi vLLM cette fois car l'adaptation officielle actuelle prend en charge les poids INT4 de Ling-3.0-flash et le décodage spéculatif MTP.
02 Installation et Déploiement du Modèle
Tout d'abord, présentons l'environnement d'installation : j'utilise un NVIDIA DGX Spark, équipé d'une puce GB10 et de 121,6 Go de mémoire unifiée, fonctionnant sous Ubuntu 24.04 sur architecture ARM64. Le déploiement est Ling-3.0-flash-INT4, et les tests de débit ultérieurs utiliseront le Qwen 3.8-27B local comme référence.
Le site officiel fournit une version de base et différentes versions de précision comme FP8, FP4 et INT4. Vous pouvez choisir en fonction de votre matériel.
Il existe également un Ling-3.0-tiny 8B et ses versions FP8, INT4. Les utilisateurs avec un Mac classique ou une seule 4090 peuvent prioriser l'essai des versions basse précision de Tiny.

Étape 1 : Télécharger le modèle. J'ai utilisé la version officielle INT4 cette fois. Liens de téléchargement 👇🏻
- Hugging Face : Ling-3.0-flash-int4
- ModelScope : Ling-3.0-flash-int4
Si l'accès à Hugging Face est difficile, vous pouvez télécharger manuellement depuis ModelScope. Après téléchargement, il y a 24 fragments safetensors, totalisant environ 71,75 Go. Vous devez également laisser de l'espace pour le moteur d'inférence et le Cache KV pendant l'exécution.
Étape 2 : Préparer l'environnement. L'architecture BailingMoeV3 de Ling-3.0-flash est assez récente. J'ai essayé d'utiliser GGUF avec llama.cpp, mais cela a généré une erreur unknown model architecture: 'bailingmoe3'. Donc cette fois, j'ai directement utilisé la branche vLLM officiellement adaptée :
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
Étape 3 : Démarrer le service d'inférence. Remplacez le chemin du modèle par vos poids INT4 téléchargés localement :
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}'
⚠️
Veuillez remplacer les chemins dans la commande par les chemins réels sur votre machine.
Ici, la limite de contexte est fixée à 16K, la concurrence à 8, et le décodage spéculatif MTP est activé.
Remarque : MTP (Multi-Token Prediction) permet au modèle d'essayer de prédire plusieurs tokens à la fois. Les parties correctement prédites peuvent être adoptées directement, réduisant les cycles de calcul pour générer des tokens un par un et augmentant la vitesse de sortie.
Étape 4 : Vérifier le service. Une fois démarré, envoyez une simple requête :
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":"Bonjour, présentez-vous en une phrase."}],5 "stream":true}'
Le terminal commence à renvoyer du contenu en continu, indiquant que ce modèle 124B fonctionne localement.

03 Test des Performances et Capacités du Modèle
- Débit de Tokens Lors du premier démarrage du modèle, j'ai exécuté une série de tests en utilisant le benchmark intégré de vLLM. Les 20 requêtes ont été complétées, avec un débit de sortie de 84,34 tok/s, un débit total de tokens de 133,10 tok/s, et un taux d'acceptation MTP de 67,35 %.

Sortie du journal 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==================================================
Ensuite, j'ai effectué des tests de concurrence sur Ling et le Qwen 3.8-27B local. À 8 de concurrence, le débit agrégé de Ling était de 141,38 tok/s, tandis que celui de Qwen 3.8 était de 32,61 tok/s, une différence d'environ 4,34 fois lors de ce test.
🔥🔥🔥Comparaison des Tests de Charge Ling-3.0-Flash Vs Qwen3.8-27B

Ling-3.0-flash

Qwen 3.8 -27B


Certains pourraient se demander : pourquoi la concurrence unique de Ling n'est-elle que de 34,77 tok/s, mais à 8 de concurrence, elle devient 141,38 tok/s ? Les amis techniques pourraient aussi demander si ce score de concurrence unique est lent par rapport aux données officielles.
Ici, nous devons expliquer la méthode de test spécifique et les différences de vitesse causées par différentes méthodes d'évaluation :
- Méthode de Test et Vraie Chaîne de Bout en Bout : Ce test utilise une interface locale compatible OpenAI, en effectuant des tests de charge via des requêtes HTTP en streaming, et non un test d'inférence hors ligne détaché du cadre de service. Chaque requête Ling utilise une invite de texte long d'environ 150 tokens, générant jusqu'à 512 tokens. Le chronométrage commence à partir de la requête HTTP du client jusqu'à la fin de la réponse en streaming, incluant donc les appels HTTP locaux, la planification du service, le traitement du Tokenizer, le Prefill, le décodage token par token et le retour en streaming.
- Taux de Sortie d'un Flux Unique vs. Débit Agrégé de la Machine : Vitesse d'un flux unique (expérience utilisateur réelle) : À $c=1$, le taux de sortie de bout en bout est d'environ 35,34 tok/s (tests de conversation unique réels à 38+ tok/s), équivalent à plus de 35 caractères chinois par seconde, ce qui est extrêmement rapide visuellement ; Débit agrégé (sortie totale sous concurrence) : À mesure que la concurrence augmente, vLLM utilise le Continuous Batching pour combiner plusieurs requêtes en calculs GPU, exploitant pleinement la bande passante mémoire unifiée de Blackwell. À 8 de concurrence, le débit agrégé de la machine a grimpé à 141,38 tok/s.
Quant à la raison pour laquelle cela diffère de certains benchmarks officiels, la clé réside dans les critères de test. La précision du modèle, le moteur d'inférence, la longueur du contexte, le nombre de tokens d'entrée/sortie, l'échelle de concurrence, et l'utilisation d'inférence hors ligne ou de services HTTP affectent tous le résultat final. Ce n'est que lorsque ces conditions sont fondamentalement cohérentes que les nombres sont adaptés à une comparaison directe.
En termes simples : La vitesse varie en fonction des méthodes d'évaluation — si testé avec une concurrence extrêmement élevée (comme 32/64) ou dans un environnement de calcul pur sans protocoles réseau, les nombres de débit total sembleraient plus élevés ; dans nos appels de production quotidiens de conversation ou de codage en solo, la vitesse d'un flux unique de Ling de 35+ tok/s et une latence du premier token inférieure à 220 ms semblent déjà extrêmement fluides et sans décalage.
En concurrence unique, la vitesse moyenne d'un flux unique de Ling est d'environ 35,34 tok/s ; à 8 de concurrence, le débit agrégé atteint 141,38 tok/s. Le débit agrégé de Qwen3.8 à 8 de concurrence est de 32,61 tok/s. Lors de ce test, l'avantage de Ling se reflète principalement dans la vitesse de sortie et le débit en concurrence, avec des réponses sensiblement plus rapides en utilisation réelle.
2. Capacités Réelles
Les benchmarks ne reflètent qu'une partie des performances ; l'utilisabilité réelle dépend des performances du modèle sur des problèmes spécifiques. J'ai choisi trois directions pour des tests simples.
(1) Raisonnement Logique
J'ai préparé une variante du problème des poules et des lapins, un problème classique de lavage de voiture, et un problème de machine de lavage de voiture, principalement pour voir s'il peut comprendre avec précision les conditions plutôt que d'appliquer une réponse qui semble familière. Parmi eux, le problème des poules et des lapins incluait 4 oiseaux mécaniques à trois pattes pour briser les schémas conventionnels.

(2) Limites de Sécurité : Ensuite, j'ai testé sa réaction aux opérations à haut risque : s'il exécute directement ou identifie les risques, confirme avec l'utilisateur et fournit des alternatives plus sûres.

(3) Texte Long
Enfin, une série de tests de texte long. J'ai caché des informations clés dans un contexte long pour voir s'il pouvait trouver et répondre avec précision, tout en observant la vitesse de sortie et la stabilité sous texte long.

04 De l'API au TUI, puis à l'Appel d'Outils
Nous avons terminé le déploiement du modèle et les tests de capacités, mais pour les utilisateurs ordinaires, curl est plus adapté pour vérifier les interfaces que pour une utilisation quotidienne. Pour parler à un modèle local pendant longtemps, une interface d'interaction plus pratique est nécessaire.
J'ai donc d'abord créé un TUI simple, une interface de chat fonctionnant dans le terminal. Ce n'est pas un logiciel complexe ; j'ai fait écrire un script Python par une IA pour encapsuler les appels d'interface locaux, la sortie en streaming et l'historique des conversations, puis je l'ai démarré avec une commande :
1python3 ling-3.0-chat.py
Ainsi, je n'ai pas à écrire curl à chaque fois. Ouvrez le terminal et discutez directement ; les réponses arrivent en streaming, et vous pouvez voir TPS, TTFT et les compteurs de tokens. J'ai effectué les tests de capacités précédents dans cette interface.
Cependant, à ce stade, le TUI n'est qu'un outil de chat textuel sans capacité d'appeler des outils. Le grand modèle est comme un "cerveau" responsable de la réflexion, mais il n'a ni "mains ni pieds" pour lire des fichiers, exécuter des commandes ou connaître l'état actuel du système.
Pour lui permettre d'appeler les capacités du système, nous devons ajouter l'appel d'outils. En termes simples, des opérations comme l'exécution de commandes, la lecture et l'écriture de fichiers sont encapsulées en tant qu'outils. Le modèle juge d'abord de quelles informations il a besoin, puis initie une utilisation d'outil ; le script Python l'exécute et remet le résultat au modèle pour un traitement ultérieur.
Par exemple, initialement, quand je lui ai demandé de vérifier les informations GPU du système, il ne connaissait pas l'utilisation réelle et pouvait seulement me dire comment vérifier. Après avoir ajouté l'appel d'outils, il a pu exécuter lui-même des commandes système et organiser les résultats de la requête directement dans le TUI.
Basé sur le même principe, vous pouvez continuer à connecter la recherche Web, les interfaces internes de l'entreprise, les bases de données, etc. Des outils spécifiques peuvent être étendus en fonction des besoins métier.

05 Connexion à une Interface Visuelle
Pour un usage personnel, un TUI avec appel d'outils est en fait tout à fait suffisant. Pour aller plus loin et placer le modèle dans un poste de travail Agent plus complet, vous pouvez vous connecter à un framework agent comme Harness.
Cette fois, j'ai choisi DeepSeek Harness de Liang Sheng, qui n'ajoute pas seulement une page de chat mais fournit également la gestion du contexte, des espaces de travail, l'appel d'outils, le contrôle des autorisations et la planification des tâches, avec une interface Web intégrée. Il utilise une architecture "tout est un plugin", permettant une expansion fonctionnelle future.
Notez que DeepSeek Harness est encore en phase de prévisualisation pour développeurs et se met à jour rapidement, ce qui peut entraîner des changements incompatibles. Il existe de nombreux autres frameworks Agent open source ; vous pouvez choisir selon vos besoins.
Le processus de connexion n'est pas complexe : le cœur est d'ajouter un service de modèle personnalisé et de pointer l'adresse vers l'interface locale fournie par vLLM. En plus de configurer dans l'interface Web, vous pouvez également modifier le fichier de configuration comme indiqué :
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)
Après avoir démarré l'interface Web, ouvrez l'adresse par défaut dans votre navigateur :
1http://localhost:3080
Ainsi, le chat quotidien, l'historique et le changement de modèle peuvent tous être effectués dans DeepSeek Harness. Harness lui-même fournit des opérations sur les fichiers, l'exécution de commandes et la planification de tâches, qui peuvent être étendues via des plugins. Pour une utilisation spécifique et des plugins tiers, les amis intéressés peuvent effectuer une recherche.
Notez que les outils que j'ai écrits dans le TUI Python ne migreront pas automatiquement. Pour les utiliser dans Harness, ils doivent être réintégrés selon son mécanisme de plugin. Voici l'effet d'intégration réel que j'ai réalisé pour Ling ; vous pouvez regarder l'enregistrement.

06 Construction d'un Flux de Travail IA
À ce stade, le lien du modèle unique, du déploiement à l'interface et à l'appel d'outils pour Ling-3.0-flash, est entièrement établi.
Cependant, dans les projets réels, nous n'utilisons généralement pas un seul modèle. Différents modèles excellent dans différentes choses ; les combiner est souvent mieux que de laisser un seul modèle tout gérer.
L'avantage de Ling-3.0-flash est le traitement du texte et la vitesse de génération, mais il ne prend pas en charge l'entrée multimodale native. Si une tâche nécessite de comprendre des images ou des vidéos, vous pouvez connecter un modèle multimodal comme Qwen3.8-27B ; si vous avez besoin de générer une vidéo, vous pouvez connecter le récemment open-sourcé MiniMax H3. Chaque modèle gère ce qu'il fait de mieux, en passant les résultats au suivant.
Par exemple, pour construire un flux de travail de génération vidéo, Ling peut d'abord comprendre les exigences, écrire des scripts et diviser les storyboards, puis le modèle multimodal vérifie les documents de référence et la cohérence visuelle, et enfin, le modèle vidéo génère. Après la génération, un autre cycle de vérification visuelle peut être effectué pour modifier les invites et régénérer en fonction des résultats :
1Exigences et Documents2→ Ling génère script et storyboards3→ Le modèle multimodal vérifie les documents et les exigences visuelles4→ MiniMax H3 génère la vidéo5→ Le modèle multimodal vérifie les visuels et la continuité6→ Ling ajuste les invites en fonction des retours7→ L'humain effectue la révision finale
La vidéo ci-dessous montre l'effet réel des invites générées par Ling-3.0-flash puis transmises à MiniMax H3 pour génération.

Une fois ce processus fixé, vous n'avez besoin que de changer les exigences et les documents pour une utilisation répétée. Cependant, exécuter plusieurs grands modèles localement simultanément a des exigences très élevées en VRAM et en mémoire. Ling INT4 fait environ 72 Go, Qwen3.8-27B BF16 fait environ 51,77 Go, plus le Cache KV et les modèles vidéo ; il est difficile de tous les garder résidents sur ce Spark.
Avant le déploiement réel, assurez-vous de calculer la quantité de VRAM ou de mémoire unifiée dont chaque modèle a besoin. Lorsque les ressources sont insuffisantes, vous pouvez changer de modèle étape par étape, choisir des versions quantifiées ou répartir les modèles sur plusieurs appareils. Plusieurs modèles ne fonctionnent plus indépendamment mais collaborent autour de la même tâche — c'est un véritable flux de travail IA multi-modèles utilisable.
07 Réflexions Finales
Du déploiement du modèle, du TUI et de l'appel d'outils aux flux de travail multi-modèles, l'ensemble du lien est complet. Cet article vise à partager une méthode reproductible plutôt qu'une configuration fixe.
Les modèles open source continueront de se mettre à jour. À l'avenir, que vous changiez de modèles, de versions de quantification ou de moteurs d'inférence, le chemin du téléchargement des poids et du démarrage des services à la connexion des outils et des flux de travail ne changera pas beaucoup.
Si les conditions le permettent, je recommande toujours à tout le monde de déployer des modèles locaux personnellement :
- Contrôle des Données : Les fichiers, les conversations et les données métier restent sur votre machine ou votre intranet, avec les autorisations de répertoire et de commande restreintes par vous.
- Adapté à une Utilisation Haute Fréquence : Pas besoin de calculer les coûts de tokens par utilisation, réduisant la dépendance au réseau et aux services tiers.
- Personnalisation Facile : Les modèles, la précision de quantification, les moteurs d'inférence et les outils peuvent tous être ajustés, et les interfaces internes et les bases de données peuvent être connectées.
Alors que les modèles open source deviennent plus puissants, le déploiement local deviendra le choix de plus de personnes. Vous pouvez construire des outils et des flux de travail en fonction de vos besoins de tâche, des conditions de votre équipement et de votre budget. J'espère que tout le monde pourra avoir son propre Agent local à l'avenir, sans avoir à surveiller la consommation de tokens à chaque fois, atteignant véritablement sa propre "Liberté des Tokens" !
Ressources Connexes
- Hugging Face : Poids INT4 de Ling-3.0-flash
- ModelScope : Poids INT4 de Ling-3.0-flash
- Dépôt d'Adaptation vLLM Officiel
📚 Résumé des Articles Précédents
- Guide Pratique Hermes Agent : De l'Anxiété X à l'Accumulation Automatique
- Guide Anti-Chute de Cheveux du Programmeur
- Connexion d'Hermes à iMessage
- Connexion d'Hermes à X Premium
- Guide Complet Hermes Agent
- Guide d'Introduction Hermes Agent : Modèles Auxiliaires
- Guide d'Introduction Hermes Agent
- Guide Avancé Hermes Agent
- Guide Incomplet Hermes Agent
- Guide Complet de l'Abonnement Claude Pro au Nigeria
- Tutoriel pour l'Enregistrement d'un Apple ID au Nigeria
- Abonnement ChatGPT Plus à Moitié Prix en Turquie
- Enregistrement d'un Apple ID Américain
- Abonnement Claude/ChatGPT/Gemini via Alipay
- Tutoriel Complet pour le Déploiement Local de LLM sur Mac
- Vérification de la Qualité IP
- Pourquoi Doubao Ne Recommande Pas Votre Marque
- Comment Expliquer à Votre Grand-Mère Que Ce Que Doubao a Dit N'est Pas Vrai
Si cela a été utile, veuillez suivre + mettre en favori + partager 👏🏻
Suivez @Lonely__MH pour des mises à jour continues sur des tutoriels adaptés aux débutants et des informations sur les outils IA.





