经 AI Skill Hub 精选评估,Nano AI 获评「强烈推荐」。这款AI工具在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 8.0 分,适合有一定技术背景的用户使用。
Nano AI 是一款基于 C 开发的开源工具,专注于 ai、gpt、llm 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
Nano AI 是一款基于 C 开发的开源工具,专注于 ai、gpt、llm 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
# 克隆仓库 git clone https://github.com/bd4sur/Nano cd Nano # 查看安装说明 cat README.md # 按 README 完成环境依赖安装后即可使用
# 查看帮助 nano --help # 基本运行 nano [options] <input> # 详细使用说明请查阅文档 # https://github.com/bd4sur/Nano
# nano 配置说明 # 查看配置选项 nano --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export NANO_CONFIG="/path/to/config.yml"
B站视频演示:
| <a href="https://www.bilibili.com/video/BV1SjajztELH" target="_blank"><img src="./doc/nano-rpi-2.jpg" width="100%"><br>树莓派语音对话离线部署</a> | <a href="https://www.bilibili.com/video/BV1rNgCzNE84" target="_blank"><img src="./doc/nano-scheme.jpg" width="100%"><br>基于自制Scheme解释器的推理</a> | <a href="https://www.bilibili.com/video/BV1mhVzzrEJf" target="_blank"><img src="./doc/nano-video-marga.jpg" width="100%"><br>路由器离线部署</a> |
|---|---|---|
| <a href="https://www.bilibili.com/video/BV1Q8qjB4ErP" target="_blank"><img src="./doc/nano-esp32-cluster.png" width="100%"><br>ESP32单片机集群推理</a> | <a href="https://www.bilibili.com/video/BV1vmrsYGERP" target="_blank"><img src="./doc/nano-video-ar-class-c.jpg" width="100%"><br>通过业余无线电C证考试</a> | <a href="https://www.bilibili.com/video/BV1vPRDYyEgp" target="_blank"><img src="./doc/nano-mi-ax5.jpg" width="100%"><br>红米AX5路由器部署推理</a> |
conda create -n nano python=3.10
conda activate nano
python -m pip install -r requirements.txt
| 模型 | 说明 | 领域监督微调模型 | LoRA插件 |
|---|---|---|---|
| [Nano-Pico](https://huggingface.co/bd4sur/Nano-Pico) | 用于验证极低资源推理部署的极小规模模型 | 无规划 | 无规划 |
| [Nano-56M](https://huggingface.co/bd4sur/Nano-56M) | 56M参数,包括基础模型和通用问答模型 | 无规划 | 无规划 |
| [Nano-168M](https://huggingface.co/bd4sur/Nano-168M) | 168M参数,包括基础模型和通用问答模型 | [业余无线电操作证考试](https://huggingface.co/bd4sur/Nano-168M/resolve/main/nano_168m_625000_sft_875000_amateur_radio_890000.bin) | 暂无公开插件 |
其中各尺寸模型的参数如下(在config/model.json中设置):
| Model | Nano-168M | Nano-56M | Nano-10M | Psycho-1M | Psycho-230k | Qwen3-0.6B |
|---|---|---|---|---|---|---|
| block_size | 512 | 512 | 512 | 512 | 512 | 40960 |
| vocab_size | 16384 | 16384 | 8192 | 4096 | 4096 | 151936 |
| n_layer | 24 | 16 | 12 | 16 | 8 | 28 |
| n_embd | 768 | 512 | 240 | 64 | 32 | 1024 |
| head_dim | 48 | 32 | 20 | 8 | 8 | 128 |
| n_head | 16 | 16 | 12 | 8 | 4 | 16 |
| n_kv_head | 8 | 8 | 4 | 4 | 2 | 8 |
| n_hidden | 2048 | 1408 | 720 | 192 | 96 | 3072 |
| #tokens@PT | 25.6G | 10.1G | 1.0G | 1.0M | 1.0M | / |
| #QAs@SFT | 12M | 2M | 1M | N/A | N/A | / |
公开数据集:
适配Nano推理引擎的Qwen2.5/Qwen3模型:bd4sur/Qwen3
探索去噪生成的试验性模型:Nano-Denoise
模型转换的目的,是将Torch训练出的模型检查点(扩展名为pt)转换为端侧推理所需的模型文件(扩展名为bin),以及对模型进行量化、压缩,以缩减模型尺寸,便于分发、部署、推理加速。
Nano模型转换,执行以下命令:
python export.py model.bin [--checkpoint | --quant | --lora] checkpoint.pt
Qwen2/Qwen3模型转换,执行以下命令:
python infer_marga/tools/export_qwen.py qwen3-0b6.bin --hf /home/bd4sur/ai/_model/Qwen3/Qwen3-0.6B
python infer_marga/tools/export_qwen.py qwen3-1b7.bin --hf /home/bd4sur/ai/_model/Qwen3/Qwen3-1.7B
模型文件的格式参考了karpathy/llama2.c,但是有不同之处。描述如下:
model_file
├─header (u32*64=256B定长)
│ ├─magic_number_0 (u32=4B) = 0x42443453
│ ├─magic_number_1 (u32=4B) = 0x55524c4d
│ ├─major_version (u32=4B)
│ ├─minor_version (u32=4B)
│ ├─model_type (u32=4B)
│ ├─config_length (u32=4B)
│ ├─model_config (u32*config_length)
│ ├─quant_config (u32*x) 量化相关参数,详见`export.py`中的实现
│ ╰─padding (u8填充到256B)
├─tokenizer_config (不定长) 其详细定义见`export.py`中的注释,LoRA模块无此字段
╰─model_params (不定长) 其详细定义见`export.py`中的实现
Nano是基于Transformer编码器结构的语言模型,可解决自回归生成、去噪生成或序列到序列生成等多种任务。默认配置为因果自注意力编码器结构的自回归语言模型,如下图所示。

模型结构参数model.json:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| block_size | int | 512 | 上下文(窗口)长度 |
| vocab_size | int | 8192 | 词表长度 |
| n_layer | int | 4 | 模型深度:即Transformer模型层数 |
| n_embd | int | 256 | 模型宽度:内部表示向量的维度 |
| n_head | int | 4 | Q注意力头数 |
| n_kv_head | int | 4 | KV注意力头数 |
| head_dim | int | 4 | 每个注意力头的维度,**未必**等于Q注意力头的维度 |
| n_hidden | int | 4 | FFN隐藏层维度,一般是模型宽度的3倍 |
| dropout | float | 0.0 | 随机丢弃层的丢弃概率,仅训练时使用,预训练时设为0 |
| use_rope | bool | True | 使用RoPE位置编码?反之使用训练位置编码 |
| norm_eps | float | 1e-5 | 均方根标准化参数,一般不动 |
| is_causal | bool | True | 因果注意力?自回归为True,去噪或序列到序列为False |
一般而言,对于小规模模型,在保证宽度(n_embd)的前提下,尽量加大深度(n_layer)。
词元编码
模型训练参数
from_checkpoint: str:从哪个检查点继续训练。其值是绝对路径。说明:训练选项中涉及的所有路径,都是绝对路径。save_checkpoint_to: str:检查点保存位置的绝对路径。其值必须是目录。默认值为仓库根目录下checkpoint/目录。dataset_path: [[str, str], ...]:预处理后的数据集的绝对路径。该字段的值为列表,列表的每一项都是含有两个元素的子列表,子列表的第一个元素是训练集的绝对路径,第二个元素是验证集的绝对路径。tokenizer_path: str:词表绝对路径。默认值为仓库根目录下tokenizer/tokenizer_16384.json。random_seed: int:Torch的随机数种子。默认值为39。固定这个值,便于复现特定结果,利于调试。batch_size: int:训练批大小。默认值为32。一般来说,批大小越大,越有利于模型收敛,也更能充分利用算力资源。但代价是成倍消耗显存。如果启用梯度累加,则实际等效批大小为batch_size乘以gradient_accumulation_steps。gradient_accumulation_steps: int:梯度累加步数。默认值:1。在DDP场景下,梯度累积步数必须是GPU卡数的整数倍。梯度累加技术可以在有限的批次大小上模拟以较大批大小训练的效果,其原理是以时间换空间,根据偏导数的加法分配律,将几个小批次上多步迭代得到的梯度进行累加,使用累加后的梯度一次性更新参数,达到模拟较大批次的效果。grad_clip: float:梯度压限系数,用于防止梯度爆炸。默认值:1.0。dropout: float:随机丢弃层的丢弃概率,仅在训练阶段有效。默认值:0。预训练阶段一般设置为0,微调阶段一般为非0。learning_rate: float:初始学习率。默认值:5e-4。模型越小,初始学习率越应适当增大。weight_decay: float:权重衰减系数。默认值:1e-1。beta1: float:AdamW优化器参数,详见文档。默认值:0.9。beta2: float:AdamW优化器参数,详见文档。默认值:0.99。decay_lr: bool:是否启用学习率调度?若不启用,则为恒定学习率。默认值:true。warmup_iters: int:学习率预热阶段的步数,仅当启用学习率调度时有效。默认值:10000。lr_decay_iters: int:学习率调度的总步数,仅当启用学习率调度时有效。默认值:1e9。min_lr: float:最小学习率,仅当启用学习率调度时有效。默认值:6e-5。eval_interval: int:每隔几步在验证集上计算一次损失。默认值:100。说明:如果满足检查点保存条件,将保存检查点。log_interval: int:每隔几步打印一次日志。默认值:10。注意:打印日志会计算损失值,比较耗时,因此不建议过于频繁地打印日志。eval_iters: int:每次验证需要用几批数据。默认值:5。backend: str:分布式通信后端。可选值:nccl等。用于DDP。device: str:计算设备。可选值:cuda、cuda:x用于指定某个GPU、cpu、mps等。一般无需特别设置,除非:①设备无显卡,将自动回落到CPU;②DDP模式下将自动设置为某一块GPU。sdp_kernel: str:缩放点积注意力的实现。可选值:math基础、flash高效(默认)、mem_efficient节省显存。其中flash仅支持FP16和BF16两种输入精度,且可能存在其他限制条件。dtype: str:训练数据类型。可选值:float32单精度(E8M23)、float16半精度(E5M10)、bfloat16半精度(E8M7,默认)。一般而言,若使用Ampere及以上的GPU架构,建议使用BF16。use_amp: bool:是否使用自动混合精度技术?仅当dtype设置为FP16和BF16时,才支持AMP。一般而言,启用AMP可节约显存占用,同时有助于训练稳定和收敛,也能够充分利用半精度运算所带来的速度增益。但是笔者实测发现,在 AGX Orin 和 Orin NX 等Ampere架构的GPU上,关闭AMP并使用BF16数据类型,性能更高,但代价是损失数值计算精度,可能带来模型难以收敛的风险。若AMP开启,默认同时启用TF32支持,以提升32位浮点数的运算性能。解码策略
基于DeepSpeed的分布式训练(已废弃)
<details>
Nano支持基于DeepSpeed的零冗余优化(ZeRO)训练。以2节点4卡ZeRO3-Offload方式为例,在主节点上执行以下命令。可以修改ds_config.json以调整ZeRO设置。注意:根据文档,train_batch_size必须等于train_micro_batch_size_per_gpu gradient_accumulation GPU数量。
deepspeed train_deepspeed.py --deepspeed --deepspeed_config deepspeed_config.json --hostfile=hostfile.txt
其中hostfile.txt的内容如下:
192.168.10.52 slots=2
192.168.10.61 slots=2
推理阶段注意:如果是DeepSpeed训练的模型,则需要先执行checkpoint/ds目录中的转换脚本,将其转化为PyTorch能够接受的state_dict格式,再执行推理脚本:
cd Nano/checkpoint/ds
python zero_to_fp32.py . ckpt_ds.pt
cd Nano
python inference_ds.py
</details>
Nano AI是一个高性能的开源AI工具,支持LLM训练和推理
该工具未明确声明开源协议,商业使用前请联系原作者确认授权范围,避免侵权风险。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
AI Skill Hub 点评:Nano AI 的核心功能完整,质量优秀。对于AI 技术爱好者来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | Nano |
| Topics | aigptllmllm-inferencellm-training |
| GitHub | https://github.com/bd4sur/Nano |
| 语言 | C |
收录时间:2026-05-26 · 更新时间:2026-05-26 · License:未公布 · AI Skill Hub 不对第三方内容的准确性作法律背书。