HuggingFace镜像/Nandi-Mini-150M
模型介绍文件和版本分析
下载使用量0

Nandi-Mini-150M

简介

Nandi-Mini-150M 是一款紧凑高效的多语言语言模型,旨在资源受限环境中实现出色性能。它基于 5250 亿个 tokens 从头开始预训练,支持 英语及 10 种印度语言。

我们不采用任何“刷榜”技巧;该模型旨在真正强大,并且在下游任务微调方面具有高效性。

Nandi-Mini-150M 专注于通过架构效率而非规模来最大化每参数性能。它针对边缘设备、本地部署和低延迟应用进行了优化,非常适合资源受限的环境。 Nandi-Mini-150M 具有以下主要特点:

  • 跨英语和印度语言的强大 多语言能力
  • 高效设计,实现 小规模(1.5 亿参数)下的高性能
  • 使用 因式分解嵌入 减少内存占用
  • 通过 层共享 实现更好的参数效率

📝 即将发布与路线图

我们的 Nandi 系列才刚刚开始 🚀

  • Nandi-Mini-150M(基础版) — 现已发布
  • Nandi-Mini-150M(指令版) — 现已发布
  • Nandi-Mini-500M(基础版 + 指令版) — 预训练进行中
  • Nandi-Mini-1B(基础版 + 指令版) — 预训练进行中

我们正积极致力于扩展 Nandi 家族,以覆盖更广泛的使用场景——从轻量级边缘部署到功能更强大的指令微调系统。

📢 博客和技术深度解析即将推出,届时我们将分享:

  • 架构决策和设计权衡
  • 训练见解和数据集构成
  • 基准测试和实际应用

敬请期待!

本仓库包含基础版 Nandi-Mini-150M 模型,其具有以下特性:

  • 类型:因果语言模型
  • 训练阶段:预训练(从头开始)
  • 架构:Transformer 解码器,包含 RoPE、RMSNorm、SwiGLU、GQA、绑定嵌入、因式分解嵌入
  • 层数:16*2 [层共享,有效层数=32]
  • 上下文长度:2,048 tokens
  • 词汇量:131,072

🌍 支持语言

该模型在英语和多种印度语言上进行了训练,包括:

  • 印地语、孟加拉语、泰米尔语、泰卢固语、马拉地语、古吉拉特语、卡纳达语、马拉雅拉姆语、旁遮普语、奥里雅语

基准测试结果

📊 基准测试对比(约150M级别)

模型名称参数(百万)训练数据量(十亿 tokens)HellaSwagWinograndeGPQAMMLUGSM8KHumanEval平均值
Mobile-LLM-125M125100038.9053.10-----
SmolLM-135M-Base13560042.6653.0325.4425.301.360.0024.63
SmolLM2-135M-Base135200043.1353.2722.0924.091.740.0024.05
Nandi-Mini-150M-Base15050037.2052.3228.5728.862.584.2725.63

📊 与稍大模型的基准测试对比(350M–600M级别)

模型名称参数(百万)训练数据量(十亿 tokens)HellaSwagWinograndeGPQAMMLUGSM8KHumanEval平均值
Mobile-LLM-360M350100049.6056.59-----
Qwen-2-0.5-Base5001200049.0157.6927.2344.0610.6122.5635.19
Qwen2.5-0.5B-Base5001800052.1656.8224.1047.414.7729.8735.86
Qwen3-0.6B-Base6003600053.7759.1930.8050.3415.3128.0439.58
SmolLM-360M-Base36060053.3357.2221.2024.922.191.2126.68
SmolLM2-360M-Base360400056.3059.1925.2225.552.880.0028.19
Nandi-Mini-150M-Base15050037.2052.3228.5728.862.584.2725.63

注意事项

Mobile-LLM模型检查点未公开,其结果直接引自原论文。所有其他模型均使用lm-eval在一致的设置下进行评估。目前所有模型的Human-Eval和GSM8K评估均采用贪婪解码方式。

微调任务性能

CrossSum-Hindi(CHRF)结果

我们在Google's IndicGenBench的Crossum-Hindi数据集上对我们的模型及其他开源模型进行了微调。Nandi-mini-150M的性能优于其他模型。

基础模型微调前微调后
Qwen-2-0.5-Base0.094.22
Qwen2.5-0.5B-Base0.434.18
SmolLM-135M-Base0.092.55
SmolLM-360M-Base0.092.99
SmolLM2-135M-Base0.092.67
SmolLM2-360M-Base0.123.51
Nandi-mini-150M0.104.37

跨语言 tokenization 丰富度得分

语言SmolLM3-3BQwen3-0.6B-BaseSarvam-1Nandi-Mini-150M
English1.171.161.321.18
Bengali8.667.511.551.44
Gujarati10.479.371.551.53
Hindi2.715.141.251.32
Kannada16.4312.962.101.90
Malayalam17.7714.562.492.05
Marathi3.736.701.551.55
Oriya19.0715.752.182.68
Punjabi9.238.661.471.42
Tamil13.5610.932.062.05
Telugu15.4013.382.091.77
Assamese9.268.134.311.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)

📬 反馈与建议

我们非常期待听到您的想法、反馈和建议!

  • Discord:https://discord.gg/ZGdjCdRt
  • 邮箱:support@frontiersmind.ai
  • 官方网站:https://www.frontiersmind.ai/
  • LinkedIn:https://www.linkedin.com/company/frontiersmind/
  • X(Twitter):https://x.com/FrontiersMind