Model reference · open weights
granite-embedding-sparse is an open-weight embedding model from IBM. granite-embedding-30m-sparse (BF16) weighs 61 MB; the smallest configuration that runs it is RTX 3060 12 GB.
Summary of the ibm-granite/granite-embedding-30m-sparse model card, 2026-10-01
What it is
| Released by | IBM |
|---|---|
| Released | 2025-02-17 |
| Parameters | 30M |
| VRAM | 61 MB for the weights |
What it runs on
| Card | Runs | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
From the model card
Model Summary: Granite-Embedding-30m-Sparse is a 30M parameter sparse biencoder embedding model from the Granite Experimental suite that can be used to generate high quality text embeddings. This model produces variable length bag-of-word like dictionary, containing expansions of sentence tokens and their corresponding weights and is trained using a combination of open source relevance-pair datasets with permissive, enterprise-friendly license, and IBM collected and generated datasets. While maintaining competitive scores on academic benchmarks such as BEIR, this model also performs well on many enterprise use cases. This model is developed using retrieval oriented pretraining, contrastive finetuning and knowledge distillation for improved performance.
Supported Languages: English.
Intended use: The model is designed to produce variable length bag-of-word like dictionary, containing expansions of sentence tokens and their corresponding weights, for a given text, which can be used for text similarity, retrieval, and search applications.
Usage with Milvus: The model is compatible with Milvus Vector DB and is very easy to use:
First, install the pymilvus library
pip install pymilvus[model]
The model can then be used to encode pairs of text and find the similarity between their representations
from pymilvus import model
from pymilvus import MilvusClient, DataType
client = MilvusClient("./milvus_demo.db")
client.drop_collection(collection_name="my_sparse_collection")
schema = client.create_schema(
auto_id=True,
enable_dynamic_fields=True,
)
schema.add_field(field_name="pk", datatype=DataType.VARCHAR, is_primary=True, max_length=100)
schema.add_field(field_name="id", datatype=DataType.VARCHAR, is_primary=False, max_length=100)
schema.add_field(field_name="embeddings", datatype=DataType.SPARSE_FLOAT_VECTOR)
index_params = client.prepare_index_params()
index_params.add_index(field_name="embeddings",
index_name="sparse_inverted_index",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
params={"drop_ratio_build": 0.2})
client.create_collection(
collection_name="my_sparse_collection",
schema=schema,
index_params=index_params
)
embeddings_model = model.sparse.SpladeEmbeddingFunction(
model_name="ibm-granite/granite-embedding-30m-sparse",
device="cpu",
batch_size=2,
k_tokens_query=50,
k_tokens_document=192
)
# Prepare documents to be ingested
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
# SpladeEmbeddingFunction.encode_documents returns sparse matrix or sparse array depending
# on the milvus-model version. reshape(1,-1) ensures the format is correct for ingestion.
doc_vector = [{"embeddings": doc_emb.reshape(1,-1), "id": f"item_{i}"} for i, doc_emb in enumerate(embeddings_model.encode_documents(docs))]
client.insert(
collection_name="my_sparse_collection",
data=doc_vector
)
# Prepare search parameters
search_params = {
"params": {"drop_ratio_search": 0.2}, # Additional optional search parameters
}
# Prepare the query vector
queries = [
"When was artificial intelligence founded",
"Where was Turing born?"
]
query_vector = embeddings_model.encode_documents(queries)
res = client.search(
collection_name="my_sparse_collection",
data=query_vector,
limit=1, #top k documents to return
output_fields=["id"],
search_params=search_params,
)
for r in res:
print(r)
Usage with Sentence Transformers:
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
from sentence_transformers import SparseEncoder
# Download from the 🤗 Hub
model = SparseEncoder("ibm-granite/granite-embedding-30m-sparse")
# Run inference
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
docs_embeddings = model.encode_document(docs, max_active_dims=192)
print(docs_embeddings.shape)
# [3, 50265]
queries = ["When was artificial intelligence founded", "Where was Turing born?"]
queries_embeddings = model.encode_query(queries, max_active_dims=50)
print(queries_embeddings.shape)
# [2, 50265]
# Get the similarity scores for the embeddings
similarities = model.similarity(queries_embeddings, docs_embeddings)
print(similarities.shape)
# [2, 3]
for i, query in enumerate(queries):
best_doc_index = similarities[i].argmax().item()
print(f"Query: {query}")
print(f"Best doc associate: Similarity: {similarities[i][best_doc_index]:.4f}, Doc: {docs[best_doc_index]}")
intersection = model.intersection(queries_embeddings[i], docs_embeddings[best_doc_index])
decoded_intersection = model.decode(intersection, top_k=10)
print("Top 10 tokens influencing the similarity:")
for token, score in decoded_intersection:
print(f"Token: {token}, Score: {score:.4f}")
# Query: When was artificial intelligence founded
# Best doc associate: Similarity: 12.3641, Doc: Artificial intelligence was founded as an academic discipline in 1956.
# Top 10 tokens influencing the similarity:
# Token: ĠAI, Score: 2.7591
# Token: Ġintelligence, Score: 2Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.