메모
이 저장소는 최근 VLLM 및 TGI와 같이 훨씬 더 효율적인 서빙 프레임 워크가 출시되었으므로 더 이상 유지되지 않습니다.
이 repo는 블룸에 대한 빠른 추론 솔루션을 수행하기위한 데모 및 패키지를 제공합니다. 일부 솔루션에는 자체 저장소가 있으며 해당 리포지에 대한 링크가 대신 제공됩니다.
우리는 Huggingface Accelerate 및 Deepspeed 추론을 지원합니다.
필수 패키지 설치 :
pip install flask flask_api gunicorn pydantic accelerate huggingface_hub > =0.9.0 deepspeed > =0.7.3 deepspeed-mii==0.0.2또는 소스에서 DeepSpeed를 설치할 수도 있습니다.
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-check제공된 모든 스크립트는 Bloom 176B (FP16/BF16)의 8 A100 80GB GPU 및 Bloom 176B (int8)의 경우 4 A100 80GB GPU에서 테스트됩니다. 이 스크립트는 다른 모델이나 다른 수의 GPU에 대해서는 작동하지 않을 수 있습니다.
DS 추론은 DeepSpeed MII 라이브러리에서 빌린 논리를 사용하여 배포됩니다.
참고 : 때때로 DS 추론 배치가 충돌 할 때 GPU 메모리가 해제되지 않습니다. 터미널에서 killall python 실행 하여이 메모리를 제거 할 수 있습니다.
양자화 된 블룸을 사용하려면 dtype = int8을 사용하십시오. 또한 DeepSpeed-Inference를 위해 Model_Name을 Microsoft/Bloom-Deepspeed-Inference-Int8로 변경하십시오. HF 가속의 경우 Model_Name에 대한 변경이 필요하지 않습니다.
HF Accelerate는 LLM.INT8 ()을 사용하고 DS-- 회의는 사후 훈련 양자화를 위해 Zeroquant를 사용합니다.
이것은 매번 생성 _kwargs를 요구합니다. 예 : 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>을 사용하여 Generation Server를 시작할 수 있습니다. 서빙 방법은 동기식이며 사용자는 이전 요청이 처리 될 때까지 대기열에서 기다려야합니다. 서버 요청을 발사하는 예는 여기에 제공됩니다. 대체, 포트 5000에서 생성 서버를 시작하는 도커 파일도 제공됩니다.
대화 형 UI는 다음 명령을 통해 시작하여 생성 서버에 연결할 수 있습니다. UI의 기본 URL은 http://127.0.0.1:5001/ 입니다. model_name 은 UI에 의해 모델이 디코더 또는 인코더 디코더 모델인지 확인하는 데 방금 사용됩니다.
python -m ui --model_name bigscience/bloom 이 명령은 다음과 같은 UI를 시작합니다. 엉뚱한 디자인에 대해 죄송합니다. 부적절하게, 내 UI 기술은 지금까지만 진행됩니다. ? 
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 5또는 모델을 더 빨리로드하려면 :
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 5일이 작동하지 않거나 다른 질문이있는 경우 해당 백엔드에서 문제를 열어주십시오.
백엔드가 아닌 스크립트 중 하나에 특정 문제가있는 경우 여기에서 문제를 열고 @mayank31398을 태그하십시오.
로컬에서 큰 배치 추론을 수행하기 위해 개발 된 솔루션 :
Jax :
서버 모드에서 사용되도록 개발 된 솔루션 (즉, 다양한 배치 크기, 다양한 요청 속도)을 여기에서 찾을 수 있습니다. 이것은 녹에서 구현됩니다.