Nécessite seulement 14GB de RAM pour exécuter DeepSeek-Coder V3/R1 (Q4_K_M quantised) localement.

résumés

10 février 2025Prise en charge de DeepseekR1 et V3 sur un seul GPU (24 Go de RAM) / plusieurs GPU et 382 Go de RAM, avec des accélérations allant jusqu'à 3-28x.

Bonjour à tous, de la part de l'équipe KTransformers (anciennement connue comme l'équipe CPU/GPU Hybrid Inference Open Source Project, connue pour DeepSeek-V2).

KTransformateurs L'équipe a reçu des demandes pour le support de DeepSeek-R1/V3 et est très excitée d'annoncer qu'il a finalement été livré !
Désolé pour l'attente, mais l'équipe de KTransformers a préparé quelque chose de vraiment incroyable !

Aujourd'hui, l'équipe de KTransformers est fière d'annoncer non seulement le support de DeepSeek-R1/V3, comme le montre la vidéo ci-dessous :

https://github.com/user-attachments/assets/ebd70bfa-b2c1-4abb-ae3b-296ed38aa285

 

  • [Updated !!!!] Local 671B DeepSeek-Coder-V3/R1. La version Q4_K_M ne fonctionne qu'avec 14 Go de mémoire vidéo et 382 Go de RAM.
    • Vitesse de pré-remplissage (jetons/s).
      • KTransfermor : 54.21 (32 cœurs) → 74.362 (double chemin, 2×32 cœurs) → 255.26 (noyau MoE optimisé basé sur AMX, V0.3 uniquement) → 286.55 (utilisation sélective de 6 experts, V0.3 uniquement)
      • avec llama.cpp a atteint jusqu'à 10,31 jetons/s à 2×32 cœurs par rapport à la solution de l 27,79 fois l'accélération.
    • Vitesse de décodage (jetons/s).
      • KTransfermor : 8.73 (32 cœurs) → 11.26 (double, 2×32 cœurs) → 13.69 (utilisation sélective de 6 experts, V0.3 uniquement)
      • Par rapport aux 4,51 jetons/s de llama.cpp sur 2×32 cœurs, cette méthode permet d'obtenir jusqu'à Accélération de 3,03x.

L'équipe de KTransformers a également donné un aperçu des optimisations à venir, y compris un noyau accéléré par Intel AMX et des méthodes d'activation d'experts sélectives, qui amélioreront considérablement les performances. Avec la V0.3-preview, le prefill atteint 286 tokens/s, plus rapide que llama.cpp pour l'inférence native ! 28 fois.
La distribution binaire est maintenant disponible et le code source sera publié dès que possible !Voir les paquets de roues ici.

 

Conditions de préparation

L'équipe de KTransformers a effectué les meilleurs tests de performance (V0.2) sur les configurations suivantes :

CPU : Intel (R) Xeon (R) Gold 6454S 1T RAM (2 nœuds NUMA)

GPU : 4090D 24G Mémoire vidéo

Mémoire : Mémoire serveur standard DDR5-4800 (1 TB)

 

Résultats de l'étalonnage

V0.2

mettre en place

  • Modèle : DeepseekV3-q4km (int4)
  • CPU : cpu_model_name : Intel (R) Xeon (R) Gold 6454S, 32 cores per path, 2 paths, 2 numa nodes
  • GPU : 4090D 24G Mémoire vidéo
  • L'équipe des KTransformers se teste après un échauffement complet

Consommation de mémoire.

  • Simple : 382 Go de RAM, au moins 14 Go de VRAM
  • Double : 1T RAM, au moins 14GB VRAM

Résultats de l'étalonnage

Le scénario "6 experts" fait partie de l'aperçu de la V0.3.

| Prompt

(500 jetons)Double Ktrans (6 experts)Double Ktrans (8 experts)Ktrans unique (6 experts)Ktrans unique (8 experts)llama.cpp (8 experts)
Jetons de pré-remplissage97.3282.9465.1454.2110.31
Décoder les jetons13.6912.20810.3038.734.51

