خادم Rust وPython وgRPC لاستدلال إنشاء النص. يُستخدم في الإنتاج في Hugging Face لتشغيل Hugging Chat وInference API وInference Endpoint.
يعد استدلال إنشاء النص (TGI) عبارة عن مجموعة أدوات لنشر وتقديم نماذج اللغات الكبيرة (LLMs). تتيح TGI إنشاء نصوص عالية الأداء لأكثر برامج LLM مفتوحة المصدر شيوعًا، بما في ذلك Llama وFalcon وStarCoder وBLOOM وGPT-NeoX والمزيد. تطبق TGI العديد من الميزات، مثل:
للحصول على دليل تفصيلي للبدء، يرجى الاطلاع على الجولة السريعة. أسهل طريقة للبدء هي استخدام حاوية 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 للحصول على استجابات متوافقة مع 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، تحتاج إلى تثبيت مجموعة أدوات حاوية NVIDIA. نوصي أيضًا باستخدام برامج تشغيل NVIDIA مع إصدار CUDA 12.2 أو أعلى. لتشغيل حاوية Docker على جهاز لا يحتوي على وحدات معالجة الرسومات أو دعم CUDA، يكفي إزالة علامة --gpus all
وإضافة --disable-custom-kernels
، يرجى ملاحظة أن وحدة المعالجة المركزية ليست النظام الأساسي المقصود لهذا المشروع، لذا فإن الأداء قد يكون دون المستوى المطلوب.
ملحوظة: يدعم TGI وحدات معالجة الرسوميات AMD Instinct MI210 وMI250. يمكن العثور على التفاصيل في وثائق الأجهزة المدعومة. لاستخدام وحدات معالجة الرسومات AMD، يرجى استخدام 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
يمكنك الرجوع إلى وثائق OpenAPI الخاصة بواجهة text-generation-inference
باستخدام المسار /docs
. واجهة مستخدم Swagger متاحة أيضًا على: https://huggingface.github.io/text-generation-inference.
لديك خيار استخدام متغير البيئة HF_TOKEN
لتكوين الرمز المميز الذي يستخدمه text-generation-inference
. هذا يسمح لك بالوصول إلى الموارد المحمية.
على سبيل المثال، إذا كنت تريد تقديم متغيرات طراز Llama V2 المسور:
HF_TOKEN=
أو مع عامل الميناء:
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 غير ممكن.
للسماح للحاوية باستخدام 1 جيجا من الذاكرة المشتركة ودعم مشاركة SHM، أضفنا --shm-size 1g
في الأمر أعلاه.
إذا كنت تقوم بتشغيل text-generation-inference
داخل Kubernetes
. يمكنك أيضًا إضافة الذاكرة المشتركة إلى الحاوية عن طريق إنشاء وحدة تخزين تحتوي على:
- name : shm
emptyDir :
medium : Memory
sizeLimit : 1Gi
وتثبيته على /dev/shm
.
وأخيرًا، يمكنك أيضًا تعطيل مشاركة SHM باستخدام متغير البيئة NCCL_SHM_DISABLE=1
. ومع ذلك، لاحظ أن هذا سيؤثر على الأداء.
يتم استخدام text-generation-inference
من خلال التتبع الموزع باستخدام OpenTelemetry. يمكنك استخدام هذه الميزة عن طريق تعيين العنوان لمجمع OTLP باستخدام وسيطة --otlp-endpoint
. يمكن تجاوز اسم الخدمة الافتراضي باستخدام وسيطة --otlp-service-name
مدونة مفصلة كتبها Adyen حول الأعمال الداخلية لـ TGI: استدلال LLM على نطاق واسع باستخدام TGI (Martin Iglesias Goyanes - Adyen، 2024)
يمكنك أيضًا اختيار تثبيت text-generation-inference
محليًا.
قم أولاً بتثبيت Rust وإنشاء بيئة Python الافتراضية باستخدام Python 3.9 على الأقل، على سبيل المثال باستخدام 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
هناك خيار آخر وهو تثبيت text-generation-inference
محليًا باستخدام Nix. حاليًا، نحن ندعم Nix فقط على نظام التشغيل x86_64 Linux مع وحدات معالجة الرسومات CUDA. عند استخدام Nix، يمكن سحب كافة التبعيات من ذاكرة التخزين المؤقت الثنائية، مما يلغي الحاجة إلى بنائها محليًا.
اتبع أولاً التعليمات لتثبيت Cachix وتمكين ذاكرة التخزين المؤقت TGI. يعد إعداد ذاكرة التخزين المؤقت أمرًا مهمًا، وإلا فسيقوم Nix ببناء العديد من التبعيات محليًا، الأمر الذي قد يستغرق ساعات.
بعد ذلك يمكنك تشغيل TGI باستخدام nix run
:
nix run . -- --model-id meta-llama/Llama-3.1-8B-Instruct
ملاحظة: عندما تستخدم Nix على نظام غير NixOS، يتعين عليك إنشاء بعض الارتباطات الرمزية لجعل مكتبات برامج تشغيل CUDA مرئية لحزم Nix.
لتطوير 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 من البتات والبايتات. يمكن تمكينه من خلال توفير --quantize bitsandbytes-nf4
أو --quantize bitsandbytes-fp4
كوسيطة سطر أوامر لـ text-generation-launcher
.
اقرأ المزيد عن التكميم في وثائق التكميم.
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