Inférence locale¶
Ce qui est publié¶
Le dépôt contient une implémentation de référence lisible, explicitement pas un moteur de service de production. Elle couvre l'encodeur visuel et son aligneur, la fenêtre glissante et l'attention creuse compressée avec son indexeur à deux niveaux, les recherches Engram, le MoE, les Hyper-Connections et le chemin avant de DSpark. La génération elle-même est un échantillonnage autorégressif simple.
| Fichier | Contenu |
|---|---|
model.py |
le modèle complet, avec auto-test |
kernel.py |
noyaux de quantification et GEMM en TileLang |
convert.py |
conversion des poids Hugging Face vers le format parallèle |
generate.py |
boucle de génération, mode interactif |
vision.py, image_processor.py |
voie visuelle |
engram.py |
module de mémoire conditionnelle |
config.json |
configuration du runtime |
La conversion des poids¶
Le runtime utilise un fichier de point de contrôle converti par rang de parallélisme de tenseur :
export HF_CKPT_PATH=/chemin/vers/DeepSeek-V4.1-Flash-HF
export SAVE_PATH=/chemin/vers/DeepSeek-V4.1-Flash-TP8
export MP=8
python convert.py \
--hf-ckpt-path "${HF_CKPT_PATH}" \
--save-path "${SAVE_PATH}" \
--model-parallel "${MP}" \
--expert-dtype fp4 \
--tokenizer-path "${HF_CKPT_PATH}"
Le nombre d'experts est déduit des noms de tenseurs, il n'a pas à être passé.
--tokenizer-path désigne le répertoire contenant tokenizer.json et
tokenizer_config.json, copiés dans le point de contrôle converti.
L'exécution¶
export CKPT_PATH=/chemin/vers/DeepSeek-V4.1-Flash-TP8
export MP=8
INPUT_FILE=examples/example.txt ./run.sh
INPUT_FILE=examples/example_harmony.json ./run.sh
Les deux fichiers d'exemple expriment le même prompt à deux images entrelacées, et produisent donc des prompts encodés et des identifiants de jetons identiques.
En interactif :
torchrun --nproc-per-node "${MP}" generate.py \
--ckpt-path "${CKPT_PATH}" \
--config config.json \
--interactive \
--temperature 0.6
Pour du multi-nœud, les arguments habituels de torchrun — --nnodes,
--node-rank, --master-addr, --master-port — précèdent generate.py.
L'auto-test¶
python model.py
Ce test construit un petit modèle à partir des valeurs par défaut de
ModelArgs, exécute un préremplissage plus 22 étapes de décodage, et exerce les
vrais noyaux dense-FP8 et MoE-FP4.
Ce que l'auto-test ne teste pas
Les poids sont non initialisés. Le test vérifie les formes des tenseurs et la plomberie des noyaux, pas la numérique. Il ne dit rien sur la correction des sorties.
La reproduction des évaluations¶
Le dépôt contient un dossier evaluation avec les instructions pas à pas pour
reproduire les résultats de DeepSWE v1.1, pour l'agent dsh-minimal et pour
mini-swe-agent officiel, ainsi que le correctif nécessaire pour intégrer
dsh-minimal à Pier.
C'est un point à porter au crédit de DeepSeek : peu de laboratoires publient le nécessaire pour reproduire leurs chiffres agentiques.
Ce qu'on peut réellement faire tourner¶
Cette implémentation n'est pas utilisable seul
La conversion vise 8 rangs de parallélisme de tenseur par défaut, et le modèle demande de l'ordre de plusieurs centaines de gigaoctets pour les poids, plus les tables Engram. Voir Matériel et coûts.
L'implémentation de référence est destinée à comprendre et vérifier l'architecture, ou à servir de base à un moteur de service. Pas à faire tourner le modèle sur une station de travail.
Les tests du format de prompt¶
Le module d'encodage a sa propre suite :
python -m pytest -q test_encoding.py
Les cas de test sont stockés en paires JSON d'entrée / TXT de sortie attendue. Ils couvrent les conversations multitours, les appels d'outils, le mode réflexion, l'effort de raisonnement numérique, les messages système en milieu de conversation et l'ordre des images en multimodal — y compris une vérification que les exemples TXT et JSON encodent bien vers le même prompt.
C'est la partie du dépôt la plus immédiatement utile : elle ne demande ni GPU ni poids, et fixe sans ambiguïté le format attendu par le modèle.
Chapitre suivant : Matériel et coûts