许可证: agpl-3.0
数据集:
- fnlp/moss-002-sft-data
语言:
- 英文
- 中文
标签:
- moss
- 大语言模型
MOSS
目录
:spiral_notepad: 开源清单
模型
数据
工程方案
:fountain_pen: 简介
MOSS是一个支持插件增强的开源对话语言模型。moss-moon
系列模型参数量160亿,支持单卡A100(FP16精度)或双卡3090推理,INT-4/8量化后可在单卡3090上运行。基础模型在7000亿中英文及代码token上预训练,经多轮插件对话数据微调后,最终通过偏好感知训练优化。
局限性:受模型规模和自回归特性影响,MOSS可能生成包含错误、误导或偏见的内容,使用前请仔细核查。
应用示例:

数学计算


文生图插件

中文能力



代码生成


安全性

:robot: 与MOSS对话
GPU需求
下表展示了批大小为1时推理所需的最小显存(当前量化版本不支持模型并行):
精度 |
加载模型 |
完成单轮对话(预估) |
达到最大序列长度(2048) |
FP16 |
31GB |
42GB |
81GB |
Int8 |
16GB |
24GB |
46GB |
Int4 |
7.8GB |
12GB |
26GB |
安装指南
- 克隆仓库:
git clone https://github.com/OpenLMLab/MOSS.git
cd MOSS
- 创建conda环境:
conda create --name moss python=3.8
conda activate moss
- 安装依赖:
pip install -r requirements.txt
- (可选)4/8位量化支持:
pip install triton
注意:当前triton仅支持Linux/WSL系统。
体验MOSS
单卡推理
以下示例展示如何在单卡A800或CPU上运行FP16精度的moss-moon-003-sft
:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> tokenizer = AutoTokenizer.from_pretrained("fnlp/moss-moon-003-sft", trust_remote_code=True)
>>> model = AutoModelForCausalLM.from_pretrained("fnlp/moss-moon-003-sft", trust_remote_code=True).half().cuda()
>>> meta_instruction = "你是一个名为MOSS的AI助手..."
>>> query = meta_instruction + "<|Human|>: 你好<eoh>\n<|MOSS|>:"
>>> inputs = tokenizer(query, return_tensors="pt").to('cuda')
>>> outputs = model.generate(**inputs, max_new_tokens=256)
>>> print(tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))
多卡推理
在≥2张3090显卡上运行的代码示例:
>>> from accelerate import init_empty_weights, load_checkpoint_and_dispatch
>>> with init_empty_weights():
... model = AutoModelForCausalLM.from_config(config, torch_dtype=torch.float16)
>>> model = load_checkpoint_and_dispatch(model, checkpoint_dir, device_map="auto")
量化模型
使用4位量化模型示例(需安装triton):
>>> model = AutoModelForCausalLM.from_pretrained("fnlp/moss-moon-003-sft-int4", trust_remote_code=True).half().cuda()
插件增强
启用网络搜索插件的完整交互流程:
- 首次推理生成插件调用指令
- 执行插件获取结果
- 将结果输入模型生成最终回复
>>>
>>> query = meta_instruction + "<|Human|>: 黑暗荣耀的主演<eoh>\n<|MOSS|>:"
>>> outputs = model.generate(**inputs, stopping_criteria=StopWordsCriteria(["<eoc>"]))
>>> print("生成的搜索命令:", extract_search_command(outputs))
>>>
>>> new_query = f"{outputs}<|Results|>:\nSearch(...)\n<eor><|MOSS|>:"
>>> final_output = model.generate(**tokenizer(new_query, return_tensors="pt").to('cuda'))
>>> print("最终回复:", tokenizer.decode(final_output[0][inputs.input_ids.shape[1]:]))
网页演示
Streamlit版
streamlit run moss_web_demo_streamlit.py --server.port 8888
Gradio版
python moss_web_demo_gradio.py
命令行交互
运行CLI演示程序:
python moss_cli_demo.py
输入clear
清空对话历史,输入stop
退出程序。
:fire: 微调MOSS
环境要求
accelerate==0.17.1
torch==1.13.1+cu117
transformers==4.25.1
开始训练
- 按指定格式准备数据
- 配置accelerate配置文件
- 启动训练脚本:
accelerate launch --config_file ./configs/sft.yaml finetune_moss.py \
--model_name_or_path fnlp/moss-moon-003-base \
--data_dir ./sft_data \
--output_dir ./ckpts/moss-moon-003-sft
注意:基础模型的EOS标记为<|endoftext|>
,微调时需指定为<eom>
。
:link: 相关链接
欢迎提交Pull Request补充其他基于MOSS的开源项目。
:construction: 未来计划
- 推理能力:通过扩大模型规模和数学专项训练提升推理能力
- 真实性&安全性:减少幻觉输出,增强安全防护
- 多模态:赋予模型视觉和听觉理解能力
- 个性化:使模型能在交互中持续学习,最终形成个性化AI
:page_with_curl: 许可证
代码采用Apache 2.0许可,数据使用CC BY-NC 4.0许可,模型权重遵循GNU AGPL 3.0。商业用途需签署授权表格并发送至robot@fudan.edu.cn申请授权。
:heart: 致谢