텍스트 생성 추론을 위한 Rust, Python 및 gRPC 서버입니다. Hugging Face의 프로덕션에서 Hugging Chat, Inference API 및 Inference Endpoint를 지원하는 데 사용됩니다.
TGI(텍스트 생성 추론)는 LLM(대형 언어 모델)을 배포하고 제공하기 위한 툴킷입니다. TGI는 Llama, Falcon, StarCoder, BLOOM, GPT-NeoX 등을 포함하여 가장 인기 있는 오픈 소스 LLM에 대한 고성능 텍스트 생성을 지원합니다. TGI는 다음과 같은 많은 기능을 구현합니다.
자세한 시작 안내는 Quick Tour를 참조하세요. 시작하는 가장 쉬운 방법은 공식 Docker 컨테이너를 사용하는 것입니다.
model=HuggingFaceH4/zephyr-7b-beta
# share a volume with the Docker container to avoid downloading weights every run
volume= $PWD /data
docker run --gpus all --shm-size 1g -p 8080:80 -v $volume :/data
ghcr.io/huggingface/text-generation-inference:2.4.1 --model-id $model
그런 다음 다음과 같은 요청을 할 수 있습니다.
curl 127.0.0.1:8080/generate_stream
-X POST
-d ' {"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":20}} '
-H ' Content-Type: application/json '
TGI의 메시지 API를 사용하여 Open AI Chat Completion API 호환 응답을 얻을 수도 있습니다.
curl localhost:8080/v1/chat/completions
-X POST
-d ' {
"model": "tgi",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is deep learning?"
}
],
"stream": true,
"max_tokens": 20
} '
-H ' Content-Type: application/json '
참고: NVIDIA GPU를 사용하려면 NVIDIA Container Toolkit을 설치해야 합니다. 또한 CUDA 버전 12.2 이상의 NVIDIA 드라이버를 사용하는 것이 좋습니다. GPU 또는 CUDA 지원이 없는 시스템에서 Docker 컨테이너를 실행하려면 --gpus all
플래그를 제거하고 --disable-custom-kernels
추가하는 것으로 충분합니다. CPU는 이 프로젝트에 사용되는 플랫폼이 아니므로 성능이 좋습니다. 수준 이하일 수도 있습니다.
참고: TGI는 AMD Instinct MI210 및 MI250 GPU를 지원합니다. 자세한 내용은 지원되는 하드웨어 설명서에서 확인할 수 있습니다. AMD GPU를 사용하려면 docker run --device /dev/kfd --device /dev/dri --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:2.4.1-rocm --model-id $model
사용하십시오. docker run --device /dev/kfd --device /dev/dri --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:2.4.1-rocm --model-id $model
위의 명령 대신.
모델을 제공하기 위한 모든 옵션을 보려면(코드 또는 cli에서):
text-generation-launcher --help
/docs
경로를 사용하여 text-generation-inference
REST API의 OpenAPI 설명서를 참조할 수 있습니다. Swagger UI는 https://huggingface.github.io/text- Generation-inference에서도 사용할 수 있습니다.
text-generation-inference
에 사용되는 토큰을 구성하기 위해 HF_TOKEN
환경 변수를 활용할 수 있는 옵션이 있습니다. 이를 통해 보호된 리소스에 액세스할 수 있습니다.
예를 들어, 게이트된 Llama V2 모델 변형을 제공하려는 경우:
HF_TOKEN=
내보내기또는 Docker를 사용하여:
model=meta-llama/Meta-Llama-3.1-8B-Instruct
volume= $PWD /data # share a volume with the Docker container to avoid downloading weights every run
token= < your cli READ token >
docker run --gpus all --shm-size 1g -e HF_TOKEN= $token -p 8080:80 -v $volume :/data ghcr.io/huggingface/text-generation-inference:2.4.1 --model-id $model
NCCL
은 분산 훈련/추론을 수행하기 위해 PyTorch
에서 사용하는 통신 프레임워크입니다. text-generation-inference
NCCL
을 사용하여 Tensor Parallelism을 활성화하여 대규모 언어 모델에 대한 추론 속도를 극적으로 향상시킵니다.
NCCL
그룹의 여러 장치 간에 데이터를 공유하기 위해 NCCL
NVLink 또는 PCI를 사용하는 피어 투 피어가 불가능한 경우 호스트 메모리를 사용하도록 대체할 수 있습니다.
컨테이너가 1G의 공유 메모리를 사용하고 SHM 공유를 지원하도록 하려면 위 명령에 --shm-size 1g
추가합니다.
Kubernetes
내에서 text-generation-inference
실행하는 경우. 다음을 사용하여 볼륨을 생성하여 컨테이너에 공유 메모리를 추가할 수도 있습니다.
- name : shm
emptyDir :
medium : Memory
sizeLimit : 1Gi
/dev/shm
에 마운트합니다.
마지막으로 NCCL_SHM_DISABLE=1
환경 변수를 사용하여 SHM 공유를 비활성화할 수도 있습니다. 그러나 이는 성능에 영향을 미칠 수 있습니다.
text-generation-inference
OpenTelemetry를 사용하여 분산 추적으로 계측됩니다. --otlp-endpoint
인수를 사용하여 주소를 OTLP 수집기로 설정하여 이 기능을 사용할 수 있습니다. 기본 서비스 이름은 --otlp-service-name
인수로 재정의될 수 있습니다.
TGI 내부 작업에 대한 Adyen의 자세한 블로그 게시물: TGI를 통한 대규모 LLM 추론(Martin Iglesias Goyanes - Adyen, 2024)
text-generation-inference
로컬로 설치하도록 선택할 수도 있습니다.
먼저 Rust를 설치하고 Python 3.9 이상이 포함된 Python 가상 환경을 만듭니다(예: conda
사용).
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
conda create -n text-generation-inference python=3.11
conda activate text-generation-inference
Protoc을 설치해야 할 수도 있습니다.
리눅스의 경우:
PROTOC_ZIP=protoc-21.12-linux-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/ $PROTOC_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local ' include/* '
rm -f $PROTOC_ZIP
MacOS에서는 Homebrew를 사용하여 다음을 수행합니다.
brew install protobuf
그런 다음 다음을 실행하십시오.
BUILD_EXTENSIONS=True make install # Install repository and HF/transformer fork with CUDA kernels
text-generation-launcher --model-id mistralai/Mistral-7B-Instruct-v0.2
참고: 일부 시스템에서는 OpenSSL 라이브러리와 gcc가 필요할 수도 있습니다. Linux 머신에서는 다음을 실행합니다.
sudo apt-get install libssl-dev gcc -y
또 다른 옵션은 Nix를 사용하여 로컬로 text-generation-inference
설치하는 것입니다. 현재 우리는 CUDA GPU를 사용하는 x86_64 Linux에서만 Nix를 지원합니다. Nix를 사용하면 모든 종속성을 바이너리 캐시에서 가져올 수 있으므로 로컬에서 빌드할 필요가 없습니다.
먼저 지침에 따라 Cachix를 설치하고 TGI 캐시를 활성화하십시오. 캐시를 설정하는 것이 중요합니다. 그렇지 않으면 Nix가 로컬에서 많은 종속성을 구축하므로 몇 시간이 걸릴 수 있습니다.
그런 다음 nix run
사용하여 TGI를 실행할 수 있습니다.
nix run . -- --model-id meta-llama/Llama-3.1-8B-Instruct
참고: NixOS가 아닌 시스템에서 Nix를 사용하는 경우 Nix 패키지에서 CUDA 드라이버 라이브러리를 볼 수 있도록 일부 심볼릭 링크를 만들어야 합니다.
TGI 개발의 경우 impure
개발 셸을 사용할 수 있습니다.
nix develop . # impure
# Only needed the first time the devshell is started or after updating the protobuf.
(
cd server
mkdir text_generation_server/pb || true
python -m grpc_tools.protoc -I../proto/v3 --python_out=text_generation_server/pb
--grpc_python_out=text_generation_server/pb --mypy_out=text_generation_server/pb ../proto/v3/generate.proto
find text_generation_server/pb/ -type f -name " *.py " -print0 -exec sed -i -e ' s/^(import.*pb2)/from . 1/g ' {} ;
touch text_generation_server/pb/__init__.py
)
모든 개발 종속성(cargo, Python, Torch) 등은 이 개발 셸에서 사용할 수 있습니다.
TGI는 모든 최신 모델에 최적화된 모델을 제공하기 위해 기본적으로 작동합니다. 이 목록에서 찾을 수 있습니다.
다른 아키텍처는 다음을 사용하여 최선의 방식으로 지원됩니다.
AutoModelForCausalLM.from_pretrained(
또는
AutoModelForSeq2SeqLM.from_pretrained(
text-generation-launcher --model-id mistralai/Mistral-7B-Instruct-v0.2
사전 양자화된 가중치(AWQ, GPTQ, Marlin)를 실행하거나 비트와 바이트, EETQ, fp8을 사용하여 즉시 양자화 가중치를 실행하여 VRAM 요구 사항을 줄일 수도 있습니다.
text-generation-launcher --model-id mistralai/Mistral-7B-Instruct-v0.2 --quantize
4비트 양자화는 비트앤바이트의 NF4 및 FP4 데이터 유형을 사용하여 사용할 수 있습니다. text-generation-launcher
에 대한 명령줄 인수로 --quantize bitsandbytes-nf4
또는 --quantize bitsandbytes-fp4
제공하여 활성화할 수 있습니다.
양자화 문서에서 양자화에 대해 자세히 알아보세요.
make server-dev
make router-dev
# python
make python-server-tests
make python-client-tests
# or both server and client tests
make python-tests
# rust cargo tests
make rust-tests
# integration tests
make integration-tests