Introdução geral
Chitu é uma estrutura de raciocínio de código aberto desenvolvida pela equipe PACMAN da Universidade de Tsinghua, chamada "Red Rabbit", que foi especialmente projetada para executar modelos de linguagem grandes. O Chitu é compatível com uma variedade de hardware, como GPUs da NVIDIA e chips domésticos, e pode ser usado de forma autônoma a clusters de grande escala.Seu destaque é a inferência com modelos FP8, que pode reduzir drasticamente os custos, como a execução do DeepSeek-671B em um A800, que usa metade das GPUs e é mais de três vezes mais rápido que o vLLM.O código está disponível publicamente no GitHub e pode ser baixado e usado gratuitamente por empresas ou indivíduos. Essa é uma ferramenta pronta para uso em ambientes de produção e é adequada para equipes que desejam economizar dinheiro, mas também desejam desempenho.
Lista de funções
- Ele é compatível com a inferência de modelos FP8 e BF16 e pode ser executado em GPUs antigas e chips domésticos com baixo custo e alto desempenho.
- Adapta-se a uma ampla variedade de hardware, de CPUs puras a GPUs, como NVIDIA A800, H20, etc., a clusters de grande escala.
- Otimize a velocidade de inferência com o CUDA Graph para obter resultados mais rápidos em uma única solicitação.
- Fornece uma interface de serviço que permite que os modelos sejam chamados diretamente por meio de solicitações HTTP.
- Oferece suporte ao raciocínio distribuído de vários nós, adequado para o processamento de tarefas de alto volume.
- Código-fonte aberto que as empresas podem alterar ou otimizar conforme necessário.
Usando a Ajuda
Processo de instalação
A instalação da Chitu não é complicada, mas requer alguma preparação. Abaixo estão as etapas detalhadas:
- Preparação do ambiente
- Sistema: Ubuntu 22.04 recomendado, máquina com GPU NVIDIA (por exemplo, A800 ou H20).
- Software: instale o Git, Python 3.10, CUDA 12.1 (ajustado para a versão de sua GPU), PyTorch 2.1.
- Exemplo de comando:
sudo apt update && sudo apt install -y git python3.10 python3-pip pip install -U torch==2.1 --index-url https://download.pytorch.org/whl/cu121
- Código de download
- Clone o código de Chitu localmente usando o Git:
git clone --recursive https://github.com/thu-pacman/chitu cd chitu
- Clone o código de Chitu localmente usando o Git:
- Instalação de dependências
- Instale os pacotes Python e o ambiente de compilação necessários:
pip install -r requirements-build.txt pip install flash-attn
- Instale os pacotes Python e o ambiente de compilação necessários:
- compilar e instalar
- Defina os parâmetros de compilação (ajuste TORCH_CUDA_ARCH_LIST de acordo com sua GPU, por exemplo, 8.0 para A800) e compile:
TORCH_CUDA_ARCH_LIST=8.0 CHITU_SETUP_JOBS=4 MAX_JOBS=4 pip install --no-build-isolation .
- Defina os parâmetros de compilação (ajuste TORCH_CUDA_ARCH_LIST de acordo com sua GPU, por exemplo, 8.0 para A800) e compile:
- Verificação da instalação
- Faça um teste para ter certeza de que está tudo bem:
torchrun --nproc_per_node 1 test/single_req_test.py
- Faça um teste para ter certeza de que está tudo bem:
Como usar
Depois que Chitu for carregado, você poderá iniciar o serviço a partir da linha de comando ou executar um único teste. Veja como fazer isso:
Iniciar serviço de raciocínio
- Configuração de caminhos de modelo
- Prepare os arquivos do modelo, por exemplo, DeepSeek-R1, em um diretório local (por exemplo
/data/DeepSeek-R1
). - no comando de edição
models.ckpt_dir
O parâmetro aponta para o caminho do modelo.
- Prepare os arquivos do modelo, por exemplo, DeepSeek-R1, em um diretório local (por exemplo
- Início dos serviços
- Inicie o serviço autônomo com o torchrun, escutando na porta 21002:
export WORLD_SIZE=1 torchrun --nproc_per_node 1 chitu/serve.py \ serve.port=21002 \\ models=DeepSeek-R1 \\ models.ckpt_dir=/data/DeepSeek-R1 \\ infer.use_cuda_graph=True \\ request.max_new_tokens=100
- Inicie o serviço autônomo com o torchrun, escutando na porta 21002:
- Serviços de teste
- Envie uma solicitação com curl e veja se o modelo responde corretamente:
curl localhost:21002/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"messages": [{"role": "user", "content": "Hello, what is Chitu?"}]}'
- O resultado retornado estará no formato JSON, contendo a resposta do modelo.
- Envie uma solicitação com curl e veja se o modelo responde corretamente:
Execução de um único teste de raciocínio
- Se não quiser iniciar o serviço, você pode apenas testar a saída do modelo:
torchrun --nproc_per_node 1 test/single_req_test.py \\ models=DeepSeek-R1 \\ models.ckpt_dir=/data/DeepSeek-R1 \\ request.max_new_tokens=64
- A saída é exibida no terminal, informando o que o modelo gerou.
Raciocínio distribuído em vários nós
- Preparar várias máquinas
- Certifique-se de que o Chitu e as dependências sejam carregados em cada máquina e que os arquivos de modelo estejam no armazenamento compartilhado.
- Iniciando serviços distribuídos
- Execute-o em 2 máquinas com 8 GPUs cada:
torchrun --nnodes 2 --nproc_per_node 8 test/single_req_test.py \ request.max_new_tokens=64 \ infer.pp_size=2 \ infer.tp_size=8 \\ models=DeepSeek-R1 \ \ \ models.ckpt_dir=/data/DeepSeek-R1
- Execute-o em 2 máquinas com 8 GPUs cada:
- Verificação do efeito
- Após uma execução com vários nós, a saída será mais rápida do que em uma única máquina, o que é adequado para lidar com solicitações de grande volume.
Operação da função em destaque
Economize dinheiro e velocidade com os modelos FP8
- O Chitu é compatível com modelos de formato FP8, que usam menos GPUs e são mais rápidos do que o BF16.
- Operação: Adicionar na inicialização
infer.soft_fp8=True
Por exemplo, se o modelo estiver no formato FP8, o modelo deverá estar no formato FP8. Por exemplo:torchrun --nproc_per_node 1 chitu/serve.py \ serve.port=21002 \\ models=DeepSeek-R1 \\ models.ckpt_dir=/data/DeepSeek-R1 \\ infer.soft_fp8=True
Acelerado com CUDA Graph
- Solicitações únicas podem ser aceleradas com o CUDA Graph, com a adição do parâmetro
infer.use_cuda_graph=True
. - Efeito de teste: execute uma única inferência e compare a diferença de velocidade com e sem a adição.
teste de desempenho
- A Chitu vem com ferramentas de benchmarking para medir a taxa de transferência e a latência:
python benchmarks/benchmark_serving.py \ --modelo "deepseek-r1" \ --iterações 10 \ --seq-len 10 \ ---base-url http://localhost:21002
- O resultado mostrará o número de token números para ajudá-lo a otimizar sua alocação.
advertência
- Se você usar vários nós, a rede deverá ser estável ou cairá.
- A memória insuficiente da GPU pode resultar em um erro de OOM, reduza-a.
infer.max_seq_len
ou com menos nós. - O suporte a chips domésticos ainda está em processo de otimização, talvez seja necessário alterar o código para se adaptar.
Chitu não é difícil de usar, basta seguir as etapas e você estará pronto para começar a trabalhar. Sua documentação e comunidade também estão no GitHub, portanto, você pode levantar uma questão se tiver dúvidas.