1.1k Star!天工Skywork-13B:性能全面超越LLaMA2、0门槛商用、消费级显卡进行部署和推理!

cover_image
原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!)

1.1k Star!天工Skywork-13B:性能全面超越LLaMA2、0门槛商用、消费级显卡进行部署和推理!

🌟Skywork-13B-Base模型在3.2万亿个高质量多语言(主要是中文和英文)和代码数据上预训练,它在多种评测和各种基准测试上都展现了同等规模模型的最佳效果,包括Base、Chat、Math、MM模型及其量化版,支持用户在消费级显卡进行部署和推理。

Hello,大家好啊,我是Aitrainee,今天聊聊 国产开源大模型 :Skywork-13B。 去年 7 月,Meta 发布了
LLaMA2,以其强大的 性能和免费商用 的优势,迅速赢得了开发者和企业的喜爱。各个版本的 LLaMA2
微调成果不断涌现,让大模型领域的竞争局势快速变化。 很多人认为,这波开源攻势会削弱那些闭源大模型厂商的“ 护城河
”,让中小企业和开发者有了更经济实惠的选择。 不仅如此,国产大模型的开源力量也在加速追赶。然后,大模型开源仍面临 三大挑战
首先,中文数据的稀缺和珍贵使得训练高质量模型变得困难;其次,模型训练的细节往往不公开, 限制了
开发者对模型的深度理解和优化;最后,模型开源在商用方面面临诸多限制,使得企业在实际应用中遇到许多障碍。 而前不久,昆仑万维推出了 重磅开源项
** 目 ** :天工 Skywork-13B 系列。为什么说重磅呢?因为 Skywork-13B 在多个基准测试(如 C-Eval,MMLU)中
全面超越 了 LLaMA2-13B。 这次开源不仅包括 Skywork-13B-Base 模型、Skywork-13B-Math 模型,还有它们的
量化版模型 。更厉害的是,昆仑万维还开放了一个600GB、150B Tokens的 高质量中文语料数据集 「Skypile/Chinese-
Web-Text-150B」,而且 全面开放商用,开发者无需申请,零门槛 就能用上。

▲ 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

模型结构

Llama模型有三个主要特点:首先,它使用RMSNorm代替传统的Layernorm,以保持训练的 稳定性
;其次,它使用SwiGLU激活函数而不是传统的ReLU;最后,它使用相对位置编码(RoPE等)而不是传统的绝对位置编码。实验结果表明,与GPT模型相比,
Llama模型不仅训练得更快,而且效果也更好。

▲ 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-13BSkywork-13B
词表大小32,00065,536
Hidden Dim5,1204,608
FFN Dim13,69612,288
Head Dim128128
Attention头数4036
层数4052
训练序列长度4,0964,096
位置编码RoPERoPE

训练效果:这种“ 瘦长 ”的设计在训练时效果更好。

Skywork-13B 与 LLama 中的 Tokenizer

在大模型中,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
个词条,这意味着它有一个非常大的词典,可以处理多种不同的词语和短语。

![](https://res.wx.qq.com/t/wx_fed/we-

emoji/res/v1.3.10/assets/newemoji/Party.png) 小结

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

![](https://res.wx.qq.com/t/wx_fed/we-

emoji/res/v1.3.10/assets/newemoji/Party.png) 总结一下

  • 高质量数据 :用了大量高质量的英文、中文和代码数据来训练模型。

  • 瘦长设计 :这个模型结构更加“瘦长”,层数更多,但每层的某些参数比Llama-2-13B模型小。

  • 分词器 :分词器能处理多种字符和词语,确保模型能理解不同语言的内容。

语言模型的评估方式

训练语言模型的目的是让它更准确地预测下一个词。评估模型的一个重要方式是计算它在生成文章时的概率。通常用“交叉熵损失函数”来衡量模型的预测准确性。具体来说,就是计算每个词的预测概率,然后取这些概率的对数平均值。为了更直观地比较不同模型的表现,我们将这个损失值转化为“困惑度”(perplexity)。困惑度越低,说明模型越好。

** 看看天工AI团队是怎么说的(向上滑动) **

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**** Skywork-13B的训练 ** **
选取了2023年9月发布的数百到上千篇高质量文章,这些文章不在任何模型的训练集中,并且来源广泛、质量高。测试结果显示,不同开源模型中,Skywork-13B-Base模型表现最好。

▲ 图展示了不同开源模型的性能。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模型不仅在训练效率上达到了预期,还在多个测试中表现出色,证明了其作为开源中文模型的强大能力。

为了让大家更好地理解和复现这些结果,评测数据和评测脚本都已经开源。你可以在GitHub上找到相关代码并运行命令来复现这些评估结果。
天工Skywork-13B在自然语言处理领域有广泛的应用,包括文本分类、情感分析、问答系统、代码生成和自动化编程等多个方面。此外,模型还支持多语言处理,使得跨语言交流变得更加便捷。

模型微调的通俗化解释(结合 Skywork-13B )

在训练大语言模型时,微调(Fine-Tuning)是让模型更好地适应特定任务或数据的一种方法。这里有几种不同的微调方法,我们来逐个看看它们的区别和用法。

1. 全量微调(Full 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

适用场景 :当你有大量的新数据,并且需要模型在这些数据上有很好的表现时,使用全量微调。

2. 有监督微调(Supervised Fine-Tuning, SFT)

是什么 :这种方法专注于让模型在特定任务上表现更好,比如回答问题或文本分类。

怎么做

  • • 用标注好的数据来训练模型,这些数据告诉模型在特定情况下应该输出什么。

  • • 例如,你可以用一大堆问题和答案来训练模型,让它学会回答问题。

步骤

  • 预处理数据并启动训练 :设置环境变量并运行训练脚本。

    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

适用场景 :当你需要模型在某个特定任务上有很好的表现,比如客服机器人需要回答客户的问题。

3. LoRA微调(Low-Rank Adaptation, LoRA)

是什么 :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微调。

4. 使用LoRA进行有监督微调(SFT with 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

适用场景 :当希望在特定任务上高效微调模型,同时节省计算资源时,使用这方法。

![](https://res.wx.qq.com/t/wx_fed/we-

emoji/res/v1.3.10/assets/newemoji/Party.png) 总结一下

  • 全量微调 :适合有大量数据和计算资源的情况。

  • 有监督微调 :适合特定任务的优化。

  • 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 

Hugging Face模型测试

Base 模型推理

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的绝赞研究者模式!

](http://mp.weixin.qq.com/s?__biz=MzkyMzY1NTM0Mw==&mid=2247487210&idx=1&sn=098382687b5553bb1da37c4ecb38e150&chksm=c1e0832af6970a3ca45db06cdfe92e2af74ab1fcae25c37da430631a7084667bbf65c893bdd9&scene=21#wechat_redirect)

参考链接:
[1]http://www.sniper97.cn/index.php/note/deep-learning/note-deep-
learning/4458/
[2] https://zhuanlan.zhihu.com/p/664985891

知音难求,自我修炼亦艰

抓住前沿技术的机遇,与我们一起成为创新的超级个体

(把握AIGC时代的个人力量)

**
**

** 点这里 👇 关注我,记得标星哦~ **

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见 ~

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

预览时标签不可点

微信扫一扫
关注该公众号

轻触阅读原文

AI进修生



收藏

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aitrainee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值