Open-Llama icon indicating copy to clipboard operation
Open-Llama copied to clipboard

关于训练开销

Open leiwen83 opened this issue 1 year ago • 28 comments

请问你这边在finetune llama的时候,各个参数如7B,13B,30B各个节点所用资源的数量,有统计过吗? 比方单卡时gpu显存,cpu内存占用?八卡时gpu显存,cpu内存占用?

我现在发现全参数finetune的时候cpu内存占用特别厉害,不知道你这边有没有什么特别的优化没?

leiwen83 avatar Apr 26 '23 06:04 leiwen83

目前用8卡3090 instruction tuning,在256G上内存会直接爆掉。 accelerate launch --config_file configs/default_config.yaml instruction_tuning.py

这个可以限制gpu数量吗?

leiwen83 avatar Apr 26 '23 12:04 leiwen83

内存和cpu占用我倒是没特别研究过,我明天试试

s-JoL avatar Apr 26 '23 14:04 s-JoL

想问下这是因为7B模型比较小,所以没有使用TP和PP吗?有试过更大的模型吗?

suc16 avatar Apr 30 '23 14:04 suc16

想问下这是因为7B模型比较小,所以没有使用TP和PP吗?有试过更大的模型吗?

我测试设备是64cpu, 1600G memory, 8xA100-80G。 7B模型大约使用了33core,450G内存。 33B的模型,使用deepspeed stage3+offload+activation checkpoint在单机也可以训练,大约使用1.2T内存。 65B的我尝试会出现内存不足,我研究一下怎么优化。

s-JoL avatar May 01 '23 01:05 s-JoL

请问这些数据是训练的吗?如果全量finetune的时候,是不是也是要差不多? 如果采用lora finetune的话,相应的数据有吗?

leiwen83 avatar May 01 '23 02:05 leiwen83

请问这些数据是训练的吗?如果全量finetune的时候,是不是也是要差不多? 如果采用lora finetune的话,相应的数据有吗?

预训练和全量finetune应该是一样的,lora暂未测试过。

s-JoL avatar May 01 '23 03:05 s-JoL

batchsize 对于资源需求有比较大影响吗?比方b=1的时候和b=2的时候,相应的资源是线性增长的吗?

leiwen83 avatar May 01 '23 03:05 leiwen83

会有影响,但是不是线性的,尤其batch size比较小的时候,很多空间都存模型优化器那些参数了,去掉那些差不多是线性的。不同大小模型的结果我再测试完整补充到readme里

leiwen83 @.***> 于2023年5月1日周一 11:18写道:

batchsize 对于资源需求有比较大影响吗?比方b=1的时候和b=2的时候,相应的资源是线性增长的吗?

— Reply to this email directly, view it on GitHub https://github.com/s-JoL/Open-Llama/issues/22#issuecomment-1529303489, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEBJYUDXV7M4WVSYOQB3DWTXD4TRNANCNFSM6AAAAAAXL7UAUM . You are receiving this because you commented.Message ID: @.***>

s-JoL avatar May 02 '23 01:05 s-JoL

想问下这是因为7B模型比较小,所以没有使用TP和PP吗?有试过更大的模型吗?

我测试设备是64cpu, 1600G memory, 8xA100-80G。 7B模型大约使用了33core,450G内存。 33B的模型,使用deepspeed stage3+offload+activation checkpoint在单机也可以训练,大约使用1.2T内存。 65B的我尝试会出现内存不足,我研究一下怎么优化。

感谢,那看来单个DGX的上限在30B。还有个问题想请教下,你的20个节点之间网络通信速度怎么样,能满足ZeRO的需求吗?以及如果用流水线并行会不会降低通信的损失?

suc16 avatar May 02 '23 13:05 suc16

想问下这是因为7B模型比较小,所以没有使用TP和PP吗?有试过更大的模型吗?

我测试设备是64cpu, 1600G memory, 8xA100-80G。 7B模型大约使用了33core,450G内存。 33B的模型,使用deepspeed stage3+offload+activation checkpoint在单机也可以训练,大约使用1.2T内存。 65B的我尝试会出现内存不足,我研究一下怎么优化。

感谢,那看来单个DGX的上限在30B。还有个问题想请教下,你的20个节点之间网络通信速度怎么样,能满足ZeRO的需求吗?以及如果用流水线并行会不会降低通信的损失?

