微信扫码
与创始人交个朋友
我要投稿
Skywork-13B-Base模型在3.2万亿个高质量多语言(主要是中文和英文)和代码数据上预训练,它在多种评测和各种基准测试上都展现了同等规模模型的最佳效果,包括Base、Chat、Math、MM模型及其量化版,支持用户在消费级显卡进行部署和推理。
▲ Model Scope
• Skywork-13B 下载地址(Model Scope):https://modelscope.cn/organization/skywork• Skywork-13B 下载地址(Github):https://github.com/SkyworkAI/Skywork• 技术报告:https://arxiv.org/pdf/2310.19341.pdf
▲ GPT-3结构和Llama结构训练对比(摘自知乎盐海)
下面对相关名词作通俗化的解释:
相对位置编码(Rotary Position Embedding):这是一种用于编码输入序列中位置信息的方法。想象一下,你在看一本书,每页的页码告诉你这个字在哪里。RoPE就像在模型里给每个字加了页码,让它知道每个字在什么位置。
均方根归一化(Root Mean Square Normalization):这是一种归一化技术,用于调整神经网络层的输出。想象你在做一道菜,所有的配料都需要精确的分量。RMSNorm就像一个称重工具,确保每个步骤的配料量都准确无误,这样菜品才会美味。
SwiGLU(一种激活函数):结合了Swish和Gated Linear Units (GLU) 的特点。想象你有一个聪明的开关,它能决定什么时候打开、什么时候关闭,以确保电流流动最有效。SwiGLU就是这样一个聪明的开关,帮助模型更好地处理信息。
Skywork-13B模型比Llama-2-13B模型更“瘦长”:为了达到Llama2-13B的训练效率,Skywork-13B的训练批次大小增加到Llama2-13B的四倍。由于计算机集群带宽较低,所以需要更多的梯度累积来减少通讯开销。
根据之前的实验,当批次更大时,增加网络层数(即增加模型的复杂度)可以提高模型的表现。因此,模型的层数被增加到52层,同时减小每层的规模,使得模型的总体参数量和Llama2-13B差不多。
为了适应更大的数据批量,学习率被提高到Llama2-13B的两倍,这样可以确保训练时梯度的方差保持一致。
Skywork-13B总共52层,虽然每层的一些参数(FFN Dim和Hidden Dim)比Llama-2-13B模型小,但总的参数量是一样的。
模型结构 | Llama-2-13B | Skywork-13B |
词表大小 | 32,000 | 65,536 |
Hidden Dim | 5,120 | 4,608 |
FFN Dim | 13,696 | 12,288 |
Head Dim | 128 | 128 |
Attention头数 | 40 | 36 |
层数 | 40 | 52 |
训练序列长度 | 4,096 | 4,096 |
位置编码 | RoPE | RoPE |
训练效果:这种“瘦长”的设计在训练时效果更好。
在大模型中,tokenizer 扮演着重要的角色。以下是关于 Skywork-13B 与 LLama 模型中的 tokenizer 的一些关键概念:
概念:Tokenize 就是将一段大文本分成更小的、容易处理的单元,通常是单词或短语。类似于读一本书时将其分成一章一章来读,使得处理和理解内容更加容易。
Skywork-13B 中的 Tokenizer:Skywork-13B 的 tokenizer 带有浓厚的 LLama 风格,包含了 LLama 的 32000 个 token。
背景:由于 LLama 模型原生不支持中文,因此需要额外的词汇扩展来增强其中文处理能力。
实现:Skywork-13B 通过以下步骤增强了中文支持:
• 从 BERT-Chinese 模型中引入 8000 个 token。
• 另外添加了 25000 个中文高频词组。
• 最终增加了 17 个保留字。
定义:保留字是指模型中特别需要保留的词汇,如“重要人物的名字”或“地点名称”。这些词在生成和理解过程中需要特殊对待。
比较:Skywork-13B 只有 17 个保留字,这显得相对较少。相比之下,Baichuan2 模型有几千个保留字,可能是为了多模态处理做准备。
概念:词表大小指的是模型词典中包含的词条数量。词表越大,模型可以理解和处理的词汇越多。
Skywork-13B 的词表大小:Skywork-13B 的词表总大小为 65536 个词条,这意味着它有一个非常大的词典,可以处理多种不同的词语和短语。
tokenizer 的重要性:tokenizer 在 Skywork-13B 和 LLama 大模型中起到分词和词汇表管理的重要角色,通过合理的分词和丰富的词汇表,可以大幅提高模型对不同语言和文本的理解和处理能力。这对于多语言支持和多模态应用尤为关键。
Skywork-13B用了两阶段的方法。这个方法让模型先学习广泛的知识,然后再专注于特定领域的内容,比如科学和数学,这样可以让模型在解决复杂问题时表现更好。
在第一阶段,我们让模型学习大量的通用内容,这些内容就像是百科全书里的各种知识。通过这个阶段,模型可以获得广泛的基础知识。我们会监督模型的学习过程,观察它的进步和变化。这时候的模型被称为Skywork-13B-3.1T-Base。
在第二阶段,我们在模型已经学到的基础知识上,加入了更多关于科学、技术、工程和数学(STEM)的内容。这个阶段的训练让模型在这些领域的能力更强,比如更好地解决数学问题或科学难题。这个阶段用了更多的数据来进一步提高模型的表现,最后我们得到了名为Skywork-13B-Base的最终模型。
大模型预训练需要从大量的文本数据中学习并存储知识。预训练数据主要有两类:网页数据(web data)和专有数据(curated high-quality corpora)。网页数据获取方便,比如CommonCrawl,是一个包含海量网页数据的公开数据集。而专有数据则是特定领域或行业的数据,比如高质量书籍和对话数据。
像OpenAI的GPT-3、4模型和谷歌的PaLM系列模型都大量使用了专有数据。这些高质量的数据往往不对公众开放,因此很多人认为,像GPT、PaLM等模型的成功,很大程度上归功于这些高质量、难以获取的专有数据。
但是,阿联酋阿布扎比技术创新研究所(TII)的团队提出了不同的观点。他们研究发现,仅通过更好的清洗和过滤策略,使用网页数据也能训练出强大的模型。
这篇论文展示了通过严格的URL过滤、文本提取和去重流程,使用CommonCrawl这样的网页数据训练出的Falcon-40B模型,其表现超过了很多依赖专有数据的模型。通过这种方式,不仅降低了数据获取和处理的成本,还展示了网页数据在大模型训练中的巨大潜力、
中文社区一直在苦苦寻觅高质量的数据集,而相比之下,英文社区已经发布了很多高质量的数据集,比如 C4、RefinedWeb、ThePile 和 The Stack 等等。
中文社区之前最大的开源数据集是 Wudao-data,但它的规模和英文数据集相比显得不足,仅包含大约 530 亿个 token,而 C4 的 token 数超过 1000 亿,RefinedWeb、ThePile 和 The Stack 更是达到了 5000 亿 token 量级。
不仅在数量上有所差距,Wudao-data 的数据质量也存在问题,尽管经过严格清洗过滤,仍然会发现一些格式错乱、重复和低质量的数据。为了填补这个空缺,天工开源了 Skypile-150B 数据集。
这是一个经过精细清洗、去重和过滤的高质量网页数据集,使用了FastText 和 BERT 等模型去除了不良内容和低质量数据。此外,天工Skywork-13B模型还充分利用了CommonCrawl数据集,这是一个海量的、非结构化的、多语言的网页数据集,通过挖掘其中的数百亿网页,提高了跨语言处理的能力。
这次开源的数据集总 token 数约为 1500 亿,硬盘占用 592GB,是目前最大的中文开源数据集。
你可以在以下地址下载 Skypile-150B 数据集:
[Skypile-150B 下载地址]:(https://modelscope.cn/organization/skywork)[Skypile-150B GitHub]:(https://github.com/SkyworkAI/Skywork)
数据来源 | 百分比 |
英文网页数据 | 39.8% |
英文书籍数据 | 3.6% |
英文学术论文 | 3.0% |
英文百科全书 | 0.5% |
其他英文数据 | 2.9% |
中文网页数据 | 30.4% |
中文社交媒体 | 5.5% |
中文百科全书 | 0.8% |
其他中文数据 | 3.1% |
其他语言数据 | 2.4% |
代码数据 | 8.0% |
• 分词方法:使用了一种叫做Byte-Pair Encoding (BPE)的方法把数据切成小块。
• 词表大小:词表总大小是65536,包括拉丁字符、汉字、Unicode符号和一些汉语词语。
类别 | 大小 |
拉丁基础词和子词 | 32,000 |
汉字和Unicode符号 | 8,000 |
汉语词语 | 25,519 |
保留符号 | 17 |
总计 | 65,536 |
• 高质量数据:用了大量高质量的英文、中文和代码数据来训练模型。
• 瘦长设计:这个模型结构更加“瘦长”,层数更多,但每层的某些参数比Llama-2-13B模型小。
• 分词器:分词器能处理多种字符和词语,确保模型能理解不同语言的内容。
训练语言模型的目的是让它更准确地预测下一个词。评估模型的一个重要方式是计算它在生成文章时的概率。通常用“交叉熵损失函数”来衡量模型的预测准确性。具体来说,就是计算每个词的预测概率,然后取这些概率的对数平均值。为了更直观地比较不同模型的表现,我们将这个损失值转化为“困惑度”(perplexity)。困惑度越低,说明模型越好。
看看天工AI团队是怎么说的(向上滑动)
Skywork-13B的训练选取了2023年9月发布的数百到上千篇高质量文章,这些文章不在任何模型的训练集中,并且来源广泛、质量高。测试结果显示,不同开源模型中,Skywork-13B-Base模型表现最好。
▲ 图展示了不同开源模型的性能。Skywork-13B-Base 取得了最佳效果。
在几个热门的基准测试上评估了Skywork-13B-Base模型,包括C-Eval、MMLU、CMMLU和GSM8K。按照5-shot和8-shot的测试方法,Skywork-13B-Base模型在中文开源模型中名列前茅,表现非常出色。具体来看,它在STEM、人文学科、社会科学和其他领域都有出色表现,尤其是在中文特定领域的测试中也显示了优越的能力。
通过这些调整和评估,Skywork-13B-Base模型不仅在训练效率上达到了预期,还在多个测试中表现出色,证明了其作为开源中文模型的强大能力。
在训练大语言模型时,微调(Fine-Tuning)是让模型更好地适应特定任务或数据的一种方法。这里有几种不同的微调方法,我们来逐个看看它们的区别和用法。
是什么:这是最常见的一种微调方法,它会调整模型中的所有参数。
怎么做:
• 你需要用新的数据来继续训练整个模型,就像是让模型重新学习一遍新的内容。
• 这个过程通常需要大量的计算资源,因为你要对整个模型进行重新调整。
步骤:
• 预处理数据:使用脚本将训练数据准备好。
python train/pt_data_preprocess.py -t $MODEL_PATH -i data/pt_train.jsonl -o data_cache/pt_train_demo
• 启动训练:设置环境变量并运行训练脚本。
export WANDB_API_KEY=YOUR_WANDB_KEY
export WANDB_ENTITY=skywork
export WANDB_PROJECT=skywork-13b-opensource
export MODEL_PATH=skywork-13b-models/skywork-13b-base
export DATA_CACHE_DIR=data_cache/pt_train_demo/pt_train
bash bash_scripts/skywork_13b_pt.sh
适用场景:当你有大量的新数据,并且需要模型在这些数据上有很好的表现时,使用全量微调。
是什么:这种方法专注于让模型在特定任务上表现更好,比如回答问题或文本分类。
怎么做:
• 用标注好的数据来训练模型,这些数据告诉模型在特定情况下应该输出什么。
• 例如,你可以用一大堆问题和答案来训练模型,让它学会回答问题。
步骤:
• 预处理数据并启动训练:设置环境变量并运行训练脚本。
export WANDB_API_KEY=YOUR_WANDB_KEY
export WANDB_ENTITY=skywork
export WANDB_PROJECT=skywork-13b-opensource
export SFT_DATA_DIR=data/sft_data
export DATA_CACHE_DIR=data_cache/sft_train_demo
bash bash_scripts/skywork_13b_sft.sh
适用场景:当你需要模型在某个特定任务上有很好的表现,比如客服机器人需要回答客户的问题。
是什么:LoRA是一种轻量级的微调方法,通过增加少量的适配层,来调整模型的部分参数。
怎么做:
• 只调整模型的一部分参数,而不是全部参数。这种方法更省计算资源。
• 可以理解为在现有模型上增加一些“小插件”,让模型变得更灵活。
步骤:
• 预处理数据:和全量微调类似,但适用于LoRA方法。
python train/pt_data_preprocess.py -t $MODEL_PATH -i data/pt_train.jsonl -o data_cache/pt_train_demo
• 启动预训练微调:设置环境变量并运行训练脚本。
export WANDB_API_KEY=YOUR_WANDB_KEY
export WANDB_ENTITY=skywork
export WANDB_PROJECT=skywork-13b-opensource
export MODEL_PATH=skywork-13b-models/skywork-13b-base
export DATA_CACHE_DIR=data_cache/pt_train_demo/pt_train
bash bash_scripts/skywork_13b_pt_lora.sh
适用场景:当计算资源有限,但仍希望模型能适应新数据或任务时,使用LoRA微调。
是什么:这种方法结合了LoRA和有监督微调的优点,既高效又能在特定任务上表现出色。
怎么做:
• 在现有模型上增加LoRA层,并用标注好的数据进行微调。
• 这让模型不仅能高效学习,还能在特定任务上表现得更好。
步骤:
• 启动有监督微调:设置环境变量并运行训练脚本。
export WANDB_API_KEY=YOUR_WANDB_KEY
export WANDB_ENTITY=skywork
export WANDB_PROJECT=skywork-13b-opensource
export SFT_DATA_DIR=data/sft_data
export DATA_CACHE_DIR=data_cache/sft_train_demo
bash bash_scripts/skywork_13b_sft_lora.sh
适用场景:当希望在特定任务上高效微调模型,同时节省计算资源时,使用这方法。
• 全量微调:适合有大量数据和计算资源的情况。
• 有监督微调:适合特定任务的优化。
• LoRA微调:适合计算资源有限,但仍希望模型能适应新数据的情况。
• LoRA有监督微调:结合了LoRA和有监督微调的优点,既高效又能在特定任务上表现出色。
这些方法各有优缺点,可以根据具体需求选择合适的微调方法。
• Python 3.8及以上版本
• Pytorch 2.0及以上版本
• CUDA建议使用11.4以上版本。
Skywork-13B-Base模型,Skywork-13B-Chat模型和Skywork-13B-Math模型运行下面的脚本进行Python依赖安装。
pip install -r requirements.txt
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
import torch
tokenizer = AutoTokenizer.from_pretrained("SkyworkAI/Skywork-13B-Base", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("SkyworkAI/Skywork-13B-Base", device_map="auto", trust_remote_code=True).eval()
inputs = tokenizer('陕西的省会是西安', return_tensors='pt').to(model.device)
response = model.generate(inputs.input_ids, max_length=128)
print(tokenizer.decode(response.cpu()[0], skip_special_tokens=True))
"""
陕西的省会是西安,西安是我国著名的古都,在历史上有十三个朝代在此建都,所以西安又被称为“十三朝古都”。西安是我国著名的旅游城市,每年都有大量的游客来到西安旅游,西安的旅游资源非常丰富,有很多著名的旅游景点,比如秦始皇兵马俑、大雁塔、华清池、大唐芙蓉园、西安城墙、大明宫国家遗址公园、西安碑林博物馆、西安钟楼、西安鼓楼、西安半坡博物馆、西安大兴善寺、西安小雁塔
"""
inputs = tokenizer('陕西的省会是西安,甘肃的省会是兰州,河南的省会是郑州', return_tensors='pt').to(model.device)
response = model.generate(inputs.input_ids, max_length=128)
print(tokenizer.decode(response.cpu()[0], skip_special_tokens=True))
"""
陕西的省会是西安,甘肃的省会是兰州,河南的省会是郑州,湖北的省会是武汉,湖南的省会是长沙,江西的省会是南昌,安徽的省会是合肥,江苏的省会是南京,浙江的省会是杭州,福建的省会是福州,广东的省会是广州,广西的省会是南宁,海南的省会是海口,四川的省会是成都,贵州的省会是贵阳,云南的省会是昆明,西藏的省会是拉萨,青海的省会是西宁,宁夏的省会是银川,新疆的省会是乌鲁木齐。
"""中国AI搜索鼻祖:启发式回答与多维搜索,破解知识碎片化,超越Perplexity的绝赞研究者模式!
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-04-11
2024-08-21
2024-07-09
2024-08-13
2024-07-18
2024-10-25
2024-07-01
2024-06-17