Instructions to use KexuanShi/Megatron-LM with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- NeMo
How to use KexuanShi/Megatron-LM with NeMo:
# tag did not correspond to a valid NeMo domain.
- Notebooks
- Google Colab
- Kaggle
| # Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. | |
| import warnings | |
| from megatron.core.fusions.fused_bias_dropout import get_bias_dropout_add | |
| from megatron.core.tensor_parallel.layers import ColumnParallelLinear, RowParallelLinear | |
| from megatron.core.transformer.attention import SelfAttention, SelfAttentionSubmodules | |
| from megatron.core.transformer.dot_product_attention import DotProductAttention | |
| from megatron.core.transformer.enums import AttnMaskType | |
| from megatron.core.transformer.identity_op import IdentityOp | |
| from megatron.core.transformer.mlp import MLP, MLPSubmodules | |
| from megatron.core.transformer.spec_utils import ModuleSpec | |
| from megatron.core.transformer.transformer_layer import TransformerLayer, TransformerLayerSubmodules | |
| try: | |
| import transformer_engine as te # pylint: disable=unused-import | |
| from megatron.core.extensions.transformer_engine import ( | |
| TEDotProductAttention, | |
| TELayerNormColumnParallelLinear, | |
| TERowParallelLinear, | |
| ) | |
| HAVE_TE = True | |
| except ImportError: | |
| HAVE_TE = False | |
| try: | |
| import apex # pylint: disable=unused-import | |
| from megatron.core.fusions.fused_layer_norm import FusedLayerNorm | |
| HAVE_APEX = True | |
| LNImpl = FusedLayerNorm | |
| except ImportError: | |
| from megatron.core.transformer.torch_norm import WrappedTorchNorm | |
| warnings.warn("Apex is not installed. Falling back to Torch Norm") | |
| LNImpl = WrappedTorchNorm | |
| HAVE_APEX = False | |
| def get_bert_layer_with_transformer_engine_spec(): | |
| """Use this spec to use lower-level Transformer Engine modules (required for fp8 training). | |
| Returns: | |
| ModuleSpec: Module specification with TE modules | |
| """ | |
| if not HAVE_TE: | |
| raise ImportError( | |
| "Transformer Engine is not installed. Please use local Bert layer spec instead." | |
| ) | |
| return ModuleSpec( | |
| module=TransformerLayer, | |
| submodules=TransformerLayerSubmodules( | |
| self_attention=ModuleSpec( | |
| module=SelfAttention, | |
| params={"attn_mask_type": AttnMaskType.padding}, | |
| submodules=SelfAttentionSubmodules( | |
| linear_qkv=TELayerNormColumnParallelLinear, | |
| core_attention=TEDotProductAttention, | |
| linear_proj=TERowParallelLinear, | |
| q_layernorm=IdentityOp, | |
| k_layernorm=IdentityOp, | |
| ), | |
| ), | |
| self_attn_bda=get_bias_dropout_add, | |
| mlp=ModuleSpec( | |
| module=MLP, | |
| submodules=MLPSubmodules( | |
| linear_fc1=TELayerNormColumnParallelLinear, linear_fc2=TERowParallelLinear | |
| ), | |
| ), | |
| mlp_bda=get_bias_dropout_add, | |
| ), | |
| ) | |
| def __getattr__(name): | |
| if name == "bert_layer_with_transformer_engine_spec": | |
| warnings.warn( | |
| """Attribute bert_layer_specs.bert_layer_with_transformer_engine_spec is on a | |
| deprecation track and will be removed in future releases. Please migrate to | |
| bert_layer_specs.get_bert_layer_with_transformer_engine_spec().""" | |
| ) | |
| return get_bert_layer_with_transformer_engine_spec() | |
| # Use this spec for an implementation using only modules in megatron core | |
| bert_layer_local_spec = ModuleSpec( | |
| module=TransformerLayer, | |
| submodules=TransformerLayerSubmodules( | |
| input_layernorm=LNImpl, | |
| self_attention=ModuleSpec( | |
| module=SelfAttention, | |
| params={"attn_mask_type": AttnMaskType.padding}, | |
| submodules=SelfAttentionSubmodules( | |
| linear_qkv=ColumnParallelLinear, | |
| core_attention=DotProductAttention, | |
| linear_proj=RowParallelLinear, | |
| q_layernorm=IdentityOp, | |
| k_layernorm=IdentityOp, | |
| ), | |
| ), | |
| self_attn_bda=get_bias_dropout_add, | |
| pre_mlp_layernorm=LNImpl, | |
| mlp=ModuleSpec( | |
| module=MLP, | |
| submodules=MLPSubmodules(linear_fc1=ColumnParallelLinear, linear_fc2=RowParallelLinear), | |
| ), | |
| mlp_bda=get_bias_dropout_add, | |
| sharded_state_dict_keys_map={ | |
| "input_layernorm.": "self_attention.linear_qkv.layer_norm_", | |
| "pre_mlp_layernorm.": "mlp.linear_fc1.layer_norm_", | |
| }, | |
| ), | |
| ) | |