Unexpected result nan?
- Dominant language
- Python
- Stars
- 3.4k
- Forks
- 312
- Avg merge
- 1h 2m
- Merged PRs (30d)
- 2
Description
我正常训练过程中发生nan情况,数据没有问题,如何解决呢(我测试了不同版本的sft模型:pf32,bf16等)?(重新启动resume,仍然在step205左右nan)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m [2025-10-11 11:16:52] [decorator.py (306)] [ERROR] [actor_train-1 1 / 8][PID 18175] Traceback (most recent call last):
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/checkpoint/binary/train_package/roll/distributed/scheduler/decorator.py", line 295, in inner
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m result = func(*args, **kwargs)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/checkpoint/binary/train_package/roll/pipeline/base_worker.py", line 104, in train_step
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m pg_metrics = self.strategy.train_step(batch=data, loss_func=self.loss_func)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/checkpoint/binary/train_package/roll/distributed/strategy/megatron_strategy.py", line 454, in train_step
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m metrics_tensors: List[Dict[str, "torch.Tensor"]] = self.forward_backward_func(
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/pipeline_parallel/schedules.py", line 535, in forward_backward_no_pipelining
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m backward_step(input_tensor, output_tensor, output_tensor_grad, model_type, config)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/pipeline_parallel/schedules.py", line 409, in backward_step
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m custom_backward(output_tensor[0], output_tensor_grad[0])
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/pipeline_parallel/schedules.py", line 160, in custom_backward
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m Variable._execution_engine.run_backward(
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/opt/conda/envs/python3.10.13/lib/python3.10/site-packages/torch/autograd/function.py", line 307, in apply
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m return user_fn(self, *args)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/tensor_parallel/random.py", line 469, in backward
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m torch.autograd.backward(outputs, args)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/opt/conda/envs/python3.10.13/lib/python3.10/site-packages/torch/autograd/__init__.py", line 347, in backward
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m _engine_run_backward(
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/opt/conda/envs/python3.10.13/lib/python3.10/site-packages/torch/autograd/graph.py", line 823, in _engine_run_backward
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m return Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/distributed/distributed_data_parallel.py", line 510, in hook
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m self.param_to_bucket_group[param].register_grad_ready(param)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/distributed/param_and_grad_buffer.py", line 450, in register_grad_ready
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m self.start_grad_sync()
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/distributed/param_and_grad_buffer.py", line 305, in start_grad_sync
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m self.check_grads(
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/distributed/param_and_grad_buffer.py", line 177, in check_grads
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m rerun_state_machine.validate_result(
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m File "/root/.local/lib/python3.10/site-packages/megatron/core/rerun_state_machine.py", line 505, in validate_result
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m raise RuntimeError(full_message)
[36m(ActorWorker(actor_train-1) pid=18175, ip=33.199.184.82)[0m RuntimeError: Rank 1, node c68f01266.ea119, device 0, iteration -1: Unexpected result nan (message='found NaN in local grad norm for bucket #0 in backward pass before data-parallel communication collective')
Contributor guide
No contributing guide indexed for this repository
Research direction
Start at pipeline/base_worker.py:104 and distributed/strategy/megatron_strategy.py:454, then follow the traceback into Megatron's backward pass and gradient validation. Reproduce the run around step 205 and determine where the local gradient norm first becomes NaN; done means identifying a reproducible cause and confirming training no longer fails there.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, pytorch
- Domain
- distributed-systems, machine-learning
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100