Instructions to use ibm-granite/granite-4.0-h-tiny with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ibm-granite/granite-4.0-h-tiny with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="ibm-granite/granite-4.0-h-tiny") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("ibm-granite/granite-4.0-h-tiny") model = AutoModelForCausalLM.from_pretrained("ibm-granite/granite-4.0-h-tiny", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use ibm-granite/granite-4.0-h-tiny with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "ibm-granite/granite-4.0-h-tiny" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ibm-granite/granite-4.0-h-tiny", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/ibm-granite/granite-4.0-h-tiny
- SGLang
How to use ibm-granite/granite-4.0-h-tiny with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "ibm-granite/granite-4.0-h-tiny" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ibm-granite/granite-4.0-h-tiny", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "ibm-granite/granite-4.0-h-tiny" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ibm-granite/granite-4.0-h-tiny", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use ibm-granite/granite-4.0-h-tiny with Docker Model Runner:
docker model run hf.co/ibm-granite/granite-4.0-h-tiny
Loading in 4bit mode on 8GB VRAM - very slow inference
I'm trying to use this model on NVIDIA GeForce RTX 3070 Laptop GPU with 8 GB of VRAM. Since this is 7B model and I'm loading it in 4bit mode I was expecting that it fully fits into 8GB VRAM. However in Windows task manager I see that VRAM is fully used, and additionally ~5 GB of RAM is used. But what is the most problematic - it is very slow inference. Even simple prompts may take up to 40-60 seconds.
Can there be any explanation for that? Am I missing some configuration? Any recommendation?
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
device = "cuda"
model_path = "ibm-granite/granite-4.0-h-tiny"
tokenizer = AutoTokenizer.from_pretrained(model_path)
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
quantization_config=quantization_config,
device_map=device,
dtype=None,
)
print(model.hf_device_map) # ->>> this prints: {'': device(type='cuda')}
I loaded ibm/granite-4-h-tiny via LM Studio, on single NVIDIA 5060 Ti 16GB.
When setting context window to 1M, I got 5.19 tok/s.
When setting context window to 256K, I got 158.17 tok/s.
AFAIK, if the output tps dropped, it means vram is exhausted, data is transferred between system ram and vram. Lower the value of context window to make all data fully fit in vram, which improves tps.