XVERSE-65B
更新信息
[2023/11/29] 更新模型架构及更多底座数据的相关信息。
[2023/11/24] 更新预训练数据的相关信息。
[2023/11/06] 发布 65B 尺寸的 XVERSE-65B 底座模型。
Update Information
[2023/11/29] Update model architecture and additional pre-training data information.
[2023/11/24] Update the related information of the pre-training data.
[2023/11/06] Released the XVERSE-65B base model.
模型介绍
XVERSE-65B 是由深圳元象科技自主研发的支持多语言的大语言模型(Large Language Model),参数规模为 650 亿,本次开源的模型为底座模型 XVERSE-65B,主要特点如下:
- 模型结构:XVERSE-65B 使用主流 Decoder-only 的标准 Transformer 网络结构,支持 16K 的上下文长度(Context Length),能满足更长的多轮对话、知识问答与摘要等需求,模型应用场景更广泛。
- 训练数据:构建了 2.6 万亿 token 的高质量、多样化的数据对模型进行充分训练,包含中、英、俄、西等 40 多种语言,通过精细化设置不同类型数据的采样比例,使得中英两种语言表现优异,也能兼顾其他语言效果。
- 分词:基于 BPE(Byte-Pair Encoding)算法,使用上百 GB 语料训练了一个词表大小为 100,534 的分词器,能够同时支持多语言,而无需额外扩展词表。
- 训练框架:训练中采用 FlashAttention2 加速计算,3D 并行基础上采用虚拟流水线(virtual pipeline)技术,降低较长流水线和 16k 上下文窗口产生的过高气泡率,在千卡集群的峰值算力利用率达到业界前列。同时通过集群基础设施运营、资源调度、训练框架和调度平台协同等持续优化,打造出高稳定、低中断、强容错的训练系统,将每周有效训练率提升至 98.6%。
XVERSE-65B的模型大小、架构和学习率如下:
params | d_model | n_heads | n_layers | d_ff | learning rate |
---|---|---|---|---|---|
65B | 8192 | 64 | 80 | 22016 | 1.5e−4 |
底座数据介绍
在预训练阶段,XVERSE-65B 主要使用了 7 类不同的数据类型。以下表格展示了 XVERSE-65B 与其他一些知名模型在预训练数据集方面的比较:
数据类别 | GPT3 | Llama | BLOOM | PaLM | Chinchilla | Gopher | MT-NLG | XVERSE-65B |
---|---|---|---|---|---|---|---|---|
网页类 | Y | Y | Y | Y | Y | Y | Y | Y |
代码类 | Y | Y | Y | Y | Y | Y | Y | |
百科类 | Y | Y | Y | Y | Y | Y | Y | |
书籍类 | Y | Y | Y | Y | Y | Y | Y | |
论文类 | Y | Y | Y | |||||
问答类 | Y | Y | Y | Y | Y |
注:'Y' 表示使用了该类数据。
在预训练阶段,不同类别数据的采样比例如下所示:
网页类 | 代码类 | 百科类 | 书籍类 | 论文类 | 问答类 | 其他类 | |
---|---|---|---|---|---|---|---|
比例(%) | 72.91 | 7.09 | 4.81 | 5.62 | 6.55 | 1.15 | 1.87 |
在预训练阶段,XVERSE-65B 主要使用了 41 种自然语言,以下表格展示了不同语种在底座数据中的占比:
语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) |
---|---|---|---|---|---|---|---|---|---|---|---|
en | 54.91 | pl | 0.48 | hu | 0.19 | ar | 0.12 | fa | 0.07 | sl | 0.05 |
zh | 31.09 | it | 0.36 | ko | 0.18 | ro | 0.11 | hi | 0.07 | et | 0.04 |
ja | 3.22 | pt | 0.34 | sv | 0.15 | bg | 0.10 | no | 0.07 | lv | 0.03 |
ru | 3.15 | cs | 0.27 | el | 0.14 | th | 0.10 | ca | 0.06 | sr | 0.03 |
de | 1.52 | uk | 0.24 | fi | 0.14 | da | 0.09 | iw | 0.06 | ta | 0.03 |
es | 0.91 | tr | 0.23 | id | 0.13 | mr | 0.08 | lt | 0.05 | kk | 0.02 |
fr | 0.73 | nl | 0.20 | vi | 0.13 | sk | 0.08 | ms | 0.05 |
注:各种语言简称的对照可参考:ISO_639-1
对于代码类数据,以下表格展示了不同编程语言的占比:
语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) | 语言 | 比例(%) |
---|---|---|---|---|---|---|---|---|---|---|---|
PHP | 17.06 | Go | 3.38 | Shell | 0.74 | PowerShell | 0.23 | Arduino | 0.13 | R | 0.04 |
JavaScript | 15.65 | Rust | 2.33 | Haskell | 0.46 | Groovy | 0.21 | Assembly | 0.13 | ABAP | 0.01 |
Java | 15.18 | Ruby | 1.61 | Common Lisp | 0.43 | Pascal | 0.20 | Clojure | 0.12 | COBOL | 0.0022 |
Python | 14.64 | Swift | 1.40 | Perl | 0.34 | FORTRAN | 0.19 | Cuda | 0.12 | Verilog | 0.0001 |
TypeScript | 6.55 | Kotlin | 1.40 | CSS | 0.32 | Elixir | 0.17 | VHDL | 0.09 | ||
C | 4.84 | Scala | 1.08 | Julia | 0.32 | Solidity | 0.16 | Emacs Lisp | 0.08 | ||
C++ | 4.68 | Dart | 0.95 | Visual Basic | 0.25 | F# | 0.14 | Objective-C++ | 0.08 | ||
C# | 3.44 | SQL | 0.76 | OCaml | 0.24 | Erlang | 0.14 | Crystal | 0.06 |
Model Introduction
XVERSE-65B is a multilingual large language model, independently developed by Shenzhen Yuanxiang Technology. The models released this time is the base model XVERSE-65B. Its key features are as follows:
- Model Structure: XVERSE-65B uses the mainstream Decoder-only Transformer network structure, supports 16k context length, which can meet the need of longer multi-round dialogues, knowledge question-answering, and summarization. This makes the model more versatile in application scenarios.
- Training Data: The model has been thoroughly trained on a diversified and high-quality dataset consisting of 2.6 trillion of tokens, including more than 40 languages such as Chinese, English, Russian, and Spanish. The sampling ratio of different types of data is finely set, which makes the performance of Chinese and English excellent, and also takes into account the effect of other languages.
- Tokenization: Based on the BPE (Byte-Pair Encoding) algorithm, a tokenizer with a vocabulary size of 100,534 has been trained using hundreds of gigabytes of language data. This tokenizer is capable of supporting multilingual without the need for additional vocabulary expansion.
- Training Framework: The training utilizes FlashAttention2 for accelerated computation, and on top of 3D parallelism, virtual pipeline technology is applied to reduce the excessive bubble rate caused by longer pipelines and 16k context windows. This achieves a peak computational efficiency within the industry-leading range in the petaflop-scale cluster. Concurrently, through continuous optimization of cluster infrastructure operations, resource scheduling, training frameworks, and the scheduling platform, a highly stable, low-interruption, and robust fault-tolerant training system has been developed, enhancing the effective weekly training rate to 98.6%.
The models sizes, architectures and learning rate of XVERSE-65B are showed as follows:
params | d_model | n_heads | n_layers | d_ff | learning rate |
---|---|---|---|---|---|
65B | 8192 | 64 | 80 | 22016 | 1.5e−4 |
Introduction of Pre-training Data
During the pre-training phase, XVERSE-65B primarily utilized 7 different types of data. The following table shows a comparison of the pre-training datasets of XVERSE-65B with some other well-known models:
Data Type | GPT3 | Llama | BLOOM | PaLM | Chinchilla | Gopher | MT-NLG | XVERSE-65B |
---|---|---|---|---|---|---|---|---|
Web Pages | Y | Y | Y | Y | Y | Y | Y | Y |
Code | Y | Y | Y | Y | Y | Y | Y | |
Encyclopedia | Y | Y | Y | Y | Y | Y | Y | |
Books | Y | Y | Y | Y | Y | Y | Y | |
Academic Papers | Y | Y | Y | |||||
QA | Y | Y | Y | Y | Y |
Note: 'Y' indicates that the data type was used.
The sampling ratios of different data types during the pre-training phase are as follows:
Web Pages | Code | Encyclopedia | Books | Academic Papers | QA | Other | |
---|---|---|---|---|---|---|---|
Proportion (%) | 72.91 | 7.09 | 4.81 | 5.62 | 6.55 | 1.15 | 1.87 |
During the pre-training phase, XVERSE-65B primarily used 41 kinds of natural language, and the following table shows the proportion of different languages in the pre-training data:
Language | Proportion (%) | Language | Proportion (%) | Language | Proportion (%) | Language | Proportion (%) | Language | Proportion (%) | Language | Proportion (%) |
---|---|---|---|---|---|---|---|---|---|---|---|
en | 54.91 | pl | 0.48 | hu | 0.19 | ar | 0.12 | fa | 0.07 | sl | 0.05 |
zh | 31.09 | it | 0.36 | ko | 0.18 | ro | 0.11 | hi | 0.07 | et | 0.04 |
ja | 3.22 | pt | 0.34 | sv | 0.15 | bg | 0.10 | no | 0.07 | lv | 0.03 |
ru | 3.15 | cs | 0.27 | el | 0.14 | th | 0.10 | ca | 0.06 | sr | 0.03 |
de | 1.52 | uk | 0.24 | fi | 0.14 | da | 0.09 | iw | 0.06 | ta | 0.03 |
es | 0.91 | tr | 0.23 | id | 0.13 | mr | 0.08 | lt | 0.05 | kk | 0.02 |
fr | 0.73 | nl | 0.20 | vi | 0.13 | sk | 0.08 | ms | 0.05 |
Note: Reference to the abbreviations of different languages: ISO_639-1
For the Code data, the following table shows the proportion of different programming languages:
Programming Language | Proportion (%) | Programming Language | Proportion (%) | Programming Language | Proportion (%) | Programming Language | Proportion (%) | Programming Language | Proportion (%) | Programming Language | Proportion (%) |
---|---|---|---|---|---|---|---|---|---|---|---|
PHP | 17.06 | Go | 3.38 | Shell | 0.74 | PowerShell | 0.23 | Arduino | 0.13 | R | 0.04 |
JavaScript | 15.65 | Rust | 2.33 | Haskell | 0.46 | Groovy | 0.21 | Assembly | 0.13 | ABAP | 0.01 |
Java | 15.18 | Ruby | 1.61 | Common Lisp | 0.43 | Pascal | 0.20 | Clojure | 0.12 | COBOL | 0.0022 |
Python | 14.64 | Swift | 1.40 | Perl | 0.34 | FORTRAN | 0.19 | Cuda | 0.12 | Verilog | 0.0001 |
TypeScript | 6.55 | Kotlin | 1.40 | CSS | 0.32 | Elixir | 0.17 | VHDL | 0.09 | ||
C | 4.84 | Scala | 1.08 | Julia | 0.32 | Solidity | 0.16 | Emacs Lisp | 0.08 | ||
C++ | 4.68 | Dart | 0.95 | Visual Basic | 0.25 | F# | 0.14 | Objective-C++ | 0.08 | ||
C# | 3.44 | SQL | 0.76 | OCaml | 0.24 | Erlang | 0.14 | Crystal | 0.06 |
评测结果
为了综合评估模型的性能,我们在一系列标准数据集上进行了全面测试,包括C-Eval、CMMLU、Gaokao-Bench、MMLU、GAOKAO-English、AGIEval、RACE-M、CommonSenseQA、PIQA、GSM8K和HumanEval。这些评估覆盖了模型在多个领域的能力,具体包括中文问答、英文问答、语言理解、常识问答、逻辑推理、数学问题解答以及编程能力。评估结果如下:
能力维度 | 数据集 | XVERSE-65B | Llama1-65B | Llama2-70B | Falcon-180B | GPT-3.5 | GPT-4 | |
---|---|---|---|---|---|---|---|---|
中文问答 | C-Eval | 5-shot | 68.6 | 38.8 | 49.9 | 54.2 | 54.4 | 68.7 |
CMMLU | 5-shot | 72.6 | 40.6 | 53.6 | 57.2 | 53.9 | 71.0 | |
Gaokao-Bench1 | 5-shot | 73.9 | 38.9 | 51.4 | 50.5 | - | - | |
英文问答 | MMLU | 5-shot | 70.8 | 63.4 | 68.9 | 70.5 | 70.0 | 86.4 |
GAOKAO-English1 | 5-shot | 85.3 | 67.0 | 76.6 | 63.3 | - | - | |
中英文问答 | AGIEval1 | 5-shot | 61.8 | 42.4 | 51.4 | 51.3 | - | - |
语言理解 | RACE-M | 0-shot | 90.6 | 67.9 | 81.5 | 87.6 | 85.6 | 93.7 |
常识问答 | CommonSenseQA | 7-shot | 79.8 | 74.0 | 78.5 | 82.4 | 80.2 | 88.3 |
推理 | PIQA | 0-shot | 80.4 | 82.8 | 82.8 | 85.3 | 81.7 | 89.2 |
数学 | GSM8K | 4-shot | 60.3 | 50.9 | 56.8 | 62.6 | 57.1 | 92.0 |
代码 | HumanEval | 0-shot | 26.8 | 23.7 | 29.9 | - | 48.1 | 67.0 |
1:只针对其中的单项选择题进行测试,即排除了填空题、开放性问题和多项选择题
对于上述所有比较模型,我们优先汇报其官方公布的结果。在缺少官方结果的情况下,我们采用了 OpenCompass 榜单的报告结果。其他结果则来自于我们自行执行的评估流程所获得的数据。
对于 MMLU ,我们采用作者提供的评测工具,C-Eval、AGIEval、GAOKAO-Bench、GAOKAO-English 与 MMLU 的评测方式相同,其余评测数据集使用 OpenCompass 评估框架进行评估。
Model Evaluation
To comprehensively assess the performance of the model, we conducted extensive testing across a range of standard datasets, including C-Eval, CMMLU, Gaokao-Bench, MMLU, GAOKAO-English, AGIEval, RACE-M, CommonSenseQA, PIQA, GSM8K and HumanEval. These evaluations spanned multiple capabilities of the model, specifically including Chinese question answering, English question answering, language comprehension, common sense questioning, logical reasoning, mathematical problem-solving, and coding ability. The results of the evaluations are as follows:
Capability Dimension | Dataset | XVERSE-65B | Llama1-65B | Llama2-70B | Falcon-180B | GPT-3.5 | GPT-4 | |
---|---|---|---|---|---|---|---|---|
Chinese QA | C-Eval | 5-shot | 68.6 | 38.8 | 49.9 | 54.2 | 54.4 | 68.7 |
CMMLU | 5-shot | 72.6 | 40.6 | 53.6 | 57.2 | 53.9 | 71.0 | |
Gaokao-Bench1 | 5-shot | 73.9 | 38.9 | 51.4 | 50.5 | - | - | |
English QA | MMLU | 5-shot | 70.8 | 63.4 | 68.9 | 70.5 | 70.0 | 86.4 |
GAOKAO-English1 | 5-shot | 85.3 | 67.0 | 76.6 | 63.3 | - | - | |
Chinese & English QA | AGIEval1 | 5-shot | 61.8 | 42.4 | 51.4 | 51.3 | - | - |
Language Understanding | RACE-M | 0-shot | 90.6 | 67.9 | 81.5 | 87.6 | 85.6 | 93.7 |
Common Sense QA | CommonSenseQA | 7-shot | 79.8 | 74.0 | 78.5 | 82.4 | 80.2 | 88.3 |
Reasoning | PIQA | 0-shot | 80.4 | 82.8 | 82.8 | 85.3 | 81.7 | 89.2 |
Math | GSM8K | 4-shot | 60.3 | 50.9 | 56.8 | 62.6 | 57.1 | 92.0 |
Coding | HumanEval | 0-shot | 26.8 | 23.7 | 29.9 | - | 48.1 | 67.0 |
1: Tests are conducted only on single-answer multiple-choice questions, thus excluding fill-in-the-blanks, open-ended questions, and multiple-answer multiple-choice questions.
For all the comparison models mentioned above, we prioritize the disclosure of their officially published results. In the absence of official data, we refer to the reported outcomes from OpenCompass Leaderboard. Results not covered by the aforementioned sources are derived from our own evaluation pipline.
For MMLU, we adopt the evaluation tools provided by the authors, C-Eval, AGIEval, GAOKAO-Bench, GAOKAO-English are the same as MMLU. For the remaining evaluation datasets, the OpenCompass is employed for evaluation.
使用方法
硬件需求
下表列出了在 XVERSE-65B 上进行推理和微调所需要的硬件资源:
类型 | 方法 | 内存 | GPU | |
---|---|---|---|---|
XVERSE-65B | 训练 | LoRA with ZeRO-3 | 1500GB | 8*A800 80G |
XVERSE-65B | 推理 | BF16/FP16 | 500GB | 2*A800 80G |
Usage
Hardware requirements
The following table lists the hardware resources required for inference and fine-tuning on XVERSE-65B:
Type | Kind | Memory | GPU | |
---|---|---|---|---|
XVERSE-65B | Training | LoRA with ZeRO-3 | 1500GB | 8*A800 80G |
XVERSE-65B | Inference | BF16/FP16 | 500GB | 2*A800 80G |
Loading with Transformers
可通过以下代码加载 XVERSE-65B 模型进行推理:
The XVERSE-65B model can be loaded for inference using the following code:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("xverse/XVERSE-65B")
model = AutoModelForCausalLM.from_pretrained("xverse/XVERSE-65B", trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='auto')
model = model.eval()
inputs = tokenizer('北京的景点:故宫、天坛、万里长城等。\n深圳的景点:', return_tensors='pt').input_ids
inputs = inputs.cuda()
generated_ids = model.generate(inputs, max_new_tokens=64, eos_token_id=tokenizer.eos_token_id, repetition_penalty=1.1)
print(tokenizer.batch_decode(generated_ids, skip_special_tokens=True))
更多有关相关细节,包括文本生成demo和环境依赖,请参考我们的Github。
For more details, including the demo of text generation and environmental dependencies, please refer to our Github.
模型微调
XVERSE-65B 支持开发者进行微调以实现更好的性能表现。在此我们尝试使用 LLaMA-Factory 与 XVERSE-65B 进行兼容性微调训练,并在 8 * Nvidia A800 80 GB + DeepSpeed 的环境下进行了测试。
下面我们给出了使用LoRA with ZeRO-3
的微调方法。
环境准备
下载 LLaMA-Factory 项目并按其要求安装依赖。
启动训练
训练启动脚本:
其中 model_path 请替换为自己的模型路径
XVERSE-65B 基于 bfloat16 训练的,建议选用 bfloat16 做微调训练。
deepspeed --num_gpus 8 src/train_bash.py \
--deepspeed deepspeed.json \
--stage sft \
--model_name_or_path model_path \
--do_train \
--dataset alpaca_gpt4_zh \
--template default \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--output_dir output_model_path \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 1 \
--save_steps 1000 \
--learning_rate 5e-5 \
--num_train_epochs 3.0 \
--plot_loss \
--bf16
deep_speed.json 参数配置:
{
"train_micro_batch_size_per_gpu":"auto",
"gradient_accumulation_steps":"auto",
"gradient_clipping":"auto",
"zero_allow_untested_optimizer":true,
"fp16":{
"enabled":false
},
"bfloat16":{
"enabled":true
},
"zero_optimization":{
"stage":3,
"allgather_partitions":true,
"reduce_scatter":true,
"overlap_comm":false,
"contiguous_gradients":true
}
}
Fine-tuning
XVERSE-65B allow developers to fine-tune for improved performance. Here, we attempted to use LLaMA-Factory for compatible fine-tuning training with XVERSE-65B, and tested it in an environment with 8 * Nvidia A800 80 GB + DeepSpeed.
Below, we provide the fine-tuning method using LoRA with ZeRO-3
.
Environment Setup
Download the LLaMA-Factory project and [install dependencies] (https://github.com/hiyouga/LLaMA-Factory#getting-started) as required.
Training
Training launch script:
Replace model_path with your own model path.
Both XVERSE-65B and XVERSE-65B-Chat are trained based on bfloat16. It is recommended to use bfloat16 for fine-tuning training.
deepspeed --num_gpus 8 src/train_bash.py \
--deepspeed deepspeed.json \
--stage sft \
--model_name_or_path model_path \
--do_train \
--dataset alpaca_gpt4_zh \
--template default \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--output_dir output_model_path \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 1 \
--save_steps 1000 \
--learning_rate 5e-5 \
--num_train_epochs 3.0 \
--plot_loss \
--bf16
deep_speed.json parameter settings:
{
"train_micro_batch_size_per_gpu":"auto",
"gradient_accumulation_steps":"auto",
"gradient_clipping":"auto",
"zero_allow_untested_optimizer":true,
"fp16":{
"enabled":false
},
"bfloat16":{
"enabled":true
},
"zero_optimization":{
"stage":3,
"allgather_partitions":true,
"reduce_scatter":true,
"overlap_comm":false,
"contiguous_gradients":true
}
}
局限性与免责申明
XVERSE-65B 与其他所有 LLM 一样,在某些情况下可能会产生不准确、有偏见或其他令人反感的内容。因此,请谨慎使用模型生成的内容,请勿将生成的有害内容进行传播,在部署任何 XVERSE-65B 的应用之前,开发人员应根据其具体应用对模型进行安全测试和调优。
我们强烈警告不要将 XVERSE-65B 模型用于制造或传播有害信息,或进行任何可能损害公众、国家、社会安全或违反法规的活动。如果使用 XVERSE-65B 模型产生任何问题,无论是数据安全问题、公共舆论风险,还是模型被误解、滥用、传播或不合规使用所引发的任何风险和问题,我们将不承担任何责任。
Limitations and Disclaimer
Like all other Large Language Models (LLMs), XVERSE-65B may produce inaccurate, biased, or otherwise offensive content under certain circumstances. Therefore, please use the content generated by the model with caution and refrain from disseminating harmful content. Before deploying any application of XVERSE-65B, developers should conduct safety tests and optimization of the model according to its specific application.
We strongly warn against the use of the XVERSE-65B model for producing or spreading harmful information, or conducting any activities that might harm the public, national, or social security, or violate regulations. We assume no responsibility for any problems arising from the use of the XVERSE-65B model, whether it be data security issues, public opinion risks, or any risks and issues caused by misunderstanding, misuse, dissemination, or non-compliance with the model.
模型开源协议
使用本仓库的源码需要遵循 Apache-2.0 开源协议,使用 XVERSE-65B 的模型权重则需要遵循模型许可协议。
XVERSE-65B 模型权重对学术研究完全开放,并且支持免费商用。如需申请商业许可证,请填写【申请表】,如有其他问题或合作,请联系 opensource@xverse.cn。
Open Source License
The use of the source code in this repository must follow the Apache-2.0 open-source license, while the use of the model weights of XVERSE-65B needs to adhere to the Model License Agreement.
The XVERSE-65B model weights are fully open to academic research and support free commercial use. To apply for a commercial license, please fill in the application form. For other questions or collaborations, please contact opensource@xverse.cn.
- Downloads last month
- 12