Skip to content

Commit 2d2fce4

Browse files
authored
[Fix] fix te version compatibility (#25)
**Fix TransformerEngine version string compatibility** `get_te_version()` failed to correctly parse TE version strings in the format `0.1.0+te2.9.0`, which is common when TE is installed from non-standard sources. `PkgVersion` treats `+te2.9.0` as a local version identifier, causing version comparisons like `>= 2.9` to silently produce wrong results. **Changes:** Added a `parse_te_version_str()` helper that uses a regex to extract the actual version number from the `+te` suffix (e.g. `0.1.0+te2.9.0` → `2.9.0`) before passing it to `PkgVersion`, ensuring version-gated code paths behave correctly. **Scope:** `megatron/core/utils.py` — TE version detection only, no functional behavior change. **Raw error log** > [default0]:[rank0]: Traceback (most recent call last): [default5]:[rank5]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/model_provider.py", line 67, in model_provider [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/train_gpt.py", line 247, in <module> [default3]:[rank3]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/transformer_engine/pytorch/cpu_offload.py", line 700, in get_cpu_offload_context [default0]:[rank0]: pretrain( [default5]:[rank5]: return model_builder(args, pre_process, post_process, vp_stage, config=config, pg_collection=pg_collection) [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/training/training.py", line 911, in pretrain [default5]:[rank5]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [default0]:[rank0]: model, optimizer, opt_param_scheduler = setup_model_and_optimizer( [default3]:[rank3]: raise ValueError( [default0]:[rank0]: ^^^^^^^^^^^^^^^^^^^^^^^^^^ [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/training/training.py", line 1423, in setup_model_and_optimizer [default3]:[rank3]: ValueError: CPU Offloading is enabled while it is not mentioned what to offload (weights/activations) [default0]:[rank0]: model = get_model(model_provider_func, model_type) [default5]:[rank5]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/gpt_builders.py", line 88, in gpt_builder [default0]:[rank0]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/training/training.py", line 1193, in get_model [default0]:[rank0]: model = build_model() [default0]:[rank0]: ^^^^^^^^^^^^^ [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/training/training.py", line 1185, in build_model [default5]:[rank5]: model = GPTModel( [default5]:[rank5]: ^^^^^^^^^ [default0]:[rank0]: model = model_provider_func(pre_process=pre_process, post_process=post_process) [default5]:[rank5]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/megatron/core/models/gpt/gpt_model.py", line 204, in __init__ [default5]:[rank5]: self.decoder = TransformerBlock( [default5]:[rank5]: ^^^^^^^^^^^^^^^^^ [default5]:[rank5]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/megatron/core/transformer/transformer_block.py", line 321, in __init__ [default5]:[rank5]: get_cpu_offload_context( [default0]:[rank0]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [default5]:[rank5]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/megatron/core/extensions/transformer_engine.py", line 1928, in get_cpu_offload_context [default5]:[rank5]: context, sync_func = _get_cpu_offload_context( [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/model_provider.py", line 67, in model_provider [default5]:[rank5]: ^^^^^^^^^^^^^^^^^^^^^^^^^ [default5]:[rank5]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/transformer_engine/pytorch/cpu_offload.py", line 700, in get_cpu_offload_context [default0]:[rank0]: return model_builder(args, pre_process, post_process, vp_stage, config=config, pg_collection=pg_collection) [default5]:[rank5]: raise ValueError( [default5]:[rank5]: ValueError: CPU Offloading is enabled while it is not mentioned what to offload (weights/activations) [default0]:[rank0]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/flagscale/train/megatron/gpt_builders.py", line 88, in gpt_builder [default0]:[rank0]: model = GPTModel( [default0]:[rank0]: ^^^^^^^^^ [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/megatron/core/models/gpt/gpt_model.py", line 204, in __init__ [default0]:[rank0]: self.decoder = TransformerBlock( [default0]:[rank0]: ^^^^^^^^^^^^^^^^^ [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/megatron/core/transformer/transformer_block.py", line 321, in __init__ [default0]:[rank0]: get_cpu_offload_context( [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/megatron/core/extensions/transformer_engine.py", line 1928, in get_cpu_offload_context [default0]:[rank0]: context, sync_func = _get_cpu_offload_context( [default0]:[rank0]: ^^^^^^^^^^^^^^^^^^^^^^^^^ [default0]:[rank0]: File "/root/miniconda3/envs/flagscale-train/lib/python3.12/site-packages/transformer_engine/pytorch/cpu_offload.py", line 700, in get_cpu_offload_context [default0]:[rank0]: raise ValueError( [default0]:[rank0]: ValueError: CPU Offloading is enabled while it is not mentioned what to offload (weights/activations)
1 parent e6afd8e commit 2d2fce4

2 files changed

Lines changed: 14 additions & 4 deletions

File tree

megatron/core/package_info.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22

33

44
MAJOR = 0
5-
MINOR = 16
5+
MINOR = 1
66
PATCH = 0
7-
PRE_RELEASE = 'rc0'
7+
PRE_RELEASE = ''
8+
LOCAL = 'megatron0.15.0rc7'
89

910
# Use the following formatting: (major, minor, patch, pre-release)
1011
VERSION = (MAJOR, MINOR, PATCH, PRE_RELEASE)
1112

1213
__shortversion__ = '.'.join(map(str, VERSION[:3]))
13-
__version__ = '.'.join(map(str, VERSION[:3])) + ''.join(VERSION[3:])
14+
__version__ = '.'.join(map(str, VERSION[:3])) + ''.join(VERSION[3:]) + (f'+{LOCAL}' if LOCAL else '')
1415

1516
__package_name__ = 'megatron_core'
1617
__contact_names__ = 'NVIDIA'

megatron/core/utils.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,9 +327,18 @@ def get_te_version_str():
327327
else:
328328
return version("transformer-engine")
329329

330+
def parse_te_version_str(ver_str):
331+
import re
332+
333+
# Handle versions like "0.1.0+te2.9.0" — extract the part after "+te"
334+
match = re.search(r'\+te(\d+\.\d+.*)', ver_str)
335+
if match:
336+
return match.group(1)
337+
return ver_str
338+
330339
global _te_version
331340
if _te_version is None and HAVE_TE:
332-
_te_version = PkgVersion(get_te_version_str())
341+
_te_version = PkgVersion(parse_te_version_str(get_te_version_str()))
333342
return _te_version
334343

335344

0 commit comments

Comments
 (0)