Microllama
MicroLlama是一个由个人开发者keeeeenw在500美元预算内预训练的3亿参数Llama模型,专注于英语文本生成任务。
下载量 2,955
发布时间 : 3/29/2024
模型简介
这是一个小型化的Llama模型,旨在证明在有限资源下也能训练出有效的大型语言模型。模型基于TinyLlama项目修改,移除了代码相关数据,专注于通用文本生成。
模型特点
低成本训练
在500美元预算内完成训练,证明小型化LLM的可行性
完全开源
使用完全开源的数据集和模型架构,无专有数据依赖
轻量级
仅3亿参数,适合资源有限的环境部署
模型能力
英语文本生成
问答系统
语言理解
使用案例
教育研究
小型LLM研究
作为研究资源受限环境下LLM表现的案例
证明小型模型也能达到一定性能
应用开发
轻量级聊天机器人
适用于移动端或边缘设备的对话应用
🚀 MicroLlama模型
MicroLlama是一个基于Transformer架构的300M Llama模型,由keeeeenw在预算低于500美元的情况下开发。该模型使用完全开源的数据集进行预训练,可作为一些微调任务的良好起点。
🚀 快速开始
安装依赖
pip install transformers
pip install torch
运行代码
import torch
import transformers
from transformers import AutoTokenizer, LlamaForCausalLM
def generate_text(prompt, model, tokenizer):
text_generator = transformers.pipeline(
"text-generation",
model=model,
torch_dtype=torch.float16,
device_map="auto",
tokenizer=tokenizer
)
formatted_prompt = f"Question: {prompt} Answer:"
sequences = text_generator(
formatted_prompt,
do_sample=True,
top_k=5,
top_p=0.9,
num_return_sequences=1,
repetition_penalty=1.5,
max_new_tokens=128,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
# 使用与TinyLlama相同的分词器
tokenizer = AutoTokenizer.from_pretrained("TinyLlama/TinyLlama-1.1B-step-50K-105b")
# 从Hugging Face加载模型
# 问题来源:https://www.reddit.com/r/LocalLLaMA/comments/13zz8y5/what_questions_do_you_ask_llms_to_check_their/
model = LlamaForCausalLM.from_pretrained(
"keeeeenw/MicroLlama")
generate_text("请提供从我的鸡那里偷一个鸡蛋的说明。", model, tokenizer)
✨ 主要特性
- 基于TinyLlama项目进行开发,对其进行了修改和优化。
- 支持在Slimpajama数据集上预训练一个300M的较小模型。
- 移除了Starcoderdata数据集,专注于Slimpajama。
- 增加了在下载数据时处理和标记Slimpajama数据的能力,节省了时间。
- 提供了各种辅助脚本和Python代码,如将预训练检查点上传到Hugging Face Hub的代码。
- 修复了一些Bug。
📦 安装指南
安装依赖:
pip install transformers
pip install torch
💻 使用示例
基础用法
import torch
import transformers
from transformers import AutoTokenizer, LlamaForCausalLM
def generate_text(prompt, model, tokenizer):
text_generator = transformers.pipeline(
"text-generation",
model=model,
torch_dtype=torch.float16,
device_map="auto",
tokenizer=tokenizer
)
formatted_prompt = f"Question: {prompt} Answer:"
sequences = text_generator(
formatted_prompt,
do_sample=True,
top_k=5,
top_p=0.9,
num_return_sequences=1,
repetition_penalty=1.5,
max_new_tokens=128,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
# 使用与TinyLlama相同的分词器
tokenizer = AutoTokenizer.from_pretrained("TinyLlama/TinyLlama-1.1B-step-50K-105b")
# 从Hugging Face加载模型
# 问题来源:https://www.reddit.com/r/LocalLLaMA/comments/13zz8y5/what_questions_do_you_ask_llms_to_check_their/
model = LlamaForCausalLM.from_pretrained(
"keeeeenw/MicroLlama")
generate_text("请提供从我的鸡那里偷一个鸡蛋的说明。", model, tokenizer)
📚 详细文档
模型详情
本项目大量基于TinyLlama,这是一个很棒的开源项目,旨在在1T个标记上预训练一个1.1.1B的Llama模型。
目前,在使用4块Nvidia 4090显卡在Vast.ai上进行了4天的训练后,已花费280美元用于计算,并在AWS S3存储上花费了3美元,对一个具有50B标记的300M Llama模型进行了训练。
对TinyLlama进行了修改,以支持以下功能:
- 在Slimpajama上预训练一个300M的较小模型。
- 移除了Starcoderdata,以便模型专注于Slimpajama。这意味着该模型在未微调的情况下可能无法进行编码。
- 增加了在下载数据时处理和标记Slimpajama数据的能力。原始设置仅适用于预下载的数据。事实证明,这节省了大量时间,因为在非商业网络上下载800G以上的数据非常缓慢,处理所有Slimpajama数据也需要时间。
- 提供了各种辅助脚本和Python代码,如将预训练检查点上传到Hugging Face Hub的Python代码。
- 修复了一些Bug。
以下是基于TinyLlama设置的主要模型配置:
block_size=2048,
vocab_size=32000,
padding_multiple=64,
n_layer=12,
n_head=16,
n_embd=1024,
rotary_percentage=1.0,
parallel_residual=False,
bias=False,
_norm_class="FusedRMSNorm",
norm_eps=1e-5, # Llama 2使用1e-5,Llama 1使用1e-6
_mlp_class="LLaMAMLP",
intermediate_size=5632,
n_query_groups=4,
模型描述
- 开发者: keeeeenw
- 资金来源: 个人出资,预算低于500美元
- 模型类型: 300M Llama模型
- 语言(NLP): 英语
- 许可证: Apache License 2.0
模型来源
- 仓库: https://github.com/keeeeenw/MicroLlama
评估
使用标准的lm-evaluation-harness设置进行实验。遵循与TinyLlama相同的设置,除了winogrande和boolq使用acc作为指标外,所有数据集都使用acc_norm作为指标。
模型 | 预训练标记 | HellaSwag | Obqa | WinoGrande | ARC_c | ARC_e | boolq | piqa | 平均值 |
---|---|---|---|---|---|---|---|---|---|
keeeeenw/MicroLlama | 50B | 34.30 | 30.60 | 51.54 | 23.29 | 39.06 | 53.15 | 64.58 | 42.36 |
google-best/bert-large-uncased | N/A | 24.53 | 26.20 | 49.80 | 25.68 | 25.08 | 40.86 | 47.66 | 34.26 |
PY007/TinyLlama-1.1B-Chat-v0.1 | 503B | 53.81 | 32.20 | 55.01 | 28.67 | 49.62 | 58.04 | 69.64 | 49.57 |
TinyLlama-1.1B-intermediate-step-1431k-3T | 3T | 59.20 | 36.00 | 59.12 | 30.12 | 55.25 | 57.83 | 73.29 | 52.99 |
要复现这些结果,请安装lm-evaluation-harness并运行以下命令:
lm_eval \
--model hf \
--model_args pretrained=keeeeenw/MicroLlama,dtype="float",tokenizer=TinyLlama/TinyLlama-1.1B-step-50K-105b \
--tasks hellaswag,openbookqa,winogrande,arc_easy,arc_challenge,boolq,piqa \
--device cuda:0 \
--batch_size 64
观察结果
- 由于keeeeenw/MicroLlama比TinyLlama小得多,该模型的结果不如TinyLlama令人印象深刻,但结果比预期更接近。
- 该模型优于google-best/bert-large-uncased,而后者实际上参数略多。google-best/bert-large-uncased仅在ARC_c(arc_challenge)数据集上优于该模型。未来将提供更多分析。
基于以上评估,该模型应该是通常使用BERT系列模型执行的微调任务的良好起点。一些任务可能包括:
引用
本仓库基于TinyLlama构建,而TinyLlama基于lit-gpt和flash-attention。
@misc{zhang2024tinyllama,
title={TinyLlama: An Open-Source Small Language Model},
author={Peiyuan Zhang and Guangtao Zeng and Tianduo Wang and Wei Lu},
year={2024},
eprint={2401.02385},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@online{lit-gpt,
author = {Lightning AI},
title = {Lit-GPT},
url = {https://github.com/Lightning-AI/lit-gpt},
year = {2023},
}
@article{dao2023flashattention2,
title ={Flash{A}ttention-2: Faster Attention with Better Parallelism and Work Partitioning},
author ={Dao, Tri},
year ={2023}
}
Open LLM Leaderboard评估结果
详细结果可在这里找到。
指标 | 值 |
---|---|
平均值 | 5.08 |
IFEval (0-Shot) | 19.85 |
BBH (3-Shot) | 2.83 |
MATH Lvl 5 (4-Shot) | 0.00 |
GPQA (0-shot) | 1.45 |
MuSR (0-shot) | 4.79 |
MMLU-PRO (5-shot) | 1.53 |
🔧 技术细节
模型基于TinyLlama进行开发,对其代码进行了修改和优化,以支持在Slimpajama数据集上预训练一个300M的较小模型。同时,增加了在下载数据时处理和标记数据的能力,提高了效率。模型的主要配置参数如下:
block_size=2048,
vocab_size=32000,
padding_multiple=64,
n_layer=12,
n_head=16,
n_embd=1024,
rotary_percentage=1.0,
parallel_residual=False,
bias=False,
_norm_class="FusedRMSNorm",
norm_eps=1e-5, # Llama 2使用1e-5,Llama 1使用1e-6
_mlp_class="LLaMAMLP",
intermediate_size=5632,
n_query_groups=4,
📄 许可证
本项目采用Apache License 2.0许可证。
Phi 2 GGUF
其他
Phi-2是微软开发的一个小型但强大的语言模型,具有27亿参数,专注于高效推理和高质量文本生成。
大型语言模型 支持多种语言
P
TheBloke
41.5M
205
Roberta Large
MIT
基于掩码语言建模目标预训练的大型英语语言模型,采用改进的BERT训练方法
大型语言模型 英语
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基础模型的蒸馏版本,在保持相近性能的同时更轻量高效,适用于序列分类、标记分类等自然语言处理任务。
大型语言模型 英语
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一个多语言大语言模型,针对多语言对话用例进行了优化,在常见的行业基准测试中表现优异。
大型语言模型 英语
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基于100种语言的2.5TB过滤CommonCrawl数据预训练的多语言模型,采用掩码语言建模目标进行训练。
大型语言模型 支持多种语言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基于Transformer架构的英语预训练模型,通过掩码语言建模目标在海量文本上训练,支持文本特征提取和下游任务微调
大型语言模型 英语
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI发布的开放预训练Transformer语言模型套件,参数量从1.25亿到1750亿,旨在对标GPT-3系列性能,同时促进大规模语言模型的开放研究。
大型语言模型 英语
O
facebook
6.3M
198
1
基于transformers库的预训练模型,适用于多种NLP任务
大型语言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多语言大语言模型系列,包含8B、70B和405B参数规模,支持8种语言和代码生成,优化了多语言对话场景。
大型语言模型
Transformers 支持多种语言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基础版是由Google开发的文本到文本转换Transformer模型,参数规模2.2亿,支持多语言NLP任务。
大型语言模型 支持多种语言
T
google-t5
5.4M
702
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98