模型简介
模型特点
模型能力
使用案例
🚀 BTLM-3B-8k-base
比特张量语言模型(BTLM-3B-8k-base) 是一个拥有30亿参数的语言模型,上下文长度达8k,在6270亿个 SlimPajama 标记上进行训练。BTLM-3B-8k-base为30亿参数模型树立了新的标准,其性能超越了在多数千亿标记上训练的模型,与开源的70亿参数模型相当。该模型还可以量化为4位,以适配内存低至3GB的设备。此模型根据Apache 2.0许可证发布,可用于商业用途。
🚀 快速开始
BTLM由 Cerebras 与 Opentensor 合作,在新推出的 Condor Galaxy 1(CG-1)超级计算机 上进行训练,这是G42-Cerebras战略合作伙伴关系的首个公开成果。
✨ 主要特性
- 可商业使用:基于Apache 2.0许可证。
- 30亿参数模型中的先进水平。
- 在30亿参数模型中实现70亿参数模型的性能:通过 ALiBi、SwiGLU、最大更新参数化(muP) 以及经过大量去重和清理的 SlimPajama-627B数据集 提升性能。
- 量化为4位时可适配低至3GB内存的设备。
- 少数支持8k序列长度的30亿参数模型之一:得益于ALiBi。
- 与可比的70亿参数模型相比,训练所需的浮点运算减少71%,推理时的内存占用减少58%。
📦 安装指南
本项目未提及具体安装步骤,可参考以下使用示例进行操作。
💻 使用示例
基础用法
使用 generate()
方法:
from transformers import AutoTokenizer, AutoModelForCausalLM
# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained("cerebras/btlm-3b-8k-base")
model = AutoModelForCausalLM.from_pretrained("cerebras/btlm-3b-8k-base", trust_remote_code=True, torch_dtype="auto")
# 设置生成文本的提示
prompt = "Albert Einstein was known for "
# 对提示进行分词并转换为PyTorch张量
inputs = tokenizer(prompt, return_tensors="pt")
# 使用模型生成文本
outputs = model.generate(
**inputs,
num_beams=5,
max_new_tokens=50,
early_stopping=True,
no_repeat_ngram_size=2
)
# 将生成的标记ID转换回文本
generated_text = tokenizer.batch_decode(outputs, skip_special_tokens=True)
# 打印生成的文本
print(generated_text[0])
使用 pipeline
方法:
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import pipeline
# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained("cerebras/btlm-3b-8k-base")
model = AutoModelForCausalLM.from_pretrained("cerebras/btlm-3b-8k-base", trust_remote_code=True, torch_dtype="auto")
# 设置文本生成的提示
prompt = """Isaac Newton was a """
# 创建文本生成管道
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
# 使用管道生成文本
generated_text = pipe(
prompt,
max_length=50,
do_sample=False,
no_repeat_ngram_size=2)[0]
# 打印生成的文本
print(generated_text['generated_text'])
高级用法
继续使用PyTorch和最大更新参数化进行训练:
from transformers import AutoModelForCausalLM
import torch
model = AutoModelForCausalLM.from_pretrained("cerebras/btlm-3b-8k-base", trust_remote_code=True)
# 获取muP优化器的参数组
param_groups = model.get_mup_param_groups(lr=1e-3, weight_decay=0.1)
# 使用带有muP参数的AdamW设置优化器
optimizer = torch.optim.AdamW(
param_groups,
betas=(0.9, 0.95),
eps=1e-8
)
确保在配置中传递以下muP参数,否则模型将默认为标准参数化:
mup_width_scale: <float>
mup_embeddings_scale: <float>
mup_output_alpha: <float>
mup_scale_qk_dot_by_d: true
使用位置插值扩展上下文长度:
推理期间(不进行微调):
可以使用动态线性缩放将上下文长度扩展到训练上下文长度的2倍,而不会降低性能。当 input_seq_len
大于 train_seq_len
时,动态线性缩放会以 input_seq_len/train_seq_len
为因子调整ALiBi的斜率。详情请参阅我们的论文 Position Interpolation Improves ALiBi Extrapolation。要启用动态线性缩放,请按以下方式更新 config.json
:
# 使用推理期间将遇到的最大上下文长度更新 `n_positions`(例如16384个标记)
"n_positions": 16384,
# 在 `alibi_scaling` 参数中指定 `train_seq_len`
"alibi_scaling": {
"type": "linear",
"train_seq_len": 8192
}
使用微调 + 位置插值:
结合位置插值进行微调有助于实现更大的外推长度。缩放因子应固定为 finetuning_seq_len/train_seq_len
。要启用固定线性缩放,请按以下方式更新 config.json
:
# 使用微调上下文长度更新 `n_positions`(例如32768个标记)
"n_positions": 32768,
# 在 `alibi_scaling` 参数中指定缩放 `factor`
"alibi_scaling": {
"type": "linear",
"factor": 4.0
}
📚 详细文档
评估与其他模型的比较
内存要求
图1. 不同模型大小和量化方案的内存要求
质量、训练成本、内存占用、推理速度
图2: BTLM-3B-8K与70亿参数模型家族在质量、内存占用和推理成本方面的比较。
与30亿参数模型的性能比较
表1: 30亿参数模型的性能。详细的下游任务比较。MMLU任务性能采用5次抽样报告,其他任务采用0次抽样。
图3: 30亿参数模型的性能
与70亿参数模型的性能比较
表2: 70亿参数模型的性能。详细的下游任务比较。MMLU任务性能采用5次抽样报告,其他任务采用0次抽样。
图4: 70亿参数模型的性能
长序列长度
为了支持长序列应用,我们使用了ALiBi位置嵌入,并在2048的上下文长度下对4700亿个标记进行训练,然后在8192的上下文长度下对1570亿个标记进行训练。为了评估BTLM的长序列能力,我们在SlimPajama测试集上以32768的上下文长度进行评估,并绘制每个标记位置的损失。虽然ALiBi在理论上允许外推,但仅在2048的上下文长度下训练在实践中并不能很好地外推。幸运的是,可变序列长度训练可以显著改善外推效果。BTLM-3B在高达10k的上下文长度下外推效果良好,但超过此长度后性能会略有下降。
图5: BTLM-3B模型在SlimPajama测试集上的交叉熵评估。在32768个标记的外推序列长度上进行推理。
模型详情
属性 | 详情 |
---|---|
开发团队 | Cerebras Systems 和 Opentensor,并得到 G42 Cloud 和 IIAI 的大力支持 |
许可证 | Apache 2.0 |
模型类型 | 仅解码器语言模型 |
架构 | 带有SwiGLU、ALiBi和muP的GPT-2风格架构 |
数据集 | SlimPajama-627B |
分词器 | 字节对编码 |
词汇量大小 | 50257 |
序列长度 | 8192 |
优化器 | AdamW |
位置编码 | ALiBi |
语言 | 英语 |
了解更多 | BTLM-3B-8k博客 |
论文 | BTLM-3B-8K: 7B Parameter Performance in a 3B Parameter Model |
使用和限制
预期用途
主要预期用途是进一步开展大语言模型的研究。BTLM-3B-8k-base可作为自然语言处理、应用、伦理和对齐研究的基础模型。我们以完全许可的Apache许可证发布这些模型,供社区自由使用。
您可以通过Cerebras Model Studio 或第三方库对BTLM-3B-8k-base模型进行微调。在将BTLM-3B-8k-base用于生产下游应用之前,应进行进一步的安全相关测试和缓解措施。
非预期用途
BTLM-3B-8k-base在SlimPajama上进行训练,主要是英语数据,不建议用于机器翻译任务。BTLM-3B-8k-base未针对指令跟随或基于聊天的用例进行调整。
生成示例
提示:"什么是压力计?"
生成:"压力计是一种测量流体压力的仪器。"
提示:"罗伯特·奥本海默因什么而闻名?"
生成:“罗伯特·奥本海默是一位物理学家,他是曼哈顿计划的负责人,该计划负责核武器的研发。”
提示:"阿尔伯特·爱因斯坦以什么而闻名?"
生成:“阿尔伯特·爱因斯坦是一位出生于德国的理论物理学家,他提出了相对论,这是现代物理学的两大支柱之一(另一支柱是量子力学)。”
提示:“艾萨克·牛顿是谁?”
生成:“艾萨克·牛顿是一位英国物理学家、数学家、天文学家、炼金术士和神学家。他被广泛认为是有史以来最有影响力的科学家之一,也是科学革命的关键人物。”
提示:"血液离开右心室后被泵到哪里?"
生成:“右心房接收来自肺动脉的脱氧血液。心脏的右侧是唯一接收脱氧血液的一侧……”
提示:"彼得参加完当地音乐会后丢了钱包。为了帮助他,鲍勃给了大卫10美元。大卫然后把钱给了彼得。现在彼得一共有多少钱?"
生成:“A. 10美元”
风险、偏差和伦理考虑
⚠️ 重要提示
此模型的输出可能与人类价值观一致,也可能不一致。在将此模型部署到可能直接影响人类生活的生产环境之前,需要彻底调查风险。
💡 使用建议
RedPajama数据集 可能存在分布偏差,这可能在下游模型部署中以各种形式表现出来。大语言模型还存在其他风险,如放大刻板印象、记忆训练数据或泄露私人或安全信息。
📄 许可证
本项目采用Apache 2.0许可证。
致谢
我们感谢所有使这项工作成为可能的Cerebras工程师。
我们感谢G42 Cloud和Inception Institute of Artificial Intelligence的慷慨支持,他们为我们在Condor Galaxy 1上提供了计算时间。



