diff --git a/examples/configs/recipes/llm/performance/dapo-deepseek-v3-64n8g.v2.yaml b/examples/configs/recipes/llm/performance/dapo-deepseek-v3-64n8g.v2.yaml index 3942a61949..d9c1cfba43 100644 --- a/examples/configs/recipes/llm/performance/dapo-deepseek-v3-64n8g.v2.yaml +++ b/examples/configs/recipes/llm/performance/dapo-deepseek-v3-64n8g.v2.yaml @@ -41,6 +41,15 @@ policy: make_sequence_length_divisible_by: ${mul:${policy.megatron_cfg.tensor_model_parallel_size}, ${mul:2, ${policy.megatron_cfg.context_parallel_size}}} megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" empty_unused_memory_level: 2 enabled: true activation_checkpointing: true @@ -99,4 +108,3 @@ logger: cluster: gpus_per_node: 8 num_nodes: 64 - diff --git a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n4g.yaml b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n4g.yaml index 9513ccdf93..1d3bf97bf5 100644 --- a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n4g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n4g.yaml @@ -10,6 +10,11 @@ policy: moe_token_dispatcher_type: flex moe_flex_dispatcher_backend: hybridep moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "16" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "72" + USE_MNNVL: "1" generation: vllm_cfg: gpu_memory_utilization: 0.3 diff --git a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n8g.yaml b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n8g.yaml index 2db802e31a..ce411f8906 100644 --- a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n8g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-32n8g.yaml @@ -21,6 +21,15 @@ policy: dtensor_cfg: enabled: false megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" enabled: true empty_unused_memory_level: 1 pipeline_model_parallel_size: 16 diff --git a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g-async-1off.yaml b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g-async-1off.yaml index 4c249647ac..5869fe1147 100644 --- a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g-async-1off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g-async-1off.yaml @@ -3,6 +3,15 @@ checkpointing: checkpoint_dir: results/grpo-deepseek-v3-64n4g-async-1off policy: megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "16" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "72" + USE_MNNVL: "1" pipeline_model_parallel_size: 8 num_layers_in_first_pipeline_stage: 7 num_layers_in_last_pipeline_stage: 6 diff --git a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g.yaml b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g.yaml index 1518f89483..eddf3a5497 100644 --- a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n4g.yaml @@ -8,5 +8,7 @@ logger: policy: megatron_cfg: expert_model_parallel_size: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "32" cluster: num_nodes: 64 diff --git a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-async-1off.yaml b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-async-1off.yaml index 595654a3a3..b718452fe4 100644 --- a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-async-1off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-async-1off.yaml @@ -11,6 +11,15 @@ checkpointing: policy: logprob_batch_size: 2 megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" tensor_model_parallel_size: 1 pipeline_model_parallel_size: 16 expert_model_parallel_size: 16 diff --git a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-fp8-async-1off.yaml b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-fp8-async-1off.yaml index 7f6b5ae86b..609c722fdf 100644 --- a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-fp8-async-1off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g-fp8-async-1off.yaml @@ -3,6 +3,10 @@ checkpointing: checkpoint_dir: results/grpo-deepseek-v3-64n8g-fp8-async-1off policy: megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 fp8_cfg: enabled: true fp8: "e4m3" @@ -11,6 +15,10 @@ policy: moe_router_dtype: fp32 env_vars: NVTE_FP8_BLOCK_SCALING_FP32_SCALES: "1" + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" generation: vllm_cfg: tensor_parallel_size: 16 diff --git a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g.yaml b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g.yaml index f3c3f1fc76..d3b1080c2e 100644 --- a/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-deepseek-v3-64n8g.yaml @@ -7,6 +7,15 @@ logger: name: grpo-deepseek-v3-64n8g policy: megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" expert_model_parallel_size: 32 cluster: num_nodes: 64 diff --git a/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g-async-1off.yaml b/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g-async-1off.yaml index afb74f303f..745516fff1 100644 --- a/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g-async-1off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g-async-1off.yaml @@ -25,6 +25,16 @@ policy: dtensor_cfg: enabled: false megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + moe_hybridep_prepad_packed_inputs: true + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" enabled: true tensor_model_parallel_size: 4 expert_model_parallel_size: 32 @@ -59,4 +69,4 @@ logger: name: grpo-nemotron3-super-120BA12B-32n8g-async-1off cluster: gpus_per_node: 8 - num_nodes: 32 \ No newline at end of file + num_nodes: 32 diff --git a/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g.yaml b/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g.yaml index 64b7fdb517..e21be6aed9 100644 --- a/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-nemotron3-super-120BA12B-32n8g.yaml @@ -20,6 +20,16 @@ policy: dtensor_cfg: enabled: false megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + moe_hybridep_prepad_packed_inputs: true + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" enabled: true tensor_model_parallel_size: 4 expert_model_parallel_size: 32 @@ -49,4 +59,4 @@ logger: name: grpo-nemotron3-super-120BA12B-32n8g cluster: gpus_per_node: 8 - num_nodes: 32 \ No newline at end of file + num_nodes: 32 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n4g.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n4g.yaml index df8a92b885..7d8b16d3ad 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n4g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n4g.yaml @@ -10,6 +10,12 @@ policy: moe_token_dispatcher_type: flex moe_flex_dispatcher_backend: hybridep moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "16" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "72" + USE_MNNVL: "1" + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:False generation: vllm_cfg: tensor_parallel_size: 8 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n8g.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n8g.yaml index 0b1f640b50..8e4769b1a8 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n8g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-16n8g.yaml @@ -23,6 +23,15 @@ policy: dtensor_cfg: enabled: false megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" enabled: true empty_unused_memory_level: 1 tensor_model_parallel_size: 2 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n4g-async-1off.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n4g-async-1off.yaml index fa08723672..5017f5f906 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n4g-async-1off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n4g-async-1off.yaml @@ -3,6 +3,15 @@ checkpointing: checkpoint_dir: results/grpo-qwen3-235b-32n4g-async-1off policy: megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "16" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "72" + USE_MNNVL: "1" pipeline_model_parallel_size: 4 num_layers_in_first_pipeline_stage: 23 num_layers_in_last_pipeline_stage: 23 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g-async-1off.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g-async-1off.yaml index bbfda9a123..455de665e9 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g-async-1off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g-async-1off.yaml @@ -10,6 +10,15 @@ checkpointing: checkpoint_dir: results/grpo-qwen3-235b-32n8g-async-1off policy: megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" tensor_model_parallel_size: 4 sequence_parallel: true context_parallel_size: 1 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g.yaml index 8871ec4552..2b6ecf60ff 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-235b-32n8g.yaml @@ -5,5 +5,16 @@ logger: log_dir: logs/grpo-qwen3-235b-32n8g wandb: name: grpo-qwen3-235b-32n8g +policy: + megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" cluster: num_nodes: 32 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-24n8g-async-8off.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-24n8g-async-8off.yaml index ad87205bb8..90b6e79399 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-24n8g-async-8off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-24n8g-async-8off.yaml @@ -12,6 +12,16 @@ checkpointing: policy: train_global_batch_size: 512 megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + moe_hybridep_prepad_packed_inputs: true + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" tensor_model_parallel_size: 1 pipeline_model_parallel_size: 1 expert_model_parallel_size: 8 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-40K.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-40K.yaml index 13d0d46994..53808081e2 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-40K.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-40K.yaml @@ -19,6 +19,11 @@ policy: make_sequence_length_divisible_by: ${mul:${policy.megatron_cfg.tensor_model_parallel_size}, ${mul:2, ${policy.megatron_cfg.context_parallel_size}}} megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + moe_hybridep_prepad_packed_inputs: true enabled: true empty_unused_memory_level: 1 tensor_model_parallel_size: 4 @@ -35,6 +40,10 @@ policy: lr_warmup_init: 3.0e-08 env_vars: PYTORCH_CUDA_ALLOC_CONF: expandable_segments:False + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" activation_checkpointing: true generation: vllm_cfg: diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-async-1off.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-async-1off.yaml index 2fccaed614..6b40664fbb 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-async-1off.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g-async-1off.yaml @@ -12,6 +12,16 @@ checkpointing: policy: train_global_batch_size: 2048 megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + moe_hybridep_prepad_packed_inputs: false + env_vars: + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" tensor_model_parallel_size: 1 pipeline_model_parallel_size: 2 expert_model_parallel_size: 8 diff --git a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g.yaml b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g.yaml index 5d225e7a37..94e0774e33 100644 --- a/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g.yaml +++ b/examples/configs/recipes/llm/performance/grpo-qwen3-30ba3b-4n8g.yaml @@ -12,6 +12,7 @@ policy: train_global_batch_size: 2048 train_micro_batch_size: 1 logprob_batch_size: 2 + logprob_chunk_size: 1024 max_total_sequence_length: 4096 sequence_packing: fuse_loss: true @@ -21,6 +22,12 @@ policy: scheduler: null make_sequence_length_divisible_by: ${policy.megatron_cfg.tensor_model_parallel_size} megatron_cfg: + # HybridEP settings + moe_token_dispatcher_type: flex + moe_flex_dispatcher_backend: hybridep + moe_hybridep_num_sms: 32 + moe_hybridep_prepad_packed_inputs: true + defer_fp32_logits: true enabled: true empty_unused_memory_level: 1 tensor_model_parallel_size: 1 @@ -36,6 +43,10 @@ policy: lr_warmup_init: 3.0e-08 env_vars: PYTORCH_CUDA_ALLOC_CONF: expandable_segments:False + NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN: "8" + NUM_OF_TOKENS_PER_CHUNK_COMBINE_API: "128" + NVLINK_DOMAIN_SIZE: "8" + USE_MNNVL: "0" generation: vllm_cfg: tensor_parallel_size: 2 diff --git a/experiment_logs/hybridep-performance-recipes-20260808/submit_recipe_tests.sh b/experiment_logs/hybridep-performance-recipes-20260808/submit_recipe_tests.sh new file mode 100755 index 0000000000..60be2a3b00 --- /dev/null +++ b/experiment_logs/hybridep-performance-recipes-20260808/submit_recipe_tests.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +set -euo pipefail + +mode=${1:-submit} +case "${mode}" in + submit) submit_mode=(--parsable) ;; + test-only) submit_mode=(--test-only) ;; + *) printf 'Usage: %s [submit|test-only]\n' "$0" >&2; exit 2 ;; +esac + +work_root=/lustre/fsw/portfolios/coreai/projects/coreai_chef_posttrain/users/sna +experiment_root=${work_root}/experiments/hybridep-performance-recipes-20260808 +repo=${VALIDATION_REPO_OVERRIDE:?VALIDATION_REPO_OVERRIDE is required} +container=${CONTAINER_OVERRIDE:-${work_root}/containers/nemo-rl-nightly-cw-fallback-20260808/nemo_rl_nightly_20260805_15171871.sqsh} +validation_head=${VALIDATION_HEAD_OVERRIDE:?VALIDATION_HEAD_OVERRIDE is required} +run_root=${experiment_root}/runs/recipe-tests-${validation_head:0:12} +job_reaper_comment='{"OccupiedIdleGPUsJobReaper":{"exemptIdleTimeMins":"15","reason":"other","description":"Focused NeMo-RL HybridEP recipe configuration tests"}}' + +test "$(git -C "${repo}" rev-parse HEAD)" = "${validation_head}" +test -z "$(git -C "${repo}" status --porcelain --untracked-files=no)" +test -r "${container}" +mkdir -p "${run_root}/ray" + +COMMAND="PYTHONPATH=${repo}:\${PYTHONPATH:-} PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 /opt/nemo_rl_venv/bin/python -m pytest -q ${repo}/tests/unit/tools/test_hybridep_default_8g_recipes.py" +export COMMAND +export CONTAINER="${container}" +export MOUNTS=/lustre:/lustre +export BASE_LOG_DIR="${run_root}/ray" +export GPUS_PER_NODE=8 + +cd "${repo}" +sbatch "${submit_mode[@]}" \ + --export=ALL \ + --nodes=1 \ + --gpus-per-node=8 \ + --exclusive \ + --account=coreai_chef_posttrain \ + --partition=batch \ + --time=00:15:00 \ + --job-name=coreai_chef_posttrain.hybridep-recipe-test \ + --output="${run_root}/slurm-%j.out" \ + --comment="${job_reaper_comment}" \ + ray.sub diff --git a/nemo_rl/models/megatron/setup.py b/nemo_rl/models/megatron/setup.py index 25003ce5e5..8c6db4b4e2 100644 --- a/nemo_rl/models/megatron/setup.py +++ b/nemo_rl/models/megatron/setup.py @@ -872,6 +872,109 @@ def _apply_parallelism_config(model_cfg: Any, config: PolicyConfig) -> None: ) +def _configure_hybridep_environment( + model_cfg: Any, megatron_cfg: dict[str, Any] +) -> None: + """Validate, configure, and report the effective HybridEP topology.""" + ep_size = int(model_cfg.expert_model_parallel_size) + + if "hybridep_num_ranks_per_nvlink_domain" in megatron_cfg: + ranks_text = str(megatron_cfg["hybridep_num_ranks_per_nvlink_domain"]) + try: + ranks_per_domain = int(ranks_text) + except (TypeError, ValueError) as exc: + raise ValueError( + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN=" + f"{ranks_text!r} must be a positive integer" + ) from exc + os.environ["NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN"] = str(ranks_per_domain) + ranks_source = "megatron_cfg" + elif "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN" in os.environ: + ranks_source = "environment" + else: + ranks_per_domain = min(ep_size, 64) + os.environ["NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN"] = str(ranks_per_domain) + ranks_source = "fallback" + warnings.warn( + "HybridEP: NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN not " + f"configured. Auto-setting to {ranks_per_domain}.", + stacklevel=2, + ) + + ranks_text = os.environ["NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN"] + try: + ranks_per_domain = int(ranks_text) + except (TypeError, ValueError) as exc: + raise ValueError( + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN=" + f"{ranks_text!r} must be a positive integer" + ) from exc + if ranks_per_domain < 1: + raise ValueError( + f"NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN={ranks_text!r} must be positive" + ) + if ep_size % ranks_per_domain != 0: + raise ValueError( + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN=" + f"{ranks_text!r} must divide expert_model_parallel_size={ep_size}" + ) + + if "hybridep_use_mnnvl" in megatron_cfg: + os.environ["USE_MNNVL"] = str(int(megatron_cfg["hybridep_use_mnnvl"])) + mnnvl_source = "megatron_cfg" + elif "USE_MNNVL" in os.environ: + mnnvl_source = "environment" + else: + os.environ["USE_MNNVL"] = str(int(ep_size > 4)) + mnnvl_source = "fallback" + warnings.warn( + "HybridEP: USE_MNNVL not configured. " + f"Auto-setting to {os.environ['USE_MNNVL']}.", + stacklevel=2, + ) + + def _optional_positive_environment_value(name: str) -> tuple[str, str]: + if name not in os.environ: + return "unset", "unset" + value_text = os.environ[name] + try: + value = int(value_text) + except (TypeError, ValueError) as exc: + raise ValueError( + f"{name}={value_text!r} must be a positive integer" + ) from exc + if value < 1: + raise ValueError(f"{name}={value_text!r} must be positive") + return str(value), "environment" + + domain_size_text, domain_source = _optional_positive_environment_value( + "NVLINK_DOMAIN_SIZE" + ) + chunk_text, chunk_source = _optional_positive_environment_value( + "NUM_OF_TOKENS_PER_CHUNK_COMBINE_API" + ) + + use_mnnvl_text = os.environ["USE_MNNVL"] + normalized_mnnvl_values = {"0": "0", "1": "1", "false": "0", "true": "1"} + if use_mnnvl_text not in normalized_mnnvl_values: + raise ValueError( + f"USE_MNNVL={use_mnnvl_text!r} must be one of 0, 1, false, true" + ) + use_mnnvl = normalized_mnnvl_values[use_mnnvl_text] + os.environ["USE_MNNVL"] = use_mnnvl + + rank = torch.distributed.get_rank() if torch.distributed.is_initialized() else 0 + if rank == 0: + print( + "[HybridEP topology] " + f"ep_size={ep_size} " + f"ranks_per_domain={ranks_per_domain} source={ranks_source} " + f"nvlink_domain_size={domain_size_text} source={domain_source} " + f"use_mnnvl={use_mnnvl} source={mnnvl_source} " + f"combine_chunk_tokens={chunk_text} source={chunk_source}" + ) + + def _apply_moe_config(model_cfg: Any, config: PolicyConfig) -> None: """Apply Mixture of Experts configuration.""" model_cfg.expert_tensor_parallel_size = config["megatron_cfg"][ @@ -969,39 +1072,8 @@ def _apply_moe_config(model_cfg: Any, config: PolicyConfig) -> None: else: model_cfg.moe_hybridep_num_sms = num_sms - # HybridEP environment variables - # These are required by DeepEP's hybrid-ep branch for NVLink domain configuration. - # Users can set them explicitly via config, or they will be auto-computed with a warning. if config["megatron_cfg"].get("moe_flex_dispatcher_backend") == "hybridep": - ep_size = model_cfg.expert_model_parallel_size - - # NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN - if "hybridep_num_ranks_per_nvlink_domain" in config["megatron_cfg"]: - val = config["megatron_cfg"]["hybridep_num_ranks_per_nvlink_domain"] - os.environ["NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN"] = str(val) - elif "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN" not in os.environ: - default_val = min(ep_size, 64) - os.environ["NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN"] = str(default_val) - warnings.warn( - f"HybridEP: NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN not configured. " - f"Auto-setting to min(expert_model_parallel_size={ep_size}, 64) = {default_val}. " - f"Set 'hybridep_num_ranks_per_nvlink_domain' in megatron_cfg to override.", - stacklevel=2, - ) - - # USE_MNNVL - if "hybridep_use_mnnvl" in config["megatron_cfg"]: - val = config["megatron_cfg"]["hybridep_use_mnnvl"] - os.environ["USE_MNNVL"] = str(int(val)) - elif "USE_MNNVL" not in os.environ: - default_val = int(ep_size > 4) - os.environ["USE_MNNVL"] = str(default_val) - warnings.warn( - f"HybridEP: USE_MNNVL not configured. " - f"Auto-setting to int(expert_model_parallel_size={ep_size} > 4) = {default_val}. " - f"Set 'hybridep_use_mnnvl' in megatron_cfg to override.", - stacklevel=2, - ) + _configure_hybridep_environment(model_cfg, config["megatron_cfg"]) model_cfg.moe_permute_fusion = config["megatron_cfg"]["moe_permute_fusion"] diff --git a/pyproject.toml b/pyproject.toml index 00a6822e92..397cca571a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -132,8 +132,7 @@ automodel = [ "causal-conv1d", "nv-grouped-gemm", "transformer-engine[pytorch,core_cu13] @ git+https://github.com/NVIDIA/TransformerEngine.git@v2.14.1", - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@29d31c095796f3c8ece47ee9cdcc167051bbeed9 ; platform_machine == 'x86_64'", - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@a48493600c4886c1b297aaa78db0e1ebc2d8dd6c ; platform_machine == 'aarch64'", + "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@17cfb817bccec3a9c247013360cc550c2bac441e", ] vllm = [ "cuda-python", @@ -141,8 +140,7 @@ vllm = [ # deep_ep also needs libibverbs-dev # sudo apt-get update # sudo apt-get install libibverbs-dev - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@29d31c095796f3c8ece47ee9cdcc167051bbeed9 ; platform_machine == 'x86_64'", - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@a48493600c4886c1b297aaa78db0e1ebc2d8dd6c ; platform_machine == 'aarch64'", + "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@17cfb817bccec3a9c247013360cc550c2bac441e", # Default wheels on GitHub are cu130. See v0.25.1 release assets: # https://github.com/vllm-project/vllm/releases/tag/v0.25.1 "vllm @ https://github.com/vllm-project/vllm/releases/download/v0.25.1/vllm-0.25.1-cp38-abi3-manylinux_2_28_aarch64.whl ; sys_platform == 'linux' and platform_machine == 'aarch64'", @@ -193,8 +191,7 @@ mcore = [ # silently falls back to the PyPI releases instead of the pinned git revs. "mamba-ssm", "causal-conv1d", - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@29d31c095796f3c8ece47ee9cdcc167051bbeed9 ; platform_machine == 'x86_64'", - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@a48493600c4886c1b297aaa78db0e1ebc2d8dd6c ; platform_machine == 'aarch64'", + "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@17cfb817bccec3a9c247013360cc550c2bac441e", "flashinfer-python==0.6.8.post1", "flashinfer-cubin==0.6.8.post1", "flashinfer-jit-cache==0.6.8.post1", @@ -367,8 +364,7 @@ override-dependencies = [ "llguidance>=1.3.0,<1.4.0", # Override setuptools range in other dependencies to address CVE GHSA-58pv-8j8x-9vj2 "setuptools>=80.10.2", - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@29d31c095796f3c8ece47ee9cdcc167051bbeed9 ; platform_machine == 'x86_64'", - "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@a48493600c4886c1b297aaa78db0e1ebc2d8dd6c ; platform_machine == 'aarch64'", + "deep_ep @ git+https://github.com/deepseek-ai/DeepEP.git@17cfb817bccec3a9c247013360cc550c2bac441e", # Relax megatron-core workspace member's opentelemetry-api ceiling (<1.34) for protobuf 6.x compat with ray "opentelemetry-api>=1.33.1", # Override sglang's xgrammar==0.1.32 to address CVE GHSA-7rgv-gqhr-fxg3. @@ -552,7 +548,7 @@ requires-dist = ["torch", "packaging", "ninja", "causal-conv1d"] [[tool.uv.dependency-metadata]] name = "deep_ep" # This version has to match the version in the commit/rev/tag used -version = "v1.2.1+29d31c0" +version = "1.2.1+17cfb81" requires-dist = ["torch", "packaging", "ninja"] [[tool.uv.dependency-metadata]] diff --git a/tests/unit/models/megatron/test_megatron_setup.py b/tests/unit/models/megatron/test_megatron_setup.py index afc01daddc..fd48c4b50c 100644 --- a/tests/unit/models/megatron/test_megatron_setup.py +++ b/tests/unit/models/megatron/test_megatron_setup.py @@ -845,7 +845,7 @@ def test_hybridep_env_vars_from_explicit_config(self, monkeypatch): model_cfg = MagicMock() config = self._base_moe_cfg( - expert_model_parallel_size=128, + expert_model_parallel_size=144, moe_flex_dispatcher_backend="hybridep", moe_hybridep_num_sms=24, hybridep_num_ranks_per_nvlink_domain=72, @@ -864,6 +864,118 @@ def test_hybridep_env_vars_from_explicit_config(self, monkeypatch): hybridep_warns = [w for w in caught if "HybridEP" in str(w.message)] assert hybridep_warns == [] + def test_hybridep_logs_effective_environment_on_rank_zero( + self, monkeypatch, capsys + ): + """The rank-zero diagnostic reports validated environment topology.""" + from nemo_rl.models.megatron.setup import _apply_moe_config + + monkeypatch.setenv("NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN", "8") + monkeypatch.setenv("NUM_OF_TOKENS_PER_CHUNK_COMBINE_API", "128") + monkeypatch.setenv("NVLINK_DOMAIN_SIZE", "8") + monkeypatch.setenv("USE_MNNVL", "0") + + _apply_moe_config( + MagicMock(), + self._base_moe_cfg( + expert_model_parallel_size=32, + moe_flex_dispatcher_backend="hybridep", + ), + ) + + output = capsys.readouterr().out + assert "[HybridEP topology]" in output + assert "ep_size=32" in output + assert "ranks_per_domain=8 source=environment" in output + assert "nvlink_domain_size=8 source=environment" in output + assert "use_mnnvl=0 source=environment" in output + assert "combine_chunk_tokens=128 source=environment" in output + + def test_hybridep_typed_config_precedence_is_logged(self, monkeypatch, capsys): + """Typed config overrides conflicting rank and MNNVL environment values.""" + from nemo_rl.models.megatron.setup import _apply_moe_config + + monkeypatch.setenv("NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN", "16") + monkeypatch.setenv("NUM_OF_TOKENS_PER_CHUNK_COMBINE_API", "128") + monkeypatch.setenv("NVLINK_DOMAIN_SIZE", "8") + monkeypatch.setenv("USE_MNNVL", "1") + + _apply_moe_config( + MagicMock(), + self._base_moe_cfg( + expert_model_parallel_size=32, + moe_flex_dispatcher_backend="hybridep", + hybridep_num_ranks_per_nvlink_domain=8, + hybridep_use_mnnvl=False, + ), + ) + + assert os.environ["NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN"] == "8" + assert os.environ["USE_MNNVL"] == "0" + output = capsys.readouterr().out + assert "ranks_per_domain=8 source=megatron_cfg" in output + assert "use_mnnvl=0 source=megatron_cfg" in output + + def test_hybridep_logs_only_on_rank_zero(self, monkeypatch, capsys): + """Nonzero ranks do not emit the process-wide topology diagnostic.""" + from nemo_rl.models.megatron.setup import _apply_moe_config + + monkeypatch.setenv("NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN", "8") + monkeypatch.setenv("NUM_OF_TOKENS_PER_CHUNK_COMBINE_API", "128") + monkeypatch.setenv("NVLINK_DOMAIN_SIZE", "8") + monkeypatch.setenv("USE_MNNVL", "0") + monkeypatch.setattr(torch.distributed, "is_initialized", lambda: True) + monkeypatch.setattr(torch.distributed, "get_rank", lambda: 1) + + _apply_moe_config( + MagicMock(), + self._base_moe_cfg( + expert_model_parallel_size=32, + moe_flex_dispatcher_backend="hybridep", + ), + ) + + assert capsys.readouterr().out == "" + + @pytest.mark.parametrize( + ("name", "value", "message"), + [ + ( + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN", + "0", + "must be positive", + ), + ( + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN", + "3", + "must divide", + ), + ("NVLINK_DOMAIN_SIZE", "0", "must be positive"), + ("NUM_OF_TOKENS_PER_CHUNK_COMBINE_API", "0", "must be positive"), + ("USE_MNNVL", "2", "must be one of"), + ], + ) + def test_hybridep_rejects_invalid_topology_environment( + self, monkeypatch, name, value, message + ): + """Invalid HybridEP topology environment values fail before model setup.""" + from nemo_rl.models.megatron.setup import _apply_moe_config + + monkeypatch.setenv("NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN", "8") + monkeypatch.setenv("NUM_OF_TOKENS_PER_CHUNK_COMBINE_API", "128") + monkeypatch.setenv("NVLINK_DOMAIN_SIZE", "8") + monkeypatch.setenv("USE_MNNVL", "0") + monkeypatch.setenv(name, value) + + with pytest.raises(ValueError, match=message): + _apply_moe_config( + MagicMock(), + self._base_moe_cfg( + expert_model_parallel_size=8, + moe_flex_dispatcher_backend="hybridep", + ), + ) + def test_hybridep_use_mnnvl_explicit_false(self, monkeypatch): """hybridep_use_mnnvl=False → USE_MNNVL='0'.""" from nemo_rl.models.megatron.setup import _apply_moe_config diff --git a/tests/unit/tools/test_hybridep_default_8g_recipes.py b/tests/unit/tools/test_hybridep_default_8g_recipes.py new file mode 100644 index 0000000000..908ba3fb73 --- /dev/null +++ b/tests/unit/tools/test_hybridep_default_8g_recipes.py @@ -0,0 +1,220 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from pathlib import Path +from typing import Any, cast + +import pytest +from omegaconf import OmegaConf + +from nemo_rl.utils.config import load_config, register_omegaconf_resolvers + +register_omegaconf_resolvers() + +MOE_8G_RECIPES = ( + "grpo-deepseek-v3-32n8g.yaml", + "grpo-deepseek-v3-64n8g.yaml", + "grpo-deepseek-v3-64n8g-async-1off.yaml", + "grpo-deepseek-v3-64n8g-fp8-async-1off.yaml", + "dapo-deepseek-v3-64n8g.v2.yaml", + "grpo-nemotron3-super-120BA12B-32n8g.yaml", + "grpo-nemotron3-super-120BA12B-32n8g-async-1off.yaml", + "grpo-qwen3-235b-16n8g.yaml", + "grpo-qwen3-235b-32n8g.yaml", + "grpo-qwen3-235b-32n8g-async-1off.yaml", + "grpo-qwen3-30ba3b-4n8g.yaml", + "grpo-qwen3-30ba3b-4n8g-async-1off.yaml", + "grpo-qwen3-30ba3b-24n8g-async-8off.yaml", + "grpo-qwen3-30ba3b-4n8g-40K.yaml", +) + +X86_HYBRIDEP_ENVIRONMENT = { + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN": "8", + "NUM_OF_TOKENS_PER_CHUNK_COMBINE_API": "128", + "NVLINK_DOMAIN_SIZE": "8", + "USE_MNNVL": "0", +} +X86_HYBRIDEP_ENVIRONMENT_KEYS = set(X86_HYBRIDEP_ENVIRONMENT) +GB200_HYBRIDEP_RECIPES = { + "grpo-deepseek-v3-32n4g.yaml": "16", + "grpo-deepseek-v3-64n4g.yaml": "32", + "grpo-deepseek-v3-64n4g-async-1off.yaml": "16", + "grpo-qwen3-235b-16n4g.yaml": "16", + "grpo-qwen3-235b-32n4g.yaml": "16", + "grpo-qwen3-235b-32n4g-async-1off.yaml": "16", +} +GB200_HYBRIDEP_ENVIRONMENT_KEYS = { + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN", + "NUM_OF_TOKENS_PER_CHUNK_COMBINE_API", + "NVLINK_DOMAIN_SIZE", + "USE_MNNVL", +} + +DENSE_8G_RECIPES = ( + "grpo-llama3.1-8b-instruct-2n8g.yaml", + "grpo-llama3.1-8b-instruct-2n8g-async-1off.yaml", + "grpo-llama3.1-8b-instruct-2n8g-fp8-async-1off.yaml", + "grpo-qwen3-32b-4n8g.yaml", + "grpo-qwen3-32b-8n8g-async-1off.yaml", +) + +FOUR_GPU_NON_HYBRIDEP_RECIPES = ( + "grpo-nemotron3-super-120BA12B-32n4g.yaml", + "grpo-nemotron3-super-120BA12B-32n4g-async-1off.yaml", + "grpo-qwen3-30ba3b-4n4g.yaml", + "grpo-qwen3-30ba3b-4n4g-async-1off.yaml", +) + + +def _recipe_dir() -> Path: + return ( + Path(__file__).resolve().parents[3] + / "examples" + / "configs" + / "recipes" + / "llm" + / "performance" + ) + + +def _resolve_recipe(recipe_name: str) -> dict[str, Any]: + recipe_path = _recipe_dir() / recipe_name + assert recipe_path.is_file(), f"Missing recipe: {recipe_path}" + resolved = OmegaConf.to_container(load_config(recipe_path), resolve=True) + assert isinstance(resolved, dict) + return cast(dict[str, Any], resolved) + + +def _megatron_config(config: dict[str, Any]) -> dict[str, Any]: + policy = config["policy"] + assert isinstance(policy, dict) + megatron_cfg = policy["megatron_cfg"] + assert isinstance(megatron_cfg, dict) + return megatron_cfg + + +def _environment(megatron_cfg: dict[str, Any]) -> dict[str, Any]: + env_vars = megatron_cfg.get("env_vars") + if env_vars is None: + return {} + assert isinstance(env_vars, dict) + return env_vars + + +@pytest.mark.parametrize("recipe_name", MOE_8G_RECIPES) +def test_moe_8g_canonical_recipes_default_to_x86_hybridep( + recipe_name: str, +) -> None: + megatron_cfg = _megatron_config(_resolve_recipe(recipe_name)) + + assert megatron_cfg["moe_token_dispatcher_type"] == "flex" + assert megatron_cfg["moe_flex_dispatcher_backend"] == "hybridep" + assert megatron_cfg["moe_hybridep_num_sms"] == 32 + assert X86_HYBRIDEP_ENVIRONMENT.items() <= _environment(megatron_cfg).items() + + +@pytest.mark.parametrize("recipe_name", MOE_8G_RECIPES) +def test_moe_8g_recipes_prepad_only_supported_pipeline_topologies( + recipe_name: str, +) -> None: + megatron_cfg = _megatron_config(_resolve_recipe(recipe_name)) + + supports_one_time_prepadding = ( + megatron_cfg["pipeline_model_parallel_size"] == 1 + and megatron_cfg["mtp_num_layers"] == 0 + ) + assert ( + megatron_cfg.get("moe_hybridep_prepad_packed_inputs", False) + is supports_one_time_prepadding + ) + + +@pytest.mark.parametrize("recipe_name", MOE_8G_RECIPES) +def test_moe_8g_recipes_define_hybridep_directly_without_alltoall_peer( + recipe_name: str, +) -> None: + recipe_path = _recipe_dir() / recipe_name + raw_config = OmegaConf.to_container(OmegaConf.load(recipe_path), resolve=False) + assert isinstance(raw_config, dict) + megatron_cfg = _megatron_config(cast(dict[str, Any], raw_config)) + + assert megatron_cfg["moe_token_dispatcher_type"] == "flex" + assert megatron_cfg["moe_flex_dispatcher_backend"] == "hybridep" + assert megatron_cfg["moe_hybridep_num_sms"] == 32 + assert X86_HYBRIDEP_ENVIRONMENT.items() <= _environment(megatron_cfg).items() + + if recipe_name.endswith(".v2.yaml"): + alltoall_name = recipe_name.replace(".v2.yaml", "-alltoall.v2.yaml") + else: + alltoall_name = recipe_name.replace(".yaml", "-alltoall.yaml") + assert not (_recipe_dir() / alltoall_name).exists() + + +@pytest.mark.parametrize("recipe_name", DENSE_8G_RECIPES) +def test_dense_8g_recipes_do_not_select_hybridep(recipe_name: str) -> None: + megatron_cfg = _megatron_config(_resolve_recipe(recipe_name)) + + assert megatron_cfg["moe_token_dispatcher_type"] == "alltoall" + assert "moe_flex_dispatcher_backend" not in megatron_cfg + assert "moe_hybridep_num_sms" not in megatron_cfg + assert not X86_HYBRIDEP_ENVIRONMENT_KEYS.intersection(_environment(megatron_cfg)) + + +@pytest.mark.parametrize("recipe_name, expected_ranks", GB200_HYBRIDEP_RECIPES.items()) +def test_gb200_4g_recipes_set_hybridep_topology( + recipe_name: str, expected_ranks: str +) -> None: + megatron_cfg = _megatron_config(_resolve_recipe(recipe_name)) + + assert megatron_cfg["moe_token_dispatcher_type"] == "flex" + assert megatron_cfg["moe_flex_dispatcher_backend"] == "hybridep" + assert megatron_cfg["moe_hybridep_num_sms"] == 32 + expected = { + "NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN": expected_ranks, + "NUM_OF_TOKENS_PER_CHUNK_COMBINE_API": "128", + "NVLINK_DOMAIN_SIZE": "72", + "USE_MNNVL": "1", + } + assert expected.items() <= _environment(megatron_cfg).items() + assert str(megatron_cfg["expert_model_parallel_size"]) == expected_ranks + + +def test_gb200_qwen3_235b_16n4g_preserves_parent_environment() -> None: + megatron_cfg = _megatron_config(_resolve_recipe("grpo-qwen3-235b-16n4g.yaml")) + + assert "PYTORCH_CUDA_ALLOC_CONF" in _environment(megatron_cfg) + + +def test_gb200_deepseek_v3_32n4g_preserves_unrelated_parent_environment() -> None: + parent_environment = _environment( + _megatron_config(_resolve_recipe("grpo-deepseek-v3-32n8g.yaml")) + ) + child_environment = _environment( + _megatron_config(_resolve_recipe("grpo-deepseek-v3-32n4g.yaml")) + ) + + unrelated_parent_environment_keys = ( + set(parent_environment) - GB200_HYBRIDEP_ENVIRONMENT_KEYS + ) + assert unrelated_parent_environment_keys <= set(child_environment) + + +@pytest.mark.parametrize("recipe_name", FOUR_GPU_NON_HYBRIDEP_RECIPES) +def test_4g_non_hybridep_recipes_do_not_set_hybridep_topology( + recipe_name: str, +) -> None: + megatron_cfg = _megatron_config(_resolve_recipe(recipe_name)) + + assert megatron_cfg.get("moe_flex_dispatcher_backend") != "hybridep" + assert not GB200_HYBRIDEP_ENVIRONMENT_KEYS.intersection(_environment(megatron_cfg)) diff --git a/uv.lock b/uv.lock index a48a739f55..4c246d393f 100644 --- a/uv.lock +++ b/uv.lock @@ -96,8 +96,7 @@ overrides = [ { name = "apache-tvm-ffi", specifier = ">=0.1.9" }, { name = "av", marker = "sys_platform == 'never'" }, { name = "decord2", marker = "sys_platform == 'never'" }, - { name = "deep-ep", marker = "platform_machine == 'aarch64'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, - { name = "deep-ep", marker = "platform_machine == 'x86_64'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, + { name = "deep-ep", git = "https://github.com/deepseek-ai/DeepEP.git?rev=17cfb817bccec3a9c247013360cc550c2bac441e" }, { name = "langchain", specifier = ">=0.3.28" }, { name = "langchain-core", specifier = ">=0.3.80" }, { name = "langchain-core", specifier = ">=1.2.22" }, @@ -130,7 +129,7 @@ requires-dist = ["torch", "packaging", "ninja"] [[manifest.dependency-metadata]] name = "deep-ep" -version = "1.2.1+29d31c0" +version = "1.2.1+17cfb81" requires-dist = ["torch", "packaging", "ninja"] [[manifest.dependency-metadata]] @@ -1310,28 +1309,12 @@ wheels = [ [[package]] name = "deep-ep" -version = "1.2.1+29d31c0" -source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9#29d31c095796f3c8ece47ee9cdcc167051bbeed9" } -resolution-markers = [ - "platform_machine == 'x86_64' and sys_platform == 'linux'", -] -dependencies = [ - { name = "ninja", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "packaging", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, -] - -[[package]] -name = "deep-ep" -version = "1.2.1+29d31c0" -source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c#a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" } -resolution-markers = [ - "platform_machine == 'aarch64' and sys_platform == 'linux'", -] +version = "1.2.1+17cfb81" +source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=17cfb817bccec3a9c247013360cc550c2bac441e#17cfb817bccec3a9c247013360cc550c2bac441e" } dependencies = [ - { name = "ninja", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "packaging", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "torch", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "ninja", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "packaging", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "torch", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] [[package]] @@ -3978,8 +3961,7 @@ dependencies = [ [package.optional-dependencies] moe = [ { name = "causal-conv1d", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9#29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-automodel') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c#a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-automodel') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, + { name = "deep-ep", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "flash-linear-attention", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "mamba-ssm", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "nv-grouped-gemm", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -4282,8 +4264,7 @@ dependencies = [ [package.optional-dependencies] automodel = [ { name = "causal-conv1d", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9#29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-automodel') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c#a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-automodel') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, + { name = "deep-ep", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "flash-attn", version = "2.8.1+cu13torch2.10cxx11abitrue", source = { url = "https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.1/flash_attn-2.8.1+cu13torch2.10cxx11abiTRUE-cp313-cp313-linux_aarch64.whl" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-automodel') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, { name = "flash-attn", version = "2.8.1+cu13torch2.10cxx11abitrue", source = { url = "https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.1/flash_attn-2.8.1+cu13torch2.10cxx11abiTRUE-cp313-cp313-linux_x86_64.whl" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-automodel') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, { name = "mamba-ssm", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -4302,8 +4283,7 @@ fsdp = [ mcore = [ { name = "causal-conv1d", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "cupy-cuda13x", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9#29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-fsdp' and extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c#a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-fsdp' and extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, + { name = "deep-ep", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "flash-attn", version = "2.8.1+cu13torch2.10cxx11abitrue", source = { url = "https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.1/flash_attn-2.8.1+cu13torch2.10cxx11abiTRUE-cp313-cp313-linux_aarch64.whl" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-fsdp' and extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, { name = "flash-attn", version = "2.8.1+cu13torch2.10cxx11abitrue", source = { url = "https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.1/flash_attn-2.8.1+cu13torch2.10cxx11abiTRUE-cp313-cp313-linux_x86_64.whl" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-mcore') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-fsdp' and extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm') or (extra != 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm')" }, { name = "flashinfer-cubin", version = "0.6.8.post1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -4338,8 +4318,7 @@ trtllm = [ ] vllm = [ { name = "cuda-python", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9#29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, marker = "(platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm')" }, - { name = "deep-ep", version = "1.2.1+29d31c0", source = { git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c#a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-7-nemo-rl-vllm') or (platform_machine != 'aarch64' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (sys_platform != 'linux' and extra == 'extra-7-nemo-rl-vllm' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-fsdp') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-mcore') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-automodel' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-fsdp' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-sglang') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-mcore' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-trtllm') or (extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-sglang' and extra == 'extra-8-nemo-gym-vllm') or (extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-7-nemo-rl-vllm') or (extra == 'extra-7-nemo-rl-trtllm' and extra == 'extra-8-nemo-gym-vllm')" }, + { name = "deep-ep", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "deep-gemm", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "flashinfer-cubin", version = "0.6.13", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, { name = "flashinfer-jit-cache", version = "0.6.13+cu130", source = { registry = "https://flashinfer.ai/whl/cu130" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, @@ -4403,12 +4382,9 @@ requires-dist = [ { name = "cupy-cuda13x", marker = "extra == 'mcore'" }, { name = "datasets", specifier = ">=4.0.0" }, { name = "debugpy" }, - { name = "deep-ep", marker = "platform_machine == 'aarch64' and extra == 'automodel'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, - { name = "deep-ep", marker = "platform_machine == 'aarch64' and extra == 'mcore'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, - { name = "deep-ep", marker = "platform_machine == 'aarch64' and extra == 'vllm'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=a48493600c4886c1b297aaa78db0e1ebc2d8dd6c" }, - { name = "deep-ep", marker = "platform_machine == 'x86_64' and extra == 'automodel'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, - { name = "deep-ep", marker = "platform_machine == 'x86_64' and extra == 'mcore'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, - { name = "deep-ep", marker = "platform_machine == 'x86_64' and extra == 'vllm'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=29d31c095796f3c8ece47ee9cdcc167051bbeed9" }, + { name = "deep-ep", marker = "extra == 'automodel'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=17cfb817bccec3a9c247013360cc550c2bac441e" }, + { name = "deep-ep", marker = "extra == 'mcore'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=17cfb817bccec3a9c247013360cc550c2bac441e" }, + { name = "deep-ep", marker = "extra == 'vllm'", git = "https://github.com/deepseek-ai/DeepEP.git?rev=17cfb817bccec3a9c247013360cc550c2bac441e" }, { name = "deep-gemm", marker = "extra == 'vllm'", git = "https://github.com/deepseek-ai/DeepGEMM.git?rev=67fc64863d43521080bf2005e6528d0fceee9510" }, { name = "fastokens-b10", specifier = ">=0.1.1" }, { name = "flash-attn", marker = "platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'automodel'", url = "https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.1/flash_attn-2.8.1+cu13torch2.10cxx11abiTRUE-cp313-cp313-linux_aarch64.whl" },