目前20节点用stage1训练过7B模型,和使用单节点是速度基本一致,没有因为网络通信下降。单节点测试过33B模型,使用stage3+offload+ckpt速度能达到630 token/s,比llama原文给出的360 token/s还快不少,需要再测试一下增多到20节点时速度是否还差不多。你说的流水线并行我不知道是指什么,因为这里没用到流水线并行。

s-JoL avatar May 04 '23 06:05 s-JoL

想问下这是因为7B模型比较小,所以没有使用TP和PP吗?有试过更大的模型吗?

我测试设备是64cpu, 1600G memory, 8xA100-80G。 7B模型大约使用了33core,450G内存。 33B的模型,使用deepspeed stage3+offload+activation checkpoint在单机也可以训练,大约使用1.2T内存。 65B的我尝试会出现内存不足,我研究一下怎么优化。

感谢,那看来单个DGX的上限在30B。还有个问题想请教下,你的20个节点之间网络通信速度怎么样,能满足ZeRO的需求吗?以及如果用流水线并行会不会降低通信的损失?

目前20节点用stage1训练过7B模型,和使用单节点是速度基本一致,没有因为网络通信下降。单节点测试过33B模型,使用stage3+offload+ckpt速度能达到630 token/s,比llama原文给出的360 token/s还快不少,需要再测试一下增多到20节点时速度是否还差不多。你说的流水线并行我不知道是指什么,因为这里没用到流水线并行。

感谢感谢,流水线并行是看原llama论文里说用了和《Reducing Activation Recomputation in Large Transformer Models》一样的方法,在想这里节点间的通信如果存在限制的话,会不会用流水线并行更好。看起来ZeRO的效果非常好,网络通信没成为瓶颈。

suc16 avatar May 04 '23 07:05 suc16

目前多机并行的时候,deepspeed用的管理器是pdsh还是用mpi?有遇到因为网络问题导致的不稳定问题吗?

leiwen83 avatar May 05 '23 12:05 leiwen83

应该是mpi,目前没遇到不稳定的

s-JoL avatar May 06 '23 11:05 s-JoL

想问下这是因为7B模型比较小,所以没有使用TP和PP吗?有试过更大的模型吗?

我测试设备是64cpu, 1600G memory, 8xA100-80G。 7B模型大约使用了33core,450G内存。 33B的模型,使用deepspeed stage3+offload+activation checkpoint在单机也可以训练,大约使用1.2T内存。 65B的我尝试会出现内存不足,我研究一下怎么优化。

感谢,那看来单个DGX的上限在30B。还有个问题想请教下,你的20个节点之间网络通信速度怎么样,能满足ZeRO的需求吗?以及如果用流水线并行会不会降低通信的损失?

目前20节点用stage1训练过7B模型,和使用单节点是速度基本一致,没有因为网络通信下降。单节点测试过33B模型,使用stage3+offload+ckpt速度能达到630 token/s,比llama原文给出的360 token/s还快不少,需要再测试一下增多到20节点时速度是否还差不多。你说的流水线并行我不知道是指什么,因为这里没用到流水线并行。

感谢感谢,流水线并行是看原llama论文里说用了和《Reducing Activation Recomputation in Large Transformer Models》一样的方法,在想这里节点间的通信如果存在限制的话,会不会用流水线并行更好。看起来ZeRO的效果非常好,网络通信没成为瓶颈。

已支持65B模型训练,具体训练速度已经更新在readme里,对于比较大的模型确实会比llama原文的慢一点,但是也差不了多少。应该还有优化空间

s-JoL avatar May 08 '23 14:05 s-JoL

请问65B模型训练的时候用了lora吗

hujunchao avatar May 09 '23 07:05 hujunchao

现在测试的结果都没用lora

s-JoL avatar May 09 '23 09:05 s-JoL

@s-JoL 请问下,模型是完全从头预训练的吗,还是继承llama的。如果是继承llama的话,相当于扩充了token embedding(加入中文的),然后再完全的全参数训练吗?

ShomyLiu avatar May 14 '23 08:05 ShomyLiu

请问一下,目前提供的65B的训练速度数据是单机运行的吗? 不知道有没有试过多机训练65B,速度是否还能线性扩展?

wysuperfly avatar May 14 '23 13:05 wysuperfly

我测试了1T内存,训练65b 模型 打开ckpt,仍然会爆内存, 请问您是哪里优化了之后,可以在1T内存下支持单机65b的训练呢?

