alt.freeweights.granite / granite-speech-3.3-8b
From: ibm-granite <huggingface.co/ibm-granite>Newsgroups: alt.freeweights.graniteSubject:

granite-speech-3.3-8b

Date: 2026-11-15Commit: 5670dcfSigned: 2DC28CC7B26A283B ✓

Automatic speech recognition model with 8.6B parameters. Safetensors weights, 17.4 GB in all. Published by ibm-granite under Apache-2.0.

8.6B params17.4GBgranite-speech-3.3-8bsafetensorspermissive
FactsParams8.6BSize17.4 GBFormatssafetensorsTaskautomatic speech recognitionLicenseApache-2.0From sourcepermissive
$ fw get ibm-granite/granite-speech-3.3-8b
# manifest sha256 108ee132be5f… · 17.4 GB · 26 files
$ fw verify ./granite-speech-3.3-8b ibm-granite/granite-speech-3.3-8b
From sourceHosted (signed)ibm-granite/granite-speech-3.3-8bLast check: 2026-11-15 02:48 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Fine-tune of granite-3.3-8b-instruct.

Works with

Overview

Size
17.4 GB
Weights
17.4 GB (safetensors)
Parameters
8.6B
Formats
safetensors
Task
automatic speech recognition
License
Apache-2.0 (permissive)
Files
26, each with a sha256
Publisher
ibm-granite
Added
2026-11-15
Section
alt.freeweights.granite
Lineage

Original release from the publisher.

Base model: ibm-granite/granite-3.3-8b-instruct

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:48 UTCpassed

Model card

From the publisher at commit 5670dcf. Shown as plain text with links; images open at the publisher.

Granite-speech-3.3-8b (revision 3.3.2)#

Model Summary: Granite-speech-3.3-8b is a compact and efficient speech-language model, specifically designed for automatic speech recognition (ASR) and automatic speech translation (AST). Granite-speech-3.3-8b uses a two-pass design, unlike integrated models that combine speech and language into a single pass. Initial calls to granite-speech-3.3-8b will transcribe audio files into text. To process the transcribed text using the underlying Granite language model, users must make a second call as each step must be explicitly initiated.

The model was trained on a collection of public corpora comprising diverse datasets for ASR and AST as well as synthetic datasets tailored to support the speech translation task. Granite-speech-3.3-8b was trained by modality aligning granite-3.3-8b-instruct (https://huggingface.co/ibm-granite/granite-3.3-8b-instruct) to speech on publicly available open source corpora containing audio inputs and text targets.

  • Compared to revision 3.3.1, revision 3.3.2 supports multilingual speech inputs in English, French, German, Spanish and Portuguese and provides additional accuracy improvements for English ASR.
  • Compared to the initial release, revision 3.3.2 is also trained on additional data and uses a deeper acoustic encoder for improved transcription accuracy.

Evaluations:

We evaluated granite-speech-3.3-8b revision 3.3.2 alongside other speech-language models in the less than 8b parameter range as well as dedicated ASR and AST systems on standard benchmarks. The evaluation spanned multiple public benchmarks, with particular emphasis on English ASR tasks while also including multilingual ASR and AST for X-En and En-X translations.

Image: image/png

Image: image/png

Image: image/png

Image: image/png

Image: image/png

Release Date: June 19, 2025

License: Apache 2.0

Supported Languages: English, French, German, Spanish, Portuguese

Intended Use: The model is intended to be used in enterprise applications that involve processing of speech inputs. In particular, the model is well-suited for English, French, German, Spanish and Portuguese speech-to-text and speech translations to and from English for the same languages plus English-to-Japanese and English-to-Mandarin. The model can also be used for tasks that involve text-only input since it calls the underlying granite-3.3-8b-instruct when the user specifies a prompt that does not contain audio.

Generation:#

Granite Speech model is supported natively in transformers from the main branch. Below is a simple example of how to use the granite-speech-3.3-8b revision 3.3.2 model.

Usage with transformers#

First, make sure to install a recent version of transformers:

pip install transformers>=4.52.4 torchaudio peft soundfile

Then run the code:

import torch
import torchaudio
from transformers import AutoProcessor, AutoModelForSpeechSeq2Seq
from huggingface_hub import hf_hub_download

device = "cuda" if torch.cuda.is_available() else "cpu"

model_name = "ibm-granite/granite-speech-3.3-8b"
processor = AutoProcessor.from_pretrained(model_name)
tokenizer = processor.tokenizer
model = AutoModelForSpeechSeq2Seq.from_pretrained(
    model_name, device_map=device, torch_dtype=torch.bfloat16
)
# load audio
audio_path = hf_hub_download(repo_id=model_name, filename="10226_10111_000000.wav")
wav, sr = torchaudio.load(audio_path, normalize=True)
assert wav.shape[0] == 1 and sr == 16000  # mono, 16khz

# create text prompt
system_prompt = "Knowledge Cutoff Date: April 2024.\nToday's Date: April 9, 2025.\nYou are Granite, developed by IBM. You are a helpful AI assistant"
user_prompt = "<|audio|>can you transcribe the speech into a written format?"
chat = [
    dict(role="system", content=system_prompt),
    dict(role="user", content=user_prompt),
]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)

