megatron-core 0.16.0rc0.dev101856__tar.gz → 0.16.0rc0.dev102154__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/PKG-INFO +1 -1
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_pad_routing_map.py +4 -1
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/attention_context/mamba_metadata.py +21 -1
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/dynamic_block_allocator.py +2 -2
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/dynamic_context.py +52 -63
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/engines/dynamic_engine.py +96 -72
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/engines/static_engine.py +7 -2
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/utils.py +55 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/package_info.py +1 -1
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/parallel_state.py +1 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/mamba_block.py +1 -55
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/mamba_layer.py +2 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/mamba_mixer.py +12 -10
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/attention.py +26 -3
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/moe_utils.py +8 -3
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/router.py +14 -6
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/token_dispatcher.py +3 -1
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/utils.py +122 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron_core.egg-info/PKG-INFO +1 -1
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/MANIFEST.in +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/README.md +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/README.md +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/activations.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/config_logger.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/bert_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/blended_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/blended_megatron_dataset_builder.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/blended_megatron_dataset_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/gpt_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/helpers.cpp +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/helpers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/indexed_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/masked_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/megatron_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/megatron_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/multimodal_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/object_storage_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/config/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/config/bert_embedders.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/config/config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/config/gpt_chunk_datasets.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/config/tokenizers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/db/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/db/build.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/db/dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/db/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/external_libs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/build.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/factory.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/index.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/indexes/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/indexes/faiss_base.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/indexes/faiss_par_add.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/index/validate.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/query/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/query/gpt_chunk_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/query/multi_split_gpt_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/query/query.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/query/retro_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/query/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/retro/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/t5_dataset.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/datasets/utils_s3.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/core.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/dict_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/exchange_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/mapping.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/optimizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/serialization.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/state_dict_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/async_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/base.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/cached_metadata_filesystem_reader.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/checkpointable.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/common.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/filesystem_async.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/fully_parallel.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/resharding.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/state_dict_saver.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/tensorstore.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/torch.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/two_stage.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/strategies/zarr.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/tensor_aware_state_dict.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/dist_checkpointing/validation.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/data_parallel_base.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/distributed_data_parallel.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/distributed_data_parallel_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/finalize_model_grads.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/mcore_fsdp_adapter.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/distributed_data_parallel_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/fully_shard.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/megatron_fsdp.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/package_info.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/param_and_grad_buffer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/uneven_dtensor.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/fsdp/src/megatron_fsdp/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/param_and_grad_buffer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/reduce_scatter_with_fp32_accumulation.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/torch_fully_sharded_data_parallel.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/distributed/torch_fully_sharded_data_parallel_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/energy_monitor.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/enums.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/data_type.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/export_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/model_type.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/engine_builder/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/engine_builder/trtllm_engine_builder.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/model_to_trllm_mapping/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/model_to_trllm_mapping/default_conversion_dict.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trt_model_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trt_model_type.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trtllm_helper.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trtllm_layers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trtllm_weights_converter/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trtllm_weights_converter/distributed_trtllm_model_weights_converter.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trtllm_weights_converter/single_device_trtllm_model_weights_converter.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/export/trtllm/trtllm_weights_converter/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/extensions/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/extensions/kitchen.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/extensions/transformer_engine.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/extensions/transformer_engine_spec_provider.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fp4_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fp8_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/full_cuda_graph.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_bias_dropout.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_bias_geglu.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_bias_gelu.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_bias_swiglu.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_cross_entropy.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_indices_converter.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_layer_norm.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_mla_yarn_rope_apply.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_softmax.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/fusions/fused_weighted_squared_relu.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/hyper_comm_grid.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/async_stream.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/common_inference_params.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/communication_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/attention_context/metadata_base.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/attention_context/mha_metadata.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/base_context.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/fused_kv_append_kernel.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/contexts/static_context.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/data_parallel_inference_coordinator.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/engines/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/engines/abstract_engine.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/engines/mcore_engine.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/headers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/inference_client.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/inference_request.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/abstract_model_inference_wrapper.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/gpt/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/gpt/gpt_inference_wrapper.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/inference_wrapper_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/multimodal/vlm_inference_wrapper.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/t5/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/model_inference_wrappers/t5/t5_inference_wrapper.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/sampling_params.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/scheduler.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_controllers/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_controllers/encoder_decoder_text_generation_controller.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_controllers/simple_text_generation_controller.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_controllers/text_generation_controller.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_controllers/vlm_text_generation_controller.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_server/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_server/endpoints/common.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_server/endpoints/completions.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_server/run_mcore_engine.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_server/text_generation_server.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/text_generation_server/tokenization.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference/unified_memory.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/inference_params.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/jit.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/model_parallel_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/T5/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/T5/t5_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/T5/t5_spec.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/backends.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/bert/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/bert/bert_layer_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/bert/bert_lm_head.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/bert/bert_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/bert/pooler.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/embeddings/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/embeddings/language_model_embedding.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/embeddings/relative_pos_embedding.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/embeddings/rope_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/embeddings/rotary_pos_embedding.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/embeddings/yarn_rotary_pos_embedding.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/language_module/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/language_module/language_module.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/model_chunk_schedule_plan.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/vision_module/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/common/vision_module/vision_module.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/gpt/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/gpt/fine_grained_callables.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/gpt/gpt_layer_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/gpt/gpt_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/gpt/heterogeneous/heterogeneous_layer_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/gpt/moe_module_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/huggingface/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/huggingface/clip_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/huggingface/module.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/huggingface/qwen_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mamba/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mamba/mamba_layer_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mamba/mamba_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/config/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/config/base_configs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/model/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/model/base.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/submodules/audio.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/submodules/base.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/mimo/submodules/vision.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/multimodal/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/multimodal/context_parallel.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/multimodal/llava_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/multimodal/llava_spec.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/base_attention.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/decoder_attention.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/decoder_spec.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/encoder_attention.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/encoder_spec.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/retro/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/vision/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/vision/clip_vit_model.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/vision/multimodal_projector.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/vision/radio.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/models/vision/vit_layer_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/msc_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/nccl_allocator.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/num_microbatches_calculator.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/clip_grads.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/cpu_offloading/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/cpu_offloading/hybrid_optimizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/distrib_optimizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/grad_scaler.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/optimizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer/optimizer_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/optimizer_param_scheduler.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/packed_seq_params.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/pipeline_parallel/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/pipeline_parallel/bridge_communicator.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/pipeline_parallel/combined_1f1b.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/pipeline_parallel/p2p_communication.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/pipeline_parallel/schedules.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/pipeline_parallel/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/modelopt/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/modelopt/gpt/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/modelopt/gpt/model_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/modelopt/gpt/state_dict_hooks.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/modelopt/layers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/modelopt/mamba/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/post_training/modelopt/mamba/model_specs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/process_groups_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/quantization/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/quantization/quant_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/quantization/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/requirements.txt +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/rerun_state_machine.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/safe_globals.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/mamba_context_parallel.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/mamba_hybrid_layer_allocation.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/mlp_layer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/ssm/triton_cache_manager.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/cross_entropy.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/data.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/inference_layers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/layers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/mappings.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/random.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tensor_parallel/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/timers.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/base_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/megatron_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/abstract_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/bytelevel_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/chat_template.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/huggingface_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/megatron_hf_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/null_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/sentencepiece_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/libraries/tiktoken_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/models/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/models/bert_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/models/default_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/models/gpt_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/models/mamba_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/models/retro_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/models/t5_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/text_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/tokenizers/text/utils/build_tokenizer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/cuda_graphs.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/custom_layers/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/custom_layers/transformer_engine.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/dot_product_attention.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/enums.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/fsdp_dtensor_checkpoint.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/heterogeneous/heterogeneous_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/heterogeneous/linear_replacements.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/identity_op.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/mlp.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/module.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/__init__.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/experts.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/fused_a2a.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/grouped_gemm_util.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/moe_layer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/shared_experts.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/moe/upcycling_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/multi_latent_attention.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/multi_token_prediction.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/pipeline_parallel_layer_layout.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/spec_utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/torch_layer_norm.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/torch_norm.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/transformer_block.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/transformer_config.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/transformer_layer.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron/core/transformer/utils.py +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron_core.egg-info/SOURCES.txt +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron_core.egg-info/dependency_links.txt +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron_core.egg-info/requires.txt +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/megatron_core.egg-info/top_level.txt +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/pyproject.toml +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/setup.cfg +0 -0
- {megatron_core-0.16.0rc0.dev101856 → megatron_core-0.16.0rc0.dev102154}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: megatron-core
|
|
3
|
-
Version: 0.16.0rc0.
|
|
3
|
+
Version: 0.16.0rc0.dev102154
|
|
4
4
|
Summary: Megatron Core - a library for efficient and scalable training of transformer based models
|
|
5
5
|
Author-email: NVIDIA <nemo-toolkit@nvidia.com>
|
|
6
6
|
Maintainer-email: NVIDIA <nemo-toolkit@nvidia.com>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
# Copyright (c) 2025
|
|
1
|
+
# Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
|
|
2
3
|
from unittest.mock import MagicMock
|
|
3
4
|
|
|
4
5
|
import torch
|
|
5
6
|
from packaging import version
|
|
6
7
|
|
|
8
|
+
from megatron.core.jit import jit_fuser
|
|
7
9
|
from megatron.core.utils import experimental_fn, null_decorator
|
|
8
10
|
|
|
9
11
|
try:
|
|
@@ -69,6 +71,7 @@ def _pad_routing_map_kernel(
|
|
|
69
71
|
|
|
70
72
|
|
|
71
73
|
@experimental_fn(introduced_with_version="0.13.0")
|
|
74
|
+
@jit_fuser
|
|
72
75
|
def fused_pad_routing_map(routing_map: torch.Tensor, pad_multiple: int) -> torch.Tensor:
|
|
73
76
|
"""Fused version of pad_routing_map.
|
|
74
77
|
Args:
|
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
# Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import List, Optional, Tuple
|
|
5
|
+
|
|
3
6
|
import torch
|
|
4
7
|
|
|
5
8
|
|
|
9
|
+
@dataclass
|
|
10
|
+
class MambaInferenceStateConfig:
|
|
11
|
+
"""Config for initializing Mamba model inference state tensors."""
|
|
12
|
+
|
|
13
|
+
layer_type_list: List[str]
|
|
14
|
+
"""
|
|
15
|
+
A list of strings that indicates the layer type (Mamba / Attention / MLP) for each layer.
|
|
16
|
+
See `megatron/core/ssm/mamba_hybrid_layer_allocation.py` for the list of symbols.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
mamba_conv_states_shape: Tuple[int]
|
|
20
|
+
"""Mamba conv states shape per request."""
|
|
21
|
+
|
|
22
|
+
mamba_ssm_states_shape: Tuple[int]
|
|
23
|
+
"""Mamba ssm states shape per request."""
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
class MambaMetadata:
|
|
7
27
|
"""Manages the metadata tensors required for Mamba layers during inference."""
|
|
8
28
|
|
|
@@ -64,7 +84,7 @@ class MambaMetadata:
|
|
|
64
84
|
"""
|
|
65
85
|
self.request_to_mamba_state_idx_cudagraph_only[0:num_active_requests] = active_mamba_indices
|
|
66
86
|
|
|
67
|
-
def allocate_slot(self) -> int:
|
|
87
|
+
def allocate_slot(self) -> Optional[int]:
|
|
68
88
|
"""
|
|
69
89
|
Allocates a new slot for a request in the Mamba state buffers.
|
|
70
90
|
|
|
@@ -21,11 +21,11 @@ class BlockAllocator:
|
|
|
21
21
|
space for paused requests that live on the CPU.
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
|
-
def __init__(self, context: "DynamicInferenceContext",
|
|
24
|
+
def __init__(self, context: "DynamicInferenceContext", total_count: int):
|
|
25
25
|
|
|
26
26
|
self.context = context
|
|
27
27
|
|
|
28
|
-
active_count
|
|
28
|
+
active_count = (total_count - 1) // 2 # -1 for dummy_block_idx (see below)
|
|
29
29
|
active_count = max(1, active_count) # need at least one block
|
|
30
30
|
self.total_count = 2 * active_count + 1 # +1 for dummy_block_idx
|
|
31
31
|
self.total_avail = self.total_count - 1 # -1 for dummy_block_idx
|
|
@@ -24,14 +24,11 @@ from megatron.core.inference.unified_memory import (
|
|
|
24
24
|
from megatron.core.inference.utils import tensor_swap
|
|
25
25
|
from megatron.core.models.common.embeddings.rope_utils import apply_rotary_pos_emb
|
|
26
26
|
from megatron.core.package_info import __version__ as mcore_version
|
|
27
|
-
from megatron.core.ssm.mamba_hybrid_layer_allocation import
|
|
28
|
-
Symbols,
|
|
29
|
-
get_layer_maps_from_layer_type_list,
|
|
30
|
-
)
|
|
27
|
+
from megatron.core.ssm.mamba_hybrid_layer_allocation import get_layer_maps_from_layer_type_list
|
|
31
28
|
from megatron.core.transformer import TransformerConfig
|
|
32
29
|
from megatron.core.utils import divide as core_divide
|
|
33
30
|
|
|
34
|
-
from .attention_context.mamba_metadata import MambaMetadata
|
|
31
|
+
from .attention_context.mamba_metadata import MambaInferenceStateConfig, MambaMetadata
|
|
35
32
|
from .attention_context.mha_metadata import GraphedMHAMetadata, NonGraphedMHAMetadata
|
|
36
33
|
from .base_context import BaseInferenceContext
|
|
37
34
|
from .dynamic_block_allocator import BlockAllocator
|
|
@@ -202,37 +199,23 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
202
199
|
arbitrary sequence length may be added, paused, or removed from the context
|
|
203
200
|
at any step. The only constraint is the maximum number of requests or tokens
|
|
204
201
|
that the context is defined to support. For the block-level KV cache, a memory
|
|
205
|
-
buffer is allocated up front (size `
|
|
202
|
+
buffer is allocated up front (size `buffer_size_gb` if `unified_memory_level`
|
|
203
|
+
== 0, or `2 * buffer_size_gb` if `unified_memory_level` == 1), that is
|
|
206
204
|
divided into blocks and dynamically assigned to requests. At any given step,
|
|
207
205
|
any unassigned blocks equate to unused space.
|
|
208
206
|
|
|
209
|
-
Additionally, a fraction of the memory buffer (`gtd_request_fraction`, i.e.,
|
|
210
|
-
the 'guaranteed' request fraction) is reserved for guaranteeing that a
|
|
211
|
-
minimum number of active requests may continue to generate tokens on any step.
|
|
212
|
-
The reason for this is that the context manages two pools of requests: 1)
|
|
213
|
-
active requests, and 2) paused requests. Paused requests are requests where
|
|
214
|
-
insufficient memory blocks remain for future assignment, and these requests
|
|
215
|
-
are set aside until enough memory blocks are available. Active requests are
|
|
216
|
-
requests that have sufficient memory blocks to proceed with their generations.
|
|
217
|
-
|
|
218
|
-
The situation can arise where all requests eventually become paused due to all
|
|
219
|
-
memory blocks being assigned. In this case, there are no active requests and
|
|
220
|
-
thus no progress can be made. To handle this case, a fraction of the memory
|
|
221
|
-
buffer is reserved that only allows active requests, and no paused requests.
|
|
222
|
-
This fraction must be carefully tuned, as it can have an order of magnitude
|
|
223
|
-
impact on overall latency.
|
|
224
|
-
|
|
225
207
|
Args:
|
|
226
208
|
params_dtype (torch.dtype): Dtype used for KV cache.
|
|
227
|
-
num_layers (int): Number of layers.
|
|
209
|
+
num_layers (int): Number of layers on this pipeline parallel rank.
|
|
228
210
|
kv_channels (int): Hidden dimension per attention head.
|
|
229
211
|
num_attention_heads (int): Number of attention heads.
|
|
230
212
|
max_sequence_length (int): Max possible sequence length (prompt + output)
|
|
231
213
|
that will occur.
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
214
|
+
buffer_size_gb (float): Buffer size reserved on the GPU for the KV cache.
|
|
215
|
+
if `unified_memory_level` >= 1, then CPU memory is additionally
|
|
216
|
+
utilized, resulting in a total buffer size of `2 * buffer_size_gb`.
|
|
217
|
+
Regardless of total buffer size, the KV cache is conceptually divided
|
|
218
|
+
into 50% active requests and 50% paused requests.
|
|
236
219
|
max_tokens (int): Max number of tokens to use for forward passes. This is
|
|
237
220
|
primarily limited by prefill activation memory usage. (Defaults to
|
|
238
221
|
16384).
|
|
@@ -245,14 +228,8 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
245
228
|
materialize_only_last_token_logits (Optional[bool]): Whether to only
|
|
246
229
|
materialize logits for the last token. This should be set to False
|
|
247
230
|
if returning log probs.
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
See `megatron/core/ssm/mamba_hybrid_layer_allocation.py` for the list
|
|
251
|
-
of symbols. This must be provided for hybrid models.
|
|
252
|
-
mamba_conv_states_shape: (Optional[Tuple[int]]): Mamba conv states shape per request.
|
|
253
|
-
This must be provided for hybrid models.
|
|
254
|
-
mamba_ssm_states_shape: (Optional[Tuple[int]]): Mamba ssm states shape per request.
|
|
255
|
-
This must be provided for hybrid models.
|
|
231
|
+
mamba_inference_state_config (Optional[MambaInferenceStateConfig]): The Mamba
|
|
232
|
+
inference state config if the model is a hybrid model.
|
|
256
233
|
use_cuda_graphs_for_non_decode_steps (bool): If True, use cuda graphs for non-decode
|
|
257
234
|
engine steps.
|
|
258
235
|
unified_memory_level (Optional[int]): Set unified memory usage within the
|
|
@@ -279,7 +256,7 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
279
256
|
kv_channels: int,
|
|
280
257
|
num_attention_heads: int,
|
|
281
258
|
max_sequence_length: int,
|
|
282
|
-
|
|
259
|
+
buffer_size_gb: float,
|
|
283
260
|
max_tokens: int = DEFAULT_MAX_TOKENS,
|
|
284
261
|
block_size_tokens: int = 256,
|
|
285
262
|
tensor_model_parallel_size: Optional[int] = None,
|
|
@@ -288,9 +265,7 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
288
265
|
qk_pos_emb_head_dim: Optional[int] = None,
|
|
289
266
|
num_cuda_graphs: Optional[int] = None,
|
|
290
267
|
materialize_only_last_token_logits: Optional[bool] = True,
|
|
291
|
-
|
|
292
|
-
mamba_conv_states_shape: Optional[Tuple[int]] = None,
|
|
293
|
-
mamba_ssm_states_shape: Optional[Tuple[int]] = None,
|
|
268
|
+
mamba_inference_state_config: Optional[MambaInferenceStateConfig] = None,
|
|
294
269
|
use_cuda_graphs_for_non_decode_steps: bool = True,
|
|
295
270
|
use_flashinfer_fused_rope: bool = False,
|
|
296
271
|
unified_memory_level: Optional[int] = 1,
|
|
@@ -317,8 +292,10 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
317
292
|
self.num_attention_heads_per_partition = core_divide(num_attention_heads, tp_size)
|
|
318
293
|
|
|
319
294
|
# Mamba states.
|
|
320
|
-
self.is_hybrid_model =
|
|
295
|
+
self.is_hybrid_model = mamba_inference_state_config is not None
|
|
321
296
|
if self.is_hybrid_model:
|
|
297
|
+
mamba_conv_states_shape = mamba_inference_state_config.mamba_conv_states_shape
|
|
298
|
+
mamba_ssm_states_shape = mamba_inference_state_config.mamba_ssm_states_shape
|
|
322
299
|
assert (
|
|
323
300
|
mamba_conv_states_shape is not None
|
|
324
301
|
), "`mamba_conv_states_shape` must be specified for hybrid models"
|
|
@@ -333,7 +310,7 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
333
310
|
# corresponding attention layer index or Mamba layer index depending on the
|
|
334
311
|
# layer type.
|
|
335
312
|
attention_layer_map, mamba_layer_map, _, _ = get_layer_maps_from_layer_type_list(
|
|
336
|
-
layer_type_list
|
|
313
|
+
mamba_inference_state_config.layer_type_list
|
|
337
314
|
)
|
|
338
315
|
self.num_attention_layers = len(attention_layer_map)
|
|
339
316
|
self.num_mamba_layers = len(mamba_layer_map)
|
|
@@ -359,7 +336,10 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
359
336
|
# one vector c_t (rank) + optional RoPE phase slice
|
|
360
337
|
self.kv_reduced_dim = kv_lora_rank + qk_pos_emb_head_dim
|
|
361
338
|
self.block_size_bytes = (
|
|
362
|
-
dtype_size_bytes
|
|
339
|
+
dtype_size_bytes
|
|
340
|
+
* num_attention_layers
|
|
341
|
+
* self.block_size_tokens
|
|
342
|
+
* self.kv_reduced_dim
|
|
363
343
|
)
|
|
364
344
|
else:
|
|
365
345
|
self.block_size_bytes = (
|
|
@@ -379,14 +359,29 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
379
359
|
mamba_states_memory_per_request *= self.num_mamba_layers
|
|
380
360
|
mamba_states_memory_per_request *= dtype_size_bytes
|
|
381
361
|
|
|
362
|
+
# Unified memory.
|
|
363
|
+
self.unified_memory_level = unified_memory_level
|
|
364
|
+
if unified_memory_level > 0:
|
|
365
|
+
try:
|
|
366
|
+
self.unified_memory_mempool = create_unified_mempool()
|
|
367
|
+
except UnifiedMemoryUnsupportedError:
|
|
368
|
+
if torch.distributed.get_rank() == 0:
|
|
369
|
+
warnings.warn(
|
|
370
|
+
"Unified memory requested but not available; defaulting to GPU memory."
|
|
371
|
+
)
|
|
372
|
+
self.unified_memory_level = 0
|
|
373
|
+
|
|
382
374
|
# Initialize block allocator.
|
|
383
|
-
|
|
384
|
-
|
|
375
|
+
buffer_size_bytes = int(buffer_size_gb * 1024**3)
|
|
376
|
+
block_count_total = buffer_size_bytes // (
|
|
385
377
|
self.block_size_bytes + mamba_states_memory_per_request
|
|
386
378
|
)
|
|
387
|
-
self.block_allocator = BlockAllocator(
|
|
388
|
-
|
|
389
|
-
|
|
379
|
+
self.block_allocator = BlockAllocator(
|
|
380
|
+
context=self,
|
|
381
|
+
total_count=(
|
|
382
|
+
block_count_total if self.unified_memory_level == 0 else 2 * block_count_total
|
|
383
|
+
),
|
|
384
|
+
)
|
|
390
385
|
|
|
391
386
|
# Set max_total_requests, max_active_requests, max_tokens.
|
|
392
387
|
self.max_total_requests = self.block_allocator.total_count - 1 # -1 for dummy block
|
|
@@ -408,18 +403,6 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
408
403
|
self.params_dtype = params_dtype
|
|
409
404
|
self.max_sequence_length = max_sequence_length
|
|
410
405
|
|
|
411
|
-
# Unified memory.
|
|
412
|
-
self.unified_memory_level = unified_memory_level
|
|
413
|
-
if unified_memory_level > 0:
|
|
414
|
-
try:
|
|
415
|
-
self.unified_memory_mempool = create_unified_mempool()
|
|
416
|
-
except UnifiedMemoryUnsupportedError:
|
|
417
|
-
if torch.distributed.get_rank() == 0:
|
|
418
|
-
warnings.warn(
|
|
419
|
-
"Unified memory requested but not available; defaulting to GPU memory."
|
|
420
|
-
)
|
|
421
|
-
self.unified_memory_level = 0
|
|
422
|
-
|
|
423
406
|
# Request and token counts.
|
|
424
407
|
self.total_request_count = 0
|
|
425
408
|
self.active_token_count = 0
|
|
@@ -513,7 +496,10 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
513
496
|
# Print info.
|
|
514
497
|
logging.info(
|
|
515
498
|
"DynamicInferenceContext: allocated context with active buffer size %s (%d blocks)."
|
|
516
|
-
% (
|
|
499
|
+
% (
|
|
500
|
+
get_mem_size_str(self.block_allocator.active_count * self.block_size_bytes),
|
|
501
|
+
self.block_allocator.active_count,
|
|
502
|
+
)
|
|
517
503
|
)
|
|
518
504
|
|
|
519
505
|
def allocate_all_tensors(self, *, is_init: bool) -> None:
|
|
@@ -731,8 +717,9 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
731
717
|
inference_config: InferenceWrapperConfig,
|
|
732
718
|
model,
|
|
733
719
|
max_batch_size: int,
|
|
734
|
-
|
|
720
|
+
buffer_size_gb: float = 40,
|
|
735
721
|
num_cuda_graphs: int = None,
|
|
722
|
+
mamba_inference_state_config: Optional[MambaInferenceStateConfig] = None,
|
|
736
723
|
):
|
|
737
724
|
"""
|
|
738
725
|
Instantiate a `DynamicInferenceContext` from a `TransformerConfig` and an `InferenceWrapperConfig`.
|
|
@@ -746,14 +733,15 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
746
733
|
max_sequence_length = max(max_sequence_length, max_batch_size)
|
|
747
734
|
return cls(
|
|
748
735
|
params_dtype=inference_config.params_dtype,
|
|
749
|
-
num_layers=model_config.num_layers,
|
|
736
|
+
num_layers=model_config.num_layers // model_config.pipeline_model_parallel_size,
|
|
750
737
|
kv_channels=model_config.kv_channels,
|
|
751
738
|
num_attention_heads=model_config.num_query_groups,
|
|
752
739
|
max_sequence_length=inference_config.inference_max_seq_length,
|
|
753
|
-
|
|
740
|
+
buffer_size_gb=buffer_size_gb,
|
|
754
741
|
materialize_only_last_token_logits=False,
|
|
755
742
|
num_cuda_graphs=num_cuda_graphs,
|
|
756
743
|
use_flashinfer_fused_rope=None,
|
|
744
|
+
mamba_inference_state_config=mamba_inference_state_config,
|
|
757
745
|
)
|
|
758
746
|
|
|
759
747
|
@classmethod
|
|
@@ -894,6 +882,7 @@ class DynamicInferenceContext(BaseInferenceContext):
|
|
|
894
882
|
to blocks within the block-level memory buffer.
|
|
895
883
|
"""
|
|
896
884
|
attention_layer_number = self.layer_map[layer_number - 1]
|
|
885
|
+
|
|
897
886
|
if self.cache_mla_latent:
|
|
898
887
|
return (
|
|
899
888
|
self.memory_buffer[attention_layer_number],
|
|
@@ -4,11 +4,13 @@ import asyncio
|
|
|
4
4
|
import logging
|
|
5
5
|
import multiprocessing
|
|
6
6
|
import os
|
|
7
|
+
import socket
|
|
7
8
|
import struct
|
|
8
9
|
import time
|
|
9
10
|
import warnings
|
|
10
11
|
from collections import deque
|
|
11
12
|
from contextlib import contextmanager
|
|
13
|
+
from dataclasses import dataclass
|
|
12
14
|
from datetime import datetime
|
|
13
15
|
from itertools import repeat
|
|
14
16
|
from typing import Dict, List, Optional, Tuple, Union
|
|
@@ -94,6 +96,14 @@ def format_mem_bytes(mem_bytes):
|
|
|
94
96
|
return "%d bytes" % mem_bytes
|
|
95
97
|
|
|
96
98
|
|
|
99
|
+
@dataclass(kw_only=True)
|
|
100
|
+
class RequestEntry:
|
|
101
|
+
"""Entry in the engine's `self.requests` dict."""
|
|
102
|
+
|
|
103
|
+
record: DynamicInferenceRequestRecord
|
|
104
|
+
future: asyncio.Future
|
|
105
|
+
|
|
106
|
+
|
|
97
107
|
# pylint: disable=line-too-long
|
|
98
108
|
class DynamicInferenceEngine(AbstractEngine):
|
|
99
109
|
"""The dynamic inference engine.
|
|
@@ -214,8 +224,7 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
214
224
|
self.waiting_request_ids = deque()
|
|
215
225
|
self.failed_request_ids = [] # deque()
|
|
216
226
|
self.request_counter = Counter()
|
|
217
|
-
self.
|
|
218
|
-
self.request_completion_futures: Dict[int, asyncio.Future] = {}
|
|
227
|
+
self.requests: Dict[int, RequestEntry] = {}
|
|
219
228
|
self.step_start_event = torch.cuda.Event(enable_timing=True)
|
|
220
229
|
self.step_end_event = torch.cuda.Event(enable_timing=True)
|
|
221
230
|
self.paused = False
|
|
@@ -338,6 +347,7 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
338
347
|
async def start_listening_to_data_parallel_coordinator(
|
|
339
348
|
self,
|
|
340
349
|
inference_coordinator_port: int,
|
|
350
|
+
inference_mp_coordinator_port: int = 20000,
|
|
341
351
|
launch_inference_coordinator: bool = True,
|
|
342
352
|
verbose: bool = False,
|
|
343
353
|
*,
|
|
@@ -351,15 +361,15 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
351
361
|
based on the rank's role within the distributed topology.
|
|
352
362
|
|
|
353
363
|
The setup involves two primary roles within each data-parallel group:
|
|
354
|
-
1. **
|
|
364
|
+
1. **MP Coordinator (TP_rank=0, PP_rank=0)**: This rank connects directly
|
|
355
365
|
to the central coordinator via a ZMQ `DEALER` socket. It receives
|
|
356
366
|
requests and uses a ZMQ `PUB` (publisher) socket to broadcast them
|
|
357
|
-
to all other ranks within its
|
|
358
|
-
2. **
|
|
359
|
-
sockets to listen for requests broadcast by their local
|
|
367
|
+
to all other ranks within its model-parallel (MP) group.
|
|
368
|
+
2. **MP Workers (all other ranks)**: These ranks use ZMQ `SUB` (subscriber)
|
|
369
|
+
sockets to listen for requests broadcast by their local MP Coordinator.
|
|
360
370
|
|
|
361
|
-
This architecture uses
|
|
362
|
-
|
|
371
|
+
This architecture uses TCP sockets for both inter-node and intra-node broadcasts
|
|
372
|
+
within an MP group.
|
|
363
373
|
|
|
364
374
|
Finally, after setting up the communication channels and ensuring all ranks
|
|
365
375
|
are synchronized, this method starts the main engine processing loop
|
|
@@ -368,16 +378,13 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
368
378
|
Args:
|
|
369
379
|
inference_coordinator_port (int): The network port where the central
|
|
370
380
|
`InferenceCoordinator` is or will be listening.
|
|
381
|
+
inference_mp_coordinator_port (int): The base network port where each model parallel
|
|
382
|
+
coordinator will broadcast messages from. Each MP group will compute an independent
|
|
383
|
+
port offset from this base port.
|
|
371
384
|
launch_inference_coordinator (bool, optional): If True, the global rank 0
|
|
372
385
|
process will spawn and manage the `InferenceCoordinator`
|
|
373
386
|
process. Defaults to True.
|
|
374
387
|
verbose (bool): Whether to run in verbose mode.
|
|
375
|
-
|
|
376
|
-
Note:
|
|
377
|
-
The current implementation uses `ipc` sockets for broadcasting requests
|
|
378
|
-
within a Tensor Parallel group, which limits each TP group to a single
|
|
379
|
-
physical node. For example, if you have 8 GPUs per node, then this will only
|
|
380
|
-
work with TP=[1,2,4,8]
|
|
381
388
|
"""
|
|
382
389
|
|
|
383
390
|
assert HAVE_ZMQ, (
|
|
@@ -404,8 +411,31 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
404
411
|
# Todo [Siddharth]: can we move this code to another file?
|
|
405
412
|
self.zmq_context = zmq.Context()
|
|
406
413
|
self.zmq_sockets = [] # keep track of all sockets created by this engine
|
|
414
|
+
|
|
415
|
+
# We need to broadcast the hostname of the (TP=0, PP=0) rank
|
|
416
|
+
# to all other ranks in the same model parallel group.
|
|
417
|
+
tp_rank = parallel_state.get_tensor_model_parallel_rank()
|
|
418
|
+
pp_rank = parallel_state.get_pipeline_model_parallel_rank()
|
|
419
|
+
|
|
420
|
+
hostname_list = [None]
|
|
421
|
+
if tp_rank == 0 and pp_rank == 0:
|
|
422
|
+
hostname_list[0] = socket.gethostname()
|
|
423
|
+
|
|
424
|
+
# Find the global rank of the (TP=0, PP=0) rank in our MP group
|
|
425
|
+
src_global_rank = parallel_state.get_model_parallel_src_rank()
|
|
426
|
+
|
|
427
|
+
torch.distributed.broadcast_object_list(
|
|
428
|
+
hostname_list, src=src_global_rank, group=parallel_state.get_model_parallel_group()
|
|
429
|
+
)
|
|
430
|
+
bcast_hostname = hostname_list[0]
|
|
431
|
+
|
|
432
|
+
# We need unique ports for each MP group, so we compute an offset using the DP rank.
|
|
433
|
+
dp_rank = parallel_state.get_data_parallel_rank()
|
|
434
|
+
req_port = inference_mp_coordinator_port + (dp_rank * 2)
|
|
435
|
+
len_port = inference_mp_coordinator_port + (dp_rank * 2) + 1
|
|
436
|
+
|
|
407
437
|
ip_address_of_dp_coordinator = os.getenv('MASTER_ADDR', '127.0.0.1')
|
|
408
|
-
identity = f'
|
|
438
|
+
identity = f'mp-coord-{parallel_state.get_data_parallel_rank()}'
|
|
409
439
|
if (
|
|
410
440
|
parallel_state.get_tensor_model_parallel_rank() == 0
|
|
411
441
|
and parallel_state.get_pipeline_model_parallel_rank() == 0
|
|
@@ -423,37 +453,33 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
423
453
|
self.socket_for_receiving_requests.send(b"")
|
|
424
454
|
|
|
425
455
|
# 2. Create a publisher socket. This is used to publish or broadcast
|
|
426
|
-
# requests within the
|
|
427
|
-
self.
|
|
428
|
-
self.
|
|
456
|
+
# requests within the model parallel group
|
|
457
|
+
self.model_parallel_publisher_socket = self.zmq_context.socket(zmq.PUB)
|
|
458
|
+
self.model_parallel_publisher_socket.bind(f"tcp://*:{req_port}")
|
|
429
459
|
|
|
430
460
|
# 3. Create another publisher socket to broadcast the number of messages to receive.
|
|
431
|
-
self.
|
|
432
|
-
self.
|
|
433
|
-
f"ipc:///tmp/{identity}-tp-bcast-socket-len"
|
|
434
|
-
)
|
|
461
|
+
self.model_parallel_num_msgs_publisher_socket = self.zmq_context.socket(zmq.PUB)
|
|
462
|
+
self.model_parallel_num_msgs_publisher_socket.bind(f"tcp://*:{len_port}")
|
|
435
463
|
self.zmq_sockets += [
|
|
436
464
|
self.socket_for_receiving_requests,
|
|
437
|
-
self.
|
|
438
|
-
self.
|
|
465
|
+
self.model_parallel_num_msgs_publisher_socket,
|
|
466
|
+
self.model_parallel_publisher_socket,
|
|
439
467
|
]
|
|
440
|
-
# All
|
|
441
|
-
self.
|
|
442
|
-
self.
|
|
443
|
-
self.
|
|
444
|
-
|
|
445
|
-
self.
|
|
446
|
-
self.
|
|
447
|
-
|
|
448
|
-
)
|
|
449
|
-
self.tensor_parallel_num_msgs_subscriber_socket.setsockopt_string(zmq.SUBSCRIBE, "")
|
|
468
|
+
# All MP ranks subscribe to the two publisher sockets
|
|
469
|
+
self.model_parallel_subscriber_socket = self.zmq_context.socket(zmq.SUB)
|
|
470
|
+
self.model_parallel_subscriber_socket.connect(f"tcp://{bcast_hostname}:{req_port}")
|
|
471
|
+
self.model_parallel_subscriber_socket.setsockopt_string(zmq.SUBSCRIBE, "")
|
|
472
|
+
|
|
473
|
+
self.model_parallel_num_msgs_subscriber_socket = self.zmq_context.socket(zmq.SUB)
|
|
474
|
+
self.model_parallel_num_msgs_subscriber_socket.connect(f"tcp://{bcast_hostname}:{len_port}")
|
|
475
|
+
self.model_parallel_num_msgs_subscriber_socket.setsockopt_string(zmq.SUBSCRIBE, "")
|
|
450
476
|
|
|
451
477
|
self.zmq_sockets += [
|
|
452
|
-
self.
|
|
453
|
-
self.
|
|
478
|
+
self.model_parallel_subscriber_socket,
|
|
479
|
+
self.model_parallel_num_msgs_subscriber_socket,
|
|
454
480
|
]
|
|
455
481
|
|
|
456
|
-
torch.distributed.barrier(parallel_state.
|
|
482
|
+
torch.distributed.barrier(parallel_state.get_model_parallel_group())
|
|
457
483
|
|
|
458
484
|
if launch_inference_coordinator and torch.distributed.get_rank() == 0:
|
|
459
485
|
await await_process_event(coordinator_ready_event, self.inference_coordinator_process)
|
|
@@ -549,13 +575,13 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
549
575
|
|
|
550
576
|
# Maintain references to requests before reset.
|
|
551
577
|
waiting_request_ids = list(self.waiting_request_ids)
|
|
552
|
-
active_request_ids = set(self.
|
|
578
|
+
active_request_ids = set(self.requests.keys()) - set(waiting_request_ids)
|
|
553
579
|
self.resume_request_ids = [*active_request_ids, *waiting_request_ids]
|
|
554
580
|
self.waiting_request_ids.clear()
|
|
555
581
|
|
|
556
582
|
# Suspend requests objects.
|
|
557
583
|
for request_id in active_request_ids:
|
|
558
|
-
self.
|
|
584
|
+
self.requests[request_id].record.suspend(self.controller.tokenizer)
|
|
559
585
|
|
|
560
586
|
def resume(self):
|
|
561
587
|
"""Resume engine by reallocating context's GPU state."""
|
|
@@ -632,7 +658,7 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
632
658
|
Returns:
|
|
633
659
|
(DynamicInferenceRequest) The most recent request in the record.
|
|
634
660
|
"""
|
|
635
|
-
return self.
|
|
661
|
+
return self.requests[request_id].record[-1]
|
|
636
662
|
|
|
637
663
|
def _add_request(
|
|
638
664
|
self, request: DynamicInferenceRequest
|
|
@@ -640,10 +666,13 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
640
666
|
|
|
641
667
|
request_id = request.request_id
|
|
642
668
|
|
|
643
|
-
# Add request to self.
|
|
669
|
+
# Add request to self.requests. If the engine has previously been
|
|
644
670
|
# suspended, then the request may already exist.
|
|
645
|
-
if request_id not in self.
|
|
646
|
-
self.
|
|
671
|
+
if request_id not in self.requests:
|
|
672
|
+
self.requests[request_id] = RequestEntry(
|
|
673
|
+
record=DynamicInferenceRequestRecord.from_request(request),
|
|
674
|
+
future=self._loop.create_future(),
|
|
675
|
+
)
|
|
647
676
|
|
|
648
677
|
if request.status is None:
|
|
649
678
|
request.status = Status.ACTIVE_AND_GENERATING_TOKENS
|
|
@@ -686,13 +715,7 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
686
715
|
if request.status != Status.FAILED:
|
|
687
716
|
self.waiting_request_ids.append(request_id)
|
|
688
717
|
|
|
689
|
-
|
|
690
|
-
# completed. If the engine has previously been suspended, then the future
|
|
691
|
-
# may already exist.
|
|
692
|
-
if request_id not in self.request_completion_futures:
|
|
693
|
-
self.request_completion_futures[request_id] = self._loop.create_future()
|
|
694
|
-
|
|
695
|
-
return self.request_completion_futures[request_id]
|
|
718
|
+
return self.requests[request_id].future
|
|
696
719
|
|
|
697
720
|
def add_request(
|
|
698
721
|
self,
|
|
@@ -813,8 +836,8 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
813
836
|
if request_id in finished_request_ids:
|
|
814
837
|
request.generated_length = len(request.generated_tokens)
|
|
815
838
|
request.status = Status.COMPLETED
|
|
816
|
-
|
|
817
|
-
finished_request =
|
|
839
|
+
finished_entry = self.requests.pop(request_id)
|
|
840
|
+
finished_request = finished_entry.record[-1]
|
|
818
841
|
if finished_request.prompt is None:
|
|
819
842
|
finished_request.prompt = self.controller.tokenizer.detokenize(
|
|
820
843
|
finished_request.prompt_tokens.tolist()
|
|
@@ -823,8 +846,8 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
823
846
|
finished_request.generated_text = self.controller.tokenizer.detokenize(
|
|
824
847
|
finished_request.generated_tokens
|
|
825
848
|
)
|
|
826
|
-
finished_request_records.append(
|
|
827
|
-
|
|
849
|
+
finished_request_records.append(finished_entry.record)
|
|
850
|
+
finished_entry.future.set_result(finished_entry.record)
|
|
828
851
|
else:
|
|
829
852
|
active_request_ids.append(request_id)
|
|
830
853
|
else:
|
|
@@ -1007,12 +1030,12 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
1007
1030
|
|
|
1008
1031
|
# Failed requests.
|
|
1009
1032
|
for failed_request_id in self.failed_request_ids:
|
|
1010
|
-
|
|
1011
|
-
failed_request =
|
|
1033
|
+
failed_entry = self.requests.pop(failed_request_id)
|
|
1034
|
+
failed_request = failed_entry.record[-1]
|
|
1012
1035
|
failed_request.status = Status.FAILED
|
|
1013
1036
|
failed_request.add_event_fail()
|
|
1014
|
-
finished_request_records.append(
|
|
1015
|
-
|
|
1037
|
+
finished_request_records.append(failed_entry.record)
|
|
1038
|
+
failed_entry.future.set_result(failed_entry.record)
|
|
1016
1039
|
self.failed_request_ids.clear()
|
|
1017
1040
|
|
|
1018
1041
|
# Log KV cache utilization stats to W&B
|
|
@@ -1154,16 +1177,16 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
1154
1177
|
"""Drains the ZMQ socket for a batch of requests and adds them to the engine.
|
|
1155
1178
|
|
|
1156
1179
|
This method is a collective and synchronous operation that must be called
|
|
1157
|
-
by all ranks in a
|
|
1180
|
+
by all ranks in a Model Parallel (MP) group at the same time. It ensures
|
|
1158
1181
|
that all ranks process the exact same batch of incoming requests and
|
|
1159
1182
|
control signals.
|
|
1160
1183
|
|
|
1161
1184
|
The synchronization works as follows:
|
|
1162
|
-
1. The
|
|
1185
|
+
1. The MP rank 0 drains all pending messages from its subscriber socket
|
|
1163
1186
|
in a non-blocking manner.
|
|
1164
|
-
2.
|
|
1165
|
-
ranks in its
|
|
1166
|
-
3. The other
|
|
1187
|
+
2. MP rank 0 then broadcasts the number of messages it received to all other
|
|
1188
|
+
ranks in its MP group using a dedicated publisher socket.
|
|
1189
|
+
3. The other MP ranks wait to receive this count, and then receive exactly
|
|
1167
1190
|
that many messages from their subscriber sockets.
|
|
1168
1191
|
|
|
1169
1192
|
Once all ranks have the same batch of messages, they are unpacked and
|
|
@@ -1173,7 +1196,7 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
1173
1196
|
|
|
1174
1197
|
Note:
|
|
1175
1198
|
This function is synchronous and must be called collectively by all
|
|
1176
|
-
ranks in a
|
|
1199
|
+
ranks in a MP group. It should not be launched in a separate coroutine
|
|
1177
1200
|
to ensure all ranks execute it in lockstep before proceeding to the
|
|
1178
1201
|
next engine step.
|
|
1179
1202
|
|
|
@@ -1181,10 +1204,11 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
1181
1204
|
int: The number of messages that were received and processed in this batch.
|
|
1182
1205
|
"""
|
|
1183
1206
|
|
|
1184
|
-
|
|
1207
|
+
tp_rank = parallel_state.get_tensor_model_parallel_rank()
|
|
1208
|
+
pp_rank = parallel_state.get_pipeline_model_parallel_rank()
|
|
1185
1209
|
torch.cuda.nvtx.range_push("drain_zmq_socket")
|
|
1186
1210
|
all_messages = []
|
|
1187
|
-
if
|
|
1211
|
+
if tp_rank == 0 and pp_rank == 0:
|
|
1188
1212
|
while True:
|
|
1189
1213
|
try:
|
|
1190
1214
|
# Receive messages in a non-blocking way.
|
|
@@ -1196,22 +1220,22 @@ class DynamicInferenceEngine(AbstractEngine):
|
|
|
1196
1220
|
# First publish the number of messages to dequeue.
|
|
1197
1221
|
# This is important because we want all tensor parallel ranks
|
|
1198
1222
|
# to dequeue the same number of messages.
|
|
1199
|
-
self.
|
|
1223
|
+
self.model_parallel_num_msgs_publisher_socket.send(
|
|
1200
1224
|
struct.pack('!i', messages_to_dequeue)
|
|
1201
1225
|
)
|
|
1202
|
-
# Now publish the actual messages to all
|
|
1226
|
+
# Now publish the actual messages to all model parallel ranks
|
|
1203
1227
|
for message in all_messages:
|
|
1204
|
-
self.
|
|
1228
|
+
self.model_parallel_publisher_socket.send(message)
|
|
1205
1229
|
else:
|
|
1206
|
-
# First, receive the number of messages to dequeue from
|
|
1230
|
+
# First, receive the number of messages to dequeue from mp-rank 0
|
|
1207
1231
|
messages_to_dequeue = struct.unpack(
|
|
1208
|
-
'!i', self.
|
|
1232
|
+
'!i', self.model_parallel_num_msgs_subscriber_socket.recv()
|
|
1209
1233
|
)[0]
|
|
1210
1234
|
# Now, dequeue the same number of messages from the subscriber socket.
|
|
1211
1235
|
# Note that these receives are blocking, because the messages
|
|
1212
1236
|
# are guaranteed to be available after the tp-rank 0 has sent them.
|
|
1213
1237
|
for _ in range(messages_to_dequeue):
|
|
1214
|
-
all_messages.append(self.
|
|
1238
|
+
all_messages.append(self.model_parallel_subscriber_socket.recv())
|
|
1215
1239
|
|
|
1216
1240
|
torch.cuda.nvtx.range_pop()
|
|
1217
1241
|
for message in all_messages:
|