|
速度基准 |
|
======== |
|
|
|
我们在训练速度方面与 |
|
`LLaMA-Factory <https://github.com/hiyouga/LLaMA-Factory>`__ |
|
进行了对比。对比所使用的 LLaMA-Factory commit id 为 |
|
`8e04794 <https://github.com/hiyouga/LLaMA-Factory/tree/8e04794b2da067a4123b9d7091a54c5647f44244>`__\ 。使用 |
|
`Alpaca <https://huggingface.co/datasets/tatsu-lab/alpaca>`__ |
|
作为训练数据集测试速度。 |
|
|
|
硬件 |
|
---- |
|
|
|
- NVIDIA A100-SXM4-80GB GPUs |
|
|
|
- Intel(R) Xeon(R) Gold 6348 CPU @ 2.60GHz |
|
|
|
软件环境 |
|
-------- |
|
|
|
- Python 3.10 |
|
|
|
- PyTorch 1.13 |
|
|
|
- CUDA 11.7 |
|
|
|
- CUDNN 8.5 |
|
|
|
- NCCL 2.14.3 |
|
|
|
速度 |
|
---- |
|
|
|
|image1| |
|
|
|
|image2| |
|
|
|
|image3| |
|
|
|
.. tip:: |
|
TGS 全称是 Tokens per GPU per Second,每张 GPU 每秒训练的 Token 数 |
|
|
|
.. raw:: html |
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><div align="center"></div></body></html> |
|
|
|
.. list-table:: |
|
:widths: 30 15 20 20 20 50 |
|
:header-rows: 1 |
|
|
|
* - 模型 |
|
- GPUs |
|
- 序列长度 |
|
- TGS |
|
- TFLOPs |
|
- Config |
|
* - Llama2-7B |
|
- 8 |
|
- 8k |
|
- 3028.3 |
|
- 185.3 |
|
- `llama2_70b_full_alpaca_enzh_8k_sp1.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_7b/llama2_7b_full_alpaca_enzh_8k_sp1.py>`_ |
|
* - Llama2-7B |
|
- 8 |
|
- 32k |
|
- 2234.2 |
|
- 193.0 |
|
- `llama2_7b_full_alpaca_enzh_32k_sp1.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_7b/llama2_7b_full_alpaca_enzh_32k_sp1.py>`_ |
|
* - Llama2-7B |
|
- 8 |
|
- 128k |
|
- 948.6 |
|
- 180.3 |
|
- `llama2_7b_full_alpaca_enzh_128k_sp8.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_7b/llama2_7b_full_alpaca_enzh_128k_sp8.py>`_ |
|
* - Llama2-7B |
|
- 8 |
|
- 256k |
|
- 540.1 |
|
- 176.9 |
|
- `llama2_7b_full_alpaca_enzh_256k_sp8.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_7b/llama2_7b_full_alpaca_enzh_256k_sp8.py>`_ |
|
* - Llama2-7B |
|
- 32 |
|
- 1M |
|
- 133.6 |
|
- 153.9 |
|
- `llama2_7b_full_alpaca_enzh_1M_sp16.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_7b/llama2_7b_full_alpaca_enzh_1M_sp16.py>`_ |
|
|
|
.. list-table:: |
|
:widths: 30 15 20 20 20 50 |
|
:header-rows: 1 |
|
|
|
* - 模型 |
|
- GPUs |
|
- 序列长度 |
|
- TGS |
|
- TFLOPs |
|
- Config |
|
* - Yi-34B-200K |
|
- 32 |
|
- 8k |
|
- 485.1 |
|
- 165.6 |
|
- `yi_34b_200k_full_alpaca_enzh_8k_sp1.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/yi_34b/yi_34b_200k_full_alpaca_enzh_8k_sp1.py>`_ |
|
* - Yi-34B-200K |
|
- 32 |
|
- 32k |
|
- 491.5 |
|
- 209.1 |
|
- `yi_34b_200k_full_alpaca_enzh_32k_sp2.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/yi_34b/yi_34b_200k_full_alpaca_enzh_32k_sp2.py>`_ |
|
* - Yi-34B-200K |
|
- 32 |
|
- 128k |
|
- 251.1 |
|
- 191.8 |
|
- `yi_34b_200k_full_alpaca_enzh_128k_sp8.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/yi_34b/yi_34b_200k_full_alpaca_enzh_128k_sp8.py>`_ |
|
* - Yi-34B-200K |
|
- 32 |
|
- 256k |
|
- 119.7 |
|
- 145.3 |
|
- `yi_34b_200k_full_alpaca_enzh_256k_sp8.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/yi_34b/yi_34b_200k_full_alpaca_enzh_256k_sp8.py>`_ |
|
|
|
.. list-table:: |
|
:widths: 30 15 20 20 20 50 |
|
:header-rows: 1 |
|
|
|
* - 模型 |
|
- GPUs |
|
- 序列长度 |
|
- TGS |
|
- TFLOPs |
|
- Config |
|
* - Llama2-70B |
|
- 32 |
|
- 8k |
|
- 216.8 |
|
- 144.7 |
|
- `llama2_70b_full_alpaca_enzh_8k_sp1.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_70b/llama2_70b_full_alpaca_enzh_8k_sp1.py>`_ |
|
* - Llama2-70B |
|
- 32 |
|
- 32k |
|
- 300.9 |
|
- 239.6 |
|
- `llama2_70b_full_alpaca_enzh_32k_sp4.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_70b/llama2_70b_full_alpaca_enzh_32k_sp4.py>`_ |
|
* - Llama2-70B |
|
- 32 |
|
- 128k |
|
- 144.7 |
|
- 189.7 |
|
- `llama2_70b_full_alpaca_enzh_128k_sp8.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_70b/llama2_70b_full_alpaca_enzh_128k_sp8.py>`_ |
|
* - Llama2-70B |
|
- 32 |
|
- 256k |
|
- 63.8 |
|
- 127.6 |
|
- `llama2_70b_full_alpaca_enzh_256k_sp16.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_70b/llama2_70b_full_alpaca_enzh_256k_sp16.py>`_ |
|
* - Llama2-70B |
|
- 64 |
|
- 1M |
|
- 21.8 |
|
- 133.5 |
|
- `llama2_70b_full_alpaca_enzh_1M_sp64.py <https://github.com/InternLM/xtuner/tree/main/xtuner/configs/llama_speed_benchmark/llama2_70b/llama2_70b_full_alpaca_enzh_1M_sp64.py>`_ |
|
|
|
.. note:: |
|
所有实验都会将 Alpaca 数据集拼接为最大长度。由于 Alpaca 数据集所含 |
|
token 数较少,无法拼接成超长序列(如 1M |
|
长度),因此当序列长度较长时,会对 XTuner 代码进行如下修改: |
|
|
|
.. code:: diff |
|
|
|
|
|
def build_origin_dataset(dataset, split): |
|
... |
|
+ |
|
+ dataset = concatenate_datasets([dataset for _ in range(6)]) |
|
return dataset |
|
|
|
def pack_dataset(dataset, max_length, use_varlen_attn, shuffle_before_pack, |
|
map_num_proc): |
|
dataset = dataset.map( |
|
Packer(max_length, use_varlen_attn=use_varlen_attn), |
|
batched=True, |
|
- num_proc=map_num_proc |
|
+ batch_size=25000, |
|
+ num_proc=1 |
|
) |
|
return dataset |
|
|
|
|
|
.. note:: |
|
由于 Alpaca 数据量较小,因此做了第一处修改将数据集大小扩大了 6 |
|
倍,以保证拥有足够的训练 iter 数(保证速度测试的稳定性)。另外,由于 |
|
Alpaca |
|
数据集每条数据的长度较短,因此在数据拼接的时候做了第二处修改以保证拥有足够多的数据,足以拼接为 |
|
``max_length`` 最大长度。 |
|
|
|
.. |image1| image:: https://github.com/InternLM/xtuner/assets/41630003/c9c05dbd-0806-4fb2-9da9-62f04b150f7c |
|
.. |image2| image:: https://github.com/InternLM/xtuner/assets/41630003/3ef6308c-595b-4624-b56d-a8737a1f2261 |
|
.. |image3| image:: https://github.com/InternLM/xtuner/assets/41630003/ba16368e-e5f7-41eb-89ed-1140a8633134 |
|
|