Uma ferramenta para baixar e converter modelos HuggingFace sem drama.
Se você estiver em uma máquina com GPU NVIDIA/CUDA e quiser suporte AWQ/GPTQ:
pip3 install llm-quantkit[cuda]
Caso contrário, a instalação padrão funciona.
pip3 install llm-quantkit
Se você precisar de uma tocha específica para um dispositivo, instale-a primeiro.
Este projeto depende das bibliotecas torch, awq, exl2, gptq e hqq.
Algumas dessas dependências ainda não suportam Python 3.12.
Pythons suportados: 3.8, 3.9, 3.10 e 3.11
Usage: quantkit [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
download Download model from huggingface.
safetensor Download and/or convert a pytorch model to safetensor format.
awq Download and/or convert a model to AWQ format.
exl2 Download and/or convert a model to EXL2 format.
gguf Download and/or convert a model to GGUF format.
gptq Download and/or convert a model to GPTQ format.
hqq Download and/or convert a model to HQQ format.
O primeiro argumento após o comando deve ser um ID de repositório HF (mistralai/Mistral-7B-v0.1) ou um diretório local já contendo arquivos de modelo.
O comando download tem como padrão fazer download no cache HF e produzir links simbólicos no diretório de saída, mas há uma opção --no-cache que coloca os arquivos do modelo no diretório de saída.
O padrão do AWQ é 4 bits, tamanho do grupo 128, ponto zero True.
Os padrões do GPTQ são 4 bits, tamanho do grupo 128, ordem de ativação falsa.
O padrão do EXL2 é 8 bits principais, mas não há taxa de bits padrão.
O padrão do GGUF é sem imatrix, mas não há tipo quant padrão.
O padrão do HQQ é 4 bits, tamanho do grupo 64, zero_point=True.
Baixe um modelo de HF e não use cache HF:
quantkit download teknium/Hermes-Trismegistus-Mistral-7B --no-cache
Baixe apenas a versão dos safetensors de um modelo (útil para modelos que possuem tocha e safetensor):
quantkit download mistralai/Mistral-7B-v0.1 --no-cache --safetensors-only -out mistral7b
Baixe da revisão específica de um repositório huggingface:
uantkit download turboderp/TinyLlama-1B-32k-exl2 --branch 6.0bpw --no-cache -out TinyLlama-1B-32k-exl2-b6
Baixe e converta um modelo em safetensor, excluindo as caixas pytorch originais:
quantkit safetensor migtissera/Tess-10.7B-v1.5b --delete-original
Baixe e converta um modelo para GGUF (Q5_K):
quantkit gguf TinyLlama/TinyLlama-1.1B-Chat-v1.0 -out TinyLlama-1.1B-Q5_K.gguf Q5_K
Baixe e converta um modelo para GGUF usando um imatrix, descarregando 200 camadas:
quantkit gguf TinyLlama/TinyLlama-1.1B-Chat-v1.0 -out TinyLlama-1.1B-IQ4_XS.gguf IQ4_XS --built-in-imatrix -ngl 200
Baixe e converta um modelo para AWQ:
quantkit awq mistralai/Mistral-7B-v0.1 -out Mistral-7B-v0.1-AWQ
Converta um modelo para GPTQ (4 bits/tamanho de grupo 32):
quantkit gptq mistral7b -out Mistral-7B-v0.1-GPTQ -b 4 --group-size 32
Converta um modelo para exllamav2:
quantkit exl2 mistralai/Mistral-7B-v0.1 -out Mistral-7B-v0.1-exl2-b8-h8 -b 8 -hb 8
Converta um modelo em HQQ:
quantkit hqq mistralai/Mistral-7B-v0.1 -out Mistral-7B-HQQ-w4-gs64
Aqui está o que funcionou para mim nos testes. Deixe um PR ou problema com atualizações sobre o que é possível em cartões de vários tamanhos.
A conversão GGUF não precisa de uma GPU, exceto para iMatrix e Exllamav2, que exige que a maior camada caiba em uma única GPU.
Tamanho do modelo | Quantidade | VRAM | Bem-sucedido |
---|---|---|---|
7B | AWQ | 24 GB | ✅ |
7B | EXL2 | 24 GB | ✅ |
7B | GGUF | 24 GB | ✅ |
7B | GPTQ | 24 GB | ✅ |
7B | QG | 24 GB | ✅ |
13B | AWQ | 24 GB | ✅ |
13B | EXL2 | 24 GB | ✅ |
13B | GGUF | 24 GB | ✅ |
13B | GPTQ | 24 GB | |
13B | QG | 24 GB | ? |
34B | AWQ | 24 GB | |
34B | EXL2 | 24 GB | ✅ |
34B | GGUF | 24 GB | ✅ |
34B | GPTQ | 24 GB | |
34B | QG | 24 GB | ? |
70B | AWQ | 24 GB | |
70B | EXL2 | 24 GB | ✅ |
70B | GGUF | 24 GB | ✅ |
70B | GPTQ | 24 GB | |
70B | QG | 24 GB | ? |
Ainda em beta. O descarregamento do Llama.cpp provavelmente não funcionará em sua plataforma, a menos que você desinstale o llama-cpp-conv e o reinstale com os sinalizadores de compilação adequados. Consulte a documentação do llama-cpp-python e siga o comando relevante, mas substitua llama-cpp-python por llama-cpp-conv.