# run the processor+model
model_inputs = processor(prompt, wav, device=device, return_tensors="pt").to(device)
model_outputs = model.generate(**model_inputs, max_new_tokens=200, do_sample=False, num_beams=1)

# Transformers includes the input IDs in the response.
num_input_tokens = model_inputs["input_ids"].shape[-1]
new_tokens = torch.unsqueeze(model_outputs[0, num_input_tokens:], dim=0)
output_text = tokenizer.batch_decode(
    new_tokens, add_special_tokens=False, skip_special_tokens=True
)
print(f"STT output = {output_text[0].upper()}")
Usage with vLLM#

First, make sure to install the latest version of vLLM:

pip install vllm --upgrade
  • Code for offline mode:
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
from vllm.assets.audio import AudioAsset
from vllm.lora.request import LoRARequest

model_id = "ibm-granite/granite-speech-3.3-8b"
tokenizer = AutoTokenizer.from_pretrained(model_id)

def get_prompt(question: str, has_audio: bool):
    """Build the input prompt to send to vLLM."""
    if has_audio:
        question = f"<|audio|>{question}"
    chat = [
        {
            "role": "user",
            "content": question
        }
    ]
    return tokenizer.apply_chat_template(chat, tokenize=False)

# NOTE - you may see warnings about multimodal lora layers being ignored;
# this is okay as the lora in this model is only applied to the LLM.
model = LLM(
    model=model_id,
    enable_lora=True,
    max_lora_rank=64,
    max_model_len=2048, # This may be needed for lower resource devices.
    limit_mm_per_prompt={"audio": 1},
)

### 1. Example with Audio [make sure to use the lora]
question = "can you transcribe the speech into a written format?"
prompt_with_audio = get_prompt(
    question=question,
    has_audio=True,
)
audio = AudioAsset("mary_had_lamb").audio_and_sample_rate

inputs = {
    "prompt": prompt_with_audio,
    "multi_modal_data": {
        "audio": audio,
    }
}

outputs = model.generate(
    inputs,
    sampling_params=SamplingParams(
        temperature=0.2,
        max_tokens=64,
    ),
    lora_request=[LoRARequest("speech", 1, model_id)]
)
print(f"Audio Example - Question: {question}")
print(f"Generated text: {outputs[0].outputs[0].text}")


### 2. Example without Audio [do NOT use the lora]
question = "What is the capital of Brazil?"
prompt = get_prompt(
    question=question,
    has_audio=False,
)

outputs = model.generate(
    {"prompt": prompt},
    sampling_params=SamplingParams(
        temperature=0.2,
        max_tokens=12,
    ),
)
print(f"Text Only Example - Question: {question}")
print(f"Generated text: {outputs[0].outputs[0].text}")
  • Code for online mode:
"""
Launch the vLLM server with the following command:

vllm serve ibm-granite/granite-speech-3.3-8b \
    --api-key token-abc123 \
    --max-model-len 2048 \
    --enable-lora  \
    --lora-modules speech=ibm-granite/granite-speech-3.3-8b \
    --max-lora-rank 64
"""

import base64

import requests
from openai import OpenAI

from vllm.assets.audio import AudioAsset

# Modify OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "token-abc123"
openai_api_base = "http://localhost:8000/v1"

