NDLSLM1.5_0.8B-Chat
介绍
NDLSLM1.50.8B-Chat:此模型是基于NDLSLM0.8B-base模型,在大约为236万条SFT中文数据进行全参数微调的Chat模型,其框架依赖于transformer-decoder only,此模型的具体结构为:
全参数微调数据集主要为Bell的train3.5MCN,过滤掉大于max_len=512的数据,总量约为236万条,相对于NDLSLM0.8B-Chat,新添加了多轮对话数据集,此模型具有一定的多轮对话能力。
此模型主要有以下特点:
- 训练语料:即使该版本模型训练的语料较少,但支持中文以及英文包括代码的训练。
- 自己训练分词模型:本次预训练并没有采用其他开原模型,而是从零开始训练的分词模型,词表规模不大,为60930,语料库基本上是采样的天工数据集以及维基百科中英文、github代码。
- 模型配有详细注释以及RMSNorm使用了flash-attention:本次代码模型参考了transformers库中的llama2开源代码以及通义千问开源代码,代码的细节基本上在文件中有标注,并且配置了flash-attention,目前解决了在RMSNorm归一化上使用了flash-attn,但在self-attention上并没有使用成功,希望在未来能够解决这个问题,以此能够提高训练效率。
- 支持Lora微调:本人目前训练了一版关于NER(命名实体识别的Lora微调教程,不久后会开源)
要求环境
- python 3.8及以上版本
- pytorch 2.0及以上版本
- 建议使用CUDA 11.4及以上(GPU用户、flash-attention用户等需考虑此选项)
pip安装
运行NDLSLM1.5_0.8B-Chat,请确保满足上述要求,再执行以下pip命令安装依赖库
pip install transformers==4.39.3 accelerate flash-attn
推荐安装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/NDLSLM1.5_0.8B-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Ndlcwx/NDLSLM1.5_0.8B-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)
'''
珠穆朗玛峰(Mount Everest),位于喜马拉雅山脉,海拔8,848米。它是世界上最高峰之一,也是世界上最著名的登山目标之一。
珠穆朗玛峰的攀登历史可以追溯到2000多年前,当时由一位名叫乔戈里·阿瑟德斯基(Jonathan Ive)和巴兹姆·哈雷亚斯(Tenzing Norgay-Lanhua)在1856年共同完成了登顶任务。然而,随着人类活动的不断扩张,许多登山者被迫离开其领土或寻找其他方法获得胜利。
自那以后,人们已经尝试了多种不同的方式去探索这个神秘的地方:从高山到冰川、山地以及高耸的山峰等等。但无论哪种方式来到达山顶,都会遇到很多困难和挑战。例如,由于海平面上升导致的水流变得非常缓慢,因此需要克服一些障碍才能成功攀爬这座山;同时还需要适应高度的环境变化,如高温和高湿度的气候等。这些挑战使得珠峰成为了一个令人难以置信的旅游胜地。
总之,珠穆朗玛峰是一个极具挑战性的旅游目的地,每年都有数百人前往体验它的壮丽景色。虽然攀登过程中可能会面临各种危险,但它仍然是我们难以忘怀的经历。
'''
prompt= '请介绍一下苹果公司'
response = model.chat(tokenizer,query=prompt,gen_config=gen_config)
print(response)
'''
苹果公司的Apple Inc.是一家全球知名的科技公司,成立于1976年。该公司由史蒂夫·乔布斯、斯蒂夫·沃兹尼亚克和罗恩·韦恩等人创立,总部位于美国加利福尼亚州库比蒂诺市(Cupertino)。公司最初是开发个人电脑,后来更名为“Macintosh”,现在成为一家全球性的电子零售商。
除了设计电脑外,苹果公司还生产各种电子产品,包括iPhone、iPad、iPod等。这些产品都使用先进的技术和设计来制造并销售给其他企业或机构。此外,苹果公司在科技领域的领先地位也受到了广泛关注。在研发过程中,苹果一直致力于创新和技术进步,致力于推动科技的不断发展。
'''
prompt= '李白是谁?'
response = model.chat(tokenizer,query=prompt,gen_config=gen_config)
print(response)
'''
李白的《将进酒》是一首豪迈激昂的诗歌,表达了诗人对人生的豁达和追求。这首诗描绘了作者在登高时经历过的种种困难和挑战,同时也表达了他对于人生意义的思考和对未来的期许。同时,也表达了对生命的热爱与珍视。因此,《将进酒》不仅是中国文学中的经典之作,也是中华民族文化的瑰宝之一。《将进酒》通过优美的语言、丰富的意境以及深刻的思想内涵,成为了中国古典诗词的代表作之一。
'''
prompt= '请用Python写一段关于排序的代码'
response = model.chat(tokenizer,query=prompt,gen_config=gen_config)
print(response)
'''
以下是一个简单的 Python 代码示例,用于对一个列表进行排序:
python mylist = [5, 2, 9, 1] # 使用 sort()方法按升序排列列表中的元素 print(mylist) # 将结果输出到控制台
对列表进行排序并打印结果
sortedlist = sorted(mylist)) # 在循环中执行每个迭代操作后返回的结果 print("排序后的列表为:", sortedlist) # 如果当前元素大于基准值则将其添加到新的列表中 这段代码首先定义了一个包含所有数字和数值的元素。然后使用 for 循环遍历这个新列表,如果它小于或等于标准输入格式(例如 3 + 4)时就将该元素加入到新的列表中。最后将整个数组连接起来即可得到一个新的有序列表。 ''' prompt= 'what is your name?' response = model.chat(tokenizer,query=prompt,genconfig=gen_config) print(response)
'''
I am an AI language model and I don't have any information on the field to translate it in order to ensure that we can assist you with or without expressing us for their specific context, but not using those sentences such as 'punctuation'.'
'''
```
注意:由于本模型预训练语料较其他开源的大参数模型少很多,chat模型的回答不一定准确,主要是验证了该模型在SFT下的可行性。
NDLSLM1.5_0.8B-Chat模型参数 (Model)
NDLSLM1.5_0.8B-Chat模型参数基本情况如下所示:
Hyperparameter | Value |
---|---|
numhiddenlayers | 12 |
numattentionheads | 16 |
hidden_dim | 1600 |
vocab size | 60930 |
maxseqlen | 512 |
intermediate_size | 7800 |
use_cache | True |
rope_theta | 10000.0 |
本模型在位置编码、FFN激活函数和normalization的实现方式上采用了RoPE相对位置编码、SiLU激活函数、RMSNorm(可选安装flash-attention加速); 在自注意力机制计算中支持使用GQA(Group query attention),MQA(Multi-query-attention);支持使用NTK缩放。
评论