Augmenter la vitesse de décodage jusqu'à 3,03 foisAugmentation maximale de la vitesse de pré-remplissage 9.44 fois. Il semble que KTransformers ne soit pas aussi performant que le prépeuplé en termes d'accélération du décodage, et qu'il y ait encore beaucoup de place pour l'optimisation du décodage.

V0.3 - Aperçu

mettre en place

  • Modèle : DeepseekV3-BF16 (quantifié en ligne comme int8 pour le CPU, int4 pour le GPU)
  • CPU : cpu_model_name : Intel (R) Xeon (R) Gold 6454S, 32 cores per path, 2 paths, 2 numa nodes
  • GPU : (1~4)x 4090D 24GVRAM (les invites plus longues nécessitent plus de mémoire)

Consommation de mémoire.

  • 644 Go de RAM, au moins 14 Go de mémoire graphique

Résultats de l'étalonnage

Longueur de l'invite1K2K4K8K
KTrans (8 experts) Jetons de pré-remplissage/s185.96255.26252.58195.62
KTrans (6 experts) Jetons de pré-remplissage/s203.70286.55271.08207.20

KTrans V0.3 est plus rapide que KTrans V0.2 pour le pré-remplissage. 3,45 foisIl est plus rapide que llama.cpp. 27,79 fois. Cette augmentation de la vitesse de pré-remplissage est vraiment impressionnante et il semble que KTransformers ait fait beaucoup d'efforts pour optimiser le pré-remplissage.
La vitesse de décodage est la même que celle de KTrans V0.2 (version 6 experts), elle est donc omise. Il semble que la version V0.3 se concentre principalement sur l'amélioration de la vitesse de pré-remplissage.

L'accélération principale est due à

  • Jeu d'instructions Intel AMX et disposition de la mémoire adaptée à la mémoire cache, conçus par l'équipe de KTransformers
  • Stratégie de sélection d'experts pour sélectionner un nombre réduit d'experts sur la base de résultats de profils hors ligne à partir de données hors domaine

Selon l'équipe de KTransformers pour DeepSeekV2, DeepSeekV3 et DeepSeekR1, l'équipe de KTransformers pour DeepSeekV2, DeepSeekV3 et DeepSeekR1, les
En réduisant légèrement le nombre d'experts activés dans l'inférence, la
La qualité de la sortie ne change pas. Mais la vitesse de décodage et de pré-remplissage
s'accélère, ce qui est encourageant. La démo de l'équipe KTransformers tire donc parti de cette découverte
 Il semble que la "stratégie de sélection des experts" soit la clé de l'accélération, mais la manière de garantir que la qualité des résultats ne se détériore pas nécessite davantage de tests et de vérifications.

 

Comment cela fonctionne-t-il ?

V0.2 Démo

Version à chemin unique (32 cœurs)

L'équipe de KTransformers local_chat La commande de test est la suivante :

git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
numactl -N 1 -m 1 python ./ktransformers/local_chat.py --model_path <your model path> --gguf_path <your gguf path>  --prompt_file <your prompt txt file>  --cpu_infer 33  --cache_lens 1536
<当看到 chat 时,按 Enter 键加载文本 prompt_file>

peut être un chemin d'accès local ou un chemin d'accès défini à partir d'un visage de câlin en ligne, par exemple deepseek-ai/DeepSeek-V3. Si vous rencontrez des problèmes de connexion en ligne, essayez d'utiliser un miroir (hf-mirror.com).

peut également être un chemin en ligne, mais comme il est volumineux, l'équipe de KTransformers vous recommande de le télécharger et de quantifier le modèle dans le format que vous souhaitez !

commande numactl -N 1 -m 1 Conçu pour éviter les transferts de données entre les nœuds NUMA

Version à double chemin (64 cœurs)

Avant de procéder à l'installation (en utilisant install.sh ou make dev_install), par l'intermédiaire de export USE_NUMA=1 Définition des variables d'environnement USE_NUMA=1 (Si elle est déjà installée, réinstallez-la avec cette variable d'environnement)

L'équipe de KTransformers local_chat La commande de test est la suivante :