ShomyLiu avatar May 14 '23 14:05 ShomyLiu

我测试了1T内存,训练65b 模型 打开ckpt,仍然会爆内存, 请问您是哪里优化了之后,可以在1T内存下支持单机65b的训练呢?

代码支持了从头训练和加载已有的全量finetune或者轻量化finetune。

抱歉,我这里测试使用的都是48卡进行的测试,我刚才又试了一下确实是单机用不了65B,最大只能用33B的。

s-JoL avatar May 14 '23 15:05 s-JoL

请问一下,目前提供的65B的训练速度数据是单机运行的吗? 不知道有没有试过多机训练65B,速度是否还能线性扩展?

这里数据已经都是48卡测试结果了。

s-JoL avatar May 14 '23 15:05 s-JoL

请问一下,目前提供的65B的训练速度数据是单机运行的吗? 不知道有没有试过多机训练65B,速度是否还能线性扩展?

这里数据已经都是48卡测试结果了。

您好,我也遇到了训练速度上不去的问题,4台机器32张A100-80G,大概是20 token/s/gpu,是网卡的问题吗,想请教下多机训练的时候网络带宽能达到多少啊?

TexasRangers86 avatar May 15 '23 15:05 TexasRangers86

请问一下,目前提供的65B的训练速度数据是单机运行的吗? 不知道有没有试过多机训练65B,速度是否还能线性扩展?

这里数据已经都是48卡测试结果了。

您好,我也遇到了训练速度上不去的问题,4台机器32张A100-80G,大概是20 token/s/gpu,是网卡的问题吗,想请教下多机训练的时候网络带宽能达到多少啊?

首先可以检查一下配置是否正确,是否使用gradient checkpoint并且batch size为12。 下面是一个我跑65B模型在wandb上的记录,可以对比一下看看。 image image image

s-JoL avatar May 15 '23 16:05 s-JoL

好的,感谢您的回复,我测试一下哈

TexasRangers86 avatar May 15 '23 16:05 TexasRangers86

GPU NVlink带宽在5G/s左右,PCIE带宽在2-3G/s,整机TCP+RDMA在12G/s左右。

s-JoL avatar May 15 '23 16:05 s-JoL

GPU NVlink带宽在5G/s左右,PCIE带宽在2-3G/s,整机TCP+RDMA在12G/s左右。

大佬,NVLINK的上限应该是单向300G/s吧(NV12),我用PCIE版本的单机zero3训练7B,用torch profiler看60+%的时间都在AllGather和ReduceScatter,感觉测的这个NVLINK带宽怎么有点低了。您是怎么测试带宽的?

suc16 avatar May 16 '23 01:05 suc16

GPU NVlink带宽在5G/s左右,PCIE带宽在2-3G/s,整机TCP+RDMA在12G/s左右。

大佬,NVLINK的上限应该是单向300G/s吧(NV12),我用PCIE版本的单机zero3训练7B,用torch profiler看60+%的时间都在AllGather和ReduceScatter,感觉测的这个NVLINK带宽怎么有点低了。您是怎么测试带宽的?

其实我不太会查看带宽相关的数据,这个是我用的机器自己提供的监控,可能不太准,请问您有什么方法测试么?我之前主要看的sm ocuupancy,感觉在20%以上的话速度就差不多

s-JoL avatar May 16 '23 04:05 s-JoL

GPU NVlink带宽在5G/s左右,PCIE带宽在2-3G/s,整机TCP+RDMA在12G/s左右。

大佬,NVLINK的上限应该是单向300G/s吧(NV12),我用PCIE版本的单机zero3训练7B,用torch profiler看60+%的时间都在AllGather和ReduceScatter,感觉测的这个NVLINK带宽怎么有点低了。您是怎么测试带宽的?

其实我不太会查看带宽相关的数据,这个是我用的机器自己提供的监控,可能不太准,请问您有什么方法测试么?我之前主要看的sm ocuupancy,感觉在20%以上的话速度就差不多

我查到 nvidia-smi nvlink -g 0 -i 0 应该可以查看,不过可能需要改下配置。(参考https://www.exxactcorp.com/blog/HPC/exploring-nvidia-nvlink-nvidia-smi-commands) https://github.com/gpuopenanalytics/pynvml/issues/19 用 nvidia-smi nvlink -s 可以看带宽上限,您可以试试?

suc16 avatar May 16 '23 06:05 suc16