client = OpenAI(
    # defaults to os.environ.get("OPENAI_API_KEY")
    api_key=openai_api_key,
    base_url=openai_api_base,
)

base_model_name = "ibm-granite/granite-speech-3.3-8b"
lora_model_name = "speech"
# Any format supported by librosa is supported
audio_url = AudioAsset("mary_had_lamb").url

# Use base64 encoded audio in the payload
def encode_audio_base64_from_url(audio_url: str) -> str:
    """Encode an audio retrieved from a remote url to base64 format."""
    with requests.get(audio_url) as response:
        response.raise_for_status()
        result = base64.b64encode(response.content).decode('utf-8')
    return result

audio_base64 = encode_audio_base64_from_url(audio_url=audio_url)

### 1. Example with Audio
# NOTE: we pass the name of the lora model (`speech`) here because we have audio.
question = "can you transcribe the speech into a written format?"
chat_completion_with_audio = client.chat.completions.create(
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": question
            },
            {
                "type": "audio_url",
                "audio_url": {
                    # Any format supported by librosa is supported
                    "url": f"data:audio/ogg;base64,{audio_base64}"
                },
            },
        ],
    }],
    temperature=0.2,
    max_tokens=64,
    model=lora_model_name,
)


print(f"Audio Example - Question: {question}")
print(f"Generated text: {chat_completion_with_audio.choices[0].message.content}")


### 2. Example without Audio
# NOTE: we pass the name of the base model here because we do not have audio.
question = "What is the capital of Brazil?"
chat_completion_with_audio = client.chat.completions.create(
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": question
            },
        ],
    }],
    temperature=0.2,
    max_tokens=12,
    model=base_model_name,
)

print(f"Text Only Example - Question: {question}")
print(f"Generated text: {chat_completion_with_audio.choices[0].message.content}")

Model Architecture:

The architecture of granite-speech-3.3-8b revision 3.3.2 consists of the following components:

(1) Speech encoder: 16 conformer blocks trained with Connectionist Temporal Classification (CTC) on character-level targets on the subset containing only ASR corpora (see configuration below). In addition, our CTC encoder uses block-attention with 4-seconds audio blocks and self-conditioned CTC from the middle layer.

Configuration parameterValue
Input dimension160 (80 logmels x 2)
Nb. of layers16
Hidden dimension1024
Nb. of attention heads8
Attention head size128
Convolution kernel size15
Output dimension256

(2) Speech projector and temporal downsampler (speech-text modality adapter): we use a 2-layer window query transformer (q-former) operating on blocks of 15 1024-dimensional acoustic embeddings coming out of the last conformer block of the speech encoder that get downsampled by a factor of 5 using 3 trainable queries per block and per layer. The total temporal downsampling factor is 10 (2x from the encoder and 5x from the projector) resulting in a 10Hz acoustic embeddings rate for the LLM. The encoder, projector and LoRA adapters were fine-tuned/trained jointly on all the corpora mentioned under Training Data.

