model = AutoModelForCausalLM.from_pretrained("skywork-13B-Base", torch_dtype=torch.bfloat16,load_in_8bit=True, trust_remote_code=True).eval()
离线量化(Offline Quantization)
model = AutoModelForCausalLM.from_pretrained("skywork-13B-Base-8bits", device_map="auto", torch_dtype=torch.bfloat16,trust_remote_code=True).eval()
量化效果(Evaluation)
我们对量化模型在基准评测数据集上做了测试,结果如下所示:
Precision
C-Eval
MMLU
CMMLU
bf16
60.6
61.8
62.1
8bits
58.5
61.8
61.0
显存占用(GPU Mem in GB)
Precision
Skywork-13B
bf16
25.91
8bits
13.57
模型微调
全量微调
使用Skywork-13B-Base模型进行预训练微调
## preprocess continue pretraining data
## Because pre-training data is usually large, we use a script to process the training data separately.
python train/pt_data_preprocess.py \
-t $MODEL_PATH \
-i data/pt_train.jsonl \
-o data_cache/pt_train_demo
## launch training
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
## preprocess data and launch training
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微调
使用Skywork-13B-Base模型以及LoRA进行预训练微调
## preprocess continue pretraining data
## Because pre-training data is usually large, we use a script to process the training data separately.
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
We hereby declare that the Skywork model should not be used for any activities that pose a threat to national or societal security or engage in unlawful actions. Additionally, we request users not to deploy the Skywork model for internet services without appropriate security reviews and records. We hope that all users will adhere to this principle to ensure that technological advancements occur in a regulated and lawful environment.
We have done our utmost to ensure the compliance of the data used during the model’s training process. However, despite our extensive efforts, due to the complexity of the model and data, there may still be unpredictable risks and issues. Therefore, if any problems arise as a result of using the Skywork open-source model, including but not limited to data security issues, public opinion risks, or any risks and problems arising from the model being misled, abused, disseminated, or improperly utilized, we will not assume any responsibility.
The community usage of Skywork model requires Skywork Community License. The Skywork model supports commercial use. If you plan to use the Skywork model or its derivatives for commercial purposes, you must abide by terms and conditions within Skywork Community License.
引用和联系我们
如果您觉得我们的工作对您有帮助,欢迎引用我们的论文~
@misc{wei2023skywork,
title={Skywork: A More Open Bilingual Foundation Model},
author={Tianwen Wei and Liang Zhao and Lichang Zhang and Bo Zhu and Lijie Wang and Haihua Yang and Biye Li and Cheng Cheng and Weiwei Lü and Rui Hu and Chenxia Li and Liu Yang and Xilin Luo and Xuejie Wu and Lunan Liu and Wenjun Cheng and Peng Cheng and Jianhao Zhang and Xiaoyu Zhang and Lei Lin and Xiaokun Wang and Yutuan Ma and Chuanhai Dong and Yanqi Sun and Yifu Chen and Yongyi Peng and Xiaojuan Liang and Shuicheng Yan and Han Fang and Yahui Zhou},
year={2023},
eprint={2310.19341},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@article{Skywork_Multi-Modal_Group_Empirical_Study_Towards_2023,
author = {Skywork Multi-Modal Group},
month = sep,
title = {{Empirical Study Towards Building An Effective Multi-Modal Large Language Model}},
year = {2023}
}
🤗 Hugging Face • 🤖 ModelScope • 👾 Wisemodel • 🧰 OpenXLab • 💬 WeChat• 📜Tech Report
🎉天工在线对话平台已正式向公众开放
中文 | English
💪项目介绍
我们很高兴宣布开源了Skywork大模型,Skywork是由昆仑万维集团·天工团队开发的一系列大型模型,本次开源的模型有Skywork-13B-Base模型、Skywork-13B-Chat模型、Skywork-13B-Math模型和Skywork-13B-MM模型,以及每个模型的量化版模型,以支持用户在消费级显卡进行部署和推理。
我们开源的Skywork系列模型可以用于商业用途,但需要遵循我们的协议,不进行有害活动。Skywork开源项目的特点有:
Skywork-13B-Base模型在高质量清洗过滤的3.2万亿个多语言(主要是中文和英文)和代码数据上进行预训练,它在多种评测和各种基准测试上都展现了同等规模模型的最佳效果。
Skywork-13B-Chat模型具备强大的对话能力,我们在文创领域进行了进一步的针对性增强。我们通过构建一万多条高质量指令数据集,在10个文创任务上进行了针对性微调,使我们的模型在文创任务中能够接近ChatGPT的效果。此外,我们开源了针对这10个文创任务上的大约500条样本组成的benchmark。
Skywork-13B-Math模型经过专门的数学能力强化训练。在13B参数规模下,我们的模型在GSM8K评测上得分第一,同时在MATH数据集以及CMATH上也表现优异,处于13B模型顶尖水平。
Skywork-13B-MM多模态模型支持用户输入图片信息进行问答,对话等任务。
Skywork/Skypile-150B数据集是根据我们经过精心过滤的数据处理流程从中文网页中筛选出的高质量数据。本次开源的数据集大小约为600GB,总的token数量约为150B,是目前开源最大中文数据集。
除此之外,我们还公开了训练Skywork-13B模型中使用的评估方法、数据配比研究和训练基础设施调优方案等信息。我们希望这些开源内容能够进一步启发社区对于大型模型预训练的认知,并推动人工智能通用智能(AGI)的实现。
如果您希望了解更多的信息,如训练方案,评估方法,请参考我们的技术报告,Skymath论文,SkyworkMM论文。
🔥 更新信息
2023.12.7 天工开源150B中文预训练语料安全审核后已重新开放。地址:
*(国外)Huggingface
*(国内)始智AI
2023.11.2 我们将我们构建的评估数据MOCK_GSM8K_TEST以及中文领域评估数据ChineseDomainModelingEval上传到了huggingface,您如果有评估模型的需求,请下载我们的评估数据集。
2023.10.31 我们的技术报告 Skywork: A More Open Bilingual Foundation Model 在arxiv可见,里面有更详细的评估方法,评测对比和技术细节。
2023.10.30 我们开源了Skywork-13B-Base 和 Skywork-13B-Math 以及对应模型的量化模型。我们开源了Skywork/Skypile-150B数据集,该数据集包含根据中文网页清洗的超过150亿高质量中文token,硬盘大小大约600GB,是已知目前最大的开源中文数据集。
📖目录
下载地址
模型下载
数据下载
评估集下载
模型中间存档下载
我们还额外开源了Skywork-13B-Base模型在训练500B,1T,1.5T,2T,2.5T,3T,3.1T tokens的模型存档供社区使用,这对研究大模型的能力是如何进化的非常有帮助。
模型介绍
训练数据
我们精心搭建了数据清洗流程对文本中的低质量数据、有害信息、敏感信息进行清洗过滤。我们的Skywork-13B-Base模型是在清洗后的3.2T高质量中、英、代码数据上进行训练,其中英文占比52.2%,中文占比39.6%,代码占比8%,在兼顾中文和英文上的表现的同时,代码能力也能有保证。
模型结构
与Llama-2-13B模型对比,天工Skywork-13B模型采用相对更加瘦长的网络结构,层数为52层,同时将FFN Dim和Hidden Dim缩小到12288和4608,从而保证模型参数量和原始Llama-2-13B模型相当。根据我们前期实验对比,相对瘦长的网络结构在大Batch Size训练下可以取得更好的泛化效果。Skywork-13B和Llama-2-13B模型的对比如下:
分词器
我们使用Byte-Pair Encoding(BPE)对数据进行分词,词表大小为65536,其中拉丁字符和子词为32000个,汉字和Unicode符号8000个,汉语词语25519个,剩下的17个为保留字。
训练方法
为了更加精细化利用数据,我们采用两阶段训练方法,第一阶段使用通用语料进行模型通用能力学习,第二部分加入STEM(科学,技术,工程,数学)相关数据进一步增强模型的推理能力、数学能力、问题解决能力。
第一阶段预训练
训练过程中我们监督模型训练损失和各项能力的变化。下图是第一阶段预训练中我们筛选出来的重要指标的变化曲线。第一阶段预训练包含两个连续的训练过程,我们用不同的颜色表示。第一阶段预训练完成的模型我们称之为Skywork-13B-3.1T-Base
第二阶段预训练
第二阶段预训练在通用语料中额外加入STEM相关数据继续训练。第二阶段训练大约130B token,两阶段总计训练3.2T,产生了我们最终的Skywork-13B-Base模型。
开源数据
Skypile-150B简介
Skypile-150B 是一个大型的中文语言模型预训练数据集,它取自于公开可用的中文互联网网页数据,并经过严格的过滤和广泛的重复数据删除,同时还采用了FastText和Bert等模型对低质量数据进行过滤。Skypile-150B包含大约166M个单独网页,平均每篇文章中文字符超过1,000。数据集总共约150B token,硬盘大小为592GB。
语言和数据字段
Skypile-150B 数据集为中文数据。页面中包含的经过处理和清理的文本,数据格式为jsonl,每一行为一个文档,按行用json进行解析,文本存放在text字段中。
敏感信息和偏见
虽然经过了严格的清洗和过滤,由于 Skypile-150B 建立的公开可用的网页之上,因此它可能仍然包含一些敏感信息,例如电子邮件、电话号码或 IP 地址等。因此使用者需要注意,在使用数据前进行必要的进一步过滤和清洗。
协议
数据的使用需要遵循我们的协议,不做任何危害国家社会安全和违法的用途。
模型评估
领域数据困惑度评估
语言模型训练的本质上是让预测下一个词更准确。基于这个认知,我们认为评估基础大模型一个重要的方式是评估在各大领域上语言模型生成文章的概率。在语言模型建模中一般使用Cross Entropy损失函数,整体的损失函数为每个位置预测真实词损失的平均,则有:
__special_katext_id_3__
其中$
n
$是文档的长度,即token数,$p_i
$是位置i上真实词的概率,我们知道文档中每一个位置上真实词的概率的联乘为生成该文档的概率,这样我们就将loss和生成文章的概率联系在了一起。而不同模型因为使用的分词器不同,具有不同的token数,因此对损失函数乘以token数目$n
$就仅考虑生成文章的概率部分,不同模型也可以进行比较。我们将标准化后loss取指数转换成perplexity,使得模型的差异更加可读。为了阅读方便,后续提到的loss和ppl为模型标准化后的loss和perplexity。基于上述分析,我们对多个领域筛选出2023年9月份新发布的几百到上千篇高质量文章,并人工进行了核对。保证所有的测试数据不在天工模型以及其他所有模型的训练集中,并且测试数据的来源也足够广泛,质量也高。我们可以选取当前最新的文章评测不同模型的ppl,模型很难作弊。并且我们会持续按照最新数据评测各个模型效果,动态更新各个模型能力。 下图列出了不同开源模型,天工Skywork-13B-Base取得最优效果,证明了我们的Base模型的基础能力处于国内开源模型中文最强水平。
评测数据和评测脚本
我们将评测数据和评测脚本也进行了开源,您需要在Hugging Face上下载我们的评估数据后,将评估数据存放在data/eval_loss目录下,运行下面命令则可以复现我们的结果。
假设我们需要计算A模型和Skywork模型的标准化损失。我们分别对A模型和Skywork模型运行上面脚本,会在各自目录下的result.txt文件中得到两个值,第一个值是loss,第二个值是文档token数。我们将A模型的loss和token数分别记作loss_a和token_a,Skywork模型的loss和token数分别记作loss_s和token_s。那么A模型标准化损失loss_a_norm = loss_a * token_a / token_s。这样就可以对比loss_a_norm和loss_s来对比A模型和Skywork模型的效果。扩展到多个模型同理。
评估常见问题
Q1: 为什么要让所有模型的文档长度一样,而不是让分词后token一样?
A1: 本质上领域困惑度是衡量不同模型生成高质量文档的概率,概率越大模型效果越好,因此我们需要保证所有模型看到的文档是一样的。此外,因为不同模型使用不同的分词器,分词后的token数目差异很大,以Llama为例,会将汉字切分为3个unicode编码,如果按照分词后token比较的话,那么Llama模型看到的文档长度会比其他模型短,而我们知道文档前面的token loss是更低的,后面token loss更高,因此按照分词后token比较的话会对Llama这种分词更细的模型会不公平。
Q2: 为什么预处理的时候截取max_position_embedding除以3这个长度的文本?
A2: 根据问题1我们知道Llama模型一般是将汉字切分成3个字符,为了保证一篇文档输入模型分词后不超过4096的限制,所以我们将文档最大长度设置成了4096/3=1228。在我们对比模型中,Llama模型是对中文切分最细的,所以只要不超过Llama模型的分词长度,其他模型也肯定可以塞得下。
Q3: 不同模型有不同的最大长度,统一用4096是否不公平?
A3: 如上所示,我们计算的文档长度是1228个中文汉字,以Qwen为例,训练长度为2K,推理时候可以扩展到8K,并且中英双语模型的压缩率一般在2-3倍,因此1228个中文字符一般只有500-1000个token,远远达到不了2K甚至4K的最大长度限制。
Q4: 为什么Average Ppl和每个领域Ppl平均不一致?
A4: 我们计算Average Ppl的方式是将所有文档的loss平均起来,然后取指数转换成Ppl,这样是为了避免有些领域Ppl过分的大,导致整体结果容易受到极端值影响。其物理含义是将所有文档视为一个整体问题,Average Ppl则是针对这整体文档计算出的Ppl。
Benchmark评估
我们评估了各大权威评测benchmark上的结果作为参考,包括C-Eval,MMLU,CMMLU,GSM8K。遵循之前的评估流程,C-Eval、MMLU、CMMLU测试5-shot结果,GSM8K测试8-shot结果。可以看到Skywork-13B-Base模型在中文开源模型中处于前列,在同等参数规模下为最优水平。
Benchmark评估详细结果
我们给出Skywork-13B-Base模型在C-Eval,CMMLU,MMLU上模型的详细结果。
复现
我们提供了评测脚本以供复现我们的实验结果。注意,由于内部代码和开源代码存在少许差异,评测结果可能与汇报结果存在细微的结果不一致。请阅读eval/EVALUATION.md了解更多信息。
Skywork-13B-Math模型评估
Skywork-13B-Math在数学能力相对Base模型进一步加强,我们在主流的数学相关benchmark,GSM8K,MATH和CMATH上进行评估。结果显示在13B规模模型中,我们的模型在GSM8K和CMATH评测中得分第一,同时MATH评测也处于前列。
快速开始
我们将模型参数、配置文件、tokenizer等在Hugging Face和ModelScope上进行了开源。
依赖安装
Skywork-13B-Base模型,Skywork-13B-Chat模型和Skywork-13B-Math模型运行下面的脚本进行Python依赖安装。
Hugging Face模型测试
Base 模型推理
Chat 模型推理
Math 模型推理
CLI Demo
📣模型样例展示
我们构建了精细的天工场景能力体系,针对其中的10种文创场景构建了1w+高质量数据集,并提出了根据单场景训练难度进行配比的数据混合策略,最终在10个场景上的精度均达到ChatGPT的90%以上。下面是我们Chat模型在10个文创任务上的样例展示。
Chat模型样例展示
诗词创作
广告文案
作文生成
演讲稿生成
心得体会
科技文稿
记录文
评论评语
问题生成
起名字
量化部署
8bit量化(Int8 Quantization)
skywork 采用主流8bits量化方法:BitsAndBytes。该方法量化后性能基本无损,且已经集成到transformers库中,基于BitsAndBytes,我们提供在线量化和离线8bits模型两种方式。
以下我们提供示例说明如何使用int8量化模型,在开始使用之前,请先安装BitsAndBytes库并安装所需依赖包,具体安装方式见BitsAndBytes库。
在线量化(Online Quantization)
离线量化(Offline Quantization)
量化效果(Evaluation)
我们对量化模型在基准评测数据集上做了测试,结果如下所示:
显存占用(GPU Mem in GB)
模型微调
全量微调
使用Skywork-13B-Base模型进行预训练微调
使用Skywork-13B-Base模型进行有监督微调(SFT, Supevise Fine-tuning)
LoRA微调
使用Skywork-13B-Base模型以及LoRA进行预训练微调
使用Skywork-13B-Base模型以及LoRA进行有监督微调(SFT, Supevise Fine-tuning)
社区和生态
华为昇腾
MindSpore框架
MindFormers是一个基于昇思框架 (MindSpore) 并支持大模型训练、微调、评估、推理、部署的全流程开发套件,Skywork-13B模型已集成于此套件,支持用户基于昇腾AI硬件算力进行模型微调、部署。具体使用方式可见我们在昇思平台上的[README](//dnrops/Skywork/tree/main/ https:/gitee.com/mindspore/mindformers/tree/dev/research/skywork/skywork.md)。
大模型体验平台
昇思大模型平台基于昇思MindSpore AI框架、MindFormers大模型开发套件与昇腾硬件算力,将Skywork-13B大模型能力开放给公众,欢迎大家使用。
声明和协议
声明
我们在此声明,不要利用Skywork模型进行任何危害国家社会安全或违法的活动。另外,我们也要求使用者不要将 Skywork 模型用于未经适当安全审查和备案的互联网服务。我们希望所有的使用者都能遵守这个原则,确保科技的发展能在规范和合法的环境下进行。
我们已经尽我们所能,来确保模型训练过程中使用的数据的合规性。然而,尽管我们已经做出了巨大的努力,但由于模型和数据的复杂性,仍有可能存在一些无法预见的问题。因此,如果由于使用skywork开源模型而导致的任何问题,包括但不限于数据安全问题、公共舆论风险,或模型被误导、滥用、传播或不当利用所带来的任何风险和问题,我们将不承担任何责任。
We hereby declare that the Skywork model should not be used for any activities that pose a threat to national or societal security or engage in unlawful actions. Additionally, we request users not to deploy the Skywork model for internet services without appropriate security reviews and records. We hope that all users will adhere to this principle to ensure that technological advancements occur in a regulated and lawful environment.
We have done our utmost to ensure the compliance of the data used during the model’s training process. However, despite our extensive efforts, due to the complexity of the model and data, there may still be unpredictable risks and issues. Therefore, if any problems arise as a result of using the Skywork open-source model, including but not limited to data security issues, public opinion risks, or any risks and problems arising from the model being misled, abused, disseminated, or improperly utilized, we will not assume any responsibility.
协议
社区使用Skywork模型需要遵循《Skywork 模型社区许可协议》。Skywork模型支持商业用途,如果您计划将Skywork模型或其衍生品用于商业目的,无需再次申请, 但请您仔细阅读《Skywork 模型社区许可协议》并严格遵守相关条款。
The community usage of Skywork model requires Skywork Community License. The Skywork model supports commercial use. If you plan to use the Skywork model or its derivatives for commercial purposes, you must abide by terms and conditions within Skywork Community License.
引用和联系我们
如果您觉得我们的工作对您有帮助,欢迎引用我们的论文~