NDLMoe_1.3B-Chat
介绍
NDLMoe1.3B-Chat:此模型基于NDLMoe1.3B-base,是在在大约为174万条SFT中文数据进行全参数微调的Chat模型,其框架依赖于transformer-decoder only,此模型的具体结构为:
全参数微调数据集主要为alpacagpt4datazh、Bell的train3.5MCN,过滤掉大于maxlen=512的数据,总量约为174万条。
此模型主要有以下特点:
- 训练语料:即使该版本模型训练的语料较少,但支持中文以及英文包括代码的训练。
- 自己训练分词模型:本次预训练并没有采用其他开原模型,而是从零开始训练的分词模型,词表规模不大,为60930,语料库基本上是采样的天工数据集以及维基百科中英文、github代码。
- 模型配有详细注释以及RMSNorm使用了flash-attention:本次代码模型中的MOE部分参考了transformers库中的Deepseek-MOE的开源代码;RMSNorm部分参考了通义千问开源的代码,代码的细节基本上在文件中有标注,并且配置了flash-attention,目前解决了在RMSNorm归一化上使用了flash-attn,但在self-attention上并没有使用成功,希望在未来能够解决这个问题,以此能够提高训练效率。
- 支持增量预训练:目前本人已经在该模型的基础上进行了增量预训练,未来不就将会开源增量预训练的版本以及细节。
- 设置共享专家:该模型在每个MOE层设置了15个待激活的专家,除此之外还设置两个共享专家,每次输入的tokens都会经过共享专家进行学习,设置共享专家的目的在于能够学习不同tokens中的共有知识,减少专家之间的知识冗余。
- 细粒度专家 :根据Deeepseek-Moe官方的论文描述,设置更细粒度的专家个数有利于学习不同token之间的语义信息,更能体现专家性,因此本模型在MOE层设置了15个细粒度的专家(FFN块)。
- 专家损失平衡 :为了防止大部分token只会被少数的几个专家学习,除了常规的自回归任务的交叉熵损失函数以外,还加入了专家损失均衡函数:
- 支持Lora微调:目前正在训练中--------- $$ \begin{cases} L_{\text {ExpBal }} =\alpha _{1} \sum{i=1}^{N^{\prime}} f{i} P{i} \ f{i} =\frac{N^{\prime}}{K T} \sum{t=1}^{T} 1(\text { Token } t \text { selects Expert } i) \ P{i} =\frac{1}{T} \sum{t=1}^{T} s{i, t} \end{cases} $$
要求
- python 3.8及以上版本
- pytorch 2.0及以上版本
- 建议使用CUDA 11.4及以上(GPU用户、flash-attention用户等需考虑此选项)
依赖项
运行NDLMoe_1.3B-Chat,请确保满足上述要求,再执行以下pip命令安装依赖库
pip install transformers==4.39.3 accelerate
推荐安装flash-attn的步骤:(如果没有安装此模型也可以运行,安装了推理会更快一些。)
git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 下方安装可选,安装可能比较缓慢。
# pip install csrc/layer_norm
# pip install csrc/rotary
快速使用
您可以通过以下代码轻松调用:
from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("Ndlcwx/NDLMoe_1.3B-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Ndlcwx/NDLMoe_1.3B-Chat", device_map="auto", trust_remote_code=True).eval()
from transformers import GenerationConfig
gen_config = GenerationConfig(
temperature=0.9,
top_k=30,
top_p=0.5,
do_sample=True,
num_beams=1,
repetition_penalty=1.3,
max_new_tokens=400,
eos_token_id=tokenizer.eos_token_id,
pad_token_id=tokenizer.pad_token_id,
)
prompt= '介绍一下苹果公司'
response = model.chat(tokenizer,query=prompt,gen_config=gen_config)
print(response)
'''
Apple Inc. (苹果) 是一家总部位于美国加利福尼亚州旧金山的科技公司。该公司成立于1976年,由史蒂夫·乔布斯、史蒂夫·沃兹尼亚克和罗恩•韦斯莱共同创立。公司致力于提供高质量的硬件和软件服务,包括智能手机、平板电脑以及电脑等产品的设计开发和服务。
iPhone是iPad系列的第二款产品,也是第一个在iOS操作系统上运行的手机软件。其外观设计简洁大方,色彩鲜艳且易于使用。同时,iPhone还支持Wi-Fi连接功能,让用户可以轻松地在移动设备上进行通讯与通话操作。此外, iPhone还拥有多种应用程序可供选择,如Android Watch或Google Home等。
除了用户界面之外,iPhone还具有其他优点:首先它拥有强大的处理器和更先进的摄像头系统;其次,iPhone具有高性能和数据传输能力;最后,它的价格也非常亲民。总之,iPhone是一个极具竞争力的科技品牌,为许多用户提供高品质的产品提供了保障。
'''
prompt= '介绍一下李白'
response = model.chat(tokenizer,query=prompt,gen_config=gen_config)
print(response)
'''
李白的诗歌风格非常优美,有强烈的情感表达和豪迈的豪情。他是一位伟大的诗人、哲学家和社会活动家,被誉为“诗仙”。他的代表作包括《将进酒》、《庐山谣》等经典作品。《将返溪山》:“不欲窠臼地听风吟唱。” 这首诗句是杜甫的一首名篇之一,也是唐朝文学史上的重要篇章之一。“千里之堤毁于蚁穴”,表达了他对自然界的敬畏之情和对人性的深刻洞察力。此外,《将赴江陵赋答辞》也表现了作者对人生哲理的关注与思考。
总之,“乘风归路”是一句富有诗意的诗作,它展现了作者的才华和精神状态。通过抒发了他的作品中的感人瞬间以及人物内心世界的变化,反映了人们对人生的感悟和价值观念的深入思考和探讨。同时,它也体现了唐代社会文化的发展现状和发展趋势,具有极高的艺术价值和文化意义。
'''
prompt= '保持健康的三个建议'
response = model.chat(tokenizer,query=prompt,gen_config=gen_config)
print(response)
'''
1、 健康饮食:每天摄入适量的蔬菜和水果,少吃高热量和高脂肪的食物。同时要适量食用新鲜蔬果以及全谷类食品(如豆类)等富含营养的食品。
2、 多运动:每周至少进行3次有氧运动或30分钟的有氧运动。例如慢跑、游泳、骑车等等。此外还可以参加瑜伽或者普拉提等活动来增强身体的柔韧性和平衡能力。
3、 睡眠充足:每晚7-9小时的充足的睡眠可以帮助身体恢复和健康状态。在睡觉前15至20分钟的休息时间可以有助于缓解压力和焦虑感。如果无法入睡,可以在晚上10点后起床。另外也可以尝试做些放松的活动来帮助减轻压力并提高心情。
'''
prompt= 'what is your name?'
response = model.chat(tokenizer,query=prompt,gen_config=gen_config)
print(response)
'''
Hello, I am an AI language model and it's also one of the most popular programming languages in China. It has been widely used for many years to create several different languages that can be translated into English or already under the title "China". However, as you have provided more information about various languages than any other language itself, this allows us to provide better code instead of others without being able to translate.
'''
NDLMoe_1.3B-Chat参数细节 (Model)
NDLMoe_1.3B-base模型规模基本情况如下所示:
Hyperparameter | Value |
---|---|
n_layers | 12 |
n_heads | 32 |
d_model | 1600 |
nsharedexperts | 2 |
nroutedexperts | 15 |
numexpertsper_tok | 4 |
intermediate_size | 14336 |
moeintermediatesize | 1024 |
vocab size | 60930 |
sequence length | 512 |
firstkdense_replace | 1 |
本模型在位置编码、FFN激活函数和normalization的实现方式上采用了RoPE相对位置编码、SiLU激活函数、RMSNorm(可选安装flash-attention加速);除此之外,该模型的第一个decoder层并没有采用MOE层,而是采用了以前流行的attention+FFN的配置,MOE层的设置是从第二个layer开始的。); 在自注意力机制计算中支持使用GQA(Group query attention),MQA(Multi-query-attention);支持使用NTK缩放。
评论