LycheeAI-coder-2b-II-pro-MLX-bf16

无损版本(bfloat16) · v7 · 基于 MiniCPM5-2B · Apache 2.0 · 5.03 GB

这是 LycheeAI-coder-2b-II-pro 的未量化版本: LoRA adapter 已融合进基座,权重是 bf16 全精度,没有经过任何量化。

MLX 和 transformers 都能直接加载——它是标准 safetensors 格式,所以一套权重两种用法。

和 -f16 仓库的关系:同一份权重。两个仓库名只是为了让不同用户都能找到它—— 想在 MLX 上找无损版的人,看到 -f16 这个名字不会意识到"这个 MLX 也能用"。 如果你只想要一份,用哪个都行,字节完全相同。

国内用户推荐 ModelScope:modelscope.cn/models/whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16


什么时候该用这个(而不是 4bit)

你的目的 用哪个
就想跑起来用,越省事越好 MLX 4bit(1.42 GB)
质量基准 / 要"没有量化误差"的结果 ✅ 本仓库
在无损基础上做自己的量化(q4/q8/custom) ✅ 本仓库
继续微调(续训 LoRA) ✅ 本仓库(4bit 不能训)
转 GGUF ✅ 本仓库,或直接用现成的 GGUF 仓库
CUDA 卡上跑 ✅ 本仓库

一句话:要在它身上"再加工",就必须用这个版本;只是想用它,4bit 更省。


快速开始

MLX

pip install mlx-lm
from mlx_lm import load, generate

model, tok = load("whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16")

msgs = [
    {"role": "system", "content": "你是 LycheeAI-coder-2b-II-pro,由 MiniCPM5-2B 通过 LoRA 微调而来的编程助手。回答简洁、直接,不谄媚;做不到的事直接说明,不要编造。"},
    {"role": "user",   "content": "递归是什么?一句话。"},
]

# ★ 必须套 chat template,否则会复读乱码(见下文"踩坑")
prompt = tok.apply_chat_template(msgs, tokenize=False,
                                 add_generation_prompt=True,
                                 enable_thinking=False)
print(generate(model, tok, prompt=prompt, max_tokens=256, verbose=False))

实测输出:

递归是**函数自己调用自己**。

命令行也行(mlx_lm.generate 自己会套模板):

python -m mlx_lm.generate \
  --model whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16 \
  --prompt "用 Python 写一个二分查找,带注释。" \
  --max-tokens 256 --temp 0.4

transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

mid = "whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16"
tok = AutoTokenizer.from_pretrained(mid, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    mid, torch_dtype="bfloat16", device_map="auto", trust_remote_code=True)

工具的用法

和 4bit 版完全一致——模型输出裸 JSON:

{"name": "calculate", "arguments": {"expression": "789*123"}}

完整接入代码(含多步循环、JSON 兜底解析)见主仓库的 宿主接入章节。


⚠️ 踩过的坑

1. 不套 chat template 会复读。

直接 generate(model, tok, prompt="递归是什么?") 会得到类似这样的东西:

还是说:递归是函数自己调用自己。区别很大,对吧。还是说:递归是**把问题缩小到更小的问题**。还是说:…

这不是模型坏了,是你喂的是裸补全而不是对话。用 tok.apply_chat_template(...), 或者干脆用 mlx_lm.generate 命令行。

2. enable_thinking 记得显式传 False。

模板里有 <think> 开关,不传的话没有默认值,输出可能带游离的 </think>。 想要思考内容就传 True,它会单独出现(不混在回答里)。

3. 加载比 4bit 慢、占内存多——这是正常的。

实测对比(MacBook Pro M4 / 16GB):

MLX 4bit 本仓库(bf16)
磁盘 1.42 GB 5.03 GB
峰值内存 1.52 GB ~5.5 GB
冷启动 3.4 s ~10 s

差的是文件大小,不是模型质量——两者输出质量的区别只来自量化误差。


关于这个版本

项 值
基座 MiniCPM5-2B(面壁智能 OpenBMB,Apache 2.0)
精度 bfloat16(无量化)
微调 LoRA(rank 8,16 层),已融合进基座
训练数据 精选 980 条 × 1 epoch(490 步)
验收 26 / 27(上一版 25/27)
许可 Apache 2.0(可商用)

完整能力说明、局限、训练方法论见主仓库: whcl412/LycheeAI-coder-2b-II-pro

已知问题(简版): ① 无工具时算术会算错 → 在 system 里要求"一律调 calculate"; ② 通用 system 下身份可能答错 → system 里写清身份; ③ 偶发控制字符 \x08 → 输出前过滤; ④ 偶发工具名幻觉 → 宿主必须查注册表。


📁 文件说明

文件 大小 说明
model.safetensors 5,033,556,906 B bf16 全精度权重(已融合 LoRA)
model.safetensors.index.json — 分片索引
config.json — 无 quantization 字段(= 未量化)
chat_template.jinja — 含 tools 支持的完整对话模板
tokenizer.json / tokenizer_config.json — 分词器
generation_config.json — 生成默认参数

🙏 致谢

  • 基座:MiniCPM5-2B(面壁智能 OpenBMB)
  • 许可:Apache 2.0

个人项目,欢迎提 issue。有用的话 Bilibili 关注一下 🤖

Downloads last month
83
Safetensors
Model size
3B params
Tensor type
BF16
·
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for whcl412/LycheeAI-coder-2b-II-pro-MLX-bf16

Finetuned
(48)
this model