(3) Large language model: granite-3.3-8b-instruct with 128k context length (https://huggingface.co/ibm-granite/granite-3.3-8b-instruct).

(4) LoRA adapters: rank=64 applied to the query, value projection matrices

Training Data:

Overall, our training data is largely comprised of two key sources: (1) publicly available datasets (2) Synthetic data created from publicly available datasets specifically targeting the speech translation task. A detailed description of the training datasets can be found in the table below:

NameTaskNb. hoursSource
CommonVoice-17 En,De,Es,Fr,PtASR5600https://huggingface.co/datasets/mozilla-foundation/common_voice_17_0
MLS En,De,Es,Fr,PtASR48000https://huggingface.co/datasets/facebook/multilingual_librispeech
Librispeech EnglishASR1000https://huggingface.co/datasets/openslr/librispeech_asr
VoxPopuli En,De,Fr,EsASR1100https://huggingface.co/datasets/facebook/voxpopuli
AMI EnglishASR100https://huggingface.co/datasets/edinburghcstr/ami
YODAS EnglishASR10000https://huggingface.co/datasets/espnet/yodas
Earnings-22 EnglishASR105https://huggingface.co/datasets/esb/datasets
Switchboard EnglishASR260https://catalog.ldc.upenn.edu/LDC97S62
CallHome EnglishASR18https://catalog.ldc.upenn.edu/LDC97T14
Fisher EnglishASR2000https://catalog.ldc.upenn.edu/LDC2004S13
Voicemail part I EnglishASR40https://catalog.ldc.upenn.edu/LDC98S77
Voicemail part II EnglishASR40https://catalog.ldc.upenn.edu/LDC2002S35
CommonVoice-17 De,Es,Fr,Pt->EnAST3000Translations with Granite-3 and Phi-4
CommonVoice-17 En->De,Es,Fr,It,Ja,Pt,ZhAST18000Translations with Phi-4 and MADLAD

Infrastructure: We train Granite Speech using IBM's super computing cluster, Blue Vela, which is outfitted with NVIDIA H100 GPUs. This cluster provides a scalable and efficient infrastructure for training our models over thousands of GPUs. The training of this particular model was completed in 13 days on 32 H100 GPUs.

Ethical Considerations and Limitations:

The use of Large Speech and Language Models can trigger certain risks and ethical considerations. Although our alignment processes include safety considerations, the model may in some cases produce inaccurate, biased, offensive or unwanted responses to user prompts. Additionally, whether smaller models may exhibit increased susceptibility to hallucination in generation scenarios due to their reduced sizes, which could limit their ability to generate coherent and contextually accurate responses, remains uncertain. This aspect is currently an active area of research, and we anticipate more rigorous exploration, comprehension, and mitigations in this domain.

IBM recommends using this model for automatic speech recognition and translation tasks. The model's modular design improves safety by limiting how audio inputs can influence the system. If an unfamiliar or malformed prompt is received, the model simply echoes it with its transcription. This minimizes the risk of adversarial inputs, unlike integrated models that directly interpret audio and may be more exposed to such attacks. Note that more general speech tasks may pose higher inherent risks of triggering unwanted outputs.

To enhance safety, we recommend using granite-speech-3.3-8b alongside Granite Guardian. Granite Guardian is a fine-tuned instruct model designed to detect and flag risks in prompts and responses across key dimensions outlined in the IBM AI Risk Atlas.

Resources

Files

26 files · 17.4 GBWeights 17.4 GB (safetensors). Sizes and sha256 from the signed manifest.
Show all 26 files with their sha256
FileSizesha256
.eval_results/open_asr_leaderboard.yaml2.13 KBaade26a3a6e8973fe0495eb8248431d9ff15cdfbf436efd564d9d245f83596bf
.gitattributes1.58 KBcfcc33c10167b0ef9100d7065260675b834256156625f511c6707ad32ef123f2
10226_10111_000000.wav540 KB6ee3e432f4ce88415747f0549628bfef0df742365813d38b18bf28067a40cd51
README.md16.1 KBf56450e10b53901958c23b7ceb15f97f2619ebaafea4f101e9310a3d1c639a67
adapter_config.json717 Bd16a7b14daac61778e43a4875d015ee2dfc4fe35b6e9c4292a2b14a935aba2bd
adapter_model.safetensors136 MB0b6b83dd573f82ddd3221c9634c155abe36e27f9db2004c570b9e68ea338fbab
added_tokens.json229 B1539d9fee5f730b004cf2d5172d603f7a16d18d6b9f4f844da5c0e5588d7d65f
chat_template.jinja4.49 KB14aabd581fb85866b2b27868be16a40b573286b2e32250cd2e0dbcb607dcd4d1
config.json2.44 KBfccc1015adec31c417950f95ba37f479a42dfc39452a5f53b440fd7261c6aefc
generation_config.json183 B7da0809bf7a8c3a0cf23c8b14ba71e391e23bfae6b503627d9d276a342be57cf
merges.txt442 KB303127a244b0078878156c17229f36d11b7a3a3f8e47b7cfdbb304ff46be5030
model-00001-of-00009.safetensors2.00 GB1276f820dab1cc88a244cd1a93483f5756a60d3bb6df1ae3b7ec16e7f6487815
model-00002-of-00009.safetensors1.99 GBfd092699e0c2af5f0c0c8fb01116273b7a78b6646e15981710bd3b69fe789da4
model-00003-of-00009.safetensors1.99 GB8b2850cb530272425b09bee47e4e37d4b611c1bd8b3646e64e1103f69b997b60
model-00004-of-00009.safetensors1.99 GB7e75f3e50455db95d0458beeccdc0fc9cfe833123f60be5685d39d30eb6f3c24
model-00005-of-00009.safetensors1.99 GB70797e51dfe00e67e67a571931fb947423a25e847d8a183ef6548218c9ebc190
model-00006-of-00009.safetensors1.99 GBfe96bdc622693137d757441ed071255443ba3798700cb67bc0f2965409e5c60e
model-00007-of-00009.safetensors1.99 GBaf874ec068bff1fd53ebd19424955a5793f04c0951ac234740df2444a1f6b4ae
model-00008-of-00009.safetensors1.99 GBbbc716fbbff32e943a982c4f46ac1221325dc1aa8d3d5d9c7f270d5b8cdc48b3
model-00009-of-00009.safetensors1.35 GB6fcdf24f4c53d42a9c562db81d58b2d4c9cddef74e405bed6f9cf622a2e23451
model.safetensors.index.json84.3 KB35ebb31d63a55ba45e8148aef7cfddf98982739cde5deefc3eff30da63250c55
preprocessor_config.json2 B44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
special_tokens_map.json801 B21ce694081bb9ae1bd4bc64549e72e0799ebb74705e6b650e3585d85b71ebdc1
tokenizer.json3.48 MB85731be449eb448aa5a383895a6a884659553ce79d4c478b6a661c566859b40f
tokenizer_config.json5.44 KBe5c80e617e26c2e2407cabf3485768a0cf98e4be2dbf2c731b44cc0e5aa2945b
vocab.json777 KB80ab859339a2525fdfbda14bc39df02dffb824aefdaf86426217bbb146d17e01
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
5670dcfae4 pinned now2026-11-15 02:48 UTC26 files · 17.4 GB

Use it

$ fw get ibm-granite/granite-speech-3.3-8b
# manifest sha256 108ee132be5f… · 17.4 GB · 26 files
$ fw verify ./granite-speech-3.3-8b ibm-granite/granite-speech-3.3-8b
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/ibm-granite/granite-speech-3.3-8b.json --dir ./granite-speech-3.3-8b $ python3 fw.py verify ./granite-speech-3.3-8b ./ibm-granite__granite-speech-3.3-8b.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download ibm-granite/granite-speech-3.3-8b --revision 5670dcfae4a296e6993ac53eb25f638c6aaa54d0 --local-dir ./granite-speech-3.3-8b
transformersSpeech recognition with the transformers pipeline.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import pipeline asr = pipeline("automatic-speech-recognition", model="ibm-granite/granite-speech-3.3-8b", revision="5670dcfae4a296e6993ac53eb25f638c6aaa54d0") print(asr("audio.wav")["text"])

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
f56450e10b53901958c23b7ceb15f97f2619ebaafea4f101e9310a3d1c639a67
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: ibm-granite <huggingface.co/ibm-granite>Newsgroups: alt.freeweights.graniteSubject: granite-speech-3.3-8bDate: 2026-11-15Commit: 5670dcfSigned: 2DC28CC7B26A283B ✓
Upstream
ibm-granite/granite-speech-3.3-8b
Pinned commit
5670dcfae4a296e6993ac53eb25f638c6aaa54d0
Manifest
granite-speech-3.3-8b.json · .minisig
Manifest sha256
108ee132be5fb66f924297018a4eabb5012c1f2a511e2bef7b0993c34bdac3b1
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:48 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/ibm-granite/granite-speech-3.3-8b.json $ curl -O https://freeweights.allternit.com/manifests/ibm-granite/granite-speech-3.3-8b.json.minisig $ minisign -Vm granite-speech-3.3-8b.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

ibm-granite/granite-3.3-8b-instruct · this model is a finetune of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download ibm-granite/granite-speech-3.3-8b
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. granite-speech-3.3-8b.json. Provenance. Takedown history: none.
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.Edu.seed1
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.Edu.seed2
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.Edu.seed3
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.seed1
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.seed2
From: ibm-granite <huggingface.co/ibm-granite>Subject: GneissWeb.7B_ablation_model_on_350B_FineWeb.seed3