Skip to content

[megatron] megatron remove num_samples#9522

Open
Jintao-Huang wants to merge 3 commits into
modelscope:mainfrom
Jintao-Huang:megatron_remove_num_samples
Open

[megatron] megatron remove num_samples#9522
Jintao-Huang wants to merge 3 commits into
modelscope:mainfrom
Jintao-Huang:megatron_remove_num_samples

Conversation

@Jintao-Huang

Copy link
Copy Markdown
Collaborator

No description provided.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request simplifies batch preparation and data collation by removing the num_samples parameter and instead deriving it dynamically from the length of seq_lens when packed_seq_params is present. While this cleanup streamlines the code, the review highlights a critical regression in get_last_tokens where packed_seq_params.num_samples is still accessed. Additionally, the feedback suggests adding safety checks when popping seq_lens from the batch and when accessing it within packed_seq_params to prevent potential KeyError or AttributeError exceptions.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +987 to +988
def _prepare_batch(self, data, vp_stage=None):
return prepare_batch(self.args, data, vp_stage=vp_stage)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The removal of num_samples from prepare_batch and packed_seq_params introduces a critical regression in get_last_tokens (lines 1015-1031 of this file), which is not modified in this PR but still relies on packed_seq_params.num_samples:

num_samples = num_samples or packed_seq_params.num_samples

Since packed_seq_params.num_samples is no longer set, this will raise an AttributeError or result in None, causing subsequent slicing operations like packed_seq_params.cu_seqlens_q[:num_samples] to fail.

Please update get_last_tokens to use len(packed_seq_params.seq_lens) instead:

num_samples = num_samples or len(packed_seq_params.seq_lens)

Comment thread swift/megatron/trainers/utils.py Outdated
Comment on lines +425 to +426
if packed_seq_params is not None:
num_samples = packed_seq_params.num_samples
num_samples = len(packed_seq_params.seq_lens)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

If packed_seq_params is not None but seq_lens was not set (e.g., if seq_lens was None in prepare_batch), accessing packed_seq_params.seq_lens will raise an AttributeError or TypeError when calling len(). It is safer to check if seq_lens is present and not None before calling len() on it, falling back to the else block if it is missing.

Suggested change
if packed_seq_params is not None:
num_samples = packed_seq_params.num_samples
num_samples = len(packed_seq_params.seq_lens)
if packed_seq_params is not None and getattr(packed_seq_params, 'seq_lens', None) is not None:
num_samples = len(packed_seq_params.seq_lens)

if num_samples is None:
num_samples = batch.pop('num_samples')
seq_lens = batch.pop('seq_lens', None)
seq_lens = batch.pop('seq_lens')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using batch.pop('seq_lens') without a default value will raise a KeyError if seq_lens is not present in the batch (for example, in custom data pipelines or testing environments). It is safer to use .pop('seq_lens', None) to handle missing keys gracefully.

Suggested change
seq_lens = batch.pop('seq_lens')
seq_lens = batch.pop('seq_lens', None)

@Jintao-Huang Jintao-Huang force-pushed the megatron_remove_num_samples branch from 823caf5 to 2cd141b Compare June 9, 2026 09:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant