RightNow-Arabic-0.5B-Turbo: An Open Sub-1B Arabic Language Model via Vocabulary Injection and Edge-First Deployment
Organizations: RightNow AI
Abstract
Open Arabic large language models split into two classes: sub-1B multilingual models that treat Arabic as an afterthought (Qwen2.5-0.5B, Falcon-H1-0.5B), and 7B-70B Arabic-specialized models that require a server to run (Jais, AceGPT, ALLaM, SILMA). The one published attempt at a sub-2B Arabic-specialized model, Kuwain-1.5B, never released its weights. We present RightNow-Arabic-0.5B-Turbo, a 518M-parameter Arabic-specialized decoder LLM built on Qwen2.5-0.5B. The pipeline adds 27,032 Arabic tokens via mean-subtoken initialization, continues pretraining on 504M Arabic tokens on 8xH100 with FSDP, FlashAttention varlen packing, and Liger fused kernels, then applies supervised fine-tuning on 129,116 Arabic instruction pairs with response-only loss masking, direct preference optimization on 6,750 Arabic preference pairs, and weight soup merging across three checkpoints. On three lm-evaluation-harness Arabic benchmarks (COPA-ar, Arabic HellaSwag, ArabicMMLU) the merged model reaches 35.9% mean accuracy, beats every same-class open model, ties Falcon-H1-1.5B on COPA-ar (58.4%) at one-third the size, and recovers 67% of SILMA-9B's mean at 1/18 the parameters. The edge build quantizes to 398 MB (q4_k_m) and delivers 635 tokens/s at batch size 1 on a single H100 via llama.cpp. All code (5,555 lines across 25 scripts), weights (bf16, int8, and four GGUF quantizations), and benchmark scripts are released at https://huggingface.co/RightNowAI/RightNow-Arabic-0.5B-Turbo.
Figures & tables
| Model | Params | Open weights | Arabic-specialized |
|---|---|---|---|
| Qwen2.5-0.5B-Instruct ( Qwen Team et al., 2024 ) | 494M | ✓ | ✗ |
| Falcon-H1-0.5B-Instruct | 524M | ✓ | ✗ |
| RightNow-Arabic-0.5B-Turbo (ours) | 518M | ✓ | ✓ |
| Falcon-H1-1.5B-Instruct | 1.5B | ✓ | ✗ |
| Kuwain-1.5B ( Hennara et al., 2025 ) | 1.5B | ✗ | ✓ |
| AceGPT-7B-chat ( Huang et al., 2023 ) | 7B | ✓ | ✓ |
| Component | Lines | Notes |
|---|---|---|
| Phase scripts (00–07) | 1,904 | env check, tokenizer surgery, data, train, eval |
| Runtime modules src/rnar/ | 1,468 | FSDP, FA patch, data loader, train loop, merger |
| Benchmark + merge scripts | 1,047 | competitor bench, merge variants, speed tests, GGUF |
| Pre-tokenization scripts | 318 | flat memmap producers for pretrain and SFT |
| Chart generation | 524 | matplotlib Pareto and per-task bar plots |
| Configs | 171 | YAML hyperparameters for pretrain, SFT, DPO |
| Model | Params | COPA-ar | HellaSwag-ar | ArabicMMLU | Mean |
|---|---|---|---|---|---|
| Same-class open (0.5B) | |||||
| Qwen2.5-0.5B-Instruct ( Qwen Team et al., 2024 ) | 494M | 53.9% | 22.5% | 26.0% | 34.1% |
| Falcon-H1-0.5B-Instruct | 524M | 44.9% | 23.0% | 24.2% | 30.7% |
| Ours (soup_dpo_sft_pre) | 518M | 58.4% | 26.0% | 23.2% | 35.9% |
| Larger open | |||||
| Falcon-H1-1.5B-Instruct | 1.5B | 58.4% | 27.5% | 32.7% | 39.5% |
| Checkpoint | COPA-ar | HellaSwag-ar | ArabicMMLU | Mean |
|---|---|---|---|---|
| soup (DPO 0.5, SFT 0.25, Pretrain 0.25) | 58.43% | 25.33% | 23.17% | 35.64% |
| lerp(DPO, Pretrain, t=0.3) | 58.43% | 24.67% | 23.17% | 35.42% |
| slerp(DPO, Pretrain, t=0.3) | 58.43% | 24.67% | 23.15% | 35.42% |
| lerp(DPO, Pretrain, t=0.5) | 58.43% | 24.67% | 23.04% | 35.38% |
| slerp(DPO, Pretrain, t=0.5) | 58.43% | 24.67% | 22.98% | 35.36% |
| lerp(DPO, Pretrain, t=0.7) | 55.06% | 28.00% | 22.83% | 35.29% |
| Tokenizer | Vocab size | Tokens for sample | Fertility |
|---|---|---|---|
| Qwen2.5-0.5B baseline | 151,665 | 803 | 2.18 |
| Ours (with added 27,032 Arabic tokens) | 178,697 | 664 | 1.80 |
| Reduction | +27,032 |
| Quantization | Disk | Prompt eval (tok/s) | Generation (tok/s) |
|---|---|---|---|
| f16 | 988 MB | 634.0 | 582.4 |
| q8_0 | 525 MB | 732.8 | 645.7 |
| q5_k_m | 419 MB | 718.5 | 633.5 |
| q4_k_m | 398 MB | 723.6 | 634.9 |
| Phase | Steps | Start loss | End loss | Wall time |
|---|---|---|---|---|
| Pretrain (arwiki, 504M tokens) | 2,500 | 14.21 | 1.69 | 6h 57m |
| SFT (129k instructions, 5 epochs, loss-masked) | 418 | 1.95 | 1.81 | 12m |
| DPO (6.75k preference pairs, 2 epochs) | 844 | 0.693 | 0.691 | 34m |