resumos
10 de fevereiro de 2025Suporte para DeepseekR1 e V3 em uma única GPU (24 GB de RAM) / várias GPUs e 382 GB de RAM, com acelerações de até 3 a 28 vezes.
Saudações a todos da equipe KTransformers (anteriormente conhecida como equipe do Projeto de código aberto de inferência híbrida CPU/GPU, conhecida pelo DeepSeek-V2).
KTransformadores A equipe recebeu solicitações de suporte ao DeepSeek-R1/V3 e está muito animada em anunciar que ele finalmente foi entregue!
Desculpe a demora, mas a equipe do KTransformers está preparando algo realmente incrível!
Hoje, a equipe do KTransformers tem o orgulho de anunciar não apenas o suporte ao DeepSeek-R1/V3, conforme mostrado no vídeo abaixo:
https://github.com/user-attachments/assets/ebd70bfa-b2c1-4abb-ae3b-296ed38aa285
- [Updated!!!!] Local 671B DeepSeek-Coder-V3/R1. Executa sua versão Q4_K_M somente com 14 GB de memória de vídeo e 382 GB de RAM.
- Velocidade de pré-preenchimento (tokens/s).
- KTransfermor: 54,21 (32 núcleos) → 74,362 (caminho duplo, 2×32 núcleos) → 255,26 (kernel MoE otimizado baseado em AMX, somente V0.3) → 286,55 (uso seletivo de 6 especialistas, somente V0.3)
- junto com llama.cpp alcançou até 10,31 tokens/s em 2×32 núcleos em comparação com o 27,79 vezes a aceleração.
- Velocidade de decodificação (tokens/s).
- KTransfermor: 8,73 (32 núcleos) → 11,26 (duplo, 2×32 núcleos) → 13,69 (uso seletivo de 6 especialistas, somente V0.3)
- Em comparação com os 4,51 tokens/s do llama.cpp em 2×32 núcleos, isso atinge até Aceleração de 3,03x.
- Velocidade de pré-preenchimento (tokens/s).
A equipe do KTransformers também apresentou uma prévia das próximas otimizações, incluindo um kernel acelerado pelo Intel AMX e métodos de ativação seletiva de especialistas, que melhorarão significativamente o desempenho. Com a versão 0.3-preview, o pré-preenchimento é de até 286 tokens/s, mais rápido do que o llama.cpp para inferência nativa! 28 vezes.
A distribuição binária já está disponível e o código-fonte será liberado assim que possível!Veja os pacotes de rodas aqui.
Termos de preparação
A equipe do KTransformers executou os melhores testes de desempenho (V0.2) nas seguintes configurações:
CPU: Intel (R) Xeon (R) Gold 6454S 1T RAM (2 nós NUMA)
GPU: Memória de vídeo 4090D 24G
Memória: memória de servidor DDR5-4800 padrão (1 TB)
Resultados de benchmarking
V0.2
configurar
- Modelo: DeepseekV3-q4km (int4)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S, 32 núcleos por caminho, 2 caminhos, 2 nós numéricos
- GPU: Memória de vídeo 4090D 24G
- Teste da equipe KTransformers após aquecimento completo
Consumo de memória.
- Único: 382 G de RAM, pelo menos 14 GB de VRAM
- Duplo: 1T de RAM, pelo menos 14GB de VRAM
Resultados de benchmarking
O cenário "6 especialistas" faz parte da visualização da V0.3.
| Prompt
(500 tokens) | Dual Ktrans (6 especialistas) | Dual Ktrans (8 especialistas) | Ktrans único (6 especialistas) | Ktrans único (8 especialistas) | llama.cpp (8 especialistas) |
---|---|---|---|---|---|
Token/s de pré-preenchimento | 97.32 | 82.94 | 65.14 | 54.21 | 10.31 |
Decodificar token/s | 13.69 | 12.208 | 10.303 | 8.73 | 4.51 |
Aumentar a velocidade de decodificação em até 3,03 vezesAumento máximo na velocidade de pré-enchimento 9,44 vezes. Parece que o KTransformers não é tão bom quanto o pré-populado em termos de aceleração da decodificação, e ainda há muito espaço para otimização da decodificação.
V0.3 - Visualização
configurar
- Modelo: DeepseekV3-BF16 (quantificado on-line como int8 para CPU, int4 para GPU)
- CPU: cpu_model_name: Intel (R) Xeon (R) Gold 6454S, 32 núcleos por caminho, 2 caminhos, 2 nós numéricos
- GPU: (1~4)x 4090D 24GVRAM (prompts mais longos exigem mais memória)
Consumo de memória.
- 644 GB de RAM, pelo menos 14 GB de memória gráfica
Resultados de benchmarking
Duração do prompt | 1K | 2K | 4K | 8K |
---|---|---|---|---|
KTrans (8 especialistas) Token/s de pré-preenchimento | 185.96 | 255.26 | 252.58 | 195.62 |
KTrans (6 especialistas) Token/s de pré-preenchimento | 203.70 | 286.55 | 271.08 | 207.20 |
O KTrans V0.3 é mais rápido do que o KTrans V0.2 no pré-preenchimento. 3,45 vezesEle é mais rápido do que o llama.cpp. 27,79 vezes. Esse aumento na velocidade de pré-preenchimento é realmente impressionante e parece que a KTransformers se esforçou bastante na otimização do pré-preenchimento.
A velocidade de decodificação é a mesma do KTrans V0.2 (versão de 6 especialistas), portanto, é omitida. Parece que a versão V0.3 se concentra principalmente em melhorias na velocidade de pré-preenchimento.
A principal aceleração vem de
- Conjunto de instruções Intel AMX e layout de memória amigável ao cache projetado pela equipe da KTransformers
- Estratégia de seleção de especialistas para selecionar menos especialistas com base em resultados de perfis off-line de dados fora do domínio
De acordo com a equipe do KTransformers para DeepSeekV2, DeepSeekV3 e DeepSeekR1, o
Ao reduzir ligeiramente o número de especialistas ativados na inferência, o
A qualidade da saída não é alterada. Mas a velocidade de decodificação e pré-preenchimento
será mais rápido, o que é animador. Portanto, a demonstração da equipe do KTransformers tira proveito dessa descoberta Parece que a "estratégia de seleção de especialistas" é a chave para acelerar, mas como garantir que a qualidade do resultado não se deteriore precisa de mais testes e verificações.
Como funciona
Demonstração V0.2
Versão de caminho único (32 núcleos)
A equipe do KTransformers bate-papo local
O comando de teste é:
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
numactl -N 1 -m 1 python . /ktransformers/local_chat.py --model_path --gguf_path --prompt_file --cpu_infer 33 -- cache_lens 1536
pode ser um caminho local ou um conjunto de caminhos de um hugging face on-line, por exemplo, deepseek-ai/DeepSeek-V3. Se você tiver problemas de conexão on-line, tente usar um espelho (hf-mirror.com).
também pode ser um caminho on-line, mas como ele é grande, a equipe do KTransformers recomenda que você faça o download e quantifique o modelo no formato desejado!
comando numactl -N 1 -m 1
Projetado para evitar transferências de dados entre nós NUMA
Versão Dual-Path (64 núcleos)
Antes de instalar (usando install.sh ou make dev_install
), por meio de exportar USE_NUMA=1
Definição de variáveis de ambiente USE_NUMA=1
(Se já estiver instalado, reinstale com essa variável de ambiente definida)
A equipe do KTransformers bate-papo local
O comando de teste é:
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 --gguf_path --prompt_file --cpu_infer 65 -- cache_lens 1536
tem o mesmo significado. No entanto, como a equipe do KTransformers usa uma via de mão dupla, ele será cpu_infer
Definido como 65
Demonstração V0.3
Versão Dual-Path (64 núcleos)
A equipe do KTransformers bate-papo local
O comando de teste é:
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 --gguf_path --prompt_file -cpu_infer 65 - -cache_lens 1536
O significado dos parâmetros é o mesmo que na V0.2. No entanto, como a equipe do KTransformers usa um caminho duplo, os parâmetros cpu_infer
Definido como 65
Algumas explicações
- A equipe do KTransformers também queria utilizar ainda mais os dois nós NUMA na CPU Xeon Gold.
Para evitar o custo da transferência de dados entre os nós, a equipe do KTransformers está
A matriz de chaves é "copiada" em ambos os nós, o que consome mais memória, mas acelera o processo de pré-população e decodificação.
No entanto, esse método usa muita memória e é lento no carregamento de pesos, portanto, seja paciente enquanto ele carrega!
A equipe do KTransformers otimizará essa enorme sobrecarga de memória. Fique atento~ Essa "cópia" da matriz pode acelerar o processo, mas o espaço ocupado pela memória é um problema real, portanto, estamos ansiosos para ver o que a equipe do KTransformers vai criar no futuro. - parâmetro de comando
--cpu_infer 65
Especifique o número de núcleos a serem usados (mais do que o número de núcleos físicos é suficiente, o
Mas mais não é melhor. Basta ajustá-lo para um pouco menos do que o número real de núcleos) - Por que a inferência híbrida CPU/GPU?
DeepSeek O algoritmo MLA é intensivo em termos de computação. Embora seja possível executá-los inteiramente na CPU, a transferência do cálculo pesado para a GPU pode melhorar drasticamente o desempenho. Com a CPU lidando com o cálculo especializado e a GPU lidando com o MLA/KVCache, essa estratégia de inferência híbrida parece inteligente, aproveitando ao máximo a CPU e a GPU. - De onde vem o aumento da velocidade?
- Descarga de especialista: ao contrário das descargas tradicionais baseadas em camada ou KVCache (como visto em llama.cpp), a equipe do KTransformers descarrega a computação especializada para a CPU e o MLA/KVCache para a GPU, o que se encaixa perfeitamente na arquitetura do DeepSeek para obter eficiência ideal.
- Otimização do Intel AMX - O kernel acelerado pelo AMX da equipe do KTransformers foi cuidadosamente ajustado para ser executado várias vezes mais rápido do que a implementação existente do llama.cpp. A equipe do KTransformers planeja abrir o código-fonte desse kernel após a limpeza e está considerando contribuir com o código para o llama.cpp. A adição do conjunto de instruções AMX parece ser um dos principais fatores para o aumento de velocidade do KTransformers.
- Por que CPUs Intel?
Atualmente, a Intel é o único fornecedor de CPU que oferece suporte a algo como a instrução AMX, que oferece um desempenho significativamente melhor do que a alternativa somente AVX. Parece que as CPUs da Intel são o caminho a seguir quando se trata de obter o melhor desempenho dos KTransformers.