Observação
Esse repositório foi arquivado e não está sendo mantido mais, pois muito mais eficientes foram lançados recentemente como VLLM e TGI.
Este repositório fornece demos e pacotes para executar soluções de inferência rápida para Bloom. Algumas das soluções têm seus próprios repositórios, caso em que um link para os repositórios correspondentes é fornecido.
Apoiamos o Huggingface acelere e a inferência de velocidade profunda pela geração.
Instale os pacotes necessários:
pip install flask flask_api gunicorn pydantic accelerate huggingface_hub > =0.9.0 deepspeed > =0.7.3 deepspeed-mii==0.0.2Como alternativa, você também pode instalar o DeepSpeed da fonte:
git clone https://github.com/microsoft/DeepSpeed
cd DeepSpeed
CFLAGS= " -I $CONDA_PREFIX /include/ " LDFLAGS= " -L $CONDA_PREFIX /lib/ " TORCH_CUDA_ARCH_LIST= " 7.0 " DS_BUILD_CPU_ADAM=1 DS_BUILD_AIO=1 DS_BUILD_UTILS=1 pip install -e . --global-option= " build_ext " --global-option= " -j8 " --no-cache -v --disable-pip-version-checkTodos os scripts fornecidos são testados em 8 GPUs A100 80 GB para Bloom 176b (FP16/BF16) e 4 GPUS de 80 GB de A100 para Bloom 176b (Int8). Esses scripts podem não funcionar para outros modelos ou um número diferente de GPUs.
A inferência do DS é implantada usando a lógica emprestada da biblioteca DeepSpeed Mii.
Nota: Às vezes, a memória da GPU não é liberada quando as falhas de implantação de inferência do DS. Você pode libertar essa memória executando killall python no terminal.
Para usar o Bloom Quantized, use dtype = int8. Além disso, altere o Model_Name para Microsoft/Bloom-DeepSpeed Inference-Int8 para uma inferência de velocidade profunda. Para acelerar HF, nenhuma alteração é necessária para o Model_Name.
O HF Accelerate usa LLM.INT8 () e a Inferência de DS usa Zeroquant para quantização pós-treinamento.
Isso pede Gerate_kwargs sempre. Exemplo: generate_kwargs =
{ "min_length" : 100 , "max_new_tokens" : 100 , "do_sample" : false }python -m inference_server.cli --model_name bigscience/bloom --model_class AutoModelForCausalLM --dtype bf16 --deployment_framework hf_accelerate --generate_kwargs ' {"min_length": 100, "max_new_tokens": 100, "do_sample": false} 'python -m inference_server.cli --model_name microsoft/bloom-deepspeed-inference-fp16 --model_class AutoModelForCausalLM --dtype fp16 --deployment_framework ds_inference --generate_kwargs ' {"min_length": 100, "max_new_tokens": 100, "do_sample": false} ' Make <model_name> pode ser usado para iniciar um servidor de geração. Observe que o método de porção é síncrono e os usuários precisam esperar na fila até que as solicitações anteriores tenham sido processadas. Um exemplo para disparar solicitações de servidor é fornecido aqui. Alternative, também é fornecido um Dockerfile, que inicia um servidor de geração na porta 5000.
Uma interface interativa pode ser iniciada através do seguinte comando para conectar -se ao servidor de geração. O URL padrão da interface do usuário é http://127.0.0.1:5001/ . O model_name é usado apenas pela interface do usuário para verificar se o modelo é decodificador ou modelo de codificador-decodificador.
python -m ui --model_name bigscience/bloom Este comando lança a seguinte interface do usuário para jogar com a geração. Desculpe pelo design ruim. Infelizmente, minhas habilidades na interface do usuário só vão tão longe. ??? 
python -m inference_server.benchmark --model_name bigscience/bloom --model_class AutoModelForCausalLM --dtype bf16 --deployment_framework hf_accelerate --benchmark_cycles 5deepspeed --num_gpus 8 --module inference_server.benchmark --model_name bigscience/bloom --model_class AutoModelForCausalLM --dtype fp16 --deployment_framework ds_inference --benchmark_cycles 5Alternativamente, para carregar o modelo mais rápido:
deepspeed --num_gpus 8 --module inference_server.benchmark --model_name microsoft/bloom-deepspeed-inference-fp16 --model_class AutoModelForCausalLM --dtype fp16 --deployment_framework ds_inference --benchmark_cycles 5deepspeed --num_gpus 8 --module inference_server.benchmark --model_name bigscience/bloom --model_class AutoModelForCausalLM --dtype bf16 --deployment_framework ds_zero --benchmark_cycles 5Se você se deparar com coisas que não está funcionando ou tiver outras perguntas, abra um problema no back -end correspondente:
Se houver um problema específico com um dos scripts e não o back -end apenas, abra um problema aqui e tag @mayank31398.
Soluções desenvolvidas para realizar grandes inferências em lote localmente:
JAX:
Uma solução desenvolvida para ser usada no modo de servidor (ou seja, tamanho em lote variado, taxa de solicitação variada) pode ser encontrada aqui. Isso é implementado em ferrugem.