中文微型Llama2基础模型

English 简体中文

这是一个参数量115M左右的超微型小模型,采用Llama2架构,这里上传的版本是预训练版本,尚未进行SFT。近期将会推出SFT后的聊天版本。

这个超微型模型开发的目标是:

  1. 演练从0开始预训练一个基础大语言模型的全过程
  2. 为开发大参数模型提供了一个可快速部署的环境,毕竟加载大模型非常耗时,不利于快速的迭代开发和调试
  3. 可以在消费级显卡上快速的调优参数,重现各种论文中的优化算法。

训练数据:

收集了429本中文网络玄幻小说,整理为txt纯文本,除掉字符数少于10的行和超过4096字符的行,作为预训练的基础数据。

整理后的txt文件尺寸是3.3G,包含868M中文字符,18M行

中文分词器:

模型的分词器(tokenizer)也是重新训练的,没有使用现有的分词器。

训练参数:

  1. 最长行(Max Sentence Length): 2657
  2. 词汇量(Vocab Size): 32000
  3. 正则化规则(Normalization Rule): identity
  4. 覆盖率(Character coverage): 0.9995

和标准的Llama2分词器比较如下:

Llama2 Baby Llama2
tokens 32000 65534
model_max_length 4096 4096
白日依山尽,黄河入海流。欲穷千里目,更上一层楼。 :['▁', '白', '日', '<0xE4>', '<0xBE>', '<0x9D>', '山', '<0xE5>', '<0xB0>', '<0xBD>', ',', '黄', '河', '入', '海', '流', '。', '<0xE6>', '<0xAC>', '<0xB2>', '<0xE7>', '<0xA9>', '<0xB7>', '千', '里', '目', ',', '更', '上', '一', '<0xE5>', '<0xB1>', '<0x82>', '<0xE6>', '<0xA5>', '<0xBC>', '。'] ['▁白', '日', '依山', '尽', ',', '黄河', '入海', '流', '。', '欲', '穷', '千里', '目', ',', '更', '上一层', '楼', '。']
[1, 29871, 30868, 30325, 231, 193, 160, 30329, 232, 179, 192, 30214, 31491, 30828, 30752, 30581, 31151, 30267, 233, 175, 181, 234, 172, 186, 31159, 30755, 30895, 30214, 31100, 30429, 30287, 232, 180, 133, 233, 168, 191, 30267] [65534, 1764, 63106, 62484, 63203, 62793, 14729, 29082, 63130, 62795, 63920, 64266, 3271, 63038, 62793, 63007, 17116, 63636, 62795]
The primary use of LLaMA is research on large language models, including BERT, XLNet, and RoBERTa. :['▁The', '▁primary', '▁use', '▁of', '▁L', 'La', 'MA', '▁is', '▁research', '▁on', '▁large', '▁language', '▁models', ',', '▁including', '▁B', 'ERT', ',', '▁X', 'L', 'Net', ',', '▁and', '▁Ro', 'BER', 'T', 'a', '.'] :['▁T', 'h', 'e', '▁p', 'ri', 'm', 'ar', 'y', '▁', 'u', 'se', '▁o', 'f', '▁', '<0x4C>', '<0x4C>', 'a', 'M', 'A', '▁i', 's', '▁', 're', 'se', 'ar', 'ch', '▁o', 'n', '▁', 'l', 'ar', 'g', 'e', '▁', 'l', 'ang', 'ua', 'g', 'e', '▁m', 'od', 'e', 'ls', ',', '▁', 'in', 'c', 'lu', 'd', 'i', 'ng', '▁', '<0x42>', '<0x45>', '<0x52>', 'T', ',', '▁', 'X', '<0x4C>', '<0x4E>', 'e', 't', ',', '▁', 'an', 'd', '▁', '<0x52>', 'o', '<0x42>', '<0x45>', '<0x52>', 'T', 'a', '.']
[1, 450, 7601, 671, 310, 365, 5661, 1529, 338, 5925, 373, 2919, 4086, 4733, 29892, 3704, 350, 20161, 29892, 1060, 29931, 6779, 29892, 322, 1528, 13635, 29911, 29874, 29889] [65534, 14962, 63590, 64211, 27052, 16426, 63475, 13594, 64158, 62797, 63569, 11279, 13719, 65368, 62797, 81, 81, 63518, 64918, 64752, 24145, 63338, 62797, 44186, 11279, 13594, 9251, 13719, 63541, 62797, 64399, 13594, 64101, 64211, 62797, 64399, 37035, 36500, 64101, 64211, 2939, 11320, 64211, 53670, 62793, 62797, 18944, 63603, 14575, 64096, 63484, 1171, 62797, 71, 74, 87, 64760, 62793, 62797, 65257, 81, 83, 64211, 63073, 62793, 62797, 6604, 64096, 62797, 87, 63143, 71, 74, 87, 64760, 63518, 62801]

Llama2分词器是32000个token,针对英文字符进行了优化;而Baby LLama2是65534个token,只包括了中文。

可以看到针对中文文本和英文文本的向量化比较上,Baby Llama2中文向量化优于标准Llama2,而英文向量化弱于Llama2。

全量训练语料处理

全量训练前,先对语料进行向量化处理。用刚刚训练的分词器(tokenzier)逐行读取网络小说的txt文件,每一行都做向量化,并在行尾增加eos_token_id做区分。然后将所有处理好的二进制数据以二维np.uint16数组的形式存储到磁盘上,数据维度为[-1: max_sentence_length]

预训练

在单卡3090机器上进行预训练,模型model采用了llama2的架构,训练参数如下:

  1. max_seq_len = 1024
  2. dim = 768
  3. n_headers = 12
  4. n_layers = 12
  5. n_kv_headers = 12

演示

Huggingface Space For Baby Llama2

[TODO]

  1. 模型源代码将于整理后开放到github上
  2. 增加SFT微调,使其能够进行对话

鸣谢

llama2.c

baby-llama2-chinese

Downloads last month
65
Inference Examples
This model does not have enough activity to be deployed to Inference API (serverless) yet. Increase its social visibility and check back later, or deploy to Inference Endpoints (dedicated) instead.

Space using flyingfishinwater/chinese-baby-llama2 1