This repository provides tools for finetuning ibm-granite/granite-4.0-1b-speech on Automatic Speech Recognition (ASR) and Automatic Speech Translation (AST) tasks.
├── train.py # Main training script
├── train_single_gpu.sh # Single GPU training script
├── train_multi_gpu.sh # Multi GPU training script
├── infer.py # Inference and evaluation (WER, BLEU)
├── data.py # Metadata preprocessing
├── utils.py # Shared utilities (collator, metrics, etc.)
├── datasets/ # Dataset directory
└── models/ # Local model directory
conda activate speech # or your environment
pip install -q git+https://github.com/huggingface/transformers.git
pip install -U -q datasets accelerate evaluate whisper tqdm librosa torchmetrics
Download Granite Speech checkpoint to local directory:
models/granite-4.0-1b-speech/
Scripts will use local model if available, otherwise fall back to Hugging Face.
Format your data as JSONL with required fields (see Metadata Format section).
python data.py --input datasets/raw.json --output datasets/train.jsonl
Single GPU:
bash train_single_gpu.sh
Multi GPU (4 GPUs):
bash train_multi_gpu.sh
Custom training:
python train.py \
--train-files datasets/train.jsonl \
--val-files datasets/val.jsonl \
--output-dir outputs/granite-finetune \
--epochs 3.0 \
--train-batch-size 16
Single GPU:
python infer.py \
--checkpoint outputs/granite-finetune/checkpoint-10000 \
--metadata datasets/test.jsonl \
--output results.json
Multi GPU:
bash infer_multi_gpu.sh
Output includes WER and BLEU scores.
torchrun| Argument | Default | Description |
|---|---|---|
--train-files | required | Training JSONL files |
--val-files | required | Validation JSONL files |
--output-dir | outputs/granite-finetune | Output directory |
--epochs | 1.0 | Training epochs |
--train-batch-size | 8 | Batch size per device |
--learning-rate | 3e-5 | Learning rate |
--save-steps | 10000 | Save checkpoint every N steps |
--save-total-limit | 3 | Keep only N recent checkpoints |
--resume | - | Resume from latest checkpoint |
--resume-from | - | Resume from specific checkpoint |
JSONL format with one sample per line:
{
"audio_filepath": "datasets/audio/sample.wav",
"duration": 4.21,
"task": "asr",
"source_lang": "Vietnamese",
"target_lang": "Vietnamese",
"prompt": "Please transcribe the following audio to text<|audio|>",
"text": "xin chào mọi ngườii",
"split": "train"
}
audio_filepath: Path to audio fileduration: Audio duration in secondstask: asr or astsource_lang: Source language (e.g., Vietnamese, English)target_lang: Target languageprompt: Instruction prompt with <|audio|> tokentext: Expected output textori_text: Original transcripttgt_text: Target translationsplit: train, validation, or testsample_id: Unique identifier# GPU selection (for single GPU training)
export CUDA_VISIBLE_DEVICES=0
checkpoint-{step} subdirectories50 commits
Python
98.7%
Shell
1.3%
This repository provides tools for finetuning ibm-granite/granite-4.0-1b-speech on Automatic Speech Recognition (ASR) and Automatic Speech Translation (AST) tasks.
├── train.py # Main training script
├── train_single_gpu.sh # Single GPU training script
├── train_multi_gpu.sh # Multi GPU training script
├── infer.py # Inference and evaluation (WER, BLEU)
├── data.py # Metadata preprocessing
├── utils.py # Shared utilities (collator, metrics, etc.)
├── datasets/ # Dataset directory
└── models/ # Local model directory
conda activate speech # or your environment
pip install -q git+https://github.com/huggingface/transformers.git
pip install -U -q datasets accelerate evaluate whisper tqdm librosa torchmetrics
Download Granite Speech checkpoint to local directory:
models/granite-4.0-1b-speech/
Scripts will use local model if available, otherwise fall back to Hugging Face.
Format your data as JSONL with required fields (see Metadata Format section).
python data.py --input datasets/raw.json --output datasets/train.jsonl
Single GPU:
bash train_single_gpu.sh
Multi GPU (4 GPUs):
bash train_multi_gpu.sh
Custom training:
python train.py \
--train-files datasets/train.jsonl \
--val-files datasets/val.jsonl \
--output-dir outputs/granite-finetune \
--epochs 3.0 \
--train-batch-size 16
Single GPU:
python infer.py \
--checkpoint outputs/granite-finetune/checkpoint-10000 \
--metadata datasets/test.jsonl \
--output results.json
Multi GPU:
bash infer_multi_gpu.sh
Output includes WER and BLEU scores.
torchrun| Argument | Default | Description |
|---|---|---|
--train-files | required | Training JSONL files |
--val-files | required | Validation JSONL files |
--output-dir | outputs/granite-finetune | Output directory |
--epochs | 1.0 | Training epochs |
--train-batch-size | 8 | Batch size per device |
--learning-rate | 3e-5 | Learning rate |
--save-steps | 10000 | Save checkpoint every N steps |
--save-total-limit | 3 | Keep only N recent checkpoints |
--resume | - | Resume from latest checkpoint |
--resume-from | - | Resume from specific checkpoint |
JSONL format with one sample per line:
{
"audio_filepath": "datasets/audio/sample.wav",
"duration": 4.21,
"task": "asr",
"source_lang": "Vietnamese",
"target_lang": "Vietnamese",
"prompt": "Please transcribe the following audio to text<|audio|>",
"text": "xin chào mọi ngườii",
"split": "train"
}
audio_filepath: Path to audio fileduration: Audio duration in secondstask: asr or astsource_lang: Source language (e.g., Vietnamese, English)target_lang: Target languageprompt: Instruction prompt with <|audio|> tokentext: Expected output textori_text: Original transcripttgt_text: Target translationsplit: train, validation, or testsample_id: Unique identifier# GPU selection (for single GPU training)
export CUDA_VISIBLE_DEVICES=0
checkpoint-{step} subdirectories50 commits
Python
98.7%
Shell
1.3%