OpenMOSS / CoLLiE

Collaborative Training of Large Language Models in an Efficient Way
https://openlmlab-collie.readthedocs.io
Apache License 2.0
410 stars 58 forks source link

使用的Megatron-LM的版本 #126

Closed liaosnow closed 1 year ago

liaosnow commented 1 year ago

examples下的alpaca/train.py,使用到了Megatron-LM,用最新的Megatron-LM版本运行会报错。 修改源码绕开报错后,跑数据并行和张量并行的loss都为NAN。 可以提供一下Megatron-LM使用的版本吗。

KaiLv69 commented 1 year ago

你好,megatron-core=0.2.0经过测试可以使用。BTW,新版本的报错是什么,方便贴个图吗?

liaosnow commented 1 year ago

[EXTERNAL EMAIL] 我用的Megatron-LM是拉的最新代码,然后用的Megatron-LM里的megatron.core。 下面是报错信息。 Traceback (most recent call last): File "alpaca/train.py", line 75, in model = LlamaForCausalLM.from_config(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/base.py", line 151, in from_config model.init(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/llama/model.py", line 253, in init self.embed_tokens = tensor_parallel.VocabParallelEmbedding( TypeError: init() missing 2 required keyword-only arguments: 'init_method' and 'config' Traceback (most recent call last): File "alpaca/train.py", line 75, in model = LlamaForCausalLM.from_config(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/base.py", line 151, in from_config model.init(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/llama/model.py", line 253, in init self.embed_tokens = tensor_parallel.VocabParallelEmbedding( TypeError: init() missing 2 required keyword-only arguments: 'init_method' and 'config' Traceback (most recent call last): File "alpaca/train.py", line 75, in model = LlamaForCausalLM.from_config(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/base.py", line 151, in from_config model.init(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/llama/model.py", line 253, in init self.embed_tokens = tensor_parallel.VocabParallelEmbedding( TypeError: init() missing 2 required keyword-only arguments: 'init_method' and 'config' Traceback (most recent call last): File "alpaca/train.py", line 75, in model = LlamaForCausalLM.from_config(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/base.py", line 151, in from_config model.init(config) File "/home/sse-ard/ljl/collie_gpu/collie/models/llama/model.py", line 253, in init self.embed_tokens = tensor_parallel.VocabParallelEmbedding( TypeError: init() missing 2 required keyword-only arguments: 'init_method' and 'config'

以下是我的修改方式,把涉及megatron.core调用的都要加这两个:config=config, init_method=config.init_method,就能运行,纯数据并行下loss nan,能运行。加张量并行会loss nan,然后挂掉。

class LlamaForCausalLM(CollieModelForCausalLM):

def __init__(self, config: CollieConfig) -> None:
    super().__init__(config)
    self.embed_tokens = tensor_parallel.VocabParallelEmbedding(
        self.collie_config.vocab_size,
        self.collie_config.hidden_size
        config=config, init_method=config.init_method
    )

你好,megatron-core=0.2.0经过测试可以使用。BTW,新版本的报错是什么,方便贴个图吗?

liaosnow commented 1 year ago

使用megatron-core=0.2.0后,在main分支下运行examples下的alpaca/train.py,数据并行、张量并行和流水并行都能正常运行,但是loss都为NAN。请问这是代码存在问题吗,还是我的运行方式有问题呢? @KaiLv69

KaiLv69 commented 1 year ago

请尝试一下dev分支的代码,里面修复了一些main分支存在的问题。

liaosnow commented 1 year ago

谢谢!已经可以正常运行起来了。

yueg-security commented 11 months ago

你好,dev分支下,adalomo优化器,megatron-core=0.2.0,可以使用,但是训练loss都为NAN,请问可能是什么问题呢?谢谢

KaiLv69 commented 11 months ago

你好,dev分支下,adalomo优化器,megatron-core=0.2.0,可以使用,但是训练loss都为NAN,请问可能是什么问题呢?谢谢

可以尝试把传入AdaLomo的loss_scale从2**10调小点,比如到2**6

yueg-security commented 11 months ago

你好,dev分支下,adalomo优化器,megatron-core=0.2.0,可以使用,但是训练loss都为NAN,请问可能是什么问题呢?谢谢

可以尝试把传入AdaLomo的loss_scale从2**10调小点,比如到2**6

谢谢回复,但是loss_scale从2**10调到2**6或者2**4的情况下,loss也不太正常,大概十几个step迅速降到0以后就不再变化了…

yueg-security commented 11 months ago

谢谢!已经可以正常运行起来了。

您有遇到过这种情况嘛?训练loss是正常的嘛?

liaosnow commented 11 months ago

谢谢!已经可以正常运行起来了。

您有遇到过这种情况嘛?训练loss是正常的嘛?

还没使用adalomo优化器跑过,所以不太清楚你这种状况,用adam是正常的。 看你修改了loss-scale有现象的改变,你可以试试先不用混精跑看看正不正常,排除下混精的影响。混精的动态loss-scale一般降到1就容易溢出导致NAN,看你这loss降到0,可能代码对溢出有啥处理变成0了。用fp32试试看。

yueg-security commented 11 months ago

谢谢!已经可以正常运行起来了。

您有遇到过这种情况嘛?训练loss是正常的嘛?

还没使用adalomo优化器跑过,所以不太清楚你这种状况,用adam是正常的。 看你修改了loss-scale有现象的改变,你可以试试先不用混精跑看看正不正常,排除下混精的影响。混精的动态loss-scale一般降到1就容易溢出导致NAN,看你这loss降到0,可能代码对溢出有啥处理变成0了。用fp32试试看。

感谢!但是奇怪的是用fp32也是一样的现象…