license: gpl-3.0
language:
inference: false
姜子牙-LLaMA-13B-预训练-v1
(受LLaMA权重许可限制,我们无法直接发布完整模型权重,用户需参考使用说明进行权重合并)
姜子牙系列模型
简介
姜子牙-LLaMA-13B-预训练-v1是基于LLaMa架构的130亿参数大规模预训练模型,针对中文分词进行优化,并完成1100亿token的中英文增量预训练,显著提升中文生成与理解能力。当前发布的姜子牙通用大模型13B-v1在本模型基础上,进一步完成了多任务有监督微调和人类反馈强化学习,具备翻译、编程、文本分类、信息抽取、摘要生成、文案创作、常识问答及数学计算等能力。
重要提示:为遵守Meta发布的LLaMA模型许可协议,本模型仅发布训练前后的权重增量,最终模型可通过脚本便捷获取(详见使用章节)。
模型分类
需求 |
任务 |
系列 |
模型 |
参数规模 |
语言特性 |
通用领域 |
AGI模型 |
姜子牙 |
LLaMA |
130亿 |
中英双语 |
模型详情
增量预训练
原始数据包含开源英文语料(openwebtext/Books/Wikipedia/Code)及经过清洗的悟道中文数据集。通过去重、质量评分、数据分桶、规则过滤、敏感内容过滤等流程,最终获得1.25万亿token的高质量训练数据。
为提升中文处理效率,我们在LLaMA原生词表基础上新增7000+高频中文字符,经去重后形成39410维度的混合词表,通过改造Transformers中的LlamaTokenizer实现这一优化。
训练使用160张40GB显存A100显卡,采用260万token的批大小和FP16混合精度,单卡计算吞吐达118 TFLOP/s。基于原生LLaMA-13B模型进行1100亿token的增量训练仅耗时8天。据我们所知,这是目前公开的LLaMA-13B模型最大规模增量训练。
训练过程中虽遭遇硬件故障、框架级bug及损失值突变等问题,但通过快速调整保障了训练稳定性。我们公开训练损失曲线以供研究者参考。
性能评估
下表展示姜子牙-LLaMA-13B-预训练-v1与原始LLaMA模型在英文基准测试HeLM及中文多选题评测集上的对比表现:
英文评测结果
模型 |
平均胜率 |
MMLU |
BoolQ |
叙事QA |
闭卷事实问答 |
开卷事实问答 |
QuAC |
真实性QA |
IMDB |
LLaMA-13B |
50.0% |
42.4% |
71.8% |
44.0% |
34.9% |
59.1% |
31.8% |
32.6% |
48.7% |
姜子牙-13B-预训练-v1 |
65.0% |
43.3% |
75.3% |
44.5% |
34.8% |
52.8% |
33.5% |
24.9% |
49.7% |
中文学科评测结果
模型 |
测试模式 |
C3 |
常识 |
语文 |
数学 |
英语 |
物理 |
化学 |
生物 |
历史 |
政治 |
地理 |
LLaMA-13B |
零样本 |
48.17% |
30.88% |
26.74% |
28.82% |
33.99% |
25.81% |
24.78% |
22.71% |
33.80% |
32.75% |
29.60% |
姜子牙-13B-预训练-v1 |
零样本 |
53.54% |
33.73% |
29.25% |
30.59% |
34.28% |
29.03% |
26.55% |
32.15% |
41.90% |
41.23% |
44.25% |
LLaMA-13B |
五样本 |
53.14% |
35.86% |
28.13% |
29.12% |
44.76% |
29.39% |
23.01% |
23.30% |
32.68% |
31.87% |
31.03% |
姜子牙-13B-预训练-v1 |
五样本 |
60.37% |
43.30% |
28.02% |
29.12% |
43.63% |
29.75% |
28.02% |
34.22% |
43.58% |
43.57% |
45.40% |
使用指南
受LLaMA权重许可限制,本模型不可用于商业用途,请严格遵守LLaMA使用政策。我们基于FastChat工具优化发布权重差值,具体操作如下:
步骤1:获取LLaMA官方权重并转换为Hugging Face格式(若已转换可跳过):
python src/transformers/models/llama/convert_llama_weights_to_hf.py \
--input_dir /path/to/downloaded/llama/weights --model_size 13B --output_dir /output/path
步骤2:下载本模型权重差值与步骤1所得权重,运行转换脚本:
python3 -m apply_delta --base ~/model_weights/llama-13b --target ~/model_weights/Ziya-LLaMA-13B --delta ~/model_weights/Ziya-LLaMA-13B-v1
步骤3:加载模型进行推理:
from transformers import AutoTokenizer, LlamaForCausalLM
import torch
device = torch.device("cuda")
model = LlamaForCausalLM.from_pretrained(ckpt, torch_dtype=torch.float16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(ckpt)
query = "帮我写一份去西安的旅游计划"
input_ids = tokenizer(query.strip(), return_tensors="pt").input_ids.to(device)
generate_ids = model.generate(
input_ids,
max_new_tokens=1024,
do_sample=True,
top_p=0.85,
temperature=1.0,
repetition_penalty=1.0,
eos_token_id=2,
bos_token_id=1,
pad_token_id=0
)
print(tokenizer.batch_decode(generate_ids)[0])
微调示例
参考ziya_finetune
量化推理示例
参考ziya_inference
引用文献
若使用本模型,请引用我们的论文:
@article{fengshenbang,
author = {张嘉旭等},
title = {封神榜1.0:中文认知智能基础体系},
journal = {CoRR},
volume = {abs/2209.02970},
year = {2022}
}
或引用项目主页:
@misc{封神榜-LM,
title={封神榜大模型项目},
author={IDEA-CCNL},
year={2021},
howpublished={\url{https://github.com/IDEA-CCNL/Fengshenbang-LM}},
}