To use 🤗 text-embeddings-inference on Habana Gaudi/Gaudi2, follow these steps:
- Pull the official Docker image with:
docker pull ghcr.io/huggingface/tei-gaudi:latest
Note
Alternatively, you can build the Docker image using Dockerfile-hpu
located in this folder with:
docker build -f Dockerfile-hpu -t tei_gaudi .
- Launch a local server instance on 1 Gaudi card:
For models within the Transformers library that need remote code to run customized implementations, please set the environment variable
model=BAAI/bge-large-en-v1.5 volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run docker run -p 8080:80 -v $volume:/data --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e MAX_WARMUP_SEQUENCE_LENGTH=512 --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tei-gaudi:latest --model-id $model --pooling cls
-e TRUST_REMOTE_CODE=TRUE
withindocker run
command line. Here is an example:model="Alibaba-NLP/gte-large-en-v1.5" volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run docker run -p 8080:80 -v $volume:/data --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e MAX_WARMUP_SEQUENCE_LENGTH=512 -e TRUST_REMOTE_CODE=TRUE --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tei-gaudi:latest --model-id $model --pooling cls
- You can then send a request:
curl 127.0.0.1:8080/embed \ -X POST \ -d '{"inputs":"What is Deep Learning?"}' \ -H 'Content-Type: application/json'
For more information and documentation about Text Embeddings Inference, checkout README of the original repo.
tei-gaudi
currently supports Nomic, BERT, CamemBERT, XLM-RoBERTa models with absolute positions, JinaBERT model with Alibi positions and Mistral, Alibaba GTE and Qwen2 models with Rope positions.
Below are some examples of our validated models:
Architecture | Pooling | Models |
---|---|---|
BERT | Cls/Mean/Last token | |
BERT | Splade | |
MPNet | Cls/Mean/Last token | |
ALBERT | Cls/Mean/Last token | |
Mistral | Cls/Mean/Last token | |
GTE | Cls/Mean/Last token | |
JinaBERT | Cls/Mean/Last token |
tei-gaudi
currently supports CamemBERT, and XLM-RoBERTa Sequence Classification models with absolute positions.
Below are some examples of the currently supported models:
Task | Model Type | Model ID |
---|---|---|
Re-Ranking | XLM-RoBERTa | BAAI/bge-reranker-large |
Re-Ranking | XLM-RoBERTa | BAAI/bge-reranker-base |
Sentiment Analysis | RoBERTa | SamLowe/roberta-base-go_emotions |
model=BAAI/bge-reranker-large
volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run
docker run -p 8080:80 -v $volume:/data --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e MAX_WARMUP_SEQUENCE_LENGTH=512 --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tei-gaudi:latest --model-id $model
And then you can rank the similarity between a query and a list of texts with:
curl 127.0.0.1:8080/rerank \
-X POST \
-d '{"query":"What is Deep Learning?", "texts": ["Deep Learning is not...", "Deep learning is..."]}' \
-H 'Content-Type: application/json'
You can also use classic Sequence Classification models like SamLowe/roberta-base-go_emotions
:
model=SamLowe/roberta-base-go_emotions
volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run
docker run -p 8080:80 -v $volume:/data --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e MAX_WARMUP_SEQUENCE_LENGTH=512 --cap-add=sys_nice --ipc=host ghcr.io/huggingface/tei-gaudi:latest --model-id $model
Once you have deployed the model you can use the predict
endpoint to get the emotions most associated with an input:
curl 127.0.0.1:8080/predict \
-X POST \
-d '{"inputs":"I like you."}' \
-H 'Content-Type: application/json'
You can choose to activate SPLADE pooling for Bert and Distilbert MaskedLM architectures:
docker build -f Dockerfile-hpu -t tei_gaudi .
model=naver/efficient-splade-VI-BT-large-query
volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run
docker run -p 8080:80 -v $volume:/data --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e MAX_WARMUP_SEQUENCE_LENGTH=512 --cap-add=sys_nice --ipc=host tei_gaudi --model-id $model --pooling splade
Once you have deployed the model you can use the /embed_sparse
endpoint to get the sparse embedding:
curl 127.0.0.1:8080/embed_sparse \
-X POST \
-d '{"inputs":"I like you."}' \
-H 'Content-Type: application/json'
The license to use TEI on Habana Gaudi is the one of TEI: https://github.com/huggingface/text-embeddings-inference/blob/main/LICENSE
Please reach out to [email protected] if you have any question.