Trata-se de usar ollama Instruções (mínimas) para implantar o DeepSeek R1 671B (a versão completa e não refinada) localmente.
modelagem
primordial DeepSeek O modelo R1 671B é enorme, com 720 GB de tamanho. 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 PARÂMETRO num_gpu 28 PARÂMETRO num_ctx 2048 PARÂMETRO temperature 0,6 TEMPLATE "{{ .Sistema }} {{ .Prompt }}"
DeepSeekQ4_Modelfile
(Conteúdo (para)DeepSeek-R1-Q4_K_M
::FROM /home/snowkylin/DeepSeek-R1-Q4_K_M.gguf PARÂMETRO num_gpu 8 PARÂMETRO num_ctx 2048 PARÂMETRO temperature 0,6 TEMPLATE "{{ .Sistema }} {{ .Prompt }}"
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)
# Presumimos que você tenha um ambiente python (com anaconda ou 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.
responder cantando
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, talvez você ache a versão de 1,73 bits do Unsloth AI mais útil. De um ponto de vista prático, eu recomendaria usar o modelo para trabalhos "mais leves" que não exijam um processo de pensamento muito longo ou muito diálogo 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)" instalar o brew 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, "
### Qualquer coisa entre aqui e o comentário abaixo se tornará o conteúdo do arquivo drop-in
"e"### As edições abaixo deste comentário serão descartadas
") adicione as seguintes linhas[Serviço] 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" # usar atenção flash Environment="OLLAMA_KEEP_ALIVE=-1" # manter o modelo carregado na memória
Informações mais detalhadas podem ser encontradas aqui.
Em seguida, reinicie o serviço ollamasudo systemctl restart ollama