git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
export USE_NUMA=1
make dev_install # or sh ./install.sh
python ./ktransformers/local_chat.py --model_path <your model path> --gguf_path <your gguf path>  --prompt_file <your prompt txt file>  --cpu_infer 65  --cache_lens 1536
<当看到 chat 时,按 Enter 键加载文本 prompt_file>

a la même signification. Cependant, comme l'équipe de KTransformers utilise le mode bidirectionnel, il s'agira de cpu_infer Fixé à 65

V0.3 Démo

Version à double chemin (64 cœurs)

L'équipe de KTransformers local_chat La commande de test est la suivante :

wget https://github.com/kvcache-ai/ktransformers/releases/download/v0.1.4/ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311-linux_x86_64.whl
pip install ./ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311-linux_x86_64.whl
python -m ktransformers.local_chat --model_path <your model path> --gguf_path <your gguf path>  --prompt_file <your prompt txt file>  --cpu_infer 65  --cache_lens 1536
<当看到 chat 时,按 Enter 键加载文本 prompt_file>

La signification des paramètres est la même que dans la V0.2. Cependant, comme l'équipe de KTransformers utilise un double chemin, le paramètre cpu_infer Fixé à 65

 

Quelques explications

  1. L'équipe de KTransformers souhaitait également exploiter davantage les deux nœuds NUMA du processeur Xeon Gold.
    Afin d'éviter le coût du transfert de données entre les nœuds, l'équipe de KTransformers est
    La matrice des clés est "copiée" sur les deux nœuds, ce qui consomme plus de mémoire mais accélère le processus de prépeuplement et de décodage.
    Cependant, cette méthode utilise beaucoup de mémoire et est lente à charger les poids, alors soyez patient pendant le chargement !
    L'équipe de KTransformers optimisera cette énorme surcharge de mémoire. Restez à l'écoute~ Cette "copie" de la matrice peut accélérer le processus, mais l'encombrement mémoire est un vrai problème, nous sommes donc impatients de voir ce que l'équipe de KTransformers va proposer à l'avenir.
  2. paramètre de commande --cpu_infer 65 Spécifiez le nombre de cœurs à utiliser (un nombre supérieur au nombre de cœurs physiques est acceptable, l'option
    Mais plus n'est pas mieux. Il suffit de l'ajuster à un nombre légèrement inférieur au nombre réel de cœurs.)
  3. Pourquoi une inférence hybride CPU/GPU ?
    DeepSeek L'algorithme MLA est très gourmand en ressources informatiques. Bien qu'il soit possible de les exécuter entièrement sur le CPU, le fait de décharger les calculs lourds sur le GPU peut améliorer considérablement les performances. Avec le CPU gérant le calcul expert et le GPU gérant l'algorithme MLA/KVCache, cette stratégie d'inférence hybride semble intelligente, tirant pleinement parti à la fois du CPU et du GPU.
  4. D'où vient l'augmentation de la vitesse ?
    • Déchargement des experts : Contrairement aux décharges traditionnelles basées sur les couches ou KVCache (comme on le voit dans llama.cpp), l'équipe de KTransformers décharge le calcul des experts sur le CPU et MLA/KVCache sur le GPU, ce qui correspond parfaitement à l'architecture de DeepSeek pour une efficacité optimale.
    • Optimisation Intel AMX - Le noyau accéléré par AMX de l'équipe KTransformers a été soigneusement réglé pour fonctionner plusieurs fois plus vite que l'implémentation existante de llama.cpp. L'équipe KTransformers prévoit de mettre ce noyau en open-source après l'avoir nettoyé, et envisage de contribuer au code de llama.cpp en amont. l'AMX L'ajout du jeu d'instructions AMX semble être l'un des facteurs clés de l'accélération de KTransformers.
  5. Pourquoi les processeurs Intel ?
    Intel est actuellement le seul fournisseur de CPU à prendre en charge une instruction telle que l'AMX, qui offre des performances nettement supérieures à celles de l'alternative AVX. Il semble que les CPU Intel soient la meilleure solution pour bénéficier des meilleures performances de KTransformers.
© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...