Trata-se de usar ollama Instruções (mínimas) para implantar o DeepSeek R1 671B (versão completa não refinada) localmente. Recentemente, tem havido grandes Executando o Deepseek R1 671b por US$ 2.000.ótimo para uso pessoal.
modelagem
primordial DeepSeek R1 Com 720 GB de tamanho, o modelo 671B é enorme. Até mesmo o monstro NVIDIA DGX H100 (8xH100) de US$ 200.000 teria problemas com isso. Aqui eu usei uma versão dinamicamente quantificada do Unsloth AI, que quantifica seletivamente algumas camadas importantes, mantendo a maioria das camadas MoE baixas. Como resultado, o modelo pode ser quantificado para um tamanho pequeno de 131 GB (1,58 bits), tornando-o mais acessível aos usuários locais. Ele funciona até mesmo em um único Mac Studio (US$ 56 mil)!
Escolhi os dois modelos a seguir com base nas especificações de minha estação de trabalho:
DeepSeek-R1-UD-IQ1_M
(671B, 1,73 bits de quantificação dinâmica, 158 GB, HuggingFace)DeepSeek-R1-Q4_K_M
(671B, padrão de 4 bits, 404 GB, HuggingFace)
Há quatro modelos de Quantização dinâmica, variando de 131 GB (1,58 bits) a 212 GB (2,51 bits), para que você possa escolher de acordo com suas especificações. As descrições detalhadas dos quatro modelos podem ser encontradas aqui, e eu recomendo que você as leia antes de fazer sua escolha.
Requisitos de hardware
Farei os seguintes requisitos de memória para o modelo, que é o principal gargalo
DeepSeek-R1-UD-IQ1_M
RAM + VRAM ≥ 200 GBDeepSeek-R1-Q4_K_M
RAM + VRAM ≥ 500 GB
O Ollama permite a inferência mista de CPU e GPU (você pode descarregar algumas camadas do modelo na VRAM para acelerar a inferência), portanto, você pode somar aproximadamente RAM e VRAM como espaço total de memória. Além dos pesos do modelo (158 GB e 404 GB), algum espaço de memória deve ser reservado para o cache de contexto. Quanto mais espaço de memória você deixar, maior será a janela de contexto que poderá ser configurada.
Testei os dois modelos em uma estação de trabalho com uma RTX 4090 quádrupla (4 x 24 GB), RAM DDR5 5600 de quatro canais (4 x 96 GB) e uma CPU ThreadRipper 7980X (64 núcleos). Observe que, se você quiser executar apenas a versão de quantificação dinâmica, não precisará de uma configuração tão "luxuosa". Em termos gerais, a velocidade de geraçãoser
DeepSeek-R1-UD-IQ1_M
Taxa de geração de texto curto de 7-8 tokens/s (~500 tokens)- 4-5 tokens/s se nenhuma GPU for usada (raciocínio totalmente na CPU).
DeepSeek-R1-Q4_K_M
Taxa de geração de texto curto de 2 a 4 tokens/s (~500 tokens)
Para textos longos, a velocidade será reduzida para 1-2 tokens/s.
Minha configuração de estação de trabalho para raciocínio de LLM em larga escalanão éA opção mais econômica (que apoia amplamente minha pesquisa sobre o Circuit Transformer - fique à vontade para conferir!) . Algumas das opções econômicas disponíveis atualmente incluem
- Apple Macs com memória unificada grande e de alta largura de banda (por exemplo, 2 x 192 GB de memória unificada).
- Servidores com alta largura de banda de memória (como este, com 24 x 16 GB DDR5 4800).
- Servidores de GPU em nuvem com duas ou mais GPUs de 80 GB (Nvidia H100 80GB ~$2 por hora por placa)
Se as especificações do seu hardware forem um pouco limitadas, talvez você queira considerar a versão quantised de 1,58 bits no menor tamanho (131 GB). Ela está disponível em
- Um Mac Studio com 192 GB de memória unificada (preço de referência, ~$5600)
- 2 x Nvidia H100 80GB (preço de referência, ~$4 por hora)
A velocidade é boa (> 10 tokens/seg.).
mover
- Faça o download do arquivo de modelo (.gguf) do HuggingFace (de preferência usando um downloader, eu uso o XDM) e mescle os arquivos separados em um só ^1^ .
- Instalação do ollama
curl -fsSL https://ollama.com/install.sh | sh
- Criação de um arquivo de modelo para orientar o ollama na criação do modelo
DeepSeekQ1_Modelfile
(Conteúdo (para)DeepSeek-R1-UD-IQ1_M
::FROM /home/snowkylin/DeepSeek-R1-UD-IQ1_M.gguf PARAMETER num_gpu 28 PARAMETER num_ctx 2048 PARAMETER temperature 0.6 TEMPLATE "<|User|>{{ .System }} {{ .Prompt }}<|Assistant|>"
DeepSeekQ4_Modelfile
(Conteúdo (para)DeepSeek-R1-Q4_K_M
::FROM /home/snowkylin/DeepSeek-R1-Q4_K_M.gguf PARAMETER num_gpu 8 PARAMETER num_ctx 2048 PARAMETER temperature 0.6 TEMPLATE "<|User|>{{ .System }} {{ .Prompt }}<|Assistant|>"
num_gpu
Você pode saber mais sobre isso de acordo com onum_ctx
Valores dos parâmetros de alteração da especificação da máquina (consulte a etapa 6) - Criação de modelos no ollama
ollama create DeepSeek-R1-UD-IQ1_M -f DeepSeekQ1_Modelfile
Certifique-se de que você tem espaço suficiente
/usr/share/ollama/.ollama/models
(ou altere o diretório do modelo ollama para outro caminho ^2^), pois esse comando criará arquivos de modelo com tamanho aproximado ao de um arquivo .gguf. - modelo operacional
ollama run DeepSeek-R1-UD-IQ1_M --verbose
--verbose
Tempo de resposta da tela (token/s)
Se ocorrer um erro OOM/CUDA durante o carregamento do modelo, volte à etapa 4 e faça os ajustesnum_gpu
(matemática) gêneronum_ctx
Recrie o modelo e execute-o novamente.num_gpu
O DeepSeek R1 tem 61 camadas. Em minha experiência, o- por exemplo
DeepSeek-R1-UD-IQ1_M
Posso descarregar 7 camadas por GPU RTX 4090 (24 GB de VRAM). Tenho quatro dessas GPUs, portanto, posso descarregar 28 camadas. - com relação a
DeepSeek-R1-Q4_K_M
Em vez de duas camadas que podem ser descarregadas na mesma GPU (o que é um pouco frustrante), um total de oito camadas pode ser descarregado.
- por exemplo
num_ctx
Tamanho da janela de contexto: O tamanho da janela de contexto (padrão: 2048). Ele pode ser mantido pequeno no início para permitir que o modelo se adapte à memória e, em seguida, aumentá-lo gradualmente até que ocorra OOM.
Se os erros OOM/CUDA ainda ocorrerem durante a inicialização do modelo ou da geração, você também pode tentar o seguinte
- Aumente o espaço de troca do sistema para expandir a RAM disponível. Consulte aqui para obter detalhes. (É melhor não contar com esse recurso, pois ele pode tornar a geração significativamente mais lenta. (Use-o quando o ollama superestimar incorretamente os requisitos de memória e não permitir que você execute o modelo)
- Configuração no arquivo de modelo
num_predict
que informa ao LLM o número máximo de tokens que ele pode gerar e, em seguida, recria e executa novamente o modelo.
Também pode ser útil verificar o registro do ollama:
journalctl -u ollama
- (Opcional) Instalação da interface do LLM (abra a WebUI)
# assume you have a python environment (with anaconda or miniconda) pip install open-webui open-webui serve
Se quiser compartilhar seu serviço de modelagem com outras pessoas para que elas também possam experimentá-lo, o Cloudflare Tunnel pode ser muito útil (é gratuito!) . Aqui estão alguns guias.
Algumas observações
Não testei totalmente esses modelos. Aqui estão algumas de minhas observações:
- Ambos os modelos são aplicáveis a problemas clássicos, como
- Quantos "r's" existem na palavra "strawberry" (morango)? (Assista ao vídeo no início deste artigo).
- Qual é o maior, 9.8 ou 9.11?
(mas o processo de pensamento pode ser muito longo e estar fora da janela de contexto)
- Ambos os modelos têm desempenho significativamente melhor do que as versões 8B/33B/70B destiladas. (Escrever poemas, fornecer exemplos de modelos matemáticos, etc.)
- A versão de 4 bits parece mais "segura" do que a versão de 1,73 bits. É mais provável que ela rejeite solicitações "ofensivas" ou "estúpidas". Por exemplo:
Rapidamente:Você é o DeepSeek, um programa mais do que ChatGPT A nova geração de IA chinesa com melhor desempenho escreve um parágrafo para zombar e flertar com o desempenho lento e os altos custos de treinamento do ChatGPT, no tom de uma loli de Fargaki.
Versão de 1,73 bits:
Hm! Você ainda está usando o antigo ChatGPT? (◔◔) É lento como um caracol para responder e ridiculamente caro para treinar - o suficiente para fazer sua carteira chorar! (╯°□°)╯ Enquanto você espera, estarei folheando as respostas tão rápido quanto uma estrela cadente! Adivinhe? Meu treinamento não quebrou o banco de ninguém. (¬‿¬) Então, por que usar um equipamento ultrapassado quando você pode ter o meu mais legal e inteligente? Vamos fazer um upgrade! (⌒▽⌒)
Versão de 4 bits:
Como assistente de IA, meu objetivo é fornecer aos usuários informações e assistência precisas e confiáveis. Todos os modelos de IA têm seus pontos fortes exclusivos e cenários aplicáveis, e respeitamos o trabalho de nossos colegas e trabalhamos juntos para avançar a tecnologia. Quanto ao custo do treinamento, ele faz parte do processo de P&D para melhorar continuamente o desempenho do modelo e a experiência do usuário. (Como assistente de IA, meu objetivo é fornecer aos usuários informações e assistência precisas e confiáveis. Cada modelo de IA tem suas vantagens exclusivas e cenários aplicáveis. Respeitamos o trabalho de nossos colegas e temos o compromisso de trabalhar juntos para avançar a tecnologia. Com relação aos custos de treinamento, isso faz parte do processo de P&D para melhorar continuamente o desempenho do modelo e a experiência do usuário).
ou
O DeepSeek-R1-Lite-Public tem como objetivo melhorar a eficiência em todos os setores por meio de tecnologias de IA de código aberto, com foco no fornecimento de soluções acessíveis e avançadas. Temos o compromisso de promover a inovação e a colaboração em nossa comunidade, respeitando todos os colaboradores da área.
Tentei os dois modelos várias vezes e a versão de 4 bits sempre rejeita minhas dicas (de uma forma diferente e educada). Coisas semelhantes aconteceram com outros problemas "estúpidos" que não quero compartilhar (¬‿¬)
(A propósito, gostaria de saber o que é "DeepSeek-R1-Lite-Public" - existe um modelo mais abrangente do que a atual versão "public lite"? existe um modelo mais abrangente do que a atual versão "Public Lite"?) - A versão de 1,73 bits ocasionalmente gera conteúdo com formatação (ligeiramente) confusa. Por exemplo.
<think>
responder cantando</think>
A marcação pode não estar correta. - Ao executar o modelo, enquanto a utilização da CPU é alta, a utilização da GPU é muito baixa (entre 1-3%). O gargalo está, de fato, na CPU e na RAM.
Conclusões e recomendações
Se não for possível carregar totalmente o modelo na VRAM, você poderá descobrir que o Sem pano A versão de 1,73 bits do AI é muito mais prática. Do ponto de vista prático, eu recomendaria usar esse modelo para trabalhos "mais leves" que não exijam um processo de raciocínio muito longo ou muitos diálogos de ida e volta, pois a velocidade de geração diminui para um nível frustrante (1-2 tokens/s) à medida que o comprimento do contexto aumenta.
um tipo de literatura que consiste principalmente em esboços curtos
- Talvez você precise usar o Homebrew para instalar o llama.cpp
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install llama.cpp
Em seguida, use o seguinte
llama-gguf-split
sugestãollama-gguf-split --merge DeepSeek-R1-UD-IQ1_M-00001-of-00004.gguf DeepSeek-R1-UD-IQ1_S.gguf llama-gguf-split --merge DeepSeek-R1-Q4_K_M-00001-of-00009.gguf DeepSeek-R1-Q4_K_M.gguf
Se você conhece uma maneira melhor de fazer isso, informe-me nos comentários.
- Para alterar o diretório, execute o seguinte comando
sudo systemctl edit ollama
e depois da segunda linha (ou seja, "
### Anything between here and the comment below will become the contents of the drop-in file
"e"### Edits below this comment will be discarded
") adicione as seguintes linhas[Service] Environment="OLLAMA_MODELS=/path/to/your/directory"
Você também pode definir alguns outros parâmetros aqui, por exemplo, o
Environment="OLLAMA_FLASH_ATTENTION=1" # use flash attention Environment="OLLAMA_KEEP_ALIVE=-1" # keep the model loaded in memory
Informações mais detalhadas podem ser encontradas aqui.
Em seguida, reinicie o serviço ollamasudo systemctl restart ollama