Nandi-Mini-150M 是一款紧凑高效的多语言语言模型,旨在资源受限环境中实现出色性能。它基于 5250 亿个 tokens 从头开始预训练,支持 英语及 10 种印度语言。
我们不采用任何“刷榜”技巧;该模型旨在真正强大,并且在下游任务微调方面具有高效性。
Nandi-Mini-150M 专注于通过架构效率而非规模来最大化每参数性能。它针对边缘设备、本地部署和低延迟应用进行了优化,非常适合资源受限的环境。 Nandi-Mini-150M 具有以下主要特点:
我们的 Nandi 系列才刚刚开始 🚀
我们正积极致力于扩展 Nandi 家族,以覆盖更广泛的使用场景——从轻量级边缘部署到功能更强大的指令微调系统。
📢 博客和技术深度解析即将推出,届时我们将分享:
敬请期待!
本仓库包含基础版 Nandi-Mini-150M 模型,其具有以下特性:
该模型在英语和多种印度语言上进行了训练,包括:
| 模型名称 | 参数(百万) | 训练数据量(十亿 tokens) | HellaSwag | Winogrande | GPQA | MMLU | GSM8K | HumanEval | 平均值 |
|---|---|---|---|---|---|---|---|---|---|
| Mobile-LLM-125M | 125 | 1000 | 38.90 | 53.10 | - | - | - | - | - |
| SmolLM-135M-Base | 135 | 600 | 42.66 | 53.03 | 25.44 | 25.30 | 1.36 | 0.00 | 24.63 |
| SmolLM2-135M-Base | 135 | 2000 | 43.13 | 53.27 | 22.09 | 24.09 | 1.74 | 0.00 | 24.05 |
| Nandi-Mini-150M-Base | 150 | 500 | 37.20 | 52.32 | 28.57 | 28.86 | 2.58 | 4.27 | 25.63 |
| 模型名称 | 参数(百万) | 训练数据量(十亿 tokens) | HellaSwag | Winogrande | GPQA | MMLU | GSM8K | HumanEval | 平均值 |
|---|---|---|---|---|---|---|---|---|---|
| Mobile-LLM-360M | 350 | 1000 | 49.60 | 56.59 | - | - | - | - | - |
| Qwen-2-0.5-Base | 500 | 12000 | 49.01 | 57.69 | 27.23 | 44.06 | 10.61 | 22.56 | 35.19 |
| Qwen2.5-0.5B-Base | 500 | 18000 | 52.16 | 56.82 | 24.10 | 47.41 | 4.77 | 29.87 | 35.86 |
| Qwen3-0.6B-Base | 600 | 36000 | 53.77 | 59.19 | 30.80 | 50.34 | 15.31 | 28.04 | 39.58 |
| SmolLM-360M-Base | 360 | 600 | 53.33 | 57.22 | 21.20 | 24.92 | 2.19 | 1.21 | 26.68 |
| SmolLM2-360M-Base | 360 | 4000 | 56.30 | 59.19 | 25.22 | 25.55 | 2.88 | 0.00 | 28.19 |
| Nandi-Mini-150M-Base | 150 | 500 | 37.20 | 52.32 | 28.57 | 28.86 | 2.58 | 4.27 | 25.63 |
Mobile-LLM模型检查点未公开,其结果直接引自原论文。所有其他模型均使用lm-eval在一致的设置下进行评估。目前所有模型的Human-Eval和GSM8K评估均采用贪婪解码方式。
我们在Google's IndicGenBench的Crossum-Hindi数据集上对我们的模型及其他开源模型进行了微调。Nandi-mini-150M的性能优于其他模型。
| 基础模型 | 微调前 | 微调后 |
|---|---|---|
| Qwen-2-0.5-Base | 0.09 | 4.22 |
| Qwen2.5-0.5B-Base | 0.43 | 4.18 |
| SmolLM-135M-Base | 0.09 | 2.55 |
| SmolLM-360M-Base | 0.09 | 2.99 |
| SmolLM2-135M-Base | 0.09 | 2.67 |
| SmolLM2-360M-Base | 0.12 | 3.51 |
| Nandi-mini-150M | 0.10 | 4.37 |
| 语言 | SmolLM3-3B | Qwen3-0.6B-Base | Sarvam-1 | Nandi-Mini-150M |
|---|---|---|---|---|
| English | 1.17 | 1.16 | 1.32 | 1.18 |
| Bengali | 8.66 | 7.51 | 1.55 | 1.44 |
| Gujarati | 10.47 | 9.37 | 1.55 | 1.53 |
| Hindi | 2.71 | 5.14 | 1.25 | 1.32 |
| Kannada | 16.43 | 12.96 | 2.10 | 1.90 |
| Malayalam | 17.77 | 14.56 | 2.49 | 2.05 |
| Marathi | 3.73 | 6.70 | 1.55 | 1.55 |
| Oriya | 19.07 | 15.75 | 2.18 | 2.68 |
| Punjabi | 9.23 | 8.66 | 1.47 | 1.42 |
| Tamil | 13.56 | 10.93 | 2.06 | 2.05 |
| Telugu | 15.40 | 13.38 | 2.09 | 1.77 |
| Assamese | 9.26 | 8.13 | 4.31 | 1.51 |
!pip install transformers=='5.4.0'
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_name = "FrontiersMind/Nandi-mini-150M"
device = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
dtype=torch.bfloat16
).to(device).eval()
prompt = """
The night was quiet and the streets were empty.
A single light flickered in the distance. Someone was walking slowly, carrying a small bag. Suddenly,
"""
model_inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
outputs = model.generate(
**model_inputs,
max_new_tokens=50,
do_sample=True,
temperature=0.3,
top_k=20,
repetition_penalty=1.1,
top_p=0.95
)
response = tokenizer.decode(
outputs[0],
skip_special_tokens=True,
)
print(response)我们非常期待听到您的想法、反馈和建议!