Skip to main content
Weaviate Docs (migrated from docs.weaviate.io) Docs

Search documentation

Type to search this documentation.

On this pageOverview

Text Embeddings (custom)

Weaviate's integration with the Hugging Face Transformers library allows you to access their models' capabilities directly from Weaviate.

Configure a Weaviate vector index to use the Transformers integration, and configure the Weaviate instance with a model image, and Weaviate will generate embeddings for various operations using the specified model in the Transformers inference container. This feature is called the vectorizer.

This page shows how to build a custom Transformers model image and configure Weaviate with it, for users whose desired model is not available in the pre-built images.

Once a custom image is built and configured, usage patterns are identical to the pre-built images.

You can build a custom Transformers model image to use with Weaviate. This can be a public model from the Hugging Face model hub, or a compatible private or local model.

Embedding (also called 'feature extraction') models from the Hugging Face model hub can be used with Weaviate by building a custom Docker image.

The steps to build a custom image are:

The Dockerfile to create depends on whether you are using a public model from the Hugging Face model hub, or a private or local model.

This example creates a custom image for the distilroberta-base model. Replace distilroberta-base with the model name you want to use.

To build an image with a model from the Hugging Face Hub, create a new Dockerfile similar to the following.

Save the Dockerfile as my-inference-image.Dockerfile. (You can name it anything you like.)

YAML
FROM semitechnologies/transformers-inference:custom
RUN MODEL_NAME=distilroberta-base ./download.py

You can also build a custom image with any model that is compatible with the Transformer library's AutoModel and AutoTokenizer classes.

To build an image with a local, custom model, create a new Dockerfile similar to the following, replacing ./my-model with the path to your model folder.

Save the Dockerfile as my-inference-image.Dockerfile. (You can name it anything you like.)

This will create a custom image for a model stored in a local folder my-model on your machine.

YAML
FROM semitechnologies/transformers-inference:custom
COPY ./my-model /app/models/model

Do not modify /app/models/model, as this is the path where the application expects to find the model.

Tag the Dockerfile with a name, for example my-inference-image:

Shell
docker build -f my-inference-image.Dockerfile -t my-inference-image .

If you want to use the image in a different environment, you can push it to a Docker registry:

Shell
docker push my-inference-image

Specify the image in your Weaviate configuration, such as in docker-compose.yml, using the chosen local Docker tag (e.g. my-inference-image), or the image from the registry.

(Optional) Use the sentence-transformers vectorizer

Section titled “(Optional) Use the sentence-transformers vectorizer”

When using a custom image, you may set the USE_SENTENCE_TRANSFORMERS_VECTORIZER environment variable to use the sentence-transformers vectorizer instead of the default vectorizer from the transformers library.

Once you have built and configured the custom Transformers model image, continue on to the Transformers embeddings integrations guide to use the model with Weaviate.

Following the above example, set the image parameter in the text2vec-transformers service as the name of the custom image, e.g. my-inference-image.

Once the inference container is configured and running, you can send queries it directly to test its functionality.

First, expose the inference container. If deployed using Docker, forward the port by adding the following to the text2vec-transformers service in your docker-compose.yml:

YAML
services:
  weaviate:
    # Additional settings not shown
  text2vec-transformers:
    # Additional settings not shown
    ports:
      - "9090:8080"  # Add this line to expose the container

Once the container is running and exposed, you can send REST requests to it directly, e.g.:

Shell
curl localhost:9090/vectors -H 'Content-Type: application/json' -d '{"text": "foo bar"}'

If the container is running and configured correctly, you should receive a response with the vector embedding of the input text.

Have a question or feedback? Here's how to reach us.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu