From afa33ae27766d1bd8f6570fa542c9d29a8164e67 Mon Sep 17 00:00:00 2001 From: Samit <285365963@qq.com> Date: Sun, 17 May 2026 22:06:50 +0800 Subject: [PATCH] Revert "Rebase to latest slime (#10)" This reverts commit 2cb7c800fabf8ce78d6129c85e0bacb97176e930. --- .github/workflows/conda-ci.yml | 2 +- .github/workflows/pr-test.yml | 654 ++-- .github/workflows/pr-test.yml.j2 | 226 +- CONTRIBUTING.md | 2 +- README.md | 12 +- README_zh.md | 4 +- build_conda.sh | 15 +- convert_qwen2.5_ckpt.sh | 5 - docker/Dockerfile | 14 +- docker/Dockerfile.gb10 | 208 -- docker/NOTES_GB10.md | 99 - docker/README.md | 3 +- docker/npu_patch/README.md | 192 - docker/npu_patch/megatron-bridge.patch | 93 - docker/npu_patch/megatron.patch | 518 --- docker/npu_patch/mindspeed.patch | 48 - docker/npu_patch/sglang.patch | 610 ---- docker/npu_patch/slime.patch | 941 ----- docker/patch/gb10/cuda_profiler_api.h | 26 - docker/patch/gb10/patch_sgl_kernel.py | 52 - docker/patch/gb10/sgl-kernel-arch.patch | 40 - docker/patch/latest/megatron.patch | 371 +- docker/patch/latest/sglang.patch | 2976 +++++++++------ docker/patch/v0.5.9/megatron.patch | 795 ---- docker/patch/v0.5.9/sglang.patch | 3216 ----------------- docker/version.txt | 2 +- docs/_static/image/arch.png | Bin 273013 -> 0 bytes docs/_static/image/sglang_config.png | Bin 671207 -> 0 bytes docs/_static/image/trace.png | Bin 2695886 -> 0 bytes docs/en/advanced/megatron-config.md | 131 - docs/en/advanced/rfc-vllm-rollout-backend.md | 360 -- docs/en/advanced/sglang-config.md | 453 --- docs/en/advanced/slime-router.md | 138 + docs/en/blogs/introducing_slime.md | 2 +- docs/en/developer_guide/ci.md | 9 +- docs/en/developer_guide/trace.md | 119 - docs/en/examples/deepseek-r1.md | 4 +- docs/en/examples/glm4.5-355B-A32B.md | 190 + docs/en/examples/glm4.7-30B-A3B.md | 10 +- docs/en/examples/glm4.7-355B-A32B.md | 189 - docs/en/examples/qwen3-4B.md | 4 +- docs/en/get_started/customization.md | 18 +- docs/en/get_started/quick_start.md | 4 +- docs/en/get_started/usage.md | 50 +- docs/en/index.rst | 6 +- docs/en/vllm/ROUTER_DESIGN.md | 462 --- docs/zh/advanced/megatron-config.md | 131 - docs/zh/advanced/sglang-config.md | 453 --- docs/zh/advanced/slime-router.md | 138 + docs/zh/developer_guide/ci.md | 9 +- docs/zh/developer_guide/trace.md | 119 - docs/zh/examples/deepseek-r1.md | 4 +- docs/zh/examples/glm4.5-355B-A32B.md | 190 + docs/zh/examples/glm4.7-30B-A3B.md | 10 +- docs/zh/examples/glm4.7-355B-A32B.md | 189 - docs/zh/examples/qwen3-4B.md | 4 +- docs/zh/get_started/customization.md | 18 +- docs/zh/get_started/quick_start.md | 4 +- docs/zh/get_started/usage.md | 52 +- docs/zh/index.rst | 6 +- examples/README.md | 6 +- examples/eval_multi_task/multi_task.yaml | 4 +- examples/fully_async/fully_async_rollout.py | 2 +- examples/geo3k_vlm/README.md | 25 +- examples/geo3k_vlm/run_geo3k_qwen35.sh | 209 -- examples/geo3k_vlm/run_geo3k_vlm.sh | 72 +- examples/geo3k_vlm/run_geo3k_vlm_sft.sh | 64 +- examples/geo3k_vlm_multi_turn/README.md | 1 + .../run_geo3k_vlm_multi_turn.py | 23 +- .../run_geo3k_vlm_multi_turn_grpo_npu.py | 154 - .../run_geo3k_vlm_multi_turn_ppo_npu.py | 168 - examples/geo3k_vlm_multi_turn/run_grpo_npu.sh | 15 - examples/geo3k_vlm_multi_turn/run_ppo_npu.sh | 15 - examples/multi_agent/agent_system.py | 19 +- examples/multi_agent/prompts.py | 2 +- examples/retool/generate_with_retool.py | 65 +- examples/search-r1/README_zh.md | 2 +- examples/strands_sglang/README.md | 2 +- .../strands_sglang/generate_with_strands.py | 19 +- examples/tau-bench/README.md | 4 +- examples/tau-bench/run_qwen3_4B.sh | 2 +- examples/train_infer_mismatch_helper/mis.py | 42 + examples/true_on_policy/README.md | 65 + examples/true_on_policy/run_simple.py | 142 + examples/true_on_policy/src/aime.png | Bin 0 -> 113208 bytes examples/true_on_policy/src/raw_reward.png | Bin 0 -> 338062 bytes examples/true_on_policy/src/rollout_time.png | Bin 0 -> 133798 bytes examples/true_on_policy/src/step_time.png | Bin 0 -> 158297 bytes .../src/train_rollout_abs_diff.png | Bin 0 -> 192604 bytes examples/true_on_policy_vlm/README.md | 23 + examples/true_on_policy_vlm/diff.png | Bin 0 -> 52949 bytes examples/true_on_policy_vlm/run_simple.py | 137 + goal_plan.md | 33 - rfc-rollout-backend-separation-plan.md | 271 -- rfc-vllm-rollout-backend-en.md | 401 -- rfc-vllm-rollout-backend.md | 436 --- ...wen2.5-0.5B-reproducibility-noncolocate.sh | 137 - run-qwen2.5-0.5B-vllm.sh | 146 - .../run-kimi-k2-Thinking-int4.sh | 2 +- .../low_precision/run-qwen3-235B-A22B-int4.sh | 1 + .../low_precision/run-qwen3-30B-A3B-int4.sh | 1 + .../low_precision/run-qwen3-30b-a3b-fp8.sh | 1 + scripts/models/deepseek-v3.sh | 2 +- scripts/models/kimi-k2-thinking.sh | 2 +- scripts/models/kimi-k2.sh | 2 +- scripts/models/moonlight.sh | 2 +- scripts/models/qwen3-235B-A22B.sh | 2 +- scripts/models/qwen3-30B-A3B.sh | 2 +- scripts/models/qwen3-next-80B-A3B.sh | 2 +- scripts/models/qwen3.5-0.8B.sh | 28 - scripts/models/qwen3.5-35B-A3B.sh | 2 +- scripts/models/qwen3.5-4B.sh | 27 - scripts/run-deepseek-r1.sh | 14 +- ...7-355B-A32B.sh => run-glm4.5-355B-A32B.sh} | 100 +- scripts/run-glm4.7-30B-A3B-8gpus.sh | 175 + scripts/run-glm4.7-30B-A3B.sh | 80 +- scripts/run-kimi-k2-Instruct.sh | 2 +- scripts/run-kimi-k2-Thinking.sh | 2 +- scripts/run-qwen2.5-0.5B-gb10-smoke.sh | 113 - scripts/run-qwen2.5-0.5B-reproducibility.sh | 1 + scripts/run-qwen3-235B-A22B.sh | 2 +- scripts/run-qwen3-4B-fsdp.sh | 146 + scripts/run-qwen3-4B.sh | 17 +- scripts/run-qwen3-next-80B-A3B.sh | 135 +- scripts/run-qwen3.5-27B.sh | 136 +- ...-35B-A3B-sft.sh => run-qwen3.5-35B-A3B.sh} | 134 +- setup.py | 8 +- setup_for_vllm.md | 21 - slime/backends/fsdp_utils/__init__.py | 8 + slime/backends/fsdp_utils/actor.py | 993 +++++ slime/backends/fsdp_utils/arguments.py | 101 + slime/backends/fsdp_utils/checkpoint.py | 250 ++ slime/backends/fsdp_utils/data_packing.py | 196 + slime/backends/fsdp_utils/kernels/__init__.py | 0 .../fsdp_utils/kernels/fused_experts.py | 381 ++ .../fused_moe_triton_backward_kernels.py | 540 +++ slime/backends/fsdp_utils/lr_scheduler.py | 195 + slime/backends/fsdp_utils/models/__init__.py | 0 slime/backends/fsdp_utils/models/qwen3_moe.py | 125 + .../fsdp_utils/models/qwen3_moe_hf.py | 43 + .../fsdp_utils/update_weight_utils.py | 286 ++ slime/backends/megatron_utils/__init__.py | 2 - slime/backends/megatron_utils/actor.py | 321 +- slime/backends/megatron_utils/arguments.py | 110 +- slime/backends/megatron_utils/checkpoint.py | 4 +- slime/backends/megatron_utils/cp_utils.py | 5 +- slime/backends/megatron_utils/data.py | 78 +- slime/backends/megatron_utils/loss.py | 311 +- .../megatron_utils/megatron_patch/__init__.py | 1 - .../megatron_chunked_grad_coalesce_patch.py | 146 - .../processors/quantizer_fp8.py | 7 +- .../megatron_utils/megatron_to_hf/qwen3_5.py | 6 +- slime/backends/megatron_utils/model.py | 175 +- .../backends/megatron_utils/model_provider.py | 63 +- slime/backends/megatron_utils/sglang.py | 25 +- .../megatron_utils/update_weight/common.py | 65 +- .../hf_weight_iterator_bridge.py | 6 +- .../hf_weight_iterator_direct.py | 1 + .../update_weight_from_distributed.py | 368 +- .../update_weight_from_tensor.py | 10 +- .../update_weight_from_tensor_vllm.py | 282 -- .../megatron_utils/weight_sync_utils.py | 312 -- slime/backends/sglang_utils/arguments.py | 13 +- slime/backends/sglang_utils/sglang_config.py | 207 -- slime/backends/sglang_utils/sglang_engine.py | 95 +- slime/backends/vllm_utils/__init__.py | 4 - slime/backends/vllm_utils/vllm_engine.py | 375 -- .../vllm_utils/vllm_translation_sidecar.py | 454 --- slime/ray/actor_group.py | 72 +- slime/ray/placement_group.py | 68 +- slime/ray/rollout.py | 587 ++- slime/ray/train_actor.py | 13 +- slime/rollout/backends/__init__.py | 18 - slime/rollout/backends/base_client.py | 31 - slime/rollout/backends/sglang_client.py | 88 - slime/rollout/backends/vllm_client.py | 192 - slime/rollout/base_types.py | 33 - slime/rollout/data_source.py | 6 +- .../filter_hub/dynamic_sampling_filters.py | 2 +- slime/rollout/generate_hub/__init__.py | 1 + slime/rollout/generate_hub/benchmarkers.py | 25 + slime/rollout/on_policy_distillation.py | 6 - slime/rollout/rm_hub/gpqa.py | 2 +- slime/rollout/sft_rollout.py | 4 - slime/rollout/sglang_rollout.py | 264 +- slime/router/__init__.py | 0 slime/router/middleware_hub/__init__.py | 0 slime/router/middleware_hub/radix_tree.py | 681 ++++ .../middleware_hub/radix_tree_middleware.py | 169 + slime/router/router.py | 2 +- slime/utils/arguments.py | 252 +- slime/utils/data.py | 27 +- slime/utils/distributed_utils.py | 4 +- slime/utils/eval_config.py | 6 - slime/utils/external_utils/command_utils.py | 15 +- slime/utils/health_monitor.py | 18 +- slime/utils/http_utils.py | 23 +- slime/utils/logging_utils.py | 14 - slime/utils/mask_utils.py | 103 +- slime/utils/megatron_bridge_utils.py | 32 - slime/utils/memory_utils.py | 6 - slime/utils/misc.py | 1 + slime/utils/ppo_utils.py | 25 +- slime/utils/processing_utils.py | 126 +- slime/utils/reloadable_process_group.py | 2 +- slime/utils/trace_utils.py | 612 ---- slime/utils/wandb_utils.py | 69 +- slime_plugins/mbridge/deepseek_v32.py | 9 - slime_plugins/mbridge/glm4moe_lite.py | 71 +- slime_plugins/mbridge/qwen3_5.py | 87 +- slime_plugins/megatron_bridge/__init__.py | 1 - slime_plugins/megatron_bridge/glm4v_moe.py | 711 ---- slime_plugins/models/hf_attention.py | 68 +- slime_plugins/models/qwen3_5.py | 34 +- slime_plugins/models/qwen3_next.py | 14 +- .../test_plugin_generate_contracts.py | 24 - .../test_plugin_runtime_hook_contracts.py | 8 +- tests/test_fsdp_import.py | 9 + tests/test_fused_experts_backward.py | 593 +++ tests/test_glm4.7_30B_A3B_pd_mooncake.py | 160 - tests/test_gspo.sh | 2 +- tests/test_megatron_argument_validation.py | 140 - tests/test_moonlight_16B_A3B_r3.py | 1 + tests/test_quick_start_glm4_9B.py | 2 +- tests/test_qwen2.5_0.5B_async_short.py | 121 - ...t_qwen2.5_0.5B_debug_rollout_then_train.py | 2 +- ...=> test_qwen2.5_0.5B_gsm8k_async_short.py} | 25 +- ...rt.py => test_qwen2.5_0.5B_gsm8k_short.py} | 25 +- tests/test_qwen2.5_0.5B_opd_sglang.py | 2 +- ...test_qwen2.5_0.5B_ppo_critic_only_short.py | 131 - tests/test_qwen2.5_0.5B_sglang_config.py | 4 +- ..._qwen2.5_0.5B_sglang_config_distributed.py | 6 +- tests/test_qwen2.5_0.5B_short.py | 120 - tests/test_qwen3.6_35B_A3B_pd_mooncake.py | 153 - tests/test_qwen3_0.6B_megatron_fsdp_align.py | 154 + tests/test_qwen3_30B_A3B_r3.py | 1 + tests/test_qwen3_4B_fsdp_true_on_policy.py | 123 + tests/test_qwen3_4B_ppo.py | 21 +- tests/test_qwen3_4B_ppo_disaggregate.py | 150 - tests/test_qwen3_4B_ppo_train_critic_only.py | 30 +- tests/test_qwen3_5_mtp_bridge_mapping.py | 242 -- .../test_qwen3_linear_attention_cu_seqlens.py | 165 - tests/test_qwen3_vl_4B_fsdp.py | 117 + tests/test_sglang_config_mixed_offload.py | 158 - tests/test_sglang_config_mixed_offload_ft.py | 165 - tests/utils/test_loss_mask_type_qwen35.py | 236 -- tests/utils/test_megatron_bridge_utils.py | 64 - tests/utils/test_megatron_role_config.py | 158 - tests/utils/test_sglang_config.py | 133 - tests/utils/test_trace_utils.py | 83 - tools/analyze_profile.py | 730 ---- tools/convert_fsdp_to_hf.py | 185 + tools/convert_hf_to_fp8.py | 5 - tools/convert_torch_dist_to_hf.py | 35 +- tools/convert_torch_dist_to_hf_bridge.py | 4 +- tools/convert_torch_dist_to_hf_parallel.py | 578 --- tools/replay_openai_jsonl.py | 535 --- tools/trace_timeline_viewer.py | 2370 ------------ train.py | 43 +- train_async.py | 28 +- 260 files changed, 10443 insertions(+), 27224 deletions(-) delete mode 100644 convert_qwen2.5_ckpt.sh delete mode 100644 docker/Dockerfile.gb10 delete mode 100644 docker/NOTES_GB10.md delete mode 100644 docker/npu_patch/README.md delete mode 100644 docker/npu_patch/megatron-bridge.patch delete mode 100644 docker/npu_patch/megatron.patch delete mode 100644 docker/npu_patch/mindspeed.patch delete mode 100644 docker/npu_patch/sglang.patch delete mode 100644 docker/npu_patch/slime.patch delete mode 100644 docker/patch/gb10/cuda_profiler_api.h delete mode 100644 docker/patch/gb10/patch_sgl_kernel.py delete mode 100644 docker/patch/gb10/sgl-kernel-arch.patch delete mode 100644 docker/patch/v0.5.9/megatron.patch delete mode 100644 docker/patch/v0.5.9/sglang.patch delete mode 100644 docs/_static/image/arch.png delete mode 100644 docs/_static/image/sglang_config.png delete mode 100644 docs/_static/image/trace.png delete mode 100644 docs/en/advanced/megatron-config.md delete mode 100644 docs/en/advanced/rfc-vllm-rollout-backend.md delete mode 100644 docs/en/advanced/sglang-config.md create mode 100644 docs/en/advanced/slime-router.md delete mode 100644 docs/en/developer_guide/trace.md create mode 100644 docs/en/examples/glm4.5-355B-A32B.md delete mode 100644 docs/en/examples/glm4.7-355B-A32B.md delete mode 100644 docs/en/vllm/ROUTER_DESIGN.md delete mode 100644 docs/zh/advanced/megatron-config.md delete mode 100644 docs/zh/advanced/sglang-config.md create mode 100644 docs/zh/advanced/slime-router.md delete mode 100644 docs/zh/developer_guide/trace.md create mode 100644 docs/zh/examples/glm4.5-355B-A32B.md delete mode 100644 docs/zh/examples/glm4.7-355B-A32B.md delete mode 100644 examples/geo3k_vlm/run_geo3k_qwen35.sh delete mode 100644 examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_grpo_npu.py delete mode 100644 examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_ppo_npu.py delete mode 100644 examples/geo3k_vlm_multi_turn/run_grpo_npu.sh delete mode 100644 examples/geo3k_vlm_multi_turn/run_ppo_npu.sh create mode 100644 examples/true_on_policy/README.md create mode 100644 examples/true_on_policy/run_simple.py create mode 100644 examples/true_on_policy/src/aime.png create mode 100644 examples/true_on_policy/src/raw_reward.png create mode 100644 examples/true_on_policy/src/rollout_time.png create mode 100644 examples/true_on_policy/src/step_time.png create mode 100644 examples/true_on_policy/src/train_rollout_abs_diff.png create mode 100644 examples/true_on_policy_vlm/README.md create mode 100644 examples/true_on_policy_vlm/diff.png create mode 100644 examples/true_on_policy_vlm/run_simple.py delete mode 100644 goal_plan.md delete mode 100644 rfc-rollout-backend-separation-plan.md delete mode 100644 rfc-vllm-rollout-backend-en.md delete mode 100644 rfc-vllm-rollout-backend.md delete mode 100644 run-qwen2.5-0.5B-reproducibility-noncolocate.sh delete mode 100644 run-qwen2.5-0.5B-vllm.sh delete mode 100644 scripts/models/qwen3.5-0.8B.sh delete mode 100644 scripts/models/qwen3.5-4B.sh rename scripts/{run-glm4.7-355B-A32B.sh => run-glm4.5-355B-A32B.sh} (60%) create mode 100755 scripts/run-glm4.7-30B-A3B-8gpus.sh delete mode 100755 scripts/run-qwen2.5-0.5B-gb10-smoke.sh create mode 100644 scripts/run-qwen3-4B-fsdp.sh rename scripts/{run-qwen3.5-35B-A3B-sft.sh => run-qwen3.5-35B-A3B.sh} (54%) mode change 100644 => 100755 delete mode 100644 setup_for_vllm.md create mode 100644 slime/backends/fsdp_utils/__init__.py create mode 100644 slime/backends/fsdp_utils/actor.py create mode 100644 slime/backends/fsdp_utils/arguments.py create mode 100644 slime/backends/fsdp_utils/checkpoint.py create mode 100644 slime/backends/fsdp_utils/data_packing.py create mode 100644 slime/backends/fsdp_utils/kernels/__init__.py create mode 100644 slime/backends/fsdp_utils/kernels/fused_experts.py create mode 100644 slime/backends/fsdp_utils/kernels/fused_moe_triton_backward_kernels.py create mode 100644 slime/backends/fsdp_utils/lr_scheduler.py create mode 100644 slime/backends/fsdp_utils/models/__init__.py create mode 100644 slime/backends/fsdp_utils/models/qwen3_moe.py create mode 100644 slime/backends/fsdp_utils/models/qwen3_moe_hf.py create mode 100644 slime/backends/fsdp_utils/update_weight_utils.py delete mode 100644 slime/backends/megatron_utils/megatron_patch/__init__.py delete mode 100644 slime/backends/megatron_utils/megatron_patch/megatron_chunked_grad_coalesce_patch.py delete mode 100644 slime/backends/megatron_utils/update_weight/update_weight_from_tensor_vllm.py delete mode 100644 slime/backends/megatron_utils/weight_sync_utils.py delete mode 100644 slime/backends/sglang_utils/sglang_config.py delete mode 100644 slime/backends/vllm_utils/__init__.py delete mode 100644 slime/backends/vllm_utils/vllm_engine.py delete mode 100644 slime/backends/vllm_utils/vllm_translation_sidecar.py delete mode 100644 slime/rollout/backends/__init__.py delete mode 100644 slime/rollout/backends/base_client.py delete mode 100644 slime/rollout/backends/sglang_client.py delete mode 100644 slime/rollout/backends/vllm_client.py create mode 100644 slime/rollout/generate_hub/__init__.py create mode 100644 slime/rollout/generate_hub/benchmarkers.py create mode 100644 slime/router/__init__.py create mode 100644 slime/router/middleware_hub/__init__.py create mode 100644 slime/router/middleware_hub/radix_tree.py create mode 100644 slime/router/middleware_hub/radix_tree_middleware.py delete mode 100644 slime/utils/trace_utils.py delete mode 100644 slime_plugins/megatron_bridge/glm4v_moe.py create mode 100644 tests/test_fsdp_import.py create mode 100644 tests/test_fused_experts_backward.py delete mode 100644 tests/test_glm4.7_30B_A3B_pd_mooncake.py delete mode 100644 tests/test_megatron_argument_validation.py delete mode 100644 tests/test_qwen2.5_0.5B_async_short.py rename tests/{test_qwen3.5_0.8B_gsm8k_async_short.py => test_qwen2.5_0.5B_gsm8k_async_short.py} (85%) rename tests/{test_qwen3.5_0.8B_gsm8k_short.py => test_qwen2.5_0.5B_gsm8k_short.py} (85%) delete mode 100644 tests/test_qwen2.5_0.5B_ppo_critic_only_short.py delete mode 100644 tests/test_qwen2.5_0.5B_short.py delete mode 100644 tests/test_qwen3.6_35B_A3B_pd_mooncake.py create mode 100644 tests/test_qwen3_0.6B_megatron_fsdp_align.py create mode 100644 tests/test_qwen3_4B_fsdp_true_on_policy.py delete mode 100644 tests/test_qwen3_4B_ppo_disaggregate.py delete mode 100644 tests/test_qwen3_5_mtp_bridge_mapping.py delete mode 100644 tests/test_qwen3_linear_attention_cu_seqlens.py create mode 100644 tests/test_qwen3_vl_4B_fsdp.py delete mode 100644 tests/test_sglang_config_mixed_offload.py delete mode 100644 tests/test_sglang_config_mixed_offload_ft.py delete mode 100644 tests/utils/test_loss_mask_type_qwen35.py delete mode 100644 tests/utils/test_megatron_bridge_utils.py delete mode 100644 tests/utils/test_megatron_role_config.py delete mode 100644 tests/utils/test_sglang_config.py delete mode 100644 tests/utils/test_trace_utils.py delete mode 100644 tools/analyze_profile.py create mode 100644 tools/convert_fsdp_to_hf.py delete mode 100644 tools/convert_torch_dist_to_hf_parallel.py delete mode 100644 tools/replay_openai_jsonl.py delete mode 100644 tools/trace_timeline_viewer.py diff --git a/.github/workflows/conda-ci.yml b/.github/workflows/conda-ci.yml index 6cb0f5ce2b..8fdedb8f7f 100644 --- a/.github/workflows/conda-ci.yml +++ b/.github/workflows/conda-ci.yml @@ -14,7 +14,7 @@ jobs: runs-on: self-hosted container: image: lmsysorg/sglang:v0.5.0rc0-cu126 - options: --privileged --cap-add SYS_NICE --security-opt seccomp=unconfined --gpus all --ipc=host --shm-size=16g --ulimit memlock=-1 --ulimit stack=67108864 --memory=0 --memory-swap=0 -v /mnt/nvme0n1/models:/root/models -v /mnt/nvme0n1/datasets:/root/datasets + options: --gpus all --ipc=host --shm-size=16g --ulimit memlock=-1 --ulimit stack=67108864 --memory=0 --memory-swap=0 -v /mnt/nvme0n1/models:/root/models -v /mnt/nvme0n1/datasets:/root/datasets defaults: run: diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 8cb815c1f2..7aebedc97b 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -29,13 +29,28 @@ jobs: if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-short')) - runs-on: self-hosted - + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: - info: [{"num_gpus": 4, "test_file": "test_qwen3.5_0.8B_gsm8k_async_short.py"}, {"num_gpus": 4, "test_file": "test_qwen3.5_0.8B_gsm8k_short.py"}, {"num_gpus": 4, "test_file": "test_qwen2.5_0.5B_ppo_critic_only_short.py"}] + info: [{"num_gpus": 4, "test_file": "test_qwen2.5_0.5B_gsm8k_async_short.py"}, {"num_gpus": 4, "test_file": "test_qwen2.5_0.5B_gsm8k_short.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_sglang_config.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_sglang_config_distributed.py"}] defaults: run: working-directory: ${{ github.workspace }} @@ -51,74 +66,49 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' - - - e2e-test-sglang-config: - - if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-sglang-config')) + e2e-test-fsdp: + if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-fsdp')) runs-on: self-hosted - + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: - info: [{"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_sglang_config.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_sglang_config_distributed.py"}, {"num_gpus": 8, "test_file": "test_sglang_config_mixed_offload.py"}, {"num_gpus": 8, "test_file": "test_sglang_config_mixed_offload_ft.py"}] + info: [{"num_gpus": 4, "test_file": "test_qwen3_4B_fsdp_true_on_policy.py --colocated"}, {"num_gpus": 8, "test_file": "test_qwen3_vl_4B_fsdp.py"}, {"num_gpus": 4, "test_file": "test_qwen3_0.6B_megatron_fsdp_align.py"}] defaults: run: working-directory: ${{ github.workspace }} @@ -134,74 +124,49 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | - - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' - + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi e2e-test-megatron: if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-megatron')) - runs-on: self-hosted - + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: - info: [{"num_gpus": 8, "test_file": "test_quick_start_glm4_9B.py"}, {"num_gpus": 8, "test_file": "test_glm4.7_30B_A3B_pd_mooncake.py"}, {"num_gpus": 8, "test_file": "test_qwen3_30B_A3B.py", "use_deepep": "1", "use_fp8_rollout": "1"}, {"num_gpus": 8, "test_file": "test_qwen3.6_35B_A3B_pd_mooncake.py", "use_deepep": "1"}, {"enable_eval": "0", "num_gpus": 8, "test_file": "test_qwen3_30B_A3B_r3.py", "use_deepep": "1", "use_fp8_rollout": "1"}, {"enable_eval": "0", "num_gpus": 8, "test_file": "test_qwen3_30B_A3B_r3.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ppo.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ppo_disaggregate.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ppo_train_critic_only.py"}, {"num_gpus": 8, "test_file": "test_moonlight_16B_A3B.py"}, {"enable_eval": "0", "num_gpus": 8, "test_file": "test_moonlight_16B_A3B_r3.py"}, {"num_gpus": 8, "test_file": "test_mimo_7B_mtp_only_grad.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_debug_rollout_then_train.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_opd_sglang.py"}] + info: [{"num_gpus": 8, "test_file": "test_quick_start_glm4_9B.py"}, {"num_gpus": 8, "test_file": "test_qwen3_30B_A3B.py", "use_deepep": "1", "use_fp8_rollout": "1"}, {"enable_eval": "0", "num_gpus": 8, "test_file": "test_qwen3_30B_A3B_r3.py", "use_deepep": "1", "use_fp8_rollout": "1"}, {"enable_eval": "0", "num_gpus": 8, "test_file": "test_qwen3_30B_A3B_r3.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ppo.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ppo_train_critic_only.py"}, {"num_gpus": 8, "test_file": "test_moonlight_16B_A3B.py"}, {"enable_eval": "0", "num_gpus": 8, "test_file": "test_moonlight_16B_A3B_r3.py"}, {"num_gpus": 8, "test_file": "test_mimo_7B_mtp_only_grad.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_debug_rollout_then_train.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_opd_sglang.py"}] defaults: run: working-directory: ${{ github.workspace }} @@ -217,74 +182,49 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | - - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' - + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi e2e-test-precision: if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-precision')) - runs-on: self-hosted - + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: - info: [{"num_gpus": 8, "test_file": "test_qwen3_0.6B_parallel_check.py"}] + info: [{"num_gpus": 8, "test_file": "test_qwen3_0.6B_parallel_check.py"}, {"num_gpus": 4, "test_file": "test_qwen3_0.6B_megatron_fsdp_align.py"}] defaults: run: working-directory: ${{ github.workspace }} @@ -300,74 +240,49 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | - - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' - + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi e2e-test-ckpt: if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-ckpt')) - runs-on: self-hosted - + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: - info: [{"num_gpus": 8, "test_file": "test_qwen3_4B_ckpt.py"}, {"num_gpus": 8, "test_args": "--async-save", "test_file": "test_qwen3_4B_ckpt.py"}] + info: [{"num_gpus": 8, "test_file": "test_qwen3_4B_ckpt.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ckpt.py --async-save"}] defaults: run: working-directory: ${{ github.workspace }} @@ -383,74 +298,49 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | - - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' - + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi e2e-test-plugin-contracts: if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' - - runs-on: ubuntu-latest - + runs-on: self-hosted + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: - info: [{"num_gpus": 0, "test_file": "test_megatron_argument_validation.py"}, {"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_rollout_contracts.py"}, {"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_runtime_hook_contracts.py"}, {"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_path_loading_contracts.py"}, {"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_generate_contracts.py"}] + info: [{"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_rollout_contracts.py"}, {"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_runtime_hook_contracts.py"}, {"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_path_loading_contracts.py"}, {"num_gpus": 0, "test_file": "plugin_contracts/test_plugin_generate_contracts.py"}] defaults: run: working-directory: ${{ github.workspace }} @@ -466,56 +356,49 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.10' - cache: 'pip' - - - name: Install dependencies - shell: bash - run: | - pip install torch --index-url https://download.pytorch.org/whl/cpu - pip install pytest numpy packaging pyyaml omegaconf tqdm httpx pybase64 pylatexenc sympy aiohttp pillow - - name: Install shell: bash - run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps - + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | - TEST_PATH="${{ matrix.info.test_file }}" if [[ "$TEST_PATH" != tests/* ]]; then TEST_PATH="tests/$TEST_PATH" fi - TEST_ARGS="${{ matrix.info.test_args || '' }}" - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf '%s\n' "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi if [ "${{ matrix.info.num_gpus }}" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" + python "$TEST_PATH" else - python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" fi - e2e-test-image: if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-image')) - runs-on: self-hosted - + container: + image: slimerl/slime-test:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: - info: [{"num_gpus": 4, "test_file": "test_qwen3.5_0.8B_gsm8k_async_short.py"}, {"num_gpus": 4, "test_file": "test_qwen3.5_0.8B_gsm8k_short.py"}, {"num_gpus": 8, "test_file": "test_quick_start_glm4_9B.py"}, {"num_gpus": 8, "test_file": "test_glm4.7_30B_A3B_pd_mooncake.py"}, {"num_gpus": 8, "test_file": "test_qwen3_30B_A3B.py"}, {"num_gpus": 8, "test_file": "test_qwen3.6_35B_A3B_pd_mooncake.py", "use_deepep": "1"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ppo.py"}, {"num_gpus": 8, "test_file": "test_moonlight_16B_A3B.py"}, {"num_gpus": 8, "test_file": "test_mimo_7B_mtp_only_grad.py"}, {"num_gpus": 8, "test_file": "test_qwen3_0.6B_parallel_check.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ckpt.py"}, {"num_gpus": 8, "test_args": "--async-save", "test_file": "test_qwen3_4B_ckpt.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_debug_rollout_then_train.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_opd_sglang.py"}] + info: [{"num_gpus": 4, "test_file": "test_qwen2.5_0.5B_gsm8k_async_short.py"}, {"num_gpus": 4, "test_file": "test_qwen2.5_0.5B_gsm8k_short.py"}, {"num_gpus": 2, "test_file": "test_qwen3_4B_fsdp_true_on_policy.py"}, {"num_gpus": 8, "test_file": "test_qwen3_vl_4B_fsdp.py"}, {"num_gpus": 8, "test_file": "test_quick_start_glm4_9B.py"}, {"num_gpus": 8, "test_file": "test_qwen3_30B_A3B.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ppo.py"}, {"num_gpus": 8, "test_file": "test_moonlight_16B_A3B.py"}, {"num_gpus": 8, "test_file": "test_mimo_7B_mtp_only_grad.py"}, {"num_gpus": 8, "test_file": "test_qwen3_0.6B_parallel_check.py"}, {"num_gpus": 4, "test_file": "test_qwen3_0.6B_megatron_fsdp_align.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ckpt.py"}, {"num_gpus": 8, "test_file": "test_qwen3_4B_ckpt.py --async-save"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_debug_rollout_then_train.py"}, {"num_gpus": 8, "test_file": "test_qwen2.5_0.5B_opd_sglang.py"}] defaults: run: working-directory: ${{ github.workspace }} @@ -531,67 +414,37 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | - - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime-test:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' - + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi e2e-test-changed-detect: if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-changed')) runs-on: self-hosted + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 outputs: matrix: ${{ steps.detect.outputs.matrix }} has_tests: ${{ steps.detect.outputs.has_tests }} @@ -632,6 +485,23 @@ jobs: needs: e2e-test-changed-detect if: needs.e2e-test-changed-detect.outputs.has_tests == 'true' runs-on: self-hosted + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: ${{ fromJson(needs.e2e-test-changed-detect.outputs.matrix) }} @@ -650,55 +520,19 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages + - name: Execute shell: bash run: | - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' \ No newline at end of file + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi \ No newline at end of file diff --git a/.github/workflows/pr-test.yml.j2 b/.github/workflows/pr-test.yml.j2 index 50fe472273..dd211bd8ae 100644 --- a/.github/workflows/pr-test.yml.j2 +++ b/.github/workflows/pr-test.yml.j2 @@ -2,31 +2,28 @@ 'e2e-test-short': { 'label': 'run-ci-short', 'tests': [ - {'test_file': 'test_qwen3.5_0.8B_gsm8k_async_short.py', 'num_gpus': 4}, - {'test_file': 'test_qwen3.5_0.8B_gsm8k_short.py', 'num_gpus': 4}, - {'test_file': 'test_qwen2.5_0.5B_ppo_critic_only_short.py', 'num_gpus': 4}, + {'test_file': 'test_qwen2.5_0.5B_gsm8k_async_short.py', 'num_gpus': 4}, + {'test_file': 'test_qwen2.5_0.5B_gsm8k_short.py', 'num_gpus': 4}, + {'test_file': 'test_qwen2.5_0.5B_sglang_config.py', 'num_gpus': 8}, + {'test_file': 'test_qwen2.5_0.5B_sglang_config_distributed.py', 'num_gpus': 8}, ], }, - 'e2e-test-sglang-config': { - 'label': 'run-ci-sglang-config', + 'e2e-test-fsdp': { + 'label': 'run-ci-fsdp', 'tests': [ - {'test_file': 'test_qwen2.5_0.5B_sglang_config.py', 'num_gpus': 8}, - {'test_file': 'test_qwen2.5_0.5B_sglang_config_distributed.py', 'num_gpus': 8}, - {'test_file': 'test_sglang_config_mixed_offload.py', 'num_gpus': 8}, - {'test_file': 'test_sglang_config_mixed_offload_ft.py', 'num_gpus': 8}, + {'test_file': 'test_qwen3_4B_fsdp_true_on_policy.py --colocated', 'num_gpus': 4}, + {'test_file': 'test_qwen3_vl_4B_fsdp.py', 'num_gpus': 8}, + {'test_file': 'test_qwen3_0.6B_megatron_fsdp_align.py', 'num_gpus': 4}, ], }, 'e2e-test-megatron': { 'label': 'run-ci-megatron', 'tests': [ {'test_file': 'test_quick_start_glm4_9B.py', 'num_gpus': 8}, - {'test_file': 'test_glm4.7_30B_A3B_pd_mooncake.py', 'num_gpus': 8}, {'test_file': 'test_qwen3_30B_A3B.py', 'num_gpus': 8, 'use_deepep': '1', 'use_fp8_rollout': '1'}, - {'test_file': 'test_qwen3.6_35B_A3B_pd_mooncake.py', 'num_gpus': 8, 'use_deepep': '1'}, {'test_file': 'test_qwen3_30B_A3B_r3.py', 'num_gpus': 8, 'use_deepep': '1', 'use_fp8_rollout': '1', 'enable_eval': '0'}, {'test_file': 'test_qwen3_30B_A3B_r3.py', 'num_gpus': 8, 'enable_eval': '0'}, {'test_file': 'test_qwen3_4B_ppo.py', 'num_gpus': 8}, - {'test_file': 'test_qwen3_4B_ppo_disaggregate.py', 'num_gpus': 8}, {'test_file': 'test_qwen3_4B_ppo_train_critic_only.py', 'num_gpus': 8}, {'test_file': 'test_moonlight_16B_A3B.py', 'num_gpus': 8}, {'test_file': 'test_moonlight_16B_A3B_r3.py', 'num_gpus': 8, 'enable_eval': '0'}, @@ -39,22 +36,21 @@ 'label': 'run-ci-precision', 'tests': [ {'test_file': 'test_qwen3_0.6B_parallel_check.py', 'num_gpus': 8}, + {'test_file': 'test_qwen3_0.6B_megatron_fsdp_align.py', 'num_gpus': 4}, ], }, 'e2e-test-ckpt': { 'label': 'run-ci-ckpt', 'tests': [ {'test_file': 'test_qwen3_4B_ckpt.py', 'num_gpus': 8}, - {'test_file': 'test_qwen3_4B_ckpt.py', 'test_args': '--async-save', 'num_gpus': 8}, + {'test_file': 'test_qwen3_4B_ckpt.py --async-save', 'num_gpus': 8}, ], }, 'e2e-test-plugin-contracts': { 'label': 'run-ci-plugin-contracts', 'always': True, - 'cpu': True, 'tests': [ - {'test_file': 'test_megatron_argument_validation.py', 'num_gpus': 0}, {'test_file': 'plugin_contracts/test_plugin_rollout_contracts.py', 'num_gpus': 0}, {'test_file': 'plugin_contracts/test_plugin_runtime_hook_contracts.py', 'num_gpus': 0}, {'test_file': 'plugin_contracts/test_plugin_path_loading_contracts.py', 'num_gpus': 0}, @@ -66,18 +62,19 @@ 'label': 'run-ci-image', 'image': 'slimerl/slime-test:latest', 'tests': [ - {'test_file': 'test_qwen3.5_0.8B_gsm8k_async_short.py', 'num_gpus': 4}, - {'test_file': 'test_qwen3.5_0.8B_gsm8k_short.py', 'num_gpus': 4}, + {'test_file': 'test_qwen2.5_0.5B_gsm8k_async_short.py', 'num_gpus': 4}, + {'test_file': 'test_qwen2.5_0.5B_gsm8k_short.py', 'num_gpus': 4}, + {'test_file': 'test_qwen3_4B_fsdp_true_on_policy.py', 'num_gpus': 2}, + {'test_file': 'test_qwen3_vl_4B_fsdp.py', 'num_gpus': 8}, {'test_file': 'test_quick_start_glm4_9B.py', 'num_gpus': 8}, - {'test_file': 'test_glm4.7_30B_A3B_pd_mooncake.py', 'num_gpus': 8}, {'test_file': 'test_qwen3_30B_A3B.py', 'num_gpus': 8}, - {'test_file': 'test_qwen3.6_35B_A3B_pd_mooncake.py', 'num_gpus': 8, 'use_deepep': '1'}, {'test_file': 'test_qwen3_4B_ppo.py', 'num_gpus': 8}, {'test_file': 'test_moonlight_16B_A3B.py', 'num_gpus': 8}, {'test_file': 'test_mimo_7B_mtp_only_grad.py', 'num_gpus': 8}, {'test_file': 'test_qwen3_0.6B_parallel_check.py', 'num_gpus': 8}, + {'test_file': 'test_qwen3_0.6B_megatron_fsdp_align.py', 'num_gpus': 4}, {'test_file': 'test_qwen3_4B_ckpt.py', 'num_gpus': 8}, - {'test_file': 'test_qwen3_4B_ckpt.py', 'test_args': '--async-save', 'num_gpus': 8}, + {'test_file': 'test_qwen3_4B_ckpt.py --async-save', 'num_gpus': 8}, {'test_file': 'test_qwen2.5_0.5B_debug_rollout_then_train.py', 'num_gpus': 8}, {'test_file': 'test_qwen2.5_0.5B_opd_sglang.py', 'num_gpus': 8}, ], @@ -112,11 +109,24 @@ jobs: <% else %> if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, '<< config.label >>')) <% endif %> -<% if config.get('cpu') %> - runs-on: ubuntu-latest -<% else %> runs-on: self-hosted -<% endif %> + container: + image: << config.image if config.image else 'slimerl/slime:latest' >> + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: @@ -135,101 +145,38 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 -<% if config.get('cpu') %> - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.10' - cache: 'pip' - - - name: Install dependencies - shell: bash - run: | - pip install torch --index-url https://download.pytorch.org/whl/cpu - pip install pytest numpy packaging pyyaml omegaconf tqdm httpx pybase64 pylatexenc sympy aiohttp pillow - name: Install shell: bash - run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps -<% else %> -<% endif %> + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages - name: Execute shell: bash run: | -<% if config.get('cpu') %> TEST_PATH="${{ matrix.info.test_file }}" if [[ "$TEST_PATH" != tests/* ]]; then TEST_PATH="tests/$TEST_PATH" fi - TEST_ARGS="${{ matrix.info.test_args || '' }}" - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf '%s\n' "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi if [ "${{ matrix.info.num_gpus }}" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" + python "$TEST_PATH" else - python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" fi -<% else %> - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - << config.image if config.image else 'slimerl/slime:latest' >> \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' -<% endif %> <% endfor %> e2e-test-changed-detect: if: (github.event_name == 'workflow_dispatch') || (github.event.pull_request && contains(github.event.pull_request.labels.*.name, 'run-ci-changed')) runs-on: self-hosted + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 outputs: matrix: ${{ steps.detect.outputs.matrix }} has_tests: ${{ steps.detect.outputs.has_tests }} @@ -270,6 +217,23 @@ jobs: needs: e2e-test-changed-detect if: needs.e2e-test-changed-detect.outputs.has_tests == 'true' runs-on: self-hosted + container: + image: slimerl/slime:latest + options: > + --gpus all + --ipc=host + --shm-size=16g + --ulimit memlock=-1 + --ulimit stack=67108864 + --memory=0 + --memory-swap=0 + -e http_proxy=$http_proxy + -e https_proxy=$https_proxy + -e HTTP_PROXY=$HTTP_PROXY + -e HTTPS_PROXY=$HTTPS_PROXY + -v /mnt/nvme0n1/slime_ci:/data/slime_ci + -v /mnt/nvme0n1/slime_ci/models:/root/models + -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets strategy: fail-fast: false matrix: ${{ fromJson(needs.e2e-test-changed-detect.outputs.matrix) }} @@ -288,55 +252,19 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Install + shell: bash + run: cd $GITHUB_WORKSPACE && pip install -e . --no-deps --break-system-packages + - name: Execute shell: bash run: | - docker run --rm \ - --privileged \ - --cap-add SYS_NICE \ - --security-opt seccomp=unconfined \ - --network host \ - --gpus all \ - --ipc=host \ - --shm-size=16g \ - --ulimit memlock=-1 \ - --ulimit stack=67108864 \ - --memory=0 \ - --memory-swap=0 \ - -e http_proxy \ - -e https_proxy \ - -e HTTP_PROXY \ - -e HTTPS_PROXY \ - -e GITHUB_COMMIT_NAME \ - -e WANDB_API_KEY \ - -e SLIME_TEST_ENABLE_INFINITE_RUN \ - -e SLIME_TEST_USE_DEEPEP \ - -e SLIME_TEST_USE_FP8_ROLLOUT \ - -e SLIME_TEST_ENABLE_EVAL \ - -e TEST_FILE="${{ matrix.info.test_file }}" \ - -e TEST_ARGS="${{ matrix.info.test_args || '' }}" \ - -e NUM_GPUS="${{ matrix.info.num_gpus }}" \ - -v "$GITHUB_WORKSPACE:$GITHUB_WORKSPACE" \ - -v /mnt/nvme0n1/slime_ci:/data/slime_ci \ - -v /mnt/nvme0n1/slime_ci/models:/root/models \ - -v /mnt/nvme0n1/slime_ci/datasets:/root/datasets \ - -w "$GITHUB_WORKSPACE" \ - slimerl/slime:latest \ - bash -lc ' - set -euo pipefail - pip install -e . --no-deps --break-system-packages - TEST_PATH="$TEST_FILE" - if [[ "$TEST_PATH" != tests/* ]]; then - TEST_PATH="tests/$TEST_PATH" - fi - if [[ -n "$TEST_ARGS" ]]; then - read -r -a TEST_ARGS_ARRAY < <(printf "%s\n" "$TEST_ARGS") - else - TEST_ARGS_ARRAY=() - fi - if [ "$NUM_GPUS" = "0" ]; then - python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - else - python tests/ci/gpu_lock_exec.py --count "$NUM_GPUS" -- python "$TEST_PATH" "${TEST_ARGS_ARRAY[@]}" - fi - ' + TEST_PATH="${{ matrix.info.test_file }}" + if [[ "$TEST_PATH" != tests/* ]]; then + TEST_PATH="tests/$TEST_PATH" + fi + if [ "${{ matrix.info.num_gpus }}" = "0" ]; then + python "$TEST_PATH" + else + python tests/ci/gpu_lock_exec.py --count ${{ matrix.info.num_gpus }} -- python "$TEST_PATH" + fi diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7b8b7ba51b..222ea070b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Thank you for your interest in contributing to slime! We deeply appreciate every ## Collaboration Scope -slime is the RL training infrastructure behind [GLM-4.5 through GLM-5.1](https://z.ai) and a large number of internal experiments at Z.ai. We open-sourced slime because we believe the training scenarios used internally cover the majority of cutting-edge RL algorithm requirements, and we hope to provide the community with a correct and efficient large-scale RL training infrastructure. +slime is the RL training infrastructure behind [GLM-4.5 through GLM-5](https://z.ai) and a large number of internal experiments at Z.ai. We open-sourced slime because we believe the training scenarios used internally cover the majority of cutting-edge RL algorithm requirements, and we hope to provide the community with a correct and efficient large-scale RL training infrastructure. Our goal for open-source collaboration is focused on **bug fixes** and **general-purpose large-scale RL optimizations**. We have had several successful collaborations with the community in this area, including: diff --git a/README.md b/README.md index 6d0232c344..3cd50d88cf 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ 1. **High-Performance Training**: Supports efficient training in various modes by connecting Megatron with SGLang; 2. **Flexible Data Generation**: Enables arbitrary training data generation workflows through custom data generation interfaces and server-based engines. -slime is the RL-framework behind [GLM-5.1](https://z.ai/blog/glm-5.1), [GLM-5](https://z.ai/blog/glm-5), [GLM-4.7](https://z.ai/blog/glm-4.7), [GLM-4.6](https://z.ai/blog/glm-4.6), [GLM-4.5](https://z.ai/blog/glm-4.5) and apart from models from Z.ai, we also supports the following models: -- Qwen series (Qwen3.6, Qwen3.5, Qwen3Next, Qwen3MoE, Qwen3, Qwen2.5); +slime is the RL-framework behind [GLM-5](https://z.ai/blog/glm-5), [GLM-4.7](https://z.ai/blog/glm-4.7), [GLM-4.6](https://z.ai/blog/glm-4.6), [GLM-4.5](https://z.ai/blog/glm-4.5) and apart from models from Z.ai, we also supports the following models: +- Qwen3 series (Qwen3Next, Qwen3MoE, Qwen3), Qwen2.5 series; - DeepSeek V3 series (DeepSeek V3, V3.1, DeepSeek R1); - Llama 3. @@ -51,14 +51,6 @@ We also provide examples for some use cases not covered in the quick start guide slime has powered several novel research projects and production systems. Here are some notable examples: -### 🌈 Relax: Asynchronous RL Engine for Omni-Modal Agentic Training - -[**Relax**](https://github.com/redai-infra/Relax) (Reinforcement Engine Leveraging Agentic X-modality) is an omni-modal agentic RL framework open-sourced by the RedAI Infra team, built upon the slime infrastructure stack that combines Ray, Megatron-LM, and SGLang. Relax adopts a service-oriented architecture on Ray Serve with Megatron-LM and SGLang as training/inference backends. It uses [TransferQueue](https://github.com/Ascend/TransferQueue) to fully decouple Actor, Rollout, ActorFwd, Reference, and Advantage computation onto independent GPU clusters, and introduces **DCS (Distributed Checkpoint Service)** — an NCCL-broadcast weight-sync engine that streams updated Actor weights to Rollout/ActorFwd/Reference asynchronously and overlaps the transfer with the next training step, enabling fully-async training at configurable staleness. Relax supports end-to-end RL for text, vision, and audio (including Qwen3-Omni) and agentic multi-turn rollouts. - -### 🦞 OpenClaw-RL: Train a Personalized Clawbot Simply by Talking to It - -[**OpenClaw-RL**](https://github.com/Gen-Verse/OpenClaw-RL) is an RL server for personalized OpenClaw agents. It hosts the OpenClaw model and improves it from prior conversations across deployments, while slime's asynchronous RL infrastructure prevents training from interfering with API serving. It supports two automatic optimization methods: GRPO with binary feedback inferred from subsequent states, and on-policy distillation that extracts hindsight hints from later feedback for the current policy. - ### ⚛️ P1: Mastering Physics Olympiads with Reinforcement Learning [**P1**](https://prime-rl.github.io/P1/) is a family of open-source physics reasoning models trained entirely through reinforcement learning. P1 leverages slime as the RL post training framework, and introduces a multi-stage RL training algorithm that progressively enhances reasoning ability through adaptive learnability adjustment and stabilization mechanisms. Enpowered by this training paradigm, P1 delivers breakthrough performance in open-source physics reasoning. diff --git a/README_zh.md b/README_zh.md index 0c00795dbf..5bc249c070 100644 --- a/README_zh.md +++ b/README_zh.md @@ -10,8 +10,8 @@ 1. **高性能训练**:通过连接 Megatron 与 SGLang,支持各种模式的高效训练; 2. **灵活的数据生成**:通过自定义数据生成接口以及 server based engine,实现任意的数据训练数据生成流程。 -slime 是 [GLM-5.1](https://z.ai/blog/glm-5.1)、[GLM-5](https://z.ai/blog/glm-5)、[GLM-4.7](https://z.ai/blog/glm-4.7)、[GLM-4.6](https://z.ai/blog/glm-4.6)、[GLM-4.5](https://z.ai/blog/glm-4.5) 背后的 RL 训练框架,除此之外,slime 还支持: -- Qwen 系列 (Qwen3.6、Qwen3.5、Qwen3Next、Qwen3MoE、Qwen3、Qwen2.5); +slime 是 [GLM-5](https://z.ai/blog/glm-5)、[GLM-4.7](https://z.ai/blog/glm-4.7)、[GLM-4.6](https://z.ai/blog/glm-4.6)、[GLM-4.5](https://z.ai/blog/glm-4.5) 背后的 RL 训练框架,除此之外,slime 还支持: +- Qwen3 系列 (Qwen3Next, Qwen3MoE, Qwen3), Qwen2.5 系列; - DeepSeek V3 系列 (DeepSeek V3, V3.1, DeepSeek R1); - Llama 3。 diff --git a/build_conda.sh b/build_conda.sh index 1d8210b232..43564311ad 100644 --- a/build_conda.sh +++ b/build_conda.sh @@ -12,7 +12,7 @@ source ~/.bashrc micromamba create -n slime python=3.12 pip -c conda-forge -y micromamba activate slime export CUDA_HOME="$CONDA_PREFIX" -export SGLANG_COMMIT="bbe9c7eeb520b0a67e92d133dfc137a3688dc7f2" +export SGLANG_COMMIT="24c91001cf99ba642be791e099d358f4dfe955f5" export MEGATRON_COMMIT="3714d81d418c9f1bca4594fc35f9e8289f652862" export BASE_DIR=${BASE_DIR:-"/root"} @@ -22,7 +22,8 @@ cd $BASE_DIR micromamba install -n slime cuda cuda-nvtx cuda-nvtx-dev nccl -c nvidia/label/cuda-12.9.1 -y micromamba install -n slime -c conda-forge cudnn -y -pip install cuda-python==12.9 +# prevent installing cuda 13.0 for sglang +pip install cuda-python==13.1.0 pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu129 # install sglang @@ -41,7 +42,7 @@ MAX_JOBS=64 pip -v install flash-attn==2.7.4.post1 --no-build-isolation pip install git+https://github.com/ISEEKYAN/mbridge.git@89eb10887887bc74853f89a4de258c0702932a1c --no-deps pip install --no-build-isolation "transformer_engine[pytorch]==2.10.0" -pip install flash-linear-attention==0.4.1 +pip install flash-linear-attention==0.4.0 NVCC_APPEND_FLAGS="--threads 4" \ pip -v install --disable-pip-version-check --no-cache-dir \ --no-build-isolation \ @@ -50,7 +51,6 @@ NVCC_APPEND_FLAGS="--threads 4" \ pip install git+https://github.com/fzyzcjy/torch_memory_saver.git@dc6876905830430b5054325fa4211ff302169c6b --no-cache-dir --force-reinstall pip install git+https://github.com/fzyzcjy/Megatron-Bridge.git@dev_rl --no-build-isolation pip install nvidia-modelopt[torch]>=0.37.0 --no-build-isolation -pip install https://github.com/zhuzilin/sgl-router/releases/download/v0.3.2-5f8d397/sglang_router-0.3.2-cp38-abi3-manylinux_2_28_x86_64.whl --force-reinstall # megatron cd $BASE_DIR @@ -68,8 +68,7 @@ if [ ! -d "$BASE_DIR/slime" ]; then export SLIME_DIR=$BASE_DIR/slime pip install -e . else - export SLIME_DIR=$BASE_DIR/slime - cd $SLIME_DIR + export SLIME_DIR=$BASE_DIR/ pip install -e . fi @@ -79,6 +78,6 @@ pip install "numpy<2" # apply patch cd $BASE_DIR/sglang -git apply $SLIME_DIR/docker/patch/v0.5.9/sglang.patch +git apply $SLIME_DIR/docker/patch/v0.5.7/sglang.patch cd $BASE_DIR/Megatron-LM -git apply $SLIME_DIR/docker/patch/v0.5.9/megatron.patch +git apply $SLIME_DIR/docker/patch/v0.5.7/megatron.patch \ No newline at end of file diff --git a/convert_qwen2.5_ckpt.sh b/convert_qwen2.5_ckpt.sh deleted file mode 100644 index fae03587dc..0000000000 --- a/convert_qwen2.5_ckpt.sh +++ /dev/null @@ -1,5 +0,0 @@ -source scripts/models/qwen2.5-0.5B.sh -PYTHONPATH=/root/Megatron-LM python tools/convert_hf_to_torch_dist.py \ - ${MODEL_ARGS[@]} \ - --hf-checkpoint /root/Qwen2.5-0.5B-Instruct \ - --save /root/Qwen2.5-0.5B-Instruct_torch_dist/ diff --git a/docker/Dockerfile b/docker/Dockerfile index 3876daaf07..710512d15f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,10 +1,10 @@ -ARG SGLANG_IMAGE_TAG=v0.5.10.post1 +ARG SGLANG_IMAGE_TAG=v0.5.9 FROM slimerl/sglang:${SGLANG_IMAGE_TAG} AS sglang # ======================================== Arguments ============================================= ARG PATCH_VERSION=latest -ARG MEGATRON_COMMIT=1dcf0dafa884ad52ffb243625717a3471643e087 +ARG MEGATRON_COMMIT=3714d81d418c9f1bca4594fc35f9e8289f652862 ARG ENABLE_CUDA_13=0 @@ -54,8 +54,8 @@ RUN git clone https://github.com/NVIDIA/Megatron-LM.git --recursive && \ cd Megatron-LM && git checkout ${MEGATRON_COMMIT} && \ pip install -e . -RUN pip install git+https://github.com/fzyzcjy/torch_memory_saver.git@d64a639 --no-cache-dir --force-reinstall -RUN pip install git+https://github.com/radixark/Megatron-Bridge.git@bridge --no-deps --no-build-isolation +RUN pip install git+https://github.com/fzyzcjy/torch_memory_saver.git@dc6876905830430b5054325fa4211ff302169c6b --no-cache-dir --force-reinstall +RUN pip install git+https://github.com/fzyzcjy/Megatron-Bridge.git@dev_rl --no-build-isolation RUN pip install nvidia-modelopt[torch]>=0.37.0 --no-build-isolation # This patch from masahi will be included in later Triton releases @@ -64,8 +64,7 @@ RUN if [ "$ENABLE_CUDA_13" = "1" ]; then \ fi COPY requirements.txt /tmp/requirements.txt -RUN pip install --ignore-installed PyJWT && \ - pip install -r /tmp/requirements.txt +RUN pip install -r /tmp/requirements.txt # Temporarily install another sgl-kernel version for GB300 without rebuilding the whole image RUN if [ "$ENABLE_CUDA_13" = "1" ]; then \ @@ -79,9 +78,6 @@ RUN pip install nvidia-cudnn-cu12==9.16.0.29 # reinstall numpy 1.x for megatron RUN pip install "numpy<2" -RUN pip install https://github.com/zhuzilin/sgl-router/releases/download/v0.3.2-5f8d397/sglang_router-0.3.2-cp38-abi3-manylinux_2_28_x86_64.whl --force-reinstall -RUN python -c "import sglang_router; assert 'slime' in sglang_router.__version__" - RUN rm -rf /root/.cache/pip /root/flash-attention # ====================================== Patches ============================================ diff --git a/docker/Dockerfile.gb10 b/docker/Dockerfile.gb10 deleted file mode 100644 index 471e2ce6f1..0000000000 --- a/docker/Dockerfile.gb10 +++ /dev/null @@ -1,208 +0,0 @@ -# Dockerfile for NVIDIA DGX Spark (GB10 / sm_121a, aarch64). -# -# slime's stock Dockerfile targets x86_64 + H100/B200/GB200 and does not work -# on GB10 (ptxas in CUDA 12.9 lacks sm_121a; published sgl_kernel wheels have -# no sm_121 variant and ABI-mismatch against NGC libtorch). -# -# This Dockerfile rebases on the NGC vLLM container which ships CUDA 13.2, -# PyTorch 2.11.0a0 (compiled with compute_120 for Blackwell PTX forward-compat), -# Triton 3.6.0, and flash-attn 2.7.4.post1 — all verified working on GB10. -# -# Digest-pinned for reproducibility. Update the digest together with the tag. -# Companion notes: NOTES_GB10.md (15 resolved blockers documented). - -ARG BASE_IMAGE=nvcr.io/nvidia/vllm:26.03-py3 -ARG BASE_DIGEST=sha256:13e327dad79e6e417f6687fec2ba76b0386d597082ec0ee003c1e964ec6ad0e7 -FROM ${BASE_IMAGE}@${BASE_DIGEST} - -# ============================================================================= -# Common env: GB10 reports cc 12.1 but NGC torch only lists compute_120. PTX -# forward-compat carries sm_120 PTX → sm_121 at runtime. Set the same for all -# downstream compilation layers. -# ============================================================================= -ENV TORCH_CUDA_ARCH_LIST="12.0+PTX" - -# ============================================================================= -# System packages missing from the NGC base but needed downstream: -# - libz3-dev : tilelang's Z3 SMT autoscheduler dlopens libz3.so -# ============================================================================= -RUN apt-get update && apt-get install -y --no-install-recommends \ - libz3-dev \ - && rm -rf /var/lib/apt/lists/* - -# ============================================================================= -# Header shims for CUDA 13 / NVTX removal -# ============================================================================= -# (1) NVTX3: CUDA 13 dropped bundled NVTX headers; the pypi placeholder is empty. -# Clone the upstream NVIDIA/NVTX repo and install just the C include tree. -RUN git clone --depth 1 https://github.com/NVIDIA/NVTX.git /tmp/nvtx_src \ - && cp -r /tmp/nvtx_src/c/include/nvtx3 /usr/local/cuda/include/nvtx3 \ - && rm -rf /tmp/nvtx_src - -# (2) cuda_profiler_api.h: CUDA 13 removed the public header; libcudart.so.13 -# still exports the two symbols. TE 2.10 only #includes the header without -# actually calling the APIs in the affected TUs, so a tiny shim is sufficient. -COPY docker/patch/gb10/cuda_profiler_api.h /usr/local/cuda/include/cuda_profiler_api.h - -# ============================================================================= -# cuDNN engines_precompiled library -# ============================================================================= -# NGC deliberately ships only runtime-compiled cuDNN libs to save space, but -# TE's bundled cudnn-frontend requires CUDNN::cudnn_engines_precompiled. The -# pypi wheel nvidia-cudnn-cu13 9.20.0.48 contains the missing .so. -RUN PIP_CONSTRAINT= pip install --no-deps nvidia-cudnn-cu13==9.20.0.48 \ - && ln -sf /usr/local/lib/python3.12/dist-packages/nvidia/cudnn/lib/libcudnn_engines_precompiled.so.9 \ - /usr/lib/aarch64-linux-gnu/libcudnn_engines_precompiled.so.9 \ - && ln -sf /usr/lib/aarch64-linux-gnu/libcudnn_engines_precompiled.so.9 \ - /usr/lib/aarch64-linux-gnu/libcudnn_engines_precompiled.so - -# ============================================================================= -# CMake 4.3.1: needed for CUDA 13 family-specific `f` arch suffix (120f/121f). -# NGC's /etc/pip/constraint.txt pins cmake==3.31.6; we must clear PIP_CONSTRAINT -# for this install. CMAKE_POLICY_VERSION_MINIMUM=3.5 lets CMake 4.x accept -# bundled third-party CMakeLists that declare cmake_minimum_required < 3.5. -# ============================================================================= -RUN PIP_CONSTRAINT= pip install --no-deps --ignore-installed --force-reinstall cmake==4.3.1 -ENV CMAKE_POLICY_VERSION_MINIMUM=3.5 - -# ============================================================================= -# Build prerequisites for the source installs below -# ============================================================================= -RUN pip install --no-deps pybind11 pathspec pyproject_metadata scikit-build-core - -# ============================================================================= -# sgl-kernel for sm_121a (SGLang's CUDA kernel library) -# ============================================================================= -# The published sgl_kernel wheels are cu12x (libnvrtc.so.12 ABI), plus the cu130 -# arm64 wheel only has the sm_100 variant, not sm_121. Also ABI-mismatch against -# NGC torch. Build from source with the GB10 arch whitelist patch. -# -# Patch: docker/patch/gb10/patch_sgl_kernel.py adds SGL_KERNEL_GB10_ONLY CMake -# option that restricts gencode to sm_120a + sm_121a (skipping sm_90a/sm_100a/ -# sm_103a/sm_110a). This is essential — compiling all seven archs simultaneously -# OOM-kills cicc on 128 GB Spark hosts. -ARG SGLANG_COMMIT=v0.5.9 -RUN git clone --depth 1 --branch ${SGLANG_COMMIT} https://github.com/sgl-project/sglang.git /root/src/sglang -COPY docker/patch/gb10/patch_sgl_kernel.py /tmp/patch_sgl_kernel.py -RUN python3 /tmp/patch_sgl_kernel.py /root/src/sglang/sgl-kernel/CMakeLists.txt \ - && rm /tmp/patch_sgl_kernel.py - -# Conservative parallelism (8 parallel × 2 nvcc-internal threads = 16 active) -# keeps peak memory ~25 GB on the 128 GB Spark. ~25 minutes on 20-core GB10. -RUN cd /root/src/sglang/sgl-kernel \ - && CMAKE_BUILD_PARALLEL_LEVEL=8 \ - CMAKE_ARGS="-DSGL_KERNEL_COMPILE_THREADS=2 -DSGL_KERNEL_GB10_ONLY=ON" \ - pip wheel . --no-build-isolation --no-deps -w /tmp/wheels \ - && pip install --no-deps /tmp/wheels/sgl_kernel-*.whl \ - && rm -rf /tmp/wheels /root/.cache/pip - -# ============================================================================= -# SGLang runtime + the small pure-python deps it needs. -# --no-deps preserves NGC torch / transformers / flashinfer / quack-kernels / -# cutlass-dsl / xgrammar / outlines that were carefully pinned in the NGC base. -# Pulling sglang's full dep set here would downgrade torch to 2.9.1+cu129 and -# break everything. -# ============================================================================= -RUN pip install --no-deps \ - "sglang==0.5.9" \ - "torch_memory_saver==0.0.9" \ - IPython traitlets stack_data executing asttokens pure_eval prompt_toolkit wcwidth \ - orjson hf_transfer modelscope litellm - -# SGLang router: zhuzilin's fork ships x86_64-only. Upstream 0.3.2 has an arm64 -# wheel that satisfies slime's version-parse comparisons (`<=0.2.1`, `<0.3.0`). -# Only loss: the `'slime' in version` check in wandb_utils.py won't match, -# which is a non-critical logging branch. -RUN pip install --no-deps sglang-router==0.3.2 - -# ============================================================================= -# TransformerEngine 2.10 for sm_121f -# ============================================================================= -# GB10 needs the CUDA 13 "f" (family-specific) arch suffix — TE's ptx.cuh has -# static_asserts that reject plain sm_120 / sm_121 in favor of sm_120f / sm_121f. -# CMake 4 is required to pass this through CMAKE_CUDA_ARCHITECTURES. -RUN TORCH_CUDA_ARCH_LIST="12.0+PTX" \ - NVTE_CUDA_ARCHS="120f;121f" \ - NVTE_FRAMEWORK=pytorch \ - MAX_JOBS=8 CMAKE_BUILD_PARALLEL_LEVEL=8 \ - pip install --no-build-isolation --no-deps \ - "git+https://github.com/NVIDIA/TransformerEngine.git@release_v2.10" - -# TE pytorch subpackage pulls onnxscript → onnx_ir → onnx → ml_dtypes at import -# time (not setup time). Install the runtime chain so `import transformer_engine.pytorch` works. -RUN pip install --no-deps onnxscript onnx_ir onnx ml_dtypes - -# ============================================================================= -# apex (NVIDIA fused optimizers / norms) -# ============================================================================= -# Pinned commit matches slime upstream Dockerfile. -RUN NVCC_APPEND_FLAGS="--threads 4" MAX_JOBS=8 \ - pip install --no-cache-dir --no-build-isolation --no-deps \ - --config-settings "--build-option=--cpp_ext --cuda_ext --parallel 8" \ - "git+https://github.com/NVIDIA/apex.git@10417aceddd7d5d05d7cbf7b0fc2daad1105f8b4" - -# ============================================================================= -# Megatron-LM (+ slime's megatron.patch) -# ============================================================================= -# slime pins Megatron commit 3714d81d... -ARG MEGATRON_COMMIT=3714d81d418c9f1bca4594fc35f9e8289f652862 -RUN git clone https://github.com/NVIDIA/Megatron-LM.git /root/src/Megatron-LM \ - && cd /root/src/Megatron-LM \ - && git checkout ${MEGATRON_COMMIT} -COPY docker/patch/latest/megatron.patch /tmp/megatron.patch -RUN cd /root/src/Megatron-LM \ - && git apply /tmp/megatron.patch --3way \ - && ! grep -R -n '^<<<<<<< ' . \ - && rm /tmp/megatron.patch \ - && pip install --no-deps --no-build-isolation -e . - -# Megatron.training / .rl / .legacy are sibling dirs meant to be on PYTHONPATH -# (slime's own docs confirm this). -ENV PYTHONPATH="/root/src/Megatron-LM" - -# ============================================================================= -# Remaining slime deps: bridges, modelopt, FLA, tilelang, antlr, omegaconf chain -# ============================================================================= -RUN pip install --no-deps \ - "git+https://github.com/ISEEKYAN/mbridge.git@89eb10887887bc74853f89a4de258c0702932a1c" \ - flash-linear-attention==0.4.1 \ - tilelang==0.1.8 - -RUN pip install --no-deps --no-build-isolation \ - "git+https://github.com/fzyzcjy/Megatron-Bridge.git@dev_rl" \ - "nvidia-modelopt>=0.37.0" - -# antlr4-python3-runtime must be pinned to 4.9.3 — omegaconf's bundled grammar -# was generated with antlr 4.9 serialized format and runtime 4.13 breaks on it -# with "Could not deserialize ATN with version 3 (expected 4)". -RUN pip install --no-deps "antlr4-python3-runtime==4.9.3" omegaconf wandb - -# Megatron requires numpy 1.x; NGC ships 2.x. -RUN PIP_CONSTRAINT= pip install --no-deps --force-reinstall "numpy<2" - -# Reward function runtime deps (grade_answer_verl / deepscaler math verifier) -RUN pip install --no-deps pylatexenc math_verify word2number - -# Eval / data-prep runtime deps -RUN pip install --no-deps pyarrow accelerate - -# ============================================================================= -# slime itself -# ============================================================================= -COPY . /root/slime -RUN cd /root/slime \ - && pip install --no-deps --no-build-isolation -e . - -# slime's int4 QAT kernel (fused per-channel fake-quant + dequant) -RUN cd /root/slime/slime/backends/megatron_utils/kernels/int4_qat \ - && pip install --no-build-isolation --no-deps . - -WORKDIR /root/slime - -# Sanity: load the full arg parser on container build -RUN python train.py --help > /tmp/help.txt \ - && test $(wc -l < /tmp/help.txt) -gt 3000 \ - && echo "slime train.py --help OK ($(wc -l < /tmp/help.txt) lines)" \ - && rm /tmp/help.txt - -CMD ["/bin/bash"] diff --git a/docker/NOTES_GB10.md b/docker/NOTES_GB10.md deleted file mode 100644 index d5417321f5..0000000000 --- a/docker/NOTES_GB10.md +++ /dev/null @@ -1,99 +0,0 @@ -# slime on NVIDIA DGX Spark (GB10) — Porting Notes - -Target platform: -- Chip: NVIDIA GB10 (Grace + consumer Blackwell, SM 12.1 / sm_121a) -- Arch: aarch64 -- OS: Ubuntu 24.04, NVIDIA driver 580.142 (CUDA 13.x forward-compat) -- Unified memory: 128 GB (CPU+GPU shared) - -## Why a new Dockerfile is needed - -slime's published Docker images (`slimerl/slime:*`) are x86_64-only. The arm64 base -it derives from (`slimerl/sglang:v0.5.9`) ships with CUDA 12.9 and stock PyTorch -2.9.1+cu129 — neither of which knows about the `sm_121a` target used by GB10: -the Triton PTX pipeline crashes with `ptxas fatal: Value 'sm_121a' is not defined`. - -The `ENABLE_CUDA_13=1` branch in the upstream Dockerfile is aimed at GB200/GB300 -(sm_100a) and still uses an x86-only router wheel and amd64 base, so it does not -directly apply to GB10. - -This port rebases slime on `nvcr.io/nvidia/vllm:26.03-py3` (arm64), which ships: -- CUDA 13.2 (ptxas understands sm_121a ✅) -- PyTorch 2.11.0a0 compiled with `compute_120` (PTX forward-compat to sm_121 ✅) -- Triton 3.6.0 (verified: Triton kernel JITs on GB10 ✅) -- flash-attn 2.7.4.post1 preinstalled - -### Base image pinning (for reproducibility) - -Pull from NGC and verify digest: - -```bash -docker pull nvcr.io/nvidia/vllm:26.03-py3 -docker inspect nvcr.io/nvidia/vllm:26.03-py3 --format '{{range .RepoDigests}}{{.}}{{end}}' -# Expected digest: -# nvcr.io/nvidia/vllm@sha256:13e327dad79e6e417f6687fec2ba76b0386d597082ec0ee003c1e964ec6ad0e7 -``` - -All downstream steps pin this digest. Product page: -https://catalog.ngc.nvidia.com/orgs/nvidia/containers/vllm?version=26.03-py3 - -## Known blockers and their resolutions - -| # | Blocker | Root cause | Resolution | -|---|---------|-----------|------------| -| 1 | `ptxas fatal: sm_121a` | CUDA 12.9 ptxas predates sm_121a (added in CUDA 13.0) | Rebase on NGC CUDA 13.2 image | -| 2 | `libnvrtc.so.12` missing from sgl_kernel wheel | Published sgl_kernel wheel is cu12x | Use cu130 wheel OR build from source | -| 3 | `sgl_kernel/sm100/...abi3.so: undefined symbol _ZN3c104cuda29c10_cuda_check_implementationEiPKcS2_ib` | Wheel built against stock libtorch, NGC libtorch has different C++ ABI | Build sgl_kernel from source against NGC torch | -| 4 | sgl_kernel arm64 wheels only build sm_100 variant | sgl-project CI doesn't target GB10 | Build sm_121 variant from source | -| 5 | sgl-kernel source build: cicc OOM on sm_90+100+103+110+120+121 concurrent compile | Cutlass FP8 templates × 7 arches × 12 parallel → >128GB | `SGL_KERNEL_GB10_ONLY=ON` CMake option (see `docker/patch/gb10/sgl-kernel-arch.patch`), drops to sm_120a+121a | -| 6 | TE 2.10 build: `CUDNN::cudnn_engines_precompiled` target not found | NGC vLLM image ships only runtime-compiled cuDNN libs | Install `nvidia-cudnn-cu13==9.20.0.48` pypi wheel (has the precompiled engines), symlink into `/usr/lib/aarch64-linux-gnu/` | -| 7 | TE 2.10 build: `nvtx3/nvToolsExt.h: No such file` | CUDA 13 dropped bundled NVTX headers; `nvidia-nvtx-cu13` pypi wheel is an empty 0.0.1 placeholder | Clone `NVIDIA/NVTX` github, copy `c/include/nvtx3/*` to `/usr/local/cuda/include/nvtx3/` | -| 8 | TE 2.10 build: `ptx.cuh` static_assert "Compile for smXXXf instead of smXXX" | Blackwell family-specific TMA features require CUDA 13's new `f` (family-specific) arch suffix, not plain integer | Set `NVTE_CUDA_ARCHS="120f;121f"` — but CMake ≤3.31 rejects `f` suffix | -| 9 | CMake 3.31 rejects `CMAKE_CUDA_ARCHITECTURES=120f;121f` | `f` suffix for CUDA 13 Blackwell family is only supported in CMake ≥4.0 | Upgrade to `cmake==4.3.1` via pip (must override NGC `/etc/pip/constraint.txt` with `PIP_CONSTRAINT=`) and set `CMAKE_POLICY_VERSION_MINIMUM=3.5` for old bundled deps | -| 10 | TE 2.10 build: `cuda_profiler_api.h: No such file` | CUDA 13 removed the public header for `cudaProfilerStart/Stop`; the symbols still exist in `libcudart.so.13`. TE's 3 `fused_softmax` TUs `#include` the header but don't call the APIs | Install a 20-line shim header at `/usr/local/cuda/include/cuda_profiler_api.h` declaring the two functions extern. Stored as `docker/patch/gb10/cuda_profiler_api.h` | -| 11 | slime `train.py --help`: `'tuple' object has no attribute 'strip'` | Typo in `slime/utils/arguments.py:1073`: `help=("string",)` (trailing comma → tuple) instead of `help=("string")` | Remove trailing comma — simple one-line slime fix, upstream-able | -| 12 | `sglang_router` x86_64-only wheel from `zhuzilin/sgl-router` fork | slime Dockerfile pins `zhuzilin/sgl-router` release (no arm64 builds); slime's `'slime' in version` assertion is only in `wandb_utils.py` (non-critical path) | Install upstream `sglang-router==0.3.2` from PyPI (has arm64 wheel). Accept wandb path fallback | -| 13 | `antlr4-python3-runtime==4.13.2` → `Could not deserialize ATN with version 3` | Omegaconf's bundled grammar was generated with antlr 4.9 serialized format; runtime 4.13 only reads format v4 | Pin `antlr4-python3-runtime==4.9.3` | -| 14 | `megatron.training` not importable after `pip install -e Megatron-LM` | Megatron-LM's setup.py only packages `megatron-core`; `megatron.training`, `megatron.rl`, `megatron.legacy` are sibling dirs meant to be on `PYTHONPATH` | `export PYTHONPATH=/root/src/Megatron-LM:$PYTHONPATH` (slime docs confirm this) | -| 15 | `libz3.so` missing for tilelang | tilelang uses Z3 SMT solver for autoscheduling; NGC vllm base doesn't include libz3 | `apt-get update && apt-get install -y libz3-dev` (libz3-4 package alias needs update first) | - -## Build journal - -### sgl-kernel OOM during build → arch whitelist patch - -First build attempt on GB10 with stock sgl-kernel v0.5.9 CMake: cicc -(NVIDIA's CUDA frontend compiler) was OOM-killed while compiling -`csrc/gemm/fp8_gemm_kernel.cu`, `fp8_blockwise_gemm_kernel.cu`, and -`nvfp4_scaled_mm_kernels.cu`. - -Root cause: for `CUDA_VERSION >= 13.0 && aarch64`, sgl-kernel unconditionally -emits seven gencodes per TU — `sm_90, sm_90a, sm_100a, sm_103a, sm_110a, -sm_120a, sm_121a`. Cutlass FP8/NVFP4 gemm template instantiation uses -~10–15 GB of RAM per TU per arch. Combined with 12 parallel nvcc jobs, peak -memory exceeded the 128 GB unified memory limit. - -Only `sm_121a` (and `sm_120a` as PTX fallback) actually runs on GB10. Hopper -(sm_90a) and datacenter Blackwell (sm_100a/sm_103a) binaries are dead weight. - -Fix: `docker/patch/gb10/sgl-kernel-arch.patch` adds a CMake option -`SGL_KERNEL_GB10_ONLY`. When set, the other gencodes and FA3 (sm_90a-only) -are skipped. Default OFF preserves upstream behavior. See the patch python -script `docker/patch/gb10/patch_sgl_kernel.py` for a programmatic apply. - -### sgl-kernel build success (M1) - -With `SGL_KERNEL_GB10_ONLY=ON`, `CMAKE_BUILD_PARALLEL_LEVEL=8`, and -`SGL_KERNEL_COMPILE_THREADS=2`, the build completed in 24 minutes with RAM -never exceeding ~25 GB. Produced `sgl_kernel-0.3.21-cp310-abi3-linux_aarch64.whl` -(74 MB), ABI-compatible with NGC libtorch 2.11.0a0 (verified via clean import -and functional rmsnorm kernel on GB10). - -## Work items - -- [x] M1: Build sgl_kernel from source for sm_121 + NGC torch ABI -- [x] M2: TransformerEngine 2.10 (sm_121f), apex, Megatron-LM all built + verified -- [x] M3: slime installed with megatron.patch applied; `train.py --help` prints 3714-line arg list -- [x] M4: End-to-end RL loop (Qwen2.5-0.5B + dapo-math-17k + GRPO colocated on 1 GB10 GPU) runs clean in 2m10s - -Reproducible image: `slime-gb10:m4-success` (36.3 GB, committed post-smoke) -- Step 0 train metrics logged; full rollout → reward → policy-update → weight-sync cycle confirmed. diff --git a/docker/README.md b/docker/README.md index 62105e3ede..69b99fe7b9 100644 --- a/docker/README.md +++ b/docker/README.md @@ -5,10 +5,9 @@ We will publish 2 kinds of docker images: 2. latest version, which aligns to `lmsysorg/sglang:latest`. current stable version is: -- sglang v0.5.9 (bbe9c7eeb520b0a67e92d133dfc137a3688dc7f2), megatron dev 3714d81d418c9f1bca4594fc35f9e8289f652862 +- sglang v0.5.7 nightly-dev-20260107-dce8b060 (dce8b0606c06d3a191a24c7b8cbe8e238ab316c9), megatron dev 3714d81d418c9f1bca4594fc35f9e8289f652862 history versions: -- sglang v0.5.7 nightly-dev-20260107-dce8b060 (dce8b0606c06d3a191a24c7b8cbe8e238ab316c9), megatron dev 3714d81d418c9f1bca4594fc35f9e8289f652862 - sglang v0.5.6 nightly-dev-20251208-5e2cda61 (5e2cda6158e670e64b926a9985d65826c537ac82), megatron v0.14.0 (23e00ed0963c35382dfe8a5a94fb3cda4d21e133) - sglang v0.5.5.post1 (303cc957e62384044dfa8e52d7d8af8abe12f0ac), megatron v0.14.0 (23e00ed0963c35382dfe8a5a94fb3cda4d21e133) - sglang v0.5.0rc0-cu126 (8ecf6b9d2480c3f600826c7d8fef6a16ed603c3f), megatron 48406695c4efcf1026a7ed70bb390793918dd97b diff --git a/docker/npu_patch/README.md b/docker/npu_patch/README.md deleted file mode 100644 index db93b67633..0000000000 --- a/docker/npu_patch/README.md +++ /dev/null @@ -1,192 +0,0 @@ -# Slime NPU Patch Installation Guide - -This guide provides instructions for installing Slime with NPU support, including all required dependencies and patches. - -## Component Version Mapping - -| Component | Version/Commit | Source | -| --------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| Slime | v0.2.2 | [GitHub](https://github.com/THUDM/slime/tree/v0.2.2) | -| SGLang | dce8b0606c06d3a191a24c7b8cbe8e238ab316c9 | [GitHub](https://github.com/sgl-project/sglang/tree/sglang-slime) | -| SGL Kernel NPU | 2026.02.01 | [GitHub](https://github.com/sgl-project/sgl-kernel-npu/releases/tag/2026.02.01) | -| Megatron-Bridge | 35b4ebfc486fb15dcc0273ceea804c3606be948a | [GitHub](https://github.com/fzyzcjy/Megatron-Bridge) | -| Megatron-LM | 3714d81d418c9f1bca4594fc35f9e8289f652862 | [GitHub](https://github.com/NVIDIA/Megatron-LM) | -| MindSpeed | fc63de5c48426dd019c3b3f39e65f5bdf56e4086 | [GitCode](https://gitcode.com/Ascend/MindSpeed) | -| HDK | 25.3.RC1 | [Ascend](https://www.hiascend.com/hardware/firmware-drivers/commercial?product=7\&model=33) | -| CANN | 8.5.0 | [Ascend](https://www.hiascend.com/developer/download/community/result?module=cann\&cann=8.5.0\&product=7\&model=33) | - -## Preparing the Running Environment - -### Python Version - -Only `python==3.11` is supported currently. - -```shell -conda create -n slime_release python=3.11 -conda activate slime_release -``` - -### Working Directory Setup - -```shell -mkdir && cd -``` - -### CANN Environment - -Prior to start work with Slime on Ascend you need to install CANN Toolkit, Kernels operator package and NNAL version 8.5.0, check the [installation guide](https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/83RC1/softwareinst/instg/instg_0008.html?Mode=PmIns\&InstallType=local\&OS=openEuler\&Software=cannToolKit) - -```shell -source /ascend-toolkit/set_env.sh -source /nnal/atb/set_env.sh -``` - -### PyTorch and PyTorch NPU - -```shell -pip install torch-npu==2.8.0 -``` - -## Installing Dependencies - -### SGLang - -```shell -cd -git clone https://github.com/sgl-project/sglang.git && cd sglang -git checkout dce8b0606c06d3a191a24c7b8cbe8e238ab316c9 -mv python/pyproject.toml python/pyproject.toml.backup -mv python/pyproject_other.toml python/pyproject.toml -pip install -e "python[srt_npu]" -pip install torch-npu==2.8.0 -``` - -### SGL Kernel NPU and Torch Memory Saver - -Download `sgl-kernel-npu-2026.02.01-torch2.8.0-py311-cann8.5.0-a3-aarch64.zip` from the release link, then install: - -```shell -pip install sgl_kernel_npu-2026.2.1-cp311-cp311-linux_aarch64.whl -pip install torch_memory_saver-0.0.8-cp311-cp311-linux_aarch64.whl -``` - -### Megatron-Bridge - -```shell -pip install git+https://github.com/ISEEKYAN/mbridge.git@89eb10887887bc74853f89a4de258c0702932a1c --no-deps - -cd -git clone https://github.com/fzyzcjy/Megatron-Bridge.git -b dev_rl -pip install nvidia-modelopt[torch]>=0.37.0 --no-build-isolation -``` - -### Megatron-LM - -```shell -cd -git clone https://github.com/NVIDIA/Megatron-LM.git --recursive && \ - cd Megatron-LM/ && git checkout 3714d81d418c9f1bca4594fc35f9e8289f652862 && \ - pip install -e . -``` - -### MindSpeed - -```shell -cd -git clone https://gitcode.com/Ascend/MindSpeed.git && \ - cd MindSpeed/ && git checkout fc63de5c48426dd019c3b3f39e65f5bdf56e4086 && \ - pip install -e . -``` - -### Slime - -```shell -cd -git clone https://github.com/ascend-slime/slime.git && cd slime -cp -r docker/npu_patch ../npu_patch -git checkout v0.2.2 -pip install -e . -``` - -## Applying Patches - -```shell -cd /slime -git apply ../npu_patch/slime.patch - -cd /sglang -git apply ../slime/docker/patch/v0.5.7/sglang.patch -git apply ../npu_patch/sglang.patch - -cd /Megatron-LM -git apply ../slime/docker/patch/v0.5.7/megatron.patch -git apply ../npu_patch/megatron.patch - -cd /Megatron-Bridge -git apply ../npu_patch/megatron-bridge.patch - -cd /MindSpeed -git apply ../npu_patch/mindspeed.patch -``` - -## Additional Dependencies - -```shell -cd /slime -pip install triton-ascend -pip install torch-npu==2.8.0 -pip install torchvision==0.23.0 -pip install numpy==1.26.0 -``` - -## Running the Training - -### Configuration - -Modify the paths in the following files according to your environment (note to use your CANN version): - -**Common (both GRPO and PPO):** - -- `slime/utils/external_utils/command_utils.py` - -**GRPO:** - -- `examples/geo3k_vlm_multi_turn/run_grpo_npu.sh` -- `examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_grpo_npu.py` - -**PPO:** - -- `examples/geo3k_vlm_multi_turn/run_ppo_npu.sh` -- `examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_ppo_npu.py` - -### Dataset - -Download the dataset from [HuggingFace](https://huggingface.co/datasets/VeraIsHere/geo3k_imgurl_processed) following the instructions in the script directory. - -### Execute Training - -```shell -cd /slime -# GRPO -bash examples/geo3k_vlm_multi_turn/run_grpo_npu.sh -# PPO -bash examples/geo3k_vlm_multi_turn/run_ppo_npu.sh -``` - -To save logs and display them simultaneously: - -```shell -# GRPO -bash examples/geo3k_vlm_multi_turn/run_grpo_npu.sh 2>&1 | tee -a -# PPO -bash examples/geo3k_vlm_multi_turn/run_ppo_npu.sh 2>&1 | tee -a -``` - -## Placeholders Reference - -| Placeholder | Description | Example | -| ------------- | ------------------------------------ | --------------------- | -| `` | Root directory for all installations | `/root/slime-release` | -| `` | Path to CANN installation directory | `/usr/local/ascend` | -| `` | Path to log file for training output | `training.log` | - diff --git a/docker/npu_patch/megatron-bridge.patch b/docker/npu_patch/megatron-bridge.patch deleted file mode 100644 index 3817097f40..0000000000 --- a/docker/npu_patch/megatron-bridge.patch +++ /dev/null @@ -1,93 +0,0 @@ -diff --git a/src/megatron/bridge/models/conversion/param_mapping.py b/src/megatron/bridge/models/conversion/param_mapping.py -index dc7d0be..8156826 100644 ---- a/src/megatron/bridge/models/conversion/param_mapping.py -+++ b/src/megatron/bridge/models/conversion/param_mapping.py -@@ -1088,15 +1088,19 @@ class AutoMapping(MegatronParamMapping[torch.Tensor]): - "ColumnParallelLinear", - "TEColumnParallelLinear", - "TELayerNormColumnParallelLinear", -+ "MindSpeedTELayerNormColumnParallelLinear", - "TEColumnParallelGroupedLinear", -+ "MindSpeedTEColumnParallelGroupedLinear", - "VocabParallelEmbedding", - "DotProductAttention", # for attention sink only - "TEDotProductAttention", # for attention sink only -+ "MindSpeedTEDotProductAttention", - }, - "row": { - "RowParallelLinear", - "TERowParallelLinear", - "TERowParallelGroupedLinear", -+ "MindSpeedTERowParallelGroupedLinear", - }, - "replicated": { - # Normalization layers -@@ -1164,7 +1168,7 @@ class AutoMapping(MegatronParamMapping[torch.Tensor]): - # Handle fused modules like TELayerNormColumnParallelLinear - # These modules have both column-parallel weights (weight, bias) - # and replicated layer norm weights (layer_norm_weight, layer_norm_bias) -- if module_type == "TELayerNormColumnParallelLinear": -+ if module_type == "TELayerNormColumnParallelLinear" or module_type == "MindSpeedTELayerNormColumnParallelLinear": - # Check the actual parameter name to determine the correct parallelism type - if self.megatron_param and ( - self.megatron_param.endswith("layer_norm_weight") or self.megatron_param.endswith("layer_norm_bias") -@@ -1195,7 +1199,7 @@ class AutoMapping(MegatronParamMapping[torch.Tensor]): - return "replicated" - - # Check parallel_mode for TELinear -- if module_type == "TELinear": -+ if module_type == "TELinear" or module_type == "MindSpeedTELinear": - if module.parallel_mode == "column": - return "column" - elif module.parallel_mode == "row": -diff --git a/src/megatron/bridge/models/qwen_vl/modelling_qwen3_vl/transformer_block.py b/src/megatron/bridge/models/qwen_vl/modelling_qwen3_vl/transformer_block.py -index 3f64d8d..9dadc4b 100644 ---- a/src/megatron/bridge/models/qwen_vl/modelling_qwen3_vl/transformer_block.py -+++ b/src/megatron/bridge/models/qwen_vl/modelling_qwen3_vl/transformer_block.py -@@ -71,8 +71,9 @@ class Qwen3VLTransformerBlock(TransformerBlock): - context_mask, - rotary_pos_emb, - visual_pos_masks, -- deepstack_visual_embeds, -+ *deepstack_visual_embeds_args, - ): -+ deepstack_visual_embeds = list(deepstack_visual_embeds_args) if deepstack_visual_embeds_args else None - for index in range(start, end): - layer = self._get_layer(index) - inner_fp8_context = ( -@@ -103,6 +104,8 @@ class Qwen3VLTransformerBlock(TransformerBlock): - return hidden_states, context - - return custom_forward -+ -+ deepstack_visual_embeds_tuple = tuple(deepstack_visual_embeds) if deepstack_visual_embeds else () - - def checkpoint_handler(forward_func): - """Determines whether to use the `te_checkpoint` or `tensor_parallel.checkpoint`""" -@@ -118,7 +121,7 @@ class Qwen3VLTransformerBlock(TransformerBlock): - context_mask, - rotary_pos_emb, - visual_pos_masks, -- deepstack_visual_embeds, -+ *deepstack_visual_embeds_tuple, - ) - else: - return tensor_parallel.checkpoint( -@@ -130,7 +133,7 @@ class Qwen3VLTransformerBlock(TransformerBlock): - context_mask, - rotary_pos_emb, - visual_pos_masks, -- deepstack_visual_embeds, -+ *deepstack_visual_embeds_tuple, - ) - - if self.config.recompute_method == "uniform": -@@ -169,7 +172,7 @@ class Qwen3VLTransformerBlock(TransformerBlock): - context_mask, - rotary_pos_emb, - visual_pos_masks, -- deepstack_visual_embeds, -+ *deepstack_visual_embeds_tuple, - ) - else: - raise ValueError("Invalid activation recompute method.") diff --git a/docker/npu_patch/megatron.patch b/docker/npu_patch/megatron.patch deleted file mode 100644 index 7687827db6..0000000000 --- a/docker/npu_patch/megatron.patch +++ /dev/null @@ -1,518 +0,0 @@ -diff --git a/megatron/core/activations.py b/megatron/core/activations.py -index 8b422d73a..58fba4667 100644 ---- a/megatron/core/activations.py -+++ b/megatron/core/activations.py -@@ -5,19 +5,19 @@ import torch.nn.functional as F - from megatron.core.jit import jit_fuser - - --@jit_fuser -+ - def squared_relu(x: torch.Tensor) -> torch.Tensor: - """Squared ReLU activation""" - return torch.pow(F.relu(x), 2) - - --@jit_fuser -+ - def quick_gelu(x: torch.Tensor) -> torch.Tensor: - """Quick GELU activation""" - return x * torch.sigmoid(1.702 * x) - - --@jit_fuser -+ - def fast_gelu(x: torch.Tensor) -> torch.Tensor: - """Fast GELU activation""" - return 0.5 * x * (1.0 + torch.tanh(x * 0.7978845608 * (1.0 + 0.044715 * x * x))) -diff --git a/megatron/core/fusions/fused_bias_dropout.py b/megatron/core/fusions/fused_bias_dropout.py -index 336452562..614ee1a48 100644 ---- a/megatron/core/fusions/fused_bias_dropout.py -+++ b/megatron/core/fusions/fused_bias_dropout.py -@@ -64,14 +64,14 @@ def bias_dropout_add_unfused(training): - return _bias_dropout_add - - --@jit_fuser -+ - def bias_dropout_add_fused_train( - x_with_bias: Tuple[torch.Tensor, Optional[torch.Tensor]], residual: torch.Tensor, prob: float - ) -> torch.Tensor: - return _bias_dropout_add_func(x_with_bias, residual, prob, True) - - --@jit_fuser -+ - def bias_dropout_add_fused_inference( - x_with_bias: Tuple[torch.Tensor, Optional[torch.Tensor]], residual: torch.Tensor, prob: float - ) -> torch.Tensor: -diff --git a/megatron/core/fusions/fused_bias_geglu.py b/megatron/core/fusions/fused_bias_geglu.py -index 7a7fbe7f9..f9a438953 100644 ---- a/megatron/core/fusions/fused_bias_geglu.py -+++ b/megatron/core/fusions/fused_bias_geglu.py -@@ -13,7 +13,7 @@ from megatron.core.jit import jit_fuser - # x * 0.5 * (1.0 + torch.erf(x * 0.70710678)) - - --@jit_fuser -+ - def geglu(y): - """Performs GEGLU (GELU-Gated Linear Unit) activation. - -@@ -27,7 +27,7 @@ def geglu(y): - return (y_1 * 0.5 * (1.0 + torch.tanh(0.79788456 * y_1 * (1 + 0.044715 * y_1 * y_1)))) * y_2 - - --@jit_fuser -+ - def bias_geglu(bias, y): - """Performs GEGLU activation with bias addition. - -@@ -45,7 +45,7 @@ def bias_geglu(bias, y): - # gradient of tanh approximation of gelu - # gradient of actual gelu is: - # 0.5 * (1. + torch.erf(x * 0.70710678)) + 0.3989423 * x * torch.exp(-0.5 * x * x) --@jit_fuser -+ - def geglu_back(g, y): - """Computes the gradient for the GEGLU activation. - -@@ -65,7 +65,7 @@ def geglu_back(g, y): - return torch.cat(((g * y_2) * ff, g * (y_1 * 0.5 * (1.0 + tanh_out))), -1) - - --@jit_fuser -+ - def bias_geglu_back(g, y, bias): - """Computes the gradient for the biased GEGLU activation. - -@@ -181,13 +181,13 @@ def bias_geglu_impl(input, bias): - # ------------------------- QUICK GEGLU FUSION -------------------------- - - --@jit_fuser -+ - def quick_gelu(y: torch.Tensor) -> torch.Tensor: - """Sigmoid approximation of gelu""" - return y * torch.sigmoid(1.702 * y) - - --@jit_fuser -+ - def quick_geglu(y: torch.Tensor, linear_offset: float = 0.0) -> torch.Tensor: - """Performs Quick-GELU-based GEGLU activation : quick_gelu(y1) * (y2 + offset). - -@@ -202,7 +202,7 @@ def quick_geglu(y: torch.Tensor, linear_offset: float = 0.0) -> torch.Tensor: - return quick_gelu(y_1) * (y_2 + linear_offset) - - --@jit_fuser -+ - def weighted_quick_geglu( - y: torch.Tensor, weights: torch.Tensor, linear_offset: float = 0.0 - ) -> torch.Tensor: -@@ -217,7 +217,7 @@ def weighted_quick_geglu( - - - # gradient of sigmoid approximation of gelu --@jit_fuser -+ - def quick_geglu_back(g, y, linear_offset: float = 0.0) -> torch.Tensor: - """Backward helper for Quick-GEGLU. - -@@ -236,7 +236,7 @@ def quick_geglu_back(g, y, linear_offset: float = 0.0) -> torch.Tensor: - return torch.cat((dy_1, dy_2), -1) - - --@jit_fuser -+ - def weighted_quick_geglu_back(g, y, weights, linear_offset: float = 0.0): - """Backward helper for weighted Quick-GEGLU. - Returns gradient w.r.t input `y` and `weights`. -@@ -255,7 +255,7 @@ def weighted_quick_geglu_back(g, y, weights, linear_offset: float = 0.0): - # ---------------- Weighted Bias Quick-GEGLU helpers ----------------- - - --@jit_fuser -+ - def weighted_bias_quick_geglu( - y: torch.Tensor, bias: torch.Tensor, weights: torch.Tensor, linear_offset: float = 0.0 - ) -> torch.Tensor: -@@ -275,7 +275,7 @@ def weighted_bias_quick_geglu( - return res.to(dtype) - - --@jit_fuser -+ - def weighted_bias_quick_geglu_back(g, y, bias, weights, linear_offset: float = 0.0): - """Backward helper for weighted Quick-GEGLU with bias. - -diff --git a/megatron/core/fusions/fused_bias_gelu.py b/megatron/core/fusions/fused_bias_gelu.py -index 8cc90f617..fda8f2f5f 100644 ---- a/megatron/core/fusions/fused_bias_gelu.py -+++ b/megatron/core/fusions/fused_bias_gelu.py -@@ -13,7 +13,7 @@ from megatron.core.jit import jit_fuser - # x * 0.5 * (1.0 + torch.erf(x * 0.70710678)) - - --@jit_fuser -+ - def bias_gelu(bias, y): - x = bias + y - return x * 0.5 * (1.0 + torch.tanh(0.79788456 * x * (1 + 0.044715 * x * x))) -@@ -22,7 +22,7 @@ def bias_gelu(bias, y): - # gradient of tanh approximation of gelu - # gradient of actual gelu is: - # 0.5 * (1. + torch.erf(x * 0.70710678)) + 0.3989423 * x * torch.exp(-0.5 * x * x) --@jit_fuser -+ - def bias_gelu_back(g, bias, y): - x = bias + y - tanh_out = torch.tanh(0.79788456 * x * (1 + 0.044715 * x * x)) -diff --git a/megatron/core/fusions/fused_bias_swiglu.py b/megatron/core/fusions/fused_bias_swiglu.py -index 632470876..105936786 100644 ---- a/megatron/core/fusions/fused_bias_swiglu.py -+++ b/megatron/core/fusions/fused_bias_swiglu.py -@@ -12,7 +12,7 @@ from megatron.core.utils import nvtx_decorator - ###### BIAS SWIGLU FUSION/ NO AUTOGRAD ################ - - --@jit_fuser -+ - def swiglu(y): - """Performs SwiGLU (Swish-Gated Linear Unit) activation function. - -@@ -26,7 +26,7 @@ def swiglu(y): - return F.silu(y_1) * y_2 - - --@jit_fuser -+ - def bias_swiglu(y, bias): - """Performs SwiGLU activation with bias addition. - -@@ -41,7 +41,7 @@ def bias_swiglu(y, bias): - return swiglu(y) - - --@jit_fuser -+ - def weighted_swiglu(y, weights): - dtype = y.dtype - res = swiglu(y) * weights -@@ -51,7 +51,7 @@ def weighted_swiglu(y, weights): - # gradient of tanh approximation of gelu - # gradient of actual gelu is: - # 0.5 * (1. + torch.erf(x * 0.70710678)) + 0.3989423 * x * torch.exp(-0.5 * x * x) --@jit_fuser -+ - def swiglu_back(g, y): - """Computes the gradient for the SwiGLU activation function. - -@@ -69,7 +69,7 @@ def swiglu_back(g, y): - ) - - --@jit_fuser -+ - def bias_swiglu_back(g, y, bias): - """Computes the gradient for the biased SwiGLU activation function. - -@@ -86,7 +86,7 @@ def bias_swiglu_back(g, y, bias): - return swiglu_back(g, y) - - --@jit_fuser -+ - def weighted_swiglu_back(g, y, weights): - input_dtype = y.dtype - w_dtype = weights.dtype -diff --git a/megatron/core/fusions/fused_cross_entropy.py b/megatron/core/fusions/fused_cross_entropy.py -index 23e4b6031..4d447e0e0 100644 ---- a/megatron/core/fusions/fused_cross_entropy.py -+++ b/megatron/core/fusions/fused_cross_entropy.py -@@ -9,7 +9,7 @@ from megatron.core.tensor_parallel.cross_entropy import VocabParallelCrossEntrop - from megatron.core.tensor_parallel.utils import VocabUtility - - --@jit_fuser -+ - def calculate_logits_max(vocab_parallel_logits: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]: - """ - Calculates the maximum logits of the predicted tokens. -@@ -22,7 +22,7 @@ def calculate_logits_max(vocab_parallel_logits: torch.Tensor) -> Tuple[torch.Ten - return vocab_parallel_logits, logits_max - - --@jit_fuser -+ - def calculate_predicted_logits( - vocab_parallel_logits: torch.Tensor, - target: torch.Tensor, -@@ -44,7 +44,7 @@ def calculate_predicted_logits( - return target_mask, masked_target_1d, predicted_logits_sum_exp_logits, exp_logits - - --@jit_fuser -+ - def calculate_cross_entropy_loss( - exp_logits: torch.Tensor, predicted_logits_sum_exp_logits: torch.Tensor - ) -> Tuple[torch.Tensor, torch.Tensor]: -@@ -61,7 +61,7 @@ def calculate_cross_entropy_loss( - return exp_logits, loss - - --@jit_fuser -+ - def calculate_gradients( - softmax: torch.Tensor, - grad_output: torch.Tensor, -diff --git a/megatron/core/fusions/fused_pad_routing_map.py b/megatron/core/fusions/fused_pad_routing_map.py -index c382178b6..563279edd 100644 ---- a/megatron/core/fusions/fused_pad_routing_map.py -+++ b/megatron/core/fusions/fused_pad_routing_map.py -@@ -70,7 +70,7 @@ def _pad_routing_map_kernel( - tl.store(output_row_ptr + token_indices, output_row, mask=token_mask) - - --@jit_fuser -+ - def fused_pad_routing_map(routing_map: torch.Tensor, pad_multiple: int) -> torch.Tensor: - """Fused version of pad_routing_map. - Args: -diff --git a/megatron/core/fusions/fused_weighted_squared_relu.py b/megatron/core/fusions/fused_weighted_squared_relu.py -index 02dabc14c..137022386 100644 ---- a/megatron/core/fusions/fused_weighted_squared_relu.py -+++ b/megatron/core/fusions/fused_weighted_squared_relu.py -@@ -10,7 +10,7 @@ from megatron.core.utils import nvtx_decorator - ###################### WEIGHTED SQUARED ReLU FUSION ###################### - - --@jit_fuser -+ - def weighted_squared_relu(x: torch.Tensor, weights: torch.Tensor) -> torch.Tensor: - """Element-wise weight applied after Squared-ReLU. - -@@ -28,7 +28,7 @@ def weighted_squared_relu(x: torch.Tensor, weights: torch.Tensor) -> torch.Tenso - return res.to(out_dtype) - - --@jit_fuser -+ - def _squared_relu_back(g: torch.Tensor, x: torch.Tensor) -> torch.Tensor: - """Gradient of Squared-ReLU. - -@@ -37,7 +37,7 @@ def _squared_relu_back(g: torch.Tensor, x: torch.Tensor) -> torch.Tensor: - return g * 2 * F.relu(x) - - --@jit_fuser -+ - def weighted_squared_relu_back(g: torch.Tensor, x: torch.Tensor, weights: torch.Tensor): - """Backward for weighted Squared-ReLU. - -diff --git a/megatron/core/models/gpt/gpt_layer_specs.py b/megatron/core/models/gpt/gpt_layer_specs.py -index 712793853..76ea4333b 100755 ---- a/megatron/core/models/gpt/gpt_layer_specs.py -+++ b/megatron/core/models/gpt/gpt_layer_specs.py -@@ -219,7 +219,7 @@ def get_gpt_layer_with_transformer_engine_spec( - 'The fp8 argument in "get_gpt_layer_with_transformer_engine_spec" has been deprecated' - " and will be removed soon. Please update your code accordingly." - ) -- -+ from megatron.core.extensions.transformer_engine_spec_provider import TESpecProvider - if use_kitchen: - assert HAVE_KITCHEN - backend: BackendSpecProvider = KitchenSpecProvider( -diff --git a/megatron/core/ssm/gated_delta_net.py b/megatron/core/ssm/gated_delta_net.py -index dfa6e4c35..8b3621819 100644 ---- a/megatron/core/ssm/gated_delta_net.py -+++ b/megatron/core/ssm/gated_delta_net.py -@@ -413,7 +413,7 @@ class GatedDeltaNet(MegatronModule): - - return out, out_bias - -- @jit_fuser -+ - def _apply_gated_norm(self, x, gate): - # Output Norm - x_dtype = x.dtype -diff --git a/megatron/core/transformer/attention.py b/megatron/core/transformer/attention.py -index 80e9ec6fc..b6bcef6a9 100644 ---- a/megatron/core/transformer/attention.py -+++ b/megatron/core/transformer/attention.py -@@ -1026,7 +1026,7 @@ class Attention(MegatronModule, ABC): - - return output, bias - -- @jit_fuser -+ - def _apply_output_gate(self, x, gate): - x_dtype = x.dtype - gate = gate.contiguous() -diff --git a/megatron/core/transformer/module.py b/megatron/core/transformer/module.py -index 2330df91b..0446c9097 100644 ---- a/megatron/core/transformer/module.py -+++ b/megatron/core/transformer/module.py -@@ -16,9 +16,9 @@ from megatron.core.transformer.utils import ( - sharded_state_dict_default, - ) - --_FLOAT_TYPES = (torch.FloatTensor, torch.cuda.FloatTensor) --_HALF_TYPES = (torch.HalfTensor, torch.cuda.HalfTensor) --_BF16_TYPES = (torch.BFloat16Tensor, torch.cuda.BFloat16Tensor) -+_FLOAT_TYPES = (torch.FloatTensor, torch.cuda.FloatTensor, torch.npu.FloatTensor) -+_HALF_TYPES = (torch.HalfTensor, torch.cuda.HalfTensor, torch.npu.HalfTensor) -+_BF16_TYPES = (torch.BFloat16Tensor, torch.cuda.BFloat16Tensor, torch.npu.BFloat16Tensor) - - - def param_is_not_shared(param): # pylint: disable=missing-function-docstring -diff --git a/megatron/core/transformer/moe/experts.py b/megatron/core/transformer/moe/experts.py -index 5eeafdd8d..a4dce6970 100644 ---- a/megatron/core/transformer/moe/experts.py -+++ b/megatron/core/transformer/moe/experts.py -@@ -91,7 +91,7 @@ class GroupedMLP(MegatronModule): - if self.config.activation_func not in (F.silu, F.gelu): - raise ValueError("Activation function must be silu or gelu when using GroupedMLP.") - -- @jit_fuser -+ - def glu(x): - x = torch.chunk(x, 2, dim=-1) - return self.config.activation_func(x[0]) * x[1] -@@ -108,7 +108,7 @@ class GroupedMLP(MegatronModule): - "moe_act recompute for fp8 or fp4 cannot work with the legacy GroupedMLP." - ) - -- @jit_fuser -+ - def activation_func_with_probs(x, probs): - dtype = x.dtype - res = self.activation_func(x) * probs -diff --git a/megatron/core/transformer/moe/router.py b/megatron/core/transformer/moe/router.py -index 517944f25..2c5bc0728 100644 ---- a/megatron/core/transformer/moe/router.py -+++ b/megatron/core/transformer/moe/router.py -@@ -472,7 +472,7 @@ class TopKRouter(Router): - else: - return input - -- @jit_fuser -+ - def _apply_expert_bias(self, routing_map: torch.Tensor): - """ - Update expert bias and tokens_per_expert -diff --git a/megatron/core/transformer/moe/token_dispatcher.py b/megatron/core/transformer/moe/token_dispatcher.py -index d0da38d63..6d092c88f 100644 ---- a/megatron/core/transformer/moe/token_dispatcher.py -+++ b/megatron/core/transformer/moe/token_dispatcher.py -@@ -1403,7 +1403,7 @@ class MoEFlexTokenDispatcher(MoETokenDispatcher): - ).contiguous() - return routing_map, probs - -- @jit_fuser -+ - def dispatch_preprocess( - self, hidden_states: torch.Tensor, routing_map: torch.Tensor, probs: torch.Tensor - ): -diff --git a/megatron/core/transformer/torch_norm.py b/megatron/core/transformer/torch_norm.py -index d0ceca7af..f16796680 100644 ---- a/megatron/core/transformer/torch_norm.py -+++ b/megatron/core/transformer/torch_norm.py -@@ -69,7 +69,7 @@ class L2Norm(torch.nn.Module): - self.hidden_size = hidden_size - self.eps = eps - -- @jit_fuser -+ - def _norm(self, x): - """ - Performs the actual L2 normalization. -diff --git a/megatron/core/transformer/utils.py b/megatron/core/transformer/utils.py -index 880c53099..dbc95736e 100644 ---- a/megatron/core/transformer/utils.py -+++ b/megatron/core/transformer/utils.py -@@ -51,7 +51,7 @@ def attention_mask_func(attention_scores, attention_mask): - return attention_scores - - --@jit_fuser -+ - def gelu_impl(x): - """OpenAI's gelu implementation.""" - return 0.5 * x * (1.0 + torch.tanh(0.7978845608028654 * x * (1.0 + 0.044715 * x * x))) -@@ -65,7 +65,7 @@ def openai_gelu(x): - # This is actually Python equivalent of torch.nn.functional.gelu(), also with - # type hints for ONNX exporter - # pylint: disable=missing-function-docstring --@jit_fuser -+ - def erf_gelu(x): - return ( - x * 0.5 * (torch.erf(x / 1.41421).to(dtype=x.dtype) + torch.ones_like(x).to(dtype=x.dtype)) -diff --git a/megatron/legacy/model/fused_bias_gelu.py b/megatron/legacy/model/fused_bias_gelu.py -index e00e63148..ffe4b7ec6 100644 ---- a/megatron/legacy/model/fused_bias_gelu.py -+++ b/megatron/legacy/model/fused_bias_gelu.py -@@ -12,7 +12,7 @@ from megatron.core.jit import jit_fuser - # actual gelu is: - # x * 0.5 * (1.0 + torch.erf(x * 0.70710678)) - --@jit_fuser -+ - def bias_gelu(bias, y): - x = bias + y - return x * 0.5 * (1.0 + torch.tanh(0.79788456 * x * (1 + 0.044715 * x * x))) -@@ -20,7 +20,7 @@ def bias_gelu(bias, y): - # gradient of tanh approximation of gelu - # gradient of actual gelu is: - # 0.5 * (1. + torch.erf(x * 0.70710678)) + 0.3989423 * x * torch.exp(-0.5 * x * x) --@jit_fuser -+ - def bias_gelu_back(g, bias, y): - x = bias + y - tanh_out = torch.tanh(0.79788456 * x * (1 + 0.044715 * x * x)) -diff --git a/megatron/legacy/model/transformer.py b/megatron/legacy/model/transformer.py -index 2a662a55b..2fc3e1bfb 100644 ---- a/megatron/legacy/model/transformer.py -+++ b/megatron/legacy/model/transformer.py -@@ -856,7 +856,7 @@ def get_bias_dropout_add(training): - return _bias_dropout_add - - --@jit_fuser -+ - def bias_dropout_add_fused_train(x: torch.Tensor, - bias: Optional[torch.Tensor], - residual: torch.Tensor, -@@ -864,7 +864,7 @@ def bias_dropout_add_fused_train(x: torch.Tensor, - return bias_dropout_add(x, bias, residual, prob, True) - - --@jit_fuser -+ - def bias_dropout_add_fused_inference(x: torch.Tensor, - bias: Optional[torch.Tensor], - residual: torch.Tensor, -diff --git a/megatron/legacy/model/utils.py b/megatron/legacy/model/utils.py -index 5762000d5..534858df7 100644 ---- a/megatron/legacy/model/utils.py -+++ b/megatron/legacy/model/utils.py -@@ -43,7 +43,7 @@ def get_linear_layer(rows, columns, init_method): - return layer - - --@jit_fuser -+ - def gelu_impl(x): - """OpenAI's gelu implementation.""" - return 0.5 * x * (1.0 + torch.tanh(0.7978845608028654 * x * -@@ -54,7 +54,7 @@ def openai_gelu(x): - - - #This is actually Python equivalent of torch.nn.functional.gelu(), also with type hints for ONNX exporter --@jit_fuser -+ - def erf_gelu(x): - return x * 0.5 * (torch.erf(x / 1.41421).to(dtype=x.dtype)+torch.ones_like(x).to(dtype=x.dtype)) - diff --git a/docker/npu_patch/mindspeed.patch b/docker/npu_patch/mindspeed.patch deleted file mode 100644 index 0cf1c84840..0000000000 --- a/docker/npu_patch/mindspeed.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/mindspeed/core/fusions/fused_rope.py b/mindspeed/core/fusions/fused_rope.py -index a6f02e07..70f7cb08 100644 ---- a/mindspeed/core/fusions/fused_rope.py -+++ b/mindspeed/core/fusions/fused_rope.py -@@ -126,5 +126,6 @@ def apply_rotary_pos_emb( - freqs, - rotary_interleaved=config.rotary_interleaved, - multi_latent_attention=config.multi_latent_attention, -- mscale=mscale -+ mscale=mscale, -+ cp_group=cp_group - ) -diff --git a/mindspeed/megatron_adaptor.py b/mindspeed/megatron_adaptor.py -index f14b231d..4615590e 100644 ---- a/mindspeed/megatron_adaptor.py -+++ b/mindspeed/megatron_adaptor.py -@@ -57,6 +57,7 @@ def delete_lock_file(): - def repatch(args): - MindSpeedFeaturesManager.remove_patches() - full_args = get_full_args() -+ args = vars(args) - for k, v in args.items(): - setattr(full_args, k, v) - MindSpeedFeaturesManager.apply_features_pre_patches(full_args) -diff --git a/mindspeed/te/pytorch/attention/dot_product_attention/dot_product_attention.py b/mindspeed/te/pytorch/attention/dot_product_attention/dot_product_attention.py -index ac4eabe5..78c5866d 100644 ---- a/mindspeed/te/pytorch/attention/dot_product_attention/dot_product_attention.py -+++ b/mindspeed/te/pytorch/attention/dot_product_attention/dot_product_attention.py -@@ -330,6 +330,8 @@ class DotProductAttention(torch.nn.Module): - inference_params: Any = None, - pad_between_seqs: Optional[bool] = None, - fp8_output: Optional[bool] = False, -+ local_cp_size=None, -+ cp_group=None, - ) -> torch.Tensor: - """ - Dot Product Attention Layer. -@@ -659,7 +661,9 @@ class MindSpeedTEDotProductAttention(DotProductAttention): - ) and not getattr(self.config, 'is_llava', False): - self.config.sparse_mode = 2 - attention_mask = get_attention_mask(self.config) -- -+ attention_mask = torch.triu( -+ torch.ones((2048, 2048), -+ device=query.device, dtype=torch.bool), diagonal=1) - packed_seq_kwargs = ( - {key: getattr(packed_seq_params, key) for key in self.kept_packed_seq_params} - if packed_seq_params is not None diff --git a/docker/npu_patch/sglang.patch b/docker/npu_patch/sglang.patch deleted file mode 100644 index b684d3c0eb..0000000000 --- a/docker/npu_patch/sglang.patch +++ /dev/null @@ -1,610 +0,0 @@ -diff --git a/python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py b/python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py -index 8a343d43b..3e49dddb0 100644 ---- a/python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py -+++ b/python/sglang/srt/hardware_backend/npu/attention/ascend_backend.py -@@ -1050,93 +1050,36 @@ class AscendAttnBackend(AttentionBackend): - ) - - if not self.use_mla: -- num_tokens = q.shape[0] -- """PA will support bs torch.Tensor: -- qkv, _ = self.qkv_proj(hidden_states) -- q, k, v = qkv.split([self.q_size, self.kv_size, self.kv_size], dim=-1) -- q, k = self.rotary_emb(positions, q, k) -+ if not _is_npu or not hasattr(self.rotary_emb, "get_cos_sin_with_position"): -+ q, k, v = self.forward_prepare_native( -+ positions=positions, -+ hidden_states=hidden_states, -+ ) -+ else: -+ q, k, v = self.forward_prepare_npu( -+ positions=positions, -+ hidden_states=hidden_states, -+ forward_batch=forward_batch, -+ ) -+ - attn_output = self.attn(q, k, v, forward_batch) - output, _ = self.o_proj(attn_output) - return output -diff --git a/python/sglang/srt/models/qwen3.py b/python/sglang/srt/models/qwen3.py -index 47a1a4e4c..2cdbf8906 100644 ---- a/python/sglang/srt/models/qwen3.py -+++ b/python/sglang/srt/models/qwen3.py -@@ -161,12 +161,12 @@ class Qwen3Attention(nn.Module): - qkv, - self.rotary_emb.position_sin, - self.rotary_emb.position_cos, -- self.q_norm.weight, -- self.k_norm.weight, - self.q_size, - self.kv_size, - self.head_dim, -- self.q_norm.variance_epsilon, -+ eps=self.q_norm.variance_epsilon, -+ q_weight=self.q_norm.weight, -+ k_weight=self.k_norm.weight, - q_bias=getattr(self.q_norm, "bias", None), - k_bias=getattr(self.k_norm, "bias", None), - ) -@@ -370,6 +370,7 @@ class Qwen3ForCausalLM(nn.Module): - config.vocab_size, - config.hidden_size, - quant_config=quant_config, -+ use_attn_tp_group=get_global_server_args().enable_dp_lm_head, - prefix=add_prefix("lm_head", prefix), - ) - else: -diff --git a/python/sglang/srt/models/qwen3_moe.py b/python/sglang/srt/models/qwen3_moe.py -index e277d46f2..9e49156da 100644 ---- a/python/sglang/srt/models/qwen3_moe.py -+++ b/python/sglang/srt/models/qwen3_moe.py -@@ -549,12 +549,12 @@ class Qwen3MoeAttention(nn.Module): - qkv, - self.rotary_emb.position_sin, - self.rotary_emb.position_cos, -- self.q_norm.weight, -- self.k_norm.weight, - self.q_size, - self.kv_size, - self.head_dim, -- self.q_norm.variance_epsilon, -+ eps=self.q_norm.variance_epsilon, -+ q_weight=self.q_norm.weight, -+ k_weight=self.k_norm.weight, - q_bias=getattr(self.q_norm, "bias", None), - k_bias=getattr(self.k_norm, "bias", None), - ) -diff --git a/python/sglang/srt/models/qwen3_vl.py b/python/sglang/srt/models/qwen3_vl.py -index 218e32362..9f3141ce2 100644 ---- a/python/sglang/srt/models/qwen3_vl.py -+++ b/python/sglang/srt/models/qwen3_vl.py -@@ -19,6 +19,7 @@ import re - from functools import lru_cache, partial - from typing import Callable, Iterable, List, Optional, Tuple, Union - -+import numpy as np - import torch - import torch.nn as nn - from einops import rearrange -@@ -397,70 +398,89 @@ class Qwen3VLMoeVisionModel(nn.Module, RotaryPosMixin): - return cos_combined, sin_combined - - def fast_pos_embed_interpolate(self, grid_thw): -- grid_ts, grid_hs, grid_ws = grid_thw[:, 0], grid_thw[:, 1], grid_thw[:, 2] - num_grid_per_side = int(self.num_position_embeddings**0.5) -- device = self.pos_embed.weight.device - - idx_list = [[] for _ in range(4)] - weight_list = [[] for _ in range(4)] - -- for t, h, w in zip(grid_ts, grid_hs, grid_ws): -- h_idxs = torch.linspace(0, num_grid_per_side - 1, h) -- w_idxs = torch.linspace(0, num_grid_per_side - 1, w) -+ # TODO: use torch instand of np -+ for t, h, w in grid_thw: -+ h_idxs = np.linspace(0, num_grid_per_side - 1, h) -+ w_idxs = np.linspace(0, num_grid_per_side - 1, w) - -- h_idxs_floor = h_idxs.int() -- w_idxs_floor = w_idxs.int() -- h_idxs_ceil = (h_idxs.int() + 1).clip(max=num_grid_per_side - 1) -- w_idxs_ceil = (w_idxs.int() + 1).clip(max=num_grid_per_side - 1) -+ h_idxs_floor = h_idxs.astype(int) -+ w_idxs_floor = w_idxs.astype(int) -+ h_idxs_ceil = (h_idxs.astype(int) + 1).clip(max=num_grid_per_side - 1) -+ w_idxs_ceil = (w_idxs.astype(int) + 1).clip(max=num_grid_per_side - 1) - - dh = h_idxs - h_idxs_floor - dw = w_idxs - w_idxs_floor - -- base_h = h_idxs_floor * num_grid_per_side -- base_h_ceil = h_idxs_ceil * num_grid_per_side -- -- indices = [ -- (base_h[None].T + w_idxs_floor[None]).flatten(), -- (base_h[None].T + w_idxs_ceil[None]).flatten(), -- (base_h_ceil[None].T + w_idxs_floor[None]).flatten(), -- (base_h_ceil[None].T + w_idxs_ceil[None]).flatten(), -- ] -+ idx_list[0].extend( -+ ((h_idxs_floor * num_grid_per_side)[None].T + w_idxs_floor[None]) -+ .flatten() -+ .tolist() -+ * t -+ ) -+ idx_list[1].extend( -+ ((h_idxs_floor * num_grid_per_side)[None].T + w_idxs_ceil[None]) -+ .flatten() -+ .tolist() -+ * t -+ ) -+ idx_list[2].extend( -+ ((h_idxs_ceil * num_grid_per_side)[None].T + w_idxs_floor[None]) -+ .flatten() -+ .tolist() -+ * t -+ ) -+ idx_list[3].extend( -+ ((h_idxs_ceil * num_grid_per_side)[None].T + w_idxs_ceil[None]) -+ .flatten() -+ .tolist() -+ * t -+ ) - -- weights = [ -- ((1 - dh)[None].T * (1 - dw)[None]).flatten(), -- ((1 - dh)[None].T * dw[None]).flatten(), -- (dh[None].T * (1 - dw)[None]).flatten(), -- (dh[None].T * dw[None]).flatten(), -- ] -+ weight_list[0].extend( -+ ((1 - dh)[None].T * (1 - dw)[None]).flatten().tolist() * t -+ ) -+ weight_list[1].extend(((1 - dh)[None].T * dw[None]).flatten().tolist() * t) -+ weight_list[2].extend((dh[None].T * (1 - dw)[None]).flatten().tolist() * t) -+ weight_list[3].extend((dh[None].T * dw[None]).flatten().tolist() * t) - -- for i in range(4): -- idx_list[i].extend(indices[i].tolist()) -- weight_list[i].extend(weights[i].tolist()) -+ device = self.pos_embed.weight.device -+ dtype = self.pos_embed.weight.dtype - -- idx_tensor = torch.tensor(idx_list, dtype=torch.long, device=device) -- weight_tensor = torch.tensor( -- weight_list, dtype=self.pos_embed.weight.dtype, device=device -+ p0 = ( -+ self.pos_embed(torch.tensor(idx_list[0], dtype=torch.long, device=device)) -+ * torch.tensor(weight_list[0], dtype=dtype, device=device)[:, None] - ) -- pos_embeds = self.pos_embed(idx_tensor).to(device) * weight_tensor[:, :, None] -- patch_pos_embeds = pos_embeds[0] + pos_embeds[1] + pos_embeds[2] + pos_embeds[3] -- -- patch_pos_embeds = patch_pos_embeds.split( -- [h * w for h, w in zip(grid_hs, grid_ws)] -+ p1 = ( -+ self.pos_embed(torch.tensor(idx_list[1], dtype=torch.long, device=device)) -+ * torch.tensor(weight_list[1], dtype=dtype, device=device)[:, None] -+ ) -+ p2 = ( -+ self.pos_embed(torch.tensor(idx_list[2], dtype=torch.long, device=device)) -+ * torch.tensor(weight_list[2], dtype=dtype, device=device)[:, None] -+ ) -+ p3 = ( -+ self.pos_embed(torch.tensor(idx_list[3], dtype=torch.long, device=device)) -+ * torch.tensor(weight_list[3], dtype=dtype, device=device)[:, None] - ) - -+ patch_pos_embeds = p0 + p1 + p2 + p3 -+ patch_pos_embeds = patch_pos_embeds.split([t * h * w for t, h, w in grid_thw]) - patch_pos_embeds_permute = [] -- merge_size = self.spatial_merge_size -- for pos_embed, t, h, w in zip(patch_pos_embeds, grid_ts, grid_hs, grid_ws): -- pos_embed = pos_embed.repeat(t, 1) -+ m_size = self.spatial_merge_size -+ for pos_embed, (t, h, w) in zip(patch_pos_embeds, grid_thw): - pos_embed = ( -- pos_embed.view( -- t, h // merge_size, merge_size, w // merge_size, merge_size, -1 -- ) -+ pos_embed.view(t, h // m_size, m_size, w // m_size, m_size, -1) - .permute(0, 1, 3, 2, 4, 5) - .flatten(0, 4) - ) - patch_pos_embeds_permute.append(pos_embed) -- return torch.cat(patch_pos_embeds_permute) -+ patch_pos_embeds = torch.cat(patch_pos_embeds_permute) -+ return patch_pos_embeds - - def forward( - self, -@@ -650,31 +670,20 @@ class Qwen3LLMModel(Qwen3Model): - hidden_states + residual if residual is not None else hidden_states - ) - -- deepstack_embeds = None -- if input_deepstack_embeds is not None: -- prev_layer_idx = layer_idx - 1 -- if prev_layer_idx in self.deepstack_embed_to_decoder_layer: -- sep = self.hidden_size * prev_layer_idx -- deepstack_embeds = input_deepstack_embeds[ -- :, sep : sep + self.hidden_size -- ] -- -- # SGLang applies residual at the START of the next layer, not at the END like HuggingFace. -- # See: https://github.com/huggingface/transformers/blob/v5.0.0rc0/src/transformers/models/qwen3_vl/modeling_qwen3_vl.py#L549 -- # To match HF behavior, deepstack must be added AFTER residual: (hidden_states + residual) + deepstack -- # The order matters because addition with different tensors is not associative in practice. - hidden_states, residual = layer( - positions, - hidden_states, - forward_batch, - residual, -- post_residual_addition=deepstack_embeds, - ) -+ # process deepstack -+ if ( -+ input_deepstack_embeds is not None -+ and layer_idx in self.deepstack_embed_to_decoder_layer -+ ): - -- # Handle deepstack for the last processed layer if it exists. -- last_deepstack = self.get_deepstack_embeds( -- self.end_layer - 1, input_deepstack_embeds -- ) -+ sep = self.hidden_size * layer_idx -+ hidden_states += input_deepstack_embeds[:, sep : sep + self.hidden_size] - - if not self.pp_group.is_last_rank: - return PPProxyTensors( -@@ -688,9 +697,7 @@ class Qwen3LLMModel(Qwen3Model): - if residual is None: - hidden_states = self.norm(hidden_states) - else: -- hidden_states, _ = self.norm( -- hidden_states, residual, post_residual_addition=last_deepstack -- ) -+ hidden_states, _ = self.norm(hidden_states, residual) - - if len(aux_hidden_states) == 0: - return hidden_states -@@ -805,15 +812,15 @@ class Qwen3VLForConditionalGeneration(nn.Module): - max_images_per_call = get_int_env_var("SGLANG_VLM_MAX_IMAGES_PER_VIT", 0) - - if max_patches_per_call == 0 and max_images_per_call == 0: -- if self.use_data_parallel: -- return run_dp_sharded_mrope_vision_model( -- self.visual, -- pixel_values, -- image_grid_thw.tolist(), -- rope_type="rope_3d", -- ) -- else: -- return self.visual(pixel_values, grid_thw=image_grid_thw) -+ # if self.use_data_parallel: -+ # return run_dp_sharded_mrope_vision_model( -+ # self.visual, -+ # pixel_values, -+ # image_grid_thw.tolist(), -+ # rope_type="rope_3d", -+ # ) -+ # else: -+ return self.visual(pixel_values, grid_thw=image_grid_thw) - - # compute the number of patches per image and the slice positions in pixel_values - grid_thw_list = ( -@@ -995,7 +1002,7 @@ class Qwen3VLForConditionalGeneration(nn.Module): - name = name.replace(r"model.language_model.", r"model.") - layer_id = get_layer_id(name) - -- if self.pp_group.is_last_rank and "model.embed_tokens.weight" in name: -+ if self.pp_group.is_last_rank and "model.embed_tokens.weight" in name and self.config.tie_word_embeddings: - if "lm_head.weight" in params_dict: - lm_head_param = params_dict["lm_head.weight"] - weight_loader = getattr( -diff --git a/scripts/ci/npu_ci_install_dependency.sh b/scripts/ci/npu_ci_install_dependency.sh -index 6172db3b4..8cc8fbf39 100755 ---- a/scripts/ci/npu_ci_install_dependency.sh -+++ b/scripts/ci/npu_ci_install_dependency.sh -@@ -49,7 +49,7 @@ wget -O "${BISHENG_NAME}" "${BISHENG_URL}" && chmod a+x "${BISHENG_NAME}" && "./ - - - ### Install sgl-kernel-npu --SGL_KERNEL_NPU_TAG="20251206" -+SGL_KERNEL_NPU_TAG="2025.12.31" - git clone --depth 1 https://github.com/sgl-project/sgl-kernel-npu.git --branch ${SGL_KERNEL_NPU_TAG} - (cd sgl-kernel-npu && bash ./build.sh && ${PIP_INSTALL} output/deep_ep*.whl output/sgl_kernel_npu*.whl && cd "$(python3 -m pip show deep-ep | grep -E '^Location:' | awk '{print $2}')" && ln -s deep_ep/deep_ep_cpp*.so) - diff --git a/docker/npu_patch/slime.patch b/docker/npu_patch/slime.patch deleted file mode 100644 index 55e7c2d44e..0000000000 --- a/docker/npu_patch/slime.patch +++ /dev/null @@ -1,941 +0,0 @@ -diff --git a/slime/backends/megatron_utils/__init__.py b/slime/backends/megatron_utils/__init__.py -index a4666fbe..2a07086a 100644 ---- a/slime/backends/megatron_utils/__init__.py -+++ b/slime/backends/megatron_utils/__init__.py -@@ -21,21 +21,35 @@ except ImportError: - logging.warning("deep_ep is not installed, some functionalities may be limited.") - - try: -- from megatron.bridge.models.qwen_vl.modelling_qwen3_vl.text_model import ( -- Qwen3VLMoETextRotaryEmbedding, -- Qwen3VLTextRotaryEmbedding, -- ) -- -- def patch_rotary_embedding(cls): -- _original_forward = cls.forward -- -- def _patched_forward(self, *args, packed_seq_params=None, **kwargs): -- return _original_forward(self, *args, **kwargs) -+ from megatron.bridge.models.qwen_vl.modelling_qwen3_vl.text_model import Qwen3VLTextRotaryEmbedding, Qwen3VLMoETextRotaryEmbedding -+ -+ _original_forward = Qwen3VLTextRotaryEmbedding.forward -+ _original_forward_1 = Qwen3VLMoETextRotaryEmbedding.forward -+ -+ def _patched_forward(self, *args, packed_seq_params=None, **kwargs): -+ return _original_forward(self, *args, **kwargs) -+ def _patched_forward_1(self, *args, packed_seq_params=None, **kwargs): -+ return _original_forward_1(self, *args, **kwargs) -+ Qwen3VLTextRotaryEmbedding.forward = _patched_forward -+ Qwen3VLMoETextRotaryEmbedding.forward = _patched_forward_1 -+except ImportError: -+ pass - -- cls.forward = _patched_forward -+try: -+ from mbridge.models.qwen3_vl.model import Qwen3VLModel -+ _original_forward2 = Qwen3VLModel.forward -+ def _patched_forward2(self, *args, loss_mask=None, **kwargs): -+ return _original_forward2(self, *args, **kwargs) -+ Qwen3VLModel.forward = _patched_forward2 -+except ImportError: -+ pass - -- patch_rotary_embedding(Qwen3VLTextRotaryEmbedding) -- patch_rotary_embedding(Qwen3VLMoETextRotaryEmbedding) -+try: -+ from megatron.bridge.models.qwen_vl.modelling_qwen3_vl.model import Qwen3VLModel -+ _original_forward3 = Qwen3VLModel.forward -+ def _patched_forward3(self, *args, loss_mask=None, **kwargs): -+ return _original_forward3(self, *args, **kwargs) -+ Qwen3VLModel.forward = _patched_forward3 - except ImportError: - pass - -diff --git a/slime/backends/megatron_utils/actor.py b/slime/backends/megatron_utils/actor.py -index 7bc4f910..a0b1f63a 100644 ---- a/slime/backends/megatron_utils/actor.py -+++ b/slime/backends/megatron_utils/actor.py -@@ -8,6 +8,10 @@ from contextlib import nullcontext - import ray - import torch - import torch.distributed as dist -+from slime.utils.common import is_npu -+if is_npu(): -+ import mindspeed.megatron_adaptor -+ from mindspeed.megatron_adaptor import repatch - from megatron.core import mpu - from ray.actor import ActorHandle - from torch_memory_saver import torch_memory_saver -@@ -55,6 +59,8 @@ class MegatronTrainRayActor(TrainRayActor): - super().init(args, role, with_ref) - - init(args) -+ if is_npu(): -+ repatch(args) - - if is_megatron_main_rank(): - init_tracking(args, primary=False) -@@ -596,8 +602,12 @@ class MegatronTrainRayActor(TrainRayActor): - - group_name = "actor_critic" - world_size = 2 -+ if is_npu(): -+ backend = "hccl" -+ else: -+ backend = "nccl" - self._actor_critic_groups = init_process_group( -- backend="nccl", -+ backend=backend, - init_method=f"tcp://{master_address}:{master_port}", - world_size=world_size, - rank=0 if self.role == "actor" else 1, -diff --git a/slime/backends/megatron_utils/megatron_to_hf/__init__.py b/slime/backends/megatron_utils/megatron_to_hf/__init__.py -index 84ff899a..a0e2e43c 100644 ---- a/slime/backends/megatron_utils/megatron_to_hf/__init__.py -+++ b/slime/backends/megatron_utils/megatron_to_hf/__init__.py -@@ -7,7 +7,7 @@ from .processors import quantize_params, remove_padding - from .qwen2 import convert_qwen2_to_hf - from .qwen3_next import convert_qwen3_next_to_hf - from .qwen3moe import convert_qwen3moe_to_hf -- -+from .qwen3_vl import convert_qwen3vl_to_hf - - # TODO unify w/ `convert_to_hf` - def postprocess_hf_param(args, megatron_param_name, hf_param_name, param): -@@ -40,7 +40,10 @@ def _convert_to_hf_core(args, model_name, name, param): - elif "qwen3next" in model_name: - converted_named_tensors = convert_qwen3_next_to_hf(args, name, param) - elif "qwen2" in model_name or "qwen3" in model_name: -- converted_named_tensors = convert_qwen2_to_hf(args, name, param) -+ if "qwen3vl" in model_name: -+ converted_named_tensors = convert_qwen3vl_to_hf(args, name, param) -+ else: -+ converted_named_tensors = convert_qwen2_to_hf(args, name, param) - elif "deepseekv3" in model_name: - converted_named_tensors = convert_deepseekv3_to_hf(args, name, param) - -diff --git a/slime/backends/megatron_utils/megatron_to_hf/qwen3_vl.py b/slime/backends/megatron_utils/megatron_to_hf/qwen3_vl.py -new file mode 100644 -index 00000000..5a3aa56d ---- /dev/null -+++ b/slime/backends/megatron_utils/megatron_to_hf/qwen3_vl.py -@@ -0,0 +1,133 @@ -+import re -+import torch -+from megatron.core import parallel_state as mpu -+ -+ -+def convert_qwen3vl_to_hf(args, name, param): -+ """ -+ Convert Megatron-style Qwen3-VL parameter names to HF-style names. -+ Supports both language model and vision model parameters. -+ -+ Args: -+ args: megatron model args (num_attention_heads, kv_channels, etc.) -+ name: str, Megatron parameter name -+ param: torch.Tensor, parameter value -+ -+ Returns: -+ List of tuples [(hf_name, hf_param), ...] -+ """ -+ -+ hf_name_param = None -+ -+ # ---------------------------- -+ # 1. language model & vision model parameters -+ # ---------------------------- -+ -+ try: -+ head_dim = args.kv_channels if args.kv_channels is not None else args.hidden_size // args.num_attention_heads -+ except: -+ head_dim = args.hidden_size // args.num_attention_heads -+ value_num_per_group = args.num_attention_heads // args.num_query_groups -+ language_num_layers = args.num_layers -+ -+ pp_size = args.pipeline_model_parallel_size -+ pp_rank = mpu.get_pipeline_model_parallel_rank() -+ assert language_num_layers % pp_size == 0 -+ -+ num_layers_per_rank = language_num_layers // pp_size -+ offsets = pp_rank * num_layers_per_rank -+ -+ -+ -+ # ---------------------------- -+ # 2. LM Embeddings & output -+ # ---------------------------- -+ if name == "module.module.language_model.embedding.word_embeddings.weight": -+ hf_name_param = [("model.language_model.embed_tokens.weight", param)] -+ elif name == "module.module.language_model.decoder.final_layernorm.weight": -+ hf_name_param = [("model.language_model.norm.weight", param)] -+ elif name == "module.module.language_model.output_layer.weight": -+ if not args.untie_embeddings_and_output_weights: -+ return [("model.language_model.embed_tokens.weight", param)] -+ else: -+ return [("lm_head.weight", param)] -+ -+ else: -+ -+ decoder_layers_pattern = r"module\.module\.language_model.decoder\.layers\.(\d+)\.(.+)" -+ vision_pattern = r"module\.module\.vision_model\.(.+)" -+ -+ if match := re.match(decoder_layers_pattern, name): -+ # ---------------------------- -+ # 3. Attention and MLP layers in language model -+ # ---------------------------- -+ -+ layer_idx, rest = match.groups() -+ layer_idx = str(int(layer_idx) + offsets) -+ # Self-attention projection -+ if rest == "self_attention.linear_proj.weight": -+ hf_name_param = [(f"model.language_model.layers.{layer_idx}.self_attn.o_proj.weight", param)] -+ -+ elif rest == "self_attention.linear_qkv.weight": -+ param = param.view(args.num_query_groups, -1, head_dim, args.hidden_size) -+ q_param, k_param, v_param = torch.split( -+ param, split_size_or_sections=[value_num_per_group, 1, 1], dim=1 -+ ) -+ q_param = q_param.reshape(-1, args.hidden_size) -+ k_param = k_param.reshape(-1, args.hidden_size) -+ v_param = v_param.reshape(-1, args.hidden_size) -+ hf_name_param = [ -+ (f"model.language_model.layers.{layer_idx}.self_attn.q_proj.weight", q_param), -+ (f"model.language_model.layers.{layer_idx}.self_attn.k_proj.weight", k_param), -+ (f"model.language_model.layers.{layer_idx}.self_attn.v_proj.weight", v_param), -+ ] -+ -+ # MLP layers -+ elif rest == "mlp.linear_fc1.weight": -+ gate_weight, up_weight = param.chunk(2, dim=0) -+ -+ hf_name_param = [ -+ (f"model.language_model.layers.{layer_idx}.mlp.gate_proj.weight", gate_weight), -+ (f"model.language_model.layers.{layer_idx}.mlp.up_proj.weight", up_weight), -+ ] -+ -+ elif rest == "mlp.linear_fc2.weight": -+ hf_name_param = [(f"model.language_model.layers.{layer_idx}.mlp.down_proj.weight", param)] -+ -+ # LayerNorms -+ elif rest == "self_attention.linear_qkv.layer_norm_weight": -+ hf_name_param = [(f"model.language_model.layers.{layer_idx}.input_layernorm.weight", param)] -+ elif rest == "mlp.linear_fc1.layer_norm_weight": -+ hf_name_param = [(f"model.language_model.layers.{layer_idx}.post_attention_layernorm.weight", param)] -+ elif rest == "self_attention.q_layernorm.weight": -+ hf_name_param = [(f"model.language_model.layers.{layer_idx}.self_attn.q_norm.weight", param)] -+ elif rest == "self_attention.k_layernorm.weight": -+ hf_name_param = [(f"model.language_model.layers.{layer_idx}.self_attn.k_norm.weight", param)] -+ -+ elif match_v := re.match(vision_pattern, name): -+ # ---------------------------- -+ # 4. Vision model parameters -+ # ---------------------------- -+ deepstack_merger_pattern = r"deepstack_merger_list\.(\d+)\.(.+)" -+ decoder_layer_pattern = r"blocks\.(\d+)\.(.+)" -+ -+ rest = match_v.groups()[0] -+ -+ if match_layer := re.match(deepstack_merger_pattern, rest): -+ layer_idx, layer_rest = match_layer.groups() -+ layer_idx = str(int(layer_idx) + offsets) -+ hf_name_param = [(f"model.visual.deepstack_merger_list.{layer_idx}.{layer_rest}", param)] -+ -+ # Decoder layers -+ elif match_layer := re.match(decoder_layer_pattern, rest): -+ -+ layer_idx, layer_rest = match_layer.groups() -+ layer_idx = str(int(layer_idx) + offsets) -+ hf_name_param = [(f"model.visual.blocks.{layer_idx}.{layer_rest}", param)] -+ else: -+ hf_name_param = [(f"model.visual.{rest}", param)] -+ -+ if hf_name_param == None: -+ raise ValueError(f"Unknown parameter name: {name}") -+ else: -+ return hf_name_param -diff --git a/slime/backends/megatron_utils/model_provider.py b/slime/backends/megatron_utils/model_provider.py -index 8174c7ac..1f1c0e09 100644 ---- a/slime/backends/megatron_utils/model_provider.py -+++ b/slime/backends/megatron_utils/model_provider.py -@@ -17,7 +17,7 @@ from megatron.core.transformer.transformer_config import TransformerConfig - from megatron.training.arguments import core_transformer_config_from_args - - from slime.utils.misc import load_function -- -+import slime_plugins.patch.mbridge_patch - - # Adapt from https://github.com/volcengine/verl/blob/c3b20575d2bc815fcccd84bddb4c0401fc4b632b/verl/models/llama/megatron/layers/parallel_linear.py#L82 - class LinearForLastLayer(torch.nn.Linear): -@@ -33,7 +33,7 @@ class LinearForLastLayer(torch.nn.Linear): - self.sequence_parallel = config.sequence_parallel - if self.sequence_parallel: - self.weight.sequence_parallel = True -- -+ self.bias.sequence_parallel = True - self.weight.data.normal_(mean=0.0, std=0.02) - if bias: - self.bias.data.zero_() -@@ -51,10 +51,59 @@ class LinearForLastLayer(torch.nn.Linear): - return logits, None - - -+def get_qwen3vl_provide_wrapper(provider, role): -+ -+ def provide_wrapper(pre_process=None, post_process=None, vp_stage=None): -+ """ -+ Provide a Qwen3VL MoE model instance with vision and language components. -+ """ -+ from megatron.bridge.models.qwen_vl.modelling_qwen3_vl.model import Qwen3VLModel -+ language_transformer_config = provider -+ -+ # Create vision transformer config - placeholder for future use -+ hf_config = provider.vision_config -+ -+ language_transformer_layer_spec = get_gpt_layer_with_transformer_engine_spec( -+ num_experts=provider.num_moe_experts, -+ moe_grouped_gemm=True, -+ qk_layernorm=provider.qk_layernorm, -+ fp8=False, -+ normalization="RMSNorm", -+ ) -+ -+ # reuse Qwen3VLModel for MoE model but replace the language model with MoE language model -+ model = Qwen3VLModel( -+ language_transformer_config=language_transformer_config, -+ language_transformer_layer_spec=language_transformer_layer_spec, -+ vision_transformer_config=hf_config, -+ pre_process=pre_process, -+ post_process=post_process, -+ ) -+ -+ if role == "critic" and post_process: -+ model.language_model.output_layer = LinearForLastLayer(input_size=provider.hidden_size, output_size=1, config=provider).to( -+ device=model.language_model.output_layer.weight.device, -+ dtype=model.language_model.output_layer.weight.dtype, -+ ) -+ -+ # Apply freeze options if any are enabled for fine-tuning -+ if provider.freeze_language_model or provider.freeze_vision_model or provider.freeze_vision_projection: -+ model.freeze( -+ freeze_language_model=provider.freeze_language_model, -+ freeze_vision_model=provider.freeze_vision_model, -+ freeze_vision_projection=provider.freeze_vision_projection, -+ ) -+ -+ return model -+ return provide_wrapper -+ -+ - def get_model_provider_func( - args: argparse.Namespace, - role: Literal["actor", "critic"] = "actor", - ): -+ from megatron.bridge.models.conversion.param_mapping import AutoMapping -+ AutoMapping.register_module_type('LinearForLastLayer', 'replicated') # 或 'column' / 'replicated' - # Support custom model provider path (similar to --custom-rm-path for reward models) - if getattr(args, "custom_model_provider_path", None): - -@@ -88,6 +137,27 @@ def get_model_provider_func( - provider.expert_model_parallel_size = args.expert_model_parallel_size - provider.expert_tensor_parallel_size = args.expert_tensor_parallel_size - provider.sequence_parallel = args.sequence_parallel -+ provider.gradient_accumulation_fusion = args.gradient_accumulation_fusion -+ provider.recompute_granularity = args.recompute_granularity -+ provider.recompute_method = args.recompute_method -+ provider.recompute_num_layers = args.recompute_num_layers -+ for key, value in vars(args).items(): -+ if hasattr(provider, key): -+ continue -+ setattr(provider, key, value) -+ -+ is_qwen3vl = ( -+ hasattr(bridge.hf_pretrained, 'config') -+ and hasattr(bridge.hf_pretrained.config, 'model_type') -+ and 'qwen3_vl' in bridge.hf_pretrained.config.model_type.lower() -+ ) -+ -+ if role == 'critic' and is_qwen3vl: -+ from megatron.bridge.models.conversion.model_bridge import MegatronModelBridge -+ from slime_plugins.patch.critic_patch import load_weights_hf_to_megatron_wrapper -+ MegatronModelBridge.load_weights_hf_to_megatron = load_weights_hf_to_megatron_wrapper -+ provider.provide = get_qwen3vl_provide_wrapper(provider, role) -+ - provider.finalize() - return provider.provide - -diff --git a/slime/backends/megatron_utils/update_weight/common.py b/slime/backends/megatron_utils/update_weight/common.py -index a2e4e129..ce40b446 100644 ---- a/slime/backends/megatron_utils/update_weight/common.py -+++ b/slime/backends/megatron_utils/update_weight/common.py -@@ -10,7 +10,7 @@ from megatron.core.transformer.transformer_layer import get_transformer_layer_of - - from slime.backends.megatron_utils.misc_utils import strip_param_name_prefix - from slime.utils.types import ParamInfo -- -+from slime.utils.common import is_npu - - def all_gather_param(name: str, param: torch.nn.Parameter) -> torch.Tensor: - """ -@@ -40,6 +40,8 @@ def all_gather_param(name: str, param: torch.nn.Parameter) -> torch.Tensor: - if "linear_fc1.weight" in name: - param_partitions = [p.chunk(2, dim=0) for p in param_partitions] - param_partitions = [p[0] for p in param_partitions] + [p[1] for p in param_partitions] -+ if is_npu(): -+ partition_dim = 0 - # this is bug in megatron's grouped moe. - if "linear_fc2.weight" in name: - if partition_dim == 0: -@@ -102,6 +104,8 @@ def all_gather_params_async( - if "linear_fc1.weight" in info.name: - param_partitions = [p.chunk(2, dim=0) for p in param_partitions] - param_partitions = [p[0] for p in param_partitions] + [p[1] for p in param_partitions] -+ if is_npu(): -+ partition_dim = 0 - # this is bug in megatron's grouped moe. - if "linear_fc2.weight" in info.name: - if partition_dim == 0: -diff --git a/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py b/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py -index a8e50e0e..b3c6ac24 100644 ---- a/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py -+++ b/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py -@@ -12,6 +12,7 @@ from ray.actor import ActorHandle - from tqdm import tqdm - - from slime.utils.distributed_utils import get_gloo_group, init_process_group -+from slime.utils.common import is_npu - - from ..megatron_to_hf import convert_to_hf - from .common import all_gather_param, named_params_and_buffers -@@ -253,6 +254,7 @@ def connect_rollout_engines_from_distributed( - master_port = sock.getsockname()[1] - world_size = len(rollout_engines) * args.rollout_num_gpus_per_engine + 1 - -+ backend = "hccl" if is_npu() else "nccl" - refs = [ - engine.init_weights_update_group.remote( - master_address, -@@ -260,12 +262,12 @@ def connect_rollout_engines_from_distributed( - i * args.rollout_num_gpus_per_engine + 1, - world_size, - group_name, -- backend="nccl", -+ backend=backend, - ) - for i, engine in enumerate(rollout_engines) - ] - model_update_groups = init_process_group( -- backend="nccl", -+ backend=backend, - init_method=f"tcp://{master_address}:{master_port}", - world_size=world_size, - rank=0, -diff --git a/slime/backends/sglang_utils/sglang_engine.py b/slime/backends/sglang_utils/sglang_engine.py -index af0f5620..03ded2c8 100644 ---- a/slime/backends/sglang_utils/sglang_engine.py -+++ b/slime/backends/sglang_utils/sglang_engine.py -@@ -15,6 +15,7 @@ from urllib3.exceptions import NewConnectionError - - from slime.ray.ray_actor import RayActor - from slime.utils.http_utils import get_host_info -+from slime.utils.common import is_npu - - logger = logging.getLogger(__name__) - -@@ -33,7 +34,10 @@ def get_base_gpu_id(args, rank): - - - def _to_local_gpu_id(physical_gpu_id: int) -> int: -- cvd = os.environ.get("CUDA_VISIBLE_DEVICES") -+ if is_npu(): -+ cvd = os.environ.get("ASCEND_RT_VISIBLE_DEVICES") -+ else: -+ cvd = os.environ.get("CUDA_VISIBLE_DEVICES") - if not cvd: - return physical_gpu_id # no remapping - # CUDA_VISIBLE_DEVICES can be like "4,5,6,7" -diff --git a/slime/ray/actor_group.py b/slime/ray/actor_group.py -index 4cac07a2..098bdf92 100644 ---- a/slime/ray/actor_group.py -+++ b/slime/ray/actor_group.py -@@ -5,6 +5,7 @@ from ray.util.placement_group import PlacementGroup - from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy - - from slime.ray.utils import NOSET_VISIBLE_DEVICES_ENV_VARS_LIST -+from slime.utils.common import is_npu - - - class RayTrainGroup: -@@ -87,19 +88,19 @@ class RayTrainGroup: - - actor_impl = FSDPTrainRayActor - -- TrainRayActor = ray.remote(num_gpus=1, runtime_env={"env_vars": env_vars})(actor_impl) -- -+ TrainRayActor = ray.remote(runtime_env={"env_vars": env_vars})(actor_impl) -+ device_name = "NPU" if is_npu() else "GPU" - # Create worker actors - self._actor_handlers = [] - master_addr, master_port = None, None - for rank in range(world_size): - actor = TrainRayActor.options( - num_cpus=num_gpus_per_actor, -- num_gpus=num_gpus_per_actor, - scheduling_strategy=PlacementGroupSchedulingStrategy( - placement_group=pg, - placement_group_bundle_index=reordered_bundle_indices[rank], - ), -+ resources={device_name:num_gpus_per_actor} - ).remote(world_size, rank, master_addr, master_port) - if rank == 0: - master_addr, master_port = ray.get(actor.get_master_addr_and_port.remote()) -diff --git a/slime/ray/placement_group.py b/slime/ray/placement_group.py -index eb232b16..963b4071 100644 ---- a/slime/ray/placement_group.py -+++ b/slime/ray/placement_group.py -@@ -4,6 +4,7 @@ import socket - import ray - from ray.util.placement_group import placement_group - from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy -+from slime.utils.common import is_npu - - from .actor_group import RayTrainGroup - from .rollout import RolloutManager -@@ -11,10 +12,13 @@ from .rollout import RolloutManager - logger = logging.getLogger(__name__) - - --@ray.remote(num_gpus=1) -+@ray.remote - class InfoActor: - def get_ip_and_gpu_id(self): -- return ray.util.get_node_ip_address(), ray.get_gpu_ids()[0] -+ if is_npu(): -+ return ray.util.get_node_ip_address(), ray.get_runtime_context().get_accelerator_ids()["NPU"][0] -+ else: -+ return ray.util.get_node_ip_address(), ray.get_gpu_ids()[0] - - - def sort_key(x): -@@ -35,12 +39,13 @@ def sort_key(x): - # representation that allows for sorting. - node_ip_parts = [ord(c) for c in node_identifier] - -- return (node_ip_parts, gpu_id) -+ return (node_ip_parts, int(gpu_id)) - - - def _create_placement_group(num_gpus): - """Create a placement group with the specified number of GPUs.""" -- bundles = [{"GPU": 1, "CPU": 1} for _ in range(num_gpus)] -+ device_name = "NPU" if is_npu() else "GPU" -+ bundles = [{device_name: 1, "CPU": 1} for _ in range(num_gpus)] - pg = placement_group(bundles, strategy="PACK") - num_bundles = len(bundles) - -@@ -53,7 +58,8 @@ def _create_placement_group(num_gpus): - scheduling_strategy=PlacementGroupSchedulingStrategy( - placement_group=pg, - placement_group_bundle_index=i, -- ) -+ ), -+ resources={device_name:1} - ).remote() - ) - gpu_ids = ray.get([actor.get_ip_and_gpu_id.remote() for actor in info_actors]) -@@ -167,9 +173,11 @@ def create_training_models(args, pgs, rollout_manager): - - - def create_rollout_manager(args, pg): -+ device_name = "NPU" if is_npu() else "GPU" - rollout_manager = RolloutManager.options( - num_cpus=1, - num_gpus=0, -+ resources={device_name:0} - ).remote(args, pg) - - # calculate num_rollout from num_epoch -diff --git a/slime/ray/rollout.py b/slime/ray/rollout.py -index 75cb053c..c54a3854 100644 ---- a/slime/ray/rollout.py -+++ b/slime/ray/rollout.py -@@ -28,6 +28,7 @@ from slime.utils.metric_utils import ( - from slime.utils.misc import Box, group_by, load_function - from slime.utils.seqlen_balancing import get_seqlen_balanced_partitions - from slime.utils.types import Sample -+from slime.utils.common import is_npu - - from ..utils.metric_utils import has_repetition - from .utils import NOSET_VISIBLE_DEVICES_ENV_VARS_LIST, Lock -@@ -76,7 +77,8 @@ class RolloutManager: - self.all_rollout_engines = [None] * num_engines - self.num_new_engines = init_rollout_engines(args, pg, self.all_rollout_engines) - self.nodes_per_engine = max(1, args.rollout_num_gpus_per_engine // args.num_gpus_per_node) -- self.rollout_engine_lock = Lock.options(num_cpus=1, num_gpus=0).remote() -+ device_name = "NPU" if is_npu() else "GPU" -+ self.rollout_engine_lock = Lock.options(num_cpus=1, num_gpus=0, resources={device_name:0}).remote() - self.rollout_id = -1 - - self._metric_checker = MetricChecker.maybe_create(args) -@@ -467,6 +469,7 @@ def init_rollout_engines(args, pg, all_rollout_engines): - RolloutRayActor = ray.remote(SGLangEngine) - - rollout_engines = [] -+ device_name = "NPU" if is_npu() else "GPU" - for i in range(num_engines): - if all_rollout_engines[i] is not None: - continue -@@ -503,11 +506,11 @@ def init_rollout_engines(args, pg, all_rollout_engines): - - rollout_engine = RolloutRayActor.options( - num_cpus=num_cpus, -- num_gpus=num_gpus, - scheduling_strategy=scheduling_strategy, - runtime_env={ - "env_vars": env_vars, - }, -+ resources={device_name:num_gpus} - ).remote(args, rank=i, worker_type=worker_type, base_gpu_id=base_gpu_id) - - rollout_engines.append((i, rollout_engine)) -diff --git a/slime/ray/train_actor.py b/slime/ray/train_actor.py -index 2e900ca5..d0a25583 100644 ---- a/slime/ray/train_actor.py -+++ b/slime/ray/train_actor.py -@@ -13,16 +13,23 @@ from slime.ray.ray_actor import RayActor - from slime.utils.distributed_utils import init_gloo_group - from slime.utils.logging_utils import configure_logger - from slime.utils.memory_utils import clear_memory, print_memory -+from slime.utils.common import is_npu - - logger = logging.getLogger(__name__) - - - def get_local_gpu_id(): -- cvd = os.environ.get("CUDA_VISIBLE_DEVICES", None) -+ if is_npu(): -+ env_var = "ASCEND_RT_VISIBLE_DEVICES" -+ device_ids = ray.get_runtime_context().get_accelerator_ids()["NPU"] -+ else: -+ env_var = "CUDA_VISIBLE_DEVICES" -+ device_ids = ray.get_gpu_ids() -+ cvd = os.environ.get(env_var, None) - if cvd is None: -- return ray.get_gpu_ids()[0] -+ return device_ids[0] - else: -- return cvd.split(",").index(str(ray.get_gpu_ids()[0])) -+ return cvd.split(",").index(str(device_ids[0])) - - - class TrainRayActor(RayActor): -diff --git a/slime/utils/common.py b/slime/utils/common.py -new file mode 100644 -index 00000000..60ee5b5c ---- /dev/null -+++ b/slime/utils/common.py -@@ -0,0 +1,12 @@ -+import torch -+ -+def is_npu() -> bool: -+ if not hasattr(torch, "npu"): -+ return False -+ -+ if not torch.npu.is_available(): -+ raise RuntimeError( -+ "torch_npu detected, but NPU device is not available or visible." -+ ) -+ -+ return True -diff --git a/slime/utils/external_utils/command_utils.py b/slime/utils/external_utils/command_utils.py -index 9f51ecdf..d4b47eca 100644 ---- a/slime/utils/external_utils/command_utils.py -+++ b/slime/utils/external_utils/command_utils.py -@@ -184,6 +184,108 @@ def execute_train( - f"{train_args}" - ) - -+def execute_train_npu( -+ train_args: str, -+ megatron_model_type: str | None, -+ train_script: str = "train.py", -+ before_ray_job_submit=None, -+ extra_env_vars=None, -+ config: ExecuteTrainConfig | None = None, -+): -+ if extra_env_vars is None: -+ extra_env_vars = {} -+ if config is None: -+ config = ExecuteTrainConfig() -+ external_ray = get_bool_env_var("SLIME_SCRIPT_EXTERNAL_RAY") -+ master_addr = os.environ.get("MASTER_ADDR", "127.0.0.1") -+ -+ train_backend_fsdp = "--train-backend fsdp" in train_args -+ assert train_backend_fsdp == (megatron_model_type is None) -+ -+ exec_command( -+ "pkill -9 sglang; " -+ "sleep 3; " -+ f"{'' if external_ray else 'ray stop --force; '}" -+ f"{'' if external_ray else 'pkill -9 ray; '}" -+ # cannot be run in CI, o/w kill the parent script -+ # TODO: do we really need this kill? (or can we instead kill slime) -+ # "pkill -9 python; " -+ "pkill -9 slime; " -+ "sleep 3; " -+ f"{'' if external_ray else 'pkill -9 ray; '}" -+ # "pkill -9 python; " -+ "pkill -9 slime; " -+ "pkill -9 redis; " -+ "true; " -+ ) -+ -+ if not external_ray: -+ exec_command( -+ # will prevent ray from buffering stdout/stderr -+ f"export PYTHONBUFFERED=16 && " -+ f"ray start --head --node-ip-address {master_addr} --disable-usage-stats" -+ ) -+ -+ if (f := before_ray_job_submit) is not None: -+ f() -+ -+ runtime_env_json = json.dumps( -+ { -+ "env_vars": { -+ # "PYTHONPATH": "/root/Megatron-LM/", -+ "CUDA_DEVICE_MAX_CONNECTIONS": "1", -+ "RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICES": "1", -+ "ASCEND_TOOLKIT_HOME": "/path/to/ascend/Ascend/ascend-toolkit/latest/", -+ "ASCEND_OPP_PATH": "/path/to/ascend/Ascend/ascend-toolkit/latest/opp/", -+ "ASCEND_AICPU_PATH": "/path/to/ascend/Ascend/ascend-toolkit/latest/", -+ "ASCEND_HOME_PATH": "/path/to/ascend/Ascend/ascend-toolkit/latest/", -+ "set_env_path": "/path/to/ascend/Ascend/nnal/atb/set_env.sh", -+ "HYDRA_FULL_ERROR": "1", -+ "HCCL_HOST_SOCKET_PORT_RANGE": "60000-60050", -+ "HCCL_NPU_SOCKET_PORT_RANGE": "61000-61050", -+ # If setting this in FSDP, the computation communication overlapping may have issues -+ **( -+ {} -+ if train_backend_fsdp -+ else { -+ "CUDA_DEVICE_MAX_CONNECTIONS": "1", -+ } -+ ), -+ "NCCL_NVLS_ENABLE": str(int(check_has_nvlink())), -+ "no_proxy": f"127.0.0.1,{master_addr}", -+ # This is needed by megatron / torch distributed in multi-node setup -+ "MASTER_ADDR": master_addr, -+ **( -+ { -+ "CUDA_ENABLE_COREDUMP_ON_EXCEPTION": "1", -+ "CUDA_COREDUMP_SHOW_PROGRESS": "1", -+ "CUDA_COREDUMP_GENERATION_FLAGS": "skip_nonrelocated_elf_images,skip_global_memory,skip_shared_memory,skip_local_memory,skip_constbank_memory", -+ "CUDA_COREDUMP_FILE": "/root/shared_data/cuda_coredump_%h.%p.%t", -+ } -+ if config.cuda_core_dump -+ else {} -+ ), -+ **extra_env_vars, -+ **_parse_extra_env_vars(config.extra_env_vars), -+ } -+ } -+ ) -+ -+ if get_bool_env_var("SLIME_SCRIPT_ENABLE_RAY_SUBMIT", "1"): -+ cmd_megatron_model_source = ( -+ f'source "{repo_base_dir}/scripts/models/{megatron_model_type}.sh" && ' -+ if megatron_model_type is not None -+ else "" -+ ) -+ exec_command( -+ f"export no_proxy=127.0.0.1 && export PYTHONBUFFERED=16 && " -+ f"{cmd_megatron_model_source}" -+ f'ray job submit --address="http://127.0.0.1:8265" ' -+ f"--runtime-env-json='{runtime_env_json}' " -+ f"-- python3 {train_script} " -+ f"{'${MODEL_ARGS[@]}' if megatron_model_type is not None else ''} " -+ f"{train_args}" -+ ) - - def _parse_extra_env_vars(text: str): - try: -diff --git a/slime/utils/memory_utils.py b/slime/utils/memory_utils.py -index c12f3cd0..89078266 100644 ---- a/slime/utils/memory_utils.py -+++ b/slime/utils/memory_utils.py -@@ -3,6 +3,7 @@ import logging - - import torch - import torch.distributed as dist -+from slime.utils.common import is_npu - - logger = logging.getLogger(__name__) - -@@ -12,12 +13,19 @@ def clear_memory(clear_host_memory: bool = False): - gc.collect() - torch.cuda.empty_cache() - if clear_host_memory: -- torch._C._host_emptyCache() -+ if is_npu(): -+ torch.npu.empty_cache() -+ else: -+ torch._C._host_emptyCache() - - - def available_memory(): -- device = torch.cuda.current_device() -- free, total = torch.cuda.mem_get_info(device) -+ if is_npu(): -+ device = torch.npu.current_device() -+ free, total = torch.npu.mem_get_info(device) -+ else: -+ device = torch.cuda.current_device() -+ free, total = torch.cuda.mem_get_info(device) - return { - "gpu": str(device), - "total_GB": _byte_to_gb(total), -diff --git a/slime_plugins/patch/critic_patch.py b/slime_plugins/patch/critic_patch.py -new file mode 100644 -index 00000000..1f4e1bc6 ---- /dev/null -+++ b/slime_plugins/patch/critic_patch.py -@@ -0,0 +1,94 @@ -+import torch -+from typing import ( -+ List, -+ Mapping, -+ TypeVar, -+ Union, -+) -+from megatron.core.transformer.module import MegatronModule -+HFPreTrained = TypeVar("HFPreTrained") -+MegatronModel = TypeVar("MegatronModel", bound=MegatronModule) -+ -+ -+def load_weights_hf_to_megatron_wrapper( -+ self, hf_pretrained: HFPreTrained, megatron_model: Union[MegatronModel, List[MegatronModel]] -+ ) -> List[MegatronModel]: -+ """Load HuggingFace weights into Megatron models. -+ -+ This method orchestrates the complete weight loading process from HuggingFace -+ format to Megatron's distributed format. It builds a conversion task and -+ executes it with proper progress tracking and error handling. -+ -+ The actual weight transformations and distribution are delegated to the -+ appropriate MegatronParamMapping instances based on the state mappings. -+ -+ Args: -+ hf_pretrained (HFPreTrained): HuggingFace model or state source containing the -+ weights to load. -+ megatron_model (Union[MegatronModel, List[MegatronModel]]): Megatron model instance -+ or list of model instances (one per virtual pipeline stage). -+ -+ Returns: -+ List[MegatronModel]: The input megatron_model as a list with loaded weights. -+ -+ Process: -+ 1. Build a task mapping each Megatron parameter to its source -+ 2. For each parameter in the task: -+ - Fetch source weights from HuggingFace state -+ - Apply format transformation via the param mapping -+ - Distribute to appropriate TP/PP ranks -+ - Copy into the Megatron parameter -+ -+ Example: -+ .. code-block:: python -+ -+ hf_model = PreTrainedCausalLM.from_pretrained("gpt2") -+ megatron_model = create_megatron_model() # Single model or list -+ bridge.load_weights_hf_to_megatron(hf_model, megatron_model) -+ -+ Note: -+ Progress is shown only on rank 0 to avoid cluttered output in -+ distributed environments. -+ -+ Raises: -+ ValueError: If hf_pretrained doesn't have state attribute or if weight shapes don't match. -+ AttributeError: If required HF weights are missing. -+ """ -+ if not isinstance(megatron_model, list): -+ megatron_model = [megatron_model] -+ -+ hf_to_megatron_tasks = self.build_conversion_tasks(hf_pretrained, megatron_model) -+ hf_state_dict: Mapping[str, torch.Tensor] = hf_pretrained.state if hasattr(hf_pretrained, "state") else {} -+ -+ description = f"Loading from {hf_pretrained.model_name_or_path}" -+ for task in self._with_progress_tracking(hf_to_megatron_tasks, description): -+ # None means megatron module not on current rank, skip if this task is not going to happen -+ if task.megatron_module is None: -+ continue -+ # 1) Fetch source tensor(s) from HF state dict -+ hf_weights = self.maybe_modify_loaded_hf_weight(task.mapping.hf_param, hf_state_dict) -+ -+ # 2) Delegate conversion & distribution to the bridge -+ converted_weights = task.mapping.hf_to_megatron(hf_weights, task.megatron_module) -+ -+ # 3) Copy into Megatron param if this rank received a shard -+ if converted_weights is not None: -+ # Assert that param_weight is not None for HF->Megatron tasks -+ assert task.param_weight is not None, "param_weight is required for HF->Megatron conversion" -+ -+ if converted_weights.shape != task.param_weight.shape and task.param_name == 'language_model.output_layer.weight': -+ continue -+ -+ # Check shape compatibility before copying -+ if converted_weights.shape != task.param_weight.shape: -+ raise ValueError( -+ f"Shape mismatch for megatron param {task.mapping.megatron_param}:\n" -+ f" Expected shape: {task.param_weight.shape}\n" -+ f" Got shape: {converted_weights.shape}\n" -+ f" Bridge type: {type(task.mapping).__name__}\n" -+ f" HF mapping: {task.mapping.hf_param}" -+ ) -+ task.param_weight.data.copy_(converted_weights) -+ -+ self._broadcast_shared_embeddings(megatron_model) -+ return megatron_model -\ No newline at end of file -diff --git a/slime_plugins/patch/mbridge_patch.py b/slime_plugins/patch/mbridge_patch.py -new file mode 100644 -index 00000000..606fff9b ---- /dev/null -+++ b/slime_plugins/patch/mbridge_patch.py -@@ -0,0 +1,25 @@ -+try: -+ from megatron.bridge.models.conversion.model_bridge import MegatronModelBridge -+ _original_build_conversion_tasks = MegatronModelBridge.build_conversion_tasks -+ -+ def _patched_build_conversion_tasks(self, hf_pretrained, megatron_model): -+ """ -+ Invoke the original build_conversion_tasks and filter out any actual None tasks. -+ -+ The original implementation might return List[None | WeightConversionTask]. -+ We consolidate it here into List[WeightConversionTask] to avoid errors -+ when accessing None.task.xxx later. -+ """ -+ tasks = _original_build_conversion_tasks(self, hf_pretrained, megatron_model) -+ -+ if tasks is None: -+ return [] -+ -+ filtered = [t for t in tasks if t is not None] -+ -+ return filtered -+ -+ MegatronModelBridge.build_conversion_tasks = _patched_build_conversion_tasks -+ -+except ImportError: -+ pass -diff --git a/train.py b/train.py -index 01883c47..18faa6d2 100644 ---- a/train.py -+++ b/train.py -@@ -1,5 +1,7 @@ - import ray -- -+from slime.utils.common import is_npu -+if is_npu(): -+ import mindspeed.megatron_adaptor - from slime.ray.placement_group import create_placement_groups, create_rollout_manager, create_training_models - from slime.utils.arguments import parse_args - from slime.utils.logging_utils import configure_logger, init_tracking diff --git a/docker/patch/gb10/cuda_profiler_api.h b/docker/patch/gb10/cuda_profiler_api.h deleted file mode 100644 index 276b80b656..0000000000 --- a/docker/patch/gb10/cuda_profiler_api.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __CUDA_PROFILER_API_H__ -#define __CUDA_PROFILER_API_H__ - -/* CUDA 13 dropped the public cuda_profiler_api.h header, but the runtime still - * exports cudaProfilerStart / cudaProfilerStop from libcudart.so. This shim - * declares them against the public types so legacy callers (e.g., TE 2.10, - * which only includes the header without actually calling the APIs in the - * affected TUs) continue to compile. - * - * Installed by slime GB10 port. See docker/patch/gb10/ and NOTES_GB10.md. - */ - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -extern __host__ cudaError_t CUDARTAPI cudaProfilerStart(void); -extern __host__ cudaError_t CUDARTAPI cudaProfilerStop(void); - -#if defined(__cplusplus) -} -#endif - -#endif /* __CUDA_PROFILER_API_H__ */ diff --git a/docker/patch/gb10/patch_sgl_kernel.py b/docker/patch/gb10/patch_sgl_kernel.py deleted file mode 100644 index a6dc3bbebf..0000000000 --- a/docker/patch/gb10/patch_sgl_kernel.py +++ /dev/null @@ -1,52 +0,0 @@ -"""Patch sgl-kernel CMakeLists.txt to add a SGL_KERNEL_GB10_ONLY build option. - -On GB10 (DGX Spark, sm_121a aarch64 with unified 128 GB memory), the stock -sgl-kernel CMake emits gencodes for sm_90a + sm_100a + sm_103a + sm_110a + -sm_120a + sm_121a. Cutlass FP8 gemm template instantiation per extra arch uses -10-15 GB RAM, and 12 parallel nvcc jobs OOM-kill cicc. - -This patch wraps the non-GB10 gencode blocks in `if (NOT SGL_KERNEL_GB10_ONLY)` -and adds a GB10-only branch that emits just sm_120a + sm_121a. Default OFF -preserves upstream behavior. -""" - -import sys -from pathlib import Path - -p = Path(sys.argv[1] if len(sys.argv) > 1 else "/root/src/sglang/sgl-kernel/CMakeLists.txt") -s = p.read_text() - -marker = 'option(SGL_KERNEL_ENABLE_SM100A "Enable SM100A" OFF)' -new_opt = ( - marker - + "\n" - + 'option(SGL_KERNEL_GB10_ONLY "Build only for GB10 (sm_121a + sm_120a). Skips sm_90a/sm_100a/sm_103a/sm_110a and FA3." OFF)' -) -assert marker in s, "marker 1 (SM100A option line) not found" -s = s.replace(marker, new_opt, 1) - -old = 'if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "12.8" OR SGL_KERNEL_ENABLE_SM100A)' -assert old in s, "marker 2 (CUDA 12.8 block) not found" -s = s.replace(old, "if (NOT SGL_KERNEL_GB10_ONLY)\n\n" + old, 1) - -old2 = 'if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "12.8" OR SGL_KERNEL_ENABLE_FP4)' -assert old2 in s, "marker 3 (FP4 block) not found" -insert_before = """endif() # NOT SGL_KERNEL_GB10_ONLY - -if (SGL_KERNEL_GB10_ONLY) - # GB10 (DGX Spark) is sm_121a (consumer Blackwell, aarch64). It cannot run - # Hopper (sm_90a) nor datacenter Blackwell (sm_100a) binaries. Compiling - # them wastes ~6x build time and ~10-15 GB RAM per TU (cutlass templates), - # which OOM-kills cicc on 128 GB Spark hosts. - list(APPEND SGL_KERNEL_CUDA_FLAGS - "-gencode=arch=compute_120a,code=sm_120a" - "-gencode=arch=compute_121a,code=sm_121a" - "--compress-mode=size" - ) -endif() - -""" -s = s.replace(old2, insert_before + old2, 1) - -p.write_text(s) -print(f"edits applied to {p}") diff --git a/docker/patch/gb10/sgl-kernel-arch.patch b/docker/patch/gb10/sgl-kernel-arch.patch deleted file mode 100644 index a507e04c09..0000000000 --- a/docker/patch/gb10/sgl-kernel-arch.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- CMakeLists.txt.orig 2026-04-15 07:39:19.526964507 +0000 -+++ CMakeLists.txt 2026-04-15 07:39:19.548828896 +0000 -@@ -188,6 +188,7 @@ - option(SGL_KERNEL_ENABLE_FA3 "Enable FA3" OFF) - option(SGL_KERNEL_ENABLE_SM90A "Enable SM90A" OFF) - option(SGL_KERNEL_ENABLE_SM100A "Enable SM100A" OFF) -+option(SGL_KERNEL_GB10_ONLY "Build only for GB10 (sm_121a + sm_120a). Skips sm_90a/sm_100a/sm_103a/sm_110a and FA3." OFF) - - if (SGL_KERNEL_ENABLE_BF16) - list(APPEND SGL_KERNEL_CUDA_FLAGS -@@ -216,6 +217,8 @@ - - endif() - -+if (NOT SGL_KERNEL_GB10_ONLY) -+ - if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "12.8" OR SGL_KERNEL_ENABLE_SM100A) - list(APPEND SGL_KERNEL_CUDA_FLAGS - "-gencode=arch=compute_100a,code=sm_100a" -@@ -249,6 +252,20 @@ - ) - endif() - -+endif() # NOT SGL_KERNEL_GB10_ONLY -+ -+if (SGL_KERNEL_GB10_ONLY) -+ # GB10 (DGX Spark) is sm_121a (consumer Blackwell, aarch64). It cannot run -+ # Hopper (sm_90a) nor datacenter Blackwell (sm_100a) binaries. Compiling -+ # them wastes ~6x build time and ~10-15 GB RAM per TU (cutlass templates), -+ # which OOM-kills cicc on 128 GB Spark hosts. -+ list(APPEND SGL_KERNEL_CUDA_FLAGS -+ "-gencode=arch=compute_120a,code=sm_120a" -+ "-gencode=arch=compute_121a,code=sm_121a" -+ "--compress-mode=size" -+ ) -+endif() -+ - if ("${CUDA_VERSION}" VERSION_GREATER_EQUAL "12.8" OR SGL_KERNEL_ENABLE_FP4) - list(APPEND SGL_KERNEL_CUDA_FLAGS - "-DENABLE_NVFP4=1" diff --git a/docker/patch/latest/megatron.patch b/docker/patch/latest/megatron.patch index 0fb483a4ea..6d2a233949 100644 --- a/docker/patch/latest/megatron.patch +++ b/docker/patch/latest/megatron.patch @@ -12,10 +12,10 @@ index 41c21d93d..ef80f72d6 100644 err_msg = f'Common file {load_path} does not exist' if MultiStorageClientFeature.is_enabled(): diff --git a/megatron/core/dist_checkpointing/strategies/torch.py b/megatron/core/dist_checkpointing/strategies/torch.py -index a5b6c009b..22794d7e6 100644 +index 5a1ea308d..aa701237f 100644 --- a/megatron/core/dist_checkpointing/strategies/torch.py +++ b/megatron/core/dist_checkpointing/strategies/torch.py -@@ -503,10 +503,12 @@ class MCoreLoadPlanner(DefaultLoadPlanner): +@@ -597,10 +597,12 @@ class MCoreLoadPlanner(DefaultLoadPlanner): def _validate_global_shapes(self, metadata, sharded_tensors): for sh_ten in sharded_tensors: if sh_ten.key not in metadata.state_dict_metadata: @@ -30,9 +30,9 @@ index a5b6c009b..22794d7e6 100644 + print(f"{sh_ten.key} from model not in state dict, will skip") + continue loaded_shape = metadata.state_dict_metadata[sh_ten.key].size - expected_shape = sh_ten.global_shape + expected_shape = self._expected_shape(sh_ten) if loaded_shape != expected_shape: -@@ -530,7 +532,7 @@ class MCoreLoadPlanner(DefaultLoadPlanner): +@@ -630,7 +632,7 @@ class MCoreLoadPlanner(DefaultLoadPlanner): tensor_metadata = self.metadata.state_dict_metadata metadata_with_sizes = [ (tensor_metadata[key], tensor_metadata[key].size, sharded_tensor) @@ -41,7 +41,7 @@ index a5b6c009b..22794d7e6 100644 ] try: # Temporarily set sizes to expected shapes -@@ -802,6 +804,7 @@ class TorchDistLoadShardedStrategy(LoadShardedStrategy): +@@ -959,6 +961,7 @@ class TorchDistLoadShardedStrategy(LoadShardedStrategy): planner=MCoreLoadPlanner( shapes_validation_sharded_tensors=flexible_shape_sharded_tensors, allow_shape_mismatch_sharded_tensors=allow_shape_mismatch_sharded_tensors, @@ -50,18 +50,18 @@ index a5b6c009b..22794d7e6 100644 ) diff --git a/megatron/core/extensions/transformer_engine.py b/megatron/core/extensions/transformer_engine.py -index ef8527e9e..57fbe5bd7 100644 +index acb93ef78..d239db4ab 100644 --- a/megatron/core/extensions/transformer_engine.py +++ b/megatron/core/extensions/transformer_engine.py -@@ -639,6 +639,7 @@ class TELinear(te.pytorch.Linear): - self.te_quant_params: Optional[TEQuantizationParams] = None +@@ -408,6 +408,7 @@ class TELinear(te.pytorch.Linear): + ) for param in self.parameters(): + setattr(param, "parallel_mode", parallel_mode) if is_expert: # Reduce the gradient on the expert_data_parallel group for expert linear layers setattr(param, "allreduce", not self.expert_parallel) -@@ -1455,6 +1456,61 @@ class TEDotProductAttention(te.pytorch.DotProductAttention): +@@ -1161,6 +1162,61 @@ class TEDotProductAttention(te.pytorch.DotProductAttention): if HAVE_TE and is_te_min_version("1.9.0.dev0"): @@ -115,15 +115,23 @@ index ef8527e9e..57fbe5bd7 100644 + + def fake_int4_quantization_ste(x, group_size): + x_out = _FakeInt4QuantizationSTE.apply(x, group_size) -+ ++ + if hasattr(x, 'main_grad'): + x_out.main_grad = x.main_grad -+ ++ + return x_out class TEGroupedLinear(te.pytorch.GroupedLinear): """ -@@ -1671,6 +1727,20 @@ if HAVE_TE and is_te_min_version("1.9.0.dev0"): +@@ -1351,6 +1407,7 @@ if HAVE_TE and is_te_min_version("1.9.0.dev0"): + _is_first_microbatch = ( + None if self.disable_parameter_transpose_cache else self.is_first_microbatch + ) ++ + out = super().forward(x, m_splits, is_first_microbatch=_is_first_microbatch) + self.is_first_microbatch = False + +@@ -1361,6 +1418,20 @@ if HAVE_TE and is_te_min_version("1.9.0.dev0"): return out return out, None @@ -135,17 +143,17 @@ index ef8527e9e..57fbe5bd7 100644 + group_size = int(os.getenv("OPEN_TRAINING_INT4_GROUP_SIZE", "128")) + + weight_tensors = [ -+ fake_int4_quantization_ste(w, group_size) ++ fake_int4_quantization_ste(w, group_size) + for w in weight_tensors + ] -+ ++ + return weight_tensors + def _encode_extra_state(self, state): # TE 2.0 changed the format of extra_state to be a byte tensor if is_te_min_version("2.0.0"): diff --git a/megatron/core/fusions/fused_mla_yarn_rope_apply.py b/megatron/core/fusions/fused_mla_yarn_rope_apply.py -index 1fd5dcfae..75e1072d5 100644 +index 1fd5dcfae..c9aeef1f0 100644 --- a/megatron/core/fusions/fused_mla_yarn_rope_apply.py +++ b/megatron/core/fusions/fused_mla_yarn_rope_apply.py @@ -385,6 +385,7 @@ def rotary_fwd_kv_kernel( @@ -244,7 +252,7 @@ index 1fd5dcfae..75e1072d5 100644 - tl.store(dKV_ptr + dk_out_off, dk, mask=mask) - tl.store(dKV_ptr + dv_out_off, dv, mask=mask) + dKV_ptr = dKV + pid_m * stride_dkv_seq # + pid_head * BLOCK_H * stride_dkv_nheads -+ ki_range = tl.arange(0, BLOCK_H)[:, None] + pid_head * BLOCK_H ++ ki_range = tl.arange(0, BLOCK_H)[:, None] + pid_head * BLOCK_H + kj_range = tl.arange(0, k_dim_ceil)[None, :] + mask_k = (ki_range < head_num) & (kj_range < k_dim) + mask_v = ki_range < head_num @@ -256,7 +264,7 @@ index 1fd5dcfae..75e1072d5 100644 + + dk = tl.load(dK_ptr + dk_in_off, mask=mask_k) + tl.store(dKV_ptr + dk_out_off, dk, mask=mask_k) -+ ++ + if v_dim > 0: + dv_out_off = ki_range * stride_dkv_nheads + k_dim + tl.arange(0, v_dim)[None, :] + dv_in_off = ki_range * stride_dv_nheads + tl.arange(0, v_dim)[None, :] @@ -306,121 +314,83 @@ index 1fd5dcfae..75e1072d5 100644 ctx.v_dim, nheads, batch_size, -diff --git a/megatron/core/inference/contexts/dynamic_context.py b/megatron/core/inference/contexts/dynamic_context.py -index 5dc2d5030..2b241c86d 100644 ---- a/megatron/core/inference/contexts/dynamic_context.py -+++ b/megatron/core/inference/contexts/dynamic_context.py -@@ -61,8 +61,8 @@ except ImportError: - try: - from torch_memory_saver import torch_memory_saver - -- torch_memory_saver.hook_mode = "torch" -- HAVE_TORCH_MEMORY_SAVER = True -+ # torch_memory_saver.hook_mode = "torch" -+ HAVE_TORCH_MEMORY_SAVER = False - except ImportError: - HAVE_TORCH_MEMORY_SAVER = False - -diff --git a/megatron/core/models/common/embeddings/rotary_pos_embedding.py b/megatron/core/models/common/embeddings/rotary_pos_embedding.py -index 05a7e8f60..881cfbcaa 100644 ---- a/megatron/core/models/common/embeddings/rotary_pos_embedding.py -+++ b/megatron/core/models/common/embeddings/rotary_pos_embedding.py -@@ -308,6 +308,7 @@ class MultimodalRotaryEmbedding(nn.Module): - self, - position_ids: torch.Tensor, - mrope_section: List[int], -+ packed_seq: bool = False, - cp_group: Optional[torch.distributed.ProcessGroup] = None, - ) -> Tensor: - """Forward pass of multimodal RoPE embedding. -@@ -352,7 +353,9 @@ class MultimodalRotaryEmbedding(nn.Module): - emb = emb[..., None, :].transpose(0, 1).contiguous() - if cp_group is None: - cp_group = self.cp_group -- if cp_group is not None and cp_group.size() > 1: -+ # For THD (packed sequence) format, skip CP slicing here — it is handled -+ # per-sequence inside _apply_rotary_pos_emb_thd instead (same as RotaryEmbedding). -+ if cp_group is not None and cp_group.size() > 1 and not packed_seq: - # slice rotary_pos_emb along sequence dimension and select the parition of the current - # CP rank - emb = get_pos_emb_on_this_cp_rank(emb, 0, cp_group) +diff --git a/megatron/core/models/common/language_module/language_module.py b/megatron/core/models/common/language_module/language_module.py +index 13d74aa52..060898a7a 100644 +--- a/megatron/core/models/common/language_module/language_module.py ++++ b/megatron/core/models/common/language_module/language_module.py +@@ -184,7 +184,15 @@ class LanguageModule(MegatronModule): + assert ( + column_parallel_linear is not None + ), "column_parallel_linear cannot be None when not using fused linear cross entropy." +- logits, _ = column_parallel_linear(hidden, **col_linear_kwargs) ++ # output ++ output_layer_params = {k: v.detach() for k, v in column_parallel_linear.named_parameters()} ++ output_layer_buffers = dict(column_parallel_linear.named_buffers()) ++ logits, _ = torch.func.functional_call( ++ column_parallel_linear, ++ {**output_layer_params, **output_layer_buffers}, ++ (hidden,), ++ col_linear_kwargs, ++ ) + + return self.compute_language_model_loss(labels, logits) + diff --git a/megatron/core/models/gpt/gpt_layer_specs.py b/megatron/core/models/gpt/gpt_layer_specs.py -index 5bb479ad3..a9d3583e5 100755 +index e21127b87..712793853 100755 --- a/megatron/core/models/gpt/gpt_layer_specs.py +++ b/megatron/core/models/gpt/gpt_layer_specs.py -@@ -182,6 +182,8 @@ def get_gpt_layer_with_transformer_engine_spec( +@@ -188,6 +188,8 @@ def get_gpt_layer_with_transformer_engine_spec( + use_kitchen: bool = False, + use_te_activation_func: bool = False, fallback_to_eager_attn: bool = False, - use_kitchen_attention: bool = False, - kitchen_attention_backend: str = "sdpa", + post_self_attn_layernorm: bool = False, + post_mlp_layernorm: bool = False, ) -> ModuleSpec: """Use this spec to use lower-level Transformer Engine modules (required for fp8 training). -@@ -263,9 +265,11 @@ def get_gpt_layer_with_transformer_engine_spec( - ), - ), - self_attn_bda=get_bias_dropout_add, -+ post_self_attn_layernorm=TENorm if post_self_attn_layernorm else IdentityOp, - pre_mlp_layernorm=backend.layer_norm() if num_experts else IdentityOp, - mlp=mlp, - mlp_bda=get_bias_dropout_add, -+ post_mlp_layernorm=TENorm if post_mlp_layernorm else IdentityOp, - ), - ) - else: -@@ -289,9 +293,11 @@ def get_gpt_layer_with_transformer_engine_spec( - ), - ), - self_attn_bda=get_bias_dropout_add, -+ post_self_attn_layernorm=TENorm if post_self_attn_layernorm else IdentityOp, - pre_mlp_layernorm=backend.layer_norm() if num_experts else IdentityOp, - mlp=mlp, - mlp_bda=get_bias_dropout_add, -+ post_mlp_layernorm=TENorm if post_mlp_layernorm else IdentityOp, - sharded_state_dict_keys_map={ - "mlp.0.weight": "mlp.linear_fc1.layer_norm_weight", - "mlp.0.bias": "mlp.linear_fc1.layer_norm_bias", -@@ -537,6 +543,8 @@ def get_gpt_decoder_layer_specs( - qk_l2_norm=qk_l2_norm, - use_kitchen=config.use_kitchen, - use_te_activation_func=config.use_te_activation_func, -+ post_self_attn_layernorm=config.post_self_attn_layernorm, -+ post_mlp_layernorm=config.post_mlp_layernorm, - ) - moe_layer_spec = get_gpt_layer_with_transformer_engine_spec( - num_experts=config.num_moe_experts, -@@ -547,6 +555,8 @@ def get_gpt_decoder_layer_specs( - qk_l2_norm=qk_l2_norm, - use_kitchen=config.use_kitchen, - use_te_activation_func=config.use_te_activation_func, -+ post_self_attn_layernorm=config.post_self_attn_layernorm, -+ post_mlp_layernorm=config.post_mlp_layernorm, - ) - else: - dense_layer_spec = get_gpt_layer_local_spec( +@@ -260,6 +262,8 @@ def get_gpt_layer_with_transformer_engine_spec( + mlp=mlp, + sharded_state_dict_keys_map=sharded_state_dict_keys_map, + normalization=normalization, ++ post_self_attn_layernorm=post_self_attn_layernorm, ++ post_mlp_layernorm=post_mlp_layernorm, + ) + + +@@ -349,6 +353,8 @@ def get_transformer_layer_spec_for_backend( + mlp: ModuleSpec, + sharded_state_dict_keys_map: Optional[dict] = None, + normalization: Optional[str] = None, ++ post_self_attn_layernorm: bool = False, ++ post_mlp_layernorm: bool = False, + ) -> ModuleSpec: + """Helper function to get module spec for TransformerLayer""" + +@@ -371,9 +377,11 @@ def get_transformer_layer_spec_for_backend( + input_layernorm=input_layernorm, + self_attention=attention, + self_attn_bda=get_bias_dropout_add, ++ post_self_attn_layernorm=TENorm if post_self_attn_layernorm else IdentityOp, + pre_mlp_layernorm=pre_mlp_layernorm, + mlp=mlp, + mlp_bda=get_bias_dropout_add, ++ post_mlp_layernorm=TENorm if post_mlp_layernorm else IdentityOp, + sharded_state_dict_keys_map=sharded_state_dict_keys_map, + ), + ) diff --git a/megatron/core/models/gpt/gpt_model.py b/megatron/core/models/gpt/gpt_model.py -index 5b31ddedf..ead60f2dd 100644 +index a1230568c..1fd52f65a 100644 --- a/megatron/core/models/gpt/gpt_model.py +++ b/megatron/core/models/gpt/gpt_model.py -@@ -394,6 +394,8 @@ class GPTModel(LanguageModule): - rotary_pos_emb = self.rotary_pos_emb( - position_ids, - self.mrope_section, -+ packed_seq=packed_seq_params is not None -+ and packed_seq_params.qkv_format == 'thd', - cp_group=packed_seq_params.cp_group if packed_seq_params is not None else None, - ) - else: -@@ -488,6 +490,7 @@ class GPTModel(LanguageModule): +@@ -446,6 +446,7 @@ class GPTModel(LanguageModule): + *, inference_params: Optional[BaseInferenceContext] = None, loss_mask: Optional[Tensor] = None, - padding_mask: Optional[Tensor] = None, -+ mtp_kwargs: Optional[dict] = None, ++ mtp_kwargs: Optional[dict] = {}, ) -> Tensor: """Forward function of the GPT Model This function passes the input tensors through the embedding layer, and then the decoder and finally into the post -@@ -560,6 +563,7 @@ class GPTModel(LanguageModule): +@@ -508,6 +509,7 @@ class GPTModel(LanguageModule): runtime_gather_output=runtime_gather_output, extra_block_kwargs=extra_block_kwargs, inference_context=inference_context, @@ -428,80 +398,59 @@ index 5b31ddedf..ead60f2dd 100644 ) def _postprocess( -@@ -581,6 +585,7 @@ class GPTModel(LanguageModule): +@@ -529,6 +531,7 @@ class GPTModel(LanguageModule): runtime_gather_output=None, extra_block_kwargs=None, inference_context=None, -+ mtp_kwargs=None, ++ mtp_kwargs={}, ): """Postprocesses decoder hidden states to generate logits or compute loss. -@@ -592,10 +597,12 @@ class GPTModel(LanguageModule): - assert runtime_gather_output, "Inference must always gather TP logits" - - # logits and loss -+ mtp_kwargs = mtp_kwargs or {} -+ mtp_labels = mtp_kwargs.get('mtp_labels') +@@ -543,7 +546,8 @@ class GPTModel(LanguageModule): output_weight = None if self.share_embeddings_and_output_weights: output_weight = self.shared_embedding_or_output_weight() - if mtp_in_postprocess: -+ if mtp_in_postprocess and mtp_labels is not None: ++ ++ if mtp_in_postprocess and mtp_kwargs.get('mtp_labels', None) is not None: hidden_states = self.mtp( input_ids=input_ids, position_ids=position_ids, -@@ -614,13 +621,35 @@ class GPTModel(LanguageModule): - if not self.post_process: +@@ -563,13 +567,18 @@ class GPTModel(LanguageModule): return hidden_states -- if self.config.mtp_num_layers is not None: + # Skip when mtp_num_layers is None or 0 +- if self.config.mtp_num_layers: - mtp_labels = labels.clone() -+ if self.config.mtp_num_layers and mtp_labels is not None: -+ mtp_labels = mtp_labels.clone() -+ mtp_labels, _ = roll_tensor( -+ mtp_labels, -+ shifts=-1, -+ dims=-1, -+ cp_group=self.cp_group, -+ packed_seq_params=packed_seq_params, -+ ) ++ if self.config.mtp_num_layers and mtp_kwargs.get('mtp_labels', None) is not None: ++ mtp_labels = mtp_kwargs['mtp_labels'].clone() ++ mtp_labels, _ = roll_tensor(mtp_labels, shifts=-1, dims=-1, cp_group=self.cp_group, packed_seq_params=packed_seq_params) ++ hidden_states_list = torch.chunk(hidden_states, 1 + self.config.mtp_num_layers, dim=0) hidden_states = hidden_states_list[0] if loss_mask is None: # if loss_mask is not provided, use all ones as loss_mask loss_mask = torch.ones_like(mtp_labels) + else: -+ loss_mask, _ = roll_tensor( -+ loss_mask, -+ shifts=-1, -+ dims=-1, -+ cp_group=self.cp_group, -+ packed_seq_params=packed_seq_params, -+ ) -+ -+ mtp_output_weight = output_weight -+ if mtp_output_weight is None and self.output_layer.weight is not None: -+ mtp_output_weight = self.output_layer.weight -+ if mtp_output_weight is not None: -+ mtp_output_weight = mtp_output_weight.detach() -+ ++ # Otherwise, roll the loss_mask to keep up with the mtp_labels ++ loss_mask, _ = roll_tensor(loss_mask, shifts=-1, dims=-1, cp_group=self.cp_group, packed_seq_params=packed_seq_params) for mtp_layer_number in range(self.config.mtp_num_layers): # Calc loss for the current Multi-Token Prediction (MTP) layers. mtp_labels, _ = roll_tensor( -@@ -641,7 +670,7 @@ class GPTModel(LanguageModule): - # Compute mtp loss without storing logits to save memory. - output_layer_kwargs = dict( - input_=hidden_states_list[mtp_layer_number + 1], -- weight=output_weight, -+ weight=mtp_output_weight, - runtime_gather_output=runtime_gather_output, +@@ -595,7 +604,7 @@ class GPTModel(LanguageModule): + sequence_parallel_enabled=self.output_layer.sequence_parallel, + column_parallel_linear=self.output_layer, + col_linear_kwargs={ +- 'weight': output_weight, ++ 'weight': output_weight.detach() if output_weight else None, + 'runtime_gather_output': runtime_gather_output, + }, ) - if self.fuse_linear_cross_entropy: diff --git a/megatron/core/optimizer/distrib_optimizer.py b/megatron/core/optimizer/distrib_optimizer.py -index a4364f5e9..c76f6daac 100644 +index 6e093f96f..eac21a3ea 100644 --- a/megatron/core/optimizer/distrib_optimizer.py +++ b/megatron/core/optimizer/distrib_optimizer.py -@@ -686,6 +686,8 @@ class DistributedOptimizer(MixedPrecisionOptimizer): +@@ -677,6 +677,8 @@ class DistributedOptimizer(MixedPrecisionOptimizer): # TE FusedAdam will not accumulate step for empty param groups, so we need to # align the step across param groups. param_group["step"] = int(step) @@ -510,7 +459,7 @@ index a4364f5e9..c76f6daac 100644 # Grad scaler state. if self.grad_scaler: -@@ -1667,6 +1669,8 @@ class DistributedOptimizer(MixedPrecisionOptimizer): +@@ -1646,6 +1648,8 @@ class DistributedOptimizer(MixedPrecisionOptimizer): if key == 'padding': tensors[key] = LocalNonpersistentObject(tensors[key]) continue @@ -520,7 +469,7 @@ index a4364f5e9..c76f6daac 100644 tensors[key].shape, gbuf_local_start, diff --git a/megatron/core/parallel_state.py b/megatron/core/parallel_state.py -index 7bb964078..2fe9a8cdc 100644 +index a273002b9..4f821cfd5 100644 --- a/megatron/core/parallel_state.py +++ b/megatron/core/parallel_state.py @@ -11,6 +11,7 @@ from typing import Callable, List, Optional @@ -529,7 +478,7 @@ index 7bb964078..2fe9a8cdc 100644 import torch +import torch.distributed as dist - from .utils import GlobalMemoryBuffer, GlobalSymmetricMemoryBuffer, is_torch_min_version + from .utils import GlobalMemoryBuffer, is_torch_min_version diff --git a/megatron/core/pipeline_parallel/p2p_communication.py b/megatron/core/pipeline_parallel/p2p_communication.py index ac839c21f..f18309217 100644 @@ -563,12 +512,12 @@ index ac839c21f..f18309217 100644 ops.append(recv_next_op) if len(ops) > 0: diff --git a/megatron/core/transformer/moe/moe_utils.py b/megatron/core/transformer/moe/moe_utils.py -index 75825cd37..445b3fb84 100644 +index 28cff06f5..58dc4bb70 100644 --- a/megatron/core/transformer/moe/moe_utils.py +++ b/megatron/core/transformer/moe/moe_utils.py -@@ -711,6 +711,9 @@ def topk_routing_with_score_function( - scores, topk, num_groups, group_topk, _compute_topk - ) +@@ -587,6 +587,9 @@ def topk_routing_with_score_function( + else: + return torch.topk(scores, k=topk, dim=1) + from slime.utils.routing_replay import get_routing_replay_compute_topk + compute_topk = get_routing_replay_compute_topk(compute_topk) @@ -577,12 +526,12 @@ index 75825cd37..445b3fb84 100644 if use_pre_softmax: scores = torch.softmax(logits, dim=-1, dtype=torch.float32).type_as(logits) diff --git a/megatron/core/transformer/moe/router.py b/megatron/core/transformer/moe/router.py -index a2f3e90bd..b6f732561 100644 +index 16fc9d9af..517944f25 100644 --- a/megatron/core/transformer/moe/router.py +++ b/megatron/core/transformer/moe/router.py -@@ -207,6 +207,9 @@ class TopKRouter(Router): - if self.config.moe_enable_routing_replay: - self.router_replay = RouterReplay() +@@ -201,6 +201,9 @@ class TopKRouter(Router): + self.global_tokens_per_expert = None + self.ga_steps = None + from slime.utils.routing_replay import register_routing_replay + register_routing_replay(self) @@ -591,10 +540,18 @@ index a2f3e90bd..b6f732561 100644 """ Maintain the expert bias in float32. diff --git a/megatron/core/transformer/multi_token_prediction.py b/megatron/core/transformer/multi_token_prediction.py -index b0476155a..63f81465d 100755 +index a8f4abfcd..f33f6f05e 100755 --- a/megatron/core/transformer/multi_token_prediction.py +++ b/megatron/core/transformer/multi_token_prediction.py -@@ -709,17 +709,21 @@ class MultiTokenPredictionLayer(MegatronModule): +@@ -6,6 +6,7 @@ from typing import Callable, List, Optional, Union + + import torch + from torch import Tensor ++import warnings + + from megatron.core import InferenceParams, parallel_state, tensor_parallel + from megatron.core.dist_checkpointing.mapping import ShardedStateDict +@@ -714,17 +715,19 @@ class MultiTokenPredictionLayer(MegatronModule): cp_group=self.cp_group, packed_seq_params=packed_seq_params, ) @@ -618,20 +575,24 @@ index b0476155a..63f81465d 100755 + decoder_input = decoder_input.detach() - hidden_states = make_viewless_tensor(inp=hidden_states, requires_grad=True, keep_graph=True) -+ hidden_states = make_viewless_tensor( -+ inp=hidden_states, requires_grad=True, keep_graph=False -+ ) ++ hidden_states = make_viewless_tensor(inp=hidden_states, requires_grad=True, keep_graph=False) return input_ids, position_ids, decoder_input, hidden_states -@@ -821,22 +825,60 @@ class MultiTokenPredictionLayer(MegatronModule): +@@ -826,6 +829,51 @@ class MultiTokenPredictionLayer(MegatronModule): return hidden_states def _checkpointed_forward(self, forward_func, *args, **kwargs): -+ """Wrap forward_func with activation checkpointing while only passing tensors.""" ++ """Wrap `forward_func` with activation checkpointing while only passing tensors. ++ ++ Non-tensor arguments (e.g., configuration objects, None) are captured via closure so ++ that checkpoint implementations never receive them directly, avoiding save_for_backward ++ issues with non-tensor inputs. ++ """ + ++ # TODO(jiajun): Is there any better implementation here? + positional_specs = [] -+ keyword_specs = [] ++ kw_specs = [] + tensor_args: List[torch.Tensor] = [] + + for arg in args: @@ -643,10 +604,10 @@ index b0476155a..63f81465d 100755 + + for key, value in kwargs.items(): + if torch.is_tensor(value): -+ keyword_specs.append((key, ('tensor', len(tensor_args)))) ++ kw_specs.append((key, ('tensor', len(tensor_args)))) + tensor_args.append(value) + else: -+ keyword_specs.append((key, ('const', value))) ++ kw_specs.append((key, ('const', value))) + + def run(*flat_tensor_args): + rebuilt_args = [] @@ -657,7 +618,7 @@ index b0476155a..63f81465d 100755 + rebuilt_args.append(payload) + + rebuilt_kwargs = {} -+ for key, (spec_type, payload) in keyword_specs: ++ for key, (spec_type, payload) in kw_specs: + if spec_type == 'tensor': + rebuilt_kwargs[key] = flat_tensor_args[payload] + else: @@ -670,11 +631,7 @@ index b0476155a..63f81465d 100755 def checkpoint_handler(): """Determines whether to use the `te_checkpoint` or `tensor_parallel.checkpoint`""" if self.config.fp8: - from megatron.core.extensions.transformer_engine import te_checkpoint - - return te_checkpoint( -- forward_func, -+ run, +@@ -836,12 +884,11 @@ class MultiTokenPredictionLayer(MegatronModule): self.config.distribute_saved_activations, tensor_parallel.random.get_cuda_rng_tracker, parallel_state.get_tensor_model_parallel_group(), @@ -690,10 +647,10 @@ index b0476155a..63f81465d 100755 if self.config.recompute_method == 'uniform': diff --git a/megatron/core/transformer/transformer_config.py b/megatron/core/transformer/transformer_config.py -index dce438520..de51edaf3 100644 +index e2705bd9f..a0aa109b5 100644 --- a/megatron/core/transformer/transformer_config.py +++ b/megatron/core/transformer/transformer_config.py -@@ -229,6 +229,9 @@ class TransformerConfig(ModelParallelConfig): +@@ -210,6 +210,9 @@ class TransformerConfig(ModelParallelConfig): attention_output_gate: bool = False """Whether to apply output gate to the attention layers.""" @@ -704,10 +661,10 @@ index dce438520..de51edaf3 100644 """Whether to run real-time tests.""" diff --git a/megatron/core/transformer/transformer_layer.py b/megatron/core/transformer/transformer_layer.py -index 12c248684..227e95862 100644 +index 3ea405770..5a42001b9 100644 --- a/megatron/core/transformer/transformer_layer.py +++ b/megatron/core/transformer/transformer_layer.py -@@ -224,6 +224,7 @@ class TransformerLayerSubmodules: +@@ -223,6 +223,7 @@ class TransformerLayerSubmodules: input_layernorm: Union[ModuleSpec, type] = IdentityOp self_attention: Union[ModuleSpec, type] = IdentityOp self_attn_bda: Union[ModuleSpec, type] = IdentityFuncOp @@ -715,7 +672,7 @@ index 12c248684..227e95862 100644 pre_cross_attn_layernorm: Union[ModuleSpec, type] = IdentityOp cross_attention: Union[ModuleSpec, type] = IdentityOp -@@ -232,6 +233,7 @@ class TransformerLayerSubmodules: +@@ -231,6 +232,7 @@ class TransformerLayerSubmodules: pre_mlp_layernorm: Union[ModuleSpec, type] = IdentityOp mlp: Union[ModuleSpec, type] = IdentityOp mlp_bda: Union[ModuleSpec, type] = IdentityFuncOp @@ -723,7 +680,7 @@ index 12c248684..227e95862 100644 # Mapping for sharded tensor keys to be applied in `sharded_state_dict` method sharded_state_dict_keys_map: Dict[str, str] = field(default_factory=dict) -@@ -311,6 +313,13 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): +@@ -310,6 +312,13 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): # [Module 3: BiasDropoutFusion] self.self_attn_bda = build_module(submodules.self_attn_bda) @@ -737,7 +694,7 @@ index 12c248684..227e95862 100644 # [Module 4: Post SelfAttention] Optional Layernorm after self-attn self.pre_cross_attn_layernorm = build_module( submodules.pre_cross_attn_layernorm, -@@ -376,6 +385,13 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): +@@ -375,6 +384,13 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): self.is_moe_layer = isinstance(self.mlp, MoELayer) @@ -751,7 +708,7 @@ index 12c248684..227e95862 100644 self.recompute_input_layernorm = False self.recompute_pre_mlp_layernorm = False self.recompute_mlp = False -@@ -615,6 +631,10 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): +@@ -551,6 +567,10 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): attention_output_with_bias[0] ) @@ -762,9 +719,9 @@ index 12c248684..227e95862 100644 # TODO: could we move `bias_dropout_add_exec_handler` itself # inside the module provided in the `bias_dropout_add_spec` module? nvtx_range_push(suffix="self_attn_bda") -@@ -794,6 +814,10 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): - self.config.inference_fuse_tp_communication - ) +@@ -677,6 +697,10 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): + else: + mlp_output_with_bias = self.mlp(pre_mlp_layernorm_output) + mlp_output, mlp_output_bias = mlp_output_with_bias + mlp_output = self.post_mlp_layernorm(mlp_output) @@ -774,10 +731,10 @@ index 12c248684..227e95862 100644 # discard the output of the pre-mlp layernorm and register the recompute # as a gradient hook of mlp_output_with_bias[0] diff --git a/megatron/training/arguments.py b/megatron/training/arguments.py -index 1af066a82..8c7acadb6 100644 +index b267c8a81..83736acdc 100644 --- a/megatron/training/arguments.py +++ b/megatron/training/arguments.py -@@ -1388,6 +1388,9 @@ def core_transformer_config_from_args(args, config_class=None): +@@ -1398,6 +1398,9 @@ def core_transformer_config_from_args(args, config_class=None): kw_args['inference_sampling_seed'] = args.seed @@ -787,17 +744,21 @@ index 1af066a82..8c7acadb6 100644 # handle quantization config # NOTE: Kitchen arguments are only added to the namespace when # Kitchen library is available. -@@ -1701,6 +1704,8 @@ def _add_network_size_args(parser): - group.add_argument('--make-vocab-size-divisible-by', type=int, default=128, - help='Pad the vocab size to be divisible by this value.' - 'This is added for computational efficieny reasons.') +@@ -1764,6 +1767,12 @@ def _add_network_size_args(parser): + action='store_true', + help='If set, use original BERT residula connection ' + 'ordering.') ++ group.add_argument('--post-self-attn-layernorm', action='store_true', ++ help='If set, use post self attention layernorm.') ++ group.add_argument('--post-mlp-layernorm', action='store_true', ++ help='If set, use post MLP layernorm.') + group.add_argument('--use-gated-attention', action='store_true', + help='If set, use gated attention as in Qwen3Next') group.add_argument('--openai-gelu', action='store_true', help='Use OpenAIs GeLU implementation. This option' 'should not be used unless for backward compatibility' diff --git a/megatron/training/tokenizer/tokenizer.py b/megatron/training/tokenizer/tokenizer.py -index 17df57dda..260a5f6c8 100644 +index 13b7526ca..6c590f653 100644 --- a/megatron/training/tokenizer/tokenizer.py +++ b/megatron/training/tokenizer/tokenizer.py @@ -136,7 +136,7 @@ class _HuggingFaceTokenizer(MegatronLegacyTokenizer): diff --git a/docker/patch/latest/sglang.patch b/docker/patch/latest/sglang.patch index 4a13e2f9b4..89f99ab5a5 100644 --- a/docker/patch/latest/sglang.patch +++ b/docker/patch/latest/sglang.patch @@ -1,8 +1,8 @@ diff --git a/python/sglang/srt/configs/model_config.py b/python/sglang/srt/configs/model_config.py -index 691f06411d..671ac81c48 100644 +index 6fbd1db82..f80ec11bb 100644 --- a/python/sglang/srt/configs/model_config.py +++ b/python/sglang/srt/configs/model_config.py -@@ -294,6 +294,7 @@ class ModelConfig: +@@ -274,6 +274,7 @@ class ModelConfig: if is_draft_model and self.hf_config.architectures[0] in [ "DeepseekV3ForCausalLM", @@ -10,20 +10,69 @@ index 691f06411d..671ac81c48 100644 "GlmMoeDsaForCausalLM", ]: self.hf_config.architectures[0] = "DeepseekV3ForCausalLMNextN" -diff --git a/python/sglang/srt/disaggregation/base/conn.py b/python/sglang/srt/disaggregation/base/conn.py -index f7d4092d85..3aae51c849 100644 ---- a/python/sglang/srt/disaggregation/base/conn.py -+++ b/python/sglang/srt/disaggregation/base/conn.py -@@ -17,6 +17,7 @@ class KVArgs: - kv_data_ptrs: List[int] - kv_data_lens: List[int] - kv_item_lens: List[int] -+ aux_buffer_names: List[str] - aux_data_ptrs: List[int] - aux_data_lens: List[int] - aux_item_lens: List[int] +diff --git a/python/sglang/srt/disaggregation/common/conn.py b/python/sglang/srt/disaggregation/common/conn.py +index 67fe82ad6..67f564f04 100644 +--- a/python/sglang/srt/disaggregation/common/conn.py ++++ b/python/sglang/srt/disaggregation/common/conn.py +@@ -116,10 +116,18 @@ class CommonKVManager(BaseKVManager): + + bootstrap_server_url = f"{host}:{self.bootstrap_port}" + url = f"http://{bootstrap_server_url}/route" ++ route_attn_tp_rank = self.attn_tp_rank ++ # In prefill CP mode, attention TP rank is flattened to 0, but requests are ++ # still routed by engine rank; register by engine rank to preserve all routes. ++ if ( ++ self.disaggregation_mode == DisaggregationMode.PREFILL ++ and self.attn_tp_size == 1 ++ ): ++ route_attn_tp_rank = self.kv_args.engine_rank + payload = { + "role": "Prefill", + "attn_tp_size": self.attn_tp_size, +- "attn_tp_rank": self.attn_tp_rank, ++ "attn_tp_rank": route_attn_tp_rank, + "attn_dp_size": self.attn_dp_size, + "attn_dp_rank": self.attn_dp_rank, + "pp_size": self.pp_size, +@@ -333,6 +341,10 @@ class CommonKVReceiver(BaseKVReceiver): + self.required_dst_info_num = ( + self.kv_mgr.attn_tp_size // self.prefill_attn_tp_size + ) ++ # With attention DP, one request is routed to one decode rank. ++ # Waiting for all TP shards to pre-allocate the same bootstrap room would stall forever. ++ if self.kv_mgr.attn_dp_size > 1: ++ self.required_dst_info_num = 1 + self.required_prefill_response_num = 1 * ( + self.prefill_pp_size // self.kv_mgr.pp_size + ) +@@ -357,6 +369,11 @@ class CommonKVReceiver(BaseKVReceiver): + # multiple connections in the connection pool and have to send dummy requests to other prefill ranks, + # or the KVPoll will never be set correctly + self.target_tp_rank = self.target_tp_ranks[0] ++ # For prefill CP mode (decode attention TP=1, prefill attention TP>1), ++ # route bootstrap to all prefill ranks as non-dummy so the serving rank ++ # always receives decode-side metadata. ++ if self.kv_mgr.attn_tp_size == 1 and self.prefill_attn_tp_size > 1: ++ self.target_tp_rank = None + self.required_dst_info_num = 1 + if self.kv_mgr.is_mla_backend: + self.required_prefill_response_num = ( +@@ -610,8 +627,12 @@ class CommonKVBootstrapServer(BaseKVBootstrapServer): + and int(target_dp_group) == -1 + and int(target_pp_rank) == -1 + ): ++ inferred_attn_tp_size = max( ++ (len(v) for v in self.prefill_port_table.values()), ++ default=self.attn_tp_size, ++ ) + prefill_parallel_info = { +- "prefill_attn_tp_size": self.attn_tp_size, ++ "prefill_attn_tp_size": inferred_attn_tp_size, + "prefill_dp_size": self.dp_size, + "prefill_pp_size": self.pp_size, + "prefill_page_size": self.page_size, diff --git a/python/sglang/srt/disaggregation/decode.py b/python/sglang/srt/disaggregation/decode.py -index f54c882cc2..03832002f0 100644 +index 1d8baf002..1672de78d 100644 --- a/python/sglang/srt/disaggregation/decode.py +++ b/python/sglang/srt/disaggregation/decode.py @@ -21,6 +21,7 @@ Life cycle of a request in the decode server @@ -34,27 +83,8 @@ index f54c882cc2..03832002f0 100644 import time from collections import deque from dataclasses import dataclass -@@ -42,8 +43,10 @@ from sglang.srt.disaggregation.utils import ( - MetadataBuffers, - ReqToMetadataIdxAllocator, - TransferBackend, -+ apply_prefill_timing_payload, - get_kv_class, - is_mla_backend, -+ is_slime_profiling_enabled, - kv_to_page_indices, - poll_and_all_reduce, - poll_and_all_reduce_with_staging, -@@ -344,6 +347,7 @@ class DecodePreallocQueue: - kv_args.aux_data_ptrs, kv_args.aux_data_lens, kv_args.aux_item_lens = ( - self.metadata_buffers.get_buf_infos() +@@ -336,6 +337,16 @@ class DecodePreallocQueue: ) -+ kv_args.aux_buffer_names = self.metadata_buffers.get_aux_buffer_names() - - if hasattr(self.token_to_kv_pool, "get_state_buf_infos"): - state_data_ptrs, state_data_lens, state_item_lens = ( -@@ -398,6 +402,16 @@ class DecodePreallocQueue: - ) return kv_manager + def release_memory_occupation(self): @@ -70,7 +100,7 @@ index f54c882cc2..03832002f0 100644 def add(self, req: Req, is_retracted: bool = False) -> None: """Add a request to the pending queue.""" if self._check_if_req_exceed_kv_capacity(req): -@@ -525,12 +539,37 @@ class DecodePreallocQueue: +@@ -440,12 +451,37 @@ class DecodePreallocQueue: [decode_req.kv_receiver for decode_req in self.queue], self.gloo_group ) @@ -108,41 +138,10 @@ index f54c882cc2..03832002f0 100644 + self.scheduler.metrics_collector.increment_bootstrap_failed_reqs() elif poll == KVPoll.WaitingForInput: decode_req.waiting_for_input = True - decode_req.req.time_stats.set_bootstrap_done_time() -@@ -770,6 +809,7 @@ class DecodePreallocQueue: - self.req_to_metadata_buffer_idx_allocator.alloc() - ) - assert decode_req.metadata_buffer_index is not None -+ self.metadata_buffers.clear_profiling_buf(decode_req.metadata_buffer_index) - page_indices = kv_to_page_indices(kv_indices, page_size) - decode_req.kv_receiver.send_metadata( - page_indices, decode_req.metadata_buffer_index, state_indices -@@ -964,6 +1004,7 @@ class DecodeTransferQueue: - output_topk_index, - output_hidden_states, - output_bootstrap_room, -+ output_prefill_timing, - ) = self.metadata_buffers.get_buf(idx) - - # Validate bootstrap_room to detect context corruption -@@ -1025,6 +1066,14 @@ class DecodeTransferQueue: - output_top_logprobs_idx[: decode_req.req.top_logprobs_num].tolist() - ) - -+ # Inject prefill-side PD timing forwarded from the P instance. -+ # Layout: [bootstrap_queue, forward, transfer_queue, bootstrap, -+ # alloc_waiting, transfer_speed, transfer_mb, retry_count] -+ if is_slime_profiling_enabled(): -+ apply_prefill_timing_payload( -+ decode_req.req.time_stats, output_prefill_timing -+ ) -+ - decode_req.kv_receiver.clear() - decode_req.kv_receiver = None - decode_req.req.time_stats.set_wait_queue_entry_time() -@@ -1057,6 +1106,13 @@ class DecodeTransferQueue: - [dr.kv_receiver for dr in self.queue], self.gloo_group - ) + elif poll == KVPoll.Failed: +@@ -830,6 +866,13 @@ class DecodeTransferQueue: + [decode_req.kv_receiver for decode_req in self.queue], self.gloo_group + ) + # Transfer timeout: if a request has been in the transfer queue for too long + # (e.g., stuck in Bootstrapping/WaitingForInput/Transferring), treat it as failed. @@ -154,7 +153,7 @@ index f54c882cc2..03832002f0 100644 transferred_reqs = [] indices_to_remove = set() for i, (decode_req, poll) in enumerate(zip(self.queue, polls)): -@@ -1111,7 +1167,20 @@ class DecodeTransferQueue: +@@ -877,7 +920,31 @@ class DecodeTransferQueue: KVPoll.WaitingForInput, KVPoll.Transferring, ]: @@ -172,11 +171,22 @@ index f54c882cc2..03832002f0 100644 + f"{decode_req.req.rid=} {decode_req.req.bootstrap_room=}" + ) + logger.error(error_message) -+ decode_req.kv_receiver.abort() ++ prepare_abort( ++ decode_req.req, ++ error_message, ++ status_code=HTTPStatus.GATEWAY_TIMEOUT, ++ ) ++ self.scheduler.stream_output( ++ [decode_req.req], decode_req.req.return_logprob ++ ) ++ release_kv_cache(decode_req.req, self.tree_cache, is_insert=False) ++ indices_to_remove.add(i) ++ if self.scheduler.enable_metrics: ++ self.scheduler.metrics_collector.increment_transfer_failed_reqs() else: raise ValueError(f"Unexpected poll case: {poll}") -@@ -1132,6 +1201,14 @@ class DecodeTransferQueue: +@@ -893,6 +960,14 @@ class DecodeTransferQueue: return transferred_reqs @@ -191,7 +201,7 @@ index f54c882cc2..03832002f0 100644 class SchedulerDisaggregationDecodeMixin: -@@ -1301,7 +1378,15 @@ class SchedulerDisaggregationDecodeMixin: +@@ -1072,7 +1147,15 @@ class SchedulerDisaggregationDecodeMixin: resumed_reqs = self.disagg_decode_prealloc_queue.resume_retracted_reqs() self.waiting_queue.extend(resumed_reqs) if len(self.disagg_decode_prealloc_queue.retracted_queue) > 0: @@ -209,72 +219,30 @@ index f54c882cc2..03832002f0 100644 if not hasattr(self, "polling_count"): diff --git a/python/sglang/srt/disaggregation/mooncake/conn.py b/python/sglang/srt/disaggregation/mooncake/conn.py -index 64d97f5c69..4ef08446aa 100644 +index d0d4efd95..a5f06cd67 100644 --- a/python/sglang/srt/disaggregation/mooncake/conn.py +++ b/python/sglang/srt/disaggregation/mooncake/conn.py -@@ -31,6 +31,7 @@ from sglang.srt.disaggregation.mooncake.utils import ( - from sglang.srt.disaggregation.utils import ( - DisaggregationMode, - filter_kv_indices_for_cp_rank, -+ iter_aux_transfer_specs, - ) - from sglang.srt.distributed.parallel_state import get_mooncake_transfer_engine - from sglang.srt.environ import envs -@@ -276,6 +277,16 @@ class MooncakeKVManager(CommonKVManager): +@@ -260,6 +260,19 @@ class MooncakeKVManager(CommonKVManager): self.kv_args.state_data_ptrs, self.kv_args.state_data_lens ) + def deregister_buffer_to_engine(self): ++ # Batch deregister KV data buffers + if self.kv_args.kv_data_ptrs: + self.engine.batch_deregister(self.kv_args.kv_data_ptrs) + ++ # Batch deregister auxiliary data buffers + if self.kv_args.aux_data_ptrs: + self.engine.batch_deregister(self.kv_args.aux_data_ptrs) + ++ # Batch deregister state/extra pool data buffers + if self.kv_args.state_data_ptrs: + self.engine.batch_deregister(self.kv_args.state_data_ptrs) + - # ------------------------------------------------------------------ - # Staging buffer methods (all delegate to staging_handler.py) - # ------------------------------------------------------------------ -@@ -884,10 +895,14 @@ class MooncakeKVManager(CommonKVManager): - prefill_aux_ptrs = self.kv_args.aux_data_ptrs - prefill_aux_item_lens = self.kv_args.aux_item_lens - -- for i, dst_aux_ptr in enumerate(dst_aux_ptrs): -- length = prefill_aux_item_lens[i] -- src_addr = prefill_aux_ptrs[i] + length * prefill_aux_index -- dst_addr = dst_aux_ptrs[i] + length * req.dst_aux_index -+ for _, src_addr, dst_addr, length in iter_aux_transfer_specs( -+ self.kv_args.aux_buffer_names, -+ prefill_aux_ptrs, -+ prefill_aux_item_lens, -+ dst_aux_ptrs, -+ prefill_aux_index, -+ req.dst_aux_index, -+ ): - transfer_blocks.append((src_addr, dst_addr, length)) - - return self._transfer_data(req.mooncake_session_id, transfer_blocks) -@@ -901,9 +916,14 @@ class MooncakeKVManager(CommonKVManager): - prefill_aux_ptrs = self.kv_args.aux_data_ptrs - prefill_aux_item_lens = self.kv_args.aux_item_lens - -- for i in range(len(prefill_aux_ptrs)): -- length = prefill_aux_item_lens[i] -- src_addr = prefill_aux_ptrs[i] + length * prefill_aux_index -+ for i, src_addr, _, length in iter_aux_transfer_specs( -+ self.kv_args.aux_buffer_names, -+ prefill_aux_ptrs, -+ prefill_aux_item_lens, -+ dst_aux_ptrs, -+ prefill_aux_index, -+ req.dst_aux_index, -+ ): - data = AuxDataCodec.serialize_data_from_buffer(src_addr, length) - - self.send_aux_data_to_endpoint( -@@ -1002,13 +1022,13 @@ class MooncakeKVManager(CommonKVManager): + def _transfer_data(self, mooncake_session_id, transfer_blocks): + if not transfer_blocks: + return 0 +@@ -643,13 +656,13 @@ class MooncakeKVManager(CommonKVManager): raise RuntimeError( f"PD Disaggregation does NOT support PD different TP sizes for non-MLA {state_type.upper()} hybrid models yet." ) @@ -294,22 +262,9 @@ index 64d97f5c69..4ef08446aa 100644 # Reuse _send_kvcache_generic interface to send extra pool data prefill_state_indices = np.array(prefill_state_indices, dtype=np.int32) dst_state_indices = np.array(req.dst_state_indices, dtype=np.int32) -@@ -1266,12 +1286,6 @@ class MooncakeKVManager(CommonKVManager): - if ret != 0: - with self.session_lock: - self.session_failures[req.mooncake_session_id] += 1 -- # Failures should never happen if the session is not dead, if the session fails once, mark it as failed -- if self.session_failures[req.mooncake_session_id] >= 1: -- self.failed_sessions.add(req.mooncake_session_id) -- logger.error( -- f"Session {req.mooncake_session_id} failed." -- ) - self.record_failure( - kv_chunk.room, - f"Failed to send kv chunk of {kv_chunk.room} to " -@@ -1289,13 +1303,31 @@ class MooncakeKVManager(CommonKVManager): - - if kv_chunk.is_last_chunk: +@@ -880,13 +893,36 @@ class MooncakeKVManager(CommonKVManager): + + if kv_chunk.is_last: if kv_chunk.state_indices is not None: - self.maybe_send_extra( + ret = self.maybe_send_extra( @@ -320,13 +275,18 @@ index 64d97f5c69..4ef08446aa 100644 target_rank_registration_info, ) + if ret != 0: -+ remote_addr = NetworkAddress( -+ req.endpoint, req.dst_port -+ ).to_host_port_str() ++ with self.session_lock: ++ self.session_failures[req.mooncake_session_id] += 1 ++ if self.session_failures[req.mooncake_session_id] >= 1: ++ self.failed_sessions.add( ++ req.mooncake_session_id ++ ) ++ logger.error( ++ f"Session {req.mooncake_session_id} failed." ++ ) + self.record_failure( + kv_chunk.room, -+ f"Failed to send extra state chunk of {kv_chunk.room} to " -+ f"{remote_addr}", ++ f"Failed to send extra state chunk of {kv_chunk.room} to {req.endpoint}:{req.dst_port}", + ) + self.update_status(kv_chunk.room, KVPoll.Failed) + self.sync_status_to_decode_endpoint( @@ -334,37 +294,78 @@ index 64d97f5c69..4ef08446aa 100644 + req.dst_port, + req.room, + KVPoll.Failed, -+ prefill_unique_rank, ++ local_rank, + ) + break # Only the last chunk we need to send the aux data ret = self.send_aux( +@@ -895,6 +931,21 @@ class MooncakeKVManager(CommonKVManager): + target_rank_registration_info.dst_aux_ptrs, + ) + polls.append(True if ret == 0 else False) ++ if ret != 0: ++ # Mark session as failed to avoid hanging ++ # on subsequent batch_transfer_sync calls ++ with self.session_lock: ++ self.session_failures[req.mooncake_session_id] += 1 ++ if ( ++ self.session_failures[req.mooncake_session_id] ++ >= 1 ++ ): ++ self.failed_sessions.add( ++ req.mooncake_session_id ++ ) ++ logger.error( ++ f"Session {req.mooncake_session_id} failed (send_aux)." ++ ) + dst_ranks_infos.append( + (req.endpoint, req.dst_port, req.room) + ) +@@ -977,15 +1028,18 @@ class MooncakeKVManager(CommonKVManager): + + if status == KVPoll.Success: + if bootstrap_room in self.request_status: +- self.prefill_response_tracker[bootstrap_room].add(prefill_rank) +- expected_response_num = ( +- self.required_prefill_response_num_table[bootstrap_room] ++ # Guard against TOCTOU race: clear() may remove the entry ++ # between the request_status check and dict access here. ++ expected_response_num = self.required_prefill_response_num_table.get( ++ bootstrap_room + ) +- arrived_response_num = len( +- self.prefill_response_tracker[bootstrap_room] +- ) +- if arrived_response_num == expected_response_num: +- self.update_status(bootstrap_room, KVPoll.Success) ++ if expected_response_num is not None: ++ self.prefill_response_tracker[bootstrap_room].add(prefill_rank) ++ arrived_response_num = len( ++ self.prefill_response_tracker[bootstrap_room] ++ ) ++ if arrived_response_num == expected_response_num: ++ self.update_status(bootstrap_room, KVPoll.Success) + elif status == KVPoll.Failed: + self.record_failure( + bootstrap_room, diff --git a/python/sglang/srt/disaggregation/prefill.py b/python/sglang/srt/disaggregation/prefill.py -index 8eadf81954..c180ce79f3 100644 +index fbc801635..4ea5638cd 100644 --- a/python/sglang/srt/disaggregation/prefill.py +++ b/python/sglang/srt/disaggregation/prefill.py -@@ -20,6 +20,8 @@ Life cycle of a request in the prefill server +@@ -20,6 +20,7 @@ Life cycle of a request in the prefill server from __future__ import annotations import logging +import os -+import time + import time from collections import deque from http import HTTPStatus - from typing import TYPE_CHECKING, List, Optional -@@ -165,6 +167,7 @@ class PrefillBootstrapQueue: - kv_args.aux_data_ptrs, kv_args.aux_data_lens, kv_args.aux_item_lens = ( - self.metadata_buffers.get_buf_infos() - ) -+ kv_args.aux_buffer_names = self.metadata_buffers.get_aux_buffer_names() - kv_args.ib_device = self.scheduler.server_args.disaggregation_ib_device - kv_args.gpu_id = self.scheduler.gpu_id - -@@ -290,6 +293,11 @@ class PrefillBootstrapQueue: - self.scheduler.attn_tp_cpu_group, +@@ -276,6 +277,12 @@ class PrefillBootstrapQueue: + [req.disagg_kv_sender for req in self.queue], self.gloo_group ) ++ # Bootstrap timeout: if a request has been stuck in Bootstrapping for too long, treat it as failed. + bootstrap_timeout = float( + os.environ.get("SGLANG_DISAGGREGATION_TRANSFER_TIMEOUT", "600") + ) @@ -373,10 +374,11 @@ index 8eadf81954..c180ce79f3 100644 for i, (req, poll) in enumerate(zip(self.queue, polls)): if rids_to_check is not None: # if req not in reqs_info_to_check, skip -@@ -297,6 +305,26 @@ class PrefillBootstrapQueue: +@@ -283,6 +290,27 @@ class PrefillBootstrapQueue: continue if poll == KVPoll.Bootstrapping: ++ # Check for bootstrap timeout + entry_time = getattr( + req.time_stats, + "prefill_bootstrap_queue_entry_time", @@ -400,7 +402,7 @@ index 8eadf81954..c180ce79f3 100644 continue elif poll == KVPoll.Failed: error_message = f"Prefill bootstrap failed for request rank={self.tp_rank} {req.rid=} {req.bootstrap_room=}" -@@ -346,6 +374,15 @@ class PrefillBootstrapQueue: +@@ -335,6 +363,15 @@ class PrefillBootstrapQueue: else: return bootstrapped_reqs, failed_reqs @@ -416,34 +418,12 @@ index 8eadf81954..c180ce79f3 100644 class SchedulerDisaggregationPrefillMixin: """ -@@ -568,12 +605,17 @@ class SchedulerDisaggregationPrefillMixin: - self.send_kv_chunk(req, last_chunk=False, end_idx=req.tmp_end_idx) - req.time_stats.set_last_chunked_prefill_finish_time() - -- can_run_cuda_graph = getattr(result, "can_run_cuda_graph", False) -- self.report_prefill_stats( -- prefill_stats=batch.prefill_stats, -- can_run_cuda_graph=can_run_cuda_graph, -- dp_cooperation_info=batch.dp_cooperation_info, -- ) -+ if ( -+ self.current_scheduler_metrics_enabled -+ and hasattr(batch, "prefill_stats") -+ and batch.prefill_stats is not None -+ ): -+ can_run_cuda_graph = getattr(result, "can_run_cuda_graph", False) -+ self.report_prefill_stats( -+ prefill_stats=batch.prefill_stats, -+ can_run_cuda_graph=can_run_cuda_graph, -+ dp_cooperation_info=getattr(batch, "dp_cooperation_info", None), -+ ) - - def process_disagg_prefill_inflight_queue( - self: Scheduler, rids_to_check: Optional[List[str]] = None -@@ -593,6 +635,11 @@ class SchedulerDisaggregationPrefillMixin: +@@ -564,6 +601,13 @@ class SchedulerDisaggregationPrefillMixin: self.attn_tp_cpu_group, ) ++ # Transfer timeout: if a request has been in the inflight queue for too long ++ # (e.g., stuck in WaitingForInput/Transferring), treat it as failed. + transfer_timeout = float( + os.environ.get("SGLANG_DISAGGREGATION_TRANSFER_TIMEOUT", "600") + ) @@ -452,11 +432,18 @@ index 8eadf81954..c180ce79f3 100644 undone_reqs: List[Req] = [] # Check .poll() for the reqs in disagg_prefill_inflight_queue. If Success, respond to the client and remove it from the queue for req, poll in zip(self.disagg_prefill_inflight_queue, polls): -@@ -618,7 +665,29 @@ class SchedulerDisaggregationPrefillMixin: +@@ -573,10 +617,35 @@ class SchedulerDisaggregationPrefillMixin: + undone_reqs.append(req) continue +- assert poll == KVPoll.Success or poll == KVPoll.Failed ++ if poll not in (KVPoll.Success, KVPoll.Failed): ++ undone_reqs.append(req) ++ continue + if poll in [KVPoll.WaitingForInput, KVPoll.Transferring]: - undone_reqs.append(req) ++ # Check for transfer timeout + entry_time = getattr( + req.time_stats, + "prefill_transfer_queue_entry_time", @@ -469,7 +456,7 @@ index 8eadf81954..c180ce79f3 100644 + f"{req.rid=} {req.bootstrap_room=}" + ) + logger.error(error_message) -+ release_kv_cache(req, self.tree_cache) ++ release_kv_cache(req, self.tree_cache) # unlock the tree + prepare_abort( + req, error_message, status_code=HTTPStatus.GATEWAY_TIMEOUT + ) @@ -483,218 +470,36 @@ index 8eadf81954..c180ce79f3 100644 elif poll == KVPoll.Success: # transfer done release_kv_cache(req, self.tree_cache) # unlock the tree req.finished_reason = FINISH_LENGTH(length=0) -diff --git a/python/sglang/srt/disaggregation/utils.py b/python/sglang/srt/disaggregation/utils.py -index d7956a6048..0ced278713 100644 ---- a/python/sglang/srt/disaggregation/utils.py -+++ b/python/sglang/srt/disaggregation/utils.py -@@ -28,6 +28,17 @@ if TYPE_CHECKING: - # Constants & Enums - ######################### - FAKE_BOOTSTRAP_HOST = "2.2.2.2" -+PREFILL_TIMING_AUX_BUFFER_NAME = "prefill_timing" -+PREFILL_TIMING_DEST_ATTRS = ( -+ ("fwd_prefill_bootstrap_queue_duration", float), -+ ("fwd_prefill_forward_duration", float), -+ ("fwd_prefill_transfer_queue_duration", float), -+ ("fwd_bootstrap_duration", float), -+ ("fwd_alloc_waiting_duration", float), -+ ("fwd_transfer_speed_gb_s", float), -+ ("fwd_transfer_total_mb", float), -+ ("fwd_prefill_retry_count", int), -+) +@@ -743,7 +812,7 @@ class SchedulerDisaggregationPrefillMixin: - - class DisaggregationMode(Enum): -@@ -193,46 +204,35 @@ class MetadataBuffers: - self.bootstrap_room = torch.zeros( - (size, 8), dtype=bootstrap_room_dtype, device=device + page_indices = kv_to_page_indices(kv_indices, page_size) + if len(page_indices) == 0: +- logger.info( ++ logger.debug( + f"Skip sending kv chunk for request {req.rid=} {req.bootstrap_room=} because page_indices is empty" ) -+ # Prefill-side PD timing (8 floats, padded to 16 for RDMA alignment). -+ # Layout: [bootstrap_queue, forward, transfer_queue, bootstrap, -+ # alloc_waiting, transfer_speed, transfer_mb, retry_count] -+ self.prefill_timing = torch.zeros( -+ (size, 16), dtype=torch.float32, device=device -+ ) -+ self.aux_buffers = [ -+ ("output_ids", self.output_ids), -+ ("cached_tokens", self.cached_tokens), -+ ("output_token_logprobs_val", self.output_token_logprobs_val), -+ ("output_token_logprobs_idx", self.output_token_logprobs_idx), -+ ("output_top_logprobs_val", self.output_top_logprobs_val), -+ ("output_top_logprobs_idx", self.output_top_logprobs_idx), -+ ("output_topk_p", self.output_topk_p), -+ ("output_topk_index", self.output_topk_index), -+ ("output_hidden_states", self.output_hidden_states), -+ ("bootstrap_room", self.bootstrap_room), -+ (PREFILL_TIMING_AUX_BUFFER_NAME, self.prefill_timing), -+ ] - - def get_buf_infos(self): -- ptrs = [ -- self.output_ids.data_ptr(), -- self.cached_tokens.data_ptr(), -- self.output_token_logprobs_val.data_ptr(), -- self.output_token_logprobs_idx.data_ptr(), -- self.output_top_logprobs_val.data_ptr(), -- self.output_top_logprobs_idx.data_ptr(), -- self.output_topk_p.data_ptr(), -- self.output_topk_index.data_ptr(), -- self.output_hidden_states.data_ptr(), -- self.bootstrap_room.data_ptr(), -- ] -- data_lens = [ -- self.output_ids.nbytes, -- self.cached_tokens.nbytes, -- self.output_token_logprobs_val.nbytes, -- self.output_token_logprobs_idx.nbytes, -- self.output_top_logprobs_val.nbytes, -- self.output_top_logprobs_idx.nbytes, -- self.output_topk_p.nbytes, -- self.output_topk_index.nbytes, -- self.output_hidden_states.nbytes, -- self.bootstrap_room.nbytes, -- ] -- item_lens = [ -- self.output_ids[0].nbytes, -- self.cached_tokens[0].nbytes, -- self.output_token_logprobs_val[0].nbytes, -- self.output_token_logprobs_idx[0].nbytes, -- self.output_top_logprobs_val[0].nbytes, -- self.output_top_logprobs_idx[0].nbytes, -- self.output_topk_p[0].nbytes, -- self.output_topk_index[0].nbytes, -- self.output_hidden_states[0].nbytes, -- self.bootstrap_room[0].nbytes, -- ] -+ ptrs = [buffer.data_ptr() for _, buffer in self.aux_buffers] -+ data_lens = [buffer.nbytes for _, buffer in self.aux_buffers] -+ item_lens = [buffer[0].nbytes for _, buffer in self.aux_buffers] - return ptrs, data_lens, item_lens - -+ def get_aux_buffer_names(self): -+ return [name for name, _ in self.aux_buffers] -+ - def get_buf(self, idx: int): - return ( - self.output_ids[idx], -@@ -245,8 +245,12 @@ class MetadataBuffers: - self.output_topk_index[idx], - self.output_hidden_states[idx], - self.bootstrap_room[idx], -+ self.prefill_timing[idx], - ) - -+ def clear_profiling_buf(self, idx: int): -+ self.prefill_timing[idx].zero_() -+ - def set_buf(self, req: Req): - - self.output_ids[req.metadata_buffer_index][0] = req.output_ids[0] -@@ -294,6 +298,99 @@ class MetadataBuffers: - self.bootstrap_room[req.metadata_buffer_index, 0] = ( - req.bootstrap_room if req.bootstrap_room is not None else 0 - ) -+ # Pack prefill-side PD timing durations for transfer to decode instance. -+ # Note: set_buf is called at the START of the last KV chunk send, so -+ # completion_time and prefill_transfer_queue_entry_time are not yet set. -+ # We use time.perf_counter() as the "forward just completed" timestamp. -+ import time -+ -+ ts = req.time_stats -+ timing = self.prefill_timing[req.metadata_buffer_index] -+ self.clear_profiling_buf(req.metadata_buffer_index) -+ if not is_slime_profiling_enabled(): -+ return -+ for idx, value in enumerate( -+ build_prefill_timing_payload(ts, now=time.perf_counter()) -+ ): -+ if value > 0: -+ timing[idx] = value -+ -+ -+def is_slime_profiling_enabled() -> bool: -+ return envs.SLIME_ENABLE_PROFILING.get() -+ -+ -+def build_prefill_timing_payload(time_stats, now: float) -> tuple[float, ...]: -+ bootstrap_queue_duration = 0.0 -+ if ( -+ time_stats.prefill_bootstrap_queue_entry_time > 0 -+ and time_stats.wait_queue_entry_time > 0 -+ ): -+ bootstrap_queue_duration = ( -+ time_stats.wait_queue_entry_time -+ - time_stats.prefill_bootstrap_queue_entry_time -+ ) -+ -+ prefill_forward_duration = ( -+ now - time_stats.forward_entry_time -+ if time_stats.forward_entry_time > 0 -+ else 0.0 -+ ) -+ -+ bootstrap_duration = 0.0 -+ alloc_waiting_duration = 0.0 -+ if ( -+ time_stats.prefill_bootstrap_queue_entry_time > 0 -+ and time_stats.bootstrap_done_time > 0 -+ ): -+ bootstrap_duration = ( -+ time_stats.bootstrap_done_time -+ - time_stats.prefill_bootstrap_queue_entry_time -+ ) -+ if time_stats.bootstrap_done_time > 0 and time_stats.wait_queue_entry_time > 0: -+ alloc_waiting_duration = ( -+ time_stats.wait_queue_entry_time - time_stats.bootstrap_done_time -+ ) -+ -+ return ( -+ bootstrap_queue_duration, -+ prefill_forward_duration, -+ 0.0, -+ max(0.0, bootstrap_duration), -+ max(0.0, alloc_waiting_duration), -+ max(0.0, time_stats.transfer_speed_gb_s), -+ max(0.0, time_stats.transfer_total_mb), -+ float(max(0, time_stats.prefill_retry_count)), -+ ) -+ -+ -+def apply_prefill_timing_payload(time_stats, timing) -> None: -+ for value, (attr_name, caster) in zip( -+ timing[: len(PREFILL_TIMING_DEST_ATTRS)].tolist(), -+ PREFILL_TIMING_DEST_ATTRS, -+ ): -+ if value > 0: -+ setattr(time_stats, attr_name, caster(value)) -+ -+ -+def iter_aux_transfer_specs( -+ aux_buffer_names: list[str], -+ prefill_aux_ptrs: list[int], -+ prefill_aux_item_lens: list[int], -+ dst_aux_ptrs: list[int], -+ prefill_aux_index: int, -+ dst_aux_index: int, -+): -+ profiling_enabled = is_slime_profiling_enabled() -+ for i, (buffer_name, dst_aux_ptr) in enumerate(zip(aux_buffer_names, dst_aux_ptrs)): -+ if not profiling_enabled and buffer_name == PREFILL_TIMING_AUX_BUFFER_NAME: -+ continue -+ length = prefill_aux_item_lens[i] -+ if length <= 0: -+ continue -+ src_addr = prefill_aux_ptrs[i] + length * prefill_aux_index -+ dst_addr = dst_aux_ptr + length * dst_aux_index -+ yield i, src_addr, dst_addr, length + return +diff --git a/python/sglang/srt/distributed/parallel_state.py b/python/sglang/srt/distributed/parallel_state.py +index 8f1069c00..e47589295 100644 +--- a/python/sglang/srt/distributed/parallel_state.py ++++ b/python/sglang/srt/distributed/parallel_state.py +@@ -1999,7 +1999,10 @@ def get_tensor_model_parallel_world_size(): + + def get_tensor_model_parallel_rank(): + """Return my rank for the tensor model parallel group.""" +- return get_tp_group().rank_in_group ++ try: ++ return get_tp_group().rank_in_group ++ except Exception: ++ return 0 - ######################### + # ATTN_TP diff --git a/python/sglang/srt/entrypoints/engine.py b/python/sglang/srt/entrypoints/engine.py -index d864e4abaa..3a000a80f2 100644 +index 0ed5a1b44..67e33c650 100644 --- a/python/sglang/srt/entrypoints/engine.py +++ b/python/sglang/srt/entrypoints/engine.py -@@ -69,6 +69,7 @@ from sglang.srt.managers.io_struct import ( +@@ -52,6 +52,7 @@ from sglang.srt.managers.io_struct import ( LoadLoRAAdapterReqInput, MultimodalDataInputFormat, OpenSessionReqInput, @@ -702,7 +507,7 @@ index d864e4abaa..3a000a80f2 100644 ReleaseMemoryOccupationReqInput, ResumeMemoryOccupationReqInput, RpcReqInput, -@@ -957,6 +958,24 @@ class Engine(EngineScoreMixin, EngineBase): +@@ -641,6 +642,24 @@ class Engine(EngineBase): self.tokenizer_manager.update_weights_from_ipc(obj, None) ) @@ -728,10 +533,10 @@ index d864e4abaa..3a000a80f2 100644 """Get weights by parameter name.""" obj = GetWeightsByNameReqInput(name=name, truncate_size=truncate_size) diff --git a/python/sglang/srt/entrypoints/http_server.py b/python/sglang/srt/entrypoints/http_server.py -index 6978e0c062..80dc159e8f 100644 +index 1d6816c01..402b42e05 100644 --- a/python/sglang/srt/entrypoints/http_server.py +++ b/python/sglang/srt/entrypoints/http_server.py -@@ -127,6 +127,7 @@ from sglang.srt.managers.io_struct import ( +@@ -115,6 +115,7 @@ from sglang.srt.managers.io_struct import ( OpenSessionReqInput, ParseFunctionCallReq, PauseGenerationReqInput, @@ -739,7 +544,7 @@ index 6978e0c062..80dc159e8f 100644 ProfileReqInput, ReleaseMemoryOccupationReqInput, ResumeMemoryOccupationReqInput, -@@ -582,10 +583,8 @@ async def model_info(): +@@ -574,10 +575,8 @@ async def model_info(): @app.get("/weight_version") async def weight_version(): """Get the current weight version.""" @@ -752,7 +557,7 @@ index 6978e0c062..80dc159e8f 100644 @app.get("/get_server_info") -@@ -602,9 +601,19 @@ async def get_server_info(): +@@ -594,9 +593,19 @@ async def get_server_info(): async def server_info(): """Get the server information.""" # Returns internal states per DP. @@ -775,7 +580,7 @@ index 6978e0c062..80dc159e8f 100644 # This field is not serializable. if hasattr(_global_state.tokenizer_manager.server_args, "model_config"): -@@ -1121,6 +1130,23 @@ async def update_weights_from_ipc(obj: UpdateWeightsFromIPCReqInput, request: Re +@@ -1084,6 +1093,23 @@ async def update_weights_from_ipc(obj: UpdateWeightsFromIPCReqInput, request: Re return ORJSONResponse(content, status_code=HTTPStatus.BAD_REQUEST) @@ -799,20 +604,28 @@ index 6978e0c062..80dc159e8f 100644 @app.post("/update_weight_version") @auth_level(AuthLevel.ADMIN_OPTIONAL) async def update_weight_version(obj: UpdateWeightVersionReqInput, request: Request): -diff --git a/python/sglang/srt/environ.py b/python/sglang/srt/environ.py -index dfc5507de0..be9501b05a 100644 ---- a/python/sglang/srt/environ.py -+++ b/python/sglang/srt/environ.py -@@ -242,6 +242,7 @@ class Envs: - SGLANG_DISAGGREGATION_HEARTBEAT_MAX_FAILURE = EnvInt(2) - SGLANG_DISAGGREGATION_WAITING_TIMEOUT = EnvInt(300) - SGLANG_DISAGGREGATION_NIXL_BACKEND = EnvStr("UCX") -+ SLIME_ENABLE_PROFILING = EnvBool(False) - SGLANG_DISAGGREGATION_ALL_CP_RANKS_TRANSFER = EnvBool(False) - # Extra slots in req_to_token_pool for decode workers (only effective when - # max_num_reqs > 32). Increases pool capacity so more KV cache transfers +diff --git a/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py b/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py +index 1cdf65b91..4783cd18f 100644 +--- a/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py ++++ b/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py +@@ -630,7 +630,6 @@ def _get_k_and_s_triton( + page_indices, + k_out, + s_out, +- seq_len, + page_size, + buf_numel_per_page, + index_head_dim, +@@ -647,7 +646,6 @@ def _get_k_and_s_triton_kernel( + page_indices_ptr, + k_out_ptr, + s_out_ptr, +- seq_len: tl.constexpr, + page_size: tl.constexpr, + buf_numel_per_page: tl.constexpr, + index_head_dim: tl.constexpr, diff --git a/python/sglang/srt/layers/attention/nsa/nsa_indexer.py b/python/sglang/srt/layers/attention/nsa/nsa_indexer.py -index 02ef4e2440..fd5a43cce8 100644 +index ca54a931b..6c102a251 100644 --- a/python/sglang/srt/layers/attention/nsa/nsa_indexer.py +++ b/python/sglang/srt/layers/attention/nsa/nsa_indexer.py @@ -1,6 +1,7 @@ @@ -823,44 +636,23 @@ index 02ef4e2440..fd5a43cce8 100644 from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple -@@ -213,14 +214,31 @@ class Indexer(MultiPlatformOp): - prefix=add_prefix("weights_proj", prefix), - ) - self.k_norm = LayerNorm(self.head_dim, dtype=torch.float32) -+ server_args = get_global_server_args() -+ disable_flag = server_args.disable_indexer_rope_neox_style -+ env_raw = os.environ.get("INDEXER_ROPE_NEOX_STYLE", None) -+ if env_raw is not None: -+ env_value = env_raw == "1" -+ if disable_flag and env_value: -+ raise ValueError( -+ "Conflict: --disable-indexer-rope-neox-style is set but " -+ "INDEXER_ROPE_NEOX_STYLE='1'. " -+ "Please remove one or make them consistent." -+ ) -+ resolved_neox_style = env_value -+ elif disable_flag: -+ resolved_neox_style = False -+ else: -+ resolved_neox_style = is_neox_style -+ - self.rotary_emb = get_rope_wrapper( - rope_head_dim, - rotary_dim=rope_head_dim, +@@ -207,7 +208,11 @@ class Indexer(MultiPlatformOp): max_position=max_position_embeddings, base=rope_theta, # type: ignore rope_scaling=rope_scaling, - is_neox_style=is_neox_style, -- device=get_global_server_args().device, -+ is_neox_style=resolved_neox_style, -+ device=server_args.device, ++ is_neox_style=( ++ os.environ.get("INDEXER_ROPE_NEOX_STYLE", "1") == "1" ++ if os.environ.get("INDEXER_ROPE_NEOX_STYLE", None) ++ else is_neox_style ++ ), + device=get_global_server_args().device, ) self.block_size = block_size - self.scale_fmt = scale_fmt -@@ -266,6 +284,11 @@ class Indexer(MultiPlatformOp): - @torch.compile(dynamic=True) if not _is_hip else lambda f: f - def _get_logits_head_gate(self, x: torch.Tensor, q_scale: torch.Tensor): - weights = self._weights_proj_bf16_in_fp32_out(x) +@@ -244,6 +249,11 @@ class Indexer(MultiPlatformOp): + x = x.to(self.weights_proj.weight.dtype) + weights, _ = self.weights_proj(x) + weights = weights.float() + if weights.shape[1] < q_scale.shape[1]: + assert q_scale.shape[1] % weights.shape[1] == 0 + weights = weights.repeat_interleave( @@ -869,7 +661,7 @@ index 02ef4e2440..fd5a43cce8 100644 weights = weights * self.n_heads**-0.5 weights = weights.unsqueeze(-1) * q_scale * self.softmax_scale return weights -@@ -1078,6 +1101,9 @@ class Indexer(MultiPlatformOp): +@@ -982,15 +992,26 @@ class Indexer(MultiPlatformOp): query, key = self._get_q_k_bf16( q_lora, x, positions, enable_dual_stream, forward_batch=forward_batch ) @@ -878,8 +670,15 @@ index 02ef4e2440..fd5a43cce8 100644 + query = query.repeat_interleave(32 // query.shape[1], dim=1) q_fp8, q_scale = act_quant(query, self.block_size, self.scale_fmt) with torch.cuda.stream(self.alt_stream): - self._store_index_k_cache( -@@ -1092,6 +1118,9 @@ class Indexer(MultiPlatformOp): + k_fp8, k_scale = act_quant(key, self.block_size, self.scale_fmt) + current_stream.wait_stream(self.alt_stream) ++ if weights.shape[1] < q_scale.shape[1]: ++ assert q_scale.shape[1] % weights.shape[1] == 0 ++ weights = weights.repeat_interleave( ++ q_scale.shape[1] // weights.shape[1], dim=1 ++ ) + weights = weights.unsqueeze(-1) * q_scale * self.softmax_scale + else: query, key = self._get_q_k_bf16( q_lora, x, positions, enable_dual_stream, forward_batch=forward_batch ) @@ -889,11 +688,539 @@ index 02ef4e2440..fd5a43cce8 100644 if enable_dual_stream: current_stream = torch.cuda.current_stream() +diff --git a/python/sglang/srt/layers/attention/nsa/utils.py b/python/sglang/srt/layers/attention/nsa/utils.py +index 00ef96f9b..9885fcd0d 100644 +--- a/python/sglang/srt/layers/attention/nsa/utils.py ++++ b/python/sglang/srt/layers/attention/nsa/utils.py +@@ -54,7 +54,12 @@ def can_nsa_prefill_cp_round_robin_split(forward_batch: "ForwardBatch"): + return False + cp_size = get_attention_cp_size() + seq_len = sum(forward_batch.extend_seq_lens_cpu) +- return is_nsa_prefill_cp_round_robin_split() and seq_len > 0 and cp_size > 1 ++ return ( ++ is_nsa_prefill_cp_round_robin_split() ++ and seq_len >= cp_size ++ and seq_len % cp_size == 0 ++ and cp_size > 1 ++ ) + + + def nsa_cp_round_robin_split_data(input_: Union[torch.Tensor, List]): +@@ -91,20 +96,29 @@ def nsa_cp_round_robin_split_data(input_: Union[torch.Tensor, List]): + def cal_padded_tokens(forward_batch: "ForwardBatch"): + # Consistent with the padding calculation logic in ForwardBatch.prepare_mlp_sync_batch, + # calculate the actual token length after padding when attn_tp_size > 1 or in the MAX_LEN padding mode. +- global_num_tokens = forward_batch.global_num_tokens_cpu.copy() ++ if forward_batch.global_num_tokens_cpu is None: ++ # PD prefill CP+PP path can bypass MLP-sync metadata. Reconstruct a single-rank ++ # global token view from the local token count for NSA padding logic. ++ local_tokens = forward_batch.num_token_non_padded_cpu ++ if local_tokens is None: ++ local_tokens = len(forward_batch.input_ids) ++ global_num_tokens = [local_tokens * get_attention_cp_size()] ++ else: ++ global_num_tokens = forward_batch.global_num_tokens_cpu.copy() + sync_group_size = len(global_num_tokens) + attn_cp_size = get_attention_cp_size() + for i in range(sync_group_size): + global_num_tokens[i] = ceil_align(global_num_tokens[i], attn_cp_size) +- dp_padding_mode = DpPaddingMode.get_dp_padding_mode( +- forward_batch.is_extend_in_batch, global_num_tokens +- ) +- if dp_padding_mode.is_max_len(): +- tokens = max(global_num_tokens) +- elif len(global_num_tokens) > 1: +- tokens = global_num_tokens[get_attention_dp_rank()] +- else: ++ if len(global_num_tokens) == 1: + tokens = global_num_tokens[0] ++ else: ++ dp_padding_mode = DpPaddingMode.get_dp_padding_mode( ++ forward_batch.is_extend_in_batch, global_num_tokens ++ ) ++ if dp_padding_mode.is_max_len(): ++ tokens = max(global_num_tokens) ++ else: ++ tokens = global_num_tokens[get_attention_dp_rank()] + if can_nsa_prefill_cp_round_robin_split(forward_batch): + tokens = ceil_div(tokens, attn_cp_size) + return tokens +@@ -152,10 +166,9 @@ class NSAContextParallelMetadata: + + def can_cp_split(seq_len: int, cp_size: int, use_nsa: bool, forward_batch): + if is_nsa_prefill_cp_round_robin_split(): ++ if seq_len < cp_size or seq_len % cp_size != 0: ++ return False + cur_cp_seq_len = seq_len // cp_size +- assert ( +- seq_len % cp_size == 0 +- ), f"seq_len {seq_len} is not divisible by cp_size {cp_size} when nsa_prefill_cp_mode is round-robin-split" + else: + # TODO current just support prefill batch=1 and len(input_ids) > self.cp_size * 2 + # Note: (self.cp_size * 2) To achieve load balancing for seq computation, +@@ -175,10 +188,6 @@ def can_cp_split(seq_len: int, cp_size: int, use_nsa: bool, forward_batch): + + def cp_split_and_rebuild_data(forward_batch, input_: torch.Tensor): + if is_nsa_prefill_cp_round_robin_split(): +- cp_size = get_attention_cp_size() +- assert ( +- input_.shape[0] % cp_size == 0 +- ), f"Expect input shape 0 can divided by cp size, but got input shape {input_.shape}, cp size {cp_size}" + return nsa_cp_round_robin_split_data(input_) + + input_list = list( +@@ -192,11 +201,6 @@ def cp_split_and_rebuild_data(forward_batch, input_: torch.Tensor): + + def cp_split_and_rebuild_position(forward_batch, positions: torch.Tensor): + if is_nsa_prefill_cp_round_robin_split(): +- cp_size = get_attention_cp_size() +- assert positions.shape[0] % cp_size == 0, ( +- f"Expect positions shape 0 can divided by cp size, but got positions shape {positions.shape}, " +- f"cp size {cp_size}" +- ) + return nsa_cp_round_robin_split_data(positions) + + position_id_list = list( +diff --git a/python/sglang/srt/layers/communicator_nsa_cp.py b/python/sglang/srt/layers/communicator_nsa_cp.py +index 296d14568..f4606a769 100644 +--- a/python/sglang/srt/layers/communicator_nsa_cp.py ++++ b/python/sglang/srt/layers/communicator_nsa_cp.py +@@ -34,7 +34,6 @@ from sglang.srt.layers.communicator import ( + from sglang.srt.layers.dp_attention import ( + attn_cp_all_gather_into_tensor, + attn_cp_reduce_scatter_tensor, +- get_local_dp_buffer, + ) + from sglang.srt.model_executor.forward_batch_info import ForwardBatch + +@@ -153,9 +152,23 @@ class NSACPCommunicateWithAllReduceAndLayerNormFn( + # for decode: attn tp full -> full + if nsa_use_prefill_cp(forward_batch): + assert context.attn_dp_size == 1 +- hidden_states, local_hidden_states = ( +- get_local_dp_buffer(), +- hidden_states, ++ local_hidden_states = hidden_states ++ total_tokens = ( ++ sum(forward_batch.extend_seq_lens_cpu) ++ if forward_batch.extend_seq_lens_cpu is not None ++ else local_hidden_states.shape[0] * context.attn_cp_size ++ ) ++ max_len = (total_tokens + context.attn_cp_size - 1) // context.attn_cp_size ++ if local_hidden_states.shape[0] < max_len: ++ pad = local_hidden_states.new_zeros( ++ ( ++ max_len - local_hidden_states.shape[0], ++ local_hidden_states.shape[1], ++ ) ++ ) ++ local_hidden_states = torch.cat([local_hidden_states, pad], dim=0) ++ hidden_states = local_hidden_states.new_empty( ++ (max_len * context.attn_cp_size, local_hidden_states.shape[1]) + ) + attn_cp_all_gather_into_tensor( + hidden_states, +diff --git a/python/sglang/srt/layers/dp_attention.py b/python/sglang/srt/layers/dp_attention.py +index 5bf5aa0c8..e52f39fd8 100644 +--- a/python/sglang/srt/layers/dp_attention.py ++++ b/python/sglang/srt/layers/dp_attention.py +@@ -90,11 +90,11 @@ class _DpGatheredBufferWrapper: + _hidden_size: int + _dtype: torch.dtype + _device: torch.device +- _global_dp_buffer_len: int +- _local_dp_buffer_len: int +- _dp_max_padding: bool +- _global_num_tokens: Optional[List[int]] +- _is_extend_in_batch: bool ++ _global_dp_buffer_len: int = 0 ++ _local_dp_buffer_len: int = 0 ++ _dp_max_padding: bool = False ++ _global_num_tokens: Optional[List[int]] = None ++ _is_extend_in_batch: bool = False + + @classmethod + def set_metadata(cls, hidden_size: int, dtype: torch.dtype, device: torch.device): +diff --git a/python/sglang/srt/layers/layernorm.py b/python/sglang/srt/layers/layernorm.py +index 39832c45a..c3d3c6b54 100644 +--- a/python/sglang/srt/layers/layernorm.py ++++ b/python/sglang/srt/layers/layernorm.py +@@ -93,20 +93,17 @@ class RMSNorm(MultiPlatformOp): + eps: float = 1e-6, + var_hidden_size: Optional[int] = None, + cast_x_before_out_mul: bool = False, +- fp32_residual: bool = False, ++ fp32_residual: bool = True, + has_weight: bool = True, +- weight_dtype: Optional = None, +- override_orig_dtype: Optional = None, + ) -> None: + super().__init__() + self.has_weight = has_weight + self.cast_x_before_out_mul = cast_x_before_out_mul + self.fp32_residual = fp32_residual +- self.override_orig_dtype = override_orig_dtype + if self.has_weight: +- self.weight = nn.Parameter(torch.ones(hidden_size, dtype=weight_dtype)) ++ self.weight = nn.Parameter(torch.ones(hidden_size)) + else: +- self.weight = torch.ones(hidden_size, dtype=weight_dtype) ++ self.weight = torch.ones(hidden_size) + self.variance_epsilon = eps + self.hidden_size = hidden_size + self.variance_size_override = ( +@@ -219,16 +216,19 @@ class RMSNorm(MultiPlatformOp): + ) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]: + if not x.is_contiguous(): + x = x.contiguous() +- orig_dtype = self.override_orig_dtype or x.dtype ++ orig_dtype = x.dtype ++ ++ if residual is not None and not self.fp32_residual: ++ x = x + residual ++ if post_residual_addition is not None: ++ x = x + post_residual_addition ++ residual = x.clone() + x = x.to(torch.float32) +- if residual is not None: ++ if residual is not None and self.fp32_residual: + x = x + residual.to(torch.float32) + if post_residual_addition is not None: + x = x + post_residual_addition.to(torch.float32) +- if self.fp32_residual: +- residual = x.clone() +- else: +- residual = x.to(orig_dtype) ++ residual = x.to(orig_dtype) + + hidden_size = x.shape[-1] + if hidden_size != self.hidden_size: +@@ -314,7 +314,7 @@ class RMSNorm(MultiPlatformOp): + + if get_tensor_model_parallel_world_size() > 1: + if post_residual_addition is not None: +- residual = residual + post_residual_addition ++ x = x + post_residual_addition + fused_result = flashinfer_allreduce_residual_rmsnorm( + input_tensor=x, + residual=residual, +diff --git a/python/sglang/srt/layers/logits_processor.py b/python/sglang/srt/layers/logits_processor.py +index aff05bf42..130359232 100644 +--- a/python/sglang/srt/layers/logits_processor.py ++++ b/python/sglang/srt/layers/logits_processor.py +@@ -872,11 +872,6 @@ class LogitsProcessor(nn.Module): + None, # bias + True, # is_vnni + ) +- elif get_global_server_args().rl_on_policy_target is not None: +- # Due to tie-weight, we may not be able to change lm_head's weight dtype +- logits = torch.matmul( +- hidden_states.bfloat16(), lm_head.weight.T.bfloat16() +- ) + else: + logits = torch.matmul( + hidden_states.to(lm_head.weight.dtype), lm_head.weight.T +diff --git a/python/sglang/srt/layers/moe/ep_moe/deepep_bf16_kernels.py b/python/sglang/srt/layers/moe/ep_moe/deepep_bf16_kernels.py +new file mode 100644 +index 000000000..8d3d0f92e +--- /dev/null ++++ b/python/sglang/srt/layers/moe/ep_moe/deepep_bf16_kernels.py +@@ -0,0 +1,146 @@ ++"""Fused Triton kernels for DeepEP BF16 low-latency MoE decode. ++ ++Replaces the naive activation + masking pipeline (5+ CUDA kernels for silu+mul ++and arange+comparison+masked_fill+copy) with a single Triton elementwise kernel, ++while keeping cuBLAS batched GEMM for the matrix multiplies. ++ ++Pipeline: bmm → fused_act_mul_masked (in-place) → bmm(out=hidden) ++ (3 ops total: 2 cuBLAS + 1 Triton, vs original 7-8 separate CUDA kernels) ++""" ++ ++import torch ++import triton ++import triton.language as tl ++ ++ ++@triton.jit ++def _silu_mul_masked_kernel( ++ gate_up_ptr, ++ masked_m_ptr, ++ M, ++ N, ++ stride_ge, ++ stride_gm, ++ stride_gn, ++ BLOCK: tl.constexpr, ++): ++ """Fused SiLU(gate) * up with per-expert masking, written in-place. ++ ++ gate_up: [E, M, 2*N] — first N cols are gate, last N cols are up. ++ Writes SiLU(gate)*up to gate_up[:,:,:N] in-place. ++ Rows m >= masked_m[e] are zeroed. ++ """ ++ expert_id = tl.program_id(1) ++ pid = tl.program_id(0) ++ ++ expert_valid_m = tl.load(masked_m_ptr + expert_id) ++ ++ offs = pid * BLOCK + tl.arange(0, BLOCK) ++ total = M * N ++ mask = offs < total ++ ++ m = offs // N ++ n = offs % N ++ ++ gate_base = gate_up_ptr + expert_id * stride_ge ++ ++ gate_val = tl.load(gate_base + m * stride_gm + n * stride_gn, mask=mask, other=0.0) ++ up_val = tl.load( ++ gate_base + m * stride_gm + (n + N) * stride_gn, mask=mask, other=0.0 ++ ) ++ ++ gate_f32 = gate_val.to(tl.float32) ++ result = (gate_f32 * tl.sigmoid(gate_f32)) * up_val.to(tl.float32) ++ ++ # Zero invalid rows ++ valid = m < expert_valid_m ++ result = tl.where(valid, result, 0.0) ++ ++ tl.store( ++ gate_base + m * stride_gm + n * stride_gn, ++ result.to(gate_up_ptr.dtype.element_ty), ++ mask=mask, ++ ) ++ ++ ++@triton.jit ++def _gelu_mul_masked_kernel( ++ gate_up_ptr, ++ masked_m_ptr, ++ M, ++ N, ++ stride_ge, ++ stride_gm, ++ stride_gn, ++ BLOCK: tl.constexpr, ++): ++ """Fused GELU(gate) * up with per-expert masking, written in-place.""" ++ expert_id = tl.program_id(1) ++ pid = tl.program_id(0) ++ ++ expert_valid_m = tl.load(masked_m_ptr + expert_id) ++ ++ offs = pid * BLOCK + tl.arange(0, BLOCK) ++ total = M * N ++ mask = offs < total ++ ++ m = offs // N ++ n = offs % N ++ ++ gate_base = gate_up_ptr + expert_id * stride_ge ++ ++ gate_val = tl.load(gate_base + m * stride_gm + n * stride_gn, mask=mask, other=0.0) ++ up_val = tl.load( ++ gate_base + m * stride_gm + (n + N) * stride_gn, mask=mask, other=0.0 ++ ) ++ ++ g = gate_val.to(tl.float32) ++ kAlpha = 0.7978845608028654 ++ gate_act = 0.5 * g * (1.0 + tl.math.tanh(kAlpha * (g + 0.044715 * g * g * g))) ++ result = gate_act * up_val.to(tl.float32) ++ ++ valid = m < expert_valid_m ++ result = tl.where(valid, result, 0.0) ++ ++ tl.store( ++ gate_base + m * stride_gm + n * stride_gn, ++ result.to(gate_up_ptr.dtype.element_ty), ++ mask=mask, ++ ) ++ ++ ++def fused_act_mul_masked_inplace( ++ gate_up: torch.Tensor, ++ intermediate_size: int, ++ masked_m: torch.Tensor, ++ use_gelu: bool = False, ++) -> None: ++ """Fused activation + multiply + masking, written in-place to gate_up[:,:,:I]. ++ ++ After this call, gate_up[:, :, :intermediate_size] contains the masked ++ activated intermediate, suitable for the down projection GEMM. ++ ++ Args: ++ gate_up: [E, M, 2*I] output of bmm(tokens, w13.T), modified in-place ++ intermediate_size: I ++ masked_m: [E] per-expert valid token count ++ use_gelu: use GELU instead of SiLU ++ """ ++ E, M, _ = gate_up.shape ++ N = intermediate_size ++ ++ total = M * N ++ BLOCK = 1024 ++ grid = (triton.cdiv(total, BLOCK), E) ++ ++ kernel = _gelu_mul_masked_kernel if use_gelu else _silu_mul_masked_kernel ++ kernel[grid]( ++ gate_up, ++ masked_m, ++ M, ++ N, ++ gate_up.stride(0), ++ gate_up.stride(1), ++ gate_up.stride(2), ++ BLOCK=BLOCK, ++ ) +diff --git a/python/sglang/srt/layers/moe/ep_moe/layer.py b/python/sglang/srt/layers/moe/ep_moe/layer.py +index ebcc696ec..3b527021a 100644 +--- a/python/sglang/srt/layers/moe/ep_moe/layer.py ++++ b/python/sglang/srt/layers/moe/ep_moe/layer.py +@@ -132,11 +132,12 @@ class DeepEPMoE(FusedMoE): + and not _is_npu + and not ( + get_moe_runner_backend().is_flashinfer_cutedsl() ++ and self.quant_config is not None + and self.quant_config.get_name() == "modelopt_fp4" + ) ++ and (self.use_fp8_w8a8 or self.use_w4afp8) + ): +- # NPU supports low_latency deepep without deepgemm +- # FP4 quantization with flashinfer_cutedsl also supports low_latency deepep without deepgemm ++ # BF16 models don't need deep_gemm; they use per-expert torch.mm + assert ( + deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM + ), f"DeepEP {self.deepep_mode} mode requires deep_gemm" +@@ -154,6 +155,10 @@ class DeepEPMoE(FusedMoE): + # the last one is invalid rank_id + self.expert_mask[:-1] = 1 + ++ # Set bf16_weights flag on dispatcher so dispatch skips FP8 quantization ++ if not self.use_fp8_w8a8 and not self.use_w4afp8: ++ self.dispatcher.set_quant_config({"bf16_weights": True}) ++ + def forward( + self, + hidden_states: torch.Tensor, +@@ -228,6 +233,8 @@ class DeepEPMoE(FusedMoE): + elif DispatchOutputChecker.format_is_deepep_normal(dispatch_output): + if self.use_w4afp8: + output = self.forward_cutlass_w4afp8(dispatch_output) ++ elif not self.use_fp8_w8a8: ++ output = self.forward_bf16_normal(dispatch_output) + else: + assert False, "forward_deepgemm_contiguous is deprecated" + elif DispatchOutputChecker.format_is_deepep_ll(dispatch_output): +@@ -238,6 +245,8 @@ class DeepEPMoE(FusedMoE): + output = self.forward_flashinfer_cutedsl(dispatch_output) + elif self.use_w4afp8: + output = self.forward_cutlass_w4afp8_masked(dispatch_output) ++ elif not self.use_fp8_w8a8: ++ output = self.forward_bf16_ll(dispatch_output) + else: + assert False, "forward_deepgemm_masked is deprecated" + +@@ -341,6 +350,71 @@ class DeepEPMoE(FusedMoE): + dispatch_output=dispatch_output, + ) + ++ def forward_bf16_normal( ++ self, ++ dispatch_output: DeepEPNormalDispatchOutput, ++ ) -> torch.Tensor: ++ from sglang.srt.layers.moe.fused_moe_triton.fused_moe import fused_experts ++ ++ hidden_states = dispatch_output.hidden_states ++ topk_ids = dispatch_output.topk_ids ++ topk_weights = dispatch_output.topk_weights ++ ++ if hidden_states.shape[0] == 0: ++ return hidden_states ++ ++ # topk_ids uses local expert IDs (0..num_local_experts-1), -1 for remote. ++ # fused_experts handles -1 via moe_align_block_size filtering. ++ return fused_experts( ++ hidden_states=hidden_states, ++ w1=self.w13_weight, ++ w2=self.w2_weight, ++ topk_output=(topk_weights, topk_ids, None), ++ moe_runner_config=self.moe_runner_config, ++ ) ++ ++ def forward_bf16_ll( ++ self, ++ dispatch_output: DeepEPLLDispatchOutput, ++ ) -> torch.Tensor: ++ from sglang.srt.layers.moe.ep_moe.deepep_bf16_kernels import ( ++ fused_act_mul_masked_inplace, ++ ) ++ ++ hidden_states = dispatch_output.hidden_states ++ masked_m = dispatch_output.masked_m ++ expected_m = dispatch_output.expected_m ++ ++ _, max_tokens, _ = hidden_states.shape ++ if masked_m.numel() == 0 or max_tokens == 0: ++ return hidden_states ++ ++ expected_m = min(expected_m, max_tokens) ++ if expected_m <= 0: ++ return hidden_states ++ ++ tokens = hidden_states[:, :expected_m, :] ++ ++ # 1. Gate+Up GEMM (cuBLAS batched GEMM) ++ gate_up = torch.bmm(tokens, self.w13_weight.transpose(1, 2)) ++ ++ # 2. Fused SiLU(gate)*up + masking in-place (1 Triton kernel replaces 6 ops) ++ fused_act_mul_masked_inplace( ++ gate_up, ++ self.intermediate_size_per_partition, ++ masked_m, ++ use_gelu=(self.moe_runner_config.activation == "gelu"), ++ ) ++ ++ # 3. Down GEMM into hidden_states (cuBLAS, non-contiguous input is OK) ++ torch.bmm( ++ gate_up[:, :, : self.intermediate_size_per_partition], ++ self.w2_weight.transpose(1, 2), ++ out=hidden_states[:, :expected_m, :], ++ ) ++ ++ return hidden_states ++ + def forward_npu( + self, + dispatch_output: Union[DeepEPNormalDispatchOutput, DeepEPLLDispatchOutput], +diff --git a/python/sglang/srt/layers/moe/fused_moe_triton/fused_moe.py b/python/sglang/srt/layers/moe/fused_moe_triton/fused_moe.py +index ebdbb42c6..714ffbe0e 100644 +--- a/python/sglang/srt/layers/moe/fused_moe_triton/fused_moe.py ++++ b/python/sglang/srt/layers/moe/fused_moe_triton/fused_moe.py +@@ -14,6 +14,7 @@ import torch.nn.functional as F + import triton.language as tl + + from sglang.srt.layers.moe.moe_runner import MoeRunnerConfig ++from sglang.srt.server_args import get_global_server_args + from sglang.srt.utils import ( + cpu_has_amx_support, + get_bool_env_var, +@@ -617,7 +618,10 @@ def fused_experts_impl( + ).squeeze(dim=1) + else: + # According to micro benchmark results, torch.compile can get better performance for small token. +- if tokens_in_chunk <= 32: ++ if ( ++ not get_global_server_args().enable_deterministic_inference ++ and tokens_in_chunk <= 32 ++ ): + moe_sum_reduce_torch_compile( + intermediate_cache3.view(*intermediate_cache3.shape), + out_hidden_states[begin_chunk_idx:end_chunk_idx], diff --git a/python/sglang/srt/layers/moe/fused_moe_triton/layer.py b/python/sglang/srt/layers/moe/fused_moe_triton/layer.py -index 72483f4ea6..2e1148d189 100644 +index de8a07ab3..5c9f4813a 100644 --- a/python/sglang/srt/layers/moe/fused_moe_triton/layer.py +++ b/python/sglang/srt/layers/moe/fused_moe_triton/layer.py -@@ -702,6 +702,7 @@ class FusedMoE(torch.nn.Module): +@@ -697,6 +697,7 @@ class FusedMoE(torch.nn.Module): "CompressedTensorsWNA16TritonMoE", ] ) @@ -901,7 +1228,7 @@ index 72483f4ea6..2e1148d189 100644 else loaded_weight ) -@@ -921,6 +922,7 @@ class FusedMoE(torch.nn.Module): +@@ -916,6 +917,7 @@ class FusedMoE(torch.nn.Module): "CompressedTensorsWNA16TritonMoE", ] ) @@ -910,7 +1237,7 @@ index 72483f4ea6..2e1148d189 100644 ) diff --git a/python/sglang/srt/layers/moe/routed_experts_capturer.py b/python/sglang/srt/layers/moe/routed_experts_capturer.py -index 00bd687555..12d5577af2 100644 +index 00bd68755..12d5577af 100644 --- a/python/sglang/srt/layers/moe/routed_experts_capturer.py +++ b/python/sglang/srt/layers/moe/routed_experts_capturer.py @@ -8,10 +8,15 @@ import torch @@ -970,11 +1297,79 @@ index 00bd687555..12d5577af2 100644 self.device_cache.capture_fwd_routed_experts(layer_id, topk_ids) def get_routed_experts( +diff --git a/python/sglang/srt/layers/moe/token_dispatcher/deepep.py b/python/sglang/srt/layers/moe/token_dispatcher/deepep.py +index 8539639d5..e7f5d1565 100644 +--- a/python/sglang/srt/layers/moe/token_dispatcher/deepep.py ++++ b/python/sglang/srt/layers/moe/token_dispatcher/deepep.py +@@ -388,6 +388,7 @@ class _DeepEPDispatcherImplNormal(_DeepEPDispatcherImplBase): + deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM + and not get_moe_runner_backend().is_cutlass() + and not envs.SGLANG_DEEPEP_BF16_DISPATCH.get() ++ and not self.quant_config.get("bf16_weights", False) + ): + # TODO hard code 128 block quant,use fp8 communication + hidden_states = sglang_per_token_group_quant_fp8( +@@ -466,7 +467,12 @@ class _DeepEPDispatcherImplNormal(_DeepEPDispatcherImplBase): + previous_event=previous_event, + async_finish=self.async_finish, + allocate_on_comm_stream=(previous_event is not None) and self.async_finish, +- expert_alignment=128 if deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM else 1, ++ expert_alignment=( ++ 128 ++ if deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM ++ and not self.quant_config.get("bf16_weights", False) ++ else 1 ++ ), + config=DeepEPConfig.get_instance().normal_dispatch_config, + ) + get_global_expert_distribution_recorder().on_deepep_dispatch_normal( +@@ -491,7 +497,12 @@ class _DeepEPDispatcherImplNormal(_DeepEPDispatcherImplBase): + topk_weights: torch.Tensor, + ): + +- if deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM or _use_aiter or _is_npu: ++ if ( ++ deep_gemm_wrapper.ENABLE_JIT_DEEPGEMM ++ or _use_aiter ++ or _is_npu ++ or self.quant_config.get("bf16_weights", False) ++ ): + output = hidden_states + else: + raise NotImplementedError() # triton runner was supported but it's temporarily disabled +@@ -551,10 +562,12 @@ class _DeepEPDispatcherImplLowLatency(_DeepEPDispatcherImplBase): + buffer = self._get_buffer() + topk_weights, topk_ids = topk_output.topk_weights, topk_output.topk_ids + topk_ids = topk_ids.to(torch.int64) +- expected_m = ( +- hidden_states.shape[0] * buffer.group_size * topk_ids.shape[1] +- + self.num_experts +- ) // self.num_experts ++ # Use a correctness-preserving upper bound for per-expert token count. ++ # In the worst case, every rank routes all local tokens to the same expert. ++ expected_m = min( ++ hidden_states.shape[0] * buffer.group_size, ++ self.num_max_dispatch_tokens_per_rank * buffer.group_size, ++ ) + hidden_states, masked_m, event, hook = self._dispatch_core( + hidden_states, + topk_ids, +@@ -609,7 +622,9 @@ class _DeepEPDispatcherImplLowLatency(_DeepEPDispatcherImplBase): + input_global_scale = self.quant_config.get("input_global_scale", None) + if input_global_scale is not None: + use_nvfp4 = True +- elif not envs.SGLANG_DEEPEP_BF16_DISPATCH.get(): ++ elif not envs.SGLANG_DEEPEP_BF16_DISPATCH.get() and not self.quant_config.get( ++ "bf16_weights", False ++ ): + use_fp8 = True + + buffer = self._get_buffer() diff --git a/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py b/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py -index a13c53af4d..1d80d06b13 100644 +index 4cbfed6f9..88b452744 100644 --- a/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py +++ b/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py -@@ -500,7 +500,7 @@ class CompressedTensorsConfig(QuantizationConfig): +@@ -499,7 +499,7 @@ class CompressedTensorsConfig(QuantizationConfig): ) is_static = not weight_quant.dynamic @@ -983,7 +1378,7 @@ index a13c53af4d..1d80d06b13 100644 def _is_mxint4a16(self, weight_quant: BaseModel, input_quant: BaseModel) -> bool: input_quant_none = input_quant is None -@@ -969,6 +969,9 @@ class CompressedTensorsFusedMoEMethod(FusedMoEMethodBase): +@@ -968,6 +968,9 @@ class CompressedTensorsFusedMoEMethod(FusedMoEMethodBase): def process_weights_after_loading(self, layer: torch.nn.Module) -> None: layer.scheme.process_weights_after_loading(layer) @@ -994,7 +1389,7 @@ index a13c53af4d..1d80d06b13 100644 self, layer: torch.nn.Module, diff --git a/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py b/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py -index 7a8fb65421..f1c85899cd 100644 +index 6264f36d0..f0310e305 100644 --- a/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py +++ b/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py @@ -17,7 +17,10 @@ from sglang.srt.layers.quantization.compressed_tensors.schemes import ( @@ -1060,18 +1455,25 @@ index 7a8fb65421..f1c85899cd 100644 w13_g_idx = torch.nn.Parameter( torch.empty( num_experts, -@@ -231,6 +260,10 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): - layer._original_shapes["w2_weight_scale"] = tuple(w2_scale.shape) - layer._original_shapes["w13_weight_scale"] = tuple(w13_scale.shape) +@@ -225,11 +254,14 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): + # Force record: these are the target GPTQ shapes for rollback. + layer._original_shapes["w13_weight_packed"] = tuple(w13_weight.shape) +- layer._original_shapes["w2_weight_packed"] = tuple(w2_weight.shape) ++ layer._original_shapes["w13_weight_scale"] = tuple(w13_scale.shape) + if not self.sym: + layer._original_shapes["w13_weight_zero_point"] = w13_qzeros.shape + +- # Also record the shapes of the scales. ++ layer._original_shapes["w2_weight_packed"] = tuple(w2_weight.shape) + layer._original_shapes["w2_weight_scale"] = tuple(w2_scale.shape) +- layer._original_shapes["w13_weight_scale"] = tuple(w13_scale.shape) ++ if not self.sym: + layer._original_shapes["w2_weight_zero_point"] = tuple(w2_qzeros.shape) -+ + def process_weights_after_loading(self, layer: torch.nn.Module) -> None: - # Skip if the layer is already converted to Marlin format to prevent double-packing. -@@ -334,6 +367,24 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): +@@ -334,6 +366,24 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): ) replace_tensor("w2_weight_scale", marlin_w2_scales) @@ -1096,7 +1498,7 @@ index 7a8fb65421..f1c85899cd 100644 layer.is_marlin_converted = True def restore_weights_before_loading(self, layer: torch.nn.Module): -@@ -399,6 +450,8 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): +@@ -399,6 +449,8 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): g_idx2=layer.w2_weight_g_idx, sort_indices1=layer.w13_g_idx_sort_indices, sort_indices2=layer.w2_g_idx_sort_indices, @@ -1105,17 +1507,64 @@ index 7a8fb65421..f1c85899cd 100644 num_bits=self.num_bits, is_k_full=self.is_k_full, routed_scaling_factor=self.moe_runner_config.routed_scaling_factor, +diff --git a/python/sglang/srt/layers/rotary_embedding.py b/python/sglang/srt/layers/rotary_embedding.py +index ae0614635..32171c9c1 100644 +--- a/python/sglang/srt/layers/rotary_embedding.py ++++ b/python/sglang/srt/layers/rotary_embedding.py +@@ -150,9 +150,7 @@ class RotaryEmbedding(MultiPlatformOp): + + if get_global_server_args().rl_on_policy_target is not None: + self._forward_method = self.forward_native +- self._apply_rotary_emb_wrapped = torch.compile(dynamic=True)( +- self._apply_rotary_emb_wrapped +- ) ++ + self.position_cos, self.position_sin = None, None + + def _compute_inv_freq(self, base: Union[int, float]) -> torch.Tensor: +@@ -1778,6 +1776,9 @@ class MRotaryEmbedding(RotaryEmbedding): + key: torch.Tensor, + fused_set_kv_buffer_arg: Optional[FusedSetKVBufferArg] = None, + ) -> Tuple[torch.Tensor, torch.Tensor]: ++ assert ( ++ fused_set_kv_buffer_arg is None ++ ), "fused_set_kv_buffer_arg is not supported for npu implementation" + # TODO: remove this when npu_mrope supports QNumHeads * QHeadSize > 4096 + assert ( + fused_set_kv_buffer_arg is None +diff --git a/python/sglang/srt/layers/sampler.py b/python/sglang/srt/layers/sampler.py +index f78d83d79..f1d577453 100644 +--- a/python/sglang/srt/layers/sampler.py ++++ b/python/sglang/srt/layers/sampler.py +@@ -122,14 +122,9 @@ class Sampler(nn.Module): + # In RL on-policy mode, we use log_softmax to compute logprobs to match the trainer. + logprobs_via_logsoftmax_kernel = None + if self.rl_on_policy_target is not None: +- # TODO: use more inplace ops to save memory +- logits_div_temperature = ( +- logits.bfloat16().div(sampling_info.temperatures).bfloat16() +- ) + logprobs_via_logsoftmax_kernel = torch.log_softmax( +- logits_div_temperature, dim=-1 ++ logits / sampling_info.temperatures, dim=-1 + ) +- del logits_div_temperature + + if self.use_ascend_backend: + # Ascend backend: sample from logits directly. diff --git a/python/sglang/srt/managers/io_struct.py b/python/sglang/srt/managers/io_struct.py -index bd97965345..e6a147c1b4 100644 +index ff1774567..42d27a82a 100644 --- a/python/sglang/srt/managers/io_struct.py +++ b/python/sglang/srt/managers/io_struct.py -@@ -1449,6 +1449,18 @@ class ResumeMemoryOccupationReqOutput(BaseReq): - pass +@@ -1403,6 +1403,20 @@ class UpdateWeightsFromIPCReqOutput(BaseReq): + message: str +@dataclass +class PostProcessWeightsReqInput(BaseReq): ++ # Whether to restore weights before loading new weights + restore_weights_before_load: bool = False ++ # Whether to enable quantization post-processing + post_process_quantization: bool = False + + @@ -1126,62 +1575,24 @@ index bd97965345..e6a147c1b4 100644 + + @dataclass - class CheckWeightsReqInput(BaseReq): - action: str -@@ -1753,6 +1765,8 @@ class GetLoadReqOutput(BaseReq): + class InitWeightsSendGroupForRemoteInstanceReqOutput(BaseReq): + success: bool +@@ -1802,6 +1816,10 @@ class GetLoadReqOutput(BaseReq): num_waiting_reqs: int num_tokens: int ts_tic: float ++ # Per-queue breakdown: list of {name, num_reqs, num_tokens, reqs: [{rid, seqlen, input_len, output_len}]} + queue_details: Optional[List[Dict[str, Any]]] = None ++ # Running batch info + running_details: Optional[Dict[str, Any]] = None @dataclass -diff --git a/python/sglang/srt/managers/multi_tokenizer_mixin.py b/python/sglang/srt/managers/multi_tokenizer_mixin.py -index e0a1669fb3..fbbb6bb12b 100644 ---- a/python/sglang/srt/managers/multi_tokenizer_mixin.py -+++ b/python/sglang/srt/managers/multi_tokenizer_mixin.py -@@ -496,6 +496,35 @@ def monkey_patch_uvicorn_multiprocessing(timeout: float = 10): - "uvicorn.supervisors.multiprocess not found, skipping monkey patch" - ) - -+ try: -+ import uvicorn._subprocess as uvicorn_subprocess -+ import uvicorn.supervisors.multiprocess as uvicorn_multiprocess -+ -+ def _safe_get_stdin_fileno(): -+ try: -+ fileno = sys.stdin.fileno() -+ dup_fd = os.dup(fileno) -+ os.close(dup_fd) -+ return fileno -+ except (AttributeError, OSError): -+ return None -+ -+ def _patched_get_subprocess(config, target, sockets): -+ kwargs = { -+ "config": config, -+ "target": target, -+ "sockets": sockets, -+ "stdin_fileno": _safe_get_stdin_fileno(), -+ } -+ return uvicorn_subprocess.spawn.Process( -+ target=uvicorn_subprocess.subprocess_started, kwargs=kwargs -+ ) -+ -+ uvicorn_subprocess.get_subprocess = _patched_get_subprocess -+ uvicorn_multiprocess.get_subprocess = _patched_get_subprocess -+ except Exception: -+ pass -+ - - class SenderWrapper: - def __init__(self, port_args: PortArgs, send_to_scheduler: zmq.Socket): diff --git a/python/sglang/srt/managers/schedule_batch.py b/python/sglang/srt/managers/schedule_batch.py -index 0b26be6c6d..2ea1042cf9 100644 +index c07995798..dd8ca7167 100644 --- a/python/sglang/srt/managers/schedule_batch.py +++ b/python/sglang/srt/managers/schedule_batch.py -@@ -1972,7 +1972,10 @@ class ScheduleBatch(ScheduleBatchDisaggregationDecodeMixin): +@@ -1869,7 +1869,10 @@ class ScheduleBatch(ScheduleBatchDisaggregationDecodeMixin): while first_iter or ( not self.check_decode_mem(selected_indices=sorted_indices) ): @@ -1194,18 +1605,18 @@ index 0b26be6c6d..2ea1042cf9 100644 break diff --git a/python/sglang/srt/managers/scheduler.py b/python/sglang/srt/managers/scheduler.py -index 67af2d0de9..122ddb3874 100644 +index a9ff0ac94..ba0a75ee7 100644 --- a/python/sglang/srt/managers/scheduler.py +++ b/python/sglang/srt/managers/scheduler.py -@@ -120,6 +120,7 @@ from sglang.srt.managers.io_struct import ( - LoadLoRAAdapterReqOutput, +@@ -114,6 +114,7 @@ from sglang.srt.managers.io_struct import ( OpenSessionReqInput, + OpenSessionReqOutput, PauseGenerationReqInput, + PostProcessWeightsReqInput, ProfileReq, ReleaseMemoryOccupationReqInput, ResumeMemoryOccupationReqInput, -@@ -1232,6 +1233,7 @@ class Scheduler( +@@ -1063,6 +1064,7 @@ class Scheduler( ), (UpdateWeightsFromTensorReqInput, self.update_weights_from_tensor), (UpdateWeightsFromIPCReqInput, self.update_weights_from_ipc), @@ -1213,34 +1624,284 @@ index 67af2d0de9..122ddb3874 100644 (GetWeightsByNameReqInput, self.get_weights_by_name), (ReleaseMemoryOccupationReqInput, self.release_memory_occupation), (ResumeMemoryOccupationReqInput, self.resume_memory_occupation), +@@ -1304,7 +1306,6 @@ class Scheduler( + self.tp_cpu_group, + src=self.tp_group.ranks[0], + ) +- + # Process MM requests under EPD-disaggregation mode + if ( + self.pp_rank == 0 +diff --git a/python/sglang/srt/managers/scheduler_metrics_mixin.py b/python/sglang/srt/managers/scheduler_metrics_mixin.py +index 30b2732b9..68090b161 100644 +--- a/python/sglang/srt/managers/scheduler_metrics_mixin.py ++++ b/python/sglang/srt/managers/scheduler_metrics_mixin.py +@@ -609,12 +609,54 @@ class SchedulerMetricsMixin: + num_tokens += sum(req.seqlen for queue in waiting_queues for req in queue) + num_waiting_reqs = sum(len(queue) for queue in waiting_queues) + ++ # Collect per-queue details ++ queue_names = ["waiting_queue"] ++ if self.disaggregation_mode == DisaggregationMode.PREFILL: ++ queue_names.append("bootstrap_queue") ++ elif self.disaggregation_mode == DisaggregationMode.DECODE: ++ queue_names.append("prealloc_queue") ++ queue_names.append("transfer_queue") ++ queue_names.append("retracted_queue") ++ ++ queue_details = [] ++ for name, queue in zip(queue_names, waiting_queues): ++ reqs_info = [] ++ for req in queue: ++ reqs_info.append( ++ { ++ "seqlen": req.seqlen, ++ } ++ ) ++ queue_details.append( ++ { ++ "name": name, ++ "num_reqs": len(queue), ++ "num_tokens": sum(r["seqlen"] for r in reqs_info), ++ "reqs": reqs_info, ++ } ++ ) ++ ++ # Collect running batch details ++ running_reqs_info = [] ++ for req in self.running_batch.reqs: ++ running_reqs_info.append( ++ { ++ "seqlen": req.seqlen, ++ } ++ ) ++ running_details = { ++ "num_reqs": len(self.running_batch.reqs), ++ "reqs": running_reqs_info, ++ } ++ + return GetLoadReqOutput( + dp_rank=self.dp_rank, + num_reqs=len(self.running_batch.reqs) + num_waiting_reqs, + num_waiting_reqs=num_waiting_reqs, + num_tokens=num_tokens, + ts_tic=time.perf_counter(), ++ queue_details=queue_details, ++ running_details=running_details, + ) + + def get_loads(self: Scheduler, req: GetLoadsReqInput = None) -> GetLoadsReqOutput: diff --git a/python/sglang/srt/managers/scheduler_output_processor_mixin.py b/python/sglang/srt/managers/scheduler_output_processor_mixin.py -index 496cd96656..cf2d43015a 100644 +index 482bc6ca6..857cfa6a3 100644 --- a/python/sglang/srt/managers/scheduler_output_processor_mixin.py +++ b/python/sglang/srt/managers/scheduler_output_processor_mixin.py -@@ -1154,7 +1154,7 @@ class SchedulerOutputProcessorMixin: - dp_ranks = [self.dp_rank] * len(rids) if rids else None +@@ -1134,7 +1134,7 @@ class SchedulerOutputProcessorMixin: + req.log_time_stats() # Send to detokenizer - if reqs or is_idle_batch: + if rids or is_idle_batch: + if self.model_config.is_multimodal_gen: + return self.send_to_detokenizer.send_output( - BatchTokenIDOutput( - rids=rids, -diff --git a/python/sglang/srt/managers/scheduler_profiler_mixin.py b/python/sglang/srt/managers/scheduler_profiler_mixin.py -index c02ed7997d..61733c4127 100644 ---- a/python/sglang/srt/managers/scheduler_profiler_mixin.py -+++ b/python/sglang/srt/managers/scheduler_profiler_mixin.py -@@ -349,7 +349,7 @@ class SchedulerProfilerMixin: - if self.profiler_prefill_ct > self.profiler_target_prefill_ct: - if self.profile_in_progress: - self.stop_profile(stage=ForwardMode.EXTEND) -- elif batch.forward_mode.is_decode(): -+ elif batch.forward_mode.is_decode() or batch.forward_mode.is_prebuilt(): - if self.profiler_decode_ct == 0: - if self.profile_in_progress: - # force trace flush +diff --git a/python/sglang/srt/managers/scheduler_pp_mixin.py b/python/sglang/srt/managers/scheduler_pp_mixin.py +index 1a65a3c3d..245722295 100644 +--- a/python/sglang/srt/managers/scheduler_pp_mixin.py ++++ b/python/sglang/srt/managers/scheduler_pp_mixin.py +@@ -20,6 +20,7 @@ from sglang.srt.layers.dp_attention import ( + get_attention_dp_rank, + get_attention_dp_size, + is_dp_attention_enabled, ++ set_is_extend_in_batch, + ) + from sglang.srt.managers.schedule_batch import Req, ScheduleBatch + from sglang.srt.managers.utils import ( +@@ -224,7 +225,28 @@ class SchedulerPPMixin: + + self.process_prefill_chunk() + batch = self.get_new_batch_prefill() +- batch = self.maybe_prepare_mlp_sync_batch(batch) ++ need_mlp_sync = self.require_mlp_sync ++ skipped_mlp_sync = False ++ if ( ++ need_mlp_sync ++ and self.disaggregation_mode == DisaggregationMode.PREFILL ++ and self.server_args.enable_nsa_prefill_context_parallel ++ and self.pp_size > 1 ++ ): ++ # In PD prefill CP+PP, MLP sync all_gather can deadlock on idle micro-batches. ++ # Skip MLP sync here because decode-side MLP gather is not involved in this path. ++ need_mlp_sync = False ++ skipped_mlp_sync = True ++ batch = self.maybe_prepare_mlp_sync_batch( ++ batch, need_sync=need_mlp_sync ++ ) ++ if skipped_mlp_sync: ++ # MLP sync was skipped but set_is_extend_in_batch is still needed ++ # by the deepep dispatcher (called in model forward). ++ is_extend = ( ++ batch.forward_mode.is_extend() if batch is not None else False ++ ) ++ set_is_extend_in_batch(is_extend) + self.mbs[mb_id] = batch + self.running_mbs[mb_id] = self.running_batch + +@@ -288,6 +310,11 @@ class SchedulerPPMixin: + next_batch_result, + ) + self.last_mbs[next_mb_id] = self.mbs[next_mb_id] ++ if self.current_scheduler_metrics_enabled: ++ self.log_prefill_stats( ++ prefill_stats=self.mbs[next_mb_id].prefill_stats, ++ can_run_cuda_graph=next_batch_result.can_run_cuda_graph, ++ ) + + if tmbs[next_mb_id] is not None: + self.process_disagg_prefill_inflight_queue(next_release_rids) +@@ -524,6 +551,11 @@ class SchedulerPPMixin: + self.last_rank_comm_queue: deque[Tuple[torch.cuda.Event, PPProxyTensors]] = ( + deque() + ) ++ # PP1 (last rank) stores its own batch outputs locally to avoid the ++ # PP1→PP0→PP1 round-trip that causes a deadlock in disagg prefill. ++ self.last_rank_local_result_queue: deque[Tuple[torch.cuda.Event, PPProxyTensors]] = ( ++ deque() ++ ) + + self.send_req_work = [] + self.send_proxy_work = [] +@@ -859,31 +891,39 @@ class SchedulerPPMixin: + + def _pp_send_pyobj_to_next_stage(self: Scheduler, data, async_send: bool = False): + p2p_work = [] +- if self.attn_tp_rank == 0: +- dp_offset = self.attn_dp_rank * self.attn_tp_size ++ if self.attn_tp_rank == 0 and self.attn_cp_rank == 0: ++ lane_offset = self.attn_dp_rank * self.attn_tp_size + p2p_work = point_to_point_pyobj( + data, +- self.pp_rank * self.tp_size + dp_offset, ++ self.pp_rank * self.tp_size + lane_offset, + self.world_group.cpu_group, +- self.pp_rank * self.tp_size + dp_offset, +- ((self.pp_rank + 1) % self.pp_size) * self.tp_size + dp_offset, ++ self.pp_rank * self.tp_size + lane_offset, ++ ((self.pp_rank + 1) % self.pp_size) * self.tp_size + lane_offset, + async_send=async_send, + ) + return p2p_work + + def _pp_recv_pyobj_from_prev_stage(self: Scheduler): +- if self.attn_tp_rank == 0: +- dp_offset = self.attn_dp_rank * self.attn_tp_size ++ if self.attn_tp_rank == 0 and self.attn_cp_rank == 0: ++ lane_offset = self.attn_dp_rank * self.attn_tp_size + data = point_to_point_pyobj( + [], +- self.pp_rank * self.tp_size + dp_offset, ++ self.pp_rank * self.tp_size + lane_offset, + self.world_group.cpu_group, +- ((self.pp_rank - 1) % self.pp_size) * self.tp_size + dp_offset, +- self.pp_rank * self.tp_size + dp_offset, ++ ((self.pp_rank - 1) % self.pp_size) * self.tp_size + lane_offset, ++ self.pp_rank * self.tp_size + lane_offset, + ) + else: + data = None + ++ if self.attn_cp_size > 1: ++ data = broadcast_pyobj( ++ data, ++ self.attn_cp_group.rank, ++ self.attn_cp_cpu_group, ++ src=self.attn_cp_group.ranks[0], ++ ) ++ + if self.attn_tp_size > 1: + data = broadcast_pyobj( + data, +@@ -1004,8 +1044,13 @@ class SchedulerPPMixin: + pp_outputs_to_send.tensors, + async_send=True, + ) +- # send the outputs from the last round to let the next stage worker run post processing +- if not self.pp_group.is_last_rank: ++ # Store locally so the last rank can process its own batch result ++ # without receiving from the second-to-last rank (avoids deadlock). ++ self.last_rank_local_result_queue.append((q_event, pp_outputs_to_send)) ++ elif self.pp_rank != self.pp_size - 2: ++ # Forward output through the chain: PP0→PP1→...→PP(last-2). ++ # The second-to-last rank does NOT forward to the last rank because ++ # the last rank uses last_rank_local_result_queue instead of receiving. + if pp_outputs: + with torch.profiler.record_function("send_res_dict_to_next_stage"): + send_output_work = self._pp_send_dict_to_next_stage( +@@ -1034,20 +1079,36 @@ class SchedulerPPMixin: + ) + + if mbs[next_mb_id] is not None: +- with torch.profiler.record_function("recv_res_dict_from_prev_stage"): +- next_pp_outputs = None ++ if self.pp_group.is_last_rank: ++ # Last rank: use the locally-stored output instead of receiving ++ # from the second-to-last rank. Receiving would cause a deadlock ++ # because the chain PP_last→PP0→...→PP(last-2)→PP_last requires ++ # PP0 to have pp_outputs ready, which it doesn't on the first batch. + if not mbs[next_mb_id].forward_mode.is_prebuilt(): +- next_pp_outputs = PPProxyTensors( +- self._pp_recv_dict_from_prev_stage() +- ) +- if not mbs[next_mb_id].forward_mode.is_prebuilt(): +- with self.copy_stream_ctx: +- self.copy_stream.wait_stream(self.default_stream) +- batch_result = self._pp_prep_batch_result( +- mbs[next_mb_id], mb_metadata[next_mb_id], next_pp_outputs +- ) +- d2h_event = torch.cuda.Event() +- d2h_event.record(torch.cuda.current_stream()) ++ q_event, next_pp_outputs = self.last_rank_local_result_queue.popleft() ++ with self.copy_stream_ctx: ++ torch.cuda.current_stream().wait_event(q_event) ++ self.copy_stream.wait_stream(self.default_stream) ++ batch_result = self._pp_prep_batch_result( ++ mbs[next_mb_id], mb_metadata[next_mb_id], next_pp_outputs ++ ) ++ d2h_event = torch.cuda.Event() ++ d2h_event.record(torch.cuda.current_stream()) ++ else: ++ with torch.profiler.record_function("recv_res_dict_from_prev_stage"): ++ next_pp_outputs = None ++ if not mbs[next_mb_id].forward_mode.is_prebuilt(): ++ next_pp_outputs = PPProxyTensors( ++ self._pp_recv_dict_from_prev_stage() ++ ) ++ if not mbs[next_mb_id].forward_mode.is_prebuilt(): ++ with self.copy_stream_ctx: ++ self.copy_stream.wait_stream(self.default_stream) ++ batch_result = self._pp_prep_batch_result( ++ mbs[next_mb_id], mb_metadata[next_mb_id], next_pp_outputs ++ ) ++ d2h_event = torch.cuda.Event() ++ d2h_event.record(torch.cuda.current_stream()) + + return next_pp_outputs, batch_result, d2h_event, send_output_work + +@@ -1085,9 +1146,12 @@ class SchedulerPPMixin: + """ + Used by PP, get the required rids with the given poll statuses. + """ ++ gloo_group = self.attn_tp_cpu_group ++ if self.attn_cp_size > 1: ++ gloo_group = self.tp_cpu_group + polls = poll_and_all_reduce( + [req.disagg_kv_sender if is_send else req.kv_receiver for req in req_queue], +- self.attn_tp_cpu_group, ++ gloo_group, + ) + rids: List = [] + for poll_statuses in poll_statuses_group: diff --git a/python/sglang/srt/managers/scheduler_update_weights_mixin.py b/python/sglang/srt/managers/scheduler_update_weights_mixin.py -index abcda67946..a53848b79d 100644 +index 293a84350..244ea4eb1 100644 --- a/python/sglang/srt/managers/scheduler_update_weights_mixin.py +++ b/python/sglang/srt/managers/scheduler_update_weights_mixin.py @@ -12,6 +12,7 @@ from sglang.srt.constants import ( @@ -1260,7 +1921,7 @@ index abcda67946..a53848b79d 100644 ReleaseMemoryOccupationReqInput, ReleaseMemoryOccupationReqOutput, ResumeMemoryOccupationReqInput, -@@ -117,6 +120,11 @@ class SchedulerUpdateWeightsMixin: +@@ -114,6 +117,11 @@ class SchedulerUpdateWeightsMixin: torch.distributed.barrier(group=self.tp_cpu_group) return UpdateWeightsFromIPCReqOutput(success, message) @@ -1272,7 +1933,7 @@ index abcda67946..a53848b79d 100644 def get_weights_by_name(self: Scheduler, recv_req: GetWeightsByNameReqInput): parameter = self.tp_worker.get_weights_by_name(recv_req) return GetWeightsByNameReqOutput(parameter) -@@ -140,6 +148,15 @@ class SchedulerUpdateWeightsMixin: +@@ -137,6 +145,15 @@ class SchedulerUpdateWeightsMixin: self.memory_saver_adapter.pause(GPU_MEMORY_TYPE_KV_CACHE) self.flush_cache() @@ -1288,7 +1949,7 @@ index abcda67946..a53848b79d 100644 if GPU_MEMORY_TYPE_WEIGHTS in tags: self.stashed_model_static_state = _export_static_state( self.tp_worker.model_runner.model -@@ -180,6 +197,15 @@ class SchedulerUpdateWeightsMixin: +@@ -177,6 +194,15 @@ class SchedulerUpdateWeightsMixin: if GPU_MEMORY_TYPE_KV_CACHE in tags: self.memory_saver_adapter.resume(GPU_MEMORY_TYPE_KV_CACHE) @@ -1305,7 +1966,7 @@ index abcda67946..a53848b79d 100644 def check_weights(self: Scheduler, recv_req: CheckWeightsReqInput): diff --git a/python/sglang/srt/managers/tokenizer_communicator_mixin.py b/python/sglang/srt/managers/tokenizer_communicator_mixin.py -index 544c609401..841658c30e 100644 +index f2ffa9909..6e4d1d460 100644 --- a/python/sglang/srt/managers/tokenizer_communicator_mixin.py +++ b/python/sglang/srt/managers/tokenizer_communicator_mixin.py @@ -59,6 +59,8 @@ from sglang.srt.managers.io_struct import ( @@ -1338,7 +1999,7 @@ index 544c609401..841658c30e 100644 ( GetWeightsByNameReqOutput, self.get_weights_by_name_communicator.handle_recv, -@@ -530,6 +539,17 @@ class TokenizerCommunicatorMixin: +@@ -522,6 +531,17 @@ class TokenizerCommunicatorMixin: return success, message @@ -1354,13 +2015,27 @@ index 544c609401..841658c30e 100644 + return _Communicator.merge_results(results) + async def init_weights_send_group_for_remote_instance( - self: TokenizerManager, + self, obj: InitWeightsSendGroupForRemoteInstanceReqInput, diff --git a/python/sglang/srt/managers/tokenizer_manager.py b/python/sglang/srt/managers/tokenizer_manager.py -index 81424329a0..2c132be63d 100644 +index 0914a5230..cce2d8a2b 100644 --- a/python/sglang/srt/managers/tokenizer_manager.py +++ b/python/sglang/srt/managers/tokenizer_manager.py -@@ -1383,7 +1383,7 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerScoreMixin): +@@ -324,8 +324,12 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi + context, zmq.PULL, port_args.tokenizer_ipc_name, True + ) + if self.server_args.tokenizer_worker_num == 1: ++ self.send_to_scheduler_context = zmq.Context(1) + self.send_to_scheduler = get_zmq_socket( +- context, zmq.PUSH, port_args.scheduler_input_ipc_name, True ++ self.send_to_scheduler_context, ++ zmq.PUSH, ++ port_args.scheduler_input_ipc_name, ++ True, + ) + else: + from sglang.srt.managers.multi_tokenizer_mixin import SenderWrapper +@@ -1327,7 +1331,7 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi async with self.is_pause_cond: self.is_pause = True if obj.mode != "abort": @@ -1369,7 +2044,7 @@ index 81424329a0..2c132be63d 100644 else: # we are using the model_update_lock to check if there is still on-going requests. while True: -@@ -1397,7 +1397,7 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerScoreMixin): +@@ -1341,7 +1345,7 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi async def continue_generation(self, obj: ContinueGenerationReqInput): async with self.is_pause_cond: self.is_pause = False @@ -1378,41 +2053,8 @@ index 81424329a0..2c132be63d 100644 self.is_pause_cond.notify_all() async def update_weights_from_disk( -@@ -1965,25 +1965,23 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerScoreMixin): - priority = getattr(state.obj, "priority", None) - if priority is not None: - labels["priority"] = str(priority) -- if ( -- not state.ttft_observed -- and self.disaggregation_mode != DisaggregationMode.PREFILL -- ): -+ if not state.ttft_observed: - state.ttft_observed = True - state.last_completion_tokens = completion_tokens -- self.metrics_collector.observe_time_to_first_token( -- labels, state.time_stats.get_first_token_latency() -- ) -+ if self.disaggregation_mode != DisaggregationMode.PREFILL: -+ self.metrics_collector.observe_time_to_first_token( -+ labels, state.time_stats.get_first_token_latency() -+ ) - else: - num_new_tokens = completion_tokens - state.last_completion_tokens -- if num_new_tokens: -+ if num_new_tokens > 0: - self.metrics_collector.observe_inter_token_latency( - labels, - state.time_stats.get_interval(), - num_new_tokens, - ) - state.time_stats.set_last_time() -- state.last_completion_tokens = completion_tokens -+ state.last_completion_tokens = completion_tokens - - if state.finished: - retraction_count = ( diff --git a/python/sglang/srt/managers/tp_worker.py b/python/sglang/srt/managers/tp_worker.py -index 7f63610da8..fb56de1583 100644 +index 86b009df4..16ebd52ae 100644 --- a/python/sglang/srt/managers/tp_worker.py +++ b/python/sglang/srt/managers/tp_worker.py @@ -29,6 +29,7 @@ from sglang.srt.managers.io_struct import ( @@ -1423,7 +2065,7 @@ index 7f63610da8..fb56de1583 100644 SendWeightsToRemoteInstanceReqInput, UnloadLoRAAdapterReqInput, UpdateWeightFromDiskReqInput, -@@ -170,6 +171,11 @@ class BaseTpWorker(ABC): +@@ -168,6 +169,11 @@ class BaseTpWorker(ABC): success, message = self.model_runner.update_weights_from_ipc(recv_req) return success, message @@ -1435,11 +2077,135 @@ index 7f63610da8..fb56de1583 100644 def get_weights_by_name(self, recv_req: GetWeightsByNameReqInput): parameter = self.model_runner.get_weights_by_name( recv_req.name, recv_req.truncate_size +diff --git a/python/sglang/srt/mem_cache/allocator.py b/python/sglang/srt/mem_cache/allocator.py +index fa08bb66a..fa539315c 100644 +--- a/python/sglang/srt/mem_cache/allocator.py ++++ b/python/sglang/srt/mem_cache/allocator.py +@@ -347,6 +347,84 @@ def alloc_decode_kernel( + tl.store(out_indices + pid, page * page_size) + + ++def alloc_extend_torch_fallback( ++ prefix_lens_cpu: torch.Tensor, ++ seq_lens_cpu: torch.Tensor, ++ last_loc: torch.Tensor, ++ free_pages: torch.Tensor, ++ out_indices: torch.Tensor, ++ page_size: int, ++ debug_mode: bool = False, ++): ++ extend_lens_cpu = (seq_lens_cpu - prefix_lens_cpu).to(torch.int64) ++ if extend_lens_cpu.numel() == 0: ++ return ++ ++ output_start_locs_cpu = torch.cumsum(extend_lens_cpu, dim=0) - extend_lens_cpu ++ num_pages_after = (seq_lens_cpu + page_size - 1) // page_size ++ num_pages_before = (prefix_lens_cpu + page_size - 1) // page_size ++ num_new_pages_cpu = num_pages_after - num_pages_before ++ page_start_locs_cpu = torch.cumsum(num_new_pages_cpu, dim=0) - num_new_pages_cpu ++ ++ total_new_pages = int(num_new_pages_cpu.sum().item()) ++ if total_new_pages > free_pages.numel(): ++ return ++ ++ if debug_mode: ++ assert int(extend_lens_cpu.sum().item()) == out_indices.numel() ++ ++ prefix_lens_list = prefix_lens_cpu.tolist() ++ seq_lens_list = seq_lens_cpu.tolist() ++ extend_lens_list = extend_lens_cpu.tolist() ++ out_start_list = output_start_locs_cpu.tolist() ++ page_start_list = page_start_locs_cpu.tolist() ++ num_new_pages_list = num_new_pages_cpu.tolist() ++ ++ device = out_indices.device ++ dtype = out_indices.dtype ++ offsets_page = torch.arange(page_size, device=device, dtype=dtype) ++ ++ for i, extend_len in enumerate(extend_lens_list): ++ if extend_len == 0: ++ continue ++ ++ pre_len = prefix_lens_list[i] ++ seq_len = seq_lens_list[i] ++ out_start = out_start_list[i] ++ page_start = page_start_list[i] ++ num_new_pages = num_new_pages_list[i] ++ ++ pre_mod = pre_len % page_size ++ part1 = min(extend_len, page_size - pre_mod) if pre_mod != 0 else 0 ++ if part1: ++ start_val = last_loc[i] + 1 ++ out_indices[out_start : out_start + part1] = start_val + torch.arange( ++ part1, device=device, dtype=dtype ++ ) ++ if part1 == extend_len: ++ continue ++ ++ ceil_pre_pages = (pre_len + page_size - 1) // page_size ++ full_pages_after = seq_len // page_size ++ num_full_pages = full_pages_after - ceil_pre_pages ++ if num_full_pages < 0: ++ num_full_pages = 0 ++ part2 = num_full_pages * page_size ++ if part2: ++ pages = free_pages[page_start : page_start + num_full_pages] ++ full_indices = (pages[:, None] * page_size + offsets_page).reshape(-1) ++ out_indices[out_start + part1 : out_start + part1 + part2] = full_indices ++ if part1 + part2 == extend_len: ++ continue ++ ++ part3 = extend_len - part1 - part2 ++ if part3: ++ last_page = free_pages[page_start + num_new_pages - 1] ++ out_indices[out_start + part1 + part2 : out_start + extend_len] = ( ++ last_page * page_size + torch.arange(part3, device=device, dtype=dtype) ++ ) ++ ++ + class PagedTokenToKVPoolAllocator(BaseTokenToKVPoolAllocator): + """ + An allocator managing the indices to kv cache data. +@@ -411,7 +489,7 @@ class PagedTokenToKVPoolAllocator(BaseTokenToKVPoolAllocator): + + self.seen_max_num_extend_tokens_next_power_of_2 = max( + self.seen_max_num_extend_tokens_next_power_of_2, +- min(tl.core.TRITON_MAX_TENSOR_NUMEL, next_power_of_2(extend_num_tokens)), ++ min(65536, next_power_of_2(extend_num_tokens)), + ) + + bs = len(prefix_lens) +@@ -424,7 +502,7 @@ class PagedTokenToKVPoolAllocator(BaseTokenToKVPoolAllocator): + (extend_num_tokens,), dtype=torch.int64, device=self.device + ) + +- if extend_num_tokens < tl.core.TRITON_MAX_TENSOR_NUMEL: ++ if extend_num_tokens < 65536: + alloc_extend_kernel[(bs,)]( + prefix_lens, + seq_lens, diff --git a/python/sglang/srt/mem_cache/hiradix_cache.py b/python/sglang/srt/mem_cache/hiradix_cache.py -index 3c1e97daab..e5128e5ee2 100644 +index d7cd472a9..1207ab199 100644 --- a/python/sglang/srt/mem_cache/hiradix_cache.py +++ b/python/sglang/srt/mem_cache/hiradix_cache.py -@@ -755,9 +755,8 @@ class HiRadixCache(RadixCache): +@@ -76,6 +76,7 @@ class HiRadixCache(RadixCache): + allocator_type=server_args.hicache_storage_backend, + ) + elif isinstance(self.kv_cache, NSATokenToKVPool): ++ # Check NSA before MLA since NSATokenToKVPool is a subclass of MLATokenToKVPool + self.token_to_kv_pool_host = NSATokenToKVPoolHost( + self.kv_cache, + server_args.hicache_ratio, +@@ -94,7 +95,7 @@ class HiRadixCache(RadixCache): + allocator_type=server_args.hicache_storage_backend, + ) + else: +- raise ValueError(f"HiRadixCache only supports MHA and MLA yet") ++ raise ValueError(f"HiRadixCache only supports MHA and MLA and NSA yet") + + self.tp_group = params.tp_cache_group + self.tp_world_size = torch.distributed.get_world_size(group=self.tp_group) +@@ -750,9 +751,8 @@ class HiRadixCache(RadixCache): self._update_leaf_status(node) self._update_host_leaf_status(node) if node.parent is None: @@ -1449,37 +2215,13 @@ index 3c1e97daab..e5128e5ee2 100644 + # Node belongs to a stale (flushed) tree — stop traversal gracefully. + break node = node.parent - return DecLockRefResult(delta=delta) - -@@ -832,6 +831,7 @@ class HiRadixCache(RadixCache): - self._update_host_leaf_status(node) - # update leaf status for the parent because the node is evicted - self._update_leaf_status(node.parent) -+ self._update_host_leaf_status(node.parent) - return num_evicted - - def _evict_regular(self, node: TreeNode): -@@ -1354,6 +1354,7 @@ class HiRadixCache(RadixCache): - self._update_host_leaf_status(node) - # update parent status as a new leaf is added into device - self._update_leaf_status(node.parent) -+ self._update_host_leaf_status(node.parent) - else: - self._inc_hit_count(node, chunked) - total_prefix_length += prefix_len -@@ -1369,6 +1370,7 @@ class HiRadixCache(RadixCache): - self._update_host_leaf_status(new_node) - # update parent status as a new leaf is added into device - self._update_leaf_status(new_node.parent) -+ self._update_host_leaf_status(new_node.parent) - else: - self._inc_hit_count(new_node, chunked) - total_prefix_length += prefix_len + return delta + diff --git a/python/sglang/srt/mem_cache/memory_pool.py b/python/sglang/srt/mem_cache/memory_pool.py -index e4c158cda9..cf7333235f 100644 +index 1d917137c..669e5c518 100644 --- a/python/sglang/srt/mem_cache/memory_pool.py +++ b/python/sglang/srt/mem_cache/memory_pool.py -@@ -1854,9 +1854,12 @@ class NSATokenToKVPool(MLATokenToKVPool): +@@ -1777,9 +1777,12 @@ class NSATokenToKVPool(MLATokenToKVPool): else: assert self.page_size == 64 with ( @@ -1495,19 +2237,19 @@ index e4c158cda9..cf7333235f 100644 ): self.index_k_with_scale_buffer = [ torch.zeros( -@@ -1878,6 +1881,11 @@ class NSATokenToKVPool(MLATokenToKVPool): +@@ -1801,6 +1804,11 @@ class NSATokenToKVPool(MLATokenToKVPool): ) for _ in range(layer_num) ] -+ self.index_k_with_scale_buffer_ptrs = torch.tensor( -+ [x.data_ptr() for x in self.index_k_with_scale_buffer], -+ dtype=torch.uint64, -+ device=self.device, -+ ) ++ self.index_k_with_scale_buffer_ptrs = torch.tensor( ++ [x.data_ptr() for x in self.index_k_with_scale_buffer], ++ dtype=torch.uint64, ++ device=self.device, ++ ) self._finalize_allocation_log(size) def get_index_k_with_scale_buffer(self, layer_id: int) -> torch.Tensor: -@@ -1960,6 +1968,50 @@ class NSATokenToKVPool(MLATokenToKVPool): +@@ -1876,6 +1884,50 @@ class NSATokenToKVPool(MLATokenToKVPool): ] return data_ptrs, data_lens, item_lens @@ -1559,10 +2301,10 @@ index e4c158cda9..cf7333235f 100644 kv_size_bytes = super().get_kv_size_bytes() for index_k_cache in self.index_k_with_scale_buffer: diff --git a/python/sglang/srt/mem_cache/radix_cache.py b/python/sglang/srt/mem_cache/radix_cache.py -index 7d16160372..70fbdc702f 100644 +index 42b169728..fbefb0193 100644 --- a/python/sglang/srt/mem_cache/radix_cache.py +++ b/python/sglang/srt/mem_cache/radix_cache.py -@@ -512,7 +512,17 @@ class RadixCache(BasePrefixCache): +@@ -495,7 +495,13 @@ class RadixCache(BasePrefixCache): if self.disable: return @@ -1573,15 +2315,11 @@ index 7d16160372..70fbdc702f 100644 + # req_to_token_pool initialization), leading to spurious tree nodes and memory + # leak when page-aligned token counts happen to cross a page boundary. + kv_committed_len = req.kv_committed_len -+ token_ids = ( -+ req.fill_ids[:kv_committed_len] -+ if kv_committed_len < len(req.fill_ids) -+ else req.fill_ids -+ ) ++ token_ids = req.fill_ids[:kv_committed_len] if kv_committed_len < len(req.fill_ids) else req.fill_ids kv_indices = self.req_to_token_pool.req_to_token[ req.req_pool_idx, : len(token_ids) ] -@@ -638,9 +648,8 @@ class RadixCache(BasePrefixCache): +@@ -619,9 +625,8 @@ class RadixCache(BasePrefixCache): node.lock_ref -= 1 self._update_leaf_status(node) if node.parent is None: @@ -1591,13 +2329,13 @@ index 7d16160372..70fbdc702f 100644 + # Node belongs to a stale (flushed) tree — stop traversal gracefully. + break node = node.parent - return DecLockRefResult(delta=delta) + return delta diff --git a/python/sglang/srt/model_executor/model_runner.py b/python/sglang/srt/model_executor/model_runner.py -index a59742b943..a7347c15b8 100644 +index 275775a73..c67f3342e 100644 --- a/python/sglang/srt/model_executor/model_runner.py +++ b/python/sglang/srt/model_executor/model_runner.py -@@ -406,7 +406,12 @@ class ModelRunner(ModelRunnerKVCacheMixin): +@@ -395,7 +395,10 @@ class ModelRunner(ModelRunnerKVCacheMixin): self.forward_stream = torch.get_device_module(self.device).Stream() # CPU offload @@ -1605,14 +2343,12 @@ index a59742b943..a7347c15b8 100644 + # For draft worker (e.g., MTP), do not set offloader to avoid overriding + # the main model's offloader. Draft worker uses NoopOffloader instead. + if not is_draft_worker: -+ set_offloader( -+ create_offloader_from_server_args(server_args, dp_rank=dp_rank) -+ ) ++ set_offloader(create_offloader_from_server_args(server_args, dp_rank=dp_rank)) self._weight_checker = WeightChecker(model_runner=self) -@@ -646,7 +651,8 @@ class ModelRunner(ModelRunnerKVCacheMixin): - ) +@@ -600,7 +603,8 @@ class ModelRunner(ModelRunnerKVCacheMixin): + ) # Init routed experts capturer - self.init_routed_experts_capturer() @@ -1621,7 +2357,7 @@ index a59742b943..a7347c15b8 100644 if self.device == "cuda" or self.device == "musa": self.init_cublas() -@@ -2767,11 +2773,19 @@ class ModelRunner(ModelRunnerKVCacheMixin): +@@ -2429,11 +2433,19 @@ class ModelRunner(ModelRunnerKVCacheMixin): output.expert_distribution_metrics = recorder_outputs.get("metrics") # Copy cached routing experts' buffers back to CPU cache @@ -1646,7 +2382,7 @@ index a59742b943..a7347c15b8 100644 if self.eplb_manager is not None: self.eplb_manager.on_forward_pass_end() -@@ -3021,6 +3035,42 @@ class ModelRunner(ModelRunnerKVCacheMixin): +@@ -2664,6 +2676,42 @@ class ModelRunner(ModelRunnerKVCacheMixin): device=self.device, ) @@ -1689,129 +2425,341 @@ index a59742b943..a7347c15b8 100644 def _model_load_weights_direct(model, named_tensors: List[Tuple[str, torch.Tensor]]): params_dict = dict(model.named_parameters()) -diff --git a/python/sglang/srt/models/glm4v_moe.py b/python/sglang/srt/models/glm4v_moe.py -index 2f0074924d..1f991932c6 100644 ---- a/python/sglang/srt/models/glm4v_moe.py -+++ b/python/sglang/srt/models/glm4v_moe.py -@@ -52,11 +52,31 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - self.num_fused_shared_experts = 0 - self.determine_num_fused_shared_experts() - -- self.model = Glm4MoeModel( -- config, -- quant_config, -- prefix=add_prefix("language_model", prefix), -- ) -+ if not self.config.encoder_only: -+ self.model = Glm4MoeModel( -+ config, -+ quant_config, -+ prefix=add_prefix("language_model", prefix), -+ ) +diff --git a/python/sglang/srt/models/deepseek_common/attention_backend_handler.py b/python/sglang/srt/models/deepseek_common/attention_backend_handler.py +index cc673a9ca..06c430d2c 100644 +--- a/python/sglang/srt/models/deepseek_common/attention_backend_handler.py ++++ b/python/sglang/srt/models/deepseek_common/attention_backend_handler.py +@@ -1,4 +1,5 @@ + from sglang.srt.compilation.piecewise_context_manager import is_in_piecewise_cuda_graph ++from sglang.srt.layers.attention.hybrid_attn_backend import HybridAttnBackend + from sglang.srt.layers.attention.tbo_backend import TboAttnBackend + from sglang.srt.models.deepseek_common.attention_forward_methods.forward_methods import ( + AttnForwardMethod, +@@ -150,6 +151,8 @@ def handle_attention_nsa(attn, forward_batch): + backend = forward_batch.attn_backend + if isinstance(backend, TboAttnBackend): # if enable tbo, get primary backend + backend = backend.primary ++ if isinstance(backend, HybridAttnBackend): ++ backend = backend._select_backend(forward_batch.forward_mode) + if hasattr(backend, "use_mha") and backend.use_mha: + return AttnForwardMethod.MHA_ONE_SHOT + return AttnForwardMethod.MLA +diff --git a/python/sglang/srt/models/gpt_oss.py b/python/sglang/srt/models/gpt_oss.py +index 2cf813bce..1250c49e4 100644 +--- a/python/sglang/srt/models/gpt_oss.py ++++ b/python/sglang/srt/models/gpt_oss.py +@@ -17,6 +17,7 @@ + + import logging + import math ++import re + from collections.abc import Iterable + from functools import partial + from typing import Any, Dict, List, Optional, Tuple, Union +@@ -1065,6 +1066,12 @@ class GptOssForCausalLM(nn.Module): + weight_loader(param, loaded_weight, shard_id) + break + else: ++ # Try per-expert format: experts.{id}.{gate_proj|up_proj|down_proj}.{weight|bias} ++ per_expert_match = _PER_EXPERT_RE.match(name) ++ if per_expert_match: ++ _load_per_expert_param(per_expert_match, loaded_weight, params_dict) ++ continue + -+ if self.pp_group.is_last_rank: -+ if self.pp_group.world_size == 1 and self.config.tie_word_embeddings: -+ self.lm_head = self.model.embed_tokens -+ else: -+ self.lm_head = ParallelLMHead( -+ config.vocab_size, -+ config.hidden_size, -+ quant_config=quant_config, -+ prefix=add_prefix("lm_head", prefix), -+ use_attn_tp_group=get_global_server_args().enable_dp_lm_head, -+ ) -+ else: -+ # ranks other than the last rank will have a placeholder layer -+ self.lm_head = PPMissingLayer() -+ else: -+ # encoder_only mode: no language model, so no lm_head needed -+ self.lm_head = None -+ - self.visual = Glm4vVisionModel( - config.vision_config, - quant_config=quant_config, -@@ -64,24 +84,14 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - use_data_parallel=self.use_data_parallel, - ) + for mapping in expert_params_mapping: + param_name, weight_name, shard_id = mapping + if weight_name not in name: +@@ -1143,6 +1150,88 @@ class GptOssForCausalLM(nn.Module): + return get_attention_sliding_window_size(self.config) -- if self.pp_group.is_last_rank: -- if self.pp_group.world_size == 1 and self.config.tie_word_embeddings: -- self.lm_head = self.model.embed_tokens -- else: -- self.lm_head = ParallelLMHead( -- config.vocab_size, -- config.hidden_size, -- quant_config=quant_config, -- prefix=add_prefix("lm_head", prefix), -- use_attn_tp_group=get_global_server_args().enable_dp_lm_head, -- ) -- else: -- # ranks other than the last rank will have a placeholder layer -- self.lm_head = PPMissingLayer() -- - self.logits_processor = LogitsProcessor(config) - self.pooler = Pooler(pooling_type=PoolingType.LAST, normalize=True) -- self.is_mrope_enabled = "mrope_section" in self.config.rope_scaling -+ _rope_cfg = ( -+ getattr(self.config, "rope_scaling", None) -+ or getattr(self.config, "rope_parameters", None) -+ or {} -+ ) -+ self.is_mrope_enabled = "mrope_section" in _rope_cfg - # For EAGLE3 support - self.capture_aux_hidden_states = False -@@ -219,6 +229,11 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - # Skip loading extra bias for GPTQ models. - if name.endswith(".bias") and name not in params_dict: - continue -+ # Skip loading visual/language model weights -+ if ( -+ self.config.encoder_only or self.config.language_only -+ ) and name not in params_dict: -+ continue - if name not in params_dict: - continue ++# Regex for per-expert weight names: model.layers.X.mlp.experts.E.{proj}.{weight|bias} ++_PER_EXPERT_RE = re.compile( ++ r"(.+\.mlp\.experts\.)(\d+)\.(gate_proj|up_proj|down_proj)\.(weight|bias)" ++) ++ ++ ++def _load_per_expert_param(match, loaded_weight, params_dict): ++ """Load a per-expert weight/bias tensor into the fused FusedMoE parameter. ++ ++ Handles the mapping from per-expert names (e.g., experts.0.gate_proj.weight) ++ to fused parameters (e.g., experts.w13_weight). ++ """ ++ prefix, eid_str, proj, ptype = match.groups() ++ eid = int(eid_str) ++ ++ # Determine target fused parameter name ++ if proj in ("gate_proj", "up_proj"): ++ key = prefix + ("w13_weight" if ptype == "weight" else "w13_weight_bias") ++ else: # down_proj ++ key = prefix + ("w2_weight" if ptype == "weight" else "w2_weight_bias") ++ ++ if key not in params_dict: ++ return ++ ++ param = params_dict[key] ++ expert_slice = param.data[eid] # slice for this expert ++ ++ # Detect triton transposed layout from shape: ++ # w13: transposed=(E, hidden, 2*inter), non-transposed=(E, 2*inter, hidden) ++ # For w13, the larger dim is 2*intermediate; if it's dim -1, layout is transposed. ++ is_transposed = getattr(param, "is_transposed", False) ++ if not is_transposed and ptype == "weight" and "w13" in key: ++ # Infer from shape: transposed has shape[-1] > shape[-2] ++ is_transposed = param.data.shape[-1] > param.data.shape[-2] ++ ++ if ptype == "weight": ++ if proj in ("gate_proj", "up_proj"): ++ # w13_weight: gate in first half, up in second half ++ if is_transposed: ++ # Triton layout: (E, hidden, 2*intermediate) ++ half = expert_slice.shape[1] // 2 ++ dst = ( ++ expert_slice[:, :half] ++ if proj == "gate_proj" ++ else expert_slice[:, half:] ++ ) ++ else: ++ # Standard layout: (E, 2*intermediate, hidden) ++ half = expert_slice.shape[0] // 2 ++ dst = ( ++ expert_slice[:half] if proj == "gate_proj" else expert_slice[half:] ++ ) ++ # loaded_weight shape: (intermediate, hidden) ++ if is_transposed: ++ dst.copy_(loaded_weight.t()) ++ else: ++ dst.copy_(loaded_weight) ++ else: ++ # w2_weight: loaded_weight shape (hidden, intermediate) ++ # Detect transposition for w2 as well ++ w2_transposed = is_transposed ++ if not w2_transposed: ++ w2_transposed = param.data.shape[-1] > param.data.shape[-2] ++ if w2_transposed: ++ expert_slice.copy_(loaded_weight.t()) ++ else: ++ expert_slice.copy_(loaded_weight) ++ else: ++ # Bias handling ++ if proj in ("gate_proj", "up_proj"): ++ # w13_weight_bias: (E, 2*intermediate) ++ half = expert_slice.shape[0] // 2 ++ dst = expert_slice[:half] if proj == "gate_proj" else expert_slice[half:] ++ dst.copy_(loaded_weight) ++ else: ++ # w2_weight_bias: (E, hidden) - only rank 0 loads, others zero ++ if get_moe_tensor_parallel_rank() == 0: ++ expert_slice.copy_(loaded_weight) ++ else: ++ expert_slice.zero_() ++ ++ + def _canonicalize_weights(config, weights_in: Iterable[Tuple[str, torch.Tensor]]): + weights_out_dict = dict(weights_in) -@@ -234,6 +249,8 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - param_name, weight_name, expert_id, shard_id = mapping - if weight_name not in name: - continue -+ if "visual" in name or self.config.encoder_only: -+ continue - - # Mark as expert weight regardless of whether we can process it - is_expert_weight = True -@@ -265,6 +282,11 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - # Skip loading extra bias for GPTQ models. - if name.endswith(".bias") and name not in params_dict: - continue -+ # Skip loading mm/language parameters -+ if ( -+ self.config.encoder_only or self.config.language_only -+ ) and name not in params_dict: -+ continue - if name not in params_dict: - continue +diff --git a/python/sglang/srt/models/qwen2.py b/python/sglang/srt/models/qwen2.py +index a3cfde4d6..18fb07b9d 100644 +--- a/python/sglang/srt/models/qwen2.py ++++ b/python/sglang/srt/models/qwen2.py +@@ -91,9 +91,6 @@ class Qwen2MLP(nn.Module): + self.act_fn = SiluAndMul() + def forward(self, x): +- if get_global_server_args().rl_on_policy_target is not None: +- x = x.bfloat16() +- + gate_up, _ = self.gate_up_proj(x) + x = self.act_fn(gate_up) + x, _ = self.down_proj(x) +@@ -280,11 +277,6 @@ class Qwen2Model(nn.Module): + quant_config=quant_config, + use_attn_tp_group=is_dp_attention_enabled(), + prefix=add_prefix("embed_tokens", prefix), +- params_dtype=( +- torch.float32 +- if get_global_server_args().rl_on_policy_target is not None +- else None +- ), + ) + else: + self.embed_tokens = PPMissingLayer() +@@ -307,10 +299,8 @@ class Qwen2Model(nn.Module): + if self.pp_group.is_last_rank: + norm_kwargs = ( + dict( +- weight_dtype=torch.float32, + cast_x_before_out_mul=True, +- override_orig_dtype=torch.float32, +- fp32_residual=True, ++ fp32_residual=False, + ) + if get_global_server_args().rl_on_policy_target is not None + else {} +diff --git a/python/sglang/srt/models/qwen2_moe.py b/python/sglang/srt/models/qwen2_moe.py +index bbb883a2d..9bad2d1e0 100644 +--- a/python/sglang/srt/models/qwen2_moe.py ++++ b/python/sglang/srt/models/qwen2_moe.py +@@ -596,7 +596,17 @@ class Qwen2MoeModel(nn.Module): + prefix=add_prefix("layers", prefix), + ) + if self.pp_group.is_last_rank: +- self.norm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps) ++ norm_kwargs = ( ++ dict( ++ cast_x_before_out_mul=True, ++ fp32_residual=False, ++ ) ++ if get_global_server_args().rl_on_policy_target is not None ++ else {} ++ ) ++ self.norm = RMSNorm( ++ config.hidden_size, eps=config.rms_norm_eps, **norm_kwargs ++ ) + else: + self.norm = PPMissingLayer(return_tuple=True) + +diff --git a/python/sglang/srt/models/qwen3.py b/python/sglang/srt/models/qwen3.py +index b056317e4..351b18684 100644 +--- a/python/sglang/srt/models/qwen3.py ++++ b/python/sglang/srt/models/qwen3.py +@@ -90,8 +90,8 @@ class Qwen3Attention(nn.Module): + + norm_kwargs = ( + dict( +- weight_dtype=torch.float32, + cast_x_before_out_mul=True, ++ fp32_residual=False, + ) + if get_global_server_args().rl_on_policy_target is not None + else {} +@@ -242,10 +242,8 @@ class Qwen3DecoderLayer(nn.Module): + + norm_kwargs = ( + dict( +- weight_dtype=torch.float32, + cast_x_before_out_mul=True, +- override_orig_dtype=torch.float32, +- fp32_residual=True, ++ fp32_residual=False, + ) + if get_global_server_args().rl_on_policy_target is not None + else {} diff --git a/python/sglang/srt/models/qwen3_moe.py b/python/sglang/srt/models/qwen3_moe.py -index 912891b6a7..fd67a7b580 100644 +index 3fcf0cfa0..bfef7bcf8 100644 --- a/python/sglang/srt/models/qwen3_moe.py +++ b/python/sglang/srt/models/qwen3_moe.py -@@ -325,7 +325,7 @@ class Qwen3MoeSparseMoeBlock(nn.Module): - topk_output = self.topk(hidden_states, router_logits) - final_hidden_states = self.experts(hidden_states, topk_output) +@@ -22,6 +22,7 @@ import math + from typing import Any, Dict, Iterable, List, Optional, Tuple, TypeVar -- if self.ep_size > 1 and not should_allreduce_fusion: -+ if self.ep_size > 1 and not should_allreduce_fusion and not use_reduce_scatter: - final_hidden_states = moe_expert_parallel_all_reduce(final_hidden_states) + import torch ++import torch.nn.functional as F + from torch import nn + from transformers import PretrainedConfig +@@ -50,7 +51,7 @@ from sglang.srt.layers.moe import ( + ) + from sglang.srt.layers.moe.ep_moe.layer import get_moe_impl_class + from sglang.srt.layers.moe.fused_moe_triton.layer import FusedMoE +-from sglang.srt.layers.moe.topk import TopK ++from sglang.srt.layers.moe.topk import StandardTopKOutput, TopK + from sglang.srt.layers.moe.utils import ( + RoutingMethodType, + filter_moe_weight_param_global_expert, +@@ -233,6 +234,7 @@ class Qwen3MoeSparseMoeBlock(nn.Module): + use_grouped_topk=False, + layer_id=layer_id, + ) ++ self.top_k = config.num_experts_per_tok + + self.experts = get_moe_impl_class(quant_config)( + num_experts=config.num_experts +@@ -301,7 +303,22 @@ class Qwen3MoeSparseMoeBlock(nn.Module): + + # router_logits: (num_tokens, n_experts) + router_logits, _ = self.gate(hidden_states) +- topk_output = self.topk(hidden_states, router_logits) ++ ++ if get_global_server_args().rl_on_policy_target is not None: ++ routing_weights = F.softmax(router_logits, dim=1, dtype=torch.float) ++ routing_weights, selected_experts = torch.topk( ++ routing_weights, self.top_k, dim=-1 ++ ) ++ routing_weights /= routing_weights.sum(dim=-1, keepdim=True) ++ routing_weights = routing_weights.to(hidden_states.dtype) ++ topk_output = StandardTopKOutput( ++ topk_weights=routing_weights, ++ topk_ids=selected_experts, ++ router_logits=router_logits, ++ ) ++ else: ++ topk_output = self.topk(hidden_states, router_logits) ++ + final_hidden_states = self.experts(hidden_states, topk_output) if ( + self.tp_size > 1 +@@ -482,13 +499,14 @@ class Qwen3MoeAttention(nn.Module): + ) + self.compatible_with_fused_kv_buffer = ( + False if isinstance(self.rotary_emb, MRotaryEmbedding) else True +- ) ++ ) and (get_global_server_args().rl_on_policy_target is None) + self.compatible_with_fused_qk_norm_rope = ( + not isinstance(self.rotary_emb, MRotaryEmbedding) + ) and self.head_dim in (64, 128, 256) + self.use_fused_qk_norm_rope = ( + get_global_server_args().enable_fused_qk_norm_rope + and self.compatible_with_fused_qk_norm_rope ++ and (get_global_server_args().rl_on_policy_target is None) + ) + self._used_fused_qk_norm_rope_last_call = False + +@@ -501,8 +519,16 @@ class Qwen3MoeAttention(nn.Module): + prefix=add_prefix("attn", prefix), + ) + +- self.q_norm = RMSNorm(self.head_dim, eps=rms_norm_eps) +- self.k_norm = RMSNorm(self.head_dim, eps=rms_norm_eps) ++ norm_kwargs = ( ++ dict( ++ cast_x_before_out_mul=True, ++ fp32_residual=False, ++ ) ++ if get_global_server_args().rl_on_policy_target is not None ++ else {} ++ ) ++ self.q_norm = RMSNorm(self.head_dim, eps=rms_norm_eps, **norm_kwargs) ++ self.k_norm = RMSNorm(self.head_dim, eps=rms_norm_eps, **norm_kwargs) + self.alt_stream = alt_stream + + def op_prepare(self, state): +@@ -743,9 +769,19 @@ class Qwen3MoeDecoderLayer(nn.Module): + quant_config=quant_config, + prefix=add_prefix("mlp", prefix), + ) +- self.input_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps) ++ norm_kwargs = ( ++ dict( ++ cast_x_before_out_mul=True, ++ fp32_residual=False, ++ ) ++ if get_global_server_args().rl_on_policy_target is not None ++ else {} ++ ) ++ self.input_layernorm = RMSNorm( ++ config.hidden_size, eps=config.rms_norm_eps, **norm_kwargs ++ ) + self.post_attention_layernorm = RMSNorm( +- config.hidden_size, eps=config.rms_norm_eps ++ config.hidden_size, eps=config.rms_norm_eps, **norm_kwargs + ) + + self.layer_communicator = LayerCommunicator( diff --git a/python/sglang/srt/models/qwen3_vl.py b/python/sglang/srt/models/qwen3_vl.py -index 7746b24459..57b65fe06f 100644 +index d641826e3..3abc39ef3 100644 --- a/python/sglang/srt/models/qwen3_vl.py +++ b/python/sglang/srt/models/qwen3_vl.py -@@ -1005,14 +1005,19 @@ class Qwen3LLMModel(Qwen3Model): +@@ -711,14 +711,19 @@ class Qwen3LLMModel(Qwen3Model): hidden_states + residual if residual is not None else hidden_states ) @@ -1835,434 +2783,139 @@ index 7746b24459..57b65fe06f 100644 hidden_states, residual = layer( positions, hidden_states, -diff --git a/python/sglang/srt/multimodal/processors/glm4v.py b/python/sglang/srt/multimodal/processors/glm4v.py -index a44f14b6ca..6d6c65ea49 100644 ---- a/python/sglang/srt/multimodal/processors/glm4v.py -+++ b/python/sglang/srt/multimodal/processors/glm4v.py -@@ -1,7 +1,13 @@ - from typing import List, Union - -+import torch -+ - from sglang.srt.layers.rotary_embedding import MRotaryEmbedding --from sglang.srt.managers.schedule_batch import MultimodalProcessorOutput -+from sglang.srt.managers.schedule_batch import ( -+ Modality, -+ MultimodalDataItem, -+ MultimodalProcessorOutput, -+) - from sglang.srt.models.glm4v import Glm4vForConditionalGeneration - from sglang.srt.models.glm4v_moe import Glm4vMoeForConditionalGeneration - from sglang.srt.multimodal.processors.base_processor import ( -@@ -46,6 +52,8 @@ class Glm4vImageProcessor(SGLangBaseProcessor): - self.IMAGE_END_TOKEN_ID = hf_config.image_end_token_id - self.VIDEO_START_TOKEN_ID = hf_config.video_start_token_id - self.VIDEO_END_TOKEN_ID = hf_config.video_end_token_id -+ self.IM_START_TOKEN_ID = self.IMAGE_START_TOKEN_ID -+ self.IM_END_TOKEN_ID = self.IMAGE_END_TOKEN_ID - - # Vision config - self.IMAGE_FACTOR = 28 -@@ -60,6 +68,39 @@ class Glm4vImageProcessor(SGLangBaseProcessor): - video_token_id=self.IM_TOKEN_ID, - ).build(_processor) - -+ def get_mm_data(self, prompt, embeddings, img_grid_thw): -+ input_ids, offsets, _ = self.build_input_ids(prompt, img_grid_thw=img_grid_thw) -+ image_embeddings = ( -+ embeddings.get(Modality.IMAGE, embeddings) -+ if isinstance(embeddings, dict) -+ else embeddings -+ ) -+ mm_items = [ -+ MultimodalDataItem( -+ modality=Modality.IMAGE, -+ offsets=offsets, -+ precomputed_embeddings=image_embeddings, -+ ) -+ ] -+ -+ mrope_positions, mrope_position_delta = MRotaryEmbedding.get_rope_index_glm4v( -+ input_ids=torch.tensor(input_ids, dtype=torch.long).unsqueeze(0), -+ hf_config=self.hf_config, -+ image_grid_thw=img_grid_thw, -+ video_grid_thw=None, -+ attention_mask=None, -+ ) -+ -+ return MultimodalProcessorOutput( -+ input_ids=input_ids, -+ mm_items=mm_items, -+ im_start_id=self.IM_START_TOKEN_ID, -+ im_end_id=self.IM_END_TOKEN_ID, -+ im_token_id=self.IM_TOKEN_ID, -+ mrope_positions=mrope_positions.squeeze(1), -+ mrope_position_delta=mrope_position_delta, -+ ) -+ - def compute_mrope_positions(self, input_ids, mm_items): - image_grid_thw = None - video_grid_thw = None -diff --git a/python/sglang/srt/multimodal/processors/qwen_vl.py b/python/sglang/srt/multimodal/processors/qwen_vl.py -index 3f102567d0..6fb3899021 100644 ---- a/python/sglang/srt/multimodal/processors/qwen_vl.py -+++ b/python/sglang/srt/multimodal/processors/qwen_vl.py -@@ -499,7 +499,7 @@ class QwenVLImageProcessor(SGLangBaseProcessor): - **kwargs, - ): - entry_time = time.perf_counter() -- base_output = self.load_mm_data( -+ base_output = self.legacy_load_mm_data( - prompt=input_text, - image_data=image_data, - video_data=request_obj.video_data, -diff --git a/python/sglang/srt/observability/req_time_stats.py b/python/sglang/srt/observability/req_time_stats.py -index 8caf21c320..51d1edc584 100644 ---- a/python/sglang/srt/observability/req_time_stats.py -+++ b/python/sglang/srt/observability/req_time_stats.py -@@ -21,7 +21,10 @@ import uuid - from dataclasses import dataclass, field - from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union - --from sglang.srt.disaggregation.utils import DisaggregationMode -+from sglang.srt.disaggregation.utils import ( -+ DisaggregationMode, -+ is_slime_profiling_enabled, -+) - from sglang.srt.model_executor.forward_batch_info import ForwardMode - from sglang.srt.observability.metrics_collector import ( - SchedulerMetricsCollector, -@@ -553,6 +556,14 @@ class SchedulerReqTimeStats(ReqTimeStatsBase): - transfer_total_mb: float = 0.0 - # Number of prefill retries for this request - prefill_retry_count: int = 0 -+ fwd_prefill_bootstrap_queue_duration: Optional[float] = None -+ fwd_prefill_forward_duration: Optional[float] = None -+ fwd_prefill_transfer_queue_duration: Optional[float] = None -+ fwd_bootstrap_duration: Optional[float] = None -+ fwd_alloc_waiting_duration: Optional[float] = None -+ fwd_transfer_speed_gb_s: Optional[float] = None -+ fwd_transfer_total_mb: Optional[float] = None -+ fwd_prefill_retry_count: Optional[int] = None - - def __getstate__(self) -> object: - # send to detokenizer/tokenizer -@@ -560,11 +571,33 @@ class SchedulerReqTimeStats(ReqTimeStatsBase): - return {} - - state = { -+ "disagg_mode": self.disagg_mode, - "wait_queue_entry_time": self.wait_queue_entry_time, - "forward_entry_time": self.forward_entry_time, - "prefill_run_batch_start_time": self.prefill_run_batch_start_time, - "prefill_run_batch_end_time": self.prefill_run_batch_end_time, - "prefill_finished_time": self.prefill_finished_time, -+ "completion_time": self.completion_time, -+ "prefill_bootstrap_queue_entry_time": ( -+ self.prefill_bootstrap_queue_entry_time -+ ), -+ "prefill_transfer_queue_entry_time": self.prefill_transfer_queue_entry_time, -+ "decode_prealloc_queue_entry_time": self.decode_prealloc_queue_entry_time, -+ "decode_transfer_queue_entry_time": self.decode_transfer_queue_entry_time, -+ "bootstrap_done_time": self.bootstrap_done_time, -+ "transfer_speed_gb_s": self.transfer_speed_gb_s, -+ "transfer_total_mb": self.transfer_total_mb, -+ "prefill_retry_count": self.prefill_retry_count, -+ "fwd_prefill_bootstrap_queue_duration": ( -+ self.fwd_prefill_bootstrap_queue_duration -+ ), -+ "fwd_prefill_forward_duration": self.fwd_prefill_forward_duration, -+ "fwd_prefill_transfer_queue_duration": self.fwd_prefill_transfer_queue_duration, -+ "fwd_bootstrap_duration": self.fwd_bootstrap_duration, -+ "fwd_alloc_waiting_duration": self.fwd_alloc_waiting_duration, -+ "fwd_transfer_speed_gb_s": self.fwd_transfer_speed_gb_s, -+ "fwd_transfer_total_mb": self.fwd_transfer_total_mb, -+ "fwd_prefill_retry_count": self.fwd_prefill_retry_count, - "diff_realtime_monotonic": global_diff_realtime_monotonic, - } - return state -@@ -916,6 +949,149 @@ class SchedulerReqTimeStats(ReqTimeStatsBase): - return self.prefill_run_batch_end_time - self.prefill_run_batch_start_time - return None - -+ def get_pd_prefill_bootstrap_queue_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_bootstrap_queue_duration is not None: -+ return self.fwd_prefill_bootstrap_queue_duration -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.prefill_bootstrap_queue_entry_time > 0.0 -+ and self.wait_queue_entry_time > 0.0 -+ ): -+ return self.wait_queue_entry_time - self.prefill_bootstrap_queue_entry_time -+ return None -+ -+ def get_pd_prefill_forward_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_forward_duration is not None: -+ return self.fwd_prefill_forward_duration -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.forward_entry_time > 0.0 -+ and self.completion_time > 0.0 -+ ): -+ return self.completion_time - self.forward_entry_time -+ return None -+ -+ def get_pd_prefill_transfer_queue_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_transfer_queue_duration is not None: -+ return self.fwd_prefill_transfer_queue_duration -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.prefill_transfer_queue_entry_time > 0.0 -+ and self.completion_time > 0.0 -+ ): -+ return self.completion_time - self.prefill_transfer_queue_entry_time -+ return None -+ -+ def get_pd_decode_prealloc_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.decode_prealloc_queue_entry_time > 0.0 -+ and self.decode_transfer_queue_entry_time > 0.0 -+ ): -+ return ( -+ self.decode_transfer_queue_entry_time -+ - self.decode_prealloc_queue_entry_time -+ ) -+ return None -+ -+ def get_pd_decode_transfer_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.decode_transfer_queue_entry_time > 0.0 -+ and self.wait_queue_entry_time > 0.0 -+ ): -+ return self.wait_queue_entry_time - self.decode_transfer_queue_entry_time -+ return None -+ -+ def get_pd_decode_forward_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.forward_entry_time > 0.0 -+ and self.completion_time > 0.0 -+ ): -+ return self.completion_time - self.forward_entry_time -+ return None -+ -+ def get_pd_bootstrap_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_bootstrap_duration is not None: -+ return self.fwd_bootstrap_duration -+ if self.bootstrap_done_time <= 0.0: -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.prefill_bootstrap_queue_entry_time > 0.0 -+ ): -+ return self.bootstrap_done_time - self.prefill_bootstrap_queue_entry_time -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.decode_prealloc_queue_entry_time > 0.0 -+ ): -+ return self.bootstrap_done_time - self.decode_prealloc_queue_entry_time -+ return None -+ -+ def get_pd_alloc_waiting_duration(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_alloc_waiting_duration is not None: -+ return self.fwd_alloc_waiting_duration -+ if self.bootstrap_done_time <= 0.0: -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.wait_queue_entry_time > 0.0 -+ ): -+ return self.wait_queue_entry_time - self.bootstrap_done_time -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.decode_transfer_queue_entry_time > 0.0 -+ ): -+ return self.decode_transfer_queue_entry_time - self.bootstrap_done_time -+ return None -+ -+ def get_pd_transfer_speed_gb_s(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_transfer_speed_gb_s is not None: -+ return self.fwd_transfer_speed_gb_s -+ if ( -+ self.disagg_mode != DisaggregationMode.NULL -+ and self.transfer_speed_gb_s > 0.0 -+ ): -+ return self.transfer_speed_gb_s -+ return None -+ -+ def get_pd_transfer_total_mb(self) -> Optional[float]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_transfer_total_mb is not None: -+ return self.fwd_transfer_total_mb -+ if self.disagg_mode != DisaggregationMode.NULL and self.transfer_total_mb > 0.0: -+ return self.transfer_total_mb -+ return None -+ -+ def get_pd_prefill_retry_count(self) -> Optional[int]: -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_retry_count is not None: -+ return self.fwd_prefill_retry_count -+ if self.disagg_mode == DisaggregationMode.PREFILL: -+ return self.prefill_retry_count -+ return None -+ - def convert_to_duration(self) -> str: - if self.disagg_mode == DisaggregationMode.NULL: - queue_duration = self.forward_entry_time - self.wait_queue_entry_time -@@ -1038,6 +1214,24 @@ class SchedulerReqTimeStats(ReqTimeStatsBase): - "prefill_launch_latency": self.get_prefill_launch_latency(), - } - ) -+ if is_slime_profiling_enabled(): -+ for key, value in { -+ "pd_prefill_bootstrap_queue_duration": ( -+ self.get_pd_prefill_bootstrap_queue_duration() -+ ), -+ "pd_prefill_forward_duration": self.get_pd_prefill_forward_duration(), -+ "pd_prefill_transfer_queue_duration": self.get_pd_prefill_transfer_queue_duration(), -+ "pd_decode_prealloc_duration": self.get_pd_decode_prealloc_duration(), -+ "pd_decode_transfer_duration": self.get_pd_decode_transfer_duration(), -+ "pd_decode_forward_duration": self.get_pd_decode_forward_duration(), -+ "pd_bootstrap_duration": self.get_pd_bootstrap_duration(), -+ "pd_alloc_waiting_duration": self.get_pd_alloc_waiting_duration(), -+ "pd_transfer_speed_gb_s": self.get_pd_transfer_speed_gb_s(), -+ "pd_transfer_total_mb": self.get_pd_transfer_total_mb(), -+ "pd_prefill_retry_count": self.get_pd_prefill_retry_count(), -+ }.items(): -+ if value is not None: -+ meta_data[key] = value - return meta_data - - def format_duration(self, duration: float) -> str: -diff --git a/python/sglang/srt/observability/scheduler_metrics_mixin.py b/python/sglang/srt/observability/scheduler_metrics_mixin.py -index ff5695ce2e..588379a85d 100644 ---- a/python/sglang/srt/observability/scheduler_metrics_mixin.py -+++ b/python/sglang/srt/observability/scheduler_metrics_mixin.py -@@ -883,12 +883,42 @@ class SchedulerMetricsMixin: - num_tokens += sum(req.seqlen for queue in waiting_queues for req in queue) - num_waiting_reqs = sum(len(queue) for queue in waiting_queues) - -+ queue_names = ["waiting_queue"] -+ if self.disaggregation_mode == DisaggregationMode.PREFILL: -+ queue_names.append("bootstrap_queue") -+ elif self.disaggregation_mode == DisaggregationMode.DECODE: -+ queue_names.append("prealloc_queue") -+ queue_names.append("transfer_queue") -+ queue_names.append("retracted_queue") -+ -+ queue_details = [] -+ for name, queue in zip(queue_names, waiting_queues): -+ reqs_info = [{"seqlen": req.seqlen} for req in queue] -+ queue_details.append( -+ { -+ "name": name, -+ "num_reqs": len(queue), -+ "num_tokens": sum(req_info["seqlen"] for req_info in reqs_info), -+ "reqs": reqs_info, -+ } -+ ) -+ -+ running_reqs_info = [ -+ {"seqlen": req.seqlen} for req in self.running_batch.reqs -+ ] -+ running_details = { -+ "num_reqs": len(self.running_batch.reqs), -+ "reqs": running_reqs_info, -+ } -+ - return GetLoadReqOutput( - dp_rank=self.dp_rank, - num_reqs=len(self.running_batch.reqs) + num_waiting_reqs, - num_waiting_reqs=num_waiting_reqs, - num_tokens=num_tokens, - ts_tic=time.perf_counter(), -+ queue_details=queue_details, -+ running_details=running_details, - ) - - def get_loads(self: Scheduler, req: GetLoadsReqInput = None) -> GetLoadsReqOutput: diff --git a/python/sglang/srt/server_args.py b/python/sglang/srt/server_args.py -index d91ced805f..4c8774bb64 100644 +index b080aeb16..957a613fa 100644 --- a/python/sglang/srt/server_args.py +++ b/python/sglang/srt/server_args.py -@@ -670,6 +670,7 @@ class ServerArgs: - # Context parallelism used in the long sequence prefill phase of DeepSeek v3.2 - enable_nsa_prefill_context_parallel: bool = False - nsa_prefill_cp_mode: str = "round-robin-split" -+ disable_indexer_rope_neox_style: bool = False - enable_fused_qk_norm_rope: bool = False - enable_precise_embedding_interpolation: bool = False - enable_fused_moe_sum_all_reduce: bool = False -@@ -5659,6 +5660,12 @@ class ServerArgs: - help="Token splitting mode for the prefill phase of DeepSeek v3.2 under context parallelism. Optional values: 'round-robin-split'(default), 'in-seq-split' " - "'round-robin-split' distributes tokens across ranks based on token_idx %% cp_size. It supports multi-batch prefill, fused MoE, and FP8 KV cache.", +@@ -580,6 +580,7 @@ class ServerArgs: + cuda_graph_max_bs: Optional[int] = None + cuda_graph_bs: Optional[List[int]] = None + disable_cuda_graph: bool = False ++ disable_draft_cuda_graph: bool = False + disable_cuda_graph_padding: bool = False + enable_profile_cuda_graph: bool = False + enable_cudagraph_gc: bool = False +@@ -2089,7 +2090,16 @@ class ServerArgs: + assert ( + self.tp_size % (self.dp_size * self.attn_cp_size) == 0 + ), "tp_size must be divisible by dp_size * attn_cp_size" +- assert self.pp_size == 1, "PP is not supported with context parallelism" ++ if self.pp_size > 1: ++ assert ( ++ self.disaggregation_mode == "prefill" ++ and self.enable_nsa_prefill_context_parallel ++ and self.nsa_prefill_cp_mode == "round-robin-split" ++ ), ( ++ "PP with context parallelism is only supported for PD prefill " ++ "with --enable-nsa-prefill-context-parallel and " ++ "--nsa-prefill-cp-mode round-robin-split." ++ ) + + if self.moe_dp_size > 1: + # The tp_size is the world size, not the real tensor parallel size +@@ -4491,6 +4501,11 @@ class ServerArgs: + action="store_true", + help="Disable cuda graph.", ) + parser.add_argument( -+ "--disable-indexer-rope-neox-style", ++ "--disable-draft-cuda-graph", + action="store_true", -+ help="Disable NSA indexer RoPE neox style (equivalent to INDEXER_ROPE_NEOX_STYLE=0). " -+ "If the environment variable INDEXER_ROPE_NEOX_STYLE is also set and conflicts, an error is raised.", ++ help="Disable cuda graph for draft model in speculative decoding.", + ) parser.add_argument( - "--enable-prefill-context-parallel", + "--disable-cuda-graph-padding", action="store_true", +@@ -5636,6 +5651,54 @@ class PortArgs: + ) + + if not server_args.enable_dp_attention: ++ # In multi-node prefill PD with PP/CP, use TCP transport for tokenizer<->scheduler ++ # IPC occasionally stalls in this topology. ++ if ( ++ server_args.nnodes > 1 ++ and server_args.disaggregation_mode == "prefill" ++ and server_args.dist_init_addr is not None ++ ): ++ if server_args.dist_init_addr.startswith("["): # ipv6 address ++ port_num, host = configure_ipv6(server_args.dist_init_addr) ++ dist_init_addr = (host, str(port_num)) ++ else: ++ dist_init_addr = server_args.dist_init_addr.split(":") ++ ++ assert ( ++ len(dist_init_addr) == 2 ++ ), "please provide --dist-init-addr as host:port of head node" ++ ++ dist_init_host, dist_init_port = dist_init_addr ++ dist_init_port = int(dist_init_port) ++ port_base = dist_init_port + ZMQ_TCP_PORT_DELTA ++ detokenizer_port = port_base + 1 ++ rpc_port = port_base + 2 ++ metrics_port = port_base + 3 ++ scheduler_input_port = port_base + 4 ++ ++ try: ++ wait_port_available(dist_init_port, "dist_init_port") ++ wait_port_available(port_base, "port_base") ++ wait_port_available(detokenizer_port, "detokenizer_port") ++ wait_port_available(nccl_port, "nccl_port") ++ wait_port_available(rpc_port, "rpc_port") ++ wait_port_available(metrics_port, "metrics_port") ++ wait_port_available(scheduler_input_port, "scheduler_input_port") ++ except ValueError: ++ logger.exception( ++ f"Port is already in use. {dist_init_port=} {port_base=} {detokenizer_port=} {nccl_port=} {scheduler_input_port=}" ++ ) ++ raise ++ ++ return PortArgs( ++ tokenizer_ipc_name=f"tcp://{dist_init_host}:{port_base}", ++ scheduler_input_ipc_name=f"tcp://{dist_init_host}:{scheduler_input_port}", ++ detokenizer_ipc_name=f"tcp://{dist_init_host}:{detokenizer_port}", ++ nccl_port=nccl_port, ++ rpc_ipc_name=f"tcp://{dist_init_host}:{rpc_port}", ++ metrics_ipc_name=f"tcp://{dist_init_host}:{metrics_port}", ++ tokenizer_worker_ipc_name=tokenizer_worker_ipc_name, ++ ) + # Normal case, use IPC within a single node + return PortArgs( + tokenizer_ipc_name=f"ipc://{tempfile.NamedTemporaryFile(delete=False).name}", diff --git a/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py b/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py -index 40e859b2d6..2604ae037c 100644 +index 5fe45086c..b283d2e9b 100644 --- a/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py +++ b/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py -@@ -377,6 +377,10 @@ class EAGLEDraftCudaGraphRunner: - buffers.seq_lens.fill_(self.seq_len_fill_value) - buffers.out_cache_loc.zero_() - buffers.positions.zero_() -+ buffers.topk_p.zero_() -+ buffers.topk_index.zero_() -+ buffers.hidden_states.zero_() -+ buffers.req_pool_indices.zero_() - +@@ -341,7 +341,10 @@ class EAGLEDraftCudaGraphRunner: + self.seq_lens.fill_(self.seq_len_fill_value) + self.out_cache_loc.zero_() + self.positions.zero_() +- ++ self.topk_p.zero_() ++ self.topk_index.zero_() ++ self.hidden_states.zero_() ++ self.req_pool_indices.zero_() num_tokens = bs * self.num_tokens_per_bs -@@ -386,8 +390,12 @@ class EAGLEDraftCudaGraphRunner: + # Common inputs +@@ -350,8 +353,12 @@ class EAGLEDraftCudaGraphRunner: forward_batch.out_cache_loc ) - buffers.positions[:raw_num_token].copy_(forward_batch.positions) -- buffers.topk_p[:raw_bs].copy_(forward_batch.spec_info.topk_p) -- buffers.topk_index[:raw_bs].copy_(forward_batch.spec_info.topk_index) -+ buffers.topk_p[:raw_bs].copy_(forward_batch.spec_info.topk_p.clamp(0, 1)) -+ buffers.topk_index[:raw_bs].copy_( + self.positions[:raw_num_token].copy_(forward_batch.positions) +- self.topk_p[:raw_bs].copy_(forward_batch.spec_info.topk_p) +- self.topk_index[:raw_bs].copy_(forward_batch.spec_info.topk_index) ++ self.topk_p[:raw_bs].copy_(forward_batch.spec_info.topk_p.clamp(0, 1)) ++ self.topk_index[:raw_bs].copy_( + forward_batch.spec_info.topk_index.clamp( + 0, self.model_runner.model_config.vocab_size - 1 + ) + ) - buffers.hidden_states[:raw_bs].copy_(forward_batch.spec_info.hidden_states) - buffers.req_pool_indices[:raw_bs].copy_(forward_batch.req_pool_indices) + self.hidden_states[:raw_bs].copy_(forward_batch.spec_info.hidden_states) + self.req_pool_indices[:raw_bs].copy_(forward_batch.req_pool_indices) diff --git a/python/sglang/srt/speculative/eagle_info.py b/python/sglang/srt/speculative/eagle_info.py -index dbb91f555e..a04caefc34 100644 +index ac629c7ee..c039d2350 100644 --- a/python/sglang/srt/speculative/eagle_info.py +++ b/python/sglang/srt/speculative/eagle_info.py -@@ -776,6 +776,10 @@ class EagleDraftInput(SpecInput, EagleDraftInputV2Mixin): +@@ -774,6 +774,10 @@ class EagleDraftInput(SpecInput, EagleDraftInputV2Mixin): self.topk_index = self.topk_index[: len(new_indices)] self.hidden_states = self.hidden_states[: len(new_indices)] self.verified_id = self.verified_id[: len(new_indices)] @@ -2273,7 +2926,7 @@ index dbb91f555e..a04caefc34 100644 else: # in some cases(e.g draft_extend), we have not filtered the batch by `unfinished_index` self.topk_p = self.topk_p[new_indices] -@@ -807,6 +811,27 @@ class EagleDraftInput(SpecInput, EagleDraftInputV2Mixin): +@@ -805,6 +809,27 @@ class EagleDraftInput(SpecInput, EagleDraftInputV2Mixin): self.verified_id = torch.cat([self.verified_id, spec_info.verified_id], axis=0) self.topk_p = torch.cat([self.topk_p, spec_info.topk_p]) self.topk_index = torch.cat([self.topk_index, spec_info.topk_index]) @@ -2301,20 +2954,37 @@ index dbb91f555e..a04caefc34 100644 @dataclass +diff --git a/python/sglang/srt/speculative/eagle_worker.py b/python/sglang/srt/speculative/eagle_worker.py +index 32b3a520a..d7f940147 100644 +--- a/python/sglang/srt/speculative/eagle_worker.py ++++ b/python/sglang/srt/speculative/eagle_worker.py +@@ -234,7 +234,10 @@ class EAGLEWorker(TpModelWorker): + self.cuda_graph_runner = None + self.cuda_graph_runner_for_draft_extend = None + +- if self.server_args.disable_cuda_graph: ++ if ( ++ self.server_args.disable_cuda_graph ++ or self.server_args.disable_draft_cuda_graph ++ ): + return + + Device2DraftCudaGraphRunner = { diff --git a/python/sglang/srt/utils/common.py b/python/sglang/srt/utils/common.py -index b0be70d751..44a78d684e 100644 +index 4636128fa..a9b61df39 100644 --- a/python/sglang/srt/utils/common.py +++ b/python/sglang/srt/utils/common.py -@@ -2157,6 +2157,7 @@ class SafeUnpickler(pickle.Unpickler): +@@ -2359,6 +2359,8 @@ class SafeUnpickler(pickle.Unpickler): + "sglang.srt.model_executor.model_runner.", "sglang.srt.layers.", "sglang.srt.utils.", - "torch_npu.", ++ # --- slime --- + "slime.", } DENY_CLASSES = { diff --git a/python/sglang/srt/utils/weight_checker.py b/python/sglang/srt/utils/weight_checker.py -index 3be16446e0..1b2371c839 100644 +index 3be16446e..1b2371c83 100644 --- a/python/sglang/srt/utils/weight_checker.py +++ b/python/sglang/srt/utils/weight_checker.py @@ -69,6 +69,9 @@ def _check_tensors( diff --git a/docker/patch/v0.5.9/megatron.patch b/docker/patch/v0.5.9/megatron.patch deleted file mode 100644 index 2e6ae436b1..0000000000 --- a/docker/patch/v0.5.9/megatron.patch +++ /dev/null @@ -1,795 +0,0 @@ -diff --git a/megatron/core/dist_checkpointing/strategies/common.py b/megatron/core/dist_checkpointing/strategies/common.py -index 41c21d93d..ef80f72d6 100644 ---- a/megatron/core/dist_checkpointing/strategies/common.py -+++ b/megatron/core/dist_checkpointing/strategies/common.py -@@ -86,7 +86,7 @@ class TorchCommonLoadStrategy(LoadCommonStrategy): - msc = MultiStorageClientFeature.import_package() - return msc.torch.load(load_path, map_location='cpu') - else: -- return torch.load(load_path, map_location='cpu') -+ return torch.load(load_path, map_location='cpu', weights_only=False) - except FileNotFoundError as e: - err_msg = f'Common file {load_path} does not exist' - if MultiStorageClientFeature.is_enabled(): -diff --git a/megatron/core/dist_checkpointing/strategies/torch.py b/megatron/core/dist_checkpointing/strategies/torch.py -index 5a1ea308d..aa701237f 100644 ---- a/megatron/core/dist_checkpointing/strategies/torch.py -+++ b/megatron/core/dist_checkpointing/strategies/torch.py -@@ -597,10 +597,12 @@ class MCoreLoadPlanner(DefaultLoadPlanner): - def _validate_global_shapes(self, metadata, sharded_tensors): - for sh_ten in sharded_tensors: - if sh_ten.key not in metadata.state_dict_metadata: -- raise KeyError( -- f"{sh_ten.key} from model not in state dict:" -- f" {sorted(metadata.state_dict_metadata.keys())}" -- ) -+ # raise KeyError( -+ # f"{sh_ten.key} from model not in state dict:" -+ # f" {sorted(metadata.state_dict_metadata.keys())}" -+ # ) -+ print(f"{sh_ten.key} from model not in state dict, will skip") -+ continue - loaded_shape = metadata.state_dict_metadata[sh_ten.key].size - expected_shape = self._expected_shape(sh_ten) - if loaded_shape != expected_shape: -@@ -630,7 +632,7 @@ class MCoreLoadPlanner(DefaultLoadPlanner): - tensor_metadata = self.metadata.state_dict_metadata - metadata_with_sizes = [ - (tensor_metadata[key], tensor_metadata[key].size, sharded_tensor) -- for key, sharded_tensor in self.allow_shape_mismatch_sharded_tensors.items() -+ for key, sharded_tensor in self.allow_shape_mismatch_sharded_tensors.items() if key in tensor_metadata - ] - try: - # Temporarily set sizes to expected shapes -@@ -959,6 +961,7 @@ class TorchDistLoadShardedStrategy(LoadShardedStrategy): - planner=MCoreLoadPlanner( - shapes_validation_sharded_tensors=flexible_shape_sharded_tensors, - allow_shape_mismatch_sharded_tensors=allow_shape_mismatch_sharded_tensors, -+ allow_partial_load=True, - ), - ) - -diff --git a/megatron/core/extensions/transformer_engine.py b/megatron/core/extensions/transformer_engine.py -index acb93ef78..d239db4ab 100644 ---- a/megatron/core/extensions/transformer_engine.py -+++ b/megatron/core/extensions/transformer_engine.py -@@ -408,6 +408,7 @@ class TELinear(te.pytorch.Linear): - ) - - for param in self.parameters(): -+ setattr(param, "parallel_mode", parallel_mode) - if is_expert: - # Reduce the gradient on the expert_data_parallel group for expert linear layers - setattr(param, "allreduce", not self.expert_parallel) -@@ -1161,6 +1162,61 @@ class TEDotProductAttention(te.pytorch.DotProductAttention): - - - if HAVE_TE and is_te_min_version("1.9.0.dev0"): -+ def ceil_div(x: int, y: int) -> int: -+ return (x + y - 1) // y -+ -+ class _FakeInt4QuantizationSTE(torch.autograd.Function): -+ @staticmethod -+ def forward(ctx, x, group_size): -+ m, n = x.shape -+ block_size_m, block_size_n = 1, group_size -+ -+ -+ m_padded = ceil_div(m, block_size_m) * block_size_m -+ n_padded = ceil_div(n, block_size_n) * block_size_n -+ -+ x_padded = torch.zeros( -+ (m_padded, n_padded), -+ dtype=x.dtype, device=x.device -+ ) -+ x_padded[:m, :n] = x -+ -+ x_view = x_padded.view( -+ m_padded // block_size_m, -+ block_size_m, -+ n_padded // block_size_n, -+ block_size_n -+ ) -+ -+ x_max = x_view.abs().float().amax(dim=(1, 3), keepdim=True) -+ q_max = 7 -+ x_scale = x_max / q_max -+ -+ x_scale = x_scale.clamp(min=1e-5) -+ -+ x_div = x_view / x_scale -+ x_round = torch.round(x_div) -+ -+ x_q_clamped = x_round.clamp(-q_max, q_max) -+ -+ x_dequant_view = x_q_clamped * x_scale -+ -+ x_dequant_full = x_dequant_view.view_as(x_padded) -+ x_out = x_dequant_full[:m, :n].contiguous().to(x.dtype) -+ -+ return x_out -+ -+ @staticmethod -+ def backward(ctx, grad_output): -+ return grad_output, None -+ -+ def fake_int4_quantization_ste(x, group_size): -+ x_out = _FakeInt4QuantizationSTE.apply(x, group_size) -+ -+ if hasattr(x, 'main_grad'): -+ x_out.main_grad = x.main_grad -+ -+ return x_out - - class TEGroupedLinear(te.pytorch.GroupedLinear): - """ -@@ -1351,6 +1407,7 @@ if HAVE_TE and is_te_min_version("1.9.0.dev0"): - _is_first_microbatch = ( - None if self.disable_parameter_transpose_cache else self.is_first_microbatch - ) -+ - out = super().forward(x, m_splits, is_first_microbatch=_is_first_microbatch) - self.is_first_microbatch = False - -@@ -1361,6 +1418,20 @@ if HAVE_TE and is_te_min_version("1.9.0.dev0"): - return out - return out, None - -+ def _get_weight_tensors(self): -+ """Get the weight tensors of the module.""" -+ weight_tensors = super()._get_weight_tensors() -+ -+ if os.getenv("OPEN_TRAINING_INT4_FAKE_QAT_FLAG", "0") == "1": -+ group_size = int(os.getenv("OPEN_TRAINING_INT4_GROUP_SIZE", "128")) -+ -+ weight_tensors = [ -+ fake_int4_quantization_ste(w, group_size) -+ for w in weight_tensors -+ ] -+ -+ return weight_tensors -+ - def _encode_extra_state(self, state): - # TE 2.0 changed the format of extra_state to be a byte tensor - if is_te_min_version("2.0.0"): -diff --git a/megatron/core/fusions/fused_mla_yarn_rope_apply.py b/megatron/core/fusions/fused_mla_yarn_rope_apply.py -index 1fd5dcfae..c9aeef1f0 100644 ---- a/megatron/core/fusions/fused_mla_yarn_rope_apply.py -+++ b/megatron/core/fusions/fused_mla_yarn_rope_apply.py -@@ -385,6 +385,7 @@ def rotary_fwd_kv_kernel( - SIN, - emb_dim: tl.constexpr, - k_dim: tl.constexpr, -+ k_dim_ceil: tl.constexpr, - v_dim: tl.constexpr, - head_num: tl.constexpr, - batch_size, -@@ -434,21 +435,27 @@ def rotary_fwd_kv_kernel( - cos_right = tl.load(COS + token_idx * emb_dim + emb_dim // 2 + tl.arange(0, emb_dim // 2)) - sin_right = tl.load(SIN + token_idx * emb_dim + emb_dim // 2 + tl.arange(0, emb_dim // 2)) - -- KV_ptr = KV + pid_m * stride_kv_seq + pid_head * BLOCK_H * stride_kv_nheads -- kv_off = tl.arange(0, BLOCK_H)[:, None] * stride_kv_nheads -- mask = kv_off < head_num * stride_kv_nheads -- k_in_off = kv_off + tl.arange(0, k_dim)[None, :] -- v_in_off = kv_off + k_dim + tl.arange(0, v_dim)[None, :] -- k = tl.load(KV_ptr + k_in_off, mask=mask) -- v = tl.load(KV_ptr + v_in_off, mask=mask) -+ KV_ptr = KV + pid_m * stride_kv_seq # + pid_head * BLOCK_H * stride_kv_nheads -+ ki_range = tl.arange(0, BLOCK_H)[:, None] + pid_head * BLOCK_H -+ kj_range = tl.arange(0, k_dim_ceil)[None, :] -+ mask_k = (ki_range < head_num) & (kj_range < k_dim) -+ mask_v = ki_range < head_num -+ k_off = ki_range * stride_kv_nheads + kj_range -+ if v_dim > 0: -+ v_off = ki_range * stride_kv_nheads + k_dim + tl.arange(0, v_dim)[None, :] -+ v = tl.load(KV_ptr + v_off, mask=mask_v) -+ else: -+ v = tl.zeros((BLOCK_H, 1), dtype=KV.dtype.element_ty) -+ k = tl.load(KV_ptr + k_off, mask=mask_k) - -- K_ptr = O_KEY + pid_m * stride_k_seq + pid_head * BLOCK_H * stride_k_nheads -- V_ptr = O_VALUE + pid_m * stride_v_seq + pid_head * BLOCK_H * stride_v_nheads -+ K_ptr = O_KEY + pid_m * stride_k_seq # + pid_head * BLOCK_H * stride_k_nheads -+ V_ptr = O_VALUE + pid_m * stride_v_seq # + pid_head * BLOCK_H * stride_v_nheads - -- k_out_off = tl.arange(0, BLOCK_H)[:, None] * stride_k_nheads + tl.arange(0, k_dim)[None, :] -- v_out_off = tl.arange(0, BLOCK_H)[:, None] * stride_v_nheads + tl.arange(0, v_dim)[None, :] -- tl.store(K_ptr + k_out_off, k, mask=mask) -- tl.store(V_ptr + v_out_off, v, mask=mask) -+ k_out_off = ki_range * stride_k_nheads + kj_range -+ tl.store(K_ptr + k_out_off, k, mask=mask_k) -+ if v_dim > 0: -+ v_out_off = ki_range * stride_v_nheads + tl.arange(0, v_dim)[None, :] -+ tl.store(V_ptr + v_out_off, v, mask=mask_v) - - EMB = K_POS_EMB + pid_m * stride_emb_seq - # x1 = t[..., 0::2], x2 = t[..., 1::2] -@@ -460,14 +467,16 @@ def rotary_fwd_kv_kernel( - x_left = x_left.expand_dims(0).broadcast_to(BLOCK_H, emb_dim // 2) - x_right = x_right.expand_dims(0).broadcast_to(BLOCK_H, emb_dim // 2) - -+ x_range = tl.arange(0, BLOCK_H)[:, None] + pid_head * BLOCK_H -+ mask_x = x_range < head_num - x_left_off = ( -- tl.arange(0, BLOCK_H)[:, None] * stride_k_nheads -+ x_range * stride_k_nheads - + k_dim - + tl.arange(0, emb_dim // 2)[None, :] - ) - x_right_off = x_left_off + emb_dim // 2 -- tl.store(K_ptr + x_left_off, x_left, mask=mask) -- tl.store(K_ptr + x_right_off, x_right, mask=mask) -+ tl.store(K_ptr + x_left_off, x_left, mask=mask_x) -+ tl.store(K_ptr + x_right_off, x_right, mask=mask_x) - - - @triton.autotune( -@@ -493,6 +502,7 @@ def rotary_bwd_kv_kernel( - SIN, - emb_dim: tl.constexpr, - k_dim: tl.constexpr, -+ k_dim_ceil: tl.constexpr, - v_dim: tl.constexpr, - head_num: tl.constexpr, - batch_size, -@@ -533,27 +543,32 @@ def rotary_bwd_kv_kernel( - else: - token_idx = _get_thd_token_idx(cu_seqlens_kv, pid_m, seq_num, cp_rank, cp_size) - -- dKV_ptr = dKV + pid_m * stride_dkv_seq + pid_head * BLOCK_H * stride_dkv_nheads -- dkv_off = tl.arange(0, BLOCK_H)[:, None] * stride_dkv_nheads -- mask = dkv_off < head_num * stride_dkv_nheads -- dk_out_off = dkv_off + tl.arange(0, k_dim)[None, :] -- dv_out_off = dkv_off + k_dim + tl.arange(0, v_dim)[None, :] -- -- dK_ptr = dK + pid_m * stride_dk_seq + pid_head * BLOCK_H * stride_dk_nheads -- dV_ptr = dV + pid_m * stride_dv_seq + pid_head * BLOCK_H * stride_dv_nheads -- dk_in_off = tl.arange(0, BLOCK_H)[:, None] * stride_dk_nheads + tl.arange(0, k_dim)[None, :] -- dv_in_off = tl.arange(0, BLOCK_H)[:, None] * stride_dv_nheads + tl.arange(0, v_dim)[None, :] -- dk = tl.load(dK_ptr + dk_in_off, mask=mask) -- dv = tl.load(dV_ptr + dv_in_off, mask=mask) -- tl.store(dKV_ptr + dk_out_off, dk, mask=mask) -- tl.store(dKV_ptr + dv_out_off, dv, mask=mask) -+ dKV_ptr = dKV + pid_m * stride_dkv_seq # + pid_head * BLOCK_H * stride_dkv_nheads -+ ki_range = tl.arange(0, BLOCK_H)[:, None] + pid_head * BLOCK_H -+ kj_range = tl.arange(0, k_dim_ceil)[None, :] -+ mask_k = (ki_range < head_num) & (kj_range < k_dim) -+ mask_v = ki_range < head_num -+ dk_out_off = ki_range * stride_dkv_nheads + kj_range -+ -+ dK_ptr = dK + pid_m * stride_dk_seq # + pid_head * BLOCK_H * stride_dk_nheads -+ dV_ptr = dV + pid_m * stride_dv_seq # + pid_head * BLOCK_H * stride_dv_nheads -+ dk_in_off = ki_range * stride_dk_nheads + kj_range -+ -+ dk = tl.load(dK_ptr + dk_in_off, mask=mask_k) -+ tl.store(dKV_ptr + dk_out_off, dk, mask=mask_k) -+ -+ if v_dim > 0: -+ dv_out_off = ki_range * stride_dkv_nheads + k_dim + tl.arange(0, v_dim)[None, :] -+ dv_in_off = ki_range * stride_dv_nheads + tl.arange(0, v_dim)[None, :] -+ dv = tl.load(dV_ptr + dv_in_off, mask=mask_v) -+ tl.store(dKV_ptr + dv_out_off, dv, mask=mask_v) - - if pid_head == 0: - x_left_accum = tl.zeros((BLOCK_H, emb_dim // 2), dtype=tl.float32) - x_right_accum = tl.zeros((BLOCK_H, emb_dim // 2), dtype=tl.float32) - for i in tl.static_range(triton.cdiv(head_num, BLOCK_H)): -- dK_ptr = dK + pid_m * stride_dk_seq + i * BLOCK_H * stride_dk_nheads -- x_off = tl.arange(0, BLOCK_H)[:, None] * stride_dk_nheads + k_dim -+ dK_ptr = dK + pid_m * stride_dk_seq # + i * BLOCK_H * stride_dk_nheads -+ x_off = tl.arange(0, BLOCK_H)[:, None] * stride_dk_nheads + k_dim + i * BLOCK_H * stride_dk_nheads - mask = x_off < head_num * stride_dk_nheads - x_left_off = x_off + tl.arange(0, emb_dim // 2)[None, :] - x_right_off = x_left_off + emb_dim // 2 -@@ -632,6 +647,7 @@ class ApplyMLARotaryEmbKV(torch.autograd.Function): - - o_key = kv.new_empty(total_seqlen, nheads, emb_dim + k_dim) - o_value = kv.new_empty(total_seqlen, nheads, v_dim) -+ k_dim_ceil = triton.next_power_of_2(k_dim) - - grid = lambda META: (total_seqlen, triton.cdiv(nheads, META["BLOCK_H"])) - rotary_fwd_kv_kernel[grid]( -@@ -643,6 +659,7 @@ class ApplyMLARotaryEmbKV(torch.autograd.Function): - sin, - emb_dim, - k_dim, -+ k_dim_ceil, - v_dim, - nheads, - batch_size, -@@ -700,6 +717,7 @@ class ApplyMLARotaryEmbKV(torch.autograd.Function): - - d_kv = dk.new_empty(total_seqlen, nheads, ctx.k_dim + ctx.v_dim) - d_emb = dk.new_empty(total_seqlen, 1, ctx.emb_dim) -+ k_dim_ceil = triton.next_power_of_2(ctx.k_dim) - - grid = lambda META: (total_seqlen, triton.cdiv(nheads, META["BLOCK_H"])) - rotary_bwd_kv_kernel[grid]( -@@ -711,6 +729,7 @@ class ApplyMLARotaryEmbKV(torch.autograd.Function): - sin, - ctx.emb_dim, - ctx.k_dim, -+ k_dim_ceil, - ctx.v_dim, - nheads, - batch_size, -diff --git a/megatron/core/models/common/embeddings/rotary_pos_embedding.py b/megatron/core/models/common/embeddings/rotary_pos_embedding.py -index 5d7b69cd3..2e0a26815 100644 ---- a/megatron/core/models/common/embeddings/rotary_pos_embedding.py -+++ b/megatron/core/models/common/embeddings/rotary_pos_embedding.py -@@ -348,6 +348,7 @@ class MultimodalRotaryEmbedding(nn.Module): - - # shape (seq_length, bs, 1, 2 * dim) - emb = emb[..., None, :].transpose(0, 1).contiguous() -+ packed_seq = packed_seq_params is not None and packed_seq_params.qkv_format == 'thd' - if packed_seq_params is not None and packed_seq_params.local_cp_size is not None: - if packed_seq_params.local_cp_size > 1: - # Set CP group to dynamic CP group for CP slicing -@@ -357,7 +358,9 @@ class MultimodalRotaryEmbedding(nn.Module): - cp_group = None - else: - cp_group = self.cp_group -- if cp_group is not None and cp_group.size() > 1: -+ # For THD (packed sequence) format, skip CP slicing here — it is handled -+ # per-sequence inside _apply_rotary_pos_emb_thd instead (same as RotaryEmbedding). -+ if cp_group is not None and cp_group.size() > 1 and not packed_seq: - # slice rotary_pos_emb along sequence dimension and select the parition of the current - # CP rank - emb = get_pos_emb_on_this_cp_rank(emb, 0, cp_group) -diff --git a/megatron/core/models/common/language_module/language_module.py b/megatron/core/models/common/language_module/language_module.py -index 13d74aa52..060898a7a 100644 ---- a/megatron/core/models/common/language_module/language_module.py -+++ b/megatron/core/models/common/language_module/language_module.py -@@ -184,7 +184,15 @@ class LanguageModule(MegatronModule): - assert ( - column_parallel_linear is not None - ), "column_parallel_linear cannot be None when not using fused linear cross entropy." -- logits, _ = column_parallel_linear(hidden, **col_linear_kwargs) -+ # output -+ output_layer_params = {k: v.detach() for k, v in column_parallel_linear.named_parameters()} -+ output_layer_buffers = dict(column_parallel_linear.named_buffers()) -+ logits, _ = torch.func.functional_call( -+ column_parallel_linear, -+ {**output_layer_params, **output_layer_buffers}, -+ (hidden,), -+ col_linear_kwargs, -+ ) - - return self.compute_language_model_loss(labels, logits) - -diff --git a/megatron/core/models/gpt/gpt_layer_specs.py b/megatron/core/models/gpt/gpt_layer_specs.py -index e21127b87..712793853 100755 ---- a/megatron/core/models/gpt/gpt_layer_specs.py -+++ b/megatron/core/models/gpt/gpt_layer_specs.py -@@ -188,6 +188,8 @@ def get_gpt_layer_with_transformer_engine_spec( - use_kitchen: bool = False, - use_te_activation_func: bool = False, - fallback_to_eager_attn: bool = False, -+ post_self_attn_layernorm: bool = False, -+ post_mlp_layernorm: bool = False, - ) -> ModuleSpec: - """Use this spec to use lower-level Transformer Engine modules (required for fp8 training). - -@@ -260,6 +262,8 @@ def get_gpt_layer_with_transformer_engine_spec( - mlp=mlp, - sharded_state_dict_keys_map=sharded_state_dict_keys_map, - normalization=normalization, -+ post_self_attn_layernorm=post_self_attn_layernorm, -+ post_mlp_layernorm=post_mlp_layernorm, - ) - - -@@ -349,6 +353,8 @@ def get_transformer_layer_spec_for_backend( - mlp: ModuleSpec, - sharded_state_dict_keys_map: Optional[dict] = None, - normalization: Optional[str] = None, -+ post_self_attn_layernorm: bool = False, -+ post_mlp_layernorm: bool = False, - ) -> ModuleSpec: - """Helper function to get module spec for TransformerLayer""" - -@@ -371,9 +377,11 @@ def get_transformer_layer_spec_for_backend( - input_layernorm=input_layernorm, - self_attention=attention, - self_attn_bda=get_bias_dropout_add, -+ post_self_attn_layernorm=TENorm if post_self_attn_layernorm else IdentityOp, - pre_mlp_layernorm=pre_mlp_layernorm, - mlp=mlp, - mlp_bda=get_bias_dropout_add, -+ post_mlp_layernorm=TENorm if post_mlp_layernorm else IdentityOp, - sharded_state_dict_keys_map=sharded_state_dict_keys_map, - ), - ) -diff --git a/megatron/core/models/gpt/gpt_model.py b/megatron/core/models/gpt/gpt_model.py -index a1230568c..1fd52f65a 100644 ---- a/megatron/core/models/gpt/gpt_model.py -+++ b/megatron/core/models/gpt/gpt_model.py -@@ -446,6 +446,7 @@ class GPTModel(LanguageModule): - *, - inference_params: Optional[BaseInferenceContext] = None, - loss_mask: Optional[Tensor] = None, -+ mtp_kwargs: Optional[dict] = {}, - ) -> Tensor: - """Forward function of the GPT Model This function passes the input tensors - through the embedding layer, and then the decoder and finally into the post -@@ -508,6 +509,7 @@ class GPTModel(LanguageModule): - runtime_gather_output=runtime_gather_output, - extra_block_kwargs=extra_block_kwargs, - inference_context=inference_context, -+ mtp_kwargs=mtp_kwargs, - ) - - def _postprocess( -@@ -529,6 +531,7 @@ class GPTModel(LanguageModule): - runtime_gather_output=None, - extra_block_kwargs=None, - inference_context=None, -+ mtp_kwargs={}, - ): - """Postprocesses decoder hidden states to generate logits or compute loss. - -@@ -543,7 +546,8 @@ class GPTModel(LanguageModule): - output_weight = None - if self.share_embeddings_and_output_weights: - output_weight = self.shared_embedding_or_output_weight() -- if mtp_in_postprocess: -+ -+ if mtp_in_postprocess and mtp_kwargs.get('mtp_labels', None) is not None: - hidden_states = self.mtp( - input_ids=input_ids, - position_ids=position_ids, -@@ -563,13 +567,18 @@ class GPTModel(LanguageModule): - return hidden_states - - # Skip when mtp_num_layers is None or 0 -- if self.config.mtp_num_layers: -- mtp_labels = labels.clone() -+ if self.config.mtp_num_layers and mtp_kwargs.get('mtp_labels', None) is not None: -+ mtp_labels = mtp_kwargs['mtp_labels'].clone() -+ mtp_labels, _ = roll_tensor(mtp_labels, shifts=-1, dims=-1, cp_group=self.cp_group, packed_seq_params=packed_seq_params) -+ - hidden_states_list = torch.chunk(hidden_states, 1 + self.config.mtp_num_layers, dim=0) - hidden_states = hidden_states_list[0] - if loss_mask is None: - # if loss_mask is not provided, use all ones as loss_mask - loss_mask = torch.ones_like(mtp_labels) -+ else: -+ # Otherwise, roll the loss_mask to keep up with the mtp_labels -+ loss_mask, _ = roll_tensor(loss_mask, shifts=-1, dims=-1, cp_group=self.cp_group, packed_seq_params=packed_seq_params) - for mtp_layer_number in range(self.config.mtp_num_layers): - # Calc loss for the current Multi-Token Prediction (MTP) layers. - mtp_labels, _ = roll_tensor( -@@ -595,7 +604,7 @@ class GPTModel(LanguageModule): - sequence_parallel_enabled=self.output_layer.sequence_parallel, - column_parallel_linear=self.output_layer, - col_linear_kwargs={ -- 'weight': output_weight, -+ 'weight': output_weight.detach() if output_weight else None, - 'runtime_gather_output': runtime_gather_output, - }, - ) -diff --git a/megatron/core/optimizer/distrib_optimizer.py b/megatron/core/optimizer/distrib_optimizer.py -index 6e093f96f..eac21a3ea 100644 ---- a/megatron/core/optimizer/distrib_optimizer.py -+++ b/megatron/core/optimizer/distrib_optimizer.py -@@ -677,6 +677,8 @@ class DistributedOptimizer(MixedPrecisionOptimizer): - # TE FusedAdam will not accumulate step for empty param groups, so we need to - # align the step across param groups. - param_group["step"] = int(step) -+ if "step" in param_group and param_group["step"] is None: -+ del param_group["step"] - - # Grad scaler state. - if self.grad_scaler: -@@ -1646,6 +1648,8 @@ class DistributedOptimizer(MixedPrecisionOptimizer): - if key == 'padding': - tensors[key] = LocalNonpersistentObject(tensors[key]) - continue -+ if key == 'step': -+ continue - assert tensors[key].shape == (gbuf_local_end - gbuf_local_start,), ( - tensors[key].shape, - gbuf_local_start, -diff --git a/megatron/core/parallel_state.py b/megatron/core/parallel_state.py -index a273002b9..4f821cfd5 100644 ---- a/megatron/core/parallel_state.py -+++ b/megatron/core/parallel_state.py -@@ -11,6 +11,7 @@ from typing import Callable, List, Optional - - import numpy as np - import torch -+import torch.distributed as dist - - from .utils import GlobalMemoryBuffer, is_torch_min_version - -diff --git a/megatron/core/pipeline_parallel/p2p_communication.py b/megatron/core/pipeline_parallel/p2p_communication.py -index ac839c21f..f18309217 100644 ---- a/megatron/core/pipeline_parallel/p2p_communication.py -+++ b/megatron/core/pipeline_parallel/p2p_communication.py -@@ -26,22 +26,22 @@ def _batched_p2p_ops( - ops = [] - if tensor_send_prev is not None: - send_prev_op = torch.distributed.P2POp( -- torch.distributed.isend, tensor_send_prev, prev_pipeline_rank, group -+ torch.distributed.isend, tensor_send_prev, prev_pipeline_rank, - ) - ops.append(send_prev_op) - if tensor_recv_prev is not None: - recv_prev_op = torch.distributed.P2POp( -- torch.distributed.irecv, tensor_recv_prev, prev_pipeline_rank, group -+ torch.distributed.irecv, tensor_recv_prev, prev_pipeline_rank, - ) - ops.append(recv_prev_op) - if tensor_send_next is not None: - send_next_op = torch.distributed.P2POp( -- torch.distributed.isend, tensor_send_next, next_pipeline_rank, group -+ torch.distributed.isend, tensor_send_next, next_pipeline_rank, - ) - ops.append(send_next_op) - if tensor_recv_next is not None: - recv_next_op = torch.distributed.P2POp( -- torch.distributed.irecv, tensor_recv_next, next_pipeline_rank, group -+ torch.distributed.irecv, tensor_recv_next, next_pipeline_rank, - ) - ops.append(recv_next_op) - if len(ops) > 0: -diff --git a/megatron/core/transformer/moe/moe_utils.py b/megatron/core/transformer/moe/moe_utils.py -index 28cff06f5..58dc4bb70 100644 ---- a/megatron/core/transformer/moe/moe_utils.py -+++ b/megatron/core/transformer/moe/moe_utils.py -@@ -587,6 +587,9 @@ def topk_routing_with_score_function( - else: - return torch.topk(scores, k=topk, dim=1) - -+ from slime.utils.routing_replay import get_routing_replay_compute_topk -+ compute_topk = get_routing_replay_compute_topk(compute_topk) -+ - if score_function == "softmax": - if use_pre_softmax: - scores = torch.softmax(logits, dim=-1, dtype=torch.float32).type_as(logits) -diff --git a/megatron/core/transformer/moe/router.py b/megatron/core/transformer/moe/router.py -index 16fc9d9af..517944f25 100644 ---- a/megatron/core/transformer/moe/router.py -+++ b/megatron/core/transformer/moe/router.py -@@ -201,6 +201,9 @@ class TopKRouter(Router): - self.global_tokens_per_expert = None - self.ga_steps = None - -+ from slime.utils.routing_replay import register_routing_replay -+ register_routing_replay(self) -+ - def _maintain_float32_expert_bias(self): - """ - Maintain the expert bias in float32. -diff --git a/megatron/core/transformer/multi_token_prediction.py b/megatron/core/transformer/multi_token_prediction.py -index a8f4abfcd..f33f6f05e 100755 ---- a/megatron/core/transformer/multi_token_prediction.py -+++ b/megatron/core/transformer/multi_token_prediction.py -@@ -6,6 +6,7 @@ from typing import Callable, List, Optional, Union - - import torch - from torch import Tensor -+import warnings - - from megatron.core import InferenceParams, parallel_state, tensor_parallel - from megatron.core.dist_checkpointing.mapping import ShardedStateDict -@@ -714,17 +715,19 @@ class MultiTokenPredictionLayer(MegatronModule): - cp_group=self.cp_group, - packed_seq_params=packed_seq_params, - ) -- position_ids, _ = roll_tensor( -- position_ids, -- shifts=-1, -- dims=-1, -- cp_group=self.cp_group, -- packed_seq_params=packed_seq_params, -- ) -+ if position_ids is not None: -+ position_ids, _ = roll_tensor( -+ position_ids, -+ shifts=-1, -+ dims=-1, -+ cp_group=self.cp_group, -+ packed_seq_params=packed_seq_params, -+ ) - # embedding - decoder_input = embedding(input_ids=input_ids, position_ids=position_ids) -+ decoder_input = decoder_input.detach() - -- hidden_states = make_viewless_tensor(inp=hidden_states, requires_grad=True, keep_graph=True) -+ hidden_states = make_viewless_tensor(inp=hidden_states, requires_grad=True, keep_graph=False) - - return input_ids, position_ids, decoder_input, hidden_states - -@@ -826,6 +829,51 @@ class MultiTokenPredictionLayer(MegatronModule): - return hidden_states - - def _checkpointed_forward(self, forward_func, *args, **kwargs): -+ """Wrap `forward_func` with activation checkpointing while only passing tensors. -+ -+ Non-tensor arguments (e.g., configuration objects, None) are captured via closure so -+ that checkpoint implementations never receive them directly, avoiding save_for_backward -+ issues with non-tensor inputs. -+ """ -+ -+ # TODO(jiajun): Is there any better implementation here? -+ positional_specs = [] -+ kw_specs = [] -+ tensor_args: List[torch.Tensor] = [] -+ -+ for arg in args: -+ if torch.is_tensor(arg): -+ positional_specs.append(('tensor', len(tensor_args))) -+ tensor_args.append(arg) -+ else: -+ positional_specs.append(('const', arg)) -+ -+ for key, value in kwargs.items(): -+ if torch.is_tensor(value): -+ kw_specs.append((key, ('tensor', len(tensor_args)))) -+ tensor_args.append(value) -+ else: -+ kw_specs.append((key, ('const', value))) -+ -+ def run(*flat_tensor_args): -+ rebuilt_args = [] -+ for spec_type, payload in positional_specs: -+ if spec_type == 'tensor': -+ rebuilt_args.append(flat_tensor_args[payload]) -+ else: -+ rebuilt_args.append(payload) -+ -+ rebuilt_kwargs = {} -+ for key, (spec_type, payload) in kw_specs: -+ if spec_type == 'tensor': -+ rebuilt_kwargs[key] = flat_tensor_args[payload] -+ else: -+ rebuilt_kwargs[key] = payload -+ -+ return forward_func(*rebuilt_args, **rebuilt_kwargs) -+ -+ tensor_args_tuple = tuple(tensor_args) -+ - def checkpoint_handler(): - """Determines whether to use the `te_checkpoint` or `tensor_parallel.checkpoint`""" - if self.config.fp8: -@@ -836,12 +884,11 @@ class MultiTokenPredictionLayer(MegatronModule): - self.config.distribute_saved_activations, - tensor_parallel.random.get_cuda_rng_tracker, - parallel_state.get_tensor_model_parallel_group(), -- *args, -- **kwargs, -+ *tensor_args_tuple, - ) - else: - return tensor_parallel.checkpoint( -- forward_func, self.config.distribute_saved_activations, *args, *kwargs.values() -+ run, self.config.distribute_saved_activations, *tensor_args_tuple - ) - - if self.config.recompute_method == 'uniform': -diff --git a/megatron/core/transformer/transformer_config.py b/megatron/core/transformer/transformer_config.py -index e2705bd9f..a0aa109b5 100644 ---- a/megatron/core/transformer/transformer_config.py -+++ b/megatron/core/transformer/transformer_config.py -@@ -210,6 +210,9 @@ class TransformerConfig(ModelParallelConfig): - attention_output_gate: bool = False - """Whether to apply output gate to the attention layers.""" - -+ post_self_attn_layernorm: bool = False -+ post_mlp_layernorm: bool = False -+ - test_mode: bool = False - """Whether to run real-time tests.""" - -diff --git a/megatron/core/transformer/transformer_layer.py b/megatron/core/transformer/transformer_layer.py -index 3ea405770..5a42001b9 100644 ---- a/megatron/core/transformer/transformer_layer.py -+++ b/megatron/core/transformer/transformer_layer.py -@@ -223,6 +223,7 @@ class TransformerLayerSubmodules: - input_layernorm: Union[ModuleSpec, type] = IdentityOp - self_attention: Union[ModuleSpec, type] = IdentityOp - self_attn_bda: Union[ModuleSpec, type] = IdentityFuncOp -+ post_self_attn_layernorm: Union[ModuleSpec, type] = IdentityOp - - pre_cross_attn_layernorm: Union[ModuleSpec, type] = IdentityOp - cross_attention: Union[ModuleSpec, type] = IdentityOp -@@ -231,6 +232,7 @@ class TransformerLayerSubmodules: - pre_mlp_layernorm: Union[ModuleSpec, type] = IdentityOp - mlp: Union[ModuleSpec, type] = IdentityOp - mlp_bda: Union[ModuleSpec, type] = IdentityFuncOp -+ post_mlp_layernorm: Union[ModuleSpec, type] = IdentityOp - - # Mapping for sharded tensor keys to be applied in `sharded_state_dict` method - sharded_state_dict_keys_map: Dict[str, str] = field(default_factory=dict) -@@ -310,6 +312,13 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): - # [Module 3: BiasDropoutFusion] - self.self_attn_bda = build_module(submodules.self_attn_bda) - -+ self.post_self_attn_layernorm = build_module( -+ submodules.post_self_attn_layernorm, -+ config=self.config, -+ hidden_size=self.config.hidden_size, -+ eps=self.config.layernorm_epsilon, -+ ) -+ - # [Module 4: Post SelfAttention] Optional Layernorm after self-attn - self.pre_cross_attn_layernorm = build_module( - submodules.pre_cross_attn_layernorm, -@@ -375,6 +384,13 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): - - self.is_moe_layer = isinstance(self.mlp, MoELayer) - -+ self.post_mlp_layernorm = build_module( -+ submodules.post_mlp_layernorm, -+ config=self.config, -+ hidden_size=self.config.hidden_size, -+ eps=self.config.layernorm_epsilon -+ ) -+ - self.recompute_input_layernorm = False - self.recompute_pre_mlp_layernorm = False - self.recompute_mlp = False -@@ -551,6 +567,10 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): - attention_output_with_bias[0] - ) - -+ attention_output, attention_output_bias = attention_output_with_bias -+ attention_output = self.post_self_attn_layernorm(attention_output) -+ attention_output_with_bias = (attention_output, attention_output_bias) -+ - # TODO: could we move `bias_dropout_add_exec_handler` itself - # inside the module provided in the `bias_dropout_add_spec` module? - nvtx_range_push(suffix="self_attn_bda") -@@ -677,6 +697,10 @@ class TransformerLayer(GraphableMegatronModule, BaseTransformerLayer): - else: - mlp_output_with_bias = self.mlp(pre_mlp_layernorm_output) - -+ mlp_output, mlp_output_bias = mlp_output_with_bias -+ mlp_output = self.post_mlp_layernorm(mlp_output) -+ mlp_output_with_bias = (mlp_output, mlp_output_bias) -+ - if self.recompute_pre_mlp_layernorm: - # discard the output of the pre-mlp layernorm and register the recompute - # as a gradient hook of mlp_output_with_bias[0] -diff --git a/megatron/training/arguments.py b/megatron/training/arguments.py -index b267c8a81..83736acdc 100644 ---- a/megatron/training/arguments.py -+++ b/megatron/training/arguments.py -@@ -1398,6 +1398,9 @@ def core_transformer_config_from_args(args, config_class=None): - - kw_args['inference_sampling_seed'] = args.seed - -+ kw_args['post_self_attn_layernorm'] = args.post_self_attn_layernorm -+ kw_args['post_mlp_layernorm'] = args.post_mlp_layernorm -+ - # handle quantization config - # NOTE: Kitchen arguments are only added to the namespace when - # Kitchen library is available. -@@ -1764,6 +1767,12 @@ def _add_network_size_args(parser): - action='store_true', - help='If set, use original BERT residula connection ' - 'ordering.') -+ group.add_argument('--post-self-attn-layernorm', action='store_true', -+ help='If set, use post self attention layernorm.') -+ group.add_argument('--post-mlp-layernorm', action='store_true', -+ help='If set, use post MLP layernorm.') -+ group.add_argument('--use-gated-attention', action='store_true', -+ help='If set, use gated attention as in Qwen3Next') - group.add_argument('--openai-gelu', action='store_true', - help='Use OpenAIs GeLU implementation. This option' - 'should not be used unless for backward compatibility' -diff --git a/megatron/training/tokenizer/tokenizer.py b/megatron/training/tokenizer/tokenizer.py -index 13b7526ca..6c590f653 100644 ---- a/megatron/training/tokenizer/tokenizer.py -+++ b/megatron/training/tokenizer/tokenizer.py -@@ -136,7 +136,7 @@ class _HuggingFaceTokenizer(MegatronLegacyTokenizer): - # TODO(bnorick): download tokenizer once to lustre and use force offline to make sure all tasks read it from there - self._tokenizer = transformers.AutoTokenizer.from_pretrained( - pretrained_model_name_or_path=pretrained_model_name_or_path, -- trust_remote_code=trust_remote_code, -+ trust_remote_code=True, - **kwargs, - ) - self._vocab = self._tokenizer.get_vocab() diff --git a/docker/patch/v0.5.9/sglang.patch b/docker/patch/v0.5.9/sglang.patch deleted file mode 100644 index e9145702e1..0000000000 --- a/docker/patch/v0.5.9/sglang.patch +++ /dev/null @@ -1,3216 +0,0 @@ -diff --git a/python/sglang/srt/configs/model_config.py b/python/sglang/srt/configs/model_config.py -index 6fbd1db823..f80ec11bb4 100644 ---- a/python/sglang/srt/configs/model_config.py -+++ b/python/sglang/srt/configs/model_config.py -@@ -274,6 +274,7 @@ class ModelConfig: - - if is_draft_model and self.hf_config.architectures[0] in [ - "DeepseekV3ForCausalLM", -+ "DeepseekV32ForCausalLM", - "GlmMoeDsaForCausalLM", - ]: - self.hf_config.architectures[0] = "DeepseekV3ForCausalLMNextN" -diff --git a/python/sglang/srt/disaggregation/base/conn.py b/python/sglang/srt/disaggregation/base/conn.py -index da4629e525..c03f98231a 100644 ---- a/python/sglang/srt/disaggregation/base/conn.py -+++ b/python/sglang/srt/disaggregation/base/conn.py -@@ -17,6 +17,7 @@ class KVArgs: - kv_data_ptrs: List[int] - kv_data_lens: List[int] - kv_item_lens: List[int] -+ aux_buffer_names: List[str] - aux_data_ptrs: List[int] - aux_data_lens: List[int] - aux_item_lens: List[int] -diff --git a/python/sglang/srt/disaggregation/common/conn.py b/python/sglang/srt/disaggregation/common/conn.py -index 67fe82ad67..ed5fa7b0e3 100644 ---- a/python/sglang/srt/disaggregation/common/conn.py -+++ b/python/sglang/srt/disaggregation/common/conn.py -@@ -333,6 +333,10 @@ class CommonKVReceiver(BaseKVReceiver): - self.required_dst_info_num = ( - self.kv_mgr.attn_tp_size // self.prefill_attn_tp_size - ) -+ # With attention DP, one request is routed to one decode rank. -+ # Waiting for all TP shards to pre-allocate the same bootstrap room would stall forever. -+ if self.kv_mgr.attn_dp_size > 1: -+ self.required_dst_info_num = 1 - self.required_prefill_response_num = 1 * ( - self.prefill_pp_size // self.kv_mgr.pp_size - ) -@@ -422,6 +426,7 @@ class CommonKVReceiver(BaseKVReceiver): - f"Could not fetch bootstrap info for engine rank: {self.kv_mgr.kv_args.engine_rank} and target_dp_group: {self.target_dp_group} and target_pp_rank {target_pp_rank}", - ) - self.kv_mgr.update_status(self.bootstrap_room, KVPoll.Failed) -+ self.bootstrap_infos = None - return - - self.bootstrap_infos = bootstrap_infos -@@ -610,8 +615,12 @@ class CommonKVBootstrapServer(BaseKVBootstrapServer): - and int(target_dp_group) == -1 - and int(target_pp_rank) == -1 - ): -+ inferred_attn_tp_size = max( -+ (len(v) for v in self.prefill_port_table.values()), -+ default=self.attn_tp_size, -+ ) - prefill_parallel_info = { -- "prefill_attn_tp_size": self.attn_tp_size, -+ "prefill_attn_tp_size": inferred_attn_tp_size, - "prefill_dp_size": self.dp_size, - "prefill_pp_size": self.pp_size, - "prefill_page_size": self.page_size, -diff --git a/python/sglang/srt/disaggregation/decode.py b/python/sglang/srt/disaggregation/decode.py -index 1d8baf0028..1ebb959298 100644 ---- a/python/sglang/srt/disaggregation/decode.py -+++ b/python/sglang/srt/disaggregation/decode.py -@@ -21,6 +21,7 @@ Life cycle of a request in the decode server - from __future__ import annotations - - import logging -+import os - import time - from collections import deque - from dataclasses import dataclass -@@ -40,8 +41,10 @@ from sglang.srt.disaggregation.utils import ( - MetadataBuffers, - ReqToMetadataIdxAllocator, - TransferBackend, -+ apply_prefill_timing_payload, - get_kv_class, - is_mla_backend, -+ is_slime_profiling_enabled, - kv_to_page_indices, - poll_and_all_reduce, - prepare_abort, -@@ -295,6 +298,7 @@ class DecodePreallocQueue: - kv_args.aux_data_ptrs, kv_args.aux_data_lens, kv_args.aux_item_lens = ( - self.metadata_buffers.get_buf_infos() - ) -+ kv_args.aux_buffer_names = self.metadata_buffers.get_aux_buffer_names() - - if hasattr(self.token_to_kv_pool, "get_state_buf_infos"): - state_data_ptrs, state_data_lens, state_item_lens = ( -@@ -336,6 +340,16 @@ class DecodePreallocQueue: - ) - return kv_manager - -+ def release_memory_occupation(self): -+ self.queue.clear() -+ self.retracted_queue.clear() -+ if hasattr(self.kv_manager, "deregister_buffer_to_engine"): -+ self.kv_manager.deregister_buffer_to_engine() -+ -+ def resume_memory_occupation(self): -+ if hasattr(self.kv_manager, "register_buffer_to_engine"): -+ self.kv_manager.register_buffer_to_engine() -+ - def add(self, req: Req, is_retracted: bool = False) -> None: - """Add a request to the pending queue.""" - if self._check_if_req_exceed_kv_capacity(req): -@@ -440,12 +454,37 @@ class DecodePreallocQueue: - [decode_req.kv_receiver for decode_req in self.queue], self.gloo_group - ) - -+ # Bootstrap timeout: if a request has been stuck in Bootstrapping for too long, treat it as failed. -+ bootstrap_timeout = float( -+ os.environ.get("SGLANG_DISAGGREGATION_TRANSFER_TIMEOUT", "600") -+ ) -+ now = time.perf_counter() -+ - for i, (decode_req, poll) in enumerate(zip(self.queue, polls)): - if rids_to_check is not None and decode_req.req.rid not in rids_to_check: - continue - - if poll == KVPoll.Bootstrapping: -- pass -+ # Check for bootstrap timeout -+ entry_time = getattr( -+ decode_req.req.time_stats, -+ "decode_prealloc_queue_entry_time", -+ None, -+ ) -+ if entry_time is not None and (now - entry_time) > bootstrap_timeout: -+ error_message = ( -+ f"Decode bootstrap timed out after {now - entry_time:.1f}s " -+ f"for request rank={self.tp_rank} " -+ f"{decode_req.req.rid=} {decode_req.req.bootstrap_room=}" -+ ) -+ logger.error(error_message) -+ prepare_abort( -+ decode_req.req, -+ error_message, -+ status_code=HTTPStatus.GATEWAY_TIMEOUT, -+ ) -+ if self.scheduler.enable_metrics: -+ self.scheduler.metrics_collector.increment_bootstrap_failed_reqs() - elif poll == KVPoll.WaitingForInput: - decode_req.waiting_for_input = True - elif poll == KVPoll.Failed: -@@ -590,6 +629,7 @@ class DecodePreallocQueue: - self.req_to_metadata_buffer_idx_allocator.alloc() - ) - assert decode_req.metadata_buffer_index is not None -+ self.metadata_buffers.clear_profiling_buf(decode_req.metadata_buffer_index) - page_indices = kv_to_page_indices(kv_indices, page_size) - decode_req.kv_receiver.init( - page_indices, decode_req.metadata_buffer_index, state_indices -@@ -751,6 +791,7 @@ class DecodeTransferQueue: - output_topk_index, - output_hidden_states, - output_bootstrap_room, -+ output_prefill_timing, - ) = self.metadata_buffers.get_buf(idx) - - # Validate bootstrap_room to detect context corruption -@@ -813,6 +854,14 @@ class DecodeTransferQueue: - output_top_logprobs_idx[: decode_req.req.top_logprobs_num].tolist() - ) - -+ # Inject prefill-side PD timing forwarded from the P instance. -+ # Layout: [bootstrap_queue, forward, transfer_queue, bootstrap, -+ # alloc_waiting, transfer_speed, transfer_mb, retry_count] -+ if is_slime_profiling_enabled(): -+ apply_prefill_timing_payload( -+ decode_req.req.time_stats, output_prefill_timing -+ ) -+ - decode_req.kv_receiver.clear() - decode_req.kv_receiver = None - trace_slice_end( -@@ -830,6 +879,13 @@ class DecodeTransferQueue: - [decode_req.kv_receiver for decode_req in self.queue], self.gloo_group - ) - -+ # Transfer timeout: if a request has been in the transfer queue for too long -+ # (e.g., stuck in Bootstrapping/WaitingForInput/Transferring), treat it as failed. -+ transfer_timeout = float( -+ os.environ.get("SGLANG_DISAGGREGATION_TRANSFER_TIMEOUT", "600") -+ ) -+ now = time.perf_counter() -+ - transferred_reqs = [] - indices_to_remove = set() - for i, (decode_req, poll) in enumerate(zip(self.queue, polls)): -@@ -877,7 +933,20 @@ class DecodeTransferQueue: - KVPoll.WaitingForInput, - KVPoll.Transferring, - ]: -- pass -+ # Check for transfer timeout -+ entry_time = getattr( -+ decode_req.req.time_stats, -+ "decode_transfer_queue_entry_time", -+ None, -+ ) -+ if entry_time is not None and (now - entry_time) > transfer_timeout: -+ error_message = ( -+ f"Decode transfer timed out after {now - entry_time:.1f}s " -+ f"(state={poll}) for request rank={self.tp_rank} " -+ f"{decode_req.req.rid=} {decode_req.req.bootstrap_room=}" -+ ) -+ logger.error(error_message) -+ decode_req.kv_receiver.abort() - else: - raise ValueError(f"Unexpected poll case: {poll}") - -@@ -893,6 +962,14 @@ class DecodeTransferQueue: - - return transferred_reqs - -+ def release_memory_occupation(self): -+ """Clean up all in-flight transfers before releasing GPU memory.""" -+ self.queue.clear() -+ -+ def resume_memory_occupation(self): -+ """Resume after GPU memory re-allocation. Queue was already cleared on release.""" -+ pass -+ - - class SchedulerDisaggregationDecodeMixin: - -@@ -1072,7 +1149,15 @@ class SchedulerDisaggregationDecodeMixin: - resumed_reqs = self.disagg_decode_prealloc_queue.resume_retracted_reqs() - self.waiting_queue.extend(resumed_reqs) - if len(self.disagg_decode_prealloc_queue.retracted_queue) > 0: -- # if there are still retracted requests, we do not allocate new requests -+ # Still have retracted requests that couldn't resume (not enough memory). -+ # Don't accept new requests (pop_preallocated) — they would consume memory -+ # that retracted requests need. -+ # But DO drain completed transfers: their KV is already committed, and -+ # moving them to waiting_queue frees the reserved-decode-token budget -+ # in _allocatable_tokens(), which may unblock resume on the next iteration. -+ # Without this, completed transfers hold memory indefinitely → deadlock. -+ alloc_reqs = self.disagg_decode_transfer_queue.pop_transferred() -+ self.waiting_queue.extend(alloc_reqs) - return - - if not hasattr(self, "polling_count"): -diff --git a/python/sglang/srt/disaggregation/mooncake/conn.py b/python/sglang/srt/disaggregation/mooncake/conn.py -index d0d4efd958..b3a207063e 100644 ---- a/python/sglang/srt/disaggregation/mooncake/conn.py -+++ b/python/sglang/srt/disaggregation/mooncake/conn.py -@@ -30,7 +30,7 @@ from sglang.srt.disaggregation.common.utils import ( - from sglang.srt.disaggregation.mooncake.utils import ( - check_mooncake_custom_mem_pool_enabled, - ) --from sglang.srt.disaggregation.utils import DisaggregationMode -+from sglang.srt.disaggregation.utils import DisaggregationMode, iter_aux_transfer_specs - from sglang.srt.distributed.parallel_state import get_mooncake_transfer_engine - from sglang.srt.environ import envs - from sglang.srt.server_args import ServerArgs -@@ -260,6 +260,19 @@ class MooncakeKVManager(CommonKVManager): - self.kv_args.state_data_ptrs, self.kv_args.state_data_lens - ) - -+ def deregister_buffer_to_engine(self): -+ # Batch deregister KV data buffers -+ if self.kv_args.kv_data_ptrs: -+ self.engine.batch_deregister(self.kv_args.kv_data_ptrs) -+ -+ # Batch deregister auxiliary data buffers -+ if self.kv_args.aux_data_ptrs: -+ self.engine.batch_deregister(self.kv_args.aux_data_ptrs) -+ -+ # Batch deregister state/extra pool data buffers -+ if self.kv_args.state_data_ptrs: -+ self.engine.batch_deregister(self.kv_args.state_data_ptrs) -+ - def _transfer_data(self, mooncake_session_id, transfer_blocks): - if not transfer_blocks: - return 0 -@@ -524,10 +537,14 @@ class MooncakeKVManager(CommonKVManager): - prefill_aux_ptrs = self.kv_args.aux_data_ptrs - prefill_aux_item_lens = self.kv_args.aux_item_lens - -- for i, dst_aux_ptr in enumerate(dst_aux_ptrs): -- length = prefill_aux_item_lens[i] -- src_addr = prefill_aux_ptrs[i] + length * prefill_aux_index -- dst_addr = dst_aux_ptrs[i] + length * req.dst_aux_index -+ for _, src_addr, dst_addr, length in iter_aux_transfer_specs( -+ self.kv_args.aux_buffer_names, -+ prefill_aux_ptrs, -+ prefill_aux_item_lens, -+ dst_aux_ptrs, -+ prefill_aux_index, -+ req.dst_aux_index, -+ ): - transfer_blocks.append((src_addr, dst_addr, length)) - - return self._transfer_data(req.mooncake_session_id, transfer_blocks) -@@ -541,9 +558,14 @@ class MooncakeKVManager(CommonKVManager): - prefill_aux_ptrs = self.kv_args.aux_data_ptrs - prefill_aux_item_lens = self.kv_args.aux_item_lens - -- for i in range(len(prefill_aux_ptrs)): -- length = prefill_aux_item_lens[i] -- src_addr = prefill_aux_ptrs[i] + length * prefill_aux_index -+ for i, src_addr, _, length in iter_aux_transfer_specs( -+ self.kv_args.aux_buffer_names, -+ prefill_aux_ptrs, -+ prefill_aux_item_lens, -+ dst_aux_ptrs, -+ prefill_aux_index, -+ req.dst_aux_index, -+ ): - data = AuxDataCodec.serialize_data_from_buffer(src_addr, length) - - self.send_aux_data_to_endpoint( -@@ -643,13 +665,13 @@ class MooncakeKVManager(CommonKVManager): - raise RuntimeError( - f"PD Disaggregation does NOT support PD different TP sizes for non-MLA {state_type.upper()} hybrid models yet." - ) -- if len(prefill_state_indices) < len(req.dst_state_indices): -- logger.warning( -- f"len(prefill_state_indices) = {len(prefill_state_indices)}, len(dst_state_indices) = {len(req.dst_state_indices)}" -+ if len(prefill_state_indices) != len(req.dst_state_indices): -+ logger.error( -+ "PD extra-state index mismatch, reject transfer to avoid corrupted outputs: " -+ f"len(prefill_state_indices)={len(prefill_state_indices)}, " -+ f"len(dst_state_indices)={len(req.dst_state_indices)}" - ) -- prefill_state_indices = prefill_state_indices[ -- : len(req.dst_state_indices) -- ] -+ return -1 - # Reuse _send_kvcache_generic interface to send extra pool data - prefill_state_indices = np.array(prefill_state_indices, dtype=np.int32) - dst_state_indices = np.array(req.dst_state_indices, dtype=np.int32) -@@ -858,12 +880,6 @@ class MooncakeKVManager(CommonKVManager): - if ret != 0: - with self.session_lock: - self.session_failures[req.mooncake_session_id] += 1 -- # Failures should never happen if the session is not dead, if the session fails once, mark it as failed -- if self.session_failures[req.mooncake_session_id] >= 1: -- self.failed_sessions.add(req.mooncake_session_id) -- logger.error( -- f"Session {req.mooncake_session_id} failed." -- ) - self.record_failure( - kv_chunk.room, - f"Failed to send kv chunk of {kv_chunk.room} to {req.endpoint}:{req.dst_port}", -@@ -880,13 +896,31 @@ class MooncakeKVManager(CommonKVManager): - - if kv_chunk.is_last: - if kv_chunk.state_indices is not None: -- self.maybe_send_extra( -+ ret = self.maybe_send_extra( - req, - kv_chunk.state_indices, - target_rank_registration_info.dst_state_data_ptrs, - executor, - target_rank_registration_info, - ) -+ if ret != 0: -+ with self.session_lock: -+ self.session_failures[ -+ req.mooncake_session_id -+ ] += 1 -+ self.record_failure( -+ kv_chunk.room, -+ f"Failed to send extra state chunk of {kv_chunk.room} to {req.endpoint}:{req.dst_port}", -+ ) -+ self.update_status(kv_chunk.room, KVPoll.Failed) -+ self.sync_status_to_decode_endpoint( -+ req.endpoint, -+ req.dst_port, -+ req.room, -+ KVPoll.Failed, -+ local_rank, -+ ) -+ break - - # Only the last chunk we need to send the aux data - ret = self.send_aux( -@@ -895,6 +929,11 @@ class MooncakeKVManager(CommonKVManager): - target_rank_registration_info.dst_aux_ptrs, - ) - polls.append(True if ret == 0 else False) -+ if ret != 0: -+ # Mark session as failed to avoid hanging -+ # on subsequent batch_transfer_sync calls -+ with self.session_lock: -+ self.session_failures[req.mooncake_session_id] += 1 - dst_ranks_infos.append( - (req.endpoint, req.dst_port, req.room) - ) -@@ -977,15 +1016,20 @@ class MooncakeKVManager(CommonKVManager): - - if status == KVPoll.Success: - if bootstrap_room in self.request_status: -- self.prefill_response_tracker[bootstrap_room].add(prefill_rank) -+ # Guard against TOCTOU race: clear() may remove the entry -+ # between the request_status check and dict access here. - expected_response_num = ( -- self.required_prefill_response_num_table[bootstrap_room] -+ self.required_prefill_response_num_table.get(bootstrap_room) - ) -- arrived_response_num = len( -- self.prefill_response_tracker[bootstrap_room] -- ) -- if arrived_response_num == expected_response_num: -- self.update_status(bootstrap_room, KVPoll.Success) -+ if expected_response_num is not None: -+ self.prefill_response_tracker[bootstrap_room].add( -+ prefill_rank -+ ) -+ arrived_response_num = len( -+ self.prefill_response_tracker[bootstrap_room] -+ ) -+ if arrived_response_num == expected_response_num: -+ self.update_status(bootstrap_room, KVPoll.Success) - elif status == KVPoll.Failed: - self.record_failure( - bootstrap_room, -@@ -1266,7 +1310,10 @@ class MooncakeKVReceiver(CommonKVReceiver): - super().__init__(mgr, bootstrap_addr, bootstrap_room, prefill_dp_rank) - - self.kv_mgr.addr_to_rooms_tracker[self.bootstrap_addr].add(self.bootstrap_room) -- self.kv_mgr.update_status(self.bootstrap_room, KVPoll.WaitingForInput) -+ # Only transition to WaitingForInput if bootstrap succeeded; -+ # if super().__init__() set status to Failed, do not override it. -+ if self.bootstrap_infos is not None: -+ self.kv_mgr.update_status(self.bootstrap_room, KVPoll.WaitingForInput) - - def _register_kv_args(self): - for bootstrap_info in self.bootstrap_infos: -diff --git a/python/sglang/srt/disaggregation/prefill.py b/python/sglang/srt/disaggregation/prefill.py -index fbc8016351..7de53ba292 100644 ---- a/python/sglang/srt/disaggregation/prefill.py -+++ b/python/sglang/srt/disaggregation/prefill.py -@@ -20,6 +20,7 @@ Life cycle of a request in the prefill server - from __future__ import annotations - - import logging -+import os - import time - from collections import deque - from http import HTTPStatus -@@ -167,6 +168,7 @@ class PrefillBootstrapQueue: - kv_args.aux_data_ptrs, kv_args.aux_data_lens, kv_args.aux_item_lens = ( - self.metadata_buffers.get_buf_infos() - ) -+ kv_args.aux_buffer_names = self.metadata_buffers.get_aux_buffer_names() - kv_args.ib_device = self.scheduler.server_args.disaggregation_ib_device - kv_args.gpu_id = self.scheduler.gpu_id - -@@ -276,6 +278,12 @@ class PrefillBootstrapQueue: - [req.disagg_kv_sender for req in self.queue], self.gloo_group - ) - -+ # Bootstrap timeout: if a request has been stuck in Bootstrapping for too long, treat it as failed. -+ bootstrap_timeout = float( -+ os.environ.get("SGLANG_DISAGGREGATION_TRANSFER_TIMEOUT", "600") -+ ) -+ now = time.perf_counter() -+ - for i, (req, poll) in enumerate(zip(self.queue, polls)): - if rids_to_check is not None: - # if req not in reqs_info_to_check, skip -@@ -283,6 +291,27 @@ class PrefillBootstrapQueue: - continue - - if poll == KVPoll.Bootstrapping: -+ # Check for bootstrap timeout -+ entry_time = getattr( -+ req.time_stats, -+ "prefill_bootstrap_queue_entry_time", -+ None, -+ ) -+ if entry_time is not None and (now - entry_time) > bootstrap_timeout: -+ error_message = ( -+ f"Prefill bootstrap timed out after {now - entry_time:.1f}s " -+ f"for request rank={self.tp_rank} " -+ f"{req.rid=} {req.bootstrap_room=}" -+ ) -+ logger.error(error_message) -+ prepare_abort( -+ req, error_message, status_code=HTTPStatus.GATEWAY_TIMEOUT -+ ) -+ self.scheduler.stream_output([req], req.return_logprob) -+ indices_to_remove.add(i) -+ failed_reqs.append(req) -+ if self.scheduler.enable_metrics: -+ self.scheduler.metrics_collector.increment_bootstrap_failed_reqs() - continue - elif poll == KVPoll.Failed: - error_message = f"Prefill bootstrap failed for request rank={self.tp_rank} {req.rid=} {req.bootstrap_room=}" -@@ -335,6 +364,15 @@ class PrefillBootstrapQueue: - else: - return bootstrapped_reqs, failed_reqs - -+ def release_memory_occupation(self): -+ self.queue.clear() -+ if hasattr(self.kv_manager, "deregister_buffer_to_engine"): -+ self.kv_manager.deregister_buffer_to_engine() -+ -+ def resume_memory_occupation(self): -+ if hasattr(self.kv_manager, "register_buffer_to_engine"): -+ self.kv_manager.register_buffer_to_engine() -+ - - class SchedulerDisaggregationPrefillMixin: - """ -@@ -547,6 +585,18 @@ class SchedulerDisaggregationPrefillMixin: - - self.maybe_send_health_check_signal() - -+ if ( -+ self.current_scheduler_metrics_enabled -+ and hasattr(batch, "prefill_stats") -+ and batch.prefill_stats is not None -+ ): -+ can_run_cuda_graph = getattr(result, "can_run_cuda_graph", False) -+ self.log_prefill_stats( -+ prefill_stats=batch.prefill_stats, -+ can_run_cuda_graph=can_run_cuda_graph, -+ dp_cooperation_info=getattr(batch, "dp_cooperation_info", None), -+ ) -+ - def process_disagg_prefill_inflight_queue( - self: Scheduler, rids_to_check: Optional[List[str]] = None - ) -> List[Req]: -@@ -564,6 +614,13 @@ class SchedulerDisaggregationPrefillMixin: - self.attn_tp_cpu_group, - ) - -+ # Transfer timeout: if a request has been in the inflight queue for too long -+ # (e.g., stuck in WaitingForInput/Transferring), treat it as failed. -+ transfer_timeout = float( -+ os.environ.get("SGLANG_DISAGGREGATION_TRANSFER_TIMEOUT", "600") -+ ) -+ now = time.perf_counter() -+ - undone_reqs: List[Req] = [] - # Check .poll() for the reqs in disagg_prefill_inflight_queue. If Success, respond to the client and remove it from the queue - for req, poll in zip(self.disagg_prefill_inflight_queue, polls): -@@ -573,10 +630,35 @@ class SchedulerDisaggregationPrefillMixin: - undone_reqs.append(req) - continue - -- assert poll == KVPoll.Success or poll == KVPoll.Failed -+ if poll not in (KVPoll.Success, KVPoll.Failed): -+ undone_reqs.append(req) -+ continue - - if poll in [KVPoll.WaitingForInput, KVPoll.Transferring]: -- undone_reqs.append(req) -+ # Check for transfer timeout -+ entry_time = getattr( -+ req.time_stats, -+ "prefill_transfer_queue_entry_time", -+ None, -+ ) -+ if entry_time is not None and (now - entry_time) > transfer_timeout: -+ error_message = ( -+ f"Prefill transfer timed out after {now - entry_time:.1f}s " -+ f"(state={poll}) for request rank={self.tp_rank} " -+ f"{req.rid=} {req.bootstrap_room=}" -+ ) -+ logger.error(error_message) -+ release_kv_cache(req, self.tree_cache) # unlock the tree -+ prepare_abort( -+ req, error_message, status_code=HTTPStatus.GATEWAY_TIMEOUT -+ ) -+ if hasattr(req.disagg_kv_sender, "clear"): -+ req.disagg_kv_sender.clear() -+ done_reqs.append(req) -+ if self.enable_metrics: -+ self.metrics_collector.increment_transfer_failed_reqs() -+ else: -+ undone_reqs.append(req) - elif poll == KVPoll.Success: # transfer done - release_kv_cache(req, self.tree_cache) # unlock the tree - req.finished_reason = FINISH_LENGTH(length=0) -diff --git a/python/sglang/srt/disaggregation/utils.py b/python/sglang/srt/disaggregation/utils.py -index 6d58f415a7..84723c342c 100644 ---- a/python/sglang/srt/disaggregation/utils.py -+++ b/python/sglang/srt/disaggregation/utils.py -@@ -21,6 +21,17 @@ if TYPE_CHECKING: - # Constants & Enums - ######################### - FAKE_BOOTSTRAP_HOST = "2.2.2.2" -+PREFILL_TIMING_AUX_BUFFER_NAME = "prefill_timing" -+PREFILL_TIMING_DEST_ATTRS = ( -+ ("fwd_prefill_bootstrap_queue_duration", float), -+ ("fwd_prefill_forward_duration", float), -+ ("fwd_prefill_transfer_queue_duration", float), -+ ("fwd_bootstrap_duration", float), -+ ("fwd_alloc_waiting_duration", float), -+ ("fwd_transfer_speed_gb_s", float), -+ ("fwd_transfer_total_mb", float), -+ ("fwd_prefill_retry_count", int), -+) - - - class DisaggregationMode(Enum): -@@ -139,46 +150,35 @@ class MetadataBuffers: - self.bootstrap_room = torch.zeros( - (size, 8), dtype=torch.uint64, device=device - ) -+ # Prefill-side PD timing (8 floats, padded to 16 for RDMA alignment). -+ # Layout: [bootstrap_queue, forward, transfer_queue, bootstrap, -+ # alloc_waiting, transfer_speed, transfer_mb, retry_count] -+ self.prefill_timing = torch.zeros( -+ (size, 16), dtype=torch.float32, device=device -+ ) -+ self.aux_buffers = [ -+ ("output_ids", self.output_ids), -+ ("cached_tokens", self.cached_tokens), -+ ("output_token_logprobs_val", self.output_token_logprobs_val), -+ ("output_token_logprobs_idx", self.output_token_logprobs_idx), -+ ("output_top_logprobs_val", self.output_top_logprobs_val), -+ ("output_top_logprobs_idx", self.output_top_logprobs_idx), -+ ("output_topk_p", self.output_topk_p), -+ ("output_topk_index", self.output_topk_index), -+ ("output_hidden_states", self.output_hidden_states), -+ ("bootstrap_room", self.bootstrap_room), -+ (PREFILL_TIMING_AUX_BUFFER_NAME, self.prefill_timing), -+ ] - - def get_buf_infos(self): -- ptrs = [ -- self.output_ids.data_ptr(), -- self.cached_tokens.data_ptr(), -- self.output_token_logprobs_val.data_ptr(), -- self.output_token_logprobs_idx.data_ptr(), -- self.output_top_logprobs_val.data_ptr(), -- self.output_top_logprobs_idx.data_ptr(), -- self.output_topk_p.data_ptr(), -- self.output_topk_index.data_ptr(), -- self.output_hidden_states.data_ptr(), -- self.bootstrap_room.data_ptr(), -- ] -- data_lens = [ -- self.output_ids.nbytes, -- self.cached_tokens.nbytes, -- self.output_token_logprobs_val.nbytes, -- self.output_token_logprobs_idx.nbytes, -- self.output_top_logprobs_val.nbytes, -- self.output_top_logprobs_idx.nbytes, -- self.output_topk_p.nbytes, -- self.output_topk_index.nbytes, -- self.output_hidden_states.nbytes, -- self.bootstrap_room.nbytes, -- ] -- item_lens = [ -- self.output_ids[0].nbytes, -- self.cached_tokens[0].nbytes, -- self.output_token_logprobs_val[0].nbytes, -- self.output_token_logprobs_idx[0].nbytes, -- self.output_top_logprobs_val[0].nbytes, -- self.output_top_logprobs_idx[0].nbytes, -- self.output_topk_p[0].nbytes, -- self.output_topk_index[0].nbytes, -- self.output_hidden_states[0].nbytes, -- self.bootstrap_room[0].nbytes, -- ] -+ ptrs = [buffer.data_ptr() for _, buffer in self.aux_buffers] -+ data_lens = [buffer.nbytes for _, buffer in self.aux_buffers] -+ item_lens = [buffer[0].nbytes for _, buffer in self.aux_buffers] - return ptrs, data_lens, item_lens - -+ def get_aux_buffer_names(self): -+ return [name for name, _ in self.aux_buffers] -+ - def get_buf(self, idx: int): - return ( - self.output_ids[idx], -@@ -191,8 +191,12 @@ class MetadataBuffers: - self.output_topk_index[idx], - self.output_hidden_states[idx], - self.bootstrap_room[idx], -+ self.prefill_timing[idx], - ) - -+ def clear_profiling_buf(self, idx: int): -+ self.prefill_timing[idx].zero_() -+ - def set_buf(self, req: Req): - - self.output_ids[req.metadata_buffer_index][0] = req.output_ids[0] -@@ -237,6 +241,84 @@ class MetadataBuffers: - self.bootstrap_room[req.metadata_buffer_index, 0] = ( - req.bootstrap_room if req.bootstrap_room is not None else 0 - ) -+ # Pack prefill-side PD timing durations for transfer to decode instance. -+ # Note: set_buf is called at the START of the last KV chunk send, so -+ # completion_time and prefill_transfer_queue_entry_time are not yet set. -+ # We use time.perf_counter() as the "forward just completed" timestamp. -+ import time -+ -+ ts = req.time_stats -+ timing = self.prefill_timing[req.metadata_buffer_index] -+ self.clear_profiling_buf(req.metadata_buffer_index) -+ if not is_slime_profiling_enabled(): -+ return -+ for idx, value in enumerate( -+ build_prefill_timing_payload(ts, now=time.perf_counter()) -+ ): -+ if value > 0: -+ timing[idx] = value -+ -+ -+def is_slime_profiling_enabled() -> bool: -+ return envs.SLIME_ENABLE_PROFILING.get() -+ -+ -+def build_prefill_timing_payload(time_stats, now: float) -> tuple[float, ...]: -+ bootstrap_queue_duration = 0.0 -+ if ( -+ time_stats.prefill_bootstrap_queue_entry_time > 0 -+ and time_stats.wait_queue_entry_time > 0 -+ ): -+ bootstrap_queue_duration = ( -+ time_stats.wait_queue_entry_time -+ - time_stats.prefill_bootstrap_queue_entry_time -+ ) -+ -+ prefill_forward_duration = ( -+ now - time_stats.forward_entry_time -+ if time_stats.forward_entry_time > 0 -+ else 0.0 -+ ) -+ -+ return ( -+ bootstrap_queue_duration, -+ prefill_forward_duration, -+ 0.0, -+ max(0.0, time_stats.bootstrap_duration), -+ max(0.0, time_stats.alloc_waiting_duration), -+ max(0.0, time_stats.transfer_speed_gb_s), -+ max(0.0, time_stats.transfer_total_mb), -+ float(max(0, time_stats.prefill_retry_count)), -+ ) -+ -+ -+def apply_prefill_timing_payload(time_stats, timing) -> None: -+ for value, (attr_name, caster) in zip( -+ timing[: len(PREFILL_TIMING_DEST_ATTRS)].tolist(), -+ PREFILL_TIMING_DEST_ATTRS, -+ ): -+ if value > 0: -+ setattr(time_stats, attr_name, caster(value)) -+ -+ -+def iter_aux_transfer_specs( -+ aux_buffer_names: list[str], -+ prefill_aux_ptrs: list[int], -+ prefill_aux_item_lens: list[int], -+ dst_aux_ptrs: list[int], -+ prefill_aux_index: int, -+ dst_aux_index: int, -+): -+ profiling_enabled = is_slime_profiling_enabled() -+ for i, (buffer_name, dst_aux_ptr) in enumerate(zip(aux_buffer_names, dst_aux_ptrs)): -+ if not profiling_enabled and buffer_name == PREFILL_TIMING_AUX_BUFFER_NAME: -+ continue -+ length = prefill_aux_item_lens[i] -+ if length <= 0: -+ continue -+ src_addr = prefill_aux_ptrs[i] + length * prefill_aux_index -+ dst_addr = dst_aux_ptr + length * dst_aux_index -+ yield i, src_addr, dst_addr, length - - - ######################### -diff --git a/python/sglang/srt/entrypoints/engine.py b/python/sglang/srt/entrypoints/engine.py -index 0ed5a1b44b..67e33c650d 100644 ---- a/python/sglang/srt/entrypoints/engine.py -+++ b/python/sglang/srt/entrypoints/engine.py -@@ -52,6 +52,7 @@ from sglang.srt.managers.io_struct import ( - LoadLoRAAdapterReqInput, - MultimodalDataInputFormat, - OpenSessionReqInput, -+ PostProcessWeightsReqInput, - ReleaseMemoryOccupationReqInput, - ResumeMemoryOccupationReqInput, - RpcReqInput, -@@ -641,6 +642,24 @@ class Engine(EngineBase): - self.tokenizer_manager.update_weights_from_ipc(obj, None) - ) - -+ def post_process_weights( -+ self, -+ restore_weights_before_load: bool = False, -+ post_process_quantization: bool = False, -+ ): -+ """ -+ Optional post-processing for updated weights (e.g., Marlin conversion). -+ Should be called after weight update is finished. -+ """ -+ obj = PostProcessWeightsReqInput( -+ restore_weights_before_load=restore_weights_before_load, -+ post_process_quantization=post_process_quantization, -+ ) -+ -+ return self.loop.run_until_complete( -+ self.tokenizer_manager.post_process_weights(obj, None) -+ ) -+ - def get_weights_by_name(self, name: str, truncate_size: int = 100): - """Get weights by parameter name.""" - obj = GetWeightsByNameReqInput(name=name, truncate_size=truncate_size) -diff --git a/python/sglang/srt/entrypoints/http_server.py b/python/sglang/srt/entrypoints/http_server.py -index 1d6816c010..402b42e05b 100644 ---- a/python/sglang/srt/entrypoints/http_server.py -+++ b/python/sglang/srt/entrypoints/http_server.py -@@ -115,6 +115,7 @@ from sglang.srt.managers.io_struct import ( - OpenSessionReqInput, - ParseFunctionCallReq, - PauseGenerationReqInput, -+ PostProcessWeightsReqInput, - ProfileReqInput, - ReleaseMemoryOccupationReqInput, - ResumeMemoryOccupationReqInput, -@@ -574,10 +575,8 @@ async def model_info(): - @app.get("/weight_version") - async def weight_version(): - """Get the current weight version.""" -- raise HTTPException( -- status_code=404, -- detail="Endpoint '/get_weight_version' or '/weight_version' is deprecated. Please use '/model_info' instead.", -- ) -+ result = await model_info() -+ return {"weight_version": result.get("weight_version", None)} - - - @app.get("/get_server_info") -@@ -594,9 +593,19 @@ async def get_server_info(): - async def server_info(): - """Get the server information.""" - # Returns internal states per DP. -- internal_states: List[Dict[Any, Any]] = ( -- await _global_state.tokenizer_manager.get_internal_state() -- ) -+ # In large/disaggregated deployments this can occasionally block; keep endpoint responsive. -+ server_info_timeout = float(os.environ.get("SGLANG_SERVER_INFO_TIMEOUT", "2")) -+ try: -+ internal_states: List[Dict[Any, Any]] = await asyncio.wait_for( -+ _global_state.tokenizer_manager.get_internal_state(), -+ timeout=server_info_timeout, -+ ) -+ except asyncio.TimeoutError: -+ logger.warning( -+ "Timed out getting internal state for /server_info after %.1fs; returning empty internal_states", -+ server_info_timeout, -+ ) -+ internal_states = [] - - # This field is not serializable. - if hasattr(_global_state.tokenizer_manager.server_args, "model_config"): -@@ -1084,6 +1093,23 @@ async def update_weights_from_ipc(obj: UpdateWeightsFromIPCReqInput, request: Re - return ORJSONResponse(content, status_code=HTTPStatus.BAD_REQUEST) - - -+@app.post("/post_process_weights") -+@auth_level(AuthLevel.ADMIN_OPTIONAL) -+async def post_process_weights(req: PostProcessWeightsReqInput, request: Request): -+ """ -+ Optional post-processing for updated weights (e.g., Marlin conversion). -+ This should be called selectively after `update_weights_from_distributed/update_weights_from_tensor`. -+ """ -+ success, message = await _global_state.tokenizer_manager.post_process_weights( -+ req, request -+ ) -+ -+ content = {"success": success, "message": message} -+ return ORJSONResponse( -+ content, status_code=200 if success else HTTPStatus.BAD_REQUEST -+ ) -+ -+ - @app.post("/update_weight_version") - @auth_level(AuthLevel.ADMIN_OPTIONAL) - async def update_weight_version(obj: UpdateWeightVersionReqInput, request: Request): -diff --git a/python/sglang/srt/environ.py b/python/sglang/srt/environ.py -index 8293796a2e..bff34e4221 100644 ---- a/python/sglang/srt/environ.py -+++ b/python/sglang/srt/environ.py -@@ -244,6 +244,7 @@ class Envs: - SGLANG_DISAGGREGATION_HEARTBEAT_MAX_FAILURE = EnvInt(2) - SGLANG_DISAGGREGATION_WAITING_TIMEOUT = EnvInt(300) - SGLANG_DISAGGREGATION_NIXL_BACKEND = EnvStr("UCX") -+ SLIME_ENABLE_PROFILING = EnvBool(False) - - # Scheduler: others: - SGLANG_EMPTY_CACHE_INTERVAL = EnvFloat(-1) # in seconds. Set if you observe high memory accumulation over a long serving period. -diff --git a/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py b/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py -index 1cdf65b91c..4783cd18fb 100644 ---- a/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py -+++ b/python/sglang/srt/layers/attention/nsa/index_buf_accessor.py -@@ -630,7 +630,6 @@ def _get_k_and_s_triton( - page_indices, - k_out, - s_out, -- seq_len, - page_size, - buf_numel_per_page, - index_head_dim, -@@ -647,7 +646,6 @@ def _get_k_and_s_triton_kernel( - page_indices_ptr, - k_out_ptr, - s_out_ptr, -- seq_len: tl.constexpr, - page_size: tl.constexpr, - buf_numel_per_page: tl.constexpr, - index_head_dim: tl.constexpr, -diff --git a/python/sglang/srt/layers/attention/nsa/nsa_indexer.py b/python/sglang/srt/layers/attention/nsa/nsa_indexer.py -index ca54a931b7..3540f77bae 100644 ---- a/python/sglang/srt/layers/attention/nsa/nsa_indexer.py -+++ b/python/sglang/srt/layers/attention/nsa/nsa_indexer.py -@@ -1,6 +1,7 @@ - from __future__ import annotations - - import contextlib -+import os - from abc import ABC, abstractmethod - from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple - -@@ -201,14 +202,31 @@ class Indexer(MultiPlatformOp): - prefix=add_prefix("weights_proj", prefix), - ) - self.k_norm = LayerNorm(self.head_dim, dtype=torch.float32) -+ server_args = get_global_server_args() -+ disable_flag = server_args.disable_indexer_rope_neox_style -+ env_raw = os.environ.get("INDEXER_ROPE_NEOX_STYLE", None) -+ if env_raw is not None: -+ env_value = env_raw == "1" -+ if disable_flag and env_value: -+ raise ValueError( -+ "Conflict: --disable-indexer-rope-neox-style is set but " -+ "INDEXER_ROPE_NEOX_STYLE='1'. " -+ "Please remove one or make them consistent." -+ ) -+ resolved_neox_style = env_value -+ elif disable_flag: -+ resolved_neox_style = False -+ else: -+ resolved_neox_style = is_neox_style -+ - self.rotary_emb = get_rope_wrapper( - rope_head_dim, - rotary_dim=rope_head_dim, - max_position=max_position_embeddings, - base=rope_theta, # type: ignore - rope_scaling=rope_scaling, -- is_neox_style=is_neox_style, -- device=get_global_server_args().device, -+ is_neox_style=resolved_neox_style, -+ device=server_args.device, - ) - self.block_size = block_size - self.scale_fmt = scale_fmt -@@ -244,6 +262,11 @@ class Indexer(MultiPlatformOp): - x = x.to(self.weights_proj.weight.dtype) - weights, _ = self.weights_proj(x) - weights = weights.float() -+ if weights.shape[1] < q_scale.shape[1]: -+ assert q_scale.shape[1] % weights.shape[1] == 0 -+ weights = weights.repeat_interleave( -+ q_scale.shape[1] // weights.shape[1], dim=1 -+ ) - weights = weights * self.n_heads**-0.5 - weights = weights.unsqueeze(-1) * q_scale * self.softmax_scale - return weights -@@ -982,15 +1005,26 @@ class Indexer(MultiPlatformOp): - query, key = self._get_q_k_bf16( - q_lora, x, positions, enable_dual_stream, forward_batch=forward_batch - ) -+ if query.shape[1] < 32: -+ assert 32 % query.shape[1] == 0 -+ query = query.repeat_interleave(32 // query.shape[1], dim=1) - q_fp8, q_scale = act_quant(query, self.block_size, self.scale_fmt) - with torch.cuda.stream(self.alt_stream): - k_fp8, k_scale = act_quant(key, self.block_size, self.scale_fmt) - current_stream.wait_stream(self.alt_stream) -+ if weights.shape[1] < q_scale.shape[1]: -+ assert q_scale.shape[1] % weights.shape[1] == 0 -+ weights = weights.repeat_interleave( -+ q_scale.shape[1] // weights.shape[1], dim=1 -+ ) - weights = weights.unsqueeze(-1) * q_scale * self.softmax_scale - else: - query, key = self._get_q_k_bf16( - q_lora, x, positions, enable_dual_stream, forward_batch=forward_batch - ) -+ if query.shape[1] < 32: -+ assert 32 % query.shape[1] == 0 -+ query = query.repeat_interleave(32 // query.shape[1], dim=1) - - if enable_dual_stream: - current_stream = torch.cuda.current_stream() -diff --git a/python/sglang/srt/layers/moe/fused_moe_triton/layer.py b/python/sglang/srt/layers/moe/fused_moe_triton/layer.py -index de8a07ab30..5c9f4813a6 100644 ---- a/python/sglang/srt/layers/moe/fused_moe_triton/layer.py -+++ b/python/sglang/srt/layers/moe/fused_moe_triton/layer.py -@@ -697,6 +697,7 @@ class FusedMoE(torch.nn.Module): - "CompressedTensorsWNA16TritonMoE", - ] - ) -+ and "zero" not in weight_name - else loaded_weight - ) - -@@ -916,6 +917,7 @@ class FusedMoE(torch.nn.Module): - "CompressedTensorsWNA16TritonMoE", - ] - ) -+ and "zero" not in weight_name - else loaded_weight - ) - -diff --git a/python/sglang/srt/layers/moe/routed_experts_capturer.py b/python/sglang/srt/layers/moe/routed_experts_capturer.py -index 00bd687555..12d5577af2 100644 ---- a/python/sglang/srt/layers/moe/routed_experts_capturer.py -+++ b/python/sglang/srt/layers/moe/routed_experts_capturer.py -@@ -8,10 +8,15 @@ import torch - - from sglang.srt.configs.model_config import ModelConfig - from sglang.srt.layers.dp_attention import ( -+ attn_tp_all_gather_into_tensor, - get_attention_dp_rank, -+ get_attention_tp_size, - get_dp_local_info, - is_dp_attention_enabled, - ) -+from sglang.srt.layers.moe import ( -+ get_moe_a2a_backend, -+) - from sglang.srt.mem_cache.memory_pool import ReqToTokenPool - from sglang.srt.model_executor.forward_batch_info import ForwardBatch - from sglang.srt.server_args import get_global_server_args -@@ -181,13 +186,26 @@ class _RoutedExpertsCapturerReal(RoutedExpertsCapturer): - device=device, - ) - -+ if get_moe_a2a_backend().is_deepep(): -+ attn_tp_size = get_attention_tp_size() if is_dp_attention_enabled() else 1 -+ self.gather_buffer = torch.empty( -+ ( -+ self.device_cache.buffer.shape[0] * attn_tp_size, -+ self.device_cache.buffer.shape[2], -+ ), -+ dtype=torch.int32, -+ device=device, -+ ) -+ - def _sync_fwd_experts_buffer_DtoH( - self, - forward_batch: ForwardBatch, - can_run_graph: bool, - cuda_graph_batch: int, - ): -- if is_dp_attention_enabled(): -+ # When DeepEP is enabled, capture() already does all_gather, so device_cache.buffer -+ # contains data from all DP ranks. We should not slice by DP rank in this case. -+ if is_dp_attention_enabled() and not get_moe_a2a_backend().is_deepep(): - local_start_pos, local_num_tokens = get_dp_local_info(forward_batch) - # handle with cuda graph padding - if can_run_graph: -@@ -206,6 +224,12 @@ class _RoutedExpertsCapturerReal(RoutedExpertsCapturer): - ].cpu() - - def capture(self, layer_id: int, topk_ids: torch.Tensor): -+ if get_moe_a2a_backend().is_deepep(): -+ local_topk_ids = topk_ids -+ topk_ids = self.gather_buffer[ -+ : local_topk_ids.size(0) * get_attention_tp_size() -+ ] -+ attn_tp_all_gather_into_tensor(topk_ids, local_topk_ids) - self.device_cache.capture_fwd_routed_experts(layer_id, topk_ids) - - def get_routed_experts( -diff --git a/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py b/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py -index 4cbfed6f90..88b4527443 100644 ---- a/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py -+++ b/python/sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py -@@ -499,7 +499,7 @@ class CompressedTensorsConfig(QuantizationConfig): - ) - is_static = not weight_quant.dynamic - -- return is_channel_group and input_quant_none and is_symmetric and is_static -+ return is_channel_group and input_quant_none and is_static - - def _is_mxint4a16(self, weight_quant: BaseModel, input_quant: BaseModel) -> bool: - input_quant_none = input_quant is None -@@ -968,6 +968,9 @@ class CompressedTensorsFusedMoEMethod(FusedMoEMethodBase): - def process_weights_after_loading(self, layer: torch.nn.Module) -> None: - layer.scheme.process_weights_after_loading(layer) - -+ def restore_weights_before_loading(self, layer: torch.nn.Module) -> None: -+ layer.scheme.restore_weights_before_loading(layer) -+ - def create_weights( - self, - layer: torch.nn.Module, -diff --git a/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py b/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py -index 6264f36d04..f0310e305e 100644 ---- a/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py -+++ b/python/sglang/srt/layers/quantization/compressed_tensors/schemes/compressed_tensors_wNa16_moe.py -@@ -17,7 +17,10 @@ from sglang.srt.layers.quantization.compressed_tensors.schemes import ( - CompressedTensorsMoEScheme, - ) - from sglang.srt.layers.quantization.gptq import gptq_marlin_moe_repack --from sglang.srt.layers.quantization.marlin_utils import marlin_moe_permute_scales -+from sglang.srt.layers.quantization.marlin_utils import ( -+ marlin_moe_permute_scales, -+ moe_awq_to_marlin_zero_points, -+) - from sglang.srt.layers.quantization.utils import replace_parameter - from sglang.srt.utils import get_bool_env_var, is_cuda, is_hip, set_weight_attrs - -@@ -64,7 +67,7 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): - self.strategy = config.strategy - self.group_size = config.group_size - self.actorder = config.actorder -- assert config.symmetric, "Only symmetric quantization is supported for MoE" -+ self.sym = config.symmetric - - if not ( - self.quant_config.quant_format == CompressionFormat.pack_quantized.value -@@ -124,7 +127,7 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): - - # In the case where we have actorder/g_idx, - # we do not partition the w2 scales -- load_full_w2 = self.actorder and self.group_size != -1 -+ load_full_w2 = (self.actorder != "static") and self.group_size != -1 - - if load_full_w2: - w2_scales_size = intermediate_size_per_partition * layer.moe_tp_size -@@ -172,6 +175,32 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): - layer.register_parameter("w13_weight_shape", w13_weight_shape) - set_weight_attrs(w13_weight_shape, extra_weight_attrs) - -+ # add zero param -+ if not self.sym: -+ w13_qzeros = torch.nn.Parameter( -+ torch.empty( -+ num_experts, -+ num_groups_w13, -+ 2 * intermediate_size_per_partition // self.packed_factor, -+ dtype=torch.int32, -+ ), -+ requires_grad=False, -+ ) -+ layer.register_parameter("w13_weight_zero_point", w13_qzeros) -+ set_weight_attrs(w13_qzeros, extra_weight_attrs) -+ -+ w2_qzeros = torch.nn.Parameter( -+ torch.empty( -+ num_experts, -+ num_groups_w2, -+ hidden_size // self.packed_factor, -+ dtype=torch.int32, -+ ), -+ requires_grad=False, -+ ) -+ layer.register_parameter("w2_weight_zero_point", w2_qzeros) -+ set_weight_attrs(w2_qzeros, extra_weight_attrs) -+ - w13_g_idx = torch.nn.Parameter( - torch.empty( - num_experts, -@@ -225,11 +254,14 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): - - # Force record: these are the target GPTQ shapes for rollback. - layer._original_shapes["w13_weight_packed"] = tuple(w13_weight.shape) -- layer._original_shapes["w2_weight_packed"] = tuple(w2_weight.shape) -+ layer._original_shapes["w13_weight_scale"] = tuple(w13_scale.shape) -+ if not self.sym: -+ layer._original_shapes["w13_weight_zero_point"] = w13_qzeros.shape - -- # Also record the shapes of the scales. -+ layer._original_shapes["w2_weight_packed"] = tuple(w2_weight.shape) - layer._original_shapes["w2_weight_scale"] = tuple(w2_scale.shape) -- layer._original_shapes["w13_weight_scale"] = tuple(w13_scale.shape) -+ if not self.sym: -+ layer._original_shapes["w2_weight_zero_point"] = tuple(w2_qzeros.shape) - - def process_weights_after_loading(self, layer: torch.nn.Module) -> None: - -@@ -334,6 +366,24 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): - ) - replace_tensor("w2_weight_scale", marlin_w2_scales) - -+ # Repack zero -+ if not self.sym: -+ marlin_w13_zp = moe_awq_to_marlin_zero_points( -+ layer.w13_weight_zero_point, -+ size_k=layer.w13_weight_zero_point.shape[1], -+ size_n=layer.w13_weight_zero_point.shape[2] * self.packed_factor, -+ num_bits=self.num_bits, -+ ) -+ replace_tensor("w13_weight_zero_point", marlin_w13_zp) -+ -+ marlin_w2_zp = moe_awq_to_marlin_zero_points( -+ layer.w2_weight_zero_point, -+ size_k=layer.w2_weight_zero_point.shape[1], -+ size_n=layer.w2_weight_zero_point.shape[2] * self.packed_factor, -+ num_bits=self.num_bits, -+ ) -+ replace_tensor("w2_weight_zero_point", marlin_w2_zp) -+ - layer.is_marlin_converted = True - - def restore_weights_before_loading(self, layer: torch.nn.Module): -@@ -399,6 +449,8 @@ class CompressedTensorsWNA16MoE(CompressedTensorsMoEScheme): - g_idx2=layer.w2_weight_g_idx, - sort_indices1=layer.w13_g_idx_sort_indices, - sort_indices2=layer.w2_g_idx_sort_indices, -+ w1_zeros=layer.w13_weight_zero_point if not self.sym else None, -+ w2_zeros=layer.w2_weight_zero_point if not self.sym else None, - num_bits=self.num_bits, - is_k_full=self.is_k_full, - routed_scaling_factor=self.moe_runner_config.routed_scaling_factor, -diff --git a/python/sglang/srt/managers/detokenizer_manager.py b/python/sglang/srt/managers/detokenizer_manager.py -index 6522278603..7d3a5d0c4c 100644 ---- a/python/sglang/srt/managers/detokenizer_manager.py -+++ b/python/sglang/srt/managers/detokenizer_manager.py -@@ -405,6 +405,17 @@ class DetokenizerManager(MultiHttpWorkerDetokenizerMixin): - prefill_launch_delay=recv_obj.prefill_launch_delay, - prefill_launch_latency=recv_obj.prefill_launch_latency, - prefill_finished_ts=recv_obj.prefill_finished_ts, -+ pd_prefill_bootstrap_queue_duration=recv_obj.pd_prefill_bootstrap_queue_duration, -+ pd_prefill_forward_duration=recv_obj.pd_prefill_forward_duration, -+ pd_prefill_transfer_queue_duration=recv_obj.pd_prefill_transfer_queue_duration, -+ pd_decode_prealloc_duration=recv_obj.pd_decode_prealloc_duration, -+ pd_decode_transfer_duration=recv_obj.pd_decode_transfer_duration, -+ pd_decode_forward_duration=recv_obj.pd_decode_forward_duration, -+ pd_bootstrap_duration=recv_obj.pd_bootstrap_duration, -+ pd_alloc_waiting_duration=recv_obj.pd_alloc_waiting_duration, -+ pd_transfer_speed_gb_s=recv_obj.pd_transfer_speed_gb_s, -+ pd_transfer_total_mb=recv_obj.pd_transfer_total_mb, -+ pd_prefill_retry_count=recv_obj.pd_prefill_retry_count, - ) - - def handle_multimodal_decode_req(self, recv_obj: BatchMultimodalDecodeReq): -diff --git a/python/sglang/srt/managers/io_struct.py b/python/sglang/srt/managers/io_struct.py -index ff17745673..f947e71d7d 100644 ---- a/python/sglang/srt/managers/io_struct.py -+++ b/python/sglang/srt/managers/io_struct.py -@@ -101,6 +101,42 @@ class RequestTimingMetricsMixin: - # This marks when the prefill computation finishes. - prefill_finished_ts: Optional[List[Optional[float]]] - -+ # --- PD disaggregation timing fields --- -+ # All fields are None when profiling is disabled or not in PD disaggregation mode. -+ -+ # P instance: duration spent in bootstrap queue before entering the wait queue. -+ pd_prefill_bootstrap_queue_duration: Optional[List[Optional[float]]] -+ -+ # P instance: duration for the actual prefill forward computation. -+ pd_prefill_forward_duration: Optional[List[Optional[float]]] -+ -+ # P instance: duration spent in the KV transfer queue. -+ pd_prefill_transfer_queue_duration: Optional[List[Optional[float]]] -+ -+ # D instance: duration waiting for KV cache slot pre-allocation. -+ pd_decode_prealloc_duration: Optional[List[Optional[float]]] -+ -+ # D instance: duration waiting for the KV cache transfer to complete. -+ pd_decode_transfer_duration: Optional[List[Optional[float]]] -+ -+ # D instance: duration for the actual decode forward computation. -+ pd_decode_forward_duration: Optional[List[Optional[float]]] -+ -+ # Bootstrap handshake duration (P and D instances). -+ pd_bootstrap_duration: Optional[List[Optional[float]]] -+ -+ # KV cache allocation waiting duration (P and D instances). -+ pd_alloc_waiting_duration: Optional[List[Optional[float]]] -+ -+ # KV cache transfer speed in GB/s. -+ pd_transfer_speed_gb_s: Optional[List[Optional[float]]] -+ -+ # Total KV cache transferred in MB. -+ pd_transfer_total_mb: Optional[List[Optional[float]]] -+ -+ # Number of prefill retries (P instance only). -+ pd_prefill_retry_count: Optional[List[Optional[int]]] -+ - - @dataclass - class SpeculativeDecodingMetricsMixin: -@@ -1403,6 +1439,20 @@ class UpdateWeightsFromIPCReqOutput(BaseReq): - message: str - - -+@dataclass -+class PostProcessWeightsReqInput(BaseReq): -+ # Whether to restore weights before loading new weights -+ restore_weights_before_load: bool = False -+ # Whether to enable quantization post-processing -+ post_process_quantization: bool = False -+ -+ -+@dataclass -+class PostProcessWeightsReqOutput(BaseReq): -+ success: bool -+ message: str -+ -+ - @dataclass - class InitWeightsSendGroupForRemoteInstanceReqOutput(BaseReq): - success: bool -@@ -1802,6 +1852,10 @@ class GetLoadReqOutput(BaseReq): - num_waiting_reqs: int - num_tokens: int - ts_tic: float -+ # Per-queue breakdown: list of {name, num_reqs, num_tokens, reqs: [{rid, seqlen, input_len, output_len}]} -+ queue_details: Optional[List[Dict[str, Any]]] = None -+ # Running batch info -+ running_details: Optional[Dict[str, Any]] = None - - - @dataclass -diff --git a/python/sglang/srt/managers/multi_tokenizer_mixin.py b/python/sglang/srt/managers/multi_tokenizer_mixin.py -index e1236aa0f3..daa598a1f6 100644 ---- a/python/sglang/srt/managers/multi_tokenizer_mixin.py -+++ b/python/sglang/srt/managers/multi_tokenizer_mixin.py -@@ -142,6 +142,39 @@ def _handle_output_by_index(output, i): - prefill_finished_ts=_extract_field_by_index( - output, "prefill_finished_ts", i - ), -+ pd_prefill_bootstrap_queue_duration=_extract_field_by_index( -+ output, "pd_prefill_bootstrap_queue_duration", i -+ ), -+ pd_prefill_forward_duration=_extract_field_by_index( -+ output, "pd_prefill_forward_duration", i -+ ), -+ pd_prefill_transfer_queue_duration=_extract_field_by_index( -+ output, "pd_prefill_transfer_queue_duration", i -+ ), -+ pd_decode_prealloc_duration=_extract_field_by_index( -+ output, "pd_decode_prealloc_duration", i -+ ), -+ pd_decode_transfer_duration=_extract_field_by_index( -+ output, "pd_decode_transfer_duration", i -+ ), -+ pd_decode_forward_duration=_extract_field_by_index( -+ output, "pd_decode_forward_duration", i -+ ), -+ pd_bootstrap_duration=_extract_field_by_index( -+ output, "pd_bootstrap_duration", i -+ ), -+ pd_alloc_waiting_duration=_extract_field_by_index( -+ output, "pd_alloc_waiting_duration", i -+ ), -+ pd_transfer_speed_gb_s=_extract_field_by_index( -+ output, "pd_transfer_speed_gb_s", i -+ ), -+ pd_transfer_total_mb=_extract_field_by_index( -+ output, "pd_transfer_total_mb", i -+ ), -+ pd_prefill_retry_count=_extract_field_by_index( -+ output, "pd_prefill_retry_count", i -+ ), - finished_reasons=_extract_field_by_index(output, "finished_reasons", i), - decoded_texts=_extract_field_by_index(output, "decoded_texts", i), - decode_ids=_extract_field_by_index(output, "decode_ids", i), -@@ -211,6 +244,50 @@ def _handle_output_by_index(output, i): - elif isinstance(output, BatchEmbeddingOutput): - new_output = BatchEmbeddingOutput( - rids=[output.rids[i]], -+ queue_time=_extract_field_by_index(output, "queue_time", i), -+ forward_entry_time=_extract_field_by_index(output, "forward_entry_time", i), -+ prefill_launch_delay=_extract_field_by_index( -+ output, "prefill_launch_delay", i -+ ), -+ prefill_launch_latency=_extract_field_by_index( -+ output, "prefill_launch_latency", i -+ ), -+ prefill_finished_ts=_extract_field_by_index( -+ output, "prefill_finished_ts", i -+ ), -+ pd_prefill_bootstrap_queue_duration=_extract_field_by_index( -+ output, "pd_prefill_bootstrap_queue_duration", i -+ ), -+ pd_prefill_forward_duration=_extract_field_by_index( -+ output, "pd_prefill_forward_duration", i -+ ), -+ pd_prefill_transfer_queue_duration=_extract_field_by_index( -+ output, "pd_prefill_transfer_queue_duration", i -+ ), -+ pd_decode_prealloc_duration=_extract_field_by_index( -+ output, "pd_decode_prealloc_duration", i -+ ), -+ pd_decode_transfer_duration=_extract_field_by_index( -+ output, "pd_decode_transfer_duration", i -+ ), -+ pd_decode_forward_duration=_extract_field_by_index( -+ output, "pd_decode_forward_duration", i -+ ), -+ pd_bootstrap_duration=_extract_field_by_index( -+ output, "pd_bootstrap_duration", i -+ ), -+ pd_alloc_waiting_duration=_extract_field_by_index( -+ output, "pd_alloc_waiting_duration", i -+ ), -+ pd_transfer_speed_gb_s=_extract_field_by_index( -+ output, "pd_transfer_speed_gb_s", i -+ ), -+ pd_transfer_total_mb=_extract_field_by_index( -+ output, "pd_transfer_total_mb", i -+ ), -+ pd_prefill_retry_count=_extract_field_by_index( -+ output, "pd_prefill_retry_count", i -+ ), - finished_reasons=_extract_field_by_index(output, "finished_reasons", i), - embeddings=_extract_field_by_index(output, "embeddings", i), - prompt_tokens=_extract_field_by_index(output, "prompt_tokens", i), -@@ -239,6 +316,39 @@ def _handle_output_by_index(output, i): - prefill_finished_ts=_extract_field_by_index( - output, "prefill_finished_ts", i - ), -+ pd_prefill_bootstrap_queue_duration=_extract_field_by_index( -+ output, "pd_prefill_bootstrap_queue_duration", i -+ ), -+ pd_prefill_forward_duration=_extract_field_by_index( -+ output, "pd_prefill_forward_duration", i -+ ), -+ pd_prefill_transfer_queue_duration=_extract_field_by_index( -+ output, "pd_prefill_transfer_queue_duration", i -+ ), -+ pd_decode_prealloc_duration=_extract_field_by_index( -+ output, "pd_decode_prealloc_duration", i -+ ), -+ pd_decode_transfer_duration=_extract_field_by_index( -+ output, "pd_decode_transfer_duration", i -+ ), -+ pd_decode_forward_duration=_extract_field_by_index( -+ output, "pd_decode_forward_duration", i -+ ), -+ pd_bootstrap_duration=_extract_field_by_index( -+ output, "pd_bootstrap_duration", i -+ ), -+ pd_alloc_waiting_duration=_extract_field_by_index( -+ output, "pd_alloc_waiting_duration", i -+ ), -+ pd_transfer_speed_gb_s=_extract_field_by_index( -+ output, "pd_transfer_speed_gb_s", i -+ ), -+ pd_transfer_total_mb=_extract_field_by_index( -+ output, "pd_transfer_total_mb", i -+ ), -+ pd_prefill_retry_count=_extract_field_by_index( -+ output, "pd_prefill_retry_count", i -+ ), - finished_reasons=_extract_field_by_index(output, "finished_reasons", i), - output_strs=_extract_field_by_index(output, "output_strs", i), - output_ids=_extract_field_by_index(output, "output_ids", i), -@@ -524,6 +634,60 @@ def monkey_patch_uvicorn_multiprocessing(timeout: float = 10): - "uvicorn.supervisors.multiprocess not found, skipping monkey patch" - ) - -+ # Fix stdin fd issue when running under Ray (or other managed -+ # environments where stdin may not be a real terminal): -+ # -+ # Uvicorn's get_subprocess() captures sys.stdin.fileno() in the parent -+ # and passes it to spawn'd children, which call os.fdopen(stdin_fileno) -+ # to re-attach stdin. This is intended for interactive debugging (e.g. -+ # pdb attach to a child worker). -+ # -+ # In Ray Actors, sys.stdin.fileno() succeeds in the parent (returns a -+ # valid fd number), but the fd is not inheritable across spawn. The -+ # child's os.fdopen() then crashes with OSError: [Errno 9] Bad file -+ # descriptor, killing every tokenizer worker. -+ # -+ # Instead of unconditionally disabling stdin passthrough, we probe -+ # whether the fd is truly usable by dup'ing it. If os.dup() fails, -+ # the fd won't survive spawn either, so we fall back to None. In a -+ # normal terminal environment os.dup() succeeds and debugging ability -+ # is preserved. -+ try: -+ import uvicorn._subprocess as _uv_sub -+ import uvicorn.supervisors.multiprocess as _uv_mp -+ -+ def _safe_get_stdin_fileno(): -+ """Return stdin fileno only if it is genuinely usable.""" -+ try: -+ fileno = sys.stdin.fileno() -+ # Verify the fd is valid and duplicable — if it isn't, -+ # spawn'd children won't be able to reopen it either. -+ dup_fd = os.dup(fileno) -+ os.close(dup_fd) -+ return fileno -+ except (AttributeError, OSError): -+ return None -+ -+ def _patched_get_subprocess(config, target, sockets): -+ stdin_fileno = _safe_get_stdin_fileno() -+ kwargs = { -+ "config": config, -+ "target": target, -+ "sockets": sockets, -+ "stdin_fileno": stdin_fileno, -+ } -+ return _uv_sub.spawn.Process( -+ target=_uv_sub.subprocess_started, kwargs=kwargs -+ ) -+ -+ # Must patch both: the supervisor module caches its own reference -+ # to get_subprocess at import time via -+ # ``from uvicorn._subprocess import get_subprocess``. -+ _uv_sub.get_subprocess = _patched_get_subprocess -+ _uv_mp.get_subprocess = _patched_get_subprocess -+ except Exception: -+ pass -+ - - class SenderWrapper: - def __init__(self, port_args: PortArgs, send_to_scheduler: zmq.Socket): -diff --git a/python/sglang/srt/managers/schedule_batch.py b/python/sglang/srt/managers/schedule_batch.py -index c079957980..dd8ca7167d 100644 ---- a/python/sglang/srt/managers/schedule_batch.py -+++ b/python/sglang/srt/managers/schedule_batch.py -@@ -1869,7 +1869,10 @@ class ScheduleBatch(ScheduleBatchDisaggregationDecodeMixin): - while first_iter or ( - not self.check_decode_mem(selected_indices=sorted_indices) - ): -- if len(sorted_indices) == 1: -+ # We should allow all requests to be retracted in decode disaggregation mode -+ # because there call be prealloc prefill requests. -+ num_minimum_reqs = 0 if server_args.disaggregation_mode == "decode" else 1 -+ if len(sorted_indices) == num_minimum_reqs: - # Always keep at least one request - break - -diff --git a/python/sglang/srt/managers/scheduler.py b/python/sglang/srt/managers/scheduler.py -index a9ff0ac94b..a50dd5122b 100644 ---- a/python/sglang/srt/managers/scheduler.py -+++ b/python/sglang/srt/managers/scheduler.py -@@ -114,6 +114,7 @@ from sglang.srt.managers.io_struct import ( - OpenSessionReqInput, - OpenSessionReqOutput, - PauseGenerationReqInput, -+ PostProcessWeightsReqInput, - ProfileReq, - ReleaseMemoryOccupationReqInput, - ResumeMemoryOccupationReqInput, -@@ -1063,6 +1064,7 @@ class Scheduler( - ), - (UpdateWeightsFromTensorReqInput, self.update_weights_from_tensor), - (UpdateWeightsFromIPCReqInput, self.update_weights_from_ipc), -+ (PostProcessWeightsReqInput, self.post_process_weights), - (GetWeightsByNameReqInput, self.get_weights_by_name), - (ReleaseMemoryOccupationReqInput, self.release_memory_occupation), - (ResumeMemoryOccupationReqInput, self.resume_memory_occupation), -diff --git a/python/sglang/srt/managers/scheduler_metrics_mixin.py b/python/sglang/srt/managers/scheduler_metrics_mixin.py -index 30b2732b9f..68090b1617 100644 ---- a/python/sglang/srt/managers/scheduler_metrics_mixin.py -+++ b/python/sglang/srt/managers/scheduler_metrics_mixin.py -@@ -609,12 +609,54 @@ class SchedulerMetricsMixin: - num_tokens += sum(req.seqlen for queue in waiting_queues for req in queue) - num_waiting_reqs = sum(len(queue) for queue in waiting_queues) - -+ # Collect per-queue details -+ queue_names = ["waiting_queue"] -+ if self.disaggregation_mode == DisaggregationMode.PREFILL: -+ queue_names.append("bootstrap_queue") -+ elif self.disaggregation_mode == DisaggregationMode.DECODE: -+ queue_names.append("prealloc_queue") -+ queue_names.append("transfer_queue") -+ queue_names.append("retracted_queue") -+ -+ queue_details = [] -+ for name, queue in zip(queue_names, waiting_queues): -+ reqs_info = [] -+ for req in queue: -+ reqs_info.append( -+ { -+ "seqlen": req.seqlen, -+ } -+ ) -+ queue_details.append( -+ { -+ "name": name, -+ "num_reqs": len(queue), -+ "num_tokens": sum(r["seqlen"] for r in reqs_info), -+ "reqs": reqs_info, -+ } -+ ) -+ -+ # Collect running batch details -+ running_reqs_info = [] -+ for req in self.running_batch.reqs: -+ running_reqs_info.append( -+ { -+ "seqlen": req.seqlen, -+ } -+ ) -+ running_details = { -+ "num_reqs": len(self.running_batch.reqs), -+ "reqs": running_reqs_info, -+ } -+ - return GetLoadReqOutput( - dp_rank=self.dp_rank, - num_reqs=len(self.running_batch.reqs) + num_waiting_reqs, - num_waiting_reqs=num_waiting_reqs, - num_tokens=num_tokens, - ts_tic=time.perf_counter(), -+ queue_details=queue_details, -+ running_details=running_details, - ) - - def get_loads(self: Scheduler, req: GetLoadsReqInput = None) -> GetLoadsReqOutput: -diff --git a/python/sglang/srt/managers/scheduler_output_processor_mixin.py b/python/sglang/srt/managers/scheduler_output_processor_mixin.py -index 482bc6ca66..fbc4864176 100644 ---- a/python/sglang/srt/managers/scheduler_output_processor_mixin.py -+++ b/python/sglang/srt/managers/scheduler_output_processor_mixin.py -@@ -922,6 +922,18 @@ class SchedulerOutputProcessorMixin: - prefill_launch_delays = [] - prefill_launch_latencies = [] - prefill_finished_timestamps = [] -+ profiling_enabled = envs.SLIME_ENABLE_PROFILING.get() -+ pd_prefill_bootstrap_queue_durations = [] if profiling_enabled else None -+ pd_prefill_forward_durations = [] if profiling_enabled else None -+ pd_prefill_transfer_queue_durations = [] if profiling_enabled else None -+ pd_decode_prealloc_durations = [] if profiling_enabled else None -+ pd_decode_transfer_durations = [] if profiling_enabled else None -+ pd_decode_forward_durations = [] if profiling_enabled else None -+ pd_bootstrap_durations = [] if profiling_enabled else None -+ pd_alloc_waiting_durations = [] if profiling_enabled else None -+ pd_transfer_speeds_gb_s = [] if profiling_enabled else None -+ pd_transfer_totals_mb = [] if profiling_enabled else None -+ pd_prefill_retry_counts = [] if profiling_enabled else None - - if return_logprob: - input_token_logprobs_val = [] -@@ -1037,6 +1049,40 @@ class SchedulerOutputProcessorMixin: - prefill_finished_timestamps.append( - req.time_stats.get_prefill_finished_ts() - ) -+ if profiling_enabled: -+ pd_prefill_bootstrap_queue_durations.append( -+ req.time_stats.get_pd_prefill_bootstrap_queue_duration() -+ ) -+ pd_prefill_forward_durations.append( -+ req.time_stats.get_pd_prefill_forward_duration() -+ ) -+ pd_prefill_transfer_queue_durations.append( -+ req.time_stats.get_pd_prefill_transfer_queue_duration() -+ ) -+ pd_decode_prealloc_durations.append( -+ req.time_stats.get_pd_decode_prealloc_duration() -+ ) -+ pd_decode_transfer_durations.append( -+ req.time_stats.get_pd_decode_transfer_duration() -+ ) -+ pd_decode_forward_durations.append( -+ req.time_stats.get_pd_decode_forward_duration() -+ ) -+ pd_bootstrap_durations.append( -+ req.time_stats.get_pd_bootstrap_duration() -+ ) -+ pd_alloc_waiting_durations.append( -+ req.time_stats.get_pd_alloc_waiting_duration() -+ ) -+ pd_transfer_speeds_gb_s.append( -+ req.time_stats.get_pd_transfer_speed_gb_s() -+ ) -+ pd_transfer_totals_mb.append( -+ req.time_stats.get_pd_transfer_total_mb() -+ ) -+ pd_prefill_retry_counts.append( -+ req.time_stats.get_pd_prefill_retry_count() -+ ) - - if not self.spec_algorithm.is_none(): - spec_verify_ct.append(req.spec_verify_ct) -@@ -1134,7 +1180,7 @@ class SchedulerOutputProcessorMixin: - req.log_time_stats() - - # Send to detokenizer -- if reqs or is_idle_batch: -+ if rids or is_idle_batch: - if self.model_config.is_multimodal_gen: - return - self.send_to_detokenizer.send_output( -@@ -1149,6 +1195,17 @@ class SchedulerOutputProcessorMixin: - prefill_launch_delay=prefill_launch_delays, - prefill_launch_latency=prefill_launch_latencies, - prefill_finished_ts=prefill_finished_timestamps, -+ pd_prefill_bootstrap_queue_duration=pd_prefill_bootstrap_queue_durations, -+ pd_prefill_forward_duration=pd_prefill_forward_durations, -+ pd_prefill_transfer_queue_duration=pd_prefill_transfer_queue_durations, -+ pd_decode_prealloc_duration=pd_decode_prealloc_durations, -+ pd_decode_transfer_duration=pd_decode_transfer_durations, -+ pd_decode_forward_duration=pd_decode_forward_durations, -+ pd_bootstrap_duration=pd_bootstrap_durations, -+ pd_alloc_waiting_duration=pd_alloc_waiting_durations, -+ pd_transfer_speed_gb_s=pd_transfer_speeds_gb_s, -+ pd_transfer_total_mb=pd_transfer_totals_mb, -+ pd_prefill_retry_count=pd_prefill_retry_counts, - finished_reasons=finished_reasons, - decoded_texts=decoded_texts, - decode_ids=decode_ids_list, -@@ -1198,6 +1255,18 @@ class SchedulerOutputProcessorMixin: - prefill_launch_delays = [] - prefill_launch_latencies = [] - prefill_finished_timestamps = [] -+ profiling_enabled = envs.SLIME_ENABLE_PROFILING.get() -+ pd_prefill_bootstrap_queue_durations = [] if profiling_enabled else None -+ pd_prefill_forward_durations = [] if profiling_enabled else None -+ pd_prefill_transfer_queue_durations = [] if profiling_enabled else None -+ pd_decode_prealloc_durations = [] if profiling_enabled else None -+ pd_decode_transfer_durations = [] if profiling_enabled else None -+ pd_decode_forward_durations = [] if profiling_enabled else None -+ pd_bootstrap_durations = [] if profiling_enabled else None -+ pd_alloc_waiting_durations = [] if profiling_enabled else None -+ pd_transfer_speeds_gb_s = [] if profiling_enabled else None -+ pd_transfer_totals_mb = [] if profiling_enabled else None -+ pd_prefill_retry_counts = [] if profiling_enabled else None - retraction_counts = [] - for req in reqs: - if req.finished(): -@@ -1221,6 +1290,40 @@ class SchedulerOutputProcessorMixin: - prefill_finished_timestamps.append( - req.time_stats.get_prefill_finished_ts() - ) -+ if profiling_enabled: -+ pd_prefill_bootstrap_queue_durations.append( -+ req.time_stats.get_pd_prefill_bootstrap_queue_duration() -+ ) -+ pd_prefill_forward_durations.append( -+ req.time_stats.get_pd_prefill_forward_duration() -+ ) -+ pd_prefill_transfer_queue_durations.append( -+ req.time_stats.get_pd_prefill_transfer_queue_duration() -+ ) -+ pd_decode_prealloc_durations.append( -+ req.time_stats.get_pd_decode_prealloc_duration() -+ ) -+ pd_decode_transfer_durations.append( -+ req.time_stats.get_pd_decode_transfer_duration() -+ ) -+ pd_decode_forward_durations.append( -+ req.time_stats.get_pd_decode_forward_duration() -+ ) -+ pd_bootstrap_durations.append( -+ req.time_stats.get_pd_bootstrap_duration() -+ ) -+ pd_alloc_waiting_durations.append( -+ req.time_stats.get_pd_alloc_waiting_duration() -+ ) -+ pd_transfer_speeds_gb_s.append( -+ req.time_stats.get_pd_transfer_speed_gb_s() -+ ) -+ pd_transfer_totals_mb.append( -+ req.time_stats.get_pd_transfer_total_mb() -+ ) -+ pd_prefill_retry_counts.append( -+ req.time_stats.get_pd_prefill_retry_count() -+ ) - retraction_counts.append(req.retraction_count) - self.send_to_detokenizer.send_output( - BatchEmbeddingOutput( -@@ -1231,6 +1334,17 @@ class SchedulerOutputProcessorMixin: - prefill_launch_delay=prefill_launch_delays, - prefill_launch_latency=prefill_launch_latencies, - prefill_finished_ts=prefill_finished_timestamps, -+ pd_prefill_bootstrap_queue_duration=pd_prefill_bootstrap_queue_durations, -+ pd_prefill_forward_duration=pd_prefill_forward_durations, -+ pd_prefill_transfer_queue_duration=pd_prefill_transfer_queue_durations, -+ pd_decode_prealloc_duration=pd_decode_prealloc_durations, -+ pd_decode_transfer_duration=pd_decode_transfer_durations, -+ pd_decode_forward_duration=pd_decode_forward_durations, -+ pd_bootstrap_duration=pd_bootstrap_durations, -+ pd_alloc_waiting_duration=pd_alloc_waiting_durations, -+ pd_transfer_speed_gb_s=pd_transfer_speeds_gb_s, -+ pd_transfer_total_mb=pd_transfer_totals_mb, -+ pd_prefill_retry_count=pd_prefill_retry_counts, - finished_reasons=finished_reasons, - embeddings=embeddings, - prompt_tokens=prompt_tokens, -diff --git a/python/sglang/srt/managers/scheduler_profiler_mixin.py b/python/sglang/srt/managers/scheduler_profiler_mixin.py -index 7d08f12b35..afc045da20 100644 ---- a/python/sglang/srt/managers/scheduler_profiler_mixin.py -+++ b/python/sglang/srt/managers/scheduler_profiler_mixin.py -@@ -347,7 +347,7 @@ class SchedulerProfilerMixin: - if self.profiler_prefill_ct > self.profiler_target_prefill_ct: - if self.profile_in_progress: - self.stop_profile(stage=ForwardMode.EXTEND) -- elif batch.forward_mode.is_decode(): -+ elif batch.forward_mode.is_decode() or batch.forward_mode.is_prebuilt(): - if self.profiler_decode_ct == 0: - if self.profile_in_progress: - # force trace flush -diff --git a/python/sglang/srt/managers/scheduler_update_weights_mixin.py b/python/sglang/srt/managers/scheduler_update_weights_mixin.py -index 293a843508..244ea4eb1b 100644 ---- a/python/sglang/srt/managers/scheduler_update_weights_mixin.py -+++ b/python/sglang/srt/managers/scheduler_update_weights_mixin.py -@@ -12,6 +12,7 @@ from sglang.srt.constants import ( - GPU_MEMORY_TYPE_KV_CACHE, - GPU_MEMORY_TYPE_WEIGHTS, - ) -+from sglang.srt.disaggregation.utils import DisaggregationMode - from sglang.srt.managers.io_struct import ( - CheckWeightsReqInput, - CheckWeightsReqOutput, -@@ -21,6 +22,8 @@ from sglang.srt.managers.io_struct import ( - GetWeightsByNameReqOutput, - InitWeightsUpdateGroupReqInput, - InitWeightsUpdateGroupReqOutput, -+ PostProcessWeightsReqInput, -+ PostProcessWeightsReqOutput, - ReleaseMemoryOccupationReqInput, - ReleaseMemoryOccupationReqOutput, - ResumeMemoryOccupationReqInput, -@@ -114,6 +117,11 @@ class SchedulerUpdateWeightsMixin: - torch.distributed.barrier(group=self.tp_cpu_group) - return UpdateWeightsFromIPCReqOutput(success, message) - -+ def post_process_weights(self, recv_req: PostProcessWeightsReqInput): -+ """Optional post-processing for updated weights (e.g., Marlin conversion).""" -+ success, message = self.tp_worker.post_process_weights(recv_req) -+ return PostProcessWeightsReqOutput(success, message) -+ - def get_weights_by_name(self: Scheduler, recv_req: GetWeightsByNameReqInput): - parameter = self.tp_worker.get_weights_by_name(recv_req) - return GetWeightsByNameReqOutput(parameter) -@@ -137,6 +145,15 @@ class SchedulerUpdateWeightsMixin: - self.memory_saver_adapter.pause(GPU_MEMORY_TYPE_KV_CACHE) - self.flush_cache() - -+ if self.disaggregation_mode == DisaggregationMode.DECODE: -+ if hasattr(self, "disagg_decode_transfer_queue"): -+ self.disagg_decode_transfer_queue.release_memory_occupation() -+ if hasattr(self, "disagg_decode_prealloc_queue"): -+ self.disagg_decode_prealloc_queue.release_memory_occupation() -+ elif self.disaggregation_mode == DisaggregationMode.PREFILL: -+ if hasattr(self, "disagg_prefill_bootstrap_queue"): -+ self.disagg_prefill_bootstrap_queue.release_memory_occupation() -+ - if GPU_MEMORY_TYPE_WEIGHTS in tags: - self.stashed_model_static_state = _export_static_state( - self.tp_worker.model_runner.model -@@ -177,6 +194,15 @@ class SchedulerUpdateWeightsMixin: - if GPU_MEMORY_TYPE_KV_CACHE in tags: - self.memory_saver_adapter.resume(GPU_MEMORY_TYPE_KV_CACHE) - -+ if self.disaggregation_mode == DisaggregationMode.DECODE: -+ if hasattr(self, "disagg_decode_transfer_queue"): -+ self.disagg_decode_transfer_queue.resume_memory_occupation() -+ if hasattr(self, "disagg_decode_prealloc_queue"): -+ self.disagg_decode_prealloc_queue.resume_memory_occupation() -+ elif self.disaggregation_mode == DisaggregationMode.PREFILL: -+ if hasattr(self, "disagg_prefill_bootstrap_queue"): -+ self.disagg_prefill_bootstrap_queue.resume_memory_occupation() -+ - return ResumeMemoryOccupationReqOutput() - - def check_weights(self: Scheduler, recv_req: CheckWeightsReqInput): -diff --git a/python/sglang/srt/managers/tokenizer_communicator_mixin.py b/python/sglang/srt/managers/tokenizer_communicator_mixin.py -index f2ffa9909d..6e4d1d460b 100644 ---- a/python/sglang/srt/managers/tokenizer_communicator_mixin.py -+++ b/python/sglang/srt/managers/tokenizer_communicator_mixin.py -@@ -59,6 +59,8 @@ from sglang.srt.managers.io_struct import ( - LoadLoRAAdapterReqOutput, - LoRAUpdateOutput, - OpenSessionReqInput, -+ PostProcessWeightsReqInput, -+ PostProcessWeightsReqOutput, - ProfileReq, - ProfileReqOutput, - ProfileReqType, -@@ -187,6 +189,9 @@ class TokenizerCommunicatorMixin: - self.update_weights_from_ipc_communicator = _Communicator( - self.send_to_scheduler, server_args.dp_size - ) -+ self.post_process_weights_communicator = _Communicator( -+ self.send_to_scheduler, server_args.dp_size -+ ) - self.get_weights_by_name_communicator = _Communicator( - self.send_to_scheduler, server_args.dp_size - ) -@@ -272,6 +277,10 @@ class TokenizerCommunicatorMixin: - UpdateWeightsFromIPCReqOutput, - self.update_weights_from_ipc_communicator.handle_recv, - ), -+ ( -+ PostProcessWeightsReqOutput, -+ self.post_process_weights_communicator.handle_recv, -+ ), - ( - GetWeightsByNameReqOutput, - self.get_weights_by_name_communicator.handle_recv, -@@ -522,6 +531,17 @@ class TokenizerCommunicatorMixin: - - return success, message - -+ async def post_process_weights( -+ self: TokenizerManager, -+ obj: PostProcessWeightsReqInput, -+ request: Optional[fastapi.Request] = None, -+ ) -> Tuple[bool, str]: -+ """Trigger post-processing hooks for weights after loading (e.g., Marlin conversion).""" -+ self.auto_create_handle_loop() -+ async with self.model_update_lock.writer_lock: -+ results = await self.post_process_weights_communicator(obj) -+ return _Communicator.merge_results(results) -+ - async def init_weights_send_group_for_remote_instance( - self, - obj: InitWeightsSendGroupForRemoteInstanceReqInput, -diff --git a/python/sglang/srt/managers/tokenizer_manager.py b/python/sglang/srt/managers/tokenizer_manager.py -index 0914a5230b..9114e3e713 100644 ---- a/python/sglang/srt/managers/tokenizer_manager.py -+++ b/python/sglang/srt/managers/tokenizer_manager.py -@@ -1327,7 +1327,7 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi - async with self.is_pause_cond: - self.is_pause = True - if obj.mode != "abort": -- await self.send_to_scheduler.send_pyobj(obj) -+ self.send_to_scheduler.send_pyobj(obj) - else: - # we are using the model_update_lock to check if there is still on-going requests. - while True: -@@ -1341,7 +1341,7 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi - async def continue_generation(self, obj: ContinueGenerationReqInput): - async with self.is_pause_cond: - self.is_pause = False -- await self.send_to_scheduler.send_pyobj(obj) -+ self.send_to_scheduler.send_pyobj(obj) - self.is_pause_cond.notify_all() - - async def update_weights_from_disk( -@@ -1510,6 +1510,40 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi - self._add_metric_if_present( - recv_obj, "prefill_finished_ts", meta_info, i - ) -+ # PD disaggregation timing -+ self._add_metric_if_present( -+ recv_obj, "pd_prefill_bootstrap_queue_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_prefill_forward_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_prefill_transfer_queue_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_decode_prealloc_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_decode_transfer_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_decode_forward_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_bootstrap_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_alloc_waiting_duration", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_transfer_speed_gb_s", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_transfer_total_mb", meta_info, i -+ ) -+ self._add_metric_if_present( -+ recv_obj, "pd_prefill_retry_count", meta_info, i -+ ) - - if getattr(state.obj, "return_logprob", False): - self.convert_logprob_style( -@@ -1955,19 +1989,17 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi - if custom_labels - else self.metrics_collector.labels - ) -- if ( -- state.first_token_time == 0.0 -- and self.disaggregation_mode != DisaggregationMode.PREFILL -- ): -+ if state.first_token_time == 0.0: - state.first_token_time = state.last_time = time.time() - state.first_token_time_perf = time.perf_counter() - state.last_completion_tokens = completion_tokens -- self.metrics_collector.observe_time_to_first_token( -- labels, state.first_token_time - state.created_time -- ) -+ if self.disaggregation_mode != DisaggregationMode.PREFILL: -+ self.metrics_collector.observe_time_to_first_token( -+ labels, state.first_token_time - state.created_time -+ ) - else: - num_new_tokens = completion_tokens - state.last_completion_tokens -- if num_new_tokens: -+ if num_new_tokens > 0: - new_time = time.time() - interval = new_time - state.last_time - self.metrics_collector.observe_inter_token_latency( -@@ -1976,7 +2008,7 @@ class TokenizerManager(TokenizerCommunicatorMixin, TokenizerManagerMultiItemMixi - num_new_tokens, - ) - state.last_time = new_time -- state.last_completion_tokens = completion_tokens -+ state.last_completion_tokens = completion_tokens - - if state.finished: - retraction_count = ( -diff --git a/python/sglang/srt/managers/tp_worker.py b/python/sglang/srt/managers/tp_worker.py -index 86b009df4e..16ebd52ae3 100644 ---- a/python/sglang/srt/managers/tp_worker.py -+++ b/python/sglang/srt/managers/tp_worker.py -@@ -29,6 +29,7 @@ from sglang.srt.managers.io_struct import ( - InitWeightsUpdateGroupReqInput, - LoadLoRAAdapterFromTensorsReqInput, - LoadLoRAAdapterReqInput, -+ PostProcessWeightsReqInput, - SendWeightsToRemoteInstanceReqInput, - UnloadLoRAAdapterReqInput, - UpdateWeightFromDiskReqInput, -@@ -168,6 +169,11 @@ class BaseTpWorker(ABC): - success, message = self.model_runner.update_weights_from_ipc(recv_req) - return success, message - -+ def post_process_weights(self, recv_req: PostProcessWeightsReqInput): -+ """Perform optional post-processing on the updated model weights (e.g., Marlin conversion).""" -+ success, message = self.model_runner.post_process_weights(recv_req) -+ return success, message -+ - def get_weights_by_name(self, recv_req: GetWeightsByNameReqInput): - parameter = self.model_runner.get_weights_by_name( - recv_req.name, recv_req.truncate_size -diff --git a/python/sglang/srt/mem_cache/allocator.py b/python/sglang/srt/mem_cache/allocator.py -index fa08bb66a4..22c1c2a127 100644 ---- a/python/sglang/srt/mem_cache/allocator.py -+++ b/python/sglang/srt/mem_cache/allocator.py -@@ -411,7 +411,7 @@ class PagedTokenToKVPoolAllocator(BaseTokenToKVPoolAllocator): - - self.seen_max_num_extend_tokens_next_power_of_2 = max( - self.seen_max_num_extend_tokens_next_power_of_2, -- min(tl.core.TRITON_MAX_TENSOR_NUMEL, next_power_of_2(extend_num_tokens)), -+ min(65536, next_power_of_2(extend_num_tokens)), - ) - - bs = len(prefix_lens) -@@ -424,7 +424,7 @@ class PagedTokenToKVPoolAllocator(BaseTokenToKVPoolAllocator): - (extend_num_tokens,), dtype=torch.int64, device=self.device - ) - -- if extend_num_tokens < tl.core.TRITON_MAX_TENSOR_NUMEL: -+ if extend_num_tokens < 65536: - alloc_extend_kernel[(bs,)]( - prefix_lens, - seq_lens, -diff --git a/python/sglang/srt/mem_cache/hiradix_cache.py b/python/sglang/srt/mem_cache/hiradix_cache.py -index d7cd472a98..9cf1185cbb 100644 ---- a/python/sglang/srt/mem_cache/hiradix_cache.py -+++ b/python/sglang/srt/mem_cache/hiradix_cache.py -@@ -750,9 +750,8 @@ class HiRadixCache(RadixCache): - self._update_leaf_status(node) - self._update_host_leaf_status(node) - if node.parent is None: -- assert ( -- node is self.root_node -- ), f"This request holds the node from another tree" -+ # Node belongs to a stale (flushed) tree — stop traversal gracefully. -+ break - node = node.parent - return delta - -@@ -827,6 +826,7 @@ class HiRadixCache(RadixCache): - self._update_host_leaf_status(node) - # update leaf status for the parent because the node is evicted - self._update_leaf_status(node.parent) -+ self._update_host_leaf_status(node.parent) - return num_evicted - - def _evict_regular(self, node: TreeNode): -@@ -1330,6 +1330,7 @@ class HiRadixCache(RadixCache): - self._update_host_leaf_status(node) - # update parent status as a new leaf is added into device - self._update_leaf_status(node.parent) -+ self._update_host_leaf_status(node.parent) - else: - self._inc_hit_count(node, chunked) - total_prefix_length += prefix_len -@@ -1345,6 +1346,7 @@ class HiRadixCache(RadixCache): - self._update_host_leaf_status(new_node) - # update parent status as a new leaf is added into device - self._update_leaf_status(new_node.parent) -+ self._update_host_leaf_status(new_node.parent) - else: - self._inc_hit_count(new_node, chunked) - total_prefix_length += prefix_len -diff --git a/python/sglang/srt/mem_cache/memory_pool.py b/python/sglang/srt/mem_cache/memory_pool.py -index 1d917137c6..669e5c5181 100644 ---- a/python/sglang/srt/mem_cache/memory_pool.py -+++ b/python/sglang/srt/mem_cache/memory_pool.py -@@ -1777,9 +1777,12 @@ class NSATokenToKVPool(MLATokenToKVPool): - else: - assert self.page_size == 64 - with ( -- torch.cuda.use_mem_pool(self.custom_mem_pool) -- if self.custom_mem_pool -- else nullcontext() -+ ( -+ torch.cuda.use_mem_pool(self.custom_mem_pool) -+ if self.custom_mem_pool -+ else nullcontext() -+ ), -+ self.memory_saver_adapter.region(GPU_MEMORY_TYPE_KV_CACHE), - ): - self.index_k_with_scale_buffer = [ - torch.zeros( -@@ -1801,6 +1804,11 @@ class NSATokenToKVPool(MLATokenToKVPool): - ) - for _ in range(layer_num) - ] -+ self.index_k_with_scale_buffer_ptrs = torch.tensor( -+ [x.data_ptr() for x in self.index_k_with_scale_buffer], -+ dtype=torch.uint64, -+ device=self.device, -+ ) - self._finalize_allocation_log(size) - - def get_index_k_with_scale_buffer(self, layer_id: int) -> torch.Tensor: -@@ -1876,6 +1884,50 @@ class NSATokenToKVPool(MLATokenToKVPool): - ] - return data_ptrs, data_lens, item_lens - -+ def get_cpu_copy(self, indices): -+ # First, save the kv_buffer (inherited from MLATokenToKVPool) -+ kv_cache_cpu = super().get_cpu_copy(indices) -+ -+ # Additionally, save the index_k_with_scale_buffer (page-indexed) -+ page_indices = indices[:: self.page_size] // self.page_size -+ torch.cuda.synchronize() -+ index_k_cpu = [] -+ chunk_size = self.cpu_offloading_chunk_size -+ # Convert chunk_size from token-level to page-level -+ page_chunk_size = max(1, chunk_size // self.page_size) -+ for layer_id in range(self.layer_num): -+ index_k_cpu.append([]) -+ for i in range(0, len(page_indices), page_chunk_size): -+ chunk_page_indices = page_indices[i : i + page_chunk_size] -+ idx_cpu = self.index_k_with_scale_buffer[layer_id][ -+ chunk_page_indices -+ ].to("cpu", non_blocking=True) -+ index_k_cpu[-1].append(idx_cpu) -+ torch.cuda.synchronize() -+ -+ return {"kv": kv_cache_cpu, "index_k": index_k_cpu} -+ -+ def load_cpu_copy(self, kv_cache_cpu_dict, indices): -+ # Restore the kv_buffer (inherited from MLATokenToKVPool) -+ super().load_cpu_copy(kv_cache_cpu_dict["kv"], indices) -+ -+ # Restore the index_k_with_scale_buffer (page-indexed) -+ page_indices = indices[:: self.page_size] // self.page_size -+ index_k_cpu = kv_cache_cpu_dict["index_k"] -+ torch.cuda.synchronize() -+ chunk_size = self.cpu_offloading_chunk_size -+ page_chunk_size = max(1, chunk_size // self.page_size) -+ for layer_id in range(self.layer_num): -+ for i in range(0, len(page_indices), page_chunk_size): -+ chunk_page_indices = page_indices[i : i + page_chunk_size] -+ idx_cpu = index_k_cpu[layer_id][i // page_chunk_size] -+ assert idx_cpu.shape[0] == len(chunk_page_indices) -+ idx_chunk = idx_cpu.to( -+ self.index_k_with_scale_buffer[0].device, non_blocking=True -+ ) -+ self.index_k_with_scale_buffer[layer_id][chunk_page_indices] = idx_chunk -+ torch.cuda.synchronize() -+ - def get_kv_size_bytes(self): - kv_size_bytes = super().get_kv_size_bytes() - for index_k_cache in self.index_k_with_scale_buffer: -diff --git a/python/sglang/srt/mem_cache/radix_cache.py b/python/sglang/srt/mem_cache/radix_cache.py -index 42b169728a..8e799196a4 100644 ---- a/python/sglang/srt/mem_cache/radix_cache.py -+++ b/python/sglang/srt/mem_cache/radix_cache.py -@@ -495,7 +495,17 @@ class RadixCache(BasePrefixCache): - if self.disable: - return - -- token_ids = req.fill_ids -+ # Limit to kv_committed_len to avoid including tokens (e.g., the just-generated -+ # token in disagg prefill) that don't have computed KV yet. If fill_ids is longer -+ # than kv_committed_len, the extra tokens would produce stale values (0 from -+ # req_to_token_pool initialization), leading to spurious tree nodes and memory -+ # leak when page-aligned token counts happen to cross a page boundary. -+ kv_committed_len = req.kv_committed_len -+ token_ids = ( -+ req.fill_ids[:kv_committed_len] -+ if kv_committed_len < len(req.fill_ids) -+ else req.fill_ids -+ ) - kv_indices = self.req_to_token_pool.req_to_token[ - req.req_pool_idx, : len(token_ids) - ] -@@ -619,9 +629,8 @@ class RadixCache(BasePrefixCache): - node.lock_ref -= 1 - self._update_leaf_status(node) - if node.parent is None: -- assert ( -- node is self.root_node -- ), f"This request holds the node from another tree" -+ # Node belongs to a stale (flushed) tree — stop traversal gracefully. -+ break - node = node.parent - return delta - -diff --git a/python/sglang/srt/metrics/collector.py b/python/sglang/srt/metrics/collector.py -index 255d41ccc0..f93bedb4dc 100644 ---- a/python/sglang/srt/metrics/collector.py -+++ b/python/sglang/srt/metrics/collector.py -@@ -20,7 +20,10 @@ import time - from dataclasses import dataclass, field - from typing import Any, Dict, List, Optional, Union - --from sglang.srt.disaggregation.utils import DisaggregationMode -+from sglang.srt.disaggregation.utils import ( -+ DisaggregationMode, -+ is_slime_profiling_enabled, -+) - from sglang.srt.environ import envs - from sglang.srt.metrics.utils import exponential_buckets, generate_buckets - from sglang.srt.model_executor.forward_batch_info import ForwardMode -@@ -77,6 +80,17 @@ class TimeStats: - # Number of prefill retries for this request - prefill_retry_count: int = 0 - -+ # Prefill-side durations forwarded via metadata transfer from P to D instance. -+ # Set on the decode instance after KV cache transfer completes. -+ fwd_prefill_bootstrap_queue_duration: Optional[float] = None -+ fwd_prefill_forward_duration: Optional[float] = None -+ fwd_prefill_transfer_queue_duration: Optional[float] = None -+ fwd_bootstrap_duration: Optional[float] = None -+ fwd_alloc_waiting_duration: Optional[float] = None -+ fwd_transfer_speed_gb_s: Optional[float] = None -+ fwd_transfer_total_mb: Optional[float] = None -+ fwd_prefill_retry_count: Optional[int] = None -+ - # Timestamp when prefill phase finishes, obtained from `time.time()`. - # Note that this differs from the other `_time` fields tracked by the - # `TimeStats` class, which are obtained from `time.perf_counter()`. -@@ -102,6 +116,148 @@ class TimeStats: - return self.prefill_finished_ts - return None - -+ # --- PD disaggregation timing getters --- -+ -+ def get_pd_prefill_bootstrap_queue_duration(self) -> Optional[float]: -+ """P instance: time spent in bootstrap queue before entering the wait queue.""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_bootstrap_queue_duration is not None: -+ return self.fwd_prefill_bootstrap_queue_duration -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.prefill_bootstrap_queue_entry_time > 0.0 -+ and self.wait_queue_entry_time > 0.0 -+ ): -+ return self.wait_queue_entry_time - self.prefill_bootstrap_queue_entry_time -+ return None -+ -+ def get_pd_prefill_forward_duration(self) -> Optional[float]: -+ """P instance: time for the actual prefill forward computation.""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_forward_duration is not None: -+ return self.fwd_prefill_forward_duration -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.forward_entry_time > 0.0 -+ and self.completion_time > 0.0 -+ ): -+ return self.completion_time - self.forward_entry_time -+ return None -+ -+ def get_pd_prefill_transfer_queue_duration(self) -> Optional[float]: -+ """P instance: time spent in the transfer queue (KV cache send).""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_transfer_queue_duration is not None: -+ return self.fwd_prefill_transfer_queue_duration -+ if ( -+ self.disagg_mode == DisaggregationMode.PREFILL -+ and self.prefill_transfer_queue_entry_time > 0.0 -+ and self.completion_time > 0.0 -+ ): -+ return self.completion_time - self.prefill_transfer_queue_entry_time -+ return None -+ -+ def get_pd_decode_prealloc_duration(self) -> Optional[float]: -+ """D instance: time spent in the pre-alloc queue (waiting for KV cache slot allocation).""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.decode_prealloc_queue_entry_time > 0.0 -+ and self.decode_transfer_queue_entry_time > 0.0 -+ ): -+ return ( -+ self.decode_transfer_queue_entry_time -+ - self.decode_prealloc_queue_entry_time -+ ) -+ return None -+ -+ def get_pd_decode_transfer_duration(self) -> Optional[float]: -+ """D instance: time spent waiting for KV cache transfer to complete.""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.decode_transfer_queue_entry_time > 0.0 -+ and self.wait_queue_entry_time > 0.0 -+ ): -+ return self.wait_queue_entry_time - self.decode_transfer_queue_entry_time -+ return None -+ -+ def get_pd_decode_forward_duration(self) -> Optional[float]: -+ """D instance: time for the actual decode forward computation.""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if ( -+ self.disagg_mode == DisaggregationMode.DECODE -+ and self.forward_entry_time > 0.0 -+ and self.completion_time > 0.0 -+ ): -+ return self.completion_time - self.forward_entry_time -+ return None -+ -+ def get_pd_bootstrap_duration(self) -> Optional[float]: -+ """Bootstrap handshake duration (both P and D instances).""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_bootstrap_duration is not None: -+ return self.fwd_bootstrap_duration -+ if ( -+ self.disagg_mode != DisaggregationMode.NULL -+ and self.bootstrap_duration > 0.0 -+ ): -+ return self.bootstrap_duration -+ return None -+ -+ def get_pd_alloc_waiting_duration(self) -> Optional[float]: -+ """KV cache allocation waiting duration (both P and D instances).""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_alloc_waiting_duration is not None: -+ return self.fwd_alloc_waiting_duration -+ if ( -+ self.disagg_mode != DisaggregationMode.NULL -+ and self.alloc_waiting_duration > 0.0 -+ ): -+ return self.alloc_waiting_duration -+ return None -+ -+ def get_pd_transfer_speed_gb_s(self) -> Optional[float]: -+ """KV cache transfer speed in GB/s.""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_transfer_speed_gb_s is not None: -+ return self.fwd_transfer_speed_gb_s -+ if ( -+ self.disagg_mode != DisaggregationMode.NULL -+ and self.transfer_speed_gb_s > 0.0 -+ ): -+ return self.transfer_speed_gb_s -+ return None -+ -+ def get_pd_transfer_total_mb(self) -> Optional[float]: -+ """Total KV cache transferred in MB.""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_transfer_total_mb is not None: -+ return self.fwd_transfer_total_mb -+ if self.disagg_mode != DisaggregationMode.NULL and self.transfer_total_mb > 0.0: -+ return self.transfer_total_mb -+ return None -+ -+ def get_pd_prefill_retry_count(self) -> Optional[int]: -+ """Number of prefill retries for this request.""" -+ if not is_slime_profiling_enabled(): -+ return None -+ if self.fwd_prefill_retry_count is not None: -+ return self.fwd_prefill_retry_count -+ if self.disagg_mode == DisaggregationMode.PREFILL: -+ return self.prefill_retry_count -+ return None -+ - def convert_to_duration(self) -> str: - if self.disagg_mode == DisaggregationMode.NULL: - queue_duration = self.forward_entry_time - self.wait_queue_entry_time -diff --git a/python/sglang/srt/model_executor/model_runner.py b/python/sglang/srt/model_executor/model_runner.py -index 275775a73d..e4e2fdc398 100644 ---- a/python/sglang/srt/model_executor/model_runner.py -+++ b/python/sglang/srt/model_executor/model_runner.py -@@ -395,7 +395,12 @@ class ModelRunner(ModelRunnerKVCacheMixin): - self.forward_stream = torch.get_device_module(self.device).Stream() - - # CPU offload -- set_offloader(create_offloader_from_server_args(server_args, dp_rank=dp_rank)) -+ # For draft worker (e.g., MTP), do not set offloader to avoid overriding -+ # the main model's offloader. Draft worker uses NoopOffloader instead. -+ if not is_draft_worker: -+ set_offloader( -+ create_offloader_from_server_args(server_args, dp_rank=dp_rank) -+ ) - - self._weight_checker = WeightChecker(model_runner=self) - -@@ -600,7 +605,8 @@ class ModelRunner(ModelRunnerKVCacheMixin): - ) - - # Init routed experts capturer -- self.init_routed_experts_capturer() -+ if not self.is_draft_worker: -+ self.init_routed_experts_capturer() - - if self.device == "cuda" or self.device == "musa": - self.init_cublas() -@@ -2429,11 +2435,19 @@ class ModelRunner(ModelRunnerKVCacheMixin): - output.expert_distribution_metrics = recorder_outputs.get("metrics") - - # Copy cached routing experts' buffers back to CPU cache -- get_global_experts_capturer().on_forward_end( -- forward_batch=forward_batch, -- can_run_graph=output.can_run_graph, -- cuda_graph_batch=getattr(self.graph_runner, "bs", None), -- ) -+ if not self.is_draft_worker: -+ # In speculative decoding, num_tokens_per_bs > 1, so we need to pass -+ # the actual number of tokens per dp rank in cuda graph, not batch size. -+ cuda_graph_num_tokens = None -+ if getattr(self.graph_runner, "bs", None): -+ cuda_graph_num_tokens = ( -+ self.graph_runner.bs * self.graph_runner.num_tokens_per_bs -+ ) -+ get_global_experts_capturer().on_forward_end( -+ forward_batch=forward_batch, -+ can_run_graph=output.can_run_graph, -+ cuda_graph_batch=cuda_graph_num_tokens, -+ ) - - if self.eplb_manager is not None: - self.eplb_manager.on_forward_pass_end() -@@ -2664,6 +2678,42 @@ class ModelRunner(ModelRunnerKVCacheMixin): - device=self.device, - ) - -+ def post_process_weights(self, recv_req): -+ """ -+ Execute post-processing logic for model weights, such as Marlin quantization format conversion. -+ """ -+ from sglang.srt.model_loader.loader import device_loading_context -+ -+ target_device = torch.device("cuda", torch.cuda.current_device()) -+ -+ if recv_req.restore_weights_before_load: -+ for _, module in self.model.named_modules(): -+ quant_method = getattr(module, "quant_method", None) -+ -+ # Check if the module supports restoring weights -+ if quant_method is not None and hasattr( -+ quant_method, "restore_weights_before_loading" -+ ): -+ -+ with device_loading_context(module, target_device): -+ quant_method.restore_weights_before_loading(module) -+ -+ if recv_req.post_process_quantization: -+ # Iterate through all modules to apply specific post-loading processing -+ for _, module in self.model.named_modules(): -+ quant_method = getattr(module, "quant_method", None) -+ -+ # Check if the module supports quantization post-processing -+ if quant_method is not None and hasattr( -+ quant_method, "process_weights_after_loading" -+ ): -+ -+ # Apply the post-processing (e.g., repacking weights for Marlin kernel) -+ with device_loading_context(module, target_device): -+ quant_method.process_weights_after_loading(module) -+ -+ return True, "Success" -+ - - def _model_load_weights_direct(model, named_tensors: List[Tuple[str, torch.Tensor]]): - params_dict = dict(model.named_parameters()) -diff --git a/python/sglang/srt/models/deepseek_common/attention_backend_handler.py b/python/sglang/srt/models/deepseek_common/attention_backend_handler.py -index cc673a9cac..06c430d2c4 100644 ---- a/python/sglang/srt/models/deepseek_common/attention_backend_handler.py -+++ b/python/sglang/srt/models/deepseek_common/attention_backend_handler.py -@@ -1,4 +1,5 @@ - from sglang.srt.compilation.piecewise_context_manager import is_in_piecewise_cuda_graph -+from sglang.srt.layers.attention.hybrid_attn_backend import HybridAttnBackend - from sglang.srt.layers.attention.tbo_backend import TboAttnBackend - from sglang.srt.models.deepseek_common.attention_forward_methods.forward_methods import ( - AttnForwardMethod, -@@ -150,6 +151,8 @@ def handle_attention_nsa(attn, forward_batch): - backend = forward_batch.attn_backend - if isinstance(backend, TboAttnBackend): # if enable tbo, get primary backend - backend = backend.primary -+ if isinstance(backend, HybridAttnBackend): -+ backend = backend._select_backend(forward_batch.forward_mode) - if hasattr(backend, "use_mha") and backend.use_mha: - return AttnForwardMethod.MHA_ONE_SHOT - return AttnForwardMethod.MLA -diff --git a/python/sglang/srt/models/deepseek_nextn.py b/python/sglang/srt/models/deepseek_nextn.py -index cb13a7c676..d9669ce086 100644 ---- a/python/sglang/srt/models/deepseek_nextn.py -+++ b/python/sglang/srt/models/deepseek_nextn.py -@@ -29,6 +29,7 @@ from sglang.srt.layers.attention.nsa.utils import ( - can_cp_split, - cp_all_gather_rerange_output, - cp_split_and_rebuild_data, -+ cp_split_and_rebuild_position, - is_nsa_enable_prefill_cp, - nsa_use_prefill_cp, - prepare_input_dp_with_cp_dsa, -@@ -160,15 +161,17 @@ class DeepseekModelNextN(nn.Module): - - if nsa_use_prefill_cp(forward_batch, self.nsa_enable_prefill_cp): - hidden_states = cp_split_and_rebuild_data(forward_batch, hidden_states) -+ positions = cp_split_and_rebuild_position(forward_batch, positions) - residual = None - with get_global_expert_distribution_recorder().disable_this_region(): -- hidden_states, residual = self.decoder( -+ hidden_states, residual, *rest = self.decoder( - positions, - hidden_states, - forward_batch, - residual, - zero_allocator, - ) -+ topk_indices = rest[0] if rest else None - - if not forward_batch.forward_mode.is_idle(): - if residual is not None: -diff --git a/python/sglang/srt/models/deepseek_v2.py b/python/sglang/srt/models/deepseek_v2.py -index 1583dd7880..a35c00f96c 100644 ---- a/python/sglang/srt/models/deepseek_v2.py -+++ b/python/sglang/srt/models/deepseek_v2.py -@@ -1085,6 +1085,7 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - prefix: str = "", - alt_stream: Optional[torch.cuda.Stream] = None, - skip_rope: bool = False, -+ is_nextn: bool = False, - ) -> None: - super().__init__() - self.layer_id = layer_id -@@ -1154,6 +1155,8 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - prefix=add_prefix("kv_a_proj_with_mqa", prefix), - ) - -+ self.skip_topk = False -+ self.next_skip_topk = False - if self.use_nsa: - is_neox_style = not getattr(config, "indexer_rope_interleave", False) - self.indexer = Indexer( -@@ -1174,6 +1177,31 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - layer_id=layer_id, - alt_stream=alt_stream, - ) -+ if not is_nextn: -+ self.index_topk_freq = getattr(config, "index_topk_freq", 1) -+ self.index_topk_pattern = getattr(config, "index_topk_pattern", None) -+ self.index_skip_topk_offset = getattr( -+ config, "index_skip_topk_offset", 2 -+ ) -+ if self.index_topk_pattern is None: -+ self.skip_topk = ( -+ max(layer_id - self.index_skip_topk_offset + 1, 0) -+ % self.index_topk_freq -+ != 0 -+ ) -+ self.next_skip_topk = ( -+ max(layer_id - self.index_skip_topk_offset + 2, 0) -+ % self.index_topk_freq -+ != 0 -+ ) -+ else: -+ self.skip_topk = self.index_topk_pattern[layer_id] == "S" -+ if layer_id < len(self.index_topk_pattern) - 1: -+ self.next_skip_topk = ( -+ self.index_topk_pattern[layer_id + 1] == "S" -+ ) -+ else: -+ self.next_skip_topk = False - - self.kv_b_proj = ColumnParallelLinear( - self.kv_lora_rank, -@@ -1362,6 +1390,7 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - forward_batch: ForwardBatch, - zero_allocator: BumpAllocator, - llama_4_scaling: Optional[torch.Tensor] = None, -+ prev_topk_indices: Optional[torch.Tensor] = None, - ): - s = self.forward_prepare( - positions=positions, -@@ -1369,6 +1398,7 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - forward_batch=forward_batch, - zero_allocator=zero_allocator, - llama_4_scaling=llama_4_scaling, -+ prev_topk_indices=prev_topk_indices, - ) - return self.forward_core(s) - -@@ -1379,6 +1409,7 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - forward_batch: ForwardBatch, - zero_allocator: BumpAllocator, - llama_4_scaling: Optional[torch.Tensor] = None, -+ prev_topk_indices: Optional[torch.Tensor] = None, - ): - if self.attn_mha.kv_b_proj is None: - self.attn_mha.kv_b_proj = self.kv_b_proj -@@ -1418,7 +1449,12 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - ) - elif attn_forward_method == AttnForwardMethod.MLA: - inner_state = self.forward_absorb_prepare( -- positions, hidden_states, forward_batch, zero_allocator, llama_4_scaling -+ positions, -+ hidden_states, -+ forward_batch, -+ zero_allocator, -+ llama_4_scaling, -+ prev_topk_indices, - ) - elif attn_forward_method == AttnForwardMethod.MLA_FUSED_ROPE: - inner_state = self.forward_absorb_fused_mla_rope_prepare( -@@ -1529,6 +1565,7 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - forward_batch: ForwardBatch, - zero_allocator: BumpAllocator, - llama_4_scaling: Optional[torch.Tensor] = None, -+ prev_topk_indices: Optional[torch.Tensor] = None, - ): - from sglang.srt.model_executor.cuda_graph_runner import get_is_capture_mode - -@@ -1620,18 +1657,7 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - q = self.q_b_proj(q)[0].view( - -1, self.num_local_heads, self.qk_head_dim - ) -- topk_indices = self.indexer( -- x=hidden_states, -- q_lora=q_lora, -- positions=positions, -- forward_batch=forward_batch, -- layer_id=self.layer_id, -- ) -- current_stream.wait_stream(self.alt_stream) -- else: -- k_nope = k_nope.unsqueeze(1) -- q = self.q_b_proj(q)[0].view(-1, self.num_local_heads, self.qk_head_dim) -- if q_lora is not None: -+ if not self.skip_topk: - topk_indices = self.indexer( - x=hidden_states, - q_lora=q_lora, -@@ -1639,6 +1665,23 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - forward_batch=forward_batch, - layer_id=self.layer_id, - ) -+ else: -+ topk_indices = prev_topk_indices -+ current_stream.wait_stream(self.alt_stream) -+ else: -+ k_nope = k_nope.unsqueeze(1) -+ q = self.q_b_proj(q)[0].view(-1, self.num_local_heads, self.qk_head_dim) -+ if q_lora is not None: -+ if not self.skip_topk: -+ topk_indices = self.indexer( -+ x=hidden_states, -+ q_lora=q_lora, -+ positions=positions, -+ forward_batch=forward_batch, -+ layer_id=self.layer_id, -+ ) -+ else: -+ topk_indices = prev_topk_indices - else: - q = self.q_proj(hidden_states)[0].view( - -1, self.num_local_heads, self.qk_head_dim -@@ -1929,8 +1972,10 @@ class DeepseekV2AttentionMLA(nn.Module, DeepseekMHAForwardMixin): - ).transpose(0, 1), - ) - output, _ = self.o_proj(attn_bmm_output) -- -- return output -+ if not self.next_skip_topk: -+ return output, None -+ else: -+ return output, topk_indices - - def forward_absorb_fused_mla_rope_prepare( - self, -@@ -2275,6 +2320,7 @@ class DeepseekV2DecoderLayer(nn.Module): - reduce_results=False, - prefix=add_prefix("self_attn", prefix), - alt_stream=alt_stream, -+ is_nextn=is_nextn, - ) - - self.is_layer_sparse = self._is_layer_sparse(layer_id, is_nextn=is_nextn) -@@ -2357,6 +2403,7 @@ class DeepseekV2DecoderLayer(nn.Module): - zero_allocator: BumpAllocator, - gemm_output_zero_allocator: BumpAllocator = None, - llama_4_scaling: Optional[torch.Tensor] = None, -+ prev_topk_indices: Optional[torch.Tensor] = None, - ) -> torch.Tensor: - quant_format = ( - "mxfp4" -@@ -2398,7 +2445,12 @@ class DeepseekV2DecoderLayer(nn.Module): - forward_batch=forward_batch, - zero_allocator=zero_allocator, - llama_4_scaling=llama_4_scaling, -+ prev_topk_indices=prev_topk_indices, - ) -+ if isinstance(hidden_states, tuple): -+ hidden_states, topk_indices = hidden_states -+ else: -+ topk_indices = None - - hidden_states, residual = self.layer_communicator.prepare_mlp( - hidden_states, residual, forward_batch -@@ -2434,7 +2486,7 @@ class DeepseekV2DecoderLayer(nn.Module): - hidden_states, residual, forward_batch - ) - -- return hidden_states, residual -+ return hidden_states, residual, topk_indices - - def op_comm_prepare_attn( - self, -@@ -2710,6 +2762,7 @@ class DeepseekV2Model(nn.Module): - elif self.first_k_dense_replace < normal_start_layer: - normal_end_layer = normal_start_layer = 0 - aux_hidden_states = [] -+ topk_indices = None - for i in range(normal_start_layer, normal_end_layer): - # NOTE: torch dynamo does not support graph break in context manager - ctx = ( -@@ -2727,7 +2780,7 @@ class DeepseekV2Model(nn.Module): - else: - aux_hidden_states.append(hidden_states + residual) - layer = self.layers[i] -- hidden_states, residual = layer( -+ hidden_states, residual, *rest = layer( - positions, - hidden_states, - forward_batch, -@@ -2735,7 +2788,9 @@ class DeepseekV2Model(nn.Module): - zero_allocator, - gemm_output_zero_allocator, - llama_4_scaling, -+ prev_topk_indices=topk_indices, - ) -+ topk_indices = rest[0] if rest else None - - if normal_end_layer != self.end_layer: - hidden_states, residual = model_forward_maybe_tbo( -diff --git a/python/sglang/srt/models/glm4_moe.py b/python/sglang/srt/models/glm4_moe.py -index db8c1c7ce7..53ffadf6d0 100644 ---- a/python/sglang/srt/models/glm4_moe.py -+++ b/python/sglang/srt/models/glm4_moe.py -@@ -678,8 +678,13 @@ class Glm4MoeDecoderLayer(nn.Module): - nn.Module.__init__(self) - self.hidden_size = config.hidden_size - self.config = config -- rope_theta = getattr(config, "rope_theta", 10000) -- rope_scaling = getattr(config, "rope_scaling", None) -+ # rope_theta may be stored in rope_parameters dict (e.g. GLM-4.6V) -+ _rope_params = getattr(config, "rope_parameters", None) -+ if isinstance(_rope_params, dict) and "rope_theta" in _rope_params: -+ rope_theta = _rope_params["rope_theta"] -+ else: -+ rope_theta = getattr(config, "rope_theta", 10000) -+ rope_scaling = getattr(config, "rope_scaling", None) or _rope_params - partial_rotary_factor = getattr( - getattr(config, "rope_parameters", None), "partial_rotary_factor", None - ) or getattr(config, "partial_rotary_factor", 0.5) -@@ -773,6 +778,7 @@ class Glm4MoeDecoderLayer(nn.Module): - hidden_states: torch.Tensor, - forward_batch: ForwardBatch, - residual: Optional[torch.Tensor], -+ **kwargs, - ) -> torch.Tensor: - - hidden_states, residual = self.layer_communicator.prepare_attn( -diff --git a/python/sglang/srt/models/glm4_moe_nextn.py b/python/sglang/srt/models/glm4_moe_nextn.py -index 1f6e753646..546cce4ab5 100644 ---- a/python/sglang/srt/models/glm4_moe_nextn.py -+++ b/python/sglang/srt/models/glm4_moe_nextn.py -@@ -103,7 +103,7 @@ class Glm4MoeModelNextN(nn.Module): - - residual = None - with get_global_expert_distribution_recorder().disable_this_region(): -- hidden_states, residual = self.decoder( -+ hidden_states, residual, *rest = self.decoder( - positions, hidden_states, forward_batch, residual - ) - -diff --git a/python/sglang/srt/models/glm4v_moe.py b/python/sglang/srt/models/glm4v_moe.py -index 324de18b49..fc72faa031 100644 ---- a/python/sglang/srt/models/glm4v_moe.py -+++ b/python/sglang/srt/models/glm4v_moe.py -@@ -52,11 +52,31 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - self.num_fused_shared_experts = 0 - self.determine_num_fused_shared_experts() - -- self.model = Glm4MoeModel( -- config, -- quant_config, -- prefix=add_prefix("language_model", prefix), -- ) -+ if not self.config.encoder_only: -+ self.model = Glm4MoeModel( -+ config, -+ quant_config, -+ prefix=add_prefix("language_model", prefix), -+ ) -+ -+ if self.pp_group.is_last_rank: -+ if self.pp_group.world_size == 1 and self.config.tie_word_embeddings: -+ self.lm_head = self.model.embed_tokens -+ else: -+ self.lm_head = ParallelLMHead( -+ config.vocab_size, -+ config.hidden_size, -+ quant_config=quant_config, -+ prefix=add_prefix("lm_head", prefix), -+ use_attn_tp_group=get_global_server_args().enable_dp_lm_head, -+ ) -+ else: -+ # ranks other than the last rank will have a placeholder layer -+ self.lm_head = PPMissingLayer() -+ else: -+ # encoder_only mode: no language model, so no lm_head needed -+ self.lm_head = None -+ - self.visual = Glm4vVisionModel( - config.vision_config, - quant_config=quant_config, -@@ -64,24 +84,14 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - use_data_parallel=self.use_data_parallel, - ) - -- if self.pp_group.is_last_rank: -- if self.pp_group.world_size == 1 and self.config.tie_word_embeddings: -- self.lm_head = self.model.embed_tokens -- else: -- self.lm_head = ParallelLMHead( -- config.vocab_size, -- config.hidden_size, -- quant_config=quant_config, -- prefix=add_prefix("lm_head", prefix), -- use_attn_tp_group=get_global_server_args().enable_dp_lm_head, -- ) -- else: -- # ranks other than the last rank will have a placeholder layer -- self.lm_head = PPMissingLayer() -- - self.logits_processor = LogitsProcessor(config) - self.pooler = Pooler(pooling_type=PoolingType.LAST, normalize=True) -- self.is_mrope_enabled = "mrope_section" in self.config.rope_scaling -+ _rope_cfg = ( -+ getattr(self.config, "rope_scaling", None) -+ or getattr(self.config, "rope_parameters", None) -+ or {} -+ ) -+ self.is_mrope_enabled = "mrope_section" in _rope_cfg - - # For EAGLE3 support - self.capture_aux_hidden_states = False -@@ -219,6 +229,11 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - # Skip loading extra bias for GPTQ models. - if name.endswith(".bias") and name not in params_dict: - continue -+ # Skip loading visual/language model weights -+ if ( -+ self.config.encoder_only or self.config.language_only -+ ) and name not in params_dict: -+ continue - if name not in params_dict: - continue - -@@ -234,6 +249,8 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - param_name, weight_name, expert_id, shard_id = mapping - if weight_name not in name: - continue -+ if "visual" in name or self.config.encoder_only: -+ continue - - # Mark as expert weight regardless of whether we can process it - is_expert_weight = True -@@ -265,6 +282,11 @@ class Glm4vMoeForConditionalGeneration(Glm4vForConditionalGeneration): - # Skip loading extra bias for GPTQ models. - if name.endswith(".bias") and name not in params_dict: - continue -+ # Skip loading mm/language parameters -+ if ( -+ self.config.encoder_only or self.config.language_only -+ ) and name not in params_dict: -+ continue - if name not in params_dict: - continue - -diff --git a/python/sglang/srt/models/qwen3_5.py b/python/sglang/srt/models/qwen3_5.py -index f01225487b..1dad8bb8e5 100644 ---- a/python/sglang/srt/models/qwen3_5.py -+++ b/python/sglang/srt/models/qwen3_5.py -@@ -372,6 +372,7 @@ class Qwen3_5LinearDecoderLayer(nn.Module): - input_layernorm=self.input_layernorm, - post_attention_layernorm=self.post_attention_layernorm, - allow_reduce_scatter=True, -+ is_last_layer=(layer_id == config.num_hidden_layers - 1), - ) - - def forward( -@@ -400,11 +401,24 @@ class Qwen3_5LinearDecoderLayer(nn.Module): - use_reduce_scatter = self.layer_communicator.should_use_reduce_scatter( - forward_batch - ) -- hidden_states = self.mlp(hidden_states, forward_batch, use_reduce_scatter) - -- hidden_states, residual = self.layer_communicator.postprocess_layer( -- hidden_states, residual, forward_batch -+ should_allreduce_fusion = ( -+ self.layer_communicator.should_fuse_mlp_allreduce_with_next_layer( -+ forward_batch -+ ) - ) -+ if isinstance(self.mlp, Qwen2MoeSparseMoeBlock): -+ hidden_states = self.mlp(hidden_states, forward_batch, use_reduce_scatter) -+ else: -+ hidden_states = self.mlp( -+ hidden_states, should_allreduce_fusion, use_reduce_scatter -+ ) -+ if should_allreduce_fusion: -+ hidden_states._sglang_needs_allreduce_fusion = True -+ else: -+ hidden_states, residual = self.layer_communicator.postprocess_layer( -+ hidden_states, residual, forward_batch -+ ) - - return hidden_states, residual - -@@ -549,6 +563,7 @@ class Qwen3_5AttentionDecoderLayer(nn.Module): - input_layernorm=self.input_layernorm, - post_attention_layernorm=self.post_attention_layernorm, - allow_reduce_scatter=True, -+ is_last_layer=(layer_id == config.num_hidden_layers - 1), - ) - - self.alt_stream = alt_stream -@@ -633,11 +648,24 @@ class Qwen3_5AttentionDecoderLayer(nn.Module): - use_reduce_scatter = self.layer_communicator.should_use_reduce_scatter( - forward_batch - ) -- hidden_states = self.mlp(hidden_states, forward_batch, use_reduce_scatter) - -- hidden_states, residual = self.layer_communicator.postprocess_layer( -- hidden_states, residual, forward_batch -+ should_allreduce_fusion = ( -+ self.layer_communicator.should_fuse_mlp_allreduce_with_next_layer( -+ forward_batch -+ ) - ) -+ if isinstance(self.mlp, Qwen2MoeSparseMoeBlock): -+ hidden_states = self.mlp(hidden_states, forward_batch, use_reduce_scatter) -+ else: -+ hidden_states = self.mlp( -+ hidden_states, should_allreduce_fusion, use_reduce_scatter -+ ) -+ if should_allreduce_fusion: -+ hidden_states._sglang_needs_allreduce_fusion = True -+ else: -+ hidden_states, residual = self.layer_communicator.postprocess_layer( -+ hidden_states, residual, forward_batch -+ ) - - return hidden_states, residual - -diff --git a/python/sglang/srt/models/qwen3_vl.py b/python/sglang/srt/models/qwen3_vl.py -index d641826e33..3abc39ef32 100644 ---- a/python/sglang/srt/models/qwen3_vl.py -+++ b/python/sglang/srt/models/qwen3_vl.py -@@ -711,14 +711,19 @@ class Qwen3LLMModel(Qwen3Model): - hidden_states + residual if residual is not None else hidden_states - ) - -+ deepstack_embeds = None -+ if input_deepstack_embeds is not None: -+ prev_layer_idx = layer_idx - 1 -+ if prev_layer_idx in self.deepstack_embed_to_decoder_layer: -+ sep = self.hidden_size * prev_layer_idx -+ deepstack_embeds = input_deepstack_embeds[ -+ :, sep : sep + self.hidden_size -+ ] -+ - # SGLang applies residual at the START of the next layer, not at the END like HuggingFace. - # See: https://github.com/huggingface/transformers/blob/v5.0.0rc0/src/transformers/models/qwen3_vl/modeling_qwen3_vl.py#L549 - # To match HF behavior, deepstack must be added AFTER residual: (hidden_states + residual) + deepstack - # The order matters because addition with different tensors is not associative in practice. -- # Deepstack for prev_layer is applied at the start of current layer via post_residual_addition. -- deepstack_embeds = self.get_deepstack_embeds( -- layer_idx - 1, input_deepstack_embeds -- ) - hidden_states, residual = layer( - positions, - hidden_states, -diff --git a/python/sglang/srt/multimodal/processors/glm4v.py b/python/sglang/srt/multimodal/processors/glm4v.py -index 33cce6fe25..0970c4550d 100644 ---- a/python/sglang/srt/multimodal/processors/glm4v.py -+++ b/python/sglang/srt/multimodal/processors/glm4v.py -@@ -1,6 +1,9 @@ - from typing import List, Union - -+import torch -+ - from sglang.srt.layers.rotary_embedding import MRotaryEmbedding -+from sglang.srt.managers.schedule_batch import Modality, MultimodalDataItem - from sglang.srt.models.glm4v import Glm4vForConditionalGeneration - from sglang.srt.models.glm4v_moe import Glm4vMoeForConditionalGeneration - from sglang.srt.multimodal.processors.base_processor import ( -@@ -45,6 +48,8 @@ class Glm4vImageProcessor(SGLangBaseProcessor): - self.IMAGE_END_TOKEN_ID = hf_config.image_end_token_id - self.VIDEO_START_TOKEN_ID = hf_config.video_start_token_id - self.VIDEO_END_TOKEN_ID = hf_config.video_end_token_id -+ self.IM_START_TOKEN_ID = self.IMAGE_START_TOKEN_ID -+ self.IM_END_TOKEN_ID = self.IMAGE_END_TOKEN_ID - - # Vision config - self.IMAGE_FACTOR = 28 -@@ -59,6 +64,36 @@ class Glm4vImageProcessor(SGLangBaseProcessor): - video_token_id=self.IM_TOKEN_ID, - ).build(_processor) - -+ def get_mm_data(self, prompt, embeddings, img_grid_thw): -+ input_ids, offsets = self.build_input_ids(prompt, img_grid_thw) -+ mm_items = [ -+ MultimodalDataItem( -+ modality=Modality.IMAGE, -+ offsets=offsets, -+ precomputed_embeddings=embeddings, -+ ) -+ ] -+ -+ input_ids_tensor = torch.tensor(input_ids) -+ mrope_positions, mrope_position_delta = MRotaryEmbedding.get_rope_index_glm4v( -+ input_ids=input_ids_tensor.unsqueeze(0), -+ hf_config=self.hf_config, -+ image_grid_thw=img_grid_thw, -+ video_grid_thw=None, -+ attention_mask=None, -+ ) -+ mrope_positions = mrope_positions.squeeze(1) -+ -+ return { -+ "input_ids": input_ids, -+ "mm_items": mm_items, -+ "im_start_id": self.IM_START_TOKEN_ID, -+ "im_end_id": self.IM_END_TOKEN_ID, -+ "im_token_id": self.IM_TOKEN_ID, -+ "mrope_positions": mrope_positions, -+ "mrope_position_delta": mrope_position_delta, -+ } -+ - async def process_mm_data_async( - self, - image_data: List[Union[str, bytes]], -diff --git a/python/sglang/srt/multimodal/processors/qwen_vl.py b/python/sglang/srt/multimodal/processors/qwen_vl.py -index 4395654e4e..f9b5ea4abb 100644 ---- a/python/sglang/srt/multimodal/processors/qwen_vl.py -+++ b/python/sglang/srt/multimodal/processors/qwen_vl.py -@@ -317,7 +317,7 @@ class QwenVLImageProcessor(SGLangBaseProcessor): - **kwargs, - ): - entry_time = time.perf_counter() -- base_output = self.load_mm_data( -+ base_output = self.legacy_load_mm_data( - prompt=input_text, - image_data=image_data, - video_data=request_obj.video_data, -diff --git a/python/sglang/srt/server_args.py b/python/sglang/srt/server_args.py -index b080aeb168..5b29ebf566 100644 ---- a/python/sglang/srt/server_args.py -+++ b/python/sglang/srt/server_args.py -@@ -635,6 +635,7 @@ class ServerArgs: - # Context parallelism used in the long sequence prefill phase of DeepSeek v3.2 - enable_nsa_prefill_context_parallel: bool = False - nsa_prefill_cp_mode: str = "round-robin-split" -+ disable_indexer_rope_neox_style: bool = False - enable_fused_qk_norm_rope: bool = False - enable_precise_embedding_interpolation: bool = False - -@@ -4781,6 +4782,12 @@ class ServerArgs: - help="Token splitting mode for the prefill phase of DeepSeek v3.2 under context parallelism. Optional values: 'round-robin-split'(default), 'in-seq-split' " - "'round-robin-split' distributes tokens across ranks based on token_idx %% cp_size. It supports multi-batch prefill, fused MoE, and FP8 KV cache.", - ) -+ parser.add_argument( -+ "--disable-indexer-rope-neox-style", -+ action="store_true", -+ help="Disable NSA indexer RoPE neox style (equivalent to INDEXER_ROPE_NEOX_STYLE=0). " -+ "If the environment variable INDEXER_ROPE_NEOX_STYLE is also set and conflicts, an error is raised.", -+ ) - parser.add_argument( - "--enable-fused-qk-norm-rope", - action="store_true", -diff --git a/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py b/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py -index 5fe45086ca..b283d2e9bd 100644 ---- a/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py -+++ b/python/sglang/srt/speculative/eagle_draft_cuda_graph_runner.py -@@ -341,7 +341,10 @@ class EAGLEDraftCudaGraphRunner: - self.seq_lens.fill_(self.seq_len_fill_value) - self.out_cache_loc.zero_() - self.positions.zero_() -- -+ self.topk_p.zero_() -+ self.topk_index.zero_() -+ self.hidden_states.zero_() -+ self.req_pool_indices.zero_() - num_tokens = bs * self.num_tokens_per_bs - - # Common inputs -@@ -350,8 +353,12 @@ class EAGLEDraftCudaGraphRunner: - forward_batch.out_cache_loc - ) - self.positions[:raw_num_token].copy_(forward_batch.positions) -- self.topk_p[:raw_bs].copy_(forward_batch.spec_info.topk_p) -- self.topk_index[:raw_bs].copy_(forward_batch.spec_info.topk_index) -+ self.topk_p[:raw_bs].copy_(forward_batch.spec_info.topk_p.clamp(0, 1)) -+ self.topk_index[:raw_bs].copy_( -+ forward_batch.spec_info.topk_index.clamp( -+ 0, self.model_runner.model_config.vocab_size - 1 -+ ) -+ ) - self.hidden_states[:raw_bs].copy_(forward_batch.spec_info.hidden_states) - self.req_pool_indices[:raw_bs].copy_(forward_batch.req_pool_indices) - -diff --git a/python/sglang/srt/speculative/eagle_info.py b/python/sglang/srt/speculative/eagle_info.py -index ac629c7ee5..c039d23508 100644 ---- a/python/sglang/srt/speculative/eagle_info.py -+++ b/python/sglang/srt/speculative/eagle_info.py -@@ -774,6 +774,10 @@ class EagleDraftInput(SpecInput, EagleDraftInputV2Mixin): - self.topk_index = self.topk_index[: len(new_indices)] - self.hidden_states = self.hidden_states[: len(new_indices)] - self.verified_id = self.verified_id[: len(new_indices)] -+ if self.accept_length is not None: -+ self.accept_length = self.accept_length[: len(new_indices)] -+ if self.accept_length_cpu is not None: -+ self.accept_length_cpu = self.accept_length_cpu[: len(new_indices)] - else: - # in some cases(e.g draft_extend), we have not filtered the batch by `unfinished_index` - self.topk_p = self.topk_p[new_indices] -@@ -805,6 +809,27 @@ class EagleDraftInput(SpecInput, EagleDraftInputV2Mixin): - self.verified_id = torch.cat([self.verified_id, spec_info.verified_id], axis=0) - self.topk_p = torch.cat([self.topk_p, spec_info.topk_p]) - self.topk_index = torch.cat([self.topk_index, spec_info.topk_index]) -+ if self.accept_length is not None and spec_info.accept_length is not None: -+ self.accept_length = torch.cat( -+ [self.accept_length, spec_info.accept_length] -+ ) -+ self.accept_length_cpu = self.accept_length.tolist() -+ elif self.accept_length is not None: -+ zeros = torch.zeros( -+ [spec_info.verified_id.shape[0]], -+ dtype=self.accept_length.dtype, -+ device=self.accept_length.device, -+ ) -+ self.accept_length = torch.cat([self.accept_length, zeros]) -+ self.accept_length_cpu = self.accept_length.tolist() -+ elif spec_info.accept_length is not None: -+ zeros = torch.zeros( -+ [self.verified_id.shape[0]], -+ dtype=self.accept_length.dtype, -+ device=self.accept_length.device, -+ ) -+ self.accept_length = torch.cat([zeros, spec_info.accept_length]) -+ self.accept_length_cpu = self.accept_length.tolist() - - - @dataclass -diff --git a/python/sglang/srt/utils/common.py b/python/sglang/srt/utils/common.py -index 4636128fa7..a9b61df393 100644 ---- a/python/sglang/srt/utils/common.py -+++ b/python/sglang/srt/utils/common.py -@@ -2359,6 +2359,8 @@ class SafeUnpickler(pickle.Unpickler): - "sglang.srt.model_executor.model_runner.", - "sglang.srt.layers.", - "sglang.srt.utils.", -+ # --- slime --- -+ "slime.", - } - - DENY_CLASSES = { -diff --git a/python/sglang/srt/utils/weight_checker.py b/python/sglang/srt/utils/weight_checker.py -index 3be16446e0..1b2371c839 100644 ---- a/python/sglang/srt/utils/weight_checker.py -+++ b/python/sglang/srt/utils/weight_checker.py -@@ -69,6 +69,9 @@ def _check_tensors( - actual_should_compare, - actual, - ) in zip(expect_tensors, actual_tensors, strict=True): -+ if ".cos_sin_cache" in expect_name: -+ # skip cos/sin cache which is deterministic from shape and dtype and may have different shapes due to different implementations. -+ continue - assert expect_name == actual_name, f"{expect_name=} {actual_name=}" - assert ( - expect_should_compare == actual_should_compare diff --git a/docker/version.txt b/docker/version.txt index 54428a6001..dee5f8538b 100644 --- a/docker/version.txt +++ b/docker/version.txt @@ -1 +1 @@ -nightly-dev-20260430b +nightly-dev-20260303a diff --git a/docs/_static/image/arch.png b/docs/_static/image/arch.png deleted file mode 100644 index b809bd3ffee17e4c361c73a9cca454a849c3a8e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273013 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�*^?np%a;aE`D+D9OcuckW^ZoqhyzK99`8da6vF((1YI z{?f*>r|!_e)48$Na_4naV6AnB-r4*#GJN8!e3L9esZ%1h%6-JbELEIJRtX$Z%7kU% zp&-N1MVieDR4nA^l~If6JJ|DLy=rEkV2;fSu#u6V;{sR05C)F5KgF)U8|=#?EloM# z%D3hZ+zS`A35XWD$b`mhlOKI<^%7myeYw%11bIS$YA#%brAzY!_i0vGNiUF>e7E)G2$r7X|m^?23 zcI05v9*?A$fb;M>I*3di^R149dOw3`$=vb=i%~eBSbmhcr6r1Ldbx9hBxPesG?(Uh zFvmJqWI%|bq1h?+&W*Le+Z$mU;%%y<^uDDG;YJa?!j1-8|^5t}njI+t%_fa}3^m{n&V zU-B4*EDY5K_e-O55fP$03j0vnt~GX3pXfb495&ypXP$ogBQpzIkou~{dTrOLl8XK0 zI%z;5KOK^a(&mR$RI4GX@Af6)7aSdS@>Cs8rbe2Us#FdQ1`#$@q2QTUC|g40Snl7e zz8|?J?-A*oM;xNP>O5FcIp=Uh?qc{62y`TWG{C7LfV>yLC(oDOFOp6P0U%B4bku{QmR9?J+`eoyM2qm%1!-tx*!g+bg z3hGu0u8tWRyW`-)7aLc8Rv0%i7nC-QvtYaZc>DvhAes=uw9pN-Mc1dS!plxe6TJdU z>33I@x&>@IG=_h%7&8(b$``!rR=n*;)v{r66A&Sq4u_dhM7d76|H3hLBT9h znh?=sjmWi;UUgkdeV*664laV`({C)M=Gh8VZhyQsCODX1kvmz?-d)>E!URPlXNBKN zXBJn%r@p)26?_8hZL`k43sna@Z#jV};vemKD?y>+u=CEWtE5j>$Ygy=OeT9|$KoWr zN^Uktms}I7y`GapL)}K97O&jG6a6GuRcQZuf6I!TLzMt*1fWmaa4ao;W+LGQ~YYhzG;dSV2T_)D^UbsiX-WBfYv&uV2Y`lXJodT>yKk$ zh|ND|c(&bjk*naY6MACip&hT&w@H!ilGPb!(KNCHDy%y6arKk@$oFPXK(q#_!#$e$ zbX2o@Ux~sm9VtnfMmiKWW1AnnB8cU$e)1BI4+jl_>r|{LNp&Ud<*TmoZ;Jc1@m(Fh zWp!WYU1@S`vBFvA1eu1k6F?BlT@Pj;(V^wVc0_02i(j|@5=e&cb7d+YjOWM4|M(l! zC(4(quL&0D(%H_~&ay;w++tBzh+A9yaIs(^KtjKm(uZ02X#o!Us1Ch}WF;_0Ag~FA zjHn||s5$K0YJS_d$x%`Xud!DD)7yTPtO5%XT6y}Mp>nyi+HKJ{-*mq`I+3uKvF$`q z&pD^FXQq1IcC=3Ij-?#}~XCUW|JG zb_x+SMkuP;$Ef6sKI^9G7Q@dh=Fu|+x zV2UWaErm2K0FMxOS(`!k(=b6Ddx!%(q63wa`LUdIZkzcWh0r7%!c!9Cfr{Xtoa4_5 z7XAVIA4W_-5^{0>_M6haAvcaf|9dE<3Ui zOk^s96`qv+ds$)=xl!T(Wq1)X{Zfde_k*NgYX#k+#&Tltj(rcSUc$ls%n2KL$**hp zSEcgEkK*v<@Y;J^Nqq*u|-{H8%n*^>tTpeK_SyusO? z-a}BU2C(xn_x+Baz>ozQ-+79cJ6;8xTF}(UIi;PaI$K~Jlhg9Iv*cTU#uunf?D2`i zTmN+%id6z`J|G8oYbM#>to>h57WENS>6Ww7&a>XOu#Te~+}nBC)}MI?$px8_SfQ=| zx($6whMcv5Icl33z%8W8fY7_tv>SH(1Yb>9M<=3x$1`_^~JjQGsFdK(oYj&7i0w$O6zbKdRCAs=9HAt1~I>XPy)ED@>t;2>r z-=JJivq`|*?vr4!P@NqAAForRK78!kUVW7NC3c?c(Ad4xcT$)Y{MKk-25!3_I}jGOcg*8Ye*6#FJ%ZBnf!%C7CLy5Oq3)X@{B8A*C;r2-2YLJHA&CVJ7WN;SWIR z`52z^7JTGw+D-$!Y&FoAJsL!BEk5K+QUq>@o z$97r^mz}NxJ`<>t3~}5h+w>3p`ZqsV!aDYiyUpxem5>wkH+1@TzK-g!ju=S5Kmzvv z7D(90%MnK3I!@?*`~;Is{ZIw20?sktD+i%7b*gu4b~@_$ zz9v~%3p+MDZgw51Q^cb?_hKeQRL@KWzMb6}cEYzjaEVJjP$E0`$zyo!JBHu< zB)20i+(`pFmSGZy4qRC8wz6XvL`A{PbQo`b=kSdN8KMtc>^z(*#P-lH%n#kU4ACG% z+uh?kS7a4XWUA(w9m}v8WY}hw@4RClN(_ojvfF9rp-dadu#F^r=ZdTgiu^we1{Q~0 zy0*0jT+EY8GgCJneg6GG!zkh6hH+EZ?~Gb8$$ZMv6SC!hf7Ifqc=#{zikNb~FS~lq zx1H+4H5_8h>oLOL2^xqge|sj&DTs2#Z#QppU2T=$p<{SWJ}H@;(wVU1Yu3J{1E}7y z+_S^?!$rYhM5A$Ow|8npq=K9}Qns(##djjc%?;pda&9K!k+Cg~VQ({D@FB_;Szq_j zw(-q>mcM4JnK`<7j^|HUG0BcvNSrVf>7(7&C=X$2GnHTCKn_9fXv?bvAZ2y zyPq5L`u|UaKeTs{eAh0Pic9Ckul=Me|I>PaN-OTt=Fe{5nHIyhj^i&LRgEw>v{Q7E zf_N!%gmS0x63X4}2R}9ToB8D*;SmEn7|_LlE(Uae#D#y_ z4q#jk#^qpK&QH6be>NkG!^JpUjKjq^+lBC@EgmXIX{|6craf<)| diff --git a/docs/_static/image/sglang_config.png b/docs/_static/image/sglang_config.png deleted file mode 100644 index c4cde43ab238a708c8debd3eb40c71297ee5d9d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671207 zcmc$`dpwl+-#^}2wlcffQi^XIzJBd4&*&cCv(Gg)gegqI zC%jlVA$0Pr7p9kX?3jLEr8!U#QE;XFq5lQ{^1E@f+UEBa2N%ryxubFN)bhy}?oT~h zF?RZEvk4Qn3f69SpEUWRW!x{5ZwAb3oj>*zN1`~{>6Vg`lAMy$ElT^6H#98yT%VV6 zv^RYyxog|ICim>m$Ahmt!poTIjBI>0Q8j-9v0`o^RqkT2q=czX`=9uB}LkFjf zH?x8&FJvp^zFemiJmY2+c3e?NmGLstCMdEb_2b|v;!GyH&(NioH*=?ylS+qes(&AL zm#&ZP{{<5$5ktaZyTnv!eVmGXzM5x51>eIk=6a#6bIK*zH`WL38zMi6%};c4ZqV$| zoU{w2DIVd<(OB7gcrNn<-Xd2`Mq`Hls;JE_olwp`46|#rTuq$Bm20W6-{ybdM?W7L z$7ehpghgsc6RU}fU1$MXd$9B`E6xj9AJHUL%i-A8!6iM|^hfM{XCewD++(m5xiX)9 zN9g)yRZ04K*y64NsRfud$3_>F;2MFRlrp8CtTmvpAPn8$V0K?XzcN3(LqJATZQEH4jpuHX**xiz|?>F$VD9 zwb(ZN5LfvUI(a1!#1Ia7eczz>Lf*Ofz(e2YaVt&q+SYJpWY5c9YvFKg*r)j6uz_H( zv4&LD#$W}_0y92=KVbdP3A1D|TIBlt6L?l%*lg2AS`f&8-bN>+GH4C|?qBQN@j>?3 z#osNCxGCTIrCXx4>!ii6CPI-bJR3!S;ggHqnp! zbRzAnPdf>k?sj9@(}bl3jG3UM;$UQrM<3N|LKuENo|!oAhjl;DEwZ%wLQBUSHPGPf z^86TmHNblEMo`s3L#-i3Ht_(I5++hk&qCw6kt(Wf12WDhO-wX)YDD6Z(Y8zj(dLYr z{Z=pZBu0J^e=s{aDhF&j23#& z&EiGo#B%y1 zZx&1I$MKm{kzF(8M_zOdOo$=9#X^f&zPFwj=+Up(UfFlHE-|yKh7RnYW7(dvkQ9ugO9q0)@UX38J zHjC7r>=uNVFr+vuBqdO(obHD1Kr6~OLKb{!=#;%n#igw@U$CIHugCM52IvkYqQZay z&pU~Sm0Wr>Lw;xgq&}s!tNFZ;6OHbGHyUA6_+# zy~#FB^%q(O;q$vy(pAKzO(TlOqR8txun6)lIIl|j!O!>JkHrk+511hBJ%i^lnPdx( zAnz)t8%P5lt*J3=qy?}=LJ*of6Xaq$W#nCj5^Xc$rboa&C3%}5+z&54f!{beqh-J6 zj2Gr2d-=-S$FH@2I+pFtN?ig?g z=;42VsEZ-7lXtFl`sT91-z|f!BOI5m%o>^>`N;~CmY1q}REWJ#bbWQ%;R)=N_Y2^l z^%%&GE9UUo1_46aSr*dlA@)jzUHZ%>aKjR$klozXM43S}_VKI*_>ITJgU-I>^vNJo zWyp;%*hLc8@+Ns{gEQzpY2Iy8H+VM6o%4}~NcGAwHx)i($iA9%ms%M}(aKMW!7HEJMMwAZH*cRkP1#cCxd zA@o}4kl!n%TvGx+AN57{X!Zp&E7;>wmXf@Xr)@T^9a)Uv>ynIa`j470H`naGr-vtN zS~Nk3#@2*|Gw15vA+5xp0}rt~^Er|8Jy%|Wa8T}DK$ZKRs`(ZFBwkItx#OCH`!|n; zI3+=5;(WQW@_VrL1KndW!EnhAe~1OQ7>_RG^s?^_ecn|JHP-NEhDa$y4(0l{O51Pg zB{loU4>xn0XT%g=J{Hxtu;HghRi|Va|e}&}jZiLM%*#^?ymMe%vm~@@RYBZ|7a}fSqchtO#C9 zWUs!wy2p;vbn~9G^)SS(8MB_@(}$U@Le`N@ABl`3x|o>Crz+(;rD-X;o399|eV9pi z=pPDgiG1mtokQ$pb?>Nnv84FCYvfXM7_C`eEMsz{TE_@;6XM$C-xaQbtAqhy4^K8m zwQsIsFArKx^yB=eCd&0#2!|av{}53hS0-!!-O7 z>wEXvB^_U#H->xoCtXhXAKM(&0EvtmX}3|0vzWdn?VSu2F%eY}{s}&Ux5PR2FNymG zBDSwI;9<^NLjn63l1_Fj9`F#HtpFREgHy}y5xv#)^`EWZpC=B+*P?+fn2wD7bpXq7zLSk*v z${EZGVxB|fHOmg{rjGTx74Xvq!vDI{5))-Ev+=K=EM9Ai=x^>UnI8dj8@=;lx1|8? z8vQAuSyf6sxHatNJEr>AJ6{ZHi{Y-(pRD?o6_gbTn>T?^{Ca1TR8!4*=qw%P=|_%3FxDWJ<4hhtrA zW5gY7M%vaGFX6G4u2;eL2y3sEF?2a6AQ+dmy{(DRXB{(kY3AIZ`r{!AaLl9Ma#p2n zgB+F-W>yV?=kwE zZgOy2ardBilA&QtkVmZRa!Jy)#ub`M`E^9-xxxU$Ar) zP$iZ+GY3E{H=(weIRorN9`Rg~;<2fQc~Qnl9S=&=UBv%F&je$oj61$IBM$Y^|FbFl zFwB!o+hmep?#E@7K1#a0WYaAjsc~MGbe8%yJ8{}5qCkq@R8YEZZU>texxx9EF4}*p zf~K3W3=TkmMd*N1vKaRXKj)dLkIP6U7O~&m$>^XEFNs4%cfnTq-N0q3d!H4p0^tvU zy;$K;7e|*Jry{KRdO0PQw;{W2ojE%&amoHx$uecJY(psJ* zxoL1*K5J!0t(vJzf=|6@xI{8=j%XqlkY8^kBm#%3Jxjn`Q0S9xfJs~w1mn7vW_3LZ zX(mY(37TtI-5P+_%*mH_-Xr2tS&WKJaU-EAnB1`5fpQPn+*U$J$^uC+Y>O*t% z5`zb0)Kv55cyzLODe8=ASEW&17l@9ua#_&_&pTmO`8Hitu~vq~&5Nt}Wtu-@p@#ql)5)*Qd08 zr^~67{5c^~`o_Gz6n-wDunLcTeC zL^_in)b{os@p_zMI7&N<@ES~y8TqadeaB&H!^f{r55U!?hN(6jI z$70>#BPb9#5!lfRjO`U7W7;t4|C-!^FQg;nkN>@OFnW3NGNyj;_up+5)teA# zNS#r8aSO({pZ*x|Ko;i`tg_mObaVBPZ$KPs;v=Gi)^qtU2m#wklZ+F4t03SP(5WU; zrV0c{ZcUh&w~|77xznB0@klzU3QI5rgIP#AM_p=;2%IHp-xE#aaH%aEiGGq7#Q#Ec7mnIL7r=vf9u-7kBZ^HLvR&Q-8ao2WcVNciPYOQzVp)7g zUyh2DKFbFVkh4Ft3{2|?Fh5SgQW~|jnSe+6a@P_{{wQSg>dx2;c0IrQnKicmE-~2X zHe%>A0MF_(>>z#>!12&sKd%Ba&N~y6(d9ZtgbBo^(rMPKc^hX$*u+Z?tz&XK-B(N- z+8Z?mISIK|d>8Az-6Bv}274m}uLu4quw`#uX@_9@v7oYGDVZ8-OZ}#Iu(y&brH!29 zp}0fb0GR|+>{$Hz8gqh_W(7+Ds)0QGBiSTp0MO*1 zGo%H}{~j8LR}%AWs%}@W9cWK_9Z?h&x#~@{A5)bvZ4}ZYf+s*A3A2YVb>B8NEssD7 z{*qXD9(RPOoAST*`~1g5OjA>n=HhW5XFhEUEC-LRIO}b-)u7r))tu?o9c-C>gpSrt zWXnyYG)v65kr3(0UCZwgU(V(`R1lts-53!x*YflY|GwYTFXAZtU0JA~$S-}j<%>2w zROW3$;bf%snyBSF9ghJQ7+OQbrDxorkESe~t0YJemyS&9GJdj>BG?MsA0xo}flh#k z1X;&J!@S*z-{UAp+R}$r?yE1Nj;2%mSNdgP@$eP0zPH_K{qf=?cIq}U+q2x70`@Tq zT-6hqYl_u3pokg7gJF`1pb(`)DCKZ#CgF!8siWb;)pWvCqqo{ty56RI#vy*vG;UPi z8t!S0r6!4Z2c3m`gR0T*5%yV6oV$iAF?+zrM}t+ZO|Yq?b7t9o)Eks_&}n3@U5V1m z>G6P@LAunzwn^)Wl=_O8Y5;pe{suZqSFU1EM*Q+po6{Bw6DcQsRlUD#C5#*l=20&TC>9`lXI8wL&kBL%RCQ-$tqf}37c>$6<6qM+CcQ{;Y-)eLWyhATr z#HTmJOh`(X> z3_k&O0v7lFUq2eIqZp)|x)^-#TKl?-OMp{&Oa>3g8Pt!18Jk|eszIiH@W>S+KICAo zQ$QdnI*VxW5OIRFSLe-yD3y9(YY$)+|8p0x_bU3PQYgb)FKCUoGq5sAh^A1gwV!p( z4F3G%*IIyAtdJ=?oGoP{`_E$kcanjdfQXGC0DSb*-jrQm#W~E@&ZrS{TfRQEiUbg% z#nz|hJBLBs2iJEhNTvaF`O-t{Y!oIiRoRJYFE)Z%t`LJ(ewZIdqn+GBGYsRL(-0MSLi-nUubEX~=rb5CNmx#G(l z$0+_jp5y1WE!u?-uv3;tM`(txGU}lrVw@)I2F)AM2mpVOEla5C6t=y-Z+;}=Wt|#{ni7SDUAo>8&4G3mJqC!g22siMr zK7PIYpYHyrkN@iKe;WJ$Ww7OPT#l&rPe?iZb@-FFcgjqnIHRpjWpxgmgGHUVFu(C631ksJmb2>TuE z7044HZ1E^*Lz$of0HcV+Ktai&_SY9ta3oFFLKXl;F=bg99VCkZvOv?NEkY3%z;B(T zYXQ>_1}SaFt@S^K@0fH;x6Rk>Xv1mV?kQ^diyf0)D}b3m*7D#xunU+5d=fE7IR=Q z`lj+tcHD9ws_rx6)iOX_1eni`ws}C)hiMi_?|e)7g&Uc0vw<)iFJtP*)3N8{@o_F_fUUHPASxxvo~9EB@5CM3L(7QNtw7o z^GX{1+vo3p5-NSqrFy6B4m{9Iz%ssnxWGrz)pVARhP z5Kl~{xIf`Fz7O-i@j=GX_(0^&2Yap|VE5e2CmOMa0vYeug+sWT(h%Ks6PR)(Ic-gR zA6?AU7vTCI{^>D6I$axTmG*`y-R)kxZLIwm08VrqQ&^C$e9ArrP?QMJ{l^30Jy^Y| zIZJQ-#XZ%70XLH&g8L-?Kpc!F`2leKnEj?6%xrQFxw zfeZ-O9U!`!XD!7_@M0P7$fh3fZA0|ge3Cu@5n`%Mmoe0e_ei!3(Hn@3rU!_u{>Mbg zYMT(;TT_{E28)+XosL!lBhJqo(rknu>zvEkJ!%Q>Z-i&OKK4@^M%J8YMOVQT7JI+aPq*3 zOe^pdHdx*&G0%rp283ie{RMue!TBkK9h(Y>p|c$%jGyMM)jz_O0xj5s@$*(eoCs0B zD?0%4iQO^$WV7jDM-jpK-#&m#FR}gbB{fsE%`^5APLYYYC?ZkKQMG7&T!#_UBTEq4 zSVhvqBualX8LkHQ{8BNWAFhD0^0)#*h;W^0lddLN0!!`mT(@eFUkmhL5x5i=uyr-cffrtD? z6sP>1h{(P9mZ?rxP9nJlbT+|2VaVwA=+mJAk=wBzipR2gyIR27pBWjc|1S$|-=0{|f0J&jGMsB|T_8 z)X30#h+}05knoSV`9E0!7cTkdtv3v*BtXGT{rJ5L>FSZA9wipCdx3HQj$yiF3!V6b zc&Zl_mkJoiM?AdYPi`X9j{MVX0aO%Fhp>#pR?osnpZ!VE=brO9e@UJ_&3cy8x-NsA z6EfP4P3*L&>_66eY_MbFKvUB`wu(=liV8Si1JaBFpTIphQfUGzOMdtZ`p2G)ia9JG^%&` z9Ds-cVss>X=Fjm7AOz$7BgHVnJ^(Rs9%%0|h?Dp`eK5i-0O`;O)Oi7r3ZW+y$~X`T ze`5`RPym6Q@-uv^WeYGe$z|LFs$-XO$-jL3IvJ0cq-AYeeZkzG6BZM$&%N#Do1FYE za)Z~UqT!OTBwbgMT>$gDBsf7B-UF3ztheLkCvoe&sxtPTea2g z6+pRWm>$%3*8U@x@IN{buY0hHckbZ68h4i|++0YuF7cIF?ZP{t0NCyH=0CJYU zxB&2YfM3y-hv71K21Uk5gUf3TwYn@{DBv>in2054!ucS@C&5OP)&ku1C)c1ggd$vA z>l0jttaT5T1((}&-+Tx|!ey^UScr=T#2#PH zOD}oqRMH2`jh@2`))v^hxd{6~HIV4hYSikPC@N&XnMw|jD*dIh-@Lvo8?fkeGt-Rd>|J_-68^sSmC%}YPpZY)y_FuU{*Y}$`2ciyrzpZn&p!h}SyDM+1B;)QgQrkt3!DHXMc8?M8u5-An$i^Se&PPwHt1o#P z&e^DruzYe$4t2ODPk~h{D>CgftuY%Hh$-ss0+c^;gr=C49mGC>EDUC+LXnU^@w9T1 z!omX#5(vQTe;^#7Y}r~}&b+Y-4LBk`|G+mKPr=jb8i`}i*1~`z!uOSKm@tT4w>-J% z7oH%7+dcTOx>KYcD&NKbFf~-oMEJbl<0qTr-;y;7sB{n^`sq7}Tqzh4I5YhD6XDlX zol$(Mt%5jEiOQ)-tln0Akds0or@{|jy2cV^H7IF<5mgklnHClQ8w1wWkX&F&=*qPk zk5;{!bnNKvThX!ldRtk=8{gjMO71Tbft+eoxDWELn;NK~ znL_Q0282C~MP}2gp^zUm(#ZGtF;bbUvp)dz0*nC(NT2$*4#2*SpSc_m@N{9Aa@wV> z2EMV|YMv#e?lnmlzjLeIcQ9scldNOU!Lm4M{kqL0YXC4m6pgCKI>)B$W@v7B|4PDV zIN$Q9tAo;gDA`|k4G{gig#TCiz?XX-Z*+a>R_0dQReJwTB-9%^FMG0W{|J4%e^Vvz zjD`sN`74jmX9#7iE}m&#Y5RP=zTd0LXJY?1!eW$A7`9WA`m?8T^f=ZjwBQBK&2k|t z{f(hZFKP4tVlGCRh5T-48OUtPYKJoWwjBp8qA@&u=HA5Azfl-eP3+A?`$ZzJm~Gk) zKXdDjHs!CI5fPrbNZ)VzNLdil5Wnd=2W`5StCCtv_x-FzwhxRX^bpbh85pCc0yy%Q zxFtj1{BO)d_@D7E;v+~=uI5@){f$~^yR-|8r1_>=^zAuhT?mm!s0ck6><@w-KA!ZN zANHS4M`sw@r19&%gWnqL7q8mpdaA*wc5Yg~tvFhGA1p?9y0o>CIBH;%YGNR8rGNpI ze=S7f*u(I)Q6kiRP)O9Cf)hE_$kT+GictXYCk>Ics*}a-3iT&a+H7I80=6+&m;SHi zQ}naIk+`{3F<7To!Zokeb-7~uo->8R*N!D+9HXWOS(s^BcZle)r_)?D}6>D`3>uR?Gv_d$?q`Ai){t8dyYr;+n~q=wBgjl${CCCy8U{M$Kgj5lAXE+>X(6~vAHobYT^dJk1K)!B2q0j4 zFcQ)!VJ2i}0e}@Bh&In>=SOcFun*5|9_Jl_BNig z;_83dvLJxiX>bf2Vwc_!2`derBdWQ8Lk8eEsB2*yz?VaF3ZViXh3j6@?y*E7s|mqb zXLw6>FHZp4x>xT4`zH{(55$0oJ08ULCDA@t+Lv#0c&c(Mg{XI)0HyUPUuZ)hIWzw< z)Z2=9zN~k%roW-$ncT_v6UY!8APfY6o$fo0fSTDZj8MNh{Z@!_38ytb)^gnp?u2$- zOHO!MR@dV)-C7&%{8-k0EJ|gkl%xzgaoWD6;>YSPLxQZ>R<{NEo-2e9_P>|cO*^=1Ma%63uw81#>XMfSQm2&xY)hone`t&IO0v#>P2 zAA&MEil`qGW~Pz>QJ?lHs?M2i<`bb~4a zOk+TnkBvYh)FHMliYu9a@eS&(C<_{i^Zy{)pneS1I5>(bioY+5@ciJp1$coGaD)tL zNtpUiHlk=hst+51FHk@Xl`X*E%r+M3Y;aqoxvC-LA7a|lS`=QIA0c#k=XUAUtV_OL zGKG10W|^KcZ>Gmc-xeZP5h=WEB)l2a@tXg&Mj-==5}}O@Q4%{vnG;D%%QE>JQ^B4} zhCawKWgyk~K-3nuUiwF;1?0X<%coRwy!ZygBYO$NpwGc7_5;T##0pb_{NT96Xmjd>gLd=7{2Q489SiB@i z-r{K37vLsLO)@mlWXE^eA_tw+dNTXDieD3OZ}$px}>bwfzHQE zgvTx|;+m`vJ=lH=UrP)kV|TXft~tb-S1X} zC*GuBbwLe3 zTmkJ7waA>nj2nabjE@CEN*`v;Z7pI=7XW6Sd>PpyBrHb6+ext)43!PBX4pBv%Wd>f z9!CnA#AcO1{t|}LLr<6U9u2c`{dr0L#}<6NSQZr?UM);G5SklX%^kE0m2Fsdb*<~x zsN<~_+l~@H4CvP?DGC|EtDp=i*a8b`^uZ&FJ{AG|Ps|(Fhke`^-@~3IZc)(KyT=i` zM=vUnF-|XscsAghTq1&d{Ws!u0rVS4(x;0vLm=KfCUu+8Ks-U^SM*(t3Qq3fsWRFm z+>=9QWWc?RpL$FdYHxhF|IgJQdoSsZsdc^TX^ORESr+u=ypNL*Pk^#qe|#`|m$TkH!3Lt?JN*pZvG}da8ktqT-R*?~jbL4y3K% z+|ImOX=UQ^fYaUPvmm9z2pV`8nl7+t$b2HgQ_uU`O_Oa0Aygtnvx{X|n>cFNTvE~#* z?+mn5QlVi2bu65Rrl&S&vvZA|!up0Ha9s|v-AG5J#v=_Bcq8L?=;LF1EzezIRKU)H z_8EU@*EN+Bio`xmKXQ zui>^Gr!~vjBWwjIFk&wNl|*$9Oh7HIP*WO1^ANvD9%wT{UBK}nHV75BkriS8ZNr2Y zp;T_%nKqwm%bx_XPGm3>(zgoNaiJX%Cb56&HMTbe^5JE5Z(&D1;-P+cA%w;g0u z(Sf!6h?D#YcnYT9=hF&utgCRGp}lmVFi^PxYLwUpy+T7NU4!0>9lF+wqBmFEemWyQ zFs|j}n~z~g(2Bzj(Cm--Oy!6wmZP91pMi07+30nnrcXb z0{-Vyts|8P{rzC=i$6^IFyY5Y;k5d~yTP*$LL(ovtWH9q;)1w(S9Z*mD>G^KJw`W6 zO%B>o#;lmzDz)X#r#6rMHF<_ysgzWVXu0s`NvMlpu2|QxJYF%(qlX1HNft^ZmW{MX zaGKCOQNV=!9hQyoIaN7rACf23MyxF;7Fzy6av{pN8aZ3kAq=dAM0*b@S`#1>g04o` zdRv7u?78YAGLXGMZ0M$ip_EI6O@3q+!gV{uZ!1f0vn3kSdm^n-M`Cz{O-5{mJaAyn zMf|BFCt*Y2%-YYst%3N z&<`cwsBdC)G|gzNw~D=l0+R;6XYIK%20HeG)#;aUo3^o_?uYF^dY{14w~$N+hn?)a zyQ$J0TJq@#(_@4wfyzgC9qKNWaF;7m2F8HBNKV^(36yh-2^a>44rtzJWZYo)kKZJn zzXT&2UU2b*0I=?4uJg0Zo^+soXlz)i_@+6wT7Yn_mYyy??YfVzB;uL(B>C zg)^JTpw3UVx#uY-!L8gt+k?Wv1p1$cQ5`(#*MVw*Ev{!x zUScayF4;&NNWZ||ilbAE&~?lRg4~o79xzQ+9#ux=uu&?BvQ@}OQCo3@*M?JRhQ4Su zQxzy%^~BT7!APvy8jT6q&h|Z0*}xyaU7(9|+MDD{W8G>yVQ=;Q!CSpP>Y|RgKRM&k zZULo-4ds@=acI;)k!v6%UK4a?v@eOCtNvi~w&L;do`W|G4I4Gwiyvdgk2z!C6`O`# zIib;-U}%xPa~ep>Q}E>wJRp&s{)MPNo^#`Hd2~eN{YkMzBh@gm#k|e34!?-65OZRU zbBKEjj}y1fV^@y66m;@emNFt04Y`v4WUC zqhiqI629loCSpX7aW<6bD)Ow(JNi5C)_2KSV78!y%jm_yQr} zGcDow2g33-tlB;*#1h1Kph&I_6cfZD6_l1Yq1d*}ka{O3HV1Ht<>7p|e%h}Bi zV19r~0d-~0EvL)!5=ItR!JDy~xE6e#hmFUG(D@f6hgh2J# zR-jM(U(x$=g&lGsM|%QNz$;f&RyU5xZo9qz$^x%dkpnJgaapU6*EvimcFQGZ0AMop zR!X4RRJjGu=-MyyzMVYb1^sy5;O!NRt1+#1P{%6*rR0sK0daJWt-uUpsioaBTjC zl8trG((EnY%mvf49#1&w(HN|;=KbD4%g^~zwUXE0H*&zPGS@&*tOALYK;O0DIx%LOkFh;2&D+g#@WP6ghHZbZ=K zO%zd=4cjm*M^v??^NvH%$?_?eSp4`-o)*ly=FtX;(7Fyo#K_=3U#`L7; z*?4IK10M)SHx|kmcmG^1YA}#{NxH{EY^Z-DMHLjpIDQcR74%i!Oqpk# zsK!@?wuB33>$sb5ZCK9~#3I!ja4YDZkCL zk3`_iWeZ*i!CkP!`mnT{kDxzfzF1B2eh0Kfk7lI283MX1*mG^2vqL?f9$R=4jYZnI z#CiI{KUEEy?Sxh#WV5^_yr#%DiX@Xt`-kl?^s*P%Z!it^H}iWN9vW+>B+=wt>yllB|K5i5#g5ahm+c~w)Q&B<+wfF5 zRG+geb15v6HwjP3@-L$FkJSnfYVB}nFw)y9cToPj6^K#431B4NC7ojAH56U9Tmu;pqJ|mGDAd^Lf&b{ zHvm@@OZb}VQE0TeVwsT3EdWbkIS1oP`1@$z=W8xk*g5p$jvU!L-P+!_5cy`Fhpg_& z;5l#?D6cDqD5{(OLnkeanB^N{@(W`t?bB`j)cfVu!bSH&eQrfZ>MPDy6^(`06D+~F zbNma2r*VJ#5dVi{KCOTm4x0S%NHTse?kAWWl6f_n{Z{ZougIgk)Q43t1F(UzQyxmO zSZ?Jmg(=jyy`4CE(>S>jhoR8jQr!TSLAymkk(bE_`zrwcMJ|S!mY5`W*|({Q#eXo! z{t3Qg>SMn7-YBBx49nd<^Q(C7tYoOE%0}-XFqebzC(PR+jm_3{g7;QHwH^Gx z3WufLwY<0LTeX`@u1~YF%RFM`{?q>Fug>)U{29CgCyF}(f80n};B$2Ii&`6A{_B~I zeIqYMLH1bbI}0JZ_w{UW$4bQMe8QZ|R>4ic!11Z5oErs3lm$>AhhFLuCB_SHAm!z> z{FY6aodBkDE(m} z&9`%lm0Q2O^nG;kOLz7%xkdM}oZbvy>a=OozFTb4T*K}#f{a&36e;w)^TnSo=9f8- zBL%}BMA!c!JmEYzdaj#G4X?=b8$u^y#@tKNi%_<9#zr+nW^&+mgrn-J-~gmZ^=VNB zY!$iT{Ug-U_cr=8-WVw2zB6Ui4Vju*kpioh1UZZlS5kP1WdJMWg3O@gf@+AC3~wB< z%pZGop8%H4gp9j@y>%DVT#Z6Z&~CC~kXFjmKhVnd5+0VmrukK}2`QHyyJ+j3?GIIu z@H)nFS1MeLeC{X7Lv`m}ovnMgLS;=)w0?bcqGh7S=@0Y00d#_9yOt)THyPcFpeq@5k+0Is9}6BmtNk?@W}xQr z2Q z%*KNR3vf$3v)J*3PRLrW}_iJMd~@vEQ>Xc0>|Xo`djnC=KGw$7&eVEcm{&iN~(O#Gatz*LqWlK z8IjW->Ad9RDa=FAwYxjlPOeE^nprVi`nD0=lN8TE0Q?`7AnoKsKmC9#r>Pm(sPLtABa(& zO{xHERf6KgAhYXo3wXN+#YB8Jbi5R@n|%v?heFQK)}_hp zEpG6Z3_UCde#G454--amuKGK9`tZeITKt?C1*D1|yq}3mxMk zi#~ioZ@r@6FU0jKPqPK3m(z%OFaCq0*)&Lp*pjKwadg?gsfAiEW3E&THiDo1ORk~# zgsBhtUcCT^I^DB38fg%&fSR9#WEE9Cn+nf(#j#%~E`{!GP!bexBRDikUfi*v zZqY-p`l4F5eBrK72cxgvb@J77Og3XC27`$Tf5&qNRbA3#xV^MpG_QXx zy0AESmz_7^j}H#$pFBPBZ_8r)tb}?SR~4cmkZ@e9io!9+Gg^27K=VT!S$D96lfkcju%jCB#zz*5q^>GD?W1< zW+5I1rtmlh%NH+-*;=_9(&g~cOMww6Bn}%F04xTW=1x`PHq|}SxQsu}^Dk|y)5`D7 zCSQyt&|WKFbD4--mWZ2+rZUHbecu>Nj5Bl`jh32QBoy2PT5W*2B0e+_h_O;4W|PB521jiuyX-$&J7^a+HKpN{a1uXqetAMRlYtlsiO(>8hH zg_wmgF<`RYaY`tjq2o2&L^KOQ5X`@YcZ?Kbqwp!8cccK&>F{^hb;E~=a+|rK7it$6 z)@dh+qMf4cug7j_PZ~G)6LZYcNGoANw7ohRDS9;L9DUQhBP7beZIQ-_g0UMFC3hd& z2M6PeR5rN9_h(+Z8c>EUf($a2Z4V(|F;oRD!x_1rI?L>HKfJA;VYr+;*g>#r;b~Zm z+@(+EO*1gi_`u$=`PLHBTBjPHS*+DE8|g zrtTbltpn7F0R%B?Y4W#e7HL71Q+}G`b>Vi&rO8Ojbu9RdiR`2Aq76dJO=QPf#y+G* zdv|!%k1tpmFjeWvQpXp%PF9Cwd&iE!UyHjve!;xJ%htCNPpH2vne&N5-@nNV2P*3j zEElz8y6C(~|86qMKkk^ml_}}xLo=uA6ai}_*+=dd8iQQZ@XyD?{bcpLDpQK_`V<>h zLb@||`gfJ!MUK4veetvIw45qYXSGaNDiFjB7t`@unwb2gck@;4Belua&%6hZcAd_7 zrWmTPe&$r&G0oL;eDAaBZ5xk!-5cONb5c#+^LW9J6ss@y0yN`_HP2p;^=ww&m*=gQ zy7%d2s84Z{^=2me4t)$b{O-DMFb9#1mONL)ep;e#>FWvpFSMNMDPj=EegU5i+wh|_gW+I7CepPhKV!w;5a zd|2>f{^Iv6h9$*FFecSDD+FDO=76ppYB=j!ceXFjsjDVQL2wR#%eRbsy)f8l9U3@n zsm;#J`UmEriza4q=hBq$ZcjB_XL?x=v&D%7_Hk55G zwo0fdW#Fd_!C~b|v>gk&YEzuhW*sh@19No4IJr&JT!u5_B-o5hb^=~DOXd}GSJ zuIGLV?|m7^W*bX8?)&oCq6f5InIG5gj9$6=dXR{m_g+IE9aA~a)^-tqkyPakH*8sI zlNJw)QxVCZ!karmW(s+ZTM=S9N~g*d0V9=VAR*!Ru>Im-^FO@^L)=p1p)M}R7HnbXBf-p(B&u#3Kd6^@0^x(IUnw+0^#95^1pH< z-0t)}{rvtL?(g?HR$ia2n=7VzHlBZW?Bf$$aXd3BN%54a_{r`>;l$Z_A%ph)*K8^P zn~1F^E^=yZ7`?9@L4iaG`gvE8I!Ed_Y}~BAoKXGF?rd-RN^rs1gYWk{RVP?%Q&F0G zVvL4I%?=Sh%w}fP9ZkUvGkJb%P`2)yo0{1W`6XX=yzX$6%jRBo0M+kK{!lu!D-pw3 zH3UP^dKS^EZyhd++yJ}SNhofyg4pslTBj*hx}8oW+vHt44w74wtEB09ZaG_iN;;Iu zw&>=vGT-a?$vq=Yd<}j30~ztKX8jKm;hTlQ6=62^<~DX7)@d_U7j3=kuVQ$`MA2zk z{Vqb+O_GuY+7hl}B5tfvm{EOKwxzpbvU>M&1O6=fnEtBp{NF*vuh#g)5XsglM;day z+y`rIssSSHYh6c+9qZ~{9VK-<$C0doNDicSFX5M2UnVeVx~SSQg(1E$_^!^4W9-!5 z{Cf6hWGm`i*@`2=_A>pX{S0kFHO_px z)zBYwrUIGB-Ue(o^uY=clUTlOVKHf%{( zxEp?X-m=2hSAOQ@H2sQ7GiprpXs%Chv<~(T5wISwnij$KYV}ZRYk@2%~6L+Z&#wthXuPqHy*H!!2}3*Arr+? z!9gy73xh8SArpzd`wQhfd&L7G$7g&<{vC^XGd}IQXby``p7}8FaA{}LK7EQRWS?`O z*dSL>`?y59Wf-!+<33SPQ-LxOAf-v4&<8Id2DF*6W-#~?+m-Y_hTT6ot8mGGcLZVBE4?VFpaWc;J){re7gn~_kOO?1@Mw(}Pbi8{W7b9g}dFG3)Vas*hBc;nS-OKlb_52d>sAGf6 zF`dI(+nLJ_{!GgkA21ZY)0O%7H1`)%6RGk>rDrFa)){s`dfIVaxBRY-L(v}+BKGW; zdvH>*exL!KZhM{``EJ?1XIF+kI8gTe@#|Wmeou(&8+?lfC?hT$)X!e#I@nd4lpX3y>2f!$0i%u{8n`_B zM_pb#Asy`QgsXn&WfM5L6qu>gks}X95}~NtvO1BjaDwNb7uxP@iExbVbned|&I?|i z-Las~A=vnl+&VbbE+>Pv;gsvk%hOhZ64!yJ)o`y^`wYZy>FMHuUTx)~*J_Mt!|^@~ z495G(Td37Aj=5v>$&GBY458!eYct9fF|WWcrDh*buifptZAm#mS8Cq!{$eX(h-=9G z3mo>uDKje!_|XpXdAH4rTk*PdXD3`PS&893-o4I@E&OOV6^&DG=D+t^6#UVL8Ql$| zPqOprf4#f6#AIPgMmqcQhQvxUd8 zIN3xs+h3TnPkd?C0zU6kmYeQszmuB%DLxPu-YKTfKg?vsT_(4os&0OJ-S$}-Z z(tIbv7{U@!MrK}_r0ITczM@fyem9e?=ymVQ8&3FAKg0uEB{bWf?Pu%(@eLTn4hO1i zPuEK`uUn6pqBDeIxUYMsNN)aYlW4GwRWwciQw8@0Uv4ga5LExiZ{y)6=__rMwP!w^ z49J}6{VryWzQ?5Ro7U2fdc*lw);A2T+Lw9UZVA9|G~UT%oR%vX=Q|L}jDM-J=AE=@ zA@6x#zO3Vqmn!#Lg4Qhe*w%gT?6L0D%x#@RV5y-;@4lM7=Xn!pW$-?_Pit4bK=5`>6x> z-@(CfU5Ldm90&D7V9-tncK;363b3hbO-)T_8~cbE9<|mY79nL784lGs)4cg>c;;(* zpQ&0zuDlxSGhpuBcwVU^U-sqxgDv5Qi;#nKA1KkT26yGuMuddtUM#wy&gHn)JuA5q zb6uxX3SVixT-fAUYi(1BOhHQ|NV0aGFs3gaPAme{yXQ6kcdKppmZm+A+fC4HpWieQ zoTpR(taHO*7-oPV94CllAAr|C|2}oUS+I%p$ItG0l)>h&wE)!?C<7ZRcKPtfc@xn+ zO67}7Q#v~nndOh}`@Na(N_;+9tRX_SGuFE+>7C(zm-HEV(ppvmH}8wbN{_BxbJm_#ikks)WZ#DX<(CASrxK=i}4P_9)i`hzAXPpY>+c4`G%Ez`DElzgDY8<}umiG`swyQZwW#!2b5R?R($*RPkYxPUGMh~4rllo7>g=Q-4%n}#B#QlNSgWibbU?U zU^mwa6xSih;Br13|H1Yzuw{#RG`s9)eP@lol2}qF^rAm!R2}p?~K%^T&NkVe(I~QmE@ArOhy|>oPT58Bm?)|=V&OUqZ^U>ps z>sH8xciaq`X77!F+*BO53tgAY_@fvd6T%tVTy$~@ZP8Ix)k$0fNH~|?1}P67Qi5A1 zKg;^|=>)CTo;pjHcRLerHtdX<8IYdz8{@T|b;`7n;^F5wYA#cY6rMjd6<7&o12CFU4D#RFgd zmrjZb2mKaIu?*(5zc?55Wfq`-^k23a>4t)%p_c+_lGSSCI}v4JOgm4^@0r*{ z$W-^|dz9c}*MuwLd;gT07bs*NP5bMvpm!E%6x5U7eqq8~2 zS#BdQV?G1obsjWc<2rL&pI?M5XeyG6$|syV53&H1L}yQC<3@*Bxrls zJ`(ra`{iOOqN-(&pedDC3@@Fkh&R%o{i6i7Jb!+%&G;Z9pRmbc;jfr$7#`PQT8y8W zf#I<8wfF)S!PwHZ+|yo8ycLkpae0heXF9u9Tz|IRbOyB01bj0=P-l8#aR!;We|}iT zuhp!GDDnDoEv*$0P&XF6#TtVKBSxk8>)ob{bm64ewUz{Jyuem95JPe9LEKO_g7@7d zt?fB{LbL(KqqY^hF&~y&yt}#6ACMH)uXw0lft(Ufnn|7+BVtc$!!|qWBkiu4CofNY zDM%MvI|t7LN?=5HK(>1GTZhy$@y7w$UL#5!eEg2S&_DmJ%QpPwLC4ONX=t+6Z+36m zpYET<7^Anpg%r-(_-BuzPWWJ2h18i#z9?QAo4liJ1fSXg-i$ygmd1&IIM2uC5P;Th zHS6)7<+D0fFS4P}n;Ggcnx6I<5!4}r2H0a^O6}dBM8Cbx$UfPp3vgisvRRX#R#w}{ zS)euW$AI6S!>FLetKtZm-=4-7Zm#A`K}t39Uow)Omh@uhspwC5Tu!mD63?-R!e>&1 z*e8BVg7wH4zerwOynLZ=s^x3^oNL`Qc4im#ZOY_cDjdZX83XdSQOS5-Vu@Xieuf#Mw&lQI(RjZ>!2KHlv?{^^ z`Nck^4U1mR(~J$j0!{g;bq89nQ&_MvLUEmb9pM(W)U`2i6*tF1aE7!`-*1-vTwunM z%O6@Cm}{p?dM2(92ue*PJYNp(uy&nuRLb6^*ue)N>3v7*LgjmSfgBOR5yMEX*tVy& z@M|l~cD})$)_^tA8v{qogrJJ2u7%=QmVmOu(|aLBjog=UdFJZJlz9sd3~ibZQ-*$` zsQ0F*HK^u7-*`>eROsf`XXBVT&ebkX!+BGmN81@8^2q7Iku}Qct8eYoNFtBc>tpul~>Hf)PGJMD-F$B0wN zJ|_W}jlcI%b}=KQJuv+7!7~oYBdd4kIY9fQa(gy|m{`BQwOw*6Rg|V~-0TnkaK``7 zUBO=EW7ac}Hadl?u4JL0PYLBGho;mk!OMKIlHO8;i-YZK>(4TvGd*aDZ$ z94Q&g9$T=nR<&@ydNrs;f8Hu%DpE}S*HIx8c#VcZSNOiaO(CLEDsM>=y;Rbi`b7$< z+%3tuIo_pYk0+21bIFOfzSL{=Z}5=@f8mVgJ^n!QFA}>x%~#Cpmwde|dbPLMt&=lF z#(3lrLjqqMD$xG?qzW^fM25{4Uq${K;}xBJk2EvFDOeR9gQ416=zw4;_UV#kKDKm6 z!HvYDH=VaR#HYDx^gK;v%=~(_=TTwkaDJ+)*fQk1)O$+S0OzxK0N#?+(3eyq&Yh_YF!wFC56eBHcVYBxOsT}VJw1<28>4EwT zOvPZ=8h-g}lmZF<+X5XUtz<&krsG*R?u#`_fLCL;sh6OaW7rkF8E;aKo$#!H7U6_w=^$^Z1#A>7FfRd zb16{A^%o)cy{CK74~hxmYsiY<=l|IeD02{gBM5@6Z=@4`hiy~GTaNk^thq~}(|^-m zC4Y1^!tbM*V{U zIoY-mRBxbvA)A+?YW-L-71X5;sa#I@08h~w>!=aO)9eGGz+}0AIY=}EK6eU9h0}As zqqJSrT+F?E&&+x&bGbZs2~agt$=0{J?*#?*f4{Fe!{c7Zo1)K) z=ALpW&7YFP4Rmf`@dk%xaoIggdpP#o*k*t+GbOb0me`)l50usBPdjwrR1Yd5|5yw7 z%c}s7yjs+U3}(}f7jafY4v~_C(?et0_WUi!*QF)gTva}NFlUbkiql*NTzZS!iyg@R z(K!BO>RF2>vVKuWIOIE?8(46>=P9tc&-Lef)jd^PD>tYp8%#%pfAR(V(5o|ZVy>w@ z-89&yR~;xu;`4(}zQ^^KU)Dmb*&R8ggR@&#-)8p|fKsA{H#q66DLfO7X5^%@nRRKC zIacq~I3G5Bo(svK;ej&RG~116&_OKed#CrRa=~!=PVo*rBVR1Nl|@^i1AaM2H-~Sl zh4VJ1?k>dxE2lUtoTM7=dD1R6CFx`4(P4eXW}Oc|o&o$-npqiR{XHr{7~ihp(i^LT z`HgPA@^)58#r0wB&L?v$qCiO2-Z33MFhxw6pun#*n8INH<&p{4PcZ1%lE)>*XsNQ9 zN0M`jBag#ss}due#yePl3}%CRF~~mhypM(t z{Z0#x@GtC-9emOS|vZ8@u23rjOoyulr0SS+L`v3m)Tb#)NW74A{$0 zpaI3F9}{knPc)o9b7rsWZMKX(j*=A+e;cUO^^poP!q?bxKYx@%C6M|1{{CH5UNFeQ zp$ixjsqJn+%v*Z4`=-`97;xgwq3RPGO@%5L7-lS}OUS~ssXenctsGimv|}RRjEw|= zSLH7Xp9bqA74;FEA;qawH73d-U~TnPZ#BxlEdXHd)S;%|4pVm}17;rUJ2QRhIcR3H{kTX1iYVw($Ox=?I_!?C0cfgcLlSmo5GGRLvkDhS9KNG0O;y$6e#*-QF{reLzrn9` z1NKq1VS77=zP^Imx@+1H^MSq*-0Z}^Mf$NX$rKw)OCEGB1S6sCb%@gA?Z{c{`*i@h zjGz_rO(zs(9IP0(Q%#1NIyk*$IW{Qsq}?0ZCv}dKV@AQfQA$f)L8?u7FcluQ##sy- zR3JQu{(tLvx}ptxl@6ZoY(3>v`oIkIrb%;Rup^<@l(6K{cP)0c#5KTl?k#OO9ln8b zx38uq;piTUh}kO)QqxIF*oz7i%IuC{NTc&Do{P%`Ox^XC-xU&%0_;+q=)rBEajt)t zfU|Z4wjZZoJ;mSMB8uY$bxP$R4+M6jq4hH`PdR_w z>$QI$!l01xuzat6w+l~b7}jey;`CglRO$SowUUzCkL7-{5>E+QwWD=VCiL>w<4Wwb z)&s&2lU)Dpt<~#(eQLf|aof-5erw(R^U9aX=cFFJtXfvuOP6=chSrJNr0&k@cd$?5 z_>}wgCHgdIPr0`wY`k#)0jO#goq4L$!CDVv1|BlE9=ZR_ftqx+^~JGKL4UdLeo*lS zY*r#_an&HpUENs9Wjwe?Mf8v^a(OkmC@Ct2i`%x0{F9?-W$!xfNQn4N>o)IS*g#_u zG<`>ItR=7|2tt(VoETZ|p%p~tCO4?wMw7V`l%N1^0F!#>P-e3IiMhz47QvqUFi)d) zY45c*H0{uQ*EJB^?hY7Wf~D3!*&ygMi34? z%?Ke2;xYH9b-HV|VcU{UcVeK;U1#!#RKY^Fa*LeERP0d3`HX1W#Na0yoA!|8yxiP!C(3xo6#ET^&85|B`0VR+Y2zL1 zzIErP+4Tn9Yn!dRUitSg(LUo28hqEW&Mas5E~&yRbL;m6EfinvdvWZ65;{=os7fFZ zi*sVowv^u`R?8doY9K(3Wux)_a49a2icBu>ndOh_DK9vZ`SICGXBu- zyU^gH%Yd2Tl)>3u;pG=bc;Vdc#YGEy#mOjiJwfCCyNY2Ryz@OYeY8493JLod8@b&k zVJFZH)S-JPv-8tP?{;)NUg~$+$_i~$A9wC&;Swlg!tKT_+deziOV;rJ6L;i32;fW&xKEC`N zL=A4J)ajPlt| zJ>4L|Pu*sfT88iZWYYX4WU@0W-gyGx%&tW2@#A#|uD5^mLXRO!>Gf#HdPOHDq?i!Z z1^eL3mp-QVug1IN-gn()=u!Pc!+d7FA99P+qgN~ARa&PC=AB`(xapCRIWkl(x<;M% zo+y?~cydb03LhUIt6QxG!(<=TEpbG>`adu`+jq8gYw9+^GJ<>;F?8=aEZ%eYPA7J( zi>~;23AAt;kLy#mW1wCu+y3;^Pv7Vi${UROI3nnlFPLpS6u*{r^^IW(_;2m<*M|rtG zp4A^b&n5!ZI0VuM#X#_SVoVOK;xVd3myL~7s^Q_ohqnmEiKyn>>ZgRb)0bgEwQh}@ zk5ZBi!!N^3NTIBmnOP5G;18K?c4}Dtm31O(WZ$nV6V#@?FoI`E`w)UeN2; zdu4TRt*#4~uLGyQlK%UyDZnX({#W?v-NYQBRDxqoDA2uVQS+^yLg#k^5?t+!*|7Vt zV}H7W%;=}*0g4n;^g&3-qxkp-PoF+*uLxYTxq&P6`u_Dp;l%~OA)hkLRJUT_;ZRyw zBcq{o@D`wsZ3+qs1@uDap6{R;Ff#L7)=g6rwALf8-4W>3Ax18_t9%Sdy zmh}}MYp*kmtp2Mij zaYxVh1P-%BU^D4s?^@t$1a$#?ncvQzkFvALxR9mf{&@h@mpvfr2Eya4n{`ne2gPFJ zsc5ASaNJJVdc_NWLU!ybaFn_Q3&~OMOYpXsqICkie*?0yAMml}xtD)}r*R*TnVKqz z_y>@^p=D5}AG$MTv*DFxQT9**5e4x&87#EXu95@6Lw^!Wx=TD2aWy9viObEY;5XR& z(kuL}$lgs*8{7wPm>LvXM;GZ|Z=(#LXM zzi#N%6crUUF*m;&A8(Yy^mmuG()y5ReJu&ikaROUJe>k;W^n|_E zoYdZ7w|-SiK_)ZnAQDpBv=H2x%W87;v4x~vP2NmmQasj6Qg$b~g;FBVz&=RiLRzpC z_|)au+V^CJzWTnnJWHl>~^xRga;nAPQcshDKL_7f8&D0bUil9ll_ zj3Uwm@RL%Vc+SXREM||fN{ZK%O;7LV&z}$Rdfr|O!0G3fow2S~H<)w^LP+wTvw%(p zdm}jJmUJb1`<$tyOs80qU=VwMXSp{#6*dTn5{=Qy?gaz2yKmQuzCe9c>9LfKy+M3c zW#yV|>(am3_S$pf-L|}yGPW&X*Q>E6XFrsFGfU+Z9SK}>jfnla>A+Y1hf);MMIgY* zp5cDzI1R2P7Qi>VB+RW?FC}%VBla|=f8*;C6j0MiYjq=977bM#RVW*4n&3zFQMIx& zGv7Ab5^sny_>GN?M_gQ7M&k#*TPKy@kS4usLpB|_`qi6W-!Am}_UZYLl?FlQuK&W^ z^JmZA+q?3nhjy!~8gG``uz^v=Y000V4^#!(g65H~t#020r)+;0QCTb$EO&QzlM5GW zLnBQEKJLfZUL~YNr`O{MiT^Vc2S~ffAG~7=P!`BsX7j&mz(U*h7~Q$~xJ`%Rn|J4O zcwgtv)0Chn>r;T9>dY81Eb80O1FVVdIxTRyq>i~Nfnc)~x)1Vy8;AT{tB!aaHj7c6%h=~~%-6(zUzx+%qWfOq;|MsOo5eM|NnDDX_=TWlH@J3PNRPw@V zUKY|Xdg8eMiu2eD{?|QFEm$pypE&`aJ_LxoWWg2MJ;P{Y!~@YMc6<)G*Ikj>yXJ2ApOhVL6C01noq*hD0Z`Ll;wz?P?L4>REOqB_*4nD;~(U18*1i`@kzOvkdhDdwp5kru??&=ucKhR*r$o%t4!;LnHw4 z(8cCasZ)*R)mn-4I@Zw8yOv+tIL11@wF5lWM15F;#IU|jaRAc)`)~K+ASCOgpgzhI zh2L3E#U7_>raVqXobMJr(yX2`kP=FX%rz-2Rn zG z)~3IGnWYqN|I1TS;8t7(YSeKO$zXbV`fQrfW*~e-w6(R1K^bs%`|Ap7LFw}T_+7@f zsQ1+R*4B5T9t>&9K8N_Z?9E*dwWW! ztoF_74H6qkCPLQm@J-sGv)Fyrk%p$Jl&4QO89&U+y;S4d@7}|z4wi`CpXNF8@r|Xm z^@Mj;Y)7Vr`lOuA=v1erYYjN3T;l3p!?cwaP>`*!&nrqwNh$uzXFC$f+3H~FnKS%Wgo;i%ulx(gg*hKk?3`NT**Ellk}yc=qTMPL!z zy?1YA*k;`yc^Z&O4;;MAIn#KN(|EkL7hZT_S>(b6Hqfi>klVjr08?AA7VQGBgNEoB z6fGEbb7~|((a3csXkwvmaa>MVRXBkDGK9AO$owZ6!?!4)1OQ;2nHX z;F*J8rATB?2!%i*ECfj&`_Xt!6&g!IKBozJmh=4Wq}yoQR@7)4iDBl0%_kRsH%0fL z5ZP`l_!bpG1T7RwH*vvt07_`-7-_r&$YF*t!k3^Gol<$X0*X}i*AD?EfBdmy29Vv0 zl9G$uN+S)YpD3tQ)4}Uc zhJH$cX{N7pJ+4Jf7I{~KCuD~2i^(VPE#_>hBV)MnRNr@)cIdGoo}qoB84=bC{)^ZO zIny&7$HPqt9=v0@&!C5Hl4Tgf3i|yv6Sy;Wi_c1LTboYy;}7VI0O7G;SA3Ys55wP@ z->Axn+9>vzctvyapMZz*>n7Vdp5&|#4sbmQlq`z*#kJEJhiSKv9oDsRdK@DooQx#0x7d!a~akxw5O zRh(7FcC7owW2%2Mcz~<+q$O1L)s5&}rarj5+_cyG;QOSQ0U~hq^Fzs|#`^0Kpbc9K z9LzB$@1*v2;5b78Zj49p|W^OiCR(nFj{`{H~S<(sp%S-fwKnY;y$T z(ymBr@7=r0dIUgfzVMpr|7}6fo?z>=IhWBql*R0z3wRthkdNJS1n{1H|9ndIxg#w* z{axN{T|=Wz5@xfIbCuXy0uG-Z0q8QeU+2k?oW2OIe@+Rmky6h$TVo>V+Mh(}F2SOs zqAY9<;fBNt!SpGQu}vSf*@Qcp9d= zh4ab_o+F=sO4RiluHE;FtJ^2xGnT+m)wv(e)tx1%%lxRkFwXOWwHI%Fkg|XJW@CZ& z_%e<{X;9yLfjYIgM<=4|@9%e|2c;o-2h-=$L+B5n@E(M)Owqmn2v5ayF~cYDX3bM| zTwUIAKw#)aSk=rQq!GFDZgC|;9`CE_l!f!#5t}e2M z;c~~09lJMC)>Z-pY|nV1BW(>B>*RnrmNXV97$vL?)6R;FIxTlh42&6d&H z+piP=qFRU@+upZ{aBDnv=$@tm__~LLZ@n&P^EYbB`hoi}pAJ#t)U`<7wjqG$CdZ$Vc~X_ICbb0~nMv6g=UmjfZcSv8{=FR>kX)b$CrlNf0%3b&TfA^_Ks z;iXH@?fSqvrc8QSMX_t#U?|_^3C{OAoC{zTrX z-UMKu!G4NC7a>x)wNynxK?D{x+I?Yusty${D6<5e6ifeD|AQHC-?rbhGBLRWiFtP^ zDr{&p*tX!LbZflp&g<8&4^24aVCvN%{Q+!~STl2KSRODAK%@$2 z7xa0`s#~M=iCE3ynZUiBzxT^`9i<$)u_?x)j?;7PA)XoohFCm>wr>zSSse%Q zGBuuN1U+iqL3CWsMF?knl&~O{2$>K!3eouAh+hAuVZuV3Gs&VRidZB70NW=Iwejl5 z#dQnUMSz1)=7h-;TzvNL*o?x_16tF$V-@^S#U26Vu4gdsQ^D<~SWV5t4UOF+*R_>; zO-Y8+1RR?UA3cQg37}Ni&GNl`jpluY`Sj{a zPE}c$)B_wDs0jmw7VXP*ye1Q-si&}mh;H=i3>pF94LQtz4NZh0q(XNX0$DSIR@pQz zaZ+V|oH?EnheYIgV#e^SPm^EDSP zgD|Kou#FB0mn;`R780q%K+~)#EZV(tZP}mh;N#{GlL?5yeA#KVFRA7V*GCWN+POq5 zoPc%>QzR(g98}@3fN&VcS9!$8eO~uC-hx`B{Pt{KmMXlQ2@e;{xv8HHWwl;?v zd~}9Uo z6CFD`wpiaOd;fWm1Yd!+noOg#hg$WrpgH@1K}qlK9c-s!-uU2lh_)Ed>Z#uM=JcZ# z4v)!2#tFg>r}li8rs5hlt2rhvF!o0?Pny#jhe&czg!V!ED9JF2kh$18h@4?k z`B0ChYM-PpAZtUm5r&9a{)?GW)jdq#n2IoLBPur_okhjd^OJo&8eTBBrgeK}cg&G! zY%GUT3!{23$&TxSSKu6vE*&}v!!`Xr0nOeKClAma(Pk{JuFK~>{vy-C$9o|tw%6O6 z@SvrBdVZv>u6DN9o%-_TP!S5p5j=e7&RXS@pat$CTV0IH47UXyF>I{MRt^IXlo-za zshJg`-ApGvESG*^xvA3U0_uZ%-!{2LItjeSyDnMw;BZB#3GDejDVs;r#)ZbggSUkB zO%AkQWwkzax`W*|6whu}l=6NApDG;hFYmdT4K6DfEsQ!K5^ELGSwBcjaq2~UXTC)+ zG!8hl$ja(?eEggSH>mP%aGhZVtTm)YD;PV7)`s&Fj)D@CpzW?C0P8GsG9r}QIC$6& zWAY|6!eL?Q&QNubuKz&|YOF5K;qS2I!0A#Y*dmQoOm6f5$>e>uZNO+@QTOjAYd>2k zlq$g5%8OHUDUoISIGryWbB_E#`{E&9S2F08k z!pI@Ao=;wy`Oe7SpFDZe)snBevwj-mkg;mu?fzzxrjeO%CdQ|sh84ami^<#)foRHU z^0F{ose-<20|s^IJM@JoyVrL#gLdoho&YxNt38ETLw4#ad@+>81)+-UIhEFcK%8exgUb#u+j`-rqWLz;Jb3Rr>SedP=04zi{b^ znlGOK3NJQmjm7v#2~dS8PT|t~D{tz7xTZv`kOflu3>&)C)Ny`!;guaBI3-y?Lhl4F z5b#hXbC1jjVw4x|dxTQDT?vqA9l}TEkvSh1_~ZQc9D(+WV@5Kmy1O1beeK#(nx(D~ zs0nYQi;1x70zeX546dob?LU(^%O9^=u&>#Jk|Y)WY2L0J8O&&s*2i9I4--DAZC zC1*68J3B0P(qt%2kWm02AHIa}#wQNB7Z=iI&)X}7;P9gkY!}WbK9;HF#`s%Or19;g zs+FhXH9|{U$`l&=vMe=w1YjWdweKx-mcb{GZU|>@3UeR!6uA~PyEhQv*b|Hw?woCj z7P<889US1vToD5MDFbI46(o{%Jof@dU}m78$Ay3&E?(EgKw=ZrFhw)zBD-ywdW98yqB@RqC1q)X63cT5;>LF`a z-6h&v%l?z3S>gNe(ndm%$m?Rqk7)EN3%KUDy>3v$-YH@yG@?Ad35q)X9LUiu5bccLwU>ARMu=NwS-q z>??KS4aG1&Mr=>wLT ze43}<+4{IVe%ScH=-z*Kx`wJRq^i&Ilqnx>x4ZNfQupiLt5fxV72 zqk;x9Ju9d(-Nly=5ByQap$*tOiHu*&ahoYsd5H7mW;L$;;S8L2_eW*>?e%h{6sH)T zmaH8bTb!2oxF2N+nwH{R;Hgl%yX5uZ!~@hRSrc`sZXg68$h&P9xp_x{aIeabj88ni z7ZQT8QXk+j3Mf1Okg{`HJ%YRtMT!d#zF=-RU@e`0=zyR3FOx9V!?vHj=zD~sG9!r!;?9S}o;nKVKHcMAh>|9Zf` zfso*rE`j5^_SR5Mq1AB~f(aoAGRi3yv6=&xp%u`ucs1jLxS!ID<&|v8q?dex`E$dt z(;WyvS+LW3rG))T!4n89(-N}Z^eJ#PCk7Hs2EBqHq`0qIdpuU2^ zjqKbH!Mo4n+u2Ma#U=!Uq1hwARpmN$t2KJVHQC>i!&l`XMZI>TJhDS+aj`VQt&(?g z2iHU>Oh5h%YxXD)n?kU7nFl~l4&>I!F(<`6g!NWH_R|}p6kFk&rptZZfZ<*BK~2X_ zr8-x;$f20?P}%XZf$6HRIhmP9Ei5+Tn#JTP8NI@WhLgQF8&3TMFKIjUwjEt{ z1WN`wFlHk(lHtptT{0fWksaRk;A}fBk}$jMagY41CT1Dg$JWT*!t#FduyMb(_!b$- zR-INGSm$kwX~-+&R4;RCmqL=( z_rT|nWRxjaZ3@SAYfc8@1Z3bn`hzRd$+bDQs3!>(J+jCvO+Og6YpgKM^a!Ga2`K!I zoEtFR&^?EMi|_`}a}0d=xxD?-oaa=3xi=v2{q{}Lt7Wy;g7|kTtDHZYu^+5_jU?bA zZVV#dKZrORC|Q?CDv$^aO@?Z#|ego2#EnKV%#6?J)5hr%s z`2O{9rq#Q3z*1~!(c_%90+(#G>&C@lHr4o`B;UkQ1biTHzAVStT}sLPFFF0&U!yHu zKERog&Q6A5vL9qz%kEsNy8j&budcV(BJK1vHKkO`XVw7`u%isRn>L{hrmY=~_|n`6 z90eKCBVY?Z8ZM{5548_{LVX%tCvy;{HK6`C3 zN+6xm?$P(CELK2o&i`ynXjmx|##^^-SG&xr&zAV9#kpxJ3Fo{;*bY$yiN`};*L!W| z*pB4&9rEk|Zq%%N2y#O}S}*kjbdj@j;)Wq@x`u2ArG=LGFGf?~@R082f_yTo6yLpb}QXnGRtL2BTe5`z^3} zKvz_QD9YxK# z+X{v(3thuE;@2;mKDpHxiqGRdBYiTrK?<&BnL6Rvp6hz|~KO>N!Nv zQuezKp9V;FuM~q8&kcqupIevS0^DQ(I|9`2AoUilr)MMhydgwQHtEk}W6n>(FA7qiR+>iE{XNf&Ta#;Jp zHc;C=zI|E>w_b@qESR``mYTZj;NpDu=u`1}Wz9G(<>jc@Jg z5-Y{z9^#{2<}j1z97^`B=q`f3h|#P`e>-dHH?M31Q{xgk9^d`~3hf1SEwF)?<9~&c zfhRgK{h75OGCNrIl>2%qSrxAZg4tuHW*phY7n@25S#Y(mh`TWXfvitMfO>yN+p&Wp z{CM^(n~YbGUMp&rWsy+_=h4<9H^BLyI%;tYv)zb8Pe1_T?j*kOKlYpg$)D$Lo;(h| zpBUaSr)>ZBeZLG7{k{sDbZ=c`6^2Vd`2Zp5K3O5cwfieg87%=x7no0<5DG$~goys5 zC2oSQu{(qkDX89ceNowm{cnx)p*c^T%I5Y#7_1;P4I0TI&&t}`C&5#F#r0%(nt)H zCY|YC7(Ch|*RQ!HSnF;!t}iign{!9tE0@GtT#5iY*arBxfw1^+J8uZE?=Y1vN=aNn z?`Q;&jAKW<=hvW~1t-fJm|?df@rEk0-CDKutT3ZokBcHpz_FEX9yF(3$AH6`*Vn#) z<_ABf0pE7Uv(*nMZGI-gjkJeBOwh%;@*Tt=7dDmK<73WxPzk^U)+_bs%EAzj8^MWh%WS_FFb>qV!*&c_s?B(Suk`0{mVO0n<#)pKS(uA|k zLnSKK)?_$z2&sDv^4L;|?qBFxwPm%(qsg;pqQPDU_JNvz*=)0#DbK|Q1CpU&>bcPo zr3AXR%jKm3(xSfst~lJ}X8ME|@aQ^pJ;z?~x1(Ezi+{)Y)~ZdI)1J(KxY!_VmveYF zJW-;DJV-eu3_gkr(u=?$Kn|{xBLX{Z+sHa30($3wSczK;C3S>R0g#qexCR8=-%k+R zNltLOkR&8hd6*Y1XxH?7qq=3FG-iu=91jo`8{Fz&;s2xXs9sLQJbCgbkWk*-fk4wT zcz{th)Ca8(R4alYWKT|gh>S}EnEH9_GzmQH~dDIGW@77K0Cl!k6yN()wEzSQI2QXkPhhW)mSzAL!^d+U za;{u%2V)q}M^fH^R!pp{#v5DU;N?JY>@y*68bXF!`*^{4?J5SJ=`Z^El}WPSLbb1U z9^_1iM9=6UtHLBq&4T)RfqY`o4bvDn;BbLz_4GNS{vqNzR)tsBFB`fvhFM1p?aF;e5hpXzfQ{}GmL ze=ep3$-TuLVZ)kH}AH*v%%#O1#Fp^n%w zq**wk%ouc7I8=y(*+kybuP_-}iNg|@OZXX%T~HZrNqm6!d=N|N?_e#D0cLCk4)Gx* zf~r6<8^BR^1pI%kh0c}8ib4~A|DFLtIosf`KUrVK;puxTes(6B1?MD1lq5Hbt;{f3kEd(3dOYN>)$SJEg zs;$6ncMDULa6lGohlYjp1{NnOVQK0aOdH=Ia>0vAMYhPL2qKX-Vt@ zPW%Djz=19f^KVUjvAguzEJqHyu{!|X|9t<~(&F!xqOI@T9b}5Y5?^Ircau9pz+0X- zU_fj)U(}Jhtn8*yTxkFt^HEI$%&YWyIvAI}!g#?4favGk@l{{JA_{N$qN3Z-?wC51z;VzHIYd9;-I#s0EWndfCDt>BKuEir7g3)aNJaoIl+`@2Rdy-Tr zcBN<0bXU%UafXBw)4TFyzSsI3vZ3X!;Vc{TddLdzxwuF&$>NQ!uK=d-3wVrUKxK%L zfbLFfrpDLB%cOC~Y!JA*k(i4lf(a;?aEcA%Mn+e|t?MG+6&Z%osU;p8p+W@H<&m`- zFV-Q+nx(Tug+7SAVmN|od%b+^qM_uJX06HMSG!JXol5Ral4+8qz>vNh$j-+fldUsM z(SSFHaqc607sUdwx|jq8srjshMKJJ2H;KFJSK=Jf8hL|<48~;{q9lh1FM*)>44QW^ z96fJA9^u0EA)wUV0PD8%;FNt4Nd2NuC}89Q8t6Fme|QJ&b9m=!p4Yiga~T;KYyizK zfT+QBQ>osB&ih#?01coWqe|>OMkp?%BrUgPIJgEfw-qe;2b{XjDw5)I-*DoO;olYS zEdmKY%PjU5SEqmcBh>&IE!t-9;H?&(@1EGHlcnDH*H`V9uzDEc!1FF;T#F4PUP#^6 zr&22@i@r!&9I*h;n`33gKg48GoX=|z0L(Tc7xHA?2EaOB0s`p|4)^@DuZb*JKA=RF zEDl86N=U*6JL6cz!Q84E`m@8!aXh{U!Lc)dcG^3Wdi>8Rf|&;KTeyyCZey_QuQi)> zPN)~VN!LMJ2;9hl=|BA|KO~;^*@hbCWAkQ1zy0f!%r>e1kKkXSeZ z5LDvd=Rwx*jKB@$LjEkCq#*(AY#yklfP1*71QL@rfArq=*Nco70XFtOj2GO_;@pG9 zn%gL+qNQFQ))r^c76%>_5Eb41^*%izo0%K`)U>BP=)CjGeRlr-7E$|8KkTvA=oZNp zlvfsY`ahsEAv}gLMJ9|)i|B3KDE7%@5OSMk9baMyH%}Ud5@T2tm~=qjbb@n!2#TS> z5B?^ztY1C3CC3r<^g%@(fAAh!TbB4e*BR%Edazzo|z;c$4^&)(c|HG zH(6uHm|{R3`uVkJOcjiWWopgjrly zq=JUG8sn#M^2%nAgAxo_ZY)Uh)AYKBcdU>lhi;l zn5R5jU%(eVf^`VdBUEIXrGC&p+C@m59}ACi;W@kvA*iaV&Q6Ojfp&f^AoLI5#Z_<) z9HQU?5Z(?X;ODI1=l5N#xPAV~v{>jQa#-;??Vqpre|;`N5&Z7*oBFW37urWvR}0PN z7sT|jdNQ>=)}mw<>B}Kp=x##RP_=Kpa2xM@-%Ylg`}@@6$Th_I9oOa5e03&1DK+GR~P#A=_%w(aKMVCk6Yv0QC%}Y_(pXOw!0(tvT{3FPe;bX36_{vC6fu zwe!ie0aW5X-^`A%nys1Qh|z?6^%O_6PwUY!RK}(FLm>u~Oc2mw=blz+c`>Sg(St+U z@Po~im@vLj2@dC-%}dWr=bXG$jNRLc&IlX`IaNZ1)w4MbBxwfB_n@&xg!(ZQk<7d9J zVqvec?Zd<>{y<@iR$aDx$uAC71~T%urcT$9HHm40g@G+3OhBr+`QEm-vQoZKV2UN9 zY3hUyY+y4c~p4Y-lT zj5Lb0V;;k4d|D~G2fNJz$Jj0&nZ&;aHXKRN$nrB0$QNu7HJIQeuln@-hzZ~#sGzd? zwY!rFZ)Vc@NqrXCvEwODH-6-`z##NOC^&z4^n(Qqc>&JqK@+5^3uHcN& zIESCMK{Z&NJ5F3gC{;vJtgo~34sH=l8^HXk=dFU2LB z3M}a04hYcf_g)T0+x;LlJGp}uF%ZC+TinrwW$!^B!k+COlircnOlXszzZxct(g=;040e$iUd*3$De)c%dcm1IN}j}?@zVsR zXjCov{BP6L{Xek6G>q;A@ySVSGrY^*`Wk5<_@3q!Q91c4O>E;`ky_yD`wqxG89JA2 z(o-7yj~pBQUYK>}_R!J$(9|BgEB}f=<+#v>=jjz&rjkP=zDzeuZQ2*lB2*v9L`@H%RprnxeA+_d@pK#A_Ux zFF#928iEa7SS!xu0}7lGdcFlnHqWkkQLG~6Rb@g{R6uW+tvWG0(?I8plh{@Y;|m=xx+DcwVhyr1p7GN+V}CQw!o<8 z7lYp*@w4QgE;<0mh{vBGQ?@3#|6pBC>7Ew28^UT>X-F7nVeR)|+3uCEz@Gv&0Wh-2 zEFp`T^YlMnR7>B-f#a%I0zq2)eW1#jBe4c~Ui+Z3NvxS8Hi}f#zPJpdig=vCGCqM# zGnQ}~rlSbo_FJUm|JaVb4Wr-$)?qx^?t@OJ<(XVK&cY_|;tdA{U3r?~v%HOlTldt-T}$)S6%RdnF`V|_DfyZZGT|&2h+wpFP&SKF)nENZd`|6v|XlS z{yF%Z5S~-L0fK*P6NeTX*G{(r?By`8fk;_U?{sYm*X?m^!sJuJ}O(i_T<|OQU0-)Q?{Wc zEcp;-jtu1?vCJovILw2zYl-4pHkqHs7i*{pI-{Xd=J(gMYrIUSz;J>e$iTTMhe+a% zP6O9oW7k`GRbP@(hxvd|nGQl9c6e4*zcvK!Qfg1)fc% zs#IUryt7oLX)b>~yop#%)`mXA4&6Pt_#AFm(|`X1>u0^nM*3wbLh|&Kf7qy?Zio+U z>AbqaxZv;}708=)F^d%vB1hQtTp$vI5EcpjMagOu`S&7tWOds%P<7 z5s;3Jh$9LnLSOO`hy{o6J=jg(+q2M)&?jKL7m^E_W++HJIy>dRrh_m<)?ed}x`#^q z-qvHRCldOet-%cSv8X#0;-j?H+flLJhuJiyV{-UPqk$xBb=bsYZpZfr-gdRj_wvyI zgxYlR=O=WituV_iIK&GaV!aw7?4{v^hKj)GW_-*6;p3eui^+|s4=eD$*!mK%nAiVp z=it~CMToLQB}Ac(hLjddS`lpR9dKLL(dq;zt{V|*Y7&lIlrW4=KDOK<^J6F{gJ0P8Bxj(2o4g31;LL>!H98f!%K1> zy8-b6o;JTCXYAMbS=*shI#13ZNrr}@^vAK=O60Bo&tCvrZ=u^Ie#pU=2}omEyJfQE z&goA-@-cZ>=`?56XZ(J`AqQdfjKE4?M)2J}n+ z_Z37|<#pSIikk+@s@74vbB%=GbOu<|yjI44Ujc#B?nuCh^|@bBaW;Zz&zO-H{+$fr zx>EM}(N{|4-07tTZU=9B*nAvbpE_$!K$LB5Vphf1vkN|GBW$6^&E};yaYy$;14Qn5 zZFn`pmctD#!CnMq@_qis!Vf(T*ZX@l=f(+iTSwe^m@`=)yU%ew{C9hD<#LjUmeA_| zes|2s&tnHX|AE~$IK0~Yhy(G?)EFl|BC_2*n#5i5 zXEk(={M51fMf22$69Ju^C^`CUmrFT2id-lqo*=~pwawU{jj&X7mQVyQu{*66h{Gz@ zYJDbp>Zn@V`1mc6#kW6xgTCa)JdNP?1b&F?ok@$u=2fcy_-g;vE>7vcROCUGtj~tf zi8irjX18+uDo?ChgW5LoMMY0zEe@Ke&IbB$E)_j5x(H7rro4AW0}{FBXLfD{6WVkP zA@g8BV$1IhW(s1C2J!8Zn4_-}+Bo1qWpX3-S`xhG4DNfL4N{K@u6#Nxl!+(EVy-DA z0osm%&{>>7b1QVzkUvpy%C@p_klI=PXUFgn!%n7P9sY3!iuM`*8`bBx2N%lIuYN6c z`}6gDN!3bK2Wg%KPgSw9=w-w@p6Y=;OBweD-(U0MdB|O7XkZMTPKh$zK+z86=if$L z`loRa$)c`^wsO3!GB(=tgTD?`i~vlL*7g2j$w0l4NbeU`2BImW;Uq7PZ4=MBGqDIF zi8-TR#D|L~yYxBrLGJ(Gi?9ZWGlA^?-J<+|zkHI%3K7qlQ>am_{4;A!NzNaw8SZ(% zYxisQUAueyV{(FRvFR7{`AF4YhtqRA-s0}PA5!J|uBJ)pKbqR9XXfBydaoz|YK zX15|1x21;=MwL~q&ZV(vO@|TEU(ARE%cjCa=pU@}NZ_kLt63_n+3GU;bTK1si~e>$saw)`4%8y9!O#)y?$7&pKw{!QDR^5A{X1an0?p8Y76+`}9j>^-D&n67 zy225a(QaM*&RCswjYX@LBSr;B%)(v=?=hA0z?#^m~VpRI^yIHa5Z zDWSHJf{5`*psPWc_YX*AUj0u;B8vFV2}XZPKwJjW7G1r5?9QoZBQp%eAW|1^y7WSS zMUnRHT??aZU%0k4Io?ez%`N?>`2*jSs5MBTTkm=}h|vY2>SyM8n_qnUwlDgj%uy#( zo^%{3bLxc`I%Q?|`_zQhECT>&Ltc_xn?8HCt&mLh930 zC4%FTbX<}$%~`PD`e;!CRV|4pMScESr$(#&n!uCoT`01}EqYy%*6Zcwq4tcfbF7u! zqkb_QS9^iS#Fzt=pY;qBK}yVhXedylxitNBKX|7}`Y+Pj)VG(pcG02qa0_GV*oh1R zl_Y-Hgyt2`Lgh9@W3lVkBb{?~-K0kK2c)9~V?Q{Q$sb+Z6%+NSoE*tkoZ514b;1(d z$rTxo`bT}VqoA@^y%edJ=(kf9P*}JQR+HCs_{Lbl`MKUuHpsiqh_r45?mx&+q!ZIw zyB7*mrkM!x-=a?W=SK$hOQ#6h`!+WFxrVprd{dWwKIO33`>18=vKqRkJL}Ub3`jHa zU#jqLo49V$f;JY(I4I?l=ySDfYa^=A#;BBeCzWZ24^zp;31^En!W!6zA;O3NBBtI~ zDU&`k+=G7J`*m+^3ujd)v(_eTh#?CB4l3IsLz3Yjk0jv@?P`0l5fxp*j~tJeU4{b6 zrx^1Lv_B)H3=tr;@zfa3Tkx*uGX~gwU+~h#;^sQU&AIV{_63Z2TW7Cc8|**3m_YB} zHnefad5lICpQE02Y4i5hw-@@w?<}+y_qDHAN%gtLtqWw;eet+``koQAFU@=dp-7$+ z;;k!el3Wk_s^Hu_ z^|LLL$&}J(n#2*%4Zpl{mIVv?3bc*?%?E+aRAMgwyYurjAnbWwWw{Wf&wws(q9N!d z$G>JI+EJj+G-Ae?HT=gGVA+ti9NmCZ{zA%;>BU z;?rQo6uN?VDTQy(1JVLo+$U(q2rY@s|1h1t84*!D;5%>%s5P3=zX$?_tl|laCa`UY z3jhS5*YN9O(1GT58Ww2|Fh!DupK>0U(LuV4`N2$1X@ZlMxs87`p;L&%fG`?gNs;vHIvWhTe3&Nw8gA* z`$;y+SD1p%fyqgdV>uxvfROqrttgQi>}l`^Qan2~r++HZvB@*0Z#Y>q8Jz3_f|x=x zIL*r~jdA|>PgAS?*d8^P&<^_!J_T7N0AiY8!X7kHTo(_&)x6E|*!%Os5UrBK z^-dQ0s5%9bbe39^mP{;=-%zce%|&nY!jMl}g))VN53SfAMlwj{9nR+HSV=^{^P{13 zFXj`@`?p_YW3nu8k0q}l_yZHdn+{GGCz0Io|i8-{hx zp0wPwJ@Tc`Ek*!;EK21fqN4qDN@B8)bY1M1F2ihVr0xwpiz(nYpl*=leT|xR2?0A@ z3D-*;Hs!Kpe&5-7viME?bI_TI6)f2bfqeiXU#x=G@gSFV6c)I1rnf|}!sxY;bl(hq}v zQ&ZD%v$;;CH*VTQoms<>=w}`22IZ!4^VkP0x8?5IA=3SBLQ!UK4@g zZwttm=}|UKtd7L%;FJW91d$V?p-it-_DilbMmjhj7hByYA(-W#h>w0ektq&5$XlJu z1WZr(JF#sN5)#cgYH?KiItrYdJgkctv*)YD`P}H*P((nXY}$m{%CA!*r-yU_NRtjo zZKOPBv`XJ?;|$Kw>nN2kX;XW8#i})Y4}l+<2@h-}_{YgLQwiB-mtG zr#BrQnIt19by%d990l$xjOnf8!lHmkHNnlgAjgBZ$Jn^(f;9U`JxBmo@xc(R@>2ai ztOfjQ=ECb()Ful0U`UKt`WFW=rBmP#jJpV@?!#Z69VQYCJ2qk_tY5Cd;qw7lKEpjx zf!hP-H4Zn0=@D)+9zPcj^$$QP2}jrPp9{+fFZJO6yvG|CgbqkLWdGQz3$WUm4g%+n z=nu!J7Y>{tXdf24&K!qRVxqYCXlbsVQw4iTLn`}OKdQ0Vlu6q_P)(GWFY4@lkbHE+ z-SH11n>twm-U(s51f5Et>x;ASqj2aC6n*J3+iuhveAnyNPs)%V5xI?D5r9tWXqz^n z&fZEOK*ML0)BdEKjEEEq7qrW$a#kGqaaCo--HH@vjcXkdStYhg11$c&^+oq_r3cqB zuf5CNxlnmNvw@eYPG$F}A5ptk)I_iZ!0YN1$~nq4i21ma^F)s3mNHFKn4d|nRWX+x z^2H0^DUNJS55y%UO@-zsFCzF}Pj}99+-OS}))RJJ1ZywkteGF0RlKcoJ=Iq1x+}An zK4U}pI&l$JCz~BZ>gK)v%mImJ{5TJt3pl4b2N+QUa9h&03 z#VDRXv&+eaOMmWsq1B)mo!Glx{YV?8QqcYK&mr1U1&kZzVk^r zbLKp?`M0MmIHi|SzG~x=oIhtRicb$tSe$m06>nd}In8<5&M9FuRY)=S+*pZvtXD^9 z$Qqv1@q*=*K;;|JPvz+It=4t;3QXxl*;4;jzoS-!Zvy_%F>ZB**Y}(=c<=KzpI?tW zX;~NPih1S8*ztUOxhTpY1}FgU~KAHzM^CL!B?-`4L<;IxPoA_lmpZF5|)}zuG z{M1?B^q!Pym@Rn3-)-a66l_d2JJQZy^G^qiu=ZIs6?kv=Vayyb9D+&49!xOUAq2^Q zrwVCJT39myH;j$ayeQ}Bd$(LSEjqNVq&N5Ojnz||Ew%bGjdpi^bp9UuHJ3yspyRIX zc7@HNW&Y#Yo&Oy7F;Jacp(i-=zb-`U^4+EJ8e+~0fnt6LD!#>fk@`{7$q!j>C6Dak z*#xyjkTY>&L;Q)cW_$nq{6qqu{92gOj7jj$|4wjhz%F0He+pQz!C*w~QmbBs^cqFk zZVsE%-#_QIAu2d71lcjDFvGcI#D--NVLqIk9&m~@P)XcUS2IBMk-Sb zb;jt{GhSB^zB?(IyheUI-NR0&ZA(BAI{^P!L#Tz?aHJkNaB}73{3h-r16?cL63Nn#o8^nvM>Gu)gVq-uzTxRCr6VA z82Il~1g|5JE(tWDLk`&8Z(c!~S&)9nZ6CXdnETgx9-0s$%bO>;2Xl(W=SI0V-rliW zBd*wWZeqx;(PN1~1Hc2amhg@|wyMA4gq7)VgX%p2FleD-3fiS$J7GG{R);SUtRqh! zW>Z)GM#mze!8R}H5sM%vDUCwWaz>X!&H;IV+pbN2ey^7Ue;`Prj)2{k6>;$6d6ees zPSzv@aA=*baf@YTeP6Eu#RfWcjEowC@Qf#;X4r-&V8RRJ5=NeedrtxC!&lyHYNYEN zsP`t`hLK8zN)B*r{0URkwSSROlns`bq$!x#jO&Bm<`6vXzIz;lerlUmQl68I+64tK#`zAJrfUSxvzq^%2VLi}EQL{TE>N z^Zfh(yqb$P4YtN0djE|zQ17se?NH>43qxmMs8`gcA=y=*ZfApIjHB{*IpS^u)xLL= zcl;|O!n#uLuVyjx5C4nVX)Ka#*LE{)WrI5{w|e!iH{z_FD=NYGJu!L=&2RB_{(ywJ zx7&R^r&f^*W0!yS0Q(RnkTj=MYsT>EQ2IEbY;npM1b=Hw?oLD48yOh!1KK_z0M zD9!yvSocJa0voSAmX-lvQO0S)vak8)i|P%LEuK0#JB54A&6{Bv?bebCb1!V)I84fd zlmRB>3QgF)n}0Oo;5BrijraW}6pKK!bi#VheS^xq`(d-B%bq>}#S1Yw1Si`*hqSh6 zPo41i4&ekDk7hb>q=*9~S-5b~?*dLAiBgt0JLfs0t<7a*mwj3m(7AOFlSY-{hZZ)bx~h{KcNRPvSNa=a`Po6Q#n zwGp4>>ARLpr)EO~igEE}KW{ki9-Y9U_eHBZ<(XZ`<=Ii27){Gp9rUO-K`s~f9gbhd5agWNWKze>e)Y~hVC&F~bP%e({IXM~z@q6H zQ0x+GpkwyaTm1m5CP!TR@3(kj*sMc+?uUr!G{Q}0#X+A`9IFC zIZ&r=sK^$iwJK`&ll8ykNnf-T4&f1E?<$9Y2E|^|5boWBgUR>jXi>pXel=pfXU|2T z1`iQ#^VCS3M=rjOmbToLF^+KevRyisE+nUi82uMZ+#DBcwdJgF&4~59?)YV&hZwi= zKH@!^fqjvQfBzn3j0iBmyFj>Ts`p?D@Oa+<<2*IZ%%}y%5wtG<_uZq})`2Q3|u+K7Bd7PLO)=wVA5KtPjLY)_HN8Ae-iMZvOj8MU3DB z!!*smzd}0Lgv##|MC7j#ofGiQSvMDsLzh5Cb z@!udkmRvKfL*j(BFqO@rUE1Aws}FYUqrJ8H5^&n6>6vfmy=ate4uV>w*_TwtqAnWQ zgeaQbr;j7_2sl^73S67mZFf)g;nFl=*GWG5fM?hQx=`I^@`b@)??{=Cwb=1m8cL-F z8_qnHU%7I2d17MXI~cw^L;k54jS34KVK_BSn7hXEr)oP^Uu=ip+)L`!XBu~`=j9N1 zoLo$R4%GH}&rL*xC9aCEZ0v)kO`Yn9O6YZu2NuifF=*)5N}W=Hzoh_KA!Xn{9IwMH!bmdo*@PY z^n*Erf+uOL@mn1OoO7(#Mi$?zy(DiL?+SNWyUIItu8&@2_iH4VUGv(OUBsASaeP#eR@D8)qZkDcP7Zd)d#Hyl9 zVjJ-hME;5$hId4;Q*+T_xHPE3NR*J=knX1Pqfb`-3X$-ZoonSe9Y?mvsR26MO4Oc& zCaDT_=^=i^t2J->(mAySSWeYodqDO8O*9W6eJ>ochJ?%g&HJGJ(3x*RZ4=jp?C`~j zja&9OH*!ZCF_oRu6E>#$eYfu*o!vm^Sh{<|RPj7zV#g6}wdN28ff#$!B*UU};(QPK z5kgMh0VENT5lZo^t}RPKB#Hjn#`snztMr#wW{MEWo*0ITV0Omk!YM6kmg1hAb?h$fJvq+D#toXdjoI}- z`dA@Z@t91b8C_9Rsb^o@XMbjUoyqRXBP1C7hzpIA33o$@8QO0+#2!A#bfMc*o69Pb zspyut;Ns=YRBys}@``ucw2x+^F_dj!0Llp-_U)Y#U7RR~Q+*FG8wl9#CV zpic@wM?p5n79&^~?>s!r>qQm5s1C)N2qbFUgEXi}cyMPeiR^Rq*e_UP7dp)H<(7=D zkWHU%R^P>j94jc-oao_$@&^^Qnf;vZ8t#}g7Mvt_w*yOl;u z4%ktl``dlHz~FV8MNSK3I(Yv=EeSEmX88kRYC!No`t82!W9x88ur12&zq z7*nMrB@k@yBpM)|+F7+Xf8SceJ}_O-&l}X2nGJ}2Rtjt^<`Ws=8i^-RJNylk!n_T2 zmRA6>Oqbd;4;mO^)^;&glIX{ILr=FUt-VkF>YM|BPF2a|Zr7y_C&xG4EC} z5vSD&b82>>0n6xRj*-XGl$>9d*)U?jc>I?r_;j0KKUumU#+K9tVe`Cu&9IK*;!2_7 zy@B?kS+0~z_iOoI=zj{tGpHHoS6s$S*W zfDK?>JFmI&K?4=J7Yj!0yx%Pg5j;J6HkWpH%IS-$d*#K(CMpU5Q>E%hT@PG0~T3ONFYMM^WuH;VJ3K-!7G{nPH&*u zg7e6DbWEf-h3BjjtP&pLM?;r!w1^+PNaGsukK2dhgfJHoo*u&HVv)Mb7D$BS8TtLg zY@qp}5fL%4sf3LSkq1EWbz|;o3n~^ zhUs(4f(-9(dMC{kTtfA;L``iza=4sDhTP@Lm$fxr;|5rtPZq*d!VxB-GP1Hf*&PuI z<}-oS>Nq;CMN=&sCAsyPLidYhn+Ge(%ZmU3i%LlNB4I7l)Re*&i7gPy86}y@hbmf2 zp#*L-EGrM@x5GH)dSGB7TWd~X2;@*Ja$e%jYzV!T_$^h zZV`)XCz#J%pnHOm;T^q!_Ru=CDsgGvsS~e0y_MNkJ^6O2-e0q_V#4%W^*`t->8an1 zWLNf=onbEHhy4C1!nfE`?W+(|A6dxejj{q6_-XD8s!C~gXzA6nmbVy*4t7KT^Zo0i zgn{7>q4a5=*L==Lo=C?8nI(8vhxZBU^Eg_=R&u`#OK6{|bBN#bC%6W{3Hab%hP=p= z&o>ehvJQ{D>m!_vX`RUlD0z{`f724lS-sIp4%sy!hgK*0$~2ua!{} zo$-aVm6etDYp0u|D6kWtte(xU6H=lY}Q${N9LP`NEHa@bSrTpHG zQb`rgXBIISeA(s8mnbRCMt`H@;CahjT%#HWCG zBCR=?{d171rS&I?C9vA-8)}Df#}J2U-9`gq<&8LQyt#Dg(m$~mVS~}6aS6t8Q}OAn zP>2{|tXnth)~#DaZkb~FN~^VE$=bD|5T3PoC96<+6y%N@*-I9~*96~m2h$PyQ>JK~ zL6{csAMUSu<=l#k7suUWFs)jwFBEa`di&sF;on0*CPbw7>0AkEY4V2fIouAObz8{o zAKl5)^jZr$Se$foQ$qzNo=aJjiVeb^D$rgfW#z=|Ki^^}uMaeZgw`y#@7ZEb1$YFRm_wY3 za=+*2kAMFBxxn+p^L;mO-_C3A0_0-sG4A4v7b>u?xq@lpjorN3Qr3FuDZO0-jBx_! zA&A<6}ocoR5(;1Y#C+)_7)6B8DrgGS3c>4-A=$D{O0PJA&~P89@d~Z8m7BcnAqMuFeV^GlN!# zObad?B99;(tHLTKEG9TugdmgnWSUSa)|IhZn2oB98>bn3a~u!~g~WAgy5z>`h}Tt{ z=mV?fdRslN7azw^#8yM8j*gC+4MC1pXJ7!mf&$0A7zHT*RO9);Q)07bUBZO?hFtZL z=MN0RR>GY!p+^uQ(Z$SETGsMyHdE$}eF@`OyJ1ze{h*44CXemWT`{ao1u&W&WSB9n z7phiuXI+}M=5(!nR9yH za*p#4aVrE4M@Fw8lJaiS0MOQ<@Bh5vk?52uQ^@QIYGxn!-;wBb z`ohg#BjWh^k1oXep5>n1w%geF_R5HY0_{%s1!uNh60M?$`Uc)FSZt$f6eJ4xy%4@2 z9@d8URE=6rWe&e)(z$vLIiB;k0$<)RsW2g+1Y7>MCOS;pM`o~>Fa3^Mm#$NiO zzE7X7f`f@9K_v)CfsNxodV?;TeY0=Ko`X+K;`EPCmqSCvspXnWmMj@YVNA>{{s>*y z-rc?W!+ex#Xq81-${CmE(w60-moxrYqox))6#x0;oYrz#!~1^|^aC+uePB9bB3Ziw zzZVez7KN;g!X+qk9zJ~d@*MY3k|83oQ)i8Q#_`HO;e%QLPJmy3=Ffq?#%;L70n)M- zXLsU_5yA<=H&G{%FoE(!`>8^=qP)Dm?S+TCUU_&RIwYx&dy7p`!yX=3?>juirdQvM z(D!^faCbqh>s7B42Nkafsm59kyXMe(+|4V63?AFBTV$-JSY-8h&arlfP*3lP<*rAJ zRNMBQvp!$3)MHv$_=wiNX%DD~($Gf_^h=iE03+$j_AI82X@$R?@2Zl#S zM-|GQxLmGVF}v?{`uaDg2iQM`%{#YseYx2gKL>SGV0iCNo?@Al!BGn}bp;Y`%n-9) zjm0efJF>ZB7-;X!kdSTBbSVCHrK37N21Tl#p=uCmbgQpEjV$vIqu5~2WbrAuHngD?@{2JOfjI$$L}(1bYFIR_0`(5S7hMFIkK z4W>L>5T5#%`wO<2R9;sO(CB{N>{V22_q{UOUa*cD?0c5EsF}q^A2X2QG>J-SVusVd zxz94A74YLV{b~B0(V)9HZk>h4AD4Ukd;YNhn)w1S^Db$<{de@KAWl>@7~f|&KFrlMH}bVk6po_CidA@1GqRv z?PH_bAj3+7h&6%6aR!Z`-Mw_{UVuXR^3R{g_Y2eQDhRs)Mn%%5u8mUf=kzoCTc!}t zJha*+os%X^Sd4@i85yZ(U@+TD#i-f(!InQhMyVKP8Etw0+>_rgXZCd7{Y@U1(XBQT z-ib@c?Wf*|s>IR-N1Yf3y(ppQ=H*YWjgWmh)o{n`GrMQy6&LHe1@n@t7BE{&!|rT2 zHTQWy`nE`=qkA4{Px(=|ZrwUlYXA{*8Psshg9pf9m?e_Mld?y(%n^eH(%Izvi7MTJ{$jY`U6Xh^gg7O{fzJ98_(B@YH1|#cYm-fEbPU#aUAH} zYx(NzMDrBOTc6vTBBGvz)-tQU>@qaeMY{wZ)g?45?}y2vK>UX`;Psn#?p(*yvCKI) zOGIkZ%?^^pNL>L?xO$GsJ;PUJe;S)6Tg*X?sS9|zvA355P10h2feT`aHM_h{Y{Ycr z^;9|Mz|hp+Uuy*tixvf$H#yq_pJGNO`E<_>ki$=w-GiBfN zKj*A8y&1hGEGp^))9eFHY);UgUytg}dGp2y9|yV~3G#9D_c!sHVCj5xBhH2vAna#I zIajYCE5?!swxw0zMm#as?M{pf^6bON{Mpy57FpeYyl={nXCIQ*%oIkIA8)X^_#(Szx zmtUS3ME)qoWqJm;hDT-RF+M_5)CfkH;0?g1CBV(Hu6@#oNBeg7jxr3omOWAMiWF1v z{oPe(n04tHF52<$FV~SJ7{7kmlaC*9F%PHMPq0l(iv&!RtALa&%u;dkkK>ah%|bxH zbjxg)DOfcb-YS;!z2@cd%B5xT>7+Zjce72!!NH*>!Du{6oypUuUyYBKWynrzUsC>~ zq@+Zknh0wjqZRE6aUN<)O2)M*$Oq)dg8Og@zsfS#Gg4gYp*N{5kM)ts|7N^mV&Jok z&1HwR@^4LFc3L*s@FeVrG8P{mRGGx=(2nHv`+TaBn$4^nIm9)*raZ#=*c^;H9%1dx z;<7^ge5~^x6iiZCz+6SA55I6-6J9DC7IH)<)zgm04wVe_)hJ^3F@EY(vTv4D83|6f zJ=?cRPfzbt8Dq_wAi3Zt`EPXgrqW)Xo}XYj33mXEaTjsK!8e`=yT>M#=E?kNw@@e` z>MU8hRI7;f_(_IkFs&~lJGIMss2%77lp4dkPlcAf@CuV`0B5&RzOuu{7X^kCJJz-Z@|v# z4n6a27}mefUba1e5Z~wULw0Y;Mo)13$|W?K`}WO)ZxHh#mar*Nd29nxSlZ|7Vj&#t zqNh`b4>xWq9`F#3xDtX72?N>!>CNY_qPA)TMkRPW?QXD7mPz#hev{}y>sM!Wev766 z!9$(R1(oxI%bd&M#jp}x_T&KUyjEeI23Bf37=+K588%mG4dzWLuQOhxFT5#;zI}VC zKO5x@k7`@|dlwqxXNd8+tCW?+2=V>d;e74yKA)5*J&^^|3>mkxUbqTc+uHi$%_euD z)0su~)N=8UN4ncZE+Q$&qNIacnM^5nKPy*IJukgs;=C; zDSFc03ip82X87Iw3#hnt;oGS_fMB5GoFHn^EIpMctzxdfB>Kr!p=1Bc;V{kPxp-xo zwTN=x$G2#mfl*kR+EG$rqHYevI~N;`M0O{f@cAzgfsX(Jf=ivxV}Y2ov?5R5{0F28 zNM4e-GHFUF*5&cv6BQl|*Ay4aa%!0b9RVop;v$ zfk@c;fept`(?nw*Im6Yoovkgg%@VXNd-&Z@lRp7wW??@k%w1AEJbdn|j}JHM^vkrG z8dH*o@y;$sL`WDZrmQ(potKD>vnCa)f5akH0~BOY^LQ)4s#u5(h8RlJ~Knr6lh?!-*Y@nTySU4e_=D(zb<*pgRFQ7wbvso zBuq<#wS7{*?B<)VJ^5$7LoTvd(nKu9xk-EW{XxIdyR{Tf)nl8~D)nWnydN8~f&dDKF_NcU7A*5TZnZj#fG$5Pm(_bc zGz|MC4R{pq0Y71)VDoCtu)JG*2Q;WJJ$R3QTH%X;WoHuZ7OIm+N{NBkb9Eip;ri}Z zA4*Ezp>q^h`_x9Gg!th7Ve-tGMTDgUQ+n~0rq@dua&lwb3v5I;!sKEWjWcIt`0&cx zjj?5Okg{jBK1Y27Yr#c`1zJ+)_)#ASX%wWll1`cB%MT-p6u1p;IUa>tQi_C0bwZEB z-6!-oZ{Do3$GA*|kn1>gf87AH+I?meFjgBRA8jepk9}@Gdo8((jSstIcMnWRo1L$% z|Do@!2UL`P1#2!~nlJ5nxAw#n&<#m1?F*Umz+_b01Ae$c1oCv^&6>cg1TXb(fGE4t$FXwA9e;xdx5v0UkS^W+xDYN5>WJO6djuR9TOSp$82Z^`;$q!OL= ziq4CpP32l2{$+QN-nLDU&SAVC11Zyo?Wh-VL9f4%lH_z^K3cP?Q+DM{Dbaa*j_Xxf zTSSUxWr%s7xV=(t`IhX*UbSD#p9)T#jTDyUTd&k$v{XOXumMdK9XhK!HjEFK&cD0Ik` zMP_8Dtf$Jt=^D?cviEDgzMjfVv{!Cr%%$4~8D)PVg7wZ6(AYI;_?Uy#aWvkvYM2c2 zFj%?8g#onxN@h=^+hL7H`SqkcGHm&jZ#@GMN*h?VYyD~HGSD=I>zR++_tNp<&ze2U zIR>X66wlT?L3UErogS9@jyI=p45?-m-K$gj!I zUuIp)#AHb3On*Q?fHrP{Yasjj^~prYr>!Y!Z@IUB2>0|kxaLM0sJcNKoCo?xWdY~N zb0QNeFlo<)fRGZGzT2QDdGqSXneQ)WfzMqTT};+8?q`Gi@DBIYHJPcG9db@)#fsU@ zZ%|E;$%H^4a7kwV`RAVrQ8V$SvTs&jvH<-g?0piR&;xdysF+wx$r%}nctWH1PuPtX zW6w*+!%KtzoH+IU@77Mz0$>x^B=&wiKPItBe(mnCpOLrA7GNcT#!(z3WmDZh-e{m9 zT+-!$R__L>TX)~zRN`>5xzy9s)3N3KEG+xlUOim=A<#9$>GrK#TNlx>8z$B{aGMI9 zpk9D$`?gyQUl_j6YIebWKR5U*@-aVnLWkFZwp}r~^rx1#2+xOQ{Ytdz6Jhivrgsa| zE|cNUbRK0L8~^VB)V;lTI&8h~$|qimo${gb=!1D%6P}4%1U{+>`b)VVu!`uh4EF6a z9)+y+m+;dzJR6p^e(gU7PwJmvNA=`$=Drj|Rz^PdSsNn^bFtxD&zwsShSg7XAHZMi zSwQbiGF@_JLX+cA&p{Z2nTiFI6bAT%4CjcSD_;K+RO+a1bRiJM%uxPhyo|&+cu2-Z z>H-(}dH99kH}m*$IimbLX^sASZ+FP!c3ykMoDV*%)ry>XBk)$2JBtQxU0QnjoTJq) zLd^8$e4B$I193)vE}hH^Ud`=IP};CaU#&Wg+qPNa;uFRl|McJwGCb-Ii9LXHXdAzHxvXq6dhZ(x;~W|!nyz4J z0oumvp1=0fKG&{2!U^BVXJB#(w!e4-F?&T5YfniAHbz zTs*&0flz4lP;255joDC#T?5|t7wCOjwze|fw9p+j=&kp+GCH23F(Es^ZCx{4XiOs> z;j`9$^D=PJ$wAq|%&$W$#(4_PI`56y9w^?v^0x2-N>RMp8>LsB!!j04sEdIz!<_yY*Cm;a%v_YK5CH_cDp(?l+KWs&;0zJY;4#7>>~dtLi!Fcgm9V@cyoh7P05p**BtqP*QQvQK5} ziO2=k#^sZzO^fN@qh9HS5-+XVJ#^UD7aqVQGGJxLqvubuD7>1`r@zpin0l!-0Iij& zRz@QlT9Hvc1Mq_ma4MZvjQ9l8?&&qNGXC((N4(;@Ce{ux&z*Z|Z&i)~72Z|i`Dv-2 zYwgRkDDzY8JNtbcBYLe*b{{{)rk@SRA5^COyFxm%ZwSd%31FZK=E(4aITvLP+MeQ9 z>M3MonV49flu7nFdBV=^zexbleGK_hMN*pRoGd25dvtDk0u_&bTTFMeH!$sj7#oE1 zn02lH)WdzadEh0)@FiEH+CIt*v}8t=(dCC|L7T(#eV^bfn^cYj4{?%cLrf!jhnh6Z z-|8g|#{c=J_yC2jbOUb~Zf$#2K2QD@viSFfBS)5^qll@ezb7(e;LP=9p$dj*t&CFx zG%(;Dt5H(E#PA>V961FOe;Qo?_(j`{h%ib_y1=n^*u3i2dg`=~LLZ`s@<+BsV~`*) zTx2et#{Nh*DY<8{?|LI4rbf_cVnyf7@gba$SI)Xl!tKrE6@$&a9|X4wg;KNgiz9w- z_dec|nh`{rqr~o-5k;Uv*qT*h?JO`)wpgAXXr+2Y_^{{-ZvarVQ+xTM$}3+jnv3%D zuXLWu^bQpWu`y)F-rP?`!@o&~L4uCh}LK=Jl_n zoAjFKTtd{UtIhuNC*DI5VuG|uF;kn*UV5>HgQYx1g@Ll>^J+VnL1m1fb(lmzzvB=mJ~sN3!g&URK9B#$)eqCT6G)I_;nDdxllk)Qr6Kr0ppL zzMq(F{&e3gloApR*q$ntsX0!75iY65SH`1Wo``rUk-5D7*0;$rt3l0@CQu6*T;Y{y zCmP3zE?gJ@1{0Z~ggS-g;ju#jRhs|p+ktAq4y~O#r_-OVo6)|2E<~Q{zxzCj=T9)^ zr7FgP_{WdY{Ad}O=Xff}PqAp1KG1A^>fq{T>vPFE4(8Hy`BKjOHtS?Z3CdpBzNtTw zF0*4U4>CA9cK@&|?x<0g{r;%oX`FKvm%c4DY&J|U1kdLh=Eka_jB%KS2QmC=#(p

5Le(4u;a9>@Z(`zMx{u!H09~s_TFB_l{sueLBP*eXJkuz+^!(J1gEEi<#ZnTuu+ zu@G9xgh;Ut^;N5Ox}E<77egX)w8zX^Rw?HdXRee}*^xJuWD7UNeLeAkO9VuR08u#v!fr!D9W zC#tl~deLKQQ|I_vi9n`r34l|+Z!)MDc>(HST6NylX6;kJMQgChzY?CL;K<_1N7Q~7Uu_jF} zy15|inCzGy&((XPR{0DZXYChg z#6wHKJjsnM)J*xvsx4ndfj4rWQ6iP~aWtir6DFwWXIV<8b5%^Jh%Ds;0*ya=T9^w& z(hC??RQxkGoBh;!CZ<1xK}L%Phl1QPm$(a{MG*Z4^qo4aw1gS=!td+|%CJ(Y#iHcK z6Yv9=-JH=sFM{P!Ix^`Z*@-}?6cG24IZJF@9M=_s9NoP%h=&WIyN@kB4OaAL`qHIK zHw4X1P1+)#PH@?&sfzezDaZYht;pOM!ow#4A-_i;ZX+`UurQLo*a4Z<771Tj$e#VX z0Po8{Sd|i16enu%d`stt`eJr{Kg)~}^1JR&^OlNQW>HDR*8rC?LGO=265;IH4Znuo zzJEWZRC>Z_AeOVOp)&4~IP$HGQ&%Se;pD9WFJPYg56)KU@Y+CE|2kw#O`AD0Jj_{k zc|wWoB@LmTgJ6c#rhT<_sNq}!89CoC$~hdQW06e~&Vph4USFMn{&@O#==UKA; zfteJT%;z9gGMs#4L+%RoyZfD~<|gy&7>X+tF_JOka*QgrCX>qZH#=AIUC?km3b_I5 z(!{Ca4@TCf)-my+hJRl6CP6!uev^}PT~TLN?lYej$*RP|RVHr-`d^58SCj%*LB*R0 z{9XgN^0N!n5GHF#Hb-53xXS|>nVYsZ(dZ4|e}!i9FCZYU??>YIJwNiZD$f7u4=@S* zHs$5z*$Pvv-dLCg7g(QTB6>W^&b#-}Zq@Mc@B{ETHgZKKPrlh<39b#iW}{2D$(9?0T$|q7DkVGt_sxs+?5~i}fXG1JBGp z_bl9mO^ntZr?+QksnDwFq;IlnXWC``(>E0nvJ<$HoCdzeHcITx-K{5Omgk>xy)AA~ zWd2%rX<}`V?G_8pu@=P{p@MM5tMj`RKbK9W%9mOz?h{m}o^aeww?_yw-$wH_PGRQU zQ^=X+c$7+M!KnGWgW$P9G4~iZb%p`&{orfGx9Pf zPF#oad;cs(vJN?S_h#P&IeEhBv_WgX^o`HJeFifKDXkfb3R9|TlHAn+(r6%W>j-r* zx*V-Bttsrxq{HC12b3zgP=xNf51=xt1pw4 zT+kS3Sz6wE#0017I-upd?<>uY`!SP+#~0CiJ~bR1yCyO0c)i9_LD?O8pFmO(Ih}my ztA}ETc>YXB$7eeo8n;EAAI9Qm{k?X}7wPv64z?NAJd0reKI}41l}Y8Sp%u2C+8om_ zeR{mF8Q&Ny&nh1epQ?Tw__JoNf8k}|hjZlRU%QjM4y@v~xEemQG#P2oa+s z-HYX6QFVl^E7o4FZhjcSsPh%gTW8RzJ5^d*`hLh89u0nJp|$gns#nHGhQWE~f!+61 zmz=75Zlmj)!c>*gx~J}X<4X#XLt03#_h`2Y$m0H;3S1hG-&U;|FrqK$3JLea2WGn8 zzGwPZ;1j}$T{>uYiV~SR_4eoGr*j&AhXjco4)~T%eOBL{@$o~}Q)aAe*VeU)rxwx1 zFZ)MWpgajU?AY@fcgMhYnz@!%;Dr2emly?eksW@aYLt`}wdM6ZmTdC)p48jxPM@&L zwAe6^xHrW@!}!p?Rde@_2O<04ex==4kTb!b**?UE75TL9k!*zm=|EqzwNz2RySQZ- z`^hL~oX1|UE73hvTq+6`sF;|Ne1|zubC% z>}q9&h53MH?)SSJ46`CE#{;#^>b@w;Yj8g9jn5zB|9XHTgbcL_m+{V>dBo+|&(F`4 z0vU&l#BDvVs$=pp1Ee-nE8tor%A%1NkB3-!!VtdLLBDpzfnP*X)G$IjQFm`*QkIox z2+0@C?H}WC!HPkj9iEhxaRiKIvJJ07#H~Pa(uHp!BbCb3K;9U90U~#u*-LfsV4TNT znA0p9sP$47?|_ns{OI{YAMxZa}GJUsp)S-*pO zv2^oB`!8EI@vp9@^f>eNWfg86dLo3+mp_KpOE+#btEqr_6Tz^ESv-1)%i!8Re^cur zqpoh@rnq+PrzL!rOH<^6ehtdm+4Mlmd_P>(< zwhdi#aDkMRlwgP9xWCb)-RO^ri8(r?&zm*nq*Ki2_@HtoSa71B6^vuAA6K3o`Muh;YS9EnPM=Jc-Kx%*6;&gCr&V`(yHxJ-~N-ei{PHLvP_ zelcR&%$dGA($3c_R=SzI+-tB=rQsUQXKD&F zgM5nSwOpp{SfgP+V^Ps3jKxu7JzyStx1Mf2gvnXEFy{G%r(SYMZ$5^p`x3FNvPRxA&Uh!6#5|FF^=ER?J0s|Tf5XmQcxnL1AmI(9H@`|K&F0jRo;4atC8 zE|qBj8P3gHx6C1vKPmAZUqeu%+$RLfwx0emb#VXp%p}1F(`U>WxLo_~#$#nK#DV`H{rRrC zY7{J6?CQ2>xw5az8bd4v5JILaIO+=~Cxm{YYlvA6(3W786?ANHAn>G46;p9tS=Ncn zc}2GYDMJ0hG4c$T`0s{{l;5dF8`ItR(2)<#!7vva>=RnPD({V4@;=t;$1SF=FEskV zdq}K$EyMh@ag7<)nGVvl~=TDIf7LuG6Xy{yY01&#uS2 zw$XzVf9R##Dzmw%2YXMl`-1oi7kDzcAtC*HBDW2`HA*Br9I8qo$sGa*q?$z>K!`DK zINgG5p9dL_^Y(nr*XP=v?KsGPnOxe;6p)M7@H^fmau6lWnc4QVi2|{SD08Zl&6cKBXTu(6{GVcKl4h_}HUM*2302j{ zUw?`fMJNdp+x^!x;|_6El-vSGJW>Pba^c5U+nxX*kUqj%%PrYX1-afE(~s}7;f0KW zcf5Q2H70io;s2_DIMLD37QjEr*cF3~M5SbzU32NHzCGAzt3VH$_bpVmZ!-m^;HUC( zy`dHRI8Esll+=^#aS(O~uBr0z3+Lkw=m*z}g`CzmYA;k$zlNq81eK<(H%N;3{p1%L z<0mB|A`U9IHJejVbyr)YTJ0z%SGiFFADH&eWiKQFSjM{>= z^;q(*JMf^OphJem+uvfv_5iAPySSvU?Zw1~8d$D*&Od;)&+>jh+B*%N1L-_sL)3ab9;B`QI3tCZ#$! zV>I;Q^81HrWoZ>l%Pu4iT6reWDmcL>Z@Q-qGlEvw*>xNoxio|C_K14?lRvo#iY7^~ zsMtz5;gG-Wo3|$GrLca_la0>%=9GQgaPzHtZCP|sfE5dyFQvY57Qd`uJF~5R&Jya| zXlj+CJSCz^&2FB7uEgmeNKR>Ws2naQ4R+DfUD~VFHNT= z!8vO#BbPZ;_jUMfEwAsN5rr^1niGO5i^iphIzy}=7|`>;I$pS=Q;`v?7e{TC)-X7;}CQ}_7M#A4mRzx~~17D&Cn z*m)h(?`If=WS(BjMlFzy>CF}d_C(*N8;>vEUC5~}E2-LXlB?rl_p*^uGZu)SFpSGM z(Y|RU^g8;zwELZHq>zpTN=J@{GkflYl?0R|Hr!gg+9d717I)^%ne`RX3q%Fb8jwPX z0}j&duHRmgRpLeylm8OD4-$}UWu|=O;{xohlq);{PWz5s!VsgvMHD*NjhQ1OBN_l^ zg`6E)IdC|seuZdQzzdqXYfRNv(lFS?dVdP+iAZ%Z=ZYN^IBPMpGe_{O@{94Z9q8do zM;ocM68*~`soFchbqi0IwJPsk8mp6dv%Ka{F|A>?@_y%=)gxn!#nI^{mD|VHI|ii( zKk4DH^V0c>cSUf*e9l&{eGHJRG* z?Q0cZvSdy7o-l!ZJN6IWfz%6Vuym%TjV3|a^}A<1lMi%gbNj$Qq^0G!k7qkwK|A%g z5%`SWgVDv#0WJ1JV`l4XMrEDY)=Ww<@L!;bR6Es2^2q2vh*EhWwDJB=!|bg=Q+ktM zMO0`TF>a)um~%>Lqhrued09yj@5SY9U2KAZ0lvbVT)N@H{rYkUN{Bn=<$#4O0b9X8N1sAL`4VVZ>%XVfKqEFF?q}ziC7H$ zGAL3^^#edg$4VyCO%y@d<>i7H!9YS2%wE(2?Vfu^swuRam~aw9P82@#aul-So?)&> zd})ZRmlfAaK@HvlUyx;6%x}Kbdw5ecl|!<<6`k7uNr&$ta=V+*F~n`%=Xe~r2cg2j zNTNwR>6IKm#8oC__P9jlTLu2v>h15wI0^^&dMQk?yNX8B?Rghg0}ZzBKR>gaht<~%qMcUmxvMHO`L8*{0-?vh+xv6Cw*qCmh8T=S)ZjXEVbR~|Sg7!E}?r&?0%~&memVdu1_L!L+KjeDU zTvNWw5mZ~G?CV>P`9_rQ2d;Oko{@=WD^p_cov(Ec;U`7q_)*aZwVW5EUtza+wR4S2 z8xG$19%{quFEia3N(#e7(EAlKVc0g3#GzJcUQmUU5p5#{uE~rpr^eoj0PK{W#vM zOqvJSI*Xv)_6Ie0rHssM^rgUWG=S#fy%D(_hQG5xiqZrZcmIP8T7UHX>7YkA0{ev1 z-)!_3?=G~>fqXTOnO23J1wQCnvyUo-VTU>>64cU2HGIA==$wnVOV=Kr0tV30R&fkj zNT4y~pLy6=uRO+G!1!oEC9zLStGThlC)BpBl7uk zA}%E6JwJZ@fSxvw6nh@rv9U;y&_OF%LQ-UjdjSx6tXl74Hl)dy_^U+DW_)vST=8Ge#pzjv)ZMaSn{C}iWZwhp5!)mSKh@OU-cNPTKya2pT) zdyTEgr3fhsQ~KMP&Iqt4BX>{>b)l6oH#_kYO<&gxspb0y@8J7e&A-fX5?HJJjUuo? zH|jIruKm@OQGC%1{`ay;-YAAEIveKBo41$HTb}Kii5A_cLONRdQZcvg0VjBOxBdM6 z>FY4ARpa&VaYs0^i9V8x(?JQXjsopuYQ}z4;{N*CD5UF{>z>IkCKCc<=is(g+)d8EA_(# zhXR;*VLnM-@}cRHcKw98NEU6a%D$F8>kPgrlsU#*y#-OXnPRw8eSzrpYf15In-O^*YA4@hESn)h&BAysKMp_McIKQ7*r24zIS4 zmRD%ar^Jh_=raEy)E48K%$QMjE7j}mldY$eVh_f}+|3&D^{v>PU0OCKWgT2MdwAP= zdZ)D&eUM$M!`;6lhI_kJ@QAQ4{p+{Kxs+6E2S<-38`76RG=mQ9MZz|XNsH-L4Ej$m z+Uz4@`=7EMh4@Lo2|R5Lc)GNOVMUkQH@+(5-bH6;O8E=N=@=gcEojSYK^4nuq;vYw z#H*nGlDs@sZkFToP&zn0o837My6^GeK+ls{xpL>wT_GPjATt81NYH~+meT={4fWJ7 zh0sPQMAdCz8gwvCjadg%!V`IzD=dJX8mJ2ZMDhicl|?WH-)cC*VM1XX13oVy1iZyd zRL26_uw*X$1WK4P$NZm*@ljsw0WT(och-Gh7CuDGC}i|rE^vOcns0_3jPuB62UT0x zD4fqU9AMOqX(k3Np+0+YQ4_!Byw$k{6jJyPnSBMc)Bn_LX=#5Bl05pmCyjo|AbbqJrpaz{-Uh2cq|*ySZpu0PGwos&2yYmmQA@z6ah5t%?#3=0*+D`WL$ zVpLBy{f{O48Csb#xs2t1go&MRHe4t-c3DF?2D8-AgvZ$Wr%y-4P*A8mB`9%b+b~ZL zw=Cu`Q!!thIfVyEg$x8hYPo?abKy{i+u#}`PzGY%No?MHR~9VM;MzXayIYlaYx1;u z)~fg%|1Fuu)rmC=b3dOHG_o-weyD~q&4{N(3+BzA$zeqKeqZD1>AAI5icuF#zpouy z;>$C@_Y{uCko8f(h#wOpY(cm3JjPNRiY*jQ;(ZVD-yPZ$ z#R=|;%lR=dpdfM95KY0CY8n)9Z$=ulT=w&5W4|SVW=$ckXOR5Juo&W zaoEQ4w9@bG&OBfCg|V2KJr3|ZEZ~S(HZMEGk(Kj=6Md~6mtXBMegyNyj=C-j8BNW6 zrew8vnaf>H?kuiR6&)5JC1>c?O_Sh35w-a>>23*|08@nuGp)VXj$W1gCi>S4srcxC zv0FL5a{lTl$rX9JioFhKZN|?S~aVlN1`5#_!)BmaQ)#h#B4_cp>e@_*E zC8s^6R#1(R0yuV9v;ejoQ!KyT|B>KiIv{)E-RA2zZdgjoYBjIr1IdI(#M4b4c5P-c zhgYH2iiBb;vRHHb!!3NT|5xu%zQZGGg|6m2bZULSw`yKx$)h|nG(<5;tPH-%N5$;A z9Q1dDA8oWrUbKmR%1ks$pf!8GnA>MYdpD-r{=aQk^QFv`mtW2|L*qemA%1)yN9&d? zy2nNl%g5W(EeZ-u4&CJ?HyXl4;G3UtQ?jA0VnN{Ypz;H5JB*GbGBxjLHn%UjlHUk+ z&fe%pHFbeiF8iH?dMeD9M+t-mH~Dqb%G#H`n78M$M?!A&<)?eqWVE#g;}ao++zpw2 z`xu7vYY#uY`uj0Q2e|6#x_*z`-e1;!d(&p+m zrZ`XZE$H{pKog7Hy2*MUH@@wkMG-R8+~!%0L3uvgN(2}>i#d33wjfbm33Z0xA5b%b%sA9-Po}WE$ zpVaxJMfCK6>aqYfr0qx6hG;d<=b02!R;6@}`bI)%QK;iv-J!2uTg>YHLr=;7SF+mP zX8)3>nZi6OZCrTb9%dq1BNoI?Vaen$SJ&_Bd3rxON(HCf`CnN+(3#vBlYzbjXJjrT?0Jq^9dSFk zEngKTt7Uh;)piB_)W9QOxBqehPMwmt^1+q;H(1B_(~Lh{PTMyV@yP!y+q`p)Z=QeD z+hhEZ95Yll#FAmCuhGmZA2^dRkdT&cqYX=@O`CT6&wa=yaQY##MQZ#&{?)pgHO2GF z(zkOJ&Nno5tSecA*H6lGj25Ho2~kQuIfiTE>wfCWi0Lp4 zYpPf1IMU9jTF$t+wY+<^0koRX?igOFo%_OHEccit3K*&{EO2ADOh@F1 zv@kWP!f{agvV@ASJ+z*FR$C}(-nn9$)OW=h)2I7%Nl8gHVH_RD8*Ue04bnpKe%{$` zq2&T;?EP=TC80}3ZFJbUw5@tfnh96+*OQYg`&3eTYZO+SYhFtK_tpC`b$R|J^d}L! zZhDnX+q*t^w-LlJZR*{j8a4Zs$_gYD*X^%adgw{&QzX}_qCp!w0XG>B1G5jXb2-CDN)^)hZvpV(rJM}oybFBK7kg&8($cgHZhEX z<%7yw+`eDkHQ$JY(|SLN?> zl3Q!x_XXUoHOf6}0L9@FT{-YIo~J|PtPomG#a@2jAs%E0QNuxh+6%`6EDEIQuiAI- z`1mv{%u+I+aDsD};bTBtXP47KCwLRF5bjNgfoE5P9|ihAcnm#hg_e#g*X)~t06iwh z(X^uxm`|a*2nW}}Z`6PN;S0WkKb{;hzap<#t*h9@oyFJNS+!289V_F*s!N z@3PQLzVe*7Od3#(tL_X$HH?k+1ri$-)Mahs$8OZ-Gn5A}O*?@xHs}9J3G99}#HkZn z6E>asCNSBVVoFcjW9dViekFL+CNDxFEA$#{A>&75s?F|Cp^ zI+bSh10y~@Ri=1_h|JM~r7Kgj^5-4$G;L*~SGXg;vbjyh5(=1wKT|Au8_hnRcs(!H z1XT3XBHF~G1!G>3Fp7P_sfxH?VLV9;Bph+PdHpd3wj|g2mru!dK8WvY=#dLZ-ZtE~ z=Fc~zNK;NOv7dCnLHhN76B{b5Q*Xdd{lk3Tpbin|qotf-$~RLA-KIFp>DDpoK*o;C z6VXQ%WC!el#=QnQpeu4dVr^QXEkA0Q@qw3k-QQ(D%WQT@D!;m})Otx=ACI9d+rZy5&2IU z*>4bjbl?c_b&_Rv*zl`&@Cn5p`|cV3N2DU4ujxg6FKX+dwYr}DsD`o@8MDrYRE#Bfiq zNv~#6P-6{H2A|k#QKMjX7_-B+x$XAwO#hh$)%&B}*48TG7XzKPYPFfs%jm}ojPlID zm`pH%!oiHpA|qW0pA(F`6X*E|l=tyt1_lQH&IDcijT*6)gyYcr0V3pc1P39!gJz^^ zL^@DIL$rjJqp3A!GM-vJL!XXO>xU(8wzU;lX4?Y2M+q=!(NM*6!lbBn%}OKM5$=BH z)UQww`Xm&?k^U->kiy<>VNEhPwUa6<3y3NO)DHT>Cf18k3c@=0MI^_rn1{+cu~%hH zBE9L;UxdXMc?JH8JdHyezi+ipx2@Jb)&b0f*RG}NaqW`@oTwtpeWyG{^$pX23Kc%C zU#U27XI|sX;r{|sqCSk-nID**^;rRh@xzQ%Q=GmCRM_J}#6Yg_O?dtI$*`<~_Wg_c z*PnCCFIH_kkJ30f?J-!L(S2q{^)j8o;=GWmb5t^X2%O@{w7N0sUP!U^|f>JF&x zRP9wbk<34ZZP>^RT1EB~0A zhCdU`(~F&D(+@n@uPce%OH*|t{rlMhuOs7U5;5eg9V=Dj8ujGy`aVwH zIhupA#_0(OPlk5U6L~0w4ywFRpG#l7Gyb;d3B5Po6m7E-C_ORtMCx91lW z7r*G*H9#wlZuA&^oRBoME!OWn90dsGY@#|!)cW}4x9l&19`_*#b!t$tEB45>-{z*2rZM0Dp;+JWuE*O}01 z%}W;4X_czPP5Z!m!8rTMc_Kb493UUa*tc0X<(K{#yZ3#upci z^c%eK2EmiNQCZn|Ddx2!NwlFcMk>G19b3nB0uZLB zw9^EFw(Q(|()59rkd&~7>&Dgl)DBje3S9z84oNY2^Sml#XSp+|Uc?jPPnFhfkogAe2X5@=DgB+w zDO`UZ`kN+8B}B>HB6Fxom4OXk`tzS|ae}vdde$`_?51gce%ww=DW%ZsGsHzhzAdAt z^PLv^nNr_RE+Gv5%Y%WF|KeF?&g@IFTH7<&z$CC zy}YTV@KFvBYs(&3>&XoszLB~jHV{CL2|t=^G$-wy?m(JkQ%r;!rYAp!|3jxa*YHmF zVk3}sOk$rM+IsGXoSd8x_&d1>BqI`XVpB=3^Vm}20HE5tc+-5~aR}8(PWVNRNGRvK zs>G*&I?&TkQM!9Tj5$5Jj~#yttoC(z$z@|YogbeM2qd0RoOxzA_KDI6SOUadA!h7* zQ;cW_i?ydU)uDN}=cej#3Z1NsNT2AtdHaqyxV$~SA;)dk9 zn`hmeJoH8J(xEQRSb>cmyT43N{mrj+!`9@RAMNjB}@iviX0Yn zg@6c!WgM6O+N&O-C-sJ#4i9+Ni;GGaGgA65Euq4lC!Xg`Jzvszdzg_@%b1o@MAP_U z*iL&+@Rn3U2DO*18PhRV*8C*IO&Jy!wt7VOyOmNz*C192XGiVYz<7TH%O*m=y{O|u z2YO2?ROqZetyz(}TbBMJ^fv5DHAZ%(E}>ve+YGWtZ~>0k70b7ud1_2gblkgR!mHjr zvXZj-Se4BfOdGmpe^xb(7k{)pW>|-4J<6{tp8J*ch+ZJ<4G`2<`|rZ;VNIY6Y$)D* zzePqy5+zNp+KVw2fX=8kmQ*HU2n5Qrr85N|n9pEj9aX^cH_5!X(C+2omeN{<9Xpnz zJ=*G7CZC@09BW)*$6OP{dzO{EbciqRDK2IgLBHE|SvFfh!tUOF} z!KIYRywq8?+8rSvnH?0mc1$W3>CC>-s=nxOJ8^t@4$FhcE8r))!eZ6=LsU?C2VuGF z-+$+~XGh87z0w_8&rXlSS@hP*q9R;Z~lC&TlPIDpG;IxFckKV z0$2xKTi;G6h&WEPXq^KMeoJTj}<{vJBIG4ux$S+S&R3)i0OrHE&GQ ztS6LlFra<+=~cx`Nph5U{2Z5xNsHn$fBFZD-9F4$0ZY~Pbm{ z*}$Y>sXn6o{zjuy-b>c=2Zxbi#+j)>i#oH`1+P1}?O~nAk&Iu{Z`X3;S1~_ExjPL4hYx9C<@JWo~A;g>sy~Q1@O>;yt5c#al z6}iVzqaDTJ(HzDU(C=U(s1BQ}k|(OZ7%8j*KNtfAl1Q|;Z4K1B5Zp=Rp*a4zVEOWI zlr4%ob2HGPTe@Aks}5Cs#0qo8yvlMb@kK*vv-dpmj21Y)zdXDS$Az4ugqTBCV zxifpogDHOrO&40c?8MHARVNQG6b)S{v}}5wrMm8d!}+>CVQZ6a&%GltHs{XRN7*~S zH$UC_@aD>QS#$1uTNA$Fl+f<0E46z20$=wHB^v9S{JhlpqQp&%(dx3X!~LUk*TvOk zXFa%y2SWz~>)Yj-_58gW9W+%>D%zK%SgsR&RnQ1sXoN%dY~2YG$#$Xj>(?8zxAKWE zMaPpXn;vX3nKK0e0nK^I*=OXm^FFgu$GnrFoRJ`c8z2hn6DM;9k^Q>4y*UBqSy{Y+ z!r7-5``g0M!!MoTIVOV|d_}oI)B)fzUbc38x{w4P%xIb9w526<_@3oJn-H0#3R&kC z`{GlL_wU~s%*Xu_sb*kcV1YLU%Yz$l0zv#*K}xDjm-a{27sj8sw)nh5)U!nr9ieN# ztCPjyDir@!ZXsP!G!JNa0Cf9b_bf((tk@CZbl)OIQ(aJ8nd9x{)I1lAiLEVn> zE6B`$>^@My8E>S-%14l>(gHo91`-mEOqjhnJsW4~Qnwg^DFLvti}7rqc~^ayiL=!e z`8O8s8{qX6dg8)tPd?Xrbso7Uz=BJR4AcGF_n2fo6C^6Hu>j94rA7!Bs1gZJW8VH=*1M}65p}+1+pUHbEsRL zaflG1zu_Pew_q6`QkX^25f|nVJq~0#d;Lii0sbgRinJFD8KwB*-Gq>_Wk6;s$V7U*GHS+M8iv%L$&9o15#3mcRjg<+WlKiN#i? zwyagtp3{*QfuD)k14p>EKhm{T#VqS#+OcB#lljMZ4tFV%Ap2cGx=mzS2D z6^h^A@TUVTjFxw-0ACwOgOy8EM^C75nr;vP(cuZo!v)xX^M8S=6Vr{*@6V{4WEv=} zYykvUFaMGPE3pW~AHO5fM=+W{2}J=y0RQr&7nb3Y3q;c9-`0XNdk~|bckqdd zQu{Oc%CRrYuT-`AUup4?HqZ0G*`Ua64Q7+nKU|o)naGOMtXwxZ)wEP)(63BH?&!#t zmMrSkgj-mDOU8KbdoSC|NaJY1j?Tl0Mv+}&(qW8@32rCkX26dTEUMHL<8-=oB>q?+*ky0Uf%Ee zylv!=F2EBF@YMT(*07*#@o84NJhYaSqdcS&<{^D>!QfNk-V7k(78N?G^yv`N&qxS*z~sThfa z00}Xl%`Gia{i4M;PE7ncE*`l4*I=@~dsd&O|8g(L3-gA^0Z5|9Vbo~>kIF6X=mPSv zzw9$~phCGR`sc%*HnpS+d~5N4(#8yHcw9tj`mx>cs#suF2B?UdnV9$!cQ^uPAR=DZ z&`^s;EnrG>_YPkh5>R7)EA5TKCYt;seS`K`A=a^2H0Fo&;yHWC;j(L))ljql!eM{w zhz(*mT1+?}TFk5x_zthm|B=%@x1)`*Z|>Ux5(aV{xl3<Ig#YaD zEKvHS0JPjPKA$mNUthmWNnbH3qkVaT>4)X03-j^W?c^LA~FQ!5*g$ z2elni5%v5<&#K`S$%YxP4lVY!R2DUDsrH!gX{6&!tu~>K_UGH4DwkcbkB;An{CT@g zyIoc+K>acO^vf|PKL%HZ8e%OyyK4;3WjvG+nRAf;wHeMfF^=fA@>E9~Zjdl|+=$@m z?*x!bh)=!Ya{#H{LdsZEfO79A_=0Ru3MwugS0&{o!PEZ{S5wI*?GvGE1*(oL!z=ub zPyximM*>{00n@P}eCzS>?PnK}jks)+LzP)h1w+8d$`RrcKO-1>>ipN86segR8mzO%;yXduhLb8&pv5H=o0CL|7$g zsRf^>*zoJy6vA!z44gz{=OBB$V1)u)vzqIzgEFY{vNHV68%|vAd~xrsj@Oq{aOj#D zs5Z711;gx%NQ=qH$RN(A7;n105aZ5a;#+>gwb^TnKv`u~ z6^RJIc1$WW^4h(M=u#CL9H!p!_1!rBrZIl(WY3-TNuO}9h!6IMWE_(_R|D4?VWQPS zaJCm$8E2*+62ya;S*l&b<2v~2o8cjL;^L3J_ufuC9A9P|XWs0v4C`X%`FG7T?%%(! zp7vUx`W0)D8x@Z{LQ-~u%-IA(>D$XwU^c*;=tIKc=udC53c-O-OG`tfz*@M*32&30 za8QYS`?ZU+VVme(D9aQDD(BOshch3g-TYG3QBjbGNkjw> zvxQmSU&x@!p%+k7)<~VLB9hA_8zRT@%ag!_LTc$w(Cb?3P-?KhN(MH;`jFhK#3@@8 z3G2`^DK>c}m&8db|Prf?UKN4ZS?-0_O=QPfi(x$PqE z*x$Gyl!;R~4k`_?su~=kt)@ls^ytSf%gJ#Dp3fYmqa%&N))5PxOHbNiS#Pmzm7)xb zTQaDEqO%hVa|_;ECFD>3j+@^9gA-NP34vbCfLil$coF3uzD5gFJ28og{wln$zOk6Y zk+R<6*PrNY`(I3Lj(*z0M2ZwkO3A|M*cW8|eCo3ottabM;P*g@ttpdQIeVDl$sgQ= zD%!ca@eu#$V+z|bl_&bd{_gO76oM(|lQheyLAGB$h12om zuPir0^Xep2I@#HlpB<`ev%yAMB$cg#u^|;TD$oG-+ zl+cRtcMH>TgDGS`xOZ=rNj{<1U7x$@_M_@18rr&>{v&1%T(`lPp>6rmi=y}VzuEs^ zE`R~o*^J&Ys({~lUb+6{k8H|!^&6Tzgw~VjxRH2quA$zCz_G`Tb|`P2(9g5q_n2Lp zEdG=d@(w-PIvp6jUWLGIMXT3#OQguF3&1X5>Y z!3+ta!+^8NxO!0o>6)4bU|>5}Tn+giVy3Rm(;Kh}0;(C&H_kNxKL3FuZkZ=*9Ep=( zX;yL~@&1p~+Euf*;HLXJ^&l?I)&a#2fl`u_@!q}fQ1UQ&ZL($D;0&r%xle@%ZAe)w zY=El=2}}zCYUP1cOlD0jxR# ziM_*`mZHghkSP>;>7`V0-dV@c%hXPI(HVT+@(mZ6@Au-mdgS&FA^J%6DGsR z1T;!wx&Ix>)Z6Xq7M~nSj)_@NVqe9?(1_DPqhuN^I3Lc#8d?n7I7H380t8KxZ~YE? z+zSb>R`CcVBPR-4;T`REyQdu1)xC!8{46U=6nQc}nX(U^ZOWo%|8nbC0aN;e-|X{` zR?*Ry;r7(6FrGMG1uls>AX(IP#uXx2uA-?UV{a^Vz^z-WkP31r_=`MBH!p753bZUeE-;KTVFz9 z*qI6Mc_K@kO)dOYlYf-ba{8n_-%g0UjOTCg<~pt8{2WPsPa4`dQSJPNG`6u}9H(5p zxo6Ct@U~VI^C zg2(mWNxA69J7TI&;Tf(1)qB}nzdegD;qZ1q2V&9R^!Xjur{hoOY8iHlfcEPxeXu>M zS@Vsd-eG2CWp%UX+Dx%e&ebN;e{AJh{zoN{ni^X2oW*D57Hy*q)TcdVPqq#op0W|t z#VXoDN99NPvG@2nvRhlE`L6A&JX@9;ZsiJEdbUOnnw=|BnY)hu)q+V08Xg|*z?ZZO$PTSXv2BaRnv@c&ko$yO{%)3m4_?Ofr+Z{GjbbrGXhyJ%AD7buprr zr1+3l6}L=4j+C)&v~9$1p7@T7XIiPwhxsP%?A)(~g%D-*R@umdTdjCn8qnR}-e$U6;_GhNtw{PFft17<1rdPzUe4(U3j_SB?1b(0MFz zBFp;D{7Ui)NWvuU)7x%WwO>k>`pxX_%^K9k=zMe6E-^zf;cD#b^I2>S9-7T}$aS*F zD;Qz?Rz>T^n3n8W+`mNB9xp+xd7;J?+)=&^3xC)1oTcabX0ZbTNm3*_z#Ay z7|fo~e9NG#vlgwm6xr^0!>rBy!9nW#2}(U@MX3t%ioemw%4*TBP{~Oar)P3^*9?tG zv21IGGFPV;|5Io?cU!VWOPcWCk0xF_rLg;3%mt2|D~fc)j>;SuY&qyf7ZS|1NcFim z63jRKN_#sIK1@U443TGjJqHSE`mp_v$ms+T!k8yN=XCmlj{rPfMhGGnlEC&3x9Zw`rHnm2=xA}&Oe zrTmBGna|>Y1#1;j7_zY{^mKC3-icIFFT>9d*}2ES;(^;`ai^=~H_E46neJ z&A-H?2GQB$;2{XyBo;$1U{Z{?w3w3&&5)3gdwj^EaoBx9a*7`**+NZR42wKE1?Zfq zV($H)XW?XW{sDo>GU^yt0q7hl`iXW7Da^MC$VP5)l$ZAd(2|_N)6mAvcfzSyZkeLP zN}Px18Y#nh{`_0Xn0z;3J>)>GL0TJPGy#<8c3dG!zcZC_LfW*6i#&E9J%^m__ z;`)7iE#5RNNF?kCN3>$iAb6<*LnPlCwh|WL3f_DBL70u1CAmCEA4TFof9zeFtKvG{ zdpxiWG>6&RN^OgAYD=u+ho8@s>E+oYO=J$-6n`Z-eV)El@gubYt8#9*2mhG!wiESO00c0?h%XnL<~4F@5{%!@Ckur9h7FGS zdnc^39&NqX!Eoj1Ir2{>3o=JJZjM3x%l|7z0nItL3810V5Zw0IaF?rKZn;(OmpKIi zZ9WNQd1HdJwRk!BXCZ;7IdoVckS52$;}w79cj}q9ST>S{GI~7A8s~C5(&uI@rSdOLQC zJciylkvKt(TE=&)7@Ub*`!>m1G$gbTo|l)`T7-WG=&`A$8v^DnIX?fxNyeWrVMg91 zTddqHyLRnuUJ+?U#0y4rxE*Sf{S1K1#*KV}8zZi47haU4y};~sbbWmxjF!D{EN!>{ zCA#XfvH10GOeDvNDqWa{bqkWH_CXa-RwE81ESLK+^!}gNiah*M_)viLC_yU;JH3U# zN@%*jCm3$i1*DQ-0#w}EF?8jzzWTSaN8UV$Twdai-7u`l{J zEcgv&RWQyaSqn03SsROC(ip%q$R{KB=-vwe3=Mfthzm< z&prRXNB)!wI&I)NARb>T@+j)&TBlZ4RGh^87|OzBVF;f@E0VMM8)vWII$qWl4d9Jz z^pBFbK&%GGCQ5CGqY+69CibpFhYp=){Lbl1^(PN)@;RdXG;O+6&+H}m3;uL}W0Z6k z31)MOZa8lZP&hWNL@=z!UMyd*X4(2hc-Cf`oh$P-G0mFxzIj>MIvvd8 z8Ycg%z|RkaQ`ati=Wg4!4GqBihf2=P){VDYF7e?;r#`Xg!W2^9RnVkHTlmQUIKXof zQlLk6iQ9j~jjW;SK5dG0gv0gtVVnvtiKN7Opwxbpft}uj736E9+&aWMMTP5x$b$EFZJRW|P3X9)@a zKrQpuPb=4zo9B6~R+HV{2z6mUK6VOIXab5Knq&KXV(CG?dUzvevg@Wz?o65?uR#9a z*@7GEHg#)7hrSHRUmv`J`rl&6xRmO{r_kKxby<4;te%{IbdJ(p zI{w)~>noasBL$g1kK^?18Hf(2JyiDjTfXs~>$TUc8h)1Js&;Yxl+V{CqijTMBSkhL z3p{{#?%Dn{dP=O{%oNi|C0-=0Fu02+_*1IkD}?~-<}3iTc+$-_F>!R*EJX>dEI?fd z+a4#Cks6CFl;FYb0IeT=-;PmvDYa+FZaFp zXU%^XyKm#%4%*{k9U|sIrVUDF|PgoInum040yjjCy#SA&PVse}?($<<9cMp{%-u>8 z(c4YUjV3R)-hcq>~~T zvtRs)qQvI}znNcA^V7b^2Lub_p$Dt&Y975#UqAN^KlU5#p18sQh3okU9g#G*-TTz( ztiRR>3I2?+2Sf>mj%H`GD)rI@38;7iQQXAuVW960ciQ~EqQ!Q zkiPlfgQ1{R=ROV)duN=ONpc_nGd)7?9=gOvfg~ZFl^ZC7o@EJpNgdIEF&+dxWka_JCAo8!jPtxkI1n;Aom=9N6x zuKG}Lj1iijUL{JqMazB-7|YTz=VlQw&-l{FNh6x zXuYEN9a$_llof0v-@!iAg+%@BcX~A_cfMg6F4=4~mjRvJKkbdc{sQ0`AnkQ%dx>a# zz_{#Jp3BBF|E}O0jNwCLGeaA{9UcF_zG<4L=|SzHKwg6VH<|}$ucy|3rw5~pD0HE~ z-|TZX)7UwJF{t61xV5%8W3TuvAp;Nuqr?^2r&d=~Gyws~#cO}wegJ+hK#DZEp%Uac z&ne>K^lC<_ms%`7-y47P56t!@Z9d{iZh%3`?w`(8G=1JW$C;04`rXMFN@s0l_I6LM z$EprmnHkOVp4tCqroqLGJk!l|If0Xh{pZ zr8#KGWy_8#9vuyeliwgRt(yV!adar=Xz>uLu!<-s(edo9u_}oW7B1WtA92J-E@oV3 zi3sU8>v!^u2Hv~zB_}=<_NCK*4g(3jl)VcVNz}ZYQvYqgc^CPt@BqNN3gH1`h2}Vs zb*w~iY^xR#)hNIjVX#6i4mP6rX~vYMHDK->=52z;?!?H&VvHEHf>@b{yFJQjc{K(N zKhPuqpjo%(fu@+-G;%xk)ci^P96cr-S1fAa>8X~9wAtLn^SvE0yKTXJ6POSy#C-h{ z6GmG<2BMr7V>LI8Rh!Tixc(0>wgrZM;dwYa%RTWNJKL*jf$7S-mOJa;IZpR#)FwZu z53SwyJJv$%h`sy@08VX7a19l|e9lLR2!j(`I|Caulv8f$ztubL<&I6F^CgGI&Frpe ztsGqT<66PDqXdA9Pn~`bTg7F=?J?ur&_6tFItAMd9pGnluq3<=L@_0+gQyHiaMtm>CID{TG>@^1CondL zCjDg5FmR6NV0n>Vtqx9i1fxY~O!Vr+7mffBV7{(hzn+yhNakDMV%!}wc)hYa+1!PT zqmuYEfpR7hHxXiB>SI)%m8F6rMx*K?rjkUPLXZ_`=q_|vSKsewjNABo%s6dzH*ek; zWfs68KQsI@HF|~H+S)Ks7l7;7gNGl136g9yNZu{*iwS&%j>cn4$3k)HbDK zL21)<>G7N+j{KDqK4vd)5SvxveOj_2#ddC0Z+evBKixcc>)Y`9)4P{h_@j zF&B;KO}^y_#zX*;;Wyo3L85msVYjF=^c_MvyZv5-&f7p1WQnJvb31U@2lbl4(V*9*+=L}V!~iImE3swse(*8N8dkR zwk*FJ+s`*Z)8M}V5e>hhT!$HM$X}l0cBg1xE?l_Kk2dW&MnFfje>f)()SD0&=Vmy1 ze|oy>1_%*C+g`qVw+vi}-AoA)%pFZVhV>6ny9#Ntf0!UoPY$u*&IH-jqVf)4{a>sZ z9&1i7ti>3@OTg^v(4`69Jby0Bkisc+3UNo-8S_Y>5SdRE6&3Ad7uMpg?WlMF3JNw1Rf~MaOGO1nOP1VZ)4mpzRfgadfsC`v`XV2I~VEx-I<#Hh$c4o z@5ytU-_-F_XCKuxXe_L(_5&^FWU+_){KMx`)`bhDi~UE}(Uj?N6DgN}htbdX57zzf zzPaSv_-)6fUOye$#A3W`0V(Fs;XXKP@_}1CMOS}9_0Ml(rl$v)GJ_Fi)hgcA{eW&- zLkGmBMy7xfm%C!Oc=Q-qS*;QC7}6~YlbZ|pMb}fEbiTDb6;|%jqx{o}G@U@qcEAo) z?-kzFP6p`s8OQoLg3 zeCD53k6kZ(JIiOA>eX3t)qW#>lilZ^uF3ZiT=|jmnc1sBX|m3dOax> za5V}D3`&>rigdWq;>_Rf`%sCNVg>j3;dNiimbDQeO9WHj9E?$^-9*?cC|9F6Vk$7!>RVwz%?J?G(PGRVj? zC1ix<*13%H(uajC^4T|MYnf{1&WK&^-SzHOtDN4}`TF?8r5+FapX<-8>3?LCz( zZI{Z)z5N3}12JM%qz=e_SUh<6pAADajI&XEbUnnkUs3k4ol;uKO2&u^?MQTM<5_<5 zB~wFM^tr9^NlAI&0f{?3UP|j>HVxz}2R8oyhm{Mx;|e%>%QCjiLHU=p1ZC%_Yd=I%gIm>B5jVAsQYQ1|p99p#?w5p+HmSIW$?va)mR6fFJkLvL;4$lPZ) zVKNyTi)8%5#LbQ)n87FIDzGDoQNOx6BNB&r0V%F z|36R#9*UVD|KiBs_JwJV?(F$AW%)%LI)#o_`EzoqabYb$Ng0NmlaRcFY&vDwXG58y6q% z2u|wyjvi2t`eF8X!2{EOf|hFK6HNXA516wn2&5qcMsk$;$QJ?H)0ZzbWGMA>8W9^r zlFd-y-nnzfoU_-dj9-3(QC+=`x{*V6EpwFna|d;g-#cI|oGkvo!*3U>!!fo&+HD7Z zK1 zql3W45-xT9|2TUSuo(9@Zal}KbA*r-rN|+&jHFc>OUYVNNvP36Xp0D3sW@m7<$LB1~ zD(=(x62M7Jh1zul>ekHmWEr7Jpg{aA6i&kRqiU-I&=7ky#Sp^2aFJ>fip);2vvC{y zfEh4Z)6~q&thN=xKZH65P>Fyz{N^F$m+$ESMfNhF=p&D698d&O(T;FQd3f>cLM2y_ z&NHB)A*r=ijQZz6dFNi{aLWat$D`3LKypk)YCCFHA^~TIS!S9Zk+uZxV3OiM?T4x# z+Bj76Ai>zy3Pg(+s*rxf_U!o+SoZgcWaYW0RXn}YH>9%-CnYBC6>z7lWoD5Ri6p1S zxPK!L>`Z3We)z*aI$W;K-8XTpCI0{TXUabK`{}z6N5^%v1%g1TiXI)YZgSnh}_K}V>t&;6V21ngLeWM1BBhV zsO$wLqvJZwuw8FLoz4l$rFuV~M5}2cxfrAYP;N3_7~kY@v%oVTthk@PY=mc&ksso3 ztek}BA!epe>;aM-qH&ZLJFo;?yn%l>D1bK2Na+3a=1U>J>c=35*?}YbuQ->7Q4zW- z+eX#ssdh1tNd!&~C`Nt?Zu3ML93x$ZzFPKB56f`TlD?_r!9wjj6k0Zf5SmEc>ktg!=-C86o8Py)M5Za^=t~ z9?e6T+dD2GJ*?q;03w&{X~x}|mX;UWI+>*jUP zq-&It&jC)DD#D=%9RLslf6lWl>Pml9A?XExo#u&RX*LCDL~^3&bAEq$pLp zudAIr07TXoX~(c}L=HfT#DEURLRYBsL7uvVZkZcT*!TQTLe9~e{n}OjVpP5sg;I11mQtev5>YCPf8*6uW#nf| z#8m+Q)ak1){0Ba(<0p6}NL1DN-G#3H@BO7s@_&^aNcm>R4!^8CQeT6ch)q5BmiCigXPXVDOgP6mo2WNa)pW~?nAsc}I5fTCC)O|X7@ z=2p-+-)BGX&ucI%UlD1zphfw{0kDZ@u`+4e_bX;_CLR) zHrFm`>N2@?AcxobMg6E|71hD{9`!Sc{{HHyh`hGJ4w4?+xM1Zwz`1gt7}deFddv{i zaZ#TH=CbHgG0SMCESat0RssS;AE&w&Lprgp#XX@%$X0*+`8DATYlUS4J6*Xd-h4u$U_~uiwE5R=dOL-0%vaLyeGmdwm$ic2 z!HDqCxKz)bV)CSEwD1pS;#E=7-e6uJ_Kv3L{P)yG#|Y9s&^yFAg8zttVSSALS|7bJ zb*BHuBNnYTh zoux2JfF70s4j#x;85z#%kz5g%2Kv@W;264q?laL-&cD2^7m(>8yawc!WbyEHu)&try z8Nbw*ma>lX=Wm!H??=67M8n*hs)C>5n8HFiZF3F5^WK%fbu82Z=<#DM{P8{*-qr`- zcN_`9>M`LD+Ix7REPyyzd?DoF|LxB#D`*?e-k#$us`4(^S_hQZ!daEdx58X|b(*|- zjS$n4)vjU;Po^V#S>KQ!UNk^?<^<9vSPHj*szLJ`V#$~h8XW;`9tg*vQ9)=r$M>F| z$MCH}P=jj%7YtQa!?X2J@_+Q`(KbbpZUnB=N17|3ec8}rgmmG}DnK6e=moD|`do}Z6$?B3hi(}G`) z?EkgCC0DDao*wxZts>&)yKK@SxL_uYWi$%yZ zoZKmX`*#WR(t#@?i}z!^xp{&IW2TWnsqB2xH(8 zDJBFwAqQmpjznljfh3iJ2^c%|=#P;r>qaQOcZqW*k3_)pF;+P;>t;D(pkIRI1&)2BVJn8GK`a``HOR2+xJ4kLRRVgPo?(o2%O!3 z5P8B+0wztUel@5b!x5*$(l9~*AFv78fDl*`#^*i?m;{O{$0~uPP~D9Cc$@O1yj}9c zeV5JJyXa9-=a*;aH}3TTf}H+Bob)bcKcVrgy=6$q(>oN0t;=GKLU{uOl1hxDrD9mU zCIAK1oH}did3l=~Gi*o>;+aa!FZP6Sp6$pbeWI*_*;^(jBf)2xlSg?kj)gn1;X}&N ziOEhq$Yatt1+Jx;DH z{`OzL*n2cg-n`PkJ3C}qpR0CElW)|jP0#OqI;GRuOw;ZZL{*6QU7P9ffjpRVY3rxn z0x`RCFW-Df0;rL8>qxW%fFL2KQam9?K9qoYK+KDe;gRHd2POMD6AXFh@t?Ic4W0&; zz8PkcsK3UAuE(5yh!xzaa90ws1@2UK3Xi76J0^L`A}SvY@*}6fqXA(O@4;n07!*Sl z%ZYak|0Eza`>+VWssRwN^3t2TWYa<3=wSbm zRVQXIZlbs5FB?LnWyX<#VTKb#)-ns6TQ_vSsE9Du{Bavg+mw!t>OVe%3qmNT(#4y2 z26S38t8c(m!+Th4ppAam6(u&m_OpJd;)i&GrWe3kF+&vTVnsN1Ts=-eRDSL_M-5;i z?*7jQxKQ(-*9jO}=~%Y=_OIxA4`{?j2rau@iIq8Fo%o9q7qOShGK55W< zkSt*F$GEhaO83))_H9~Jb=GX>MvHex>^QGFwo1LfW3<@aZ~c4V>bG+yF5)BW9!g@W zm4aG$k$tpRGXjZYP%_0d!r*T1;xi@sLG`pgu@>cm69N0^p@l?d952|^IfaNO%7p}v zM)>qc*JI~-<-(Nn_0EeEi63Hy7L+`j$hw@r0K;7WG($Pii!URFIb<-Cnf3zw06r|of_#63)?PxRcZSr z^v}C9i^w$U|MH=k)f z$R#$QCkHo%Da8sX`LaQE2Vm)2m{$E8XiB}EnCKo#2d(+al`9dC350nNO5hzVX#>C~AInbfkrzb7(k%y%9zAFFBj zk($pyynPzx_g$dc;^3C31R}=ne3+V{3bh^!9t_-8LQ>D;Nd68||HAeq5?x@;!{KOu z3?BfRgmRygx$ww|K8ji`Qw;0RgG0{x303tbvIsF!+q+uI@LzZ9ZC6Vm5xV)~by^=S z5RMoer~`W<4R7Nt!@mKGK$tA~@y?vjG?Ip;b8yl(i|}Zn``Ek0t;h}bV~kwYiQlbk z%kr-ZsHDdWLz{P`@LRSLmUW);@w-*$OAlbLyf$GY=O*K5eTZ{XkDzQWI4j|J*?Jw6 z*eKb6Bo&ngp=5E0^RNxJv{w0tW7P3KLe*-M)f0H`v>Z!A(1Y6Y_PLqK6xm&$sj$G{=PrcNiA7^S3Zb^9idWTaU6Apg6mi2@dBjAhL!V22g>20 z4a)yKVIg5pKx5xh%T5OM`$U5vk^!9F|9p2K{^VonSa4r*G+qiN%W=Ay&{DF~N;Pqe zQ;BL~H-q}DXPO_!rJd!{KI_33-l?XcUxh=TqF3nY0c*DV&?Q!s`84>b|NQw77-p(M<7MQ<$<@}lZ#C9!J_kLe&kYS0M~<9!O^6V&_DEiJ zFl7OYdcVNj-JfstU_aNEI%s8e4V3w)m!?ikq zH$jr(M^F{`0pwQWbj^`oTB_`VLc-Wf1$1KI+Y|O_moIBaQg~Q+9UCZvE^+Vi>}UeG z=N)sKDSFDgK;72J@vrM=xr!qDROz&6FSGL|zN*sKDJ^_ZxH%N}F+px*DG43mI42{R?x3jQ=C;lpp)a(RgXRtjcg_jDCJ6W*sN;axd+@9$pa^fsSH znt~SdY86wfoyexGf&0Du4LrQw#Ur9f)(Z$JZdA-#Z8w&qE*Au_bc8}d-YAk&;qj^qQ?kO zkZhn5EZmbOpZly`yLKn6_=gxC;9!`;OkXr)cvu;_3wEJbwmL;to?fA(?n){4S%bU* zLF{uyslbhOB(5RwuT2&zjPfC8m2@nG=c!XLW`0+2kHX=%@WmW?iQN1Ph5!jrX(dnq zLBfg{s|O7~WJjk726b*R9umCeVL&QwfzPME78kd`GQY^d)R3+}k8mPO+x-&!TLG&Q zOrcOaxpcIK%ihTBZ(P+^ZXfgNO7!oCX(p7DA&);pMJzz3`^K;3YbRi9wi9V3vWo>CM5jdbCb>}7CbShmnX z&tMT)HvlmeX)W;47wx{d-EQ~VJ`3`k3SYMpE8gJrI$cmv(~D9!8;tIfT~ zR|sd1?99P4b^HX@c}1X$y~k6n#iKOSd+B?>lwOXEp}B)%kp0R+vM&M8OdG@=QmNlt zyd=J4qUbr@=0Bj;W7txXA~Y2XM;qWU<6ZqnpbU|Kt{B0&6(*NArR7MY|a8$m$In z%!;5O{)dp^R6$e3p`!2X>|9Yge~mTH)=cD*4Bx0;6Gt+fm4Qu?%ZD<}AK=CG4hm|@ zqOZ^r{{m?5{;y>nBgz^&pq}Z`U7mI{rv(+pUN`M(D!om3h*E?Kn5yo&)nbDz$bcRf z;g5tdw~a=CO~;Zttm;rc6x2uAA*^t!$RhpUzhY;DFvjDu(;{6+Y=hk|pXx}6V25jC z@~`4Ja^X%{ag1By!XC2yQuZgHr|pkG*jkUp1|&76eZnI>6T&PM{>jUvLunJXuj=~a z`BD4vWsL;ftA+CNCS?P`fay*XqC{F*RW5M!aHrt=j~_jfnlWR>m9GRu)}cg2bBqpE z<1gbwDH2MG*-{UR6chyB01;8-E(Jg#90aiUoYL18DbGlSq+^YmR~| zE$Wej+NeBg9)$^iH$W*nWz7mDgAwqRI@)}LE*bFr0sI{dlwR4R&=cyFIN+qt@HcvE zi$&=eR)M)j0<=l%0r$0{J=3ma5%QIQ#(SrCo$PxkNzH z(jlN>VeeEY@iu#?**W_i!aaO3_yW3AWUNN28IY!$nv3+eND#&@n&8l|5m4C;b zl?JeCI0L`7Q0|qB<0i{$Xs45Tv?DF(ku6$u)X4uyAL9kKh3)eJp7sX1otBF60~qHw zYu2paUJ(Of`>fo@wE&qXaB27Nuj)tpKh_nM>ygocm`+R(AE5zIY8zy{8f({n$~)7L zst27|SAevxDMbDB|FUS^{cuoy=Ybwg^WxZPAXqDhm5?$BM(!vy z7}6N^7S|TojMHveNJ5t?3<+2fGp<7>Vu#dx{2}rpABnYoEe)Mh3=2t2frTWO(dDB& zBD(pj8uNemk|I0ebFFIYG((Os&LNZX&&^&K*ksGxi z&VW2Z0`@!=NB_YQR#x9dk|8TBE_;7Yp`;ozU5+rG^|$j$o8w+H7Ogw-H)_WL7vN2% z7cX9{EjL9fD=^i0B8Y)z1}ON?2aB7z;EeoNk190y00)X@dYlPEV^3hr(0aki`>7K3 zqXd|S7($P@X4omYGv!)q-NW?2XImveYR`RQllL8>YCZ!ILD_OVzmH8>nXJSGZF9@faQQCKPt@mk)x55{GKU@-LQr5&sBPOx_fxyKuuJ>N*1}Nn4=`w<8REu@ zzg9XS_?jiG37eEKm|S)qj`Cvw2p{PfhQc|Z=W5;&$u?(Bv9)R^k2Yyp4y4O~t6{Je zjGu|Y$Xvu?!-CHY54RYf`ByHKCT9~oG7$s?+g-g;BXkfq0VfyjQ;(c4ppI|R;w%Q9 zt{f^3>zoodoxJt3PDV5YM4ZLv-uuTqEFiT%?ZoK*fW>`iruZH=3{1mkl;HZn^E3#f zaRWHX*oaX<;@k@zaC~hYi&;FHIsWi zq2=LeYT^Wa_jJ3-G~9%-14xY3)RNvsbk#l#r1jt5uE@|;Y12%{&MysS#f$y+Z?5;B z_Y=CMn|ERIiN;H$uRtPO&$kJXN(1iP|L4;fpuC>dl3`M{;+)$1;1CXKQRp8)fp}tY zecexJhqOeF0c1$!R%NGU@x3 zP@Ch^1?TEg8MwP1Vgm%DK4s6NQ^f!Yqh=PvjSr2u4g`xX3d#z7lqHwmikl4o)^2*_ z%r>stFfV>%$XWKvgBp_fI(G@cU64t}R6bLpFHM%13n0|L)K}yNQVjcyI(?TybYmShFs5N-N45WxfPVueNsWzJTL^!fkEiUXrA~ zK$jip5-qwM+&RxeG7*90{!B$* z!@oZ|4^k!*zPY*NWcGY=%;V_g|7rn7)RV*e=pwwqIowT2>B+6M2(3jG;-<5otPY$^ z=s-w)DlO_1*hY6Q>tBL4;5{#3>}uMBSw={{`AHzVdd->;Lw~E|$Jh0{w4~y;3=P*6 zRBSXORuH~BWPC_kV%rc!P8HDpkUSS6?+ul$4=&kN(7_i7eCxL}LYuV)Rx!S|ts(sUKA zmXZMw%X`YJHqlQYbuyFsRH)jyi%%*9%5wlqQD=wK2)7G&^mK z`5+#CCsgx%Ih@LrLqARvmbisPt{@|fUAZ1^0pwFIoR{f@0gV8b<*BU7;@&){t4C8- zP>B)s_Ap&FXb(8^luR<}oRq{8X`g8WjPW`qlkul|!aS|WFbt%pJ5-@^4-=$JLDq0j z-~Xa-f2&1x4p_RU9&Wo*9rzJ1=A;rGl&zS9M{o#Fx~ zdqYUJy=^dSklQx!NgFnduOtr;t^Phe|F$`yOXhW?;v-oCNZ(Qm$?G?*`gxX@%bjb*JlcuXw$hk=g~k zMeU~x8cun*$n9Nt(=EbkQkQa5Mwlz{J%;J1pp0293~;<^6Zu?+Bnk4BQ1bj|9fGW1 zL={?AeKBqzR=4@l<0&^_Y8N({IHCY(Gd1-OK$~D?68wN!!?*Dx_FNOhO$DlgYFf0J z!3P~QUhau^Z%=|1h|n(Ggu|rpI&P=f~ExfE~&` zUc9dT_ZWAD%Ifpm9Xx|!7Rksvf$WB6)pYE#_j&r57CoA;OME#G@^8v09B%`gW`@)H zC_aW$H0{*MXTsPiz6h=W|Nnm0`2ssrTA$==M(^Mxk5SR7aPDv+ccY&hF6Z~B2v~^@seJ_rUC)@ z)QM#$VWZv))YB}1jZOY4qPGCbs3bjL_|Hpw`SPGa{eW<736UDx!SO8rA?9R>=p#By zw}?v%#IbC!Z3xf7<|DV|r))sVMJ=6QvBRF*9AA0m;Gl)SBb;}}iILDtx3ladfzMu= zViWlS|H9erU7X6)Q4lds5iWzk)zBWIKoo>B-2)J<+KG=xFz+vBVSO|@3SQDpaLzpd zF-sotI2-RROoTVW&_0z-C)yk7n?EgUyEc*^vfsC>)g*t3i`iVrf?);G^|yZ+MrVeL zll7Su@UA0y9~`aE$Si{`O8>kI?g{%$bY=Qy5Fr9Bh@m75Tz+7Gxk>YEzG|!d z-KUovem(!_@lTFh7BfVB&oFfZgQbi<<~~KJ|4epvnO{Tfd9u*OGa+US={0!5qfLYr zFC__&xqEjRnT%LJ8|v`;pMjg~C1u@Y+p6BO_rVlT>e{s$8n*xoC~&j-adxBFhj`4R zbdMEO$3eJm>-B^tNS}J>TdAtUz~wbn-`0bjo9G?ZX4TC45~E8Z4T1_|w`58Ck&#@Z zT8gc^|8c`zD)H4|?Z^W6@{KC?UvIsRiBsZ0<54bb{FLMdFEvTPalgT6Dx5z@j~-1Q z`xZqL04^Fi_xlwfu(kdnu#W?QtMrxf>A#I zceri!da(6^-eq}9CU!{nu@6*f=^U{iKFoHm+VDro-=#)LuIYisAMR=pnMG++Tb6Qx z+UyTyelyWWT!E3Q^lKka27Q1A$8)$Ae%_x-eceO;22CS)TE5k!O&L+*P@#I6Y7G-h zqQa!3jJ?xfPpRh4=)re#=oLSh<4&SmRn@(eZ>;tHgf1>D(yg6htJOLDyCY=-^cJHZ@l69-)>@Bg)v2if0@> zC%WEAewTDYoWHDz4r)Hbw{@pHIDt&pX#UB-#aABCM_+_U*;*L0 zjU}DKq|Y%fA3jnVN!Iwuqdy&1tw*z@_`&}xUrRHjdd=VPRbh@r^<@Au;0yTmTy z=|*3bBCQ6`9DbIRoq3=K=jLNgBDx(9>|ci~pIOUWE9$8*)RRGw^2Y;^RB=j53-hFs>^@&^Hd zM|MRa&o!{a(KCDU7VIz_9Se?OR_o+BWLq~YqSTh?kDZmwngo-IU(hCG(jom%C`bkp zHI7ZN_*7}AvMCMJ<*$q3g7Ex*yf*sWU$p0Cqwba*WF^e^Z#zwysj#gqYrET|Z26jSlFYu0QBwZ+};g>g-? zzkkpvkd(NiC}6pE{d$uUgp=Mw1(o@X~ig2*yxD%m&?wb@s#%^ zC6C;oV4*a-<5ZXy>2|uzSQuLv;ER-tADTzx_x zgbasy45XDWCli-s?9>pjN8Y+#0)Ye->yhIsu+&7OVm}UC9m2-QIX>rz1Dci(Gi+&v+a8r+-PlmZzF-cCc{+8U*{80 zctZW|=h&M4U@8zZ8rnP4RCh7`y)hSqD$?3BT429;CM=0hfVL$Y+!og)?^com75#j0 zlv+P_%-&vwe=f!vhpBr9W4%v>J9C*ep7$wv(xtC~T3Kn1wfQ&cfrN$=2Z0 zd@B;_b*VuC4h{}qs2|?HFLgrw8(>25DaBlMQ1*LfKo=hUhj$5n3m9qq6CKpede91- z?LXq^z=C?iG;rpS2BAsPi;RuX_{{#Shx!qqa(bl7m9gOI^IJOLU||T3iqQ+*!2|GV zJ2<_Vs%-0SgDl(W>xPqx@dQXhD}lLqGV-$buSjr^+Dj%ZB{J9Wk>Qy8_jhgezq^|^ z9nvF$OM)8z#UF5&%=zSIxC$sBG~k@L4Z=`B9xAX<&I#b=Uh~c&B2Ai4skriqQ~tas z)%0ku#|MK&H=SC&)XeNl>9ywjiF>54s?>B!j! zjPsD!j*eUF-{9Z;I6Zw9%Bhf#1xz#o=~fqb=vJu`lcp~sG9mD}v0mHhd4ly2^w^iD z21xEg%gZ0bI8TOd=M;CSk~T}CZkC|fblA$OqG{VRT7%A(-e=gB39L!yo?k91>G%ag zqpdU)>5QTNohY;9mGs_tgjGnt6qb57`2UQx2@^MR)us+(DR;{iwP1+PQ;ZYA$h1v{T8t9Yb% zg090I?$4ktk&g4T_6i8_Fk*w`JNoQjqUv!uyAJ4XpB+gVS8XD{uFBN^L<^5|(Qvot zKvK91JfmyL!`bDlU3ms%PhdkL^(KzYLoW?PpmPd`*-T}B9YR<*v-DfN*6DT(KGl(* zdssb6mhJM)SQMF3=VAE4LkrKQ+eN@bKlc|ql6o7)bXB^R3gtcH(?JT#3~kw>X0vE%nh>+Wy0sAfyQg^6B-r3pE5ZFrrd93~xU0!2AYOT1`~8-Qnvp zGaP#Z>PE7a?W@V16O?&^lgir-2zjuDdKIc-yhGVw)eej_d7%S=xv0gmD$pFN{%rkf zzRjua#YEu%<;iu0A;OJiJU}RU6ix$0!#e;O*N=my0#y^dK*6Xn0=6fzPE}#^$FapZ`? z{F7YLF_ILB$5ju4aSEubZ0fNj9hK=#WUfy0g2!}yGw_w|CBaeW;P80(?Fx$oKfTgg z(pm2g@&Mpx!}UI&P%+{F$YkS(-j)WK7>u^pxtmpuIGR7jz6z!#U{BUJu+F+W3x4F| zYE=1M?8o!%1lH|u0^)B_YWFOK%6!X|${5a0bMePmmb>>cD5b$yLv!#)60!P&mW_#2 z+z<6QsQu@c!3&wrAmN(nfnq+mSZC-0VlEqKws!glkPen)&M$zAXqbI-A@X zFa_IXF}u!*^X&P8c=?;OJ{I(kT|-JskX9bT(gU1NOF-z@1)ZLz;L5%ra-Es{+@@@( zr}h?fnBU~lMwZ?Al=AZB$4y4LZJiw>5#HtWJ_*@^-LE(T0^G!u{~lJO7bOS23pyev zRG|yRxR)=&)P$o|aR0lSk9k%iVYF{&EjY8ELUp59ZP!KM+x$6}dI|?WXEw|M)yj8k zQwxVdeN-qrxqR90SJiGufa&h}SDIi`=_a91cFTaTV(p=LnGJ=@_A2?khVmG+7akk6 z_o|fl=RPmkc;e09vHDWqz-X!hyvmtNYtAbhU2fe(z{H^y&!+fIMuJai+{jMsl)VH@@~SP zVOut5{SUF47Nh$0@*TR=rhG8FVzj^PeMKWI2gvdwX3Z3o;C}^v-=HAT>mTg|V3Nei zBq43m%VQG3kQ5dX(he3NA)J5l@6={3;9sc08kKI()(kl1;WWedmoPKt_g!S~q}Iji z1}~ph)7!o@PC@D{8Tww$MV0DYQxREP;Bs<#CH?-OHf}WuZFEd9^;Bd?FNlhOj5$ANXc)DJ-R@jWB1`qNtN8(IUte?P<>C^f zA>MGmpN&mm-`4bE+x)nJ4ln2}eGIZqa9@85l3`RxO@f}rAB}0zc}Br4szccI7S_T| zc(H3}9R??9te%(STYTceVp-161~r>3w_ro@>v>%&$8<XE9}C$#aMuVzG@_K*{EoIEa`m0gK$o*j>XFO(-A@PGDKHLs}-gSaABHRycqamak8De}kCDfG{8{h0NbJ#m$D? z?AgEy>jhv<{?k$@+S+h5?(PyNVr$ zjyxxDPV^V_#NM6!fEpOc?UFYAum3#u(zCoiz; zWJAx_E@+pvu(WLWr~~SCG?&8GFewK=_(*bdf~+t8s+IhPfbIbXDE)Q>jJzjdbXs@y z>e=ruHzylw;C(mTaz4kdV_IE`x=B+w!p$DN#mz_$s# z@Y6TX@*%8{+a}~)z$YU6hulBW1X|c$Jb#F26j4IbbM-Xa-fT*3x8_(AikTwQ?j3m+ z%_)r(zppxkKGAmDT~UxUKu$HU59iu}+t?6&yl?K_u$yVDY@(~rq+9h--2g4`+n z5|dK6$EwI>6>bqSoCAsXI_{E!2t;UoDg-fn)ii14+u9y*p5Ik=vnTRLWW6QVXDHE# zFSOvhd!ODK-4`epGngRHDJ6PBe;Gdf1|*PdBe{Bl_VV@F#_e*QBZ^lr-aqv<_T>-oYuGvV$pL7~5Cl$d&u1XIjMS=A)ySID6)B&~V52q>H z(m^W;PvX^A^w2y@M{Zagn5Z#Ta|^(~Nl3>J4qq@D+09SWn>{n=?TL+w|NURo@54ic zKuK#B8RKBYMlvN;N4HxnQuR89IRptOhl$CiQsV(m!BTauOW!6(?f2!qvp*-cp+ zxu$QidZJ+W;?lCTi+|ta%LOQ0&2Td_+nQbXobDFXWVeOrN5Zv=(yPn*m}IedVtscGAwR1=)D(j1%WhmwzI9ZrFu@6*($` zi{4LB^rh0{~7dddr4pa=_^N~^3Tg-h?4(xV>{My5l52Y)$NJCiO>O9W%?@W@4 z=KpYG(QOXXLwyx5 z&UwOB->};{zO~?pdn4cX;=+Aclh|#TJWHq$>ZBN7*0)MoI#_tq*L`_k#=+B)11)=( zSM3LlFu=ke8_#_H3lcm7&Sh{gLT&Xuh6fn(B7L@Sdv-JZIhQ$Y2C;EewR!8V3tyjc z=sPgAJA6qC9HCAh}pr%=0>q=?q~O73S1Y zIW%GhHM4{H!JUIu{a_r4MwcMYzr#wxy`yjMcXymYympW~o8 z$qP08@2dT04Ua6HoFHneZl0uL4m_{`F-gFP6?3`F?Z+{~+%57L4(paG@!2~ zl$8R1?vO(nK*c%$`+CT|^z!GjzrU;Kp5>A?@Q!+NzqqDKv#35?Zvd+t#>A5&bFeR@ zm2q$OVez1hPjF|e#)w0UMOV^UpdQo&Gv8Vonau53ktOsRC(k}8Qss*%cO^_0$)z53 z+QlRlFqwV_a%7azDT52loR&#D0)his#sAwhWc>+kX@{0c%1)%y=Tb-28>(F0+9o~R zD`Fyj_?3pJI|l&-doY~@8B|jtH6TF$McMdKLvRB?b7A4Q0JpH`Jvq>`k}Q^8yy4r`3SZGwe!SMyznpM6_i zS`({>IpT(<3ny}kl{xhhdO5#s`gC>NdzpywEv$P*#i19GJ9!=Eht2u2pDNRbX5NEe zv_=wBSGNjZD6rYy`04vmTXH?tC7!t2H*;wZ-{yx9+*=uN8s2sC1qm1+bX(4TF#%^3 zn7TY&T9B7##a+oFCULpLl8y75B$1y9(6(g0u2)wR6nXZ&;WCYIuWI@%>L?lf#lXJ} zVE43urpS0gpvD$X+q+O4*)1Ve~G5 zBLcOW0=&~ihOwB0OPPc;AP9&9m%t@v8uxa9B{lL4Li0^w&=Rr`iZJL~z4>h8ZhhI# z%kYSxiEA^s|Lhf|99kp(CQbg>*E>jR7`VN2uEnTLU6a0N`W&gJIzN334hCkgzqi)` z_-drihc$W~VNwWBRiiyM*)UJ<#E|+6KWIvYqDv+EWFU!0!&q(kAb-2ZON#`h8);$O zcLLO{3|MvNz=41bM!6L*S>P%}xJQr~gIU@Zq-Fysfs8}+`cjiWmR$J3k~R8Q3*ZT| zEStXM)IW!?4{e0AH}4X2|A1uqrN>hU2aTZucI7f*S2L7r)ykgy854SK6jX;)8Y3$>^!EdriXa7H57DHLfWsnIS zLQt@myIL$xBqTu+o8@bSHN8~=jyN>Xs-?GqG>gBlLMCB*=}gN%-9Iy3@8tL`cCh`U zLZ^Xhk!Jp!>>DVZ-$!DvRbgx;3}W$>5j9X zhF9%LA_U8xPSW<@$;VTqjrLc4UvGyqLO+ z@~yJd{A>xO)NJ#Crd3L&+Aq=% zRF%c@J0E>y`4QI2CofkFMZckG5Sz~7^esAPqQjGy6e!|ce-mGcd;=yA+b`Z%`941A zm7I?!cheOZPk1CN{D5BCycS7TD{f-f(EiBPld3%;8cW!Sn?8O$AR=*Shv8`HCqKuxFCQoUMS$2YIVWcU;KK@T7X9mR z$Zkiw#ik89^V1E#Tb7##l75I~+7~?)HVQ3UCVmsip4lRz&6bqC5!}p6U|ACcwx>isFQ%?R2cBEUAQrNB-QtQ5*XP(t9=Ut{iZ(}Hkk>KE z+OS)i0P?RzethByI#CHtQZNjQasu!?D4UUj2aQlx#>69fV1{|{@Zo35rYQtWVF&>~ z0~b4XZ4rcYz`Nmo5t|5r0Krg}`fjKvwGG|?{mV5iV4mmPL@Dumo<9!0f-leaR3`*X zM`Q-{P2EB~H&7|I?$j#zB7JsoR}XnT4*s!e!-tVjfj4U^RCoElnH|8$QZ*F7M1E5FemE0%lhTa7ynOavHNd8v>Mp* z1%F;aJLda|<$C_~gcA*h*QnKN`F$hEB5e1`uLEc3sHZ z47zcujiffh04|8ZiqMwAKr9s4$8K~r>Mk{2Dy#QRsprz}ml~V^-Ko9=so{~zdhf%Wcrh9*6ExRg_eBXL`N$bF0sKGOy_Oc1X)d;DW$3dmWTRHwk}d2otzqax-^)O$K4>_@Zm<_? zoq7Z&)9`$)>tCVCpx`9YH2mA4g)NkYgJg$6OvAnNE?*)vhybG=rU3^xF|l3s z?uBZMh_bL*btP=*?PCf|{c}bmQ=$%6Hw*{gqO1K!+rBDK@LfWQJ+{Q2&k%+52_JqN z_G(dOGmBIqP>2RgY?Jb${i~w+s&isbeUaJD_%q|Rg0bY?>Ci)gC}du`B9Sfl?~eZU zcfb=Jy$XAPS7ON|5X0>dbXH454>Pk`SjYB@0w9=$D2r=Nn@?5O2#U_P@(;9&Ya8-t zeZ`miYVd}vRFUWBXYBb;XgnFh;@eP+&4RI*D-&dqIPxkk7+r0J`;sxAf*AuG=|NiD zt;-czi{Uu4AkSaOw_d_+Z^gzbeu2vT$ltJfvR&Xfi~rl5S&j!w!|onv->Mn?dN5?i zycMU(*75JNTKQ$$9-~u$U$C6GK9fVA#HVjFNSrBU2>l6)TQBBuLQOqj9dx(3&??D< z!2CFxQM%D#N4fu8t0n2ZtG{lRoCDT5GUtGHM60Ra&WWI{m&TU?W5Bt?EHof!f#bHw z0*-(=rk5j;eLd1GqcIxDxWK;b;^LD)ESTw^^7Zu%x`~h+WXpz}`Fy^M0XE^KJV-cV z#CkHSOPe{z& z)55xYQxwYs-h)Gv$O^T>m#v;T1;};CH2Yihb zJ1^IdUNq7kQ12t%IaoK$FQ!ux#>~&+ z@yn&f}}*yIOzOt8WZwfk<%8gxiI&c$^NW<7YhMQ_vc3Tijsk!-#D zmNn~4@@Ie~+cU}9gd>M#tkCA$UHYZP8_(?s?V`{6>9Yi;j*^gXaf0w!F?y7s?q#6( z`*El2@^F!>1{uxMU`kp96>9SVH-fld>hBo)i)$d~jMF{%UF|H_{5z?BXO(991aWzJjic2B zT~9!Q)}?;AD7P}=ioe8y7io!ia=wsMOimJ^ImD`saoFc(+In2wK_Y!dZoal8P2i0W z)YAv>n%<|bHm`~pB%P^8=jsecyEZACdSv5s8XW05mIqs;vjO1CJVu7n;bm*?607(p zxvCGg);|F!5c`@X9gWz8{T=hbHaw$Gy@dEsHM`_MX3A%l;3Ot*YIjU|a>WyI2|2LU zT(aXkD-s_JIM`@@i?9HJ%@fEmCk*dAqxT&hX>Fzx!7POmqlLJ_K5U%jF?GkWdU~gz zpc6atnpmhsJS%=*)gyMHD47z;g?KAgB0(PwB8ne}){YIRFZ(%jVco3HOs27Q%lq1~ zC5%pU`6rIRLmxt^ESL6Od~;eoxs2Gf4hHxl2JS0c3Joo^fc9J1drW(O@ zwp5S!+HwwW!|dpn$8=3rMSoZld5b<7k^<0Z-46*X9PHt4=x^s;*kOCAnlHN%sI$|j zy^dokgzk1pcRHCv<9VK+BVyuQVK&k0bg}N3-+@B{%NC9}msr*Emo@Ph zhdlcn&gNpu&8of-^yW%@zlkqV$_0@H#7d3j2|P3D317!!uO$iG1aHUqlC0Vjw()z& zeL|0|#=wKcOCYx16|doj4!7UdCq9i)D!@56&D~~uPdSv#z1q*Dpjv!=QFEiISE6VH z`Y9+B5}$JU%!lvW%dhM`)*wBTeoi!SE&!^d;S?hcsDawqC4PDZFhx=O>_Q{)@J>W= z7ZEyVJ{z}_qd!0w`7AUz5>lqqR$40rl^cyuOH8_Oxp6#Y3FCLKFGTkbG?0NssO8|R z;Zi3uK#wRvj={zkK@Ul6`n_n?AW9ID50YmARYU`nQgb4R$SF$u)}*o$AB_29(1{B+Q&-!-mSRfW12Q*(G${La<);a4Sp zr|T8G)ZdkeX>xD=iPnE{J`fFE>SV#6Xr2|6vXfy5$dP=v#V~4lE3jLtP?wJInXS8l zE-miq*Ds4Fmb5%?0$~Jz&RK<@t#uM9`^;3pmP_e8O zjEGbOW+tZ{RZf?-d;)iX(k`s}`t4{?S}^pH#=m{|x43!&^`!!7J|D=8>xiI(zR5{& zPDE5_ZM?2|TsXKnqQTs#P2h235|AI&$P)JixY$*XLmwJEaAlZuAayM!E(uzNiqd+Q zq=>M26<&lB!Nv$V&LSN~D#{IJ{+o1UVIz7!g`wUu@hdnK)-F5NoN*eCEBtQ39>Oac ztTe8J)APdbIH~>$ZzyZd{P%En>$VbNzRg=$!s5u!LiC=d9ivQOu4m}p)k$BwLu{qC*cq1|5di~U zV_^355E@wp<9S~6Yr()q0Ih3NRF4}R$0U4xcknvZ_Z= zPbS#@IRMJAWdp^PgzD^I?dJt$?rz9|qsGmj9zxYAD$r)hU<_>QK1cSil`CzXN^(K& zMe7M`0~b3eg3N?!n5$wg)DK`5(l)TLeRcUHPwULSZXosf<=d1e$YjZ#esUK52Ry$i zRwDcUi|2|=R&h4mWp3yzANNvRvV5-45`Io<{`|@dmt290PgW}#8%@6_i_%ILzNJL+ zg&Dj3MUR-fJrVm#+~LrFPEv)dK4Dpcm5K0V;7!9P$k+*@Ow?BY51CbYv{+}HrP_++ zQguW_+H{m%{`WTwx@;j?+!kf5 zj@`da?n;?3ZhvFv{rOb=<9_R0<+1?X&XSxAbmzlHwn!biu^(&l%^9+8Nv(1rf?8ti zF4bx>PJrvwkIs^U94hdV&~}D~JnwnsN4o@)fH2>MQD!OL^)p5&Hy+8Z+H@_A-hb4N z4lV+0;0c@SJ)xWkeo{|1VE|EJzPB88JeRhH1LL!A0^a|gr{At`ANKLOg-^(FoMAM1jMZ7}B!fP@oP06F-nURZh<5;OMg(x{pKTpP)_9`@MB0 zNfGnM1mqB$tJl|l=N;>Ym_-dU@D}tg=|?)yGkf3icCfJOv;jVDqAR1!pJrv24f$CSCw`m0Z_8h%5jhr1f4y&1jq+bQ?!{y1O7*;PZt&eb^|0`# zN$YDNuaeOBIt`8T0*|6`AKk)rq;~(A#G^|I&wY61mYsx?Ps)4TIBQ{t#U&}Lv`3<-R@dmcw~m{vy!#KBR2=RS~~7VJ?Tg`V}|wDVf(ALz z&uy%b&^O=;lj^04JS!zKrkw#FN;gwq2@eiWTK^OqX5ewj3a7~;QEf5g03L+H2$xzC zGeA8bhM2Qs zBqr1x(B{#7lgCP&Vp*lRrg+Oo7P#8|G`SBJrw?3*{{(v}sbc+#uAC19pM9GrFOoVz z{)E+ub4g$MVLEnDn=uR5B)L}wOqyDhEy!9{zJ|S<6Y1u9U@`0ik)+e_cZR-Ttr3k} zjgPL4&4!iTtGJAe&W6PAEy?}32QSKUCaQUb0{BI#lZ*tcUAfz5>8l^T=Qpo_eEB6U z#f= zW}vMm=O<+{nIoImj{UXghL5DY*r<~Qi~vIiIfVt?NlmFG3jz>juG9(!wrhZKMqu$Q zXNc+1z(3=g8`n^TM5q(~8jw}CJ6yY>2#A}gGT*xVI#C1{)B;^lx~!d~0_iKcaN>T9 zb!(%npwNNbb@Jh@XJI`E^eni4^kLoDwCh5tQxdsyLF}!qaE+#V!ft(SVXrvJGyEz% z!)7XP$!=OLxmSkIKPSn}@eV-WK$~L488b>~L+t48{Zk#Zy0-8ZK z-m0M=fIF*{&k-#emaivY*B$=kq4M}{s}2h|xmDHGD@rRAQ`g<+eV5Ky~lVbAdD==>jK1x1=;KU!a$H z?(tQDVIS)jNbA}=?6L_cZevv>5ZTPS`ffZUk`B@7PH4?H+I7CxIx%jSlgMqYTZW={G^?${eCBNC?ZfsKxeeSI#ShWURz`a?1s_TJF zZU`IEuTgq3y!=xd_MtJhPGT>hO$=T-0C<2G$_$^;mXXg|m+E5?0?Nh6*IlsQutO@L z&#+meu0$vNZ!XjWaw=+f#V;(i;xD#KOE}nL)mh@VfL%p5vw9#u2M~*#wa@xm>4bZ; z?+Zh9YYZnaFW=&pw|CfnUS1vdl|DQ6bhYBC2*R)Z3FL0;<|##DbbOL2HxP0+xkN^( zbw9*C8vkfF(3H2FqcP_Tg~GBYiOw4q2l`mTv=g@TSYx0bxn74U4Bn<4D8 zP0|0w76l*l9cDCP>IX35m+flmA%Pdl5a{haA!+%3Ph zndO)Qjl|C^Me9q6DJB+d5jB@w4EFuAJn=00_K?nFki$HA@+8vFa&MfHqw5tZ=R+aJ zbXDblyr?pM0E1jIO51I-G{a`YJm7P0OEQRkdLRjso4t}EXS}oh$#n^9vMT4(H0U7X zJfWf)>}cKs%D8UKMamNzG69wN8+K5!_K{jr+=y5a0i(Pp6%-Wfq^f)+_t3&c&L5@xE34`6=$8hg zgGc{5v9jH3F-Ve4fGO;HI;kIvrIJ4&zhHK0BnrJq$<%I^FXVZwKY84>>?B}yQ1J7%xGVFbz^O=@_=$KU;j$}9%y5hHwV@B`D z>&NJuQ~m;KQYwUikdF+3!l1YaW`?Sccn;I@e6X~+qAS=}Ddb)+ zpppSqcO)i{Dzsg8w1-pLHQP?5))Gly#(9mr$cinE_R|)4P`SKZ*4wK2r0Kf z{1%-8N(7R&=c&C#i9H9C%5Yw22h$`@E(Xt~{x(vyV&K0aag``Kg*ny@GK3BZeQ#|G zYf=W{3yg)FfK|E~c6fLfkNa!>FpYMIV|E1xNDNU_pzVwxs6q>DcFR3--FDPfo!!!m z%|JNR>{@K=5Q3Ib2Raw}%Li{=)hNl9wLw#vwe9b-Dl`?3M0_fkl1ep|{n&_(aBGw^ zw9#Ki=qvHK$p*iE?wLyjq>n*8m;A0AH!+9~)1LrrG#Bg-!@8Jdh7cfuJ@GbW{Q#Qs z8lRYG9ArVK_tj(6>(5!7+BeQ8($BwCv4z4Re5*&w(0p~;F|1J>*2B^=C~94rOzXnc zy2Xj2@P&?$8?gD*Uf4n0#nfxP^M_gMga#LX2^r?HJVyQ7eOOwG#@K8{=cdFhKQx?w z$AfMRa`>@II6KU$0XB0u43!26vK;;`*%ApY3D!}e14q_rpQ!@)5oV0;#6#?%qbgKw zZ@1j{SAqtt4Q_aAM!WTX7o-9q=2PeG6M>T_WYLqWvCwr)^(JSEp65 zJWk}dULdO1srcgxVRB5&dq}~xNw@eXDpcxm1tsTJS$OPbH4=I+WmO^TPgp**)!+W} z_S&f5B~9P^BX~ii$315az=u(d6zOrawKg21HA{Jxf1h9sQx_?^DenP^LuiK(MkE0y^dc}g!VJpv55F3I|o@AAtNLJ=}Y!u8Na)sGBy}|090;> zz#GskO{x#=p#7geoBV!PqIe2*Vd<{T(~r;M02l9ecKxmpUCHhQof|~2AVcCL14;_` zH=FYhO3M&(b;MVl5V5frv9ZM-ECAbVqr6o4N2@vj^LsS>=VjsF{F_V<6kX<~B>= z=bZ*67qoY8_6bLNbNX5uJ-F3DzA!XqmD_46l`{;}hRj~#);h1i*leS1MO9GP!MH#? zOw@C8pB)u9@Y$S|0*o(>?$-rrt-!`C@*sdtchlsc=6E3Q(rfmgYl+MqGFk+v_QfXW zTvBd#11geP;;Hu407mn;O;Yaq~2k3ufk02x6K zM0bWcdF|sC(nj09g;6DgZc0$ifWQHi7e0W~`=2*MfCDVMoeQW$serbUAB>|9Jz@M$ z7uBROq#K(*>DHgK-WY7!J7@Ap>e<)H7H*bvw98-%u1yMj153C55$R)eSIXO%=`;Q2 zo>;3116+A%zcHO1mGgiX(XQDG_%rvbUR4&TE$i}Oto^f85*sZ*YAU|h)5)i-KVQT} zDkhl(h{c&;hGG?r6oUCRq?4aO2_R<$j=AfUsnDBm0Bd(N($}5b{B5ni#0eVVHD-}TrjaWZbXY{0v1US?w zJtRmGn*-IG`XeQP)n8^w+o(~TY7WQSvi1G`jWmS~e#JL}h3dd-cks5bP;q48?rdk} z&ri21qOlxGLF%BpjBw2U3lU(8VInM4FY~tDy))69nu-%MO%HLgTC(N+u+UZ@pdTK} z91t;&-pVGcnuUh)^?kIeW@-JDdJgoL=Va)R<8cv#zN-;CKkE`McVi7v??*nLz$LqH z_V9xRhVp(yXu%vZ;R7EI=3?<5M43t%Od3>pqGF=`-F4~vw>FJeG=KIBYP|~p z*j}pWgy{=KR>9kD0^8cC&JXO6n`0v!Hw-2~s+OeVbLR7uA3N`qiUpzLnL@1gls}pq z>E`HH`! z1xcL3wc{Z=zCR|f&mxz7!z{6ZR_HZ}L~M$6dTTdqCYI#A;dFiSwDW--gd+ILWx4X& zBR%phJsRE4HfE<^JOF0aIOple{O`NSXP>(9k~xYm= zwOByWw_>RPN-7VGvKfzl&uy0q1YD2T-ynYG5{r85LW!c5PY^l1KkOj`iqeLA9Up-Ib&c4&--C>i@{ez+HxRQRILAeE_7ZGFt`qO$8Cr` zD%|Z`m@5B@)qN>Ks_=1%zBJ$|`Fgqsey#u6XGW*|-Z5wjR|{}?i(ZCV-iZ#h8a+nBT-fNr@k@ExG#HCG3L0Ez7+v4| z?Ap|_>@zTA?j3yR08INlFQ@@INTi{;OC5f`h)+8{LcYES^omMUjZ%pW9{r`Ru}JQQ zVD+NG`xc5eL@qfXR;+h8PC8eRk(#b(z{4WmaXH&a=LtZ_Di9gQli6OLLO~^Ma^Zbe zkI3xYdudNIqY5`vJ`owLXg@$N2GX_u7aAApy;RFtkQq986Q=XmVOvM*fiW)TNlj|x zcr-mI(-uG;s<@HVeO`H#Ge;4wkaczeFA*60^rNN6q;Vp*{z>@JBRPqSvek5RUcL{b3>}l+*>35ku?1PQ3R-C(tctM zkIorGas@*ccvTy}9l!Z{(AIe8O;AB2=Zewq3?fDa=1I~EpZhPk1Jv1PFopxh;*1BF z_y!D1@~n6cs1zE-1~QA*o35$?ccv(&hozrQCcS&yEm;B5$~ny0EWq!m`cUTtP+$pX z@adBY)rn%|>2h#E+J*!6!P66ojaC`e7`k->oEMx=-l!!nuKQvgDXI_0el&!$wn-i8 z$%}jcV(2)auJMmTZieg$3H$OxAvk70mSuegJicGd*0c?Pz0=yFKx9i6=_J|-I^!aO z4Wt3bXv;&A;g+`I3dcB00cZUJpKRX(TQbw>EqU&o+wDUuI8^^TbQ`>ZZXmuLS`Nx5 zD<=Qy(8hUTiTQu7MC3&v^OL8m6vmzyQuKNk9Q~dIAL?(zKw05GuX<6;Vrvs{mNkCe+j+M= z8+5aXq2>vwKGLmwwr4|{7Ovx~<=20WGB>bqPnqzq$q;zG$*{my+bJ@6fv!1P=}xd) zs?;X3J{9;zQn8ugI*gM0v_34CFvYL-PpqSsLH-%hwVcl*THP%20dKQrf=k%Qw|A(a z`+iuu9{PEcp0gC~M`Rl>N_+b*`=UICZ*FnZ6%XLlY;k~gLrEmr02i@Us#ij$NyZ*?wumT=!S7m~kL*ga zUww>bYH&w9Q8&}4IJJ>n*RE2dkT9~CvHkNvULYVGis4);#W^1ViqXY zdATZ+7iiB#1LU6_cN_xubSTYtLODL1-PLuzr$O4#KYbx48lK4p{0h7b#tL}slIeQN z&z03a<(eeSLKMI0OZNOSk1kK3^oxUQa4r>SKg+5izJKGvb8X}LXwf;T&FkB6N?Ds7 zhUi;t=Y^Eff<)?Y-caqG;#20deBusE%iCA~DKJzeV|uYSewGlZe?;2sU5Q#ms3K3K z*9xZEDFc=a9cu-vrc;4dOR)M8nkAV9Uyy(*SXo&W4rSHSZIFbY6Z^04dtICg5lF)5 z8KKEOO$MdK4b#>{-7`2)9h<#Jn+Z(iah4^C%{fMYyK3!xt$m56p={j zG%Ve{ajvum!|o+$5+EY#pt%FcgUhn@E{GhhVpt5Z-(Xy2CI8CaZfX!0d{J|OAc>~b zr3p4U@VP9SC5F2pW@VJfgHnERMjlT{>5;I?w$8TCB7d}?hV&o`f~QPeKIS)CK3=~g+idJ{|5P;nB+0m%buuvx1Kq~uJc;A z-q-WCmG3l}a7Tt8u;ui>Qr4Gp0j+r016C0e#z2oADWczjBlov_UvIhqq@=Va7~g{i z%vLJJOzzD9c5G`#y<-7V;DfXEe9oFxs|tYI6#z39CjkT^HwL_a_teKh)#mD`I*sCT zku!TzOD)`-La6wI(P)VN0tJOl?T|7CA@33<3`VVqJDo7?u%0D3z#=0Sc8<`_DDs|0S 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

Q!F@ue zv){k(#tzAu{`VWFu{VdETA-(<>X~UVn7TZ1>y^IYRWla!otwfT|fdz=EOQ!W9 zr;q5TFx2*xbP3u#UAj{EoFU^#!FQp^bh5}6Db`{>;&IVghn5c@q4Zm*{VFHiF!g{?8oW0E+S!ij zGX;IIe*(x1G)U`)NM)+bW6pAH^vB;NoGZbNr*19UO>J$wZ!RF87QMVLS_#JzRg_!o zDw`WR$aA9FVyh#Wb8e85D2YNzqwKy*hKQT=I0M}ps$JT^ewnGFU5&T3v)YMS2g#P^ z#-I!Xq<=H)`6uOb&2H0;`r+ar^m@E^BNdXjcIYQe$?*i$qo0&G1eA1Q1? z#v(w|SuFPZPFjuV`GXNWho3DuwS90CVtS%B0~Gj%w;qA^aiooT7>y55;RgpQ8v9j6rTcl5v2OdE5HbMZc=o0%yzsIL*9(fW5*vygl#xC6^N?2Mk~;b)q>obp!SOvrXac_H z)QMI_XIWzDAnVl7y_RiFXjcdRfOwB4R%8n|?E(}Ap-ZtW=pDw_N2!#DH2#2+{-jxu zfzOdkM`E{bj#%v}VxC5^S3;4~GZGM4nc$Y*FtqBDtaVMSujEV3Tzg@Uz9M)-l0?B9 z#AFZEKav>Npe#OJgSgj^|4CCpvl(}b2X{OlFM9FjtfgV7;E(QYUmpjCjLur@H@9$mxd%ve_Q8 zz;t|J8tGw#=fKix1uy5+`ZEOu+$6PCTWWBRMC~rTn;NS!CLcc+3i>MBt)iFbOqyNC zu8QTM5|r@-7NXRjg;<#k|7DbJCc&Ec_*?8b-|XHubQiatM(3kto#>Wiv=WM*Xpg%k zTR$ONzdv}2=*h#koo^fMTRO(l5}XPTH66|BgE5KBoec_MSMdpF^ zN`kC_Roi8;<$*Gg<<+X__P={P700ZiuoW*2s{eUc@RD>>=LHUD%L67pbj?&n`2mGe z-**R7x9*fG<$rl=>eS)8`myAM8@GuaWGWT1;ZN()z1~{BmyB2+4Ymi4&+~*~DJ9yP z-|Xjdq%JX$G3A$_G~N3;y1JFme{!ATmNnUnlF8WX_{-YHEtDKBqh+C8O>9@cHb6X> zvrH0sFwZIJrPkX>cAeSTv|R^74)A8Q)AtFuQ|mP~1O-1UF$z_VQ3d)@WLK30`;~m(nmum`Ubm%Be|f;ovlS?R zl$Q5=d(r9425mB@0}@DL+M2j%^cn=MyxF*!gq}bP#PjA4(fSFeQKAf5H`?L9{7&lm zld9S%u$pH>7Jy4_lY@ps;?%QC9WVHnPdceFmMP)AMXAH1vf=c?eahpZ)*+nN#92mU zbnUteob*|LiWZbRLR<=qyy6WoZs~2~&~c*o3inIwOOpu8h?PXy_5(Gv@kctTOc(gF z0D>|#Lntc92!S#ofO9VfEq9!ai0lspLUhAQrxo(ZeHhP!QuZ7^bdMNi_ns+##WI8z zg@q5R1?mHwIVkuESNrVL>+d5?Ex&N%^zs&*CksBIsa5V~4)diN2~W)PE!*rjo=x;1 zV#VXHgJRY8MJs(p$HQzi@++DyWEIquR3IJIO;WY(Ba1{@mE+&yaV#v>XLBE#*~qTL ze-J|Mcer5BX;Sev-aw>=P=@FNWr!A{Ct0WKe>2^CBE;&jSKrPVCS679D?Ub6oM>&) z_o9*?UIhrd_cxy!UA@h2hs24gLFibr@--rFO!Q9U0njyOe zCfz~1FVvG9E5{*i@yWca*O_V^VrD44KC4lLX0+9c0D`PR6C==zQNUmj0S!w63xYgQ zWDHqpiC>IHoM-4%6v`vFwDrfJ#4H?Q*hgp_+o#%8rBLWUV8%W7Xlg^*p4JEb9-CLZ zDZ2I{IeyoB)oC{4*{jIb^2B)NrgRS*KS9(IpcmPX$U!YlnW;*au7=z-!eW|C>=L5R z5czvIPK`oYmtpE#_kfX+1D?N6iNyM3bjzam;3BBH5jd-IxSU-wu4PEu?hd*i?WN7~ zYDti_0k63T!?3=etJiY?m&k9SETfGOGy|MV^gGFdqOmc6#p+b^x+&FM z8|`6kRrU0>M~h$)m?8&#pO2@eyg1jg`eDnn;KnP7TCgH+`(g5m-{2`K-F^L?-MGpRhqa!BenO+ zhu})jLOL@zfp@RkIa6~?3X=1uFyK0!>+(cCQ1onP zO(*X!JK=>U?8)7b$B@ynaiId_cWE85zFg(C!1E~?;hZ)A0TxgVR&9*Bt80htQdUAy zX{i`L-st>rgJ0OYpS5)xmqRP4DqWRA^``_aP%%K|26@Fp->ZIS@Zws`)R}l*D`H=} zbnPI z2vL%V#%+yDxNy| zat66JHCvfJ!^fk2g`JLcl<5ojD#Yeh+;G?scFQ)nb0MgbHh``?K-o=gB>z7n+|=U_I}Z z9<^44^{ZFQ>qIPUSf`+OBY2{AZwfcK{GaM3I;6mkWsX0b+Stk(XspWrF-xqQMP!(5 zv&avUz#oA6iry8P&OUWf+Y6Wb#(PBZrYT5dQ1zq0XFs8|K&W5~lcjy#AMz9o1_<9BWZ75?iZ|-nf{=1jw`@kwjDmA$9`FXCw3K}jFrWf%c zTu3|NH0eJgu?7v$y5k(j!IzuH3az2sLZP6g9;G*V>^1%wzuy{pC%gFhy+g1#6ffDb zfW>qvItrfPh1@%Q6qT`PxydzXo&St~{NBfWG<4Y&WXyYGomY?UYa9-%^0O!pv%tSg0VW{;wlklh-KE_7 zC5D@92kAOvLWJlU{adAW_H;~(vM{f#rnXk(n;v)4=-Idr530gJ69g`gY5eAK%%+}v zx6J+Fm2SbX{}Vfov2S7jCn-MM6>iz$Ei{delU5`46|mcrCpY5ozp+=3)+tiraCK9u zgUSlHzsxYqA<=DKs+^MLlYXl{a!+q>v-D1Kwc~=?kXvwNK6?w>l4XHCgS9ai5EXTB zGk3`xpX(+g`~6AV`02_0bNr(VeTU7M*Mjk^8g_sWOTTsXI^N=nRj4_l-Ja3it2}bS z9~>9-c636RJ2?5juX%35X68ii(Zpu{!5O{1w5@W~wA3|Jdkm^CG2FcDLt?I5Y=*e? z?ba1z#dRUVe--H(2k?7_3XdB8eWz6Hs$F%%ohw@i&FA}Mry-u^``_pF zS0}te9EZn)sq_D+0a(o3ByIa4|3hUw{SXYxn(Z~eAY{yO2zdY4e8tJLrdJmoI=5lj zTxIkYL*F&e3oH1AOpl#}fYzgR`{`qyvSq@dH~(rE_Ul|SZ_PdK{&tu9#$x~>Ts$pr zJYIYw4ne++zA5-+)bY!8tbJ%q&FYQY*l1dB1LuuF{{?v?%inByEw=NpaugE9o*OSC zcBPAun{$#sW-61yL*B6uR%@rSqlCC|Z4{;;xr89gEtrm|p`PJ#UAq^4(PvM0g^oU6 zR@@=>eqZuthe%e0J!Z;iN~PaLoxA&~g4nvpq+V1+@n=JeLgMH4lPeJ4k@4oLIX_F| zc`M@#tI@AxOE$RvbAx*3aHE47rpB5C|0+p`uU?xITskkSyG*#DYijzty-7Eb<=he$ za-J#LgLx3u*+DH{TBlj=_XWN-7eDZ{1W)rAQzsV zGMa6>vP+8F@>Nj6gHnO)Qh17l|6tdyMa6w6k9M9}QlI7Rxc7~qaE{7g zsFw`4+M@!w!PIB3LUQZjE<_EsW%a5EclupUJzHNojwvs=6)S&?6ktXUNAPD*-z$0? z4py32=4B6qR$V59S{`Q*71;q2WF6LA`XJkyOM*j*TiBCPf=Y@$UKH~X>#duMqr)$` z+=__buNc>SaAUabR?;i|>J_I;^x07z{N2w;gwehX!Vhl$-nvU;Bz7Pj2JSKwxcSA`*OZJt}T&ReP#oBw;%0`_O(%X zDPmW^I&#On(LLP*SOII2{KAG8H@Wb;6xaG<*cIW(VToBw;fPCa&DyCkHearsQ{Kqd z%Om<>nL!ndtCD-T!xgohV`{V3V zmB?LYJzM_4Xw8Kq2T{dmm~F1Q$#jD#GNk{pK#+R;W&I|JmDIr*DK0#dPTOWl?m@KL ztT4-n-w*rNMT~&+9JWy9{_O?8XZ8tmxSaC(YT22S+UmLIT>a;C*OKc;^%+EQ_N)!T z4|A{I8vSNP`M4`qeY&+rJS1!^QEG_IxQe}e)XoWeJWJj^nVHH7|Kn4I6c1txSVHJ0 z7pvs$Te0v`M5!$*_5MrNB!fV1mxwOb-aroLDY~Ii65Kd8u`879`Gq2{!<7BnpIXcR zMqEkRqIxbn?9zo@b=;~9H+K(k(_d5Vo#|R3m214HY1<;CH1Fc>-SNlEVYpUNTiB;4 zeg4Qw;vL+c>gSsL7XG6zM|LSc`}4{r_01Y7;K$&BF9YCuTd~Agslflf0MtwUd^2v}h+R8|tZYGby^7O)oF|DXS4RMd`+iR(;?N|kS=8u4>$*u+)r z6R#|uG9$c*c6<_4&rEA2#RmmPd#|r^_BVR0*56#azxTS`x+hPVf~aoQTn;UBqRuRO zeaX4mM6()V!oec4nJ$B#o@##k`ckU>9}7q36}pr~se=qc3H=BA$-X^ah|`}a)BRAbQi2tS(@qm=H9TweXQbuJkFgnE5R@in!aNsd zBS4J&ldW;KUC~~9H93%H#MG(q_9`Z1Mv@+^q(ab`^Ub}QD@@sazS#I%XlTe%4bRCA zEs?ae9q-f{CdWNGMWXok(DI%!Bc2ioOEwB8q#ryPwX3VrVB5gjZ9vw#j8$ab~S*6HHDU%;omv(tU3eea_?7(zH>PKpQ2HD3LR9{JZRD(fG z5BrTlXjNW?NYIdW|IKv=%jezeE-HLSi^BW~5NR%U_aR^<-i;j6CJ))fWbJmYd|Qw( zx5gvGw&1Twrsxe!(;o{G!gkpsX1X-~t(c`8JjGVbt$YgAuSHf-wNQNq^=@S>Z}Oxc zLs5+uz505u+|#|=TPj$7mefgF=ADuJw`#nh4TIke?`>yiCp=G_;V)Tyf;lV@#nW$G zQP0(v5W@b6MdRdQ9c&O7fNC3~GUk_h)fFR7$`b z`JF8>i@-=fX?=Z?8z_b;G->Cob1%GR-%98U+a-!^-M=@bX9N|Q&Ag!`F@(~zW9BK}$-)?V!(`V}N}xm= z1%JN(<2-3}xlSDidGTYCR6&gq3G`ARP!0Q zAS8IjZ5~8bw%!=_FhZ|Xp9O#CkjgA#i~FfsU*xNj-AM;g{nhB^d1@t#xSA!eZx5U`fxRNaJheHI*#7fG*~%X3irg!L3F${wqWy^TGYfcD2L0vj z#htVh=Xwz3)_Y^OdQZAZL+5&g|3biyXB*3UbrK&{p6#mY$P76t_%}ob+6G88LfEbH zljvOTM)D9A?WENQ!$902*3KCw;aHEOrRvIS=bUlybn*AWFBKXrnnMB40v{p`X*9f&*cFfRKbh-y`~VFU zMRNyaL@ZH=k;dh4*RM3>OWKFJVd>A(3j;B3vTuS%zlyqT8*#LyA?9O1_SRm6ZNN8;H1-$S+XQ&_bD$TADlu8%S@Y`1Mm z?7=zL9s9ho8)ekP;RmRm9@clm?i;R?;t2hc+#^+=c!GFvvR3W+dR|J{S8BrdT|2oA z*eO~|3hg9U2tKM_NzG^L1z;UN+3iwM@bAK-(`UKW2e3`;qRAtE7m~+f zn2V_-&UKYtUexW=8_3=m^zc#(vLz{w!cpB=no?AqVVteh7&CLQWt=d_U(obw3%FGhqL3n}w;Z~r=R5sMb+s_hN@{&0HO2i_*5v5T}N&QC>7LWicO|4f4 zWv~qvuDkyr+N(~wcxP|*#Ea2wlh)y{1Vb!|me#h9GVgFzb5nE!_VK2BGhqF}M#6HA zm3OIXO}1$}tW9NV$b>Ndz8F~ipVyb-7O<3cxwVrpn@&}Uw@2GO=S z*LGH&JuL0hMYwau?IG?#tB@%URSOQK$num%Iyt18^)59@0~aRd0-|9p*VS{J;RZ2R z?lC*P*E~Icm?4cXs0ZDayL%RsW~K|m9Uc4VVzc{a2}@{tnlqf*zh~_R=JL|dh_M$A zZ_ADPyfi4`{LhTlD^ZntHMbKi+Ob}_%2x(S(I=2JcIYpgg8vSj&Oz5vBb+u-8E@|h zVZGKuSlMy*cU(Uh!Pn!Lv{S$xs!CgEaHJ43bv0%3a*Rj?~*KNdjts4%ZGHCcH7RPXSjuK82*Y<;w0N&6?P?Ebi_T8A=dsZn` z>7C23rZSx9D3m(f=f<Gcr%?V*o?7cg{6ZWKql9{T*ma>3GNWZ*p8#Hdqrl8Ve*K9&Q5O7z!D^JOUx&VgJd5 zLw*p56o=puZ9%6Bws2REmmSRM9nGQR5aqlMAD5 zHm2_ivfIe4x7lZeZTGkZ-9kF%_4+B@lr3Biju=l@Ak`1VBnvJGT+ukk6$f=gVH_f7 zbOpk7-r9kAf5dv3vrYPVczZHYwi8W!Dd@EdKQ$gDyp&1=tMplnaoHOC?FEivdaKFX zpX~vXuJIcMe-;2c5Il1ucY}VW=HJqLbyYVmw%yAAQa@Q=^^(Td5c16)QXVSZOkqa& z(R)zBa!~0OzzyW!CisO7{w}m&dk%N7fF&TsK{VGy4JvE=j9toqG>9m7)w*0@JieQ7DVh}*kq$fp9y1Z43N0&e76Mh_V@-6jAJ6 z-E~G>OlNK15_qZ?gjc|?AdNl^ zR$-=l5Zs?#ULCX_{Ac{^t^Zk|A=I)4dIg4Egy8Y$ff1szOe6s)eAkzWZFjOKjEa#QOw;%T|$0z8J}$ z;0yTK-J3AOs_=hv{IOA>TL!2eg4(E|VQldJqJ7kCiE?W8DoyV4bU8n%m&%(WYU1X$ zl*kPC2t zrl-)3G-&Hsc}uMTugO-*vR=f5#gokIVzf#o7VW=UyeQkY<$TzyWq_i(t8onW<1tYS z2jUL_Mm1o1JtWVc@_X%BwJl#7XHk)?Nq>l`{cVum-ghH8q|R`U9^DO2pC_#kkh?wU z2RZ-T`akFTbyM;pDgK_F6tSf&^__D^u#knfyxi*8+)rQig`j~0DP!a)s`_)BH!?W7lY65po<(UvHCXbWj!c)=((gGF&&wNqbUQa2eVBT{aG|X5 zu}k>~utyySeIb^*?9HWv{F%*@_AQ15Pg_NrgC3I(t!u!JOjk+lfx^%`w$-M8O_k=Y z1@iw8wm%FsOeX=%_9=&?n`7N{Z&g20t|GECZ%0u;W!r{MGbMb1*wV~7hjx}v-Nq$E^?#`4AdBS6troO=6(uOM zc8`@};peY^sa;dx*WEkTC4(IqxVZb6wc6Bh5B=3hl|>LwbQ7}9ws7~}?{Zw&M(s}? zO244nLvav=xjhypjV6b_XZQcw*l>fYB!KpG{mVhMcd@OE`Em@BpTybcs#%Zd*?hLk zSRh%rnhQ*DAqaV}m#d2{7psYKr!5U`aMdL=mLPTy}I(@+07i^mUtWbVatf)}|YRB%hhwHtwzi&Q8{qi6S8>D+jG z>J(MHfZdczbmR8B)qN`=$aDTM%Iez*tIMhP7HSaJwqv}zCqcrVcWxtjo-kU86#c_H z7mgwVvMJn>Z{phUDDP@4J)yVtnF_AgDnRg~iUU*YAzEA<=@BFdZl0+Y6X>E zZXKAa>GL-Ttpn1gYuQV7X#8dA20J zp(mcL&(hB^eF@nyDd;p#)t5hOEvLM zHLt$4uQu?PuifggSE@=}8%hN9ebjlUcO)q+yfJt$P!A-HmE|1voYZi727jCebUF=Z@B;p=-k4olKVkI7~v%%EnaV2emf`vB< z7DSftG+>CLj-T;UVS*6HJ25G3hJ>N;es%D#VRPVP; zIp3{^R>R&e2R*Tq(^yzHsBap7Llsvs^%+}=TXHAd7a3XB74QxxQ424VYuBXr*Lmw5 zSd^41sC&#sr<^BGZwd+iC3e^B8QJXa1VF!bw#f4I56%;IzJlaSqNNR$d4coPOWbGH zvgOq43(kmB-Vp`T(aMF83ZN)1RS3IQMZK9QrN30r7bh^AiRIY90Mwi$x!lz)HPtrV zz1c^cmuvL^@7L#~l~9u;gkkpYK{a*www&q54LYynST9M1E~yTx)B+=kJ#0&71Fk-H zh9$51pSyVZ13EUnMKcN4tMlINfqmr=sFNFqcKghAFm%_Vx})iLu+VO*MkwjBDT59h zzCP0m-W?laX<7Vu@z^qndbV;0mViajkg(j{JJC6>L9Wy$#DhkBle_f>;*HHu7Ye>` z-(yklR+>?DFVm`aF4P*3e}L#@wxbU~sl(dW@O*0cLTDR;xG@$%|%5L9aA9d1A^EDv14Aa zocg`vp`}l&rjBcy=d!L@)tZ=84+!CvHlke#i zu&#@E9_`na2C23GbuioEf#b1&-!AEX*30vL%0hr1b>^aWk$U zdY22^MU|C2UGsGFNmI#n)CBNc8B{U^>b$sa8aGK{v*Yhz$@VjWg%P@s>;(DH_kD^O%aK#n62_oTLBj`b*P3{<24w3_=qo{O zsEFw{7RC$U_(c>UI)bEoZ8dhl>lF7rhcw-If-U}>LU&XB zGK;`5THCrwN@aIJm7Ycd!%C>S-SA->=FzQulY8~vuJ`};0*DJ5;1j0{3}fP-297Sg zfurPG_ z;tN6}>8XY{QrQbE3rH6LRvFYX95c);beGPWFc|WQu#ZRO)Q_>l4{qm^^~wSIJ=~aH zB3@1fp6yGQu~$q!V3HUzCHGNwC^pt{8_{~!f>q$gsYL$Z_YzIS_a``;_`@!e1 zAb*O3EFRFIB=PU<03XW%K7RFJap?TYTs>f|k=UhgYoh(5BE*X> z%cgMIp=y0?#gjJ_3nju!sDo%cu6gb`d^!+m%l-N3f$K?D$_3C#q(5?RD-_g;y85AxAk68+R#Gvg9dJFVb~y?6{DhuyGfonD*9osoVR?x_hi- z0@DD9nDwcX@5a~w1;>Ty6^)@e!+V{yXu&?G%b6L zHHcl9?PX^l|F&t$)`ZRY0~7K7p#ObN65EEVLeMqM*%|q;2hYJ5IS%a~H$sN`0y`OJ z-1@aA<#NvI;l|VxWb)DVN7+|}goWSfgzg)ti(OOTI_?ik-ddf)`o2ftd0OsDfl!39 zL&dATCLdhK&9dz~w%WDjo@&drbF5MAe|x3S<<0%%q$Fm&J~5V6He}P5yLVz@;_%@< zcZ|oGWxyKkB>_bAIV{wDtv*h#8TJ>+wQKV%DmpB*X;ZXQf6YK^j%=zXnZ=Y1jdvKw=}Esq~|v)>0#;29Jo@bcx$w<#%WN89o=X#Qe9Gb}Xj z4mGTTKWU5kw!Qep&T}5VU>PyVomA?dli9Q9xS5&RlL~5G-T9XxA*H@N>!spq;db=Q5cU$J|t zN!~ShI_bT8PZ=2r!_IAnIS0{~b3uWL>umj+z;0D{@nG8UH=nm!6hZp+R^gQP$T(%DH89+2rD*Q>RXC z=k4J+bQCzV*$mjxfOX9lE)W|V+nnzdZ-bStS6?d?d3(wH?0CR?e>LsrAg{lC^(wlk zsJ(RENAhS)NN6a-Px*K8L~nJ*onCF**6daAl*N@&6yKlkHQs;t@S_x3gP?&TS=sx) zZO|!=-j9Y(mP9*^nAJ;$A(u?D=Sf3o>;r??YD|XG7cpBQeM*lI>XIV>wQWT;+ zy(Z>Ere$fX`Cm$Eoj!h6RSBBj8q*_i#?_B|v$3B3F6ia@C%!VJB+)h(ze3sQB(m() zr_vzzLjT-$9#IhDemd^6ULbQS7-shuiTR2*;^KrZ9$Efek1j%;6c8%n&tV_z@7g44 zV-Z05iNc_U?KfZY=Khe(NLya5NPze=0$Js>|2D4(htFHSzdls0iGj?+j3@F|t=S~E zVV)q*o1ZRyzES)~I*B;j&QIh%7Suodvoyqj{w-Y55uNK_GrT@CO8e+WjDn!5W)E4X zidYq*U^LUI9M}^3cJ(2>@RJ)QTt{zLp7ap z1eP8|d^amB>5p=K^WaUMs%)+uV>FLm@p$pltp`!nhdxZRN7KK;)SQzZ*tcd|e}o;k zKbV)U(EsGr_wCDzohP7-e&F|u%r-^<(La<#-XeP;UTUCliMjKc{K)O4F>w<;3qFx zwcu!qH@$IoE9JX6?O<5r)68$Gs^_^uMXD5o-caXV&73<-jHx^v&!wa zQt6t_Ujp~d+j_HQPb*U7QsQ+LDYc40}(AxFh2n$SHkc_H) zW)b!Cx5)}&bpe&wD(W8po6|@)DJL=odc1(&@5jE0PL8~q9Q4!LkArJ-(9Yh!hjz#i zX1v*Ti!(9lha=VcCM8!;`Tc<{KuQjv^;8CjND&qn$LU4vcNw{Ocd%}G@`cpZvDBED zWlLAAEnY5S`gr-8O`6rL0}p0wO>ci$zFF;VLR%w5_PJMyiHVNXXI&IwBh=>Bt^Kym z`?(XL)G`D8Bf=_k&(p1%(yrW_AB_K*?_^ap*B9}Q>wuxWx&qgc=B_?j8JS~_j<6a& z$KG|~+zUK;e0nfj5u+9CaX5kPsHL?Ek6MeDuDA-;tlbVo6OuT8KLsJb{?5B+)SL2| zrLVM+Z_%DTd)mimJ6s8#>&3jMhnsYG(gW>d9fb<;HrpPIWPF6vVuJ&&t3)b+ldgHh znK?x{`lwxNuQ`*`;yY@Uc_12%g=Nuj*W(Z7D-~c(wgU<9@`st6BJw%2D@jZTLa}UAnuBx(I6V zxLIlNh-O@l-e2D0kk2bIfycxf41&JNx-6)}^5!Smz9aDik-C2eQ!xHLd^MYQ(O#%} zQ{EX>Cl1(X^85!nNj)dyTK*|~P-F-=F4p&jUO}<}Ucvy@=D30Egx5wDd&L)6oa6O% z#6sC;e%Z+Ew%LhO(M;%V-rTv+!Xn6czKv{kJaGA->$%IAw%OHPdv~UN z2MB#l{Gv*>XX~(1eq!f0#oD{BXywVcGg01IwMRuw^6bkSQ%&mY*r-gK7F7OUd}XJn zq?E;mnt5B-$65MT2g1xTs$|p4?D9I|Mi9TPhqOyey%n`=%Dsj05znw~IbeQ-%$^-> zdq(GtxqjqMRG*+xLu8G+eHCk%Ic_gdD#jaE;f!QuSXRF(_PPR-ZNp^uk4T7@WY{$A z+mSQ;jm=^_YO8uBIF04lG(~^>xLHu@Oo}nl(h@98WjG~^*=!N87`B!3x|#Vxdt0#H zfgrD2pZ7<*Bkdm@KX!Y|G9lhICO?|&`(C=mDzaAOd`hRoB>ObZw($< zXxi<7xfdjlg^_gvO@0i?XtMjZL;!k}b2^}*XY8-?4(e2v#WiLV4gK1Q%9kUdL{w3M zC12+3ufvIbRaRff7cM(xq_MiO|iARP~8gR1$QRx2fCYvNkePL zxfSP1*`AY&t{1ykdHF8>d$FjRUOW&mp9#FG$nt4@ZD;*l?NoFt^?eF46z46{sN2(d z;JtZ$XPaDAeb8^!%>ZOTA36>f9gffC>Zz z`BLh6lYF@`om+2?cZg>NiHIUMf15m=0JlFg8oVK?1?TRf{S79=y z8&w^CA6_e}BzK!H1~AhvlTgij$Yy2xZ6N!9N*M|}V7c1t{-9(m>dO4Wr!(C0`H}h_ zSy@L`xkyt4CtT60yTyuP6Ai_=tDA= zIcjwfea|B0*6Gp~#sJjKee+J0h!D5-Ih)4w+C*PGls0`*eMkPK1WZR#mKPAdEqJfj z0TlLdRCn}g+Bu1>EF*Nx`#nd3CJ!h)#iZw{Ad}~z2?1E&w{Y=af_bP$6V*)N6K3@( zbt8i6q3OoZqb0B3*iy27v!%fG4fRlUIW~IW3)+L_l;l2j2z8RXm7cOKz~q9I(2@^w zJF1pMX-8$wJEhV$iv5|!Qzvvsv12MPZgZzN@y62Vpzs8CSwR&IpXUfJ$NTNpRlde9 zF+Z;y&og<}*_R>%eURIs^%|t&DQ#OW-IG&y23it%>ivp0<5RAj^GEW2-eCx|3LrvXXMq9NemlQ(`_LtOo#U3IYeW(K4j1QRTZw^0XvuQiRb)+BW z6T5p>8hvuIC)6a@_RC8dgC*6QgoNJ0zT^XKdGh}1V=9uLAhS!&jCBmF*0%k2h%R|^ z1yj9q6b-tCWOJDT$xDEs~LILxln3bgAhB@6E z%kO_V^tHCuxY79BxxaUw@Vr|4=19q1zIckfv7zDB`KiI?BDbud8fjnAOv!_2y==x7 z?9hiYXD)3`2bRn^GmGsKz?#<_=u_J}`eyTkb! zmwj>UtVZk}(d7)^9JTA(Nv==vxUVjBn99agAX~Agp)FZfR)%LJcGHMMSWZwFD%Dnb zaA3|=paK!_^1+4$>KUY?4~mr^*N(WF8TyYmWFGu%n^t#sc$Oh<%&l&zjX}P{%meNlHxpCZSh7GiKidy4d{5y{N4BEv~Gr zY$@2lK0V@ScKv?mA;Y@>^E7klxpqaB0riHV3L0T+%&z1b8P4az&EvVu=_MllU`YNy?wG?TZc|Xh%44_ zOStX>3623U_7uGHZNLrDZj*iNvBGiYbQ8(qXY{GAdyvk#|<#pC0Pf^66%e zcl*d!wC31!s43gEzRZo-ApcCvW%K>nvAsEog8la{<=Sqsr}AcsXG{^^^hY2EKVx-7 z4&G{52^5hHF%2ghm9D=SM#&etAc~d)%aq{xt(nM@dUNmiYqPUw9|MnQp3Yjze|Z1i zs0!qZa~)g$HMf7Yg#Zm%XA}>N>m3JC@Ix+)I!6@#@V`Fsl&R*Q96FEq4`;We=Q8Kj z+XQGF#J{%nLdV!S>)a}<$;Rmw^V7qD6iNWxZ!@q`6;_#`W1W`N zy9cvlH=(3^`H{beAA$!2KElJtu{xpGAc=yTDdG{nY@^28goKrVD9cs*BcDV^?+SR6 zl(YxfyQTuXsN3DDRvCeQRCo6_oZk}=t^$z#r~f4rXzS>hU)qGz?3yU`_W(8q8dF96 zkIYA)y>y-lkl6DX@AY=U~a&yYQ`E$wt&46I%G8e&A;WjB!y`85 z*of?4hVRyU-T9$(y^i{`hDYl0YZn2IWdLNE`IT{h`j$*1yh3Qieg+kXTJUoPK7*Fk zn?Mk_26<3gPVOXJ%CXt}S(k_4nZE$3JN5)>+#fRBf~oRe+dT=cWhv&aZ>;@{p%1_V zWWLuni+zLDk*@55CD~$rv+YjK%t6uN?J!Afe$vv@arH-$%}Y*2XJ+21$$z_eH%Xa4 zOr8+8jlTV-W7_nI?#TRZkTk1RR+bQQP0wEG!3K|``ZH3TU|w(yG|u#3H#pFA6zX_& zHF*Nb;!#HQXKLffv*oh|@;QVH+7!EAv28Do`YJs|Hs+dkOF^w(O2A-5p0Pul-ElG8 z`~8`<%SAQv4~lk&Oa}E}6!N@GQgZSU%fR~^djNJGk5IBZZ0F>1eT(Xym=7aB;l02z z&n6(4*3a|X=26_yh$JR`%n(9ZYoEvKLKWN{+8GjfEB$ONPe}8&l z0W{=;ohbiN_70RyBWlle^*&y@{w5RcS61lZj8kVLW%uo?`0?(ok^((~d(-4qXMbfraZlS>@U9Lt4qD1StLMHG2{(EfqggDRKSV^zxJ*+RPcSbP3w zma^snKjZ)~y^Ryt!25u>D3gM_GH28VCCtSj271e;6_c=eV{`TEcG+@k7_@-d4#_mw z8228;c!hh+&g@AD^rt}MQm|>1(~VTw2y`r6XdGy#W1C%G7hG{ug&w(XgX}KiaD6<# zeG%)lkcbEaeqV83uocMN5762UrtE6Rp&2CsO<+Mw+#Iz9Y{lUo$K*r1jbdA7y=$}i zc&Jwz<11QncwHlAJMNtAw0-4A)PE;nGh|41oH0@+@eXt1GM%NqWAHVXroM? zxKSO158WuWUoaPcBoWu2f*0txB69ufhT5_XfuLIp1{|5$Z1!OE5Ckn#Zykx{%a`Mb z4PVjytv=&`5f26+2fpkq=f@nycfdD-9xRgQe9Qbv=U_~# z4Rw2H9#X-A#$byt%c8Qv_r7E6|AHNBqo+)VtWJqQFB9}W&mpNVuii8-C(726i30*g|nIkzhGFHh5*cQMu*BQtm>>56ksc@0{My>gE_F&$kF*^hwZv z3+@iOJJlW$QEtDz6j!GX&-Db4rO7{x0*PDrXtC9F9th`@hZC#pKX$FKE?j&SwC8)n zsd;D5p50OY)jMmcz!G-9q%RM*o~dy_Z~r&0_E6ioK_LrtbnKx^L&JbNOwzgnKED@$t<&r+4u*zP8AbgoAb z2ORdQfxcT5S6~ogj<>W2dJZAczh0fX)~2+tU|<(Wm^d%ED@E9OD8DTHVNWDT`z7K5 zhj;nOFS`BX7+)8QMxe>27rB>|9H*lQ+_IC1&GF-DS^tP_J{WkReE;(@`8ejiIR-2X zQI-E;)PTpkROqtz_rpm&dI37$M7;))uI@f$R$QAhz5DZ2T`nZGLivH``xEB3EW&>Y zJMutj#k#FM6}Q`RaRhQ=y(++1_}UDL{-5VNpDRN8;4MtF2hUQS@bsg%DFasA%RLOTbzB)0UVa&sT`tcIrE*WH%xT^wEKTen;vqH~Y91Fq-Oq_IzTi*5 z<=VNAo$hP)BPh4nhQB)VtbxH3s0gs35DEv@%0sBP&xcGv z090et>Ub#*0oeU?QRElTzr1NKbpZPjSuYr~4LM(_zRnRkqm#bXM4Dke)ihQ&V>w{1?} z6s$4+BU3M+odV{Wm4Tf7tXp*oFDAli5~?VLue!?MkG3zSkb|*Qni==zks|2BqHoM3 zwor)vPk9FXVJ*V@=YH+)5Z=H1`~E*45W7m`LYfK4;fec@Hfhu=y43}ZU;qZEUpid} z#!z=B*X})z@*y33xcPHe5u`RenL3Vtn!Psg@Xm_v30Q*te@d+90c6Eq;7f$%?9c5;KU}d;p~KB6NOOW#H|Tms3>0Hy5*R=)ESJ;We!Y z`vRHKND>CTC%Iv}?QfuCT8;^2W)0%#+%Li1=yI>2@mj^&!wgRMIlzvN9nMY58<#FZ z*rkMrZHjiS2M3p(5KepXdh4Fw5g_PhAVB;5$5b^Vb}XI_7|oMskk96HHmxSqaY z2@?2Ux0=EM5y^A~w>U#)lm={8<|UZn)PE+nzY*Sk~?-6+qs^A%NI50w^GGMA-cd1Tiav9Xpb6GXHkj)9Pq_%&10UB{VPg+K1 zC&%jDn}jxsp3W{TTFJ+wo5KG1c{*$ii)$k_+z5oWr$0bVieqI&T|Qf}=fV45N$N5W zi}_E?iR4_8=)t-f^NlB1wYK=(1z_oo6G#2;P`FQ0V>ndBou>`$;SrjFk6qwlbPUZq zxNecZ+K}|xZ7TamO<$nzPCUa&_W4gm9$lo^?cqGpL$^F2nlf-uO2F6}rclJvo^Q)@ z7*7tpa_FUq5r==9$_A+a8fOjzI({^K>XtxI%63{`3i-mt2%jmR5dh z{=9kQ#X*PP+YI7#kC~ah$wWaItIn$dP*NcONHzKz1~It{Qbnvoe!$WBuUBF(OQQ2# zD@&=mCySn@O4ZXTkYbxfpf*7t{TwD#hT&yZuo#0R+&vd6pLSVxCaWBPj6wAT#Fl^>ft*Be2 zc}CSGS~Co#>1@Ej@=HOAjW-NU(hWbbT>jHk(7~wkpD|j3`me=d6lnnMa14RNJL}$( zD##nGcBk6dsL4qxkm#w=HWAofv{I8Gi!0>N10m6IscNIklJh6Zsh|s7tYSb}<{ZR0 zoAgf?F20hdHFa%+Oxi#2D_LZdyjhB2fOcV2HZXs@)eo?^NZ&@s;L1my`?-@PXUtS`0M^I1vHtT zjLzw-eS_3br?;T#028B6FB7Xi%G$ z7m|32auOsEDNKq}%_ajS=#sjQU2mf=gKvcbvEfc2q%5h`P?)Ji)!0%T<;T4L@eQDI zAToh1n56xl&7Of^)hvHoUzo-Bf|KjjfIv^aAUepzMLv%vI z*E}>cGc)_HR4uTN574|}E*g0_<+~9FF*o0dGb@tsp4`gQm|%;Se&I~3&ChIW14|y% zi+>ln)v4{RE&-?bnPeopQ~wwZ(0Y72#SjEh5H8N6ysFIPHP2YcXH(EAIeHtk!srwb z&hY=UWWpb&URel(A}`Z!7#gk~vDoHCaQ$;<&n|)mXJ#+XXfdewSPS1%24lfIXC_6F z(>ADH_CfF<+iRaSZq@Cx#Fnb*V@-60GKvvq<)YM0e8i*lL)3SG;b<;&O_%x}$mKr# zFFjh|<8vBlbvvU5#vg(d{jso_Pqv7jykM75$(d_(0vPJnTGr2BM<~MpL@|4U^;f%H zuNMBFdbI1tm6udw#$*jITv#!W1n<_1QGtdFKM2|8P<<-7YlKF*{05sFySDWh>iWOf zdh>9o*FJt+ds4KLY-KN`kR@tTvLqxT#H0viDOrn|N1;E$lIB17z&pc+z_eOG8JZ_i|4`LfBPGpjNq+ z1haAC*1~f)o%u|$iwB%AAiTfI4(f^$lv5Y_VFBOcvxTD$`nnep}8WKe+1w9()-A$p`ja#Q$2eI z%G@|#<-WMX^y{Hd&kopG@S6=m?{ewqu zJ^HQ|_5VWPfG}Oi8Rx@R`VLzIKH&kVoyr*7wrzI-f*CFz4mk&0I+I4mZot3nc<@vH z^TJo3a2mQM~@n1+<3`|EUMR;fkok?9*w_L_6f@m0Ztr^+ZymD4c2! zz!=_+11z9O{p|y^jOdwTjaC2?A_d0XJbq~?OzHsiAdDL6tdNlC`96t{fNx5g7Bo~R zXx0UBqo45_@U+B&i=OrkRQLAtT$a$BW+-q_=78YSnpB+nSpBWc-D&0LxUB8~EVnzO zY0G_1_kfPyQb;MC{7?;oCI6%5rLWb3dfU{KA-AP4 ze_PrWW6oz3J*M=S;J=L{82v{w?D8R|g=6Jnt*e?Ju@%_#VcbuQnKE%S2KXB-U!Z{j-?%y&=7mO$HasD>=I-(2j2P zW6)sk)$@rZJhC$3G|IYqXq4PmfBW`rm9;mOq^$UN?Ctl$$P1o^bbP@>F0=X%=4Eq0 z?5q~XICU$Ky@vaK0j$U>d810r32Wen1yQFZJ?BZC)dc# zF(VycE}HnzDyi(fw9tEYXi{-kn-%tKnka8iadoL&a{qZx+i=dN6-(%%dkVOhK1#yG z6q$@M9H#2(`bkXs^2&A#!m2f|_hP%9mua+b^U<>Ha9txRUSPnx41q3icdr9r#h2rC zD**MioF8eNxv}o+DvX3kB=TQ$wl0Kk(u_mm>qg;Ntg%VyM*55%m4d;2UF)Sh-ojt` zPCrFu6yV^w6%xh=kbcD;Rs_IZdpP~6f=PzK3(q@s!W+iJIheBstJtI$=O{4nAh1}~ z+B!9iO~Zo7aJ}|mJk`$O_kzyLV_ytHVtm+7ZUrdsrOji1v=6?|{IH&-`_FrC5gZPG zxUNf#86aAywEEM$kq>ZZ4g^;~NpcTQ23#)%gn{OFs}Ey9b8K_J^Jf%I(f~#z$Y<YF=2pfKRY#qXe3!HQlRk(#T zLe$`SKP3?fd&FV2i*>U%;RNO6DMBHfP$-GN!_Kk4p%Ay%;d*K~c$mX=TTf$O8<#j% ziB@pS7#q^F7D9GgY3ir+Jj-}t&9ki{(&nmewCGxHQ!4Xd`xj6Ef)?X^12*}TPQFH? zW!vr)w!)~ew^Y2PVN-r-PN(i)NT5l z%}kwrm~aB|3c@CcRIt=HFz*eLJB`FbOlMd>oSCTh{Nk6PVQRCUP6A=dKN$&dmK&py z{w2#KAANP+yOrzy!tdf}*_6yRFG{TCcF zXIk*x2!A2VlBT!VrY`TP-1=ufpavR|y+Bp!@|lL|Yw(SlIYRNb8@*4V2}J^Cm3s2L zxBd%_r4<|6^0Xb*^Dw|gpo7YObjBP=H*?0NnvE==uZX7sx#)U!7`H$b!*cdO>%C#Dk%n}fh}Lr= zA(96%3+UE$EUNl!9t31w6_yD^L=C-538~tp!TT66#>=I&1pqWVEuy)C5g-!`n;9D# zKWpVdlZ2Yjxo6u|Jv~b}=1nc}zhhRDp2NKZBkloUxT*nG^Ml%05?K~zYCBTc=eQ^O z{sixd+j|o|hFA~JK-XRm;=ztduI4;1_cJ$Aft!@I`Kkuci*I)yj4?Yxa7>SQC_)vH z(iQZ1ZTzY7*7H@pyr-Es^wXz)?n1MUZJdH3y}7yBpoxtIrqts|+XA#wgA@nL7JiR| zrUka)X+^+9!n`@3odWf6V>sB@Kt`1`FV6vy92&cP?{P1r9oK?Ff*B@i}ud+pL$ zCv!K5ZfgWg(f<3M!c#|FqhGxEon7>6KKl+7q5U#e{spJt*S%laO|oKbLZT&Jsq<9Z zJl@2lNlXOTZAn0Rxef4T7G+Zn)sO1@7nbxW_V#?)Jiu(f}#8BC=)UfAz?u$6oIVy3|!MP5f-IW z<+)3Zgc17FDFFdmpojJW(B(#AHe{?5cjxlz!usi?!}V6!;-cabZUCjrq|xAVO-WZJ zH)AW>{NWUv7!EegjLR-Smrq7ABl} zIUthvT|MnjjH0V9V}O4izc*C#K#E1UL%M_YD^rI4bu~FT`5Pm2V4apxQ3LjqRWplS zBR-~5W*Q4=_57SQl8mj6kKw}%+Gj5^2N#s9NGdT}n9bzQo?8Hmoed%^?^^QxNVmBx zHjCx$7n&53!TLZ9d7VZ*NtF+Dp{9ZWn@x#*g6r#BIV2k7*!+L!Enq3KdnaYx$GF7e zf(ss6f7O2e)s?@8bQEP=Y+NGsO7A3RZZAa~m;EY9w#46ior1%Y@D^+jKUU~CaO6`n ztlN{+J#)l{Lw;0UtGgN29f?Gyr`}0vpy}Mjk~j8XPuPxDn!6A90$06pqOG}^Z4rmt z)$^o#Y-$FYG?4R1r|Sg>#y@z{&~QXoFsz3Jk5F-;MV10%xq-hW+zSMgp-W*|>d>b+ zSGgh8E@WhE3@Q50`mysp_2e7x$rnS_4M~c z#Pjq7!LQQAztHD(3969805UJk;HCGb_ z#*hza>msZ+ayob%h`_MWkBkIIX_Xw?5jDDtTlO7);k9oZy5}ZW_WW1OTS_Mt6c`rI zKX&K?SHT%5LZ_C%V_*pbF#?Z~3IPaeR+evo0U(vZ%bOuzKyWqWh(Az+fxvqX2H;`X zGu2>{|M9_`jYW}39c~8(a)oTCEx(E{a^ySBq~4UYDBlkn3sq1&pvMcu3wY>vXPbVi zVik*j#AMLQGLPNrWB&ikFxpF9?;v*vR6Cd{*+G>u)@}|}BO)R~&igtYDKwz0ycveg zhBnu(Az%rkHu7l5JN*iR0XVs!U@zP*04!j-R0j&{-}V7(_!9kNp6kL%1^8p&04b>l zJvbG9J#Tp(ewCY0tDYI;_(Vnlf3cFfzGC*|vUM$GaN2F!+h|1nu8jBomM0U;}K zwE6AQh=>Mlvx+Ms!~bU!0VU`SSU|+3r8S_%p=XK;IKane;U6~)@2DkvKw=0^X&C23 z7NKd>GYL1=6H1u@X#}7S@FIF6Q*EbB3NNjk>Alc))9jbuO8Lu5Qc@VUWh@{bppKi? zL|njj0$bJ9@qiRgF5-?k45>7LLQw}5^2Zys&nr)!Uqa$&V40YY0p(l)No4#b68@n> zpE}rJ&V7oDx#%{oKX^Qd;m}v-+HLL^WAWgyiLF2`=wK7Za9a#|YYm>J&<1Tc5CTCB*4 zY$45O**nw#N9}Czao$1qf@BJ0yBeZIn0fdsO2rC$*+Y)C8WDRksc0#mN1~mIbiO=@ zI5gdD%8;s{JkoXO|$`*BApa=`%5ngYL$s>O>_7@+ojMXefqu6q$z7w6Y~ z50KU&n1RDA^qx|1SM(2q)b%Ft7~F7tqNDe8b-p>brER0Ik-YuSM<7jMy~h?I0N zCfhwLmRrW$9mF%dMmH;hMhRHFv{04O?B44O6uTvC|wz9IAu zgIZXNXU=m0Qu^2Y_B~aThTThtXmW%oG)Qm^Yxf9)Ju}fbB^s zDEMBagGdqDXOM0p;S2?NVqm>_%*cV&A84lF0>{KqZrNMcp#XN!XUiAZ;YP<8&43&( zdTsfNvH9o+{+oUBu*5#gy;+akV2S16`K^P|Q>sQJ?_Ws-^TIG_2iX}B7eVTW7!-tx z)YjI%p^+{S-4LoIhV~42SO+G%b5=(1AFr$S-h;M$+-laq9GGi|>1ww$xU?TFQ z(e9mJ*1Lsu2B5&8Ij1~`jL}=x8x!2MtS6$ZV9~ShoB_VyWlS{7p@(1jWhF=nPI3jz zVcVO+5qP$VM5}C)4moMp;>oQb$an7#8unkx+OW?Q53{#T#K>TOQq$5l?-9LNdB~6V ziSkTwbxKNUscFWCi_;_`M&QuM^0(h0z=Y^h?;-~tm}l>(M}}s7U$3U~3StF=d7^p` z<`XZeoP_RrZiRHPEMWd;VS@ZREki&5*<;IOz(<|DIg2FnB=x)rnAPb)P1v5+4{uH4 zl)E122+)kdPfnp?(dE0_e|_d5YZ2aCfgyR3eX;b5eo zJ2ifUvQk81NHH0+MD0Fv3yTma4{tO=`Oh*}ADCEjy=5Q92+HSjSH$TP`uncXjE#(L z0Dg#GGXD?sez@!+b}(RqG2bjbz^du>;F1b2{4~OHe$wiM-xKV-B|Q}~rs{AewMmV| z?Ydxm;0OA;^%H51t5I59LG8dspSITmmcM=q4sVGHj35{}*Al}PP86UR4E*<_156m* zrMlWaJVK_E-^eEgF0#Q`N#PE-8th0>m7e(E2#8O|v@p0ocbg8UUx!8Dabzs7C!JD% z52%6C$dfV@tcXnDfxcD+y!~07)9WAA26EkO2s?y$p*iR~3O8wB!vl(VUGZEMTP{eS z6wc6k+CkI{TlxND*I7Vd{R}XI4H@PHL$7$QUl?FF$nq2K)@z5E= zgmNSGUno0aldc7*Oed^~Hr*Z?&aD`1sZU5Cw0pb;!oV}z56ErRJH09ldW~Q--2f{L zKEGN$90OVOBzhDLGC1ljT{rf4!8E-zft9zKunv7ZL=!Mew|8~KG5mO){hdB1)3B^} zbH&i3DolfKQhid)4sFgu2?_9n%8g}Y5{l^w4w3CTaR%*ChRf!$m+Mma%8 zj#BeyFhPN$eRSMh zl}Z`wX|t?;rgi*}40B6>wMp@4wAtCEIB*f>HUv$_}9Hb7gMRUX$*>MxQ() zGL@xc=LEi|Q{Aj?*B`TE<2t%no>JEYvvmlZpR)QRbedFUh++KRTGBz%eY&J3@u!^T z8h$qcGlYmU+GNhhHj+}nG*$Wtpgj_)=f5ylr&zU*Nd$^WPE{VXFFCf^IO^D_%S1Oy z|NIxCH81eJ;@T=w3#5*JeFX1>s(_obVZD3Jt}YU=tnn}=PytO0fDLn9hJ%lE>EGmn z01ZLr`8>eG7yq_z5b&B?2X2`|EkeWp{6%0$@os*1_Y|09;ywSwdVn|cTc)wJHG>6E z9^7vL0C!xgeX_4Y2ew(Dr6lG6hg|Ee$&-`=1nJ{1M8Ac3DB+V0OU~E9e=}x)QPhdZPKPF zlmclw=DM0H;z}1=6Q(`vjQEK?0kZ-Io_`Sc`gGo~Cf*tqBgN(X*NKZB=T(HXaU!C$ zR&l~Oos~(3K^!S6qN1Yyt@Pj&xC#EsrWJXX-@pN!gW>rufLq0DJ{EttruXxu4G<#r zdGGZ`jGsDeQUV+@eN>vrD)|r|$1qUF&iLP~eF77Au!|y{R4%K9*8y^>Ygg=NG>;N6 zdXrypkaUYl*<)N?hwhx)kBj>JV#E(5Mh+JO(=z(8!O+PCT6IOSPz0VaVGNox zH&dDw-K_t1be5v0)p%jmwjV|fTbS=}^v)(_L84qZKPDUx8FJxRB$hb>X@q&i4dXUq zcMJaMv4fEClbPM;)`aA18vgq2hg93Z6bgr%nnDdNEd`5Rzg z4Om{zQUqK=hi!1QSetZ_LPs3J-@n%GGICx*jp-SxEr9G_1>*pcZNS3y2AVox`v4b< zfa4|*3c*@o3RF@HCb9oseJWq(i~GNPBO9R-`*shh&IW_$_!=XKEZ6_zQDz&Ty0l~eiG%%d>df7S%CyFQ;bacWo zzew>ua>An;W~E~AVD0Yyr+-*E53?Pqmp8m6EHCx9{)vuF=aa49Gw@tk-j*F{J!BWU zu7z9GdTEd;Xq-R42`PHW0Y_E2)+5tCY+L_q$|#%wM#c{Xfe{x$S$r3$++l!@Alslq z%>1c0013z(^w#xRd+2wcW|)zOft_2qcs8Pkhy)Y>d3fV3b_V#9|0|y;{+k@=wYu`~ z-3%2rVK7>UTCMqXq{GmOXaKm471n&L&BROQV6O&3D*6v_t{mVDKyoSH4(SOj$$Odm zXvs)K!Ik6rBCr?(S*JV)pB5>TH?Cj9^(A?h*^?{yz(r9DqV)q4oA|=LZNA0_fYO*# z;g^R{EqVW7IvKP5D@KcJ{1?8rN`g>3c7(w8;QW?t_!X5U%uCI_2G$5N8?ik|adl~w z7edjv)%6b8udL%FJ^09Tv&Th@d0+yAHC~-WV0;62_`#*BFChK|$mM%wfDn8%7?%|8 z0tZ(%W+<9sbsKAHx?umSyr+m@WJSk_%O8|0p5LGmS9Tvf&Z@Qb;Muc(FAt?CMD5;w zWPL}{6GOWr;+ngX{I9Q5O}xDEt;+L_hG#B);|LejTo~6|Y+tWQ)jSg>D7X1HJJI*COWSPLGOMIH{LbdC`89APS4J8Y-4U-AxnDE2M9@Z zB>Ar=rqYISTWRo$;;SyRzxWV?{D#@ze=Q47;)eyruX*$=bir@gW(o+vhV|h@O_EB9 z-&^O=rV>i*5()nOwQKRI!4aQIgY36#GL{K_HVbe84wXspAj^L~QUkUNi^au? zMJKOL6XCwJb%n>qW|Ya_DQZz1=-En?2^H;*WQH0=rzO>;+dt8XNR|*2+w%Fr($GZy z1yFukEfe1oq{7+Q8l7)21w0l6qJzs-q8SsPx>m?vWI)U}n@dPvBcG464?o*@r`JhF zXHW>sr@q*B#7AOPU~he--H4MBzclICQsm3_4{QgBVzeY{KZB|CQ3*EA1}~Okx9J0- zy7B(tfhg^&K9UVhOH41Z28zjy{H~R!%d_NA@BzQ7B2tEG`)f5!FLTP}ZWfg?FLB-k zhO;kVchOlzifF5&r;`Vr)Zkews93+VZBI5_ZJJ#eYr6?Di)U*>f`XTd9LTObGGBV&PcuSJ>L4$y(}hwv)hFu?`ag$jg1`MJD$9-B;BR`#TGE#Pea^EJ6B zvr|+qCKq$1guq=)qhG05IcW53rfBBXyiD(5YW~ztia;gBNfj5sJ#9+G6;l+fi3GgX z@*ArIt7bLWXDlEf;HBa{L4X7~U>yi=%1i~D+uspGV9m^!;0>U{lTw+-fDG&(X`jn~ zLfU0F>J8g^KmF}n;UNA~y)T%Hi!SFr3nzt37mQ?Jtxex8j599#Hm6hjg9sg%T+*G4 zk6<`%@kmKpe)B9^Mpo9fjeg1wQx~YZl5H9VucwKW@qH2eF6*aLfu{jTCDrKHkn-uXg0WibZb?|XbyTvQPLY!t*e)RT zsAYSLZz^8fZP2NRkUl&MF=EOhe?SQJebZ4;o#RfrP5GbpUVBYotW5}Vz4G#f^XvoY zl#qzXc^!khk_Ktp0nPP;ewG6J|JEHlPV6g!#EwfjCN9)D%Ym!Q(&|SDHkB0+8Dvn0p&qT57-xF=k{TfzekN zS`x0KFQc1qG6SiC4H)^3Oe@dc5|{u$9g`hYEhwZQ6g1L>jjtl2nz7-ud@>1R@<8oy&kX%bWb_frmf%%r zV-FdgVWTQ(1SwW*p|fG}x*hQgAI1zN4XpWMvk`MRT=2yeZS0Qw77_lMBc8o6%cjnP zOsfGkdVXhv3n>ULz@vGbi2|trU$J7`M=D)PQ9G?hFVhbfJdXx^^tl~J3!ED|9RTXA ze~~dKb*=c@C7hHK=yh7=g}DdyB%DTwDVz4T#wjRdCtZ7_7AP&tOdri{GNIr?8>pFP zMIYX@fSUKgccx9t%RzlUwmin_1tN@=-&+%}GMd4(-`~+vh{68w8>FL#r+oo(SIs6_ z4OwLZ5KJrOXjs=5%YdS#62tbZb#1%zZBti6Z2Qd>u!_u7Viwb;vDX$a?CTO z<>dB4g^=xk`PfY$r2!Da9TPvY11ZDxvJ58|JQp|jcob$retb0mmtT`70va#?A~c{| z&H{G0bzTyNpQjIikJ{~hf%qZ-$Q8LZpTH4 z?Gn<8=>1SjC%dnG8c|rl=}o7%@N5`l6b-DMr;|m**2oS&&ONazys6ME7N>ISTc?(! zgR>@6Ue=^Yn>0Y}%f=r{A8O01mh`-Xo2}V9BF%eQ{LrCwU=CFSp2_8;jEoHI%v*R* zd%e6?LA^q zt_WcazK9!+`2~7Vgrek0-kkWJ;Q`}utW5t&df3hn7!IS~cT7NdDqNk6Lh-%a+yP+Y z6%-ZS45#GQ1ir*s1a{7`G$I_#(g%Dh9+y_uv1kDoQ4JyoL%v(R0<)sHQ>O-Y#K1y+ z6J}%Rzng}JhYvN&pc@+>&s$Sd^OtIEQU|g<6xfl*?u-1}fP804SM5uHmS)%tGW_kJ zhaIh(0B!-rkAQ8>Ku2hrosDg{@C(fTnIvfAA6>>TgC$+n`(F0`TOHyh5`zsC% zSsNSYHn61+ITbP7CXL0f596t13C1?1eZ*+Kw1yfx=baP|tq9}@l(YZ2lSH3qyYdx& zmTSfH;NbJHtH+AvG~@-rHyQraZ87ZlQf&=A35QNjd;~W=SiU90ysYrBInXe5P@`kl zKG~@=i!LPA?a`9+XH*X}&Wp&(S7Q_}6bln!Mvpb~9I0Y5BW|Wz#EHag^|E z9)i&j8iFsUUa*87?y=NmoC`J%QCyA%u!|@~M?cR>s~kuJN3Zfto4@^>&cK3aa8|AL zg^5Gy*%HCfU()&tdb4;B6Ndvnempj_z^*s_Z7p~uA-sn|mW-v8aBjF7L`<3WzUoyl z`D6ln;gsJpcNlW+ZoVCtHZ6E3f^T1h@YUev>b|J~gQ3CMU|#&+^i^`-*v7=U(La9# zp}HK6X_g8V^DFvzsRi>+A?x^e=0dt=c2#7cUvwd_lVUYqSCD(1*R83vodGxSa#heHOgM1zo z$M?=C`&D1CORS8wOS(q;4SUc`d=L1179HS)v>tn!P)=(h&f>GC5`vA9Y6eC~!J|iY z-ESV?WcTBbV-h5HP^i!UU2breybzt%AQF7!fD67LGlA zx^e1f?go(gexH7o(J&4U(?Z9A_cQiQg4X(P{t`FT|EIGW|6KbdOrIr8Z=|F8x(l1> zuEJ(KtFT|A;p3;f4h{aQHWD%G!1;GEy2AEQ#3pZx>eZ0kJ*`UTNT1Q;f5TTm*c)`( z$XQyW^NkJ%CmkGcfzaiODY7HK8JvM1e8!CbDFLsL@ zk*bsPR2RsF6`=YB6Oi)Z?->Tq)~*_Un{M;B9o?IhZxyfX&JI)5u~hu3GEiyfTJ#?| zbn?h#roeZJ8wlp)n7v<@K^m21Xzl1w;o?GAghM%s0iyVfQ^ z(0A>W`WkqP^+KsZLm|SPA+URrTvu*M9)a=$K<49;`(rm?5La{_+4{la^K&>8L-5ch zicE~AuSYE`QQL%e^Za5hY9LEKNv{@XW~;Ove#dP4%OBCd{Z(xygNKi=wF|n3-L1qP z<_h$Z{!)o?xhxNl!)+m1%eZnK;{tLWW#pwuJ~QqYNdAf8^WrML0$w6^e^uv6jj^du-@3uj6G zSlNggR%Tn(a%ACYoA}mG5EmhAGH5VgfK7j&-4T*F-_AVQh5h=uYx{EN5Z>f&_@sSQoz-h42tGQtQe%`sh-*tFs2~OOagT|P&jnD&yxL>d9hKJ3yMctWG zAiOaGXBnDV6E2xql@B~dPzUFy**yxwWV zkQg1iu+kJ(|3jIT=rlDKh0bK>zo!YUmW!D-b#P68nrMp8oObeD-r`IL4G=4WwHMlO zp~!>_r4g_WUeweeNP(C(H+G86Fwy7ssCatvf-RJ(tB{`khNw%DvTay)a^b|CANzlZL8(Vx z%g!;=p-(!dN_zFU{M;K?FaYv*^6)gj2%y{a`*8@!PuI7!Tr8h&l6dwrm{%#HkIAHj z67R0UQwfAk2j13B_FC8h;uEz``r1u5)MXh0q3nDo-F|cJqt>y*;0_RbSa?MfMJ9jKYaF11(o=swZh)iEn!g3(h-HpzM zaYbO(E45q`g4=(2$IlT5i~e_$Kap)HIg)Y_Z}1+%JTkl73ydRACK-T!Yzmk~@LN7zo!`pu8Uh0g{@361tM~}aE#!z!xpwctKgYmjl<04Ealb}K#Yf8(<9m65uRDUbB}Z;E%rUe zIVF$DVafvp32WNYq#sNn-1DxpzXs-N_Okqwgy?D~4r6l0u6+>|9{$E`dul3(Rh%bxadDx}IMESA$APJ~I_`*&AOqC^VNua! zm^aZN-40X^Y>8L0u7+p&xovb-EtEB zQ1~a@LU)ODDH_1gvbeP4H}69a(=TzhHefV>93OKOYS!2-gq8t_iNT=IlYH9$p6@wRZH)*9Y^y>DA*}NMf6rQ!!C!dEhV&kPJ1@u)UMX%g;X!n-T;= zMcj^yl^6d*T)T4|OBvh5#uN^qcH;x7>0@a1Z;3uEhxyz)yIu9x?C?`;)h_YH5WwPs~FdT1JA(+F$7|!I_T#pAsNZO&<7ffUxns-_0#RB4?*qgh3A?5&$0XW z@85&5xZfMolge=$>-3;l;nqx+MEjL^N6mOb5q*7re zF^^G~uu-cxfMqolnu6F0D;QZ>AU*NI_<|O2fz}6y$kV;7Ok=KthtJqy9UYpUV1u7OM79~|3ZPo9O&5f%RZ0*JoP_a1&SSnU_r0TDF5aF$BP z4=x4qDs{-A+><{)q{YNE7}=xEt*x~P&z^bo4Wx+LOfkGm#3DeKr4*3vawoo6fYmhx z3Q(z>5T>E7egpW{Yq&fw^(HIIt6&m@9VAHzNk{oIlXse1*|Kd*)p&e$3_oSCjtMJxP$SE2ex6HYuOrL@X>KKLOxgcuc zF}Ue%YU*)o*j&E^15%$M2ANTihI*;c-b4kkT@S`mH&QNb=a$(Bu^m;A>GcTeLtI3P zh~Avos@-W1h)pbcke{EAoEJ+sS)?$q(4e?7*W72}1S9T5%o85VaASK@q%bS&Ub0zR zwkC!0DMwG-mz8gS_qq;e5$C7c!aa^+{f=CDKVrm{{T23dB+3&~5320O6SHZyVnRY2 zV4JK5Rhcxr%W4~3&fh;i!7`6_x2`+UD3$xpU%#v@N%$h`P;wwR+rnPGdX9n(;N<>8 zZE}bV?V{^`1^U`0B_+>_wIiPX{cF3_qa?uux$tweNtl?Jusj0O+d=qoC|9P>v1=Pi zo?zle1W^NID{ScK>^#(*r%QbB;3TrJ0OI!>rsj(+6WuwX0NRy|Cohf49hstth1KH@ z064XYlj+tcJw)!INYn9}Ok+3YEu(ULXNcrzqE5sd@lYYoq3gS_4@}1euL?jr{E2RBY}Ds^dvyr`?8SL@HG#MT zlsP2DaT#sM)6&xVK6}-cdWY-8#|Z~{X7EUuS2@#9BWu5qw{99n0Hb?wfPmi{p|^BLw~8OwoXcv&laZ563{b3yBDy7@d$ICW(3Cm zpLTiQdcLV|6x$hnY16@1ml9Jn&l|0d(EZ47_q2vp-HB>*WT<3qJ3t&HKBR~>3JfLH z(?HUD+*>*FZQ#* zv>ac0fSiRj8pLU?0mq44YkWz0m!4`s+gNJA{;Rewwhppd6=W7Dhkb*PdF|3WdSaN$ zyjmJ;y?~EN6``p3Nw?pr;qBuZ+uG-dAUr|{iT64ZU`EJa;Y@P^Wa)O-`_wxt>der< zz~Q6G2Al`~&8=L+BnARz!#n51v})ic4*~#tW(nsyrmdy(dUuKTi_SSN3Ndv3DW)%$ zJucR0M~zhbM1CjGN{SZYj+hFfLhjKPaCHU3(Y$0G0_iw_d#i$j=~C*2eE?wn2JlK# zTe})EtKOyGmDme4AM&>@Eg|qwQ8odj`^7$eTPs*3PwkRCdGdh!Ouv58 zXk04NS;1|2^jL3rXecZ`zQuf__!vpp0wTVmkD51i@xUrDGGa9lpe2l;5lP9QSLy%4 zMKa2C?~FnX-;H)sTibUt8`D6BhTar#KQcBx9)-aaCv4Z~0Og{7rjgVOz&C)0)9~<6 z1fUa{437%T4}13HS&IWC6GxB`{zI&+*T5U&E``r{m&8f$T{&%W$OE5oI_j_ifJ~X0 zd!_)dE5=GRsxZ~RMAk4X);zVr$R(1s*0YU`4*G%IyO|1Nks2~HgE=~~t{C4VL>!6i zI2u7K_vOYm1~6x5MB9Kk7TvvP4|-99sDNj3cxf%GRFn2` zZx!TZs>kU;_yfd_sk4Q7EG;jt`t-PEhV|qDBYs>mAE-VUeA){vQa^x)R-yLX{Oz39 zuqe2{r0|O@w%_0Fs;a8G%UE+w>qlvau(DiJlI#WgANas3sg!|u^Fy1ecZ*!OtH-PS za5>9y-Jb1pdOA8MvSiDrFx$MKcko*gzx;M9P&w5v?*09C=#!H~1Eo#;$6LD7)>=Bb zXpM23ITp+~_>1(?8{^x)fa6$#(T{Ax8kD;MlBN6zZ?iUjnCms8X9|KU}ymZG&{_3=*c7aO3&(w{g zy#k@aT4$Y|^Nv=StTn2LuwUKa1>pAmcK(Y6M6C#P*=|h%q)H}Y13J&R-vf>{%Jj4E z6c%j?Ns{AX+@rJAQ0ilr`?ASNbvXQAvC;X(JB+rf3qYUt;Xl?AUn43FE?fK~#W7>pA8YKIFWBMX!INE~2>;2dK@|Kw0<4;3tn$ zxKHn__?~tGg8jgs#2YP*{~FwmN(z^S-4aNo`9OYp;tIzlx?X47Z3AG(X|g^$^g^0P zFMI1Ay|(ZjgJs#(?5FBPRKUO8A+GC3--&6P=M&S z?ffb)562Wt1N?m7?2%O+;lO8rCs-=YAGrXL_Vn4a1Ixt5#zsfBfvd}%zg$1|HldhK zz}RJR&pYO=Z{4~9#p~HxRJq{!=P2?Ce5;!cKEx7qTCf*t{j{+29ZuiQ9F<9P_;sd? zbAiN?h$%@j*?5R$OKjMdB1}Znkx@9a$W=@pK5Xrau@x~gR=#ax?j=8R#&oKWU7A|) zB^U)sEbMWl2LiZr52jaC`UbS*OnAx>`@xKDaSGIPet$x)l5=4Lx7t@jv&FngAdAur}7(J z5yW=okUcIApjVM&K{*20$Ga~Z8tw&tF1@+)2G_1#Z_FO4O+fjUcyE|76s=K>wc)TD z2pg>gd##EALm;@ovq@d{7DHgyuE(&fo5u-z!Z!{ClJ4^4mnsZ!9wer}#P;*

M%eb6c9-$G@K7R80_4uf$+EIPcEKqS&0RgMQ(6P`@om;m=f2;QWkqWxe4r{GbtcG?n zw!@2tJ}d}qm@DVGg`7))XDLF*Cts5aTP>Hh%8wlH{FX~X1KzT&Eehv!>&cG){);|D z#q46PXwyViI3hA?p9nLNJPLrL2U6PFAQF{T$u5PB9mVoz*o3P@2t%#ESP5#)zfrt; zixG>U5PjgFcjJa2BFVxDnT9_dE>cR0+A3J~zH5UzG70!JIIaR48XDHOE7)}i1M6(8 zBfEzO20H|>cdwy{1{8K8uAjWIDBdmInx6?EoH~Gg$L zIw+jhm}nV}t0SuZ7311JIS=UVq>TEA3w$Lf1*Y4iP52xsiI&vqM0@fSOK4|K6_Pvm zyFZ{q;)+qx>jr<+&RbF(Ol>9adOKep!-ao$33yVnYHKg-pjgAPE-*= zsICaBpWdYUWy=*DtP5j*;KPuqu!(=aBTI4W8Z)xuvZDEHq62x>7IlB(`(ZEeazwlG z0)bcL5vUGTVJj=EJtdHGEoO%mBus%fw&j>@+30@y~^z{71D)>ryzrHd}yP8_User zFYep8wMoGJcLGDv7fgDIDfMBxMR+6v`?n4*YF`qlxh+u8@nKyndkT9kd4`&A2HbBT zv#keE7h38=>FffA_+*ah(S~7?Va8=m9i8(4b@m^-qSp`nBLo-7@aj?LlEG@hd}_W&Bl&qbTt#>rOlXPbQ!%p$;qO@{d%*bP`tWpf z#LW?+)arW%rQsqS_yRU0iUfcyGE{`?KoSW+hp>w?1*YGoL(`L@$1<4kY_5a8;+jnRbhtK84wMyr*dFWz$lm{p9v9f| zy238Cxur%R(1W@lZyhGg3R|em;tJHZ<8b5OZ-2$7PSI=bOv|4dTgHigJk$)>rblFnxIqMwiO{-yT>)6d(=ut#7x7XwkDGdG&y?U>Fd>kAt=sgNYj6VcHc|$wM$uc{lmVHp&MZJ2wP|yZX zI@{CLP(6x*2e}o{9LWV-83ksXyG-|R)~s!LA3Qx18wQnLT?whJk91OZRGl<#I7&C+ zdtyMJZGJ$z5Q3{CMK{GrJ89ucnvz~XEV+qxF~x1iZ^{v|n!TcST&Hq-4`?;%K2KaD z+4tmK!#b^OwW6(2I4RKfHNYI&1jJ+&?MoQ>v`be`=DCni>;-!>ha&adE5KFe^x;Z` zHU|vD;~t=T%A zctM(8&s_>zAd*Jm39Fl6!Z`yM9d0G0li(i zoT@0U7*V`W4O;=nxR8|84sa9)i70_YxEgp)gwG z^+;#69ClO3(=paPtz)Kn9lDJqBYN8rvz^lz@Ga<72q>hDJ}iJ;|IzM`Ixc9iHUbNQ zQhB;uG8vjs(vL%3mzUZ9%gm(OF`uvE z!@gqioY)XkgGyFQEOOq~ioGD1RTQoLN2VcqqOFU`-tetK9?jCh#gXa^>t>J%FV{VP%kEB*n%CAlL^~E&P4gYuWR% zt|;9az8WEnU@0KQu2sOUp#q|94?s_^3|N)G{|{kOAZy6&58Y=3k_SCnE`r-5-$By$ zV^9+AN0G#q-jIYXh7^LzZd1RTE?&5B7SOT`&uypSS)QoLg+l;p@01X|Kn&F$c+&6F zeI7r?iMNSeWeBV?#I!)z1F>zd=vPM<#29YFPDRY$UvSb%ZK)DB)!h1=-s0Z?3SrveWcYQoG%(VH zo?Rm|*}Fa0u_Ft~9Nw3$69@TZ{iw~j>?8(-)HFJ~mFJ|3_~px&CF`FHYxzHaj)L~; z%NvV2nAba;Dkg|w#HKK@Y5YS2wN8A2t^T-K8AUziz-am;Ry-BC^8V(Dn%kw1)}nHf{F>o?UZXJ&YGHAGdPHuZA$yHkkt9T;o7^*VA72f~D1+P00qk`m?0{g%)s0+8Uu~ox~-w8Cp z%a{9W>g!VojJ0>Lwn9kMjb0`|We1g%xDjLsua)sf95f6M#dinS0}PT9xd(n*Fxe-= z9B12;Cjy*?6*ti|{;>56#Ra(#A4g{T>KWq*k%oxvtPxBh3tx^`D#x+>nskx$zW;ON z01|Mdvl-%2$v?tfijul5%J%JIN|!IEXQ#QWaHnR_oHmp&?MdBhsx4;M4>1`BncL11 zL-|jkw^r&mqkyO{kY$Ook6HH8;a!>N1u_Svq=HS-;dx#1mUZk`1cd(S9S)X@ujE*v z)~Ld%x|Cya>V=dUCrC(@!NueQj}`FQ=AB$pjjv|&v+4vI&qXX(BpDr5R^~yHIq2X6 zy4q_aYKt_}v%FVMNM;Z50(V~4e?&m&eRk(gA({CfSRmnn6tB{OKJ6b9 z&MM_}!GIW=#-4Eqgh0xm z|Hs#xfJ3>4|KlyEoK~rmC1ongDM_?QmZ?-yq$rXym1K))m-TI@!X%WMGsZIO`~2?LIp_QPUjP69`k(7MU8iH__0Bubb3ga}xj&!JU6kUvckiD> zMHF!$f zwZ!>F7shTFN-N~f(f3tCXG`w;r;k*2Q1{51TOU3gzJdY`mnU;>hu^V0lmF;I`5akU zn=y?{g*BG9?E-*mZdF|=LJ(EV8us8Xz+hi~-O(?aw(qU$b^{nK%YzA8@i2qk#Og7r zHBj=ojwfv#JfS<7PEHO8X5-0AKOAZm;O-yK&W$XA||F%@lX?ZBX*Gb6zF zCwe?iy-uN)3AX8HC!uI|*tiXZmzuXWG!2#&Vipz>hCDT&dA)uBJ{i*k?%X+aVboE) z9}Zee%SU#$j}n)UfycgoAL0C_IwJ4wcwQsZdB0)Q0ZgFW~nB zoV^2hRmeXzNDzC`X2x zsq?S*E0%0I7YOpUMI~4OXkYGuiQY;BgQXDDKQ9_GETSkoZSpZqzUH-qjH>+~zT2Ol zqiDJezqe>(^Ka)f4}_HKECf%u0}qH&mkil|PnEKIvNGcGn3u{I;acJ2%$2cX>S{W@ zX((O5qFs2)m)D$Ohw7mTNB{@Wcc1x~3KbT?V}Z#)cYtU?@M-~>-hS-Z5**~b=gA|o z^XBb_!{s$T1VTYLqY2->cX=h0PwCJ+I0uAIO$#?GC>06L42b-698H6U(w#3DtJ)J| zVH6|4c1WGzRD)Sv40P+DocIPM2ONp+ucMMv6R-ZbRyj^KSUIFyYOvABMnJ3%xXeYr zdlK{Ds7)>%*5BXZbd%_Dtg5OCI@OEeP0EgJ2Tk7}!_t2+Q;3_4nnL}Z6%WD@R;-=N%ldJ%Bp z7^5s$e6^Y$u3+Z^2N<^)5?*D9t-B1BLhf)NV?79sgjE0})mbAjw-O==TC*($AtV%vD^jx7-_ zN>@lV2*wAyhlA~?K-1RXF9tDrl>;9b(4N2Vzfe{Vh*%#*F8n*F$M@r9RU?X+B7N&I z@Q3t)%N>h`6%Vc{4Q!H>iUI|){erAF^g?3++g1>jMrkl_~;(SQ`U!|9gJ9nvVwotVOu48qu;OMojMgCY2c1-$Fc$Eg9 zH^17VLoOVT+$zmXmQ=AhrH}gWrT~!ekzBHkk~C4bXA(MKbwGKtL6>?Xm}m2lM_RP# z7U2y7dwu4E`6QztAm3^8Z8t&1pH(z%U*0OyuW$?#cF2P(S8Hqn@2M6Od{5zh4b{`_ zgjWqgl!xxyaYDietlluY1lU?Yehf?!T?2xYRJL!)YEdX0U4jZO@U;PTBmA??Bb`o& z(@<=vWpOp03fT{#Zr*UdZF|?u-)itUN)PL4&Qmc^1R~THL!=Bug)37R(wr|$pF+*$ z%{*hs>UDRaam{C+xB4mTn)PRQ%1-aC$$ zAu5NSC7P~@57Z5fjw_twQCGE)h9_1jRicWAi6GE8GaD&H&o}vq6|cAO=qdYVQyh|d zpny_{JuCveuG1hfi(Ea%ysn65 zuVVFZXf2{53GLB4^3LlooGhacMW_D$;~A31Nbd=B>GlT!PUT6own`|=MYf5`E=I=> zzk4hzzgw&&Fwj-b5cDnk#z6BAiv3mxT)4=|JI4*iz>%;J(l#@#Yud(ubAN+_GRbRS z9+aGSA#Wz8>)C7VeF_7s?TNY4;ONnO@lnBQ##s*S4g!wz`wN^stl;{ z8(hpjPPh*68r`-PV8;J(0aBl?O)bPMEf*4&b6`yN3#MfniT(x_`z^o(FO&n4IPb%U z4|k<(K+)a<6^q7rT2oddQiGraZ9PMPWt_a*qmj-fjh4lqua)7i5tfr#|z zfX*OX_|rCMPwq3H_{*dUZTse*Q%Yfy+tJq*u>9oE_`=HXH=m;qf@`wPmETbb`|O#t zk~Mf%)XjI&a#6rfOFX32L-^>dx|#B~FT^VP>oO=oVfi{^2?I7F)29M0IpiWu4a8R4 zK1Gmj&H<=`U>^|aL6)o!*d)iTU#Gnh5#%Zu;r)qZ0BTlZ$nyd|*$z4pc7(2b7*H1( zsC45*5+G)5(X`-s!9GY2QZoe##sgTvH=Y~ezsyhL%+t5=))MF3iTpR251}<0i20Zr zpx7`g3FYs&FMA>B(U0jPh20ycC>Hi(rjp=6hSKk$adD9IwTG7$9h1li1vUw0O2j^i%2&H$aQ#6v!6{k5ZG*U%!1Lz_%c<1blSwPDcKh{TdI#6`f2_+lwBIp-wVr$(oDOl3 z0|?J{kTUpMYE6N1|I6nqeU~55k}HVWthd0$;#$xVAYKq$B{+QY*$ne~ZX$c^z&>kSHL8%7JRwN6=D>z~LZYve8GVyzFgR07|Z+{3f%u!EVH zx!k}s)r%(7Mq`)6cFNH$_XTihD_wks=9KTD{{kv_z5Bk2pDw`W@zY1(La>RLd;}AN zi6QcYR22FI7aRdGRUj;`;LG?l0@|@y|6JgL++m}qJRy+RlZ@0IpN)Be>EIzibWS`| zM1=y?Voau(F?Y=P%1B(0&+aqhrRiUh2g9X)hD$7?k+gtE`Qo+dbS27NK`HqQy3xy! zb54;lLr^kc6tcVupOb_f+o_i)DI$ku+yk(S9y=c(-`QQfRA1r9FX-D6gnnK}B#gT~ z1%z9|OaoArgmR8B0ip$r&6rNipM>rVVAP7egod5~r66dXXp!uSa6JC$e8I)MltQ|a z1WX-WfYjFx`ztZt8}g?41hWU$r<{_K%RL48feqy*kaedm#Gsnm?dtl*#K^+J!UT$+ z+RGb_w7PNj+`;^3$Pj$0egSuc__fe5HqKiIo#ll4yCwd1#|I`r?iH)cGVjhg#=P_CoGi_;nhZ!ayJF80*Ua ztg?5;G^T`B=v)X-Uu@)jUH6%#@}37EyjD?v;NT*Q-g4gfL}=C?bIjm?=9faky=YDmuLk(!c9 z_46lBx)UP15X3r|HaC4+L!6O)UO0PCCjdD+IyW}q*MR$gKUl1BmuMjY;BM9crjuVG zaMlEvST`cb>a(}**}Xdk5;qUu<&7G_*A{75OQL!kz(FfHh z{aS$n1;HHg^dkSn3CxI!9xmUXCK^8C^<(XR9W`6Jr>-$gc8&fo-bCSiIpn_-a@mN{ zZ|wuDAnBtx;otjaE^m=u3&^|`{f@SnH)Q?2NdP`EjP^^JaE21T`2FP&ZxogiW3RJSAVhI1jx}DBDNWVikfUpC!ifr{sfEG z3BZYQJFJ6Ykbt)Vf&{b)qR4#xAp9eEg5Ck;wnY%;--zF;^iQNAed&gjclMy)Inpg7L#!ziMJ6A`TivC*#EE@lUJ@=+ zqaS&ekLGU>`^lp;e~+C}S=Z&!d?lC%#DPFOHy6y1i1|2#G!R;%Ga-L00Qn@S24c$s z0R{ko_u<2b*I`$_0w}>5<|_h7!MO5|dt@;IH$h{e4ZbY`Yx@7hdD|{#H~${ae_`2c z{x5C<%%Eb6U zAhr;FC!)~`Z$A%eK>*w4!)g3@&|@N)*2D||SLKl-h#nq(8zA$=V0!Qs zd@(^;aTj6-XNZAjPJuACeEs_Q1fmDCi;39_;eQ|6sm_OflqDznBXE&>o92IIdR z1dv$}YVA{ihk>bz;`-yC+Ul%#*>F|J$vig+TRU4ePQZBU#*wVMTAEUhr7uz&cuDTR^|_BJ>=ncfqoA(EReg zeX|Lx4)_$019tCg1^RhNP0e8ljg#X!J0IH&1F^SvHBzHMhZfurzJ~h&OP|2>rq7)F zvT=tS2A|rYV{hY54Nva(WnFDkJFZz%4#p9~3gZuO*@7Bek6UKt>Hn&~bwCZ&Fvd2k+X#xxM}JK{IqX==-e{XQ zeBI^k;16)DimImmi&t+6VJ`H^lR&6Ab%YPm+#zsnwzOEK%TZ2SPmo&yNRgKLrzPw9 z=86PXs2*(ah{l17i_7t*zv$R#mC14GIwDJl3ERDwv~eLtoY){&GX8+a_Lq8G`?!a-XjpQw7ts+Z1 zK8N#Ri-q3QH46qNTqMdBc5^xGsT{D0oYWdZ-|w{xRMkMbBDy1h(TWBh$~#bmWFWVK zGUQAhZ50=+Pk^>_G6I0ZBf4g1d#FH+C9KV|yfr#gI@nOzL#J?`W@J><1He83o!)a| z`K~Zq=!`(>*_sk!AkL5w>Nhw7K1u(qq#6KTS!<;$m(Uq@^yobXAR$DD>6pzkv)zQ; z`vRb*XNAC7R$aF)`HL7qD}}f|lX8?#hf^C`LZ?Bj=GqEd12D!}YcS&rowrv+9H$Q0 zymL5x8cH;+?tU^freNIVd0^>SeW+@D1W^uRx;R-nbvrbtH=Hi~lQ0HLTc--rH4uyw zYhx%R@wV9#UVo(8ta(c|ZHHnIxP8>unV_0zhv)MNoQ|R460hG`zE50@ADBd07utkm zdVn|2_}=;2=*HF7G9T3E#3vnVF({(sWr}e9qg~j6`)GMK`p|^dZwTDdzCvd0k|!T^ z&I(G(N@pgXeCTB@s3^(U&)7-0lHhIM*zxO)X8$3sJjn_6PcQt+HtPo;72tGtj5O!_ zDZ>c0sb(GFKv#%Rfy&V z82@d!@bZ+YC7{bSqADQ&8+%-RSPxD-MAmQ`{&fe4vWT^Jb4~qy^EmRISVO=T1~zS zzmGxZgz%(Xzi@@ncQ*usYQIe#TH|4z&}?u*)uREoZ?}O_?G=8u($8MqSHRgyA_d$V zAEFP?*Kudj$^W&g$Wx^E=D0rko%weCfP;KH`r?5>Q#Z^1&hz_Zmw@qOzeq1Rq!e~U zTc(e}dFq9`bF1*uzMc0lP5fg(_%rU4xD#jl`JUpupBDEnbmiVzjOK$z^V>H$5-HWr zH*OVGf`Pt3!bVaOuunq>X_YDh0cp6MyVNupw_B0r)({-F}2*ZF>YW08c2r_&2#m<93>G(^_zIhXvO8%Tbu(>is$Fb}s zpiySZbM$dFQ%eQX2SIKI;YGD&i#&1YoI97?)S)_(Ism!)Gb}2?_&eszUu|piCH(lE zX$zr@5(~xDoG}?QiA;~w;#8lf%bXve2C6vRcz;3)5ucmU0a zo*fkZaUFFK9makgo#Z4ub&4*4uPh}jHDe7t1b{S|kdMwgm~E0=5DSUoadIUXCjwmm zqaj8b1?>aEoekudwY;ZF=Us3}SPde%gp@zuH#=sjb##O1i93Qi_F7MT||F-nJQKH8HQw|H@Vv8{ZQG$|V~1-}70C zx1>tt5S(gmX7^OP;*b)zDhd!J2$y1Fi+_cc9|h_zmu#J#StS zM7i1%S6$Q^$pefodiHWLkgNspXAiK3w3;(;EykEF?+1KWy=oN#g#*o!uUMMa4pfB5Hn@A|k_c zC%XT4=PKQVhoTDU3S@c3gvlylYXm1|Nm*IiZv?2=Nl3)Z@}>*}H|GJ5xmrvJ4}s-* z8mw;jLhJ+N`4B{Sg2UQfpGqReUV&C=KREnX5K_j_HR40Kj~f7p!^1a@JT{kl5Fg%ZlmZ+3-MzMc@%-*0goVq zDL{rJqk_YM$^^p_0*86HtMTlXRA>lI-aFv!pmZ(xjirk~{C6Fi+-=$1=<3d}t4Ee0q~Vy<7c&!6RqBqO}BW%n1kD;g;5GoO#4N1}HTPp+|Ok z+j^*5!7tc^`K>w>G7h-Mc6gGX)8YmJq}#wR6j;3<2etA42Jl|6rnbRO>pi`4BM$>D z2{Az$GW2OQc=GEY3YQlF>3ARYm!6SW!FrAJNW97$?+x5&CrmlY_|T z0Sh5oq2L+Fgq=2ZdM*^)giQD^&12zfh`D=UhgSgS`Mkd85c#0gAv8uq2Z=v<+p}y9o2i84d3&Vo} zM=QY>3K#=#g8tPO@lErbuf%rlHZdXQLpZnQ>Rr0!6nWa`_?Wn{-q@%14%R5DdPG6*#9iRJvV_? z5Z2}&%W+^E3y8Tem%9%VK8wV+2|&MQ&%9Z)3LI#LcY%u%153W*BJRvcU9&*MfI$$0re^1{v+2Rr9nJR{+TweXy>`~`m^SRAnc zq!TQ@bP1qkpqyAXX(&Ps-%FT=?gpqHO1fAa3+&`Nw+H+E&}Bl+W| zkD9+&zbiGc5IW~JGLj8a4CF~q6FMDxKI~^?ZS}qdYfM^zq8nq5`;>9D#?yZ*h1yEv z3?h8fw?0x_Qu?Zh4K+HCsMUcVclYX9CnpCWBYE_!(W3eVhvLft#<(Rk zF)~9oLEBYZbo>s>Zy_P_1Js2W zt^knX3Jr}pu+?{3Tg!X2=H3G>Jg5toL&9|A&EW#5(C$N1fBDLl)6(WmVE6*8wege< zs)w#*vVGpMF+xpFz(AnMSJl_I9UAfZiSs0ii*X zFIJ~eale|pSLe)3#kZ04tyFkR3O_#ZmGX;9mxBFZaSPX8=ggSblh1R!@eJ>qFD|YP zI=ofzVBF%@>mtfs{PK>yuG>wM~Z3{xs`U#yws{$${kvY93oECRC;DO5;_;+ z!vZI2Cj=Qltz=*By0;K!IgklR0<@iAS~vqN2Y#2`12_wuh2J)=E++Z(1M7kDdCI+y z<}n2FMdWP%B44`nAqXPShy_xI{9{TC;TiyNRfV^{9Ciw8Yaou8FKiBv_8d8PnKw@` z{C{HCAISz#!TI6qqUiYswRsD21w-62*}A)&8U3 zE|yWKjfN@c!&h}63J_QUo=6cOm4EO4fgtO2uWyO8TE}}ip>X3l`!OSPcDCA+zBpvb@U3 z=sQ;8DPm#@6=78dTQ$3rMJLmsz4#~Oh@oqQYNkTA{$owMy7#T8C2Nj~ZH?+1Wv37% zMj~GVKgy_|7H?S)Jde>y*yQ{VLkUdZk4G!-<(8)(6s4rt9o;MvZTUE)(dtpy37Bh;9>}>zlV; z*Gy92uY=o48ZT2v!_*cfntJJJRb7qTU!E$WfSzjuxWyCB>;s2YRK-(YLNNl` z2F(L>Blpso5y;rsSleg(95Ll3;&;^>+e8~4ijSRqc)+^F{CIyaA z#!H~AB)(}py>M_~>6^;x{@XpfBr7_|pE@W4@=J+q6mj4}6KR)3uaUsPUrE6>qha7L ziBt#QOiFemchp7){f;oHIU%4Q!0QOTlNN`)gTRL{NpV@OQ3tU=6Db5gQR2AWz>ZTgWD9JtS6Wg7l6y z;`9Vm3VgQVE^N+7*PhSpG$bS$6_OSP4J76fVdOkSa_M_Ld|;gMV8#=nwe?d#<%WVvC(>*OFMM1JCfLTK2l~yQD%!!)MznYDC59GkfN1;QPY=z5%Jk zip`skv=sbYTbpDhLl`ZvA`8O4bwiLfT-6r z`h33q=DX*$z#*mnt9 zO?N2!^SHQ3Fhm#S6%hn+cwQ!F&cwOoR$BhwN>;IM%|R&%4sH^OMm%2~ouA>p8gT*` zwb*VZweG8o-CoFEOQPMDo|f?Yh=XE5eQU3*vt)X=G%FB8HA8=)fWK#@ogG`0a&z|i zO{YE@X!veQbmprSztMb})={yRq_G@2TjvTP_~C6>Vv|MhU`^5@LJi$>Y#BI{y^mu+ zp-0fZnlG>M1v%QMRT5~=(4ZWU0qWv~>NTbdfq}TUlhaOzG#omM1P7ZKx%b|Se>N@= zJbxKz4-|+84nQ}@wdVB=$dO~gA-o%Y&GGe-b|(z(F$hvNwD>+^WxRC{*iUOj$Dm2Le!;EcozTAHiV3#QAnYrN_HuK?Tn6O@WAZBU@#x;S@19PD! z4L}M2ftWCG<_2`UlIEP7l*%n__3qO=dk)m`&wJ-Y5ZZzN)fPak)|{f|(BoHf-!il# zd1ilgux|a4DaVY^SvXDmdIwc)`%WdFKX&fD$IV@?R#;sTx>aeb`obNvWev`&OvzJ=ID8% z4zt}T?tAyneoS27dnChWq7%h~HU2HUhmPMPx-=qDJ>vkBvf`fUB*7GD#Dw^_$@pLQ z?+)+}1pg&(W|svTwWx+7ZP$rs2{A+X;E=rZQgD2xxK~cjZ#0$^4~WnY=mZ?Vr1h9N z#@EG+DZ(wP(}2CB-Z}tj~gVxjgvv9OPX|i4EX+; zW6_{2sSK4=}+|0!0i*AvGsc$%#__B?7 zQ}Xy@egY*^?({^>-@&3q9gKGZ6GVHLI3_5+LAfO1z9b7m(RoQ?bhF@~WFC@}{S`G~1;Q>4`87hZI$ajZ`CxEfV5q7R!*aNZFwq(u2|Ac4Kdt_tp(o za%4m3MKz2dE{3c7wM{1ti^StpbX5d@=a%v&C}@l_nu#Z0XV;?d>c4%CmgugdnpJ`0BD;YaMi@Ex{?O?RCD6}?ty4`${tjiq%Jps9;=IvpO*)eugBpnJpZWQseqpbQtAdCG7AWKe( zV4BwfFfV9ULwe&_FNeyOq~?t;k#)l!&}Y9+3Jhq>Z4cy{W+hG!y@iptOS_EQ_$=i8d) z!OW{D0*UbkKG5X$m)2NFYn($^FrVwij@wNj>R5J;a}W`mI(=f^&J|52hzu*_Mb@;U zI=eC~d0wr!jw-d@cB#wEE`)=9N-mb@*BAw%K=fpwtERdc84tXDLCzp<#X1%@9+*xZ zp?qMH$--XkN|9`aERS+t5{qQ|T_wK}oif)N?6qH;mZ#(r)oA4Dis~G_()a9<3ldqX zZiYRK9UFGbx@SOJGvIR$-V|SindQ~+A{)sQi`PcILRD3A(gwOz3FO6r`6G{0e-L5o zClSsFNot;SylE81NDPfaD}X(kKaod+{AYLKffuh}h|&*PG%Q;US1=U*4ojEF*1kP~ zV!Xv|3=q0Dabd(@WDgN8yT|G&i5Qx|62aK1?=+oG#-ja4O|bCEPyy}YS<(V_!`b_f zzreJR{08+-T2|wh5Q(g8D@masSeG622l2B+a8hD*Z{8R+Fn3l5)n!&LJPR zxceMGt6tBAwy#u6yfTFT<`6k-V+zRF|jJ%o_C-})_XRD4jWgF(^yJ)K9xStqbU z#sR5cP>jy7D&l#sAi1fanjc+f-dg3w47}|&&)J!)XdL^$-ozn^V49B{+BPL7RE3d4$0g}Q7Q1rh)C{n5gN6c7FwPPSj3s?FY^LJc>6k5t zzQQ=TA$odPg&yfF>+$A1><9*-}Z8)Inlrf)ZT1!3j~^L;P{e zNRaP3fRV7*$(!(7x2AhT!q*M$ik@1Id!(RCRR4}F;Bzeo7=RJ7ux8;Q=hpC3Nb420 z4!g_1;CY^b=U+LF-K2ImWvAZAzvx2FH=WN;Z2G0`sP@Oh8he#Z`F_dm>=PEVM!8LH zeORlCyQGnWt>Y||5Ky$=NEkg1Vq>ZeJ+PaMbI9E`*qBXE7ADS$6)%D+y(AVf6>1a6IX&AkxSWZyCFdQzJ8$VoAbKB!@i{W^frrG)z3* z2!|&FcPZ)meVKvez^SUef|OY3q4DCYf+A<0apU@Jo)0KKPEkO7cUq4MEo1nRF z!|x>O5BM_`M3igfyw$K~mEW$0hgpT6sD4eRDtE9MA*rdmF4BlN(*59ehdQsq7d3;!M@dXkPP;hzFQk(kQHHBdM&nqaHtToSHH&5NFfH zdZGsm!Gksj?;)b*5McS z$ejr>%9Jtg#)w#q90butbV@1%?g`Fn$S4 z@TlMD_KBV?fi}lJS2(RW)U4B5>d+^=x%@Hmb6)zEEF!1i`I*J%m*eHNNZr3fz1xQ| z;nM?wT{g34GSRK3Mx^!vpg<`uPs$^@F7}Nn|Udm_t_ZFT}i2H`bf6 z;;?ntznAO#L447<^J3CYhhWBMmLx_SnzksqnsNNrhHrrtSmS2=I{68tv$7&j^Vt9A zn{<{Ue%a~9CEpHBCwGwZP_*@LUtOKbF8%NoJoC9PbVjkmdCx=06g!8lZ-OyL(JjUZ zk5$<;FGKiwVtgAbD)gH8yo9AOC-cb8(C-dE-&y$Sh8>zJQAE{Z6J(VNclB&^B4hL2 z={!mR-e!Vx-2Z&sd0vvE`|}z%CECmCfON=V?&IBkBr$ApM*ZD`w)1(6IIL2NebGHn zj=y4b{fT#G@~PD1-c?yQI`zilSmAhL_tp%Rdb&(SBhH2Yv_Bx?eo58Cx#uf7G4N^b z)&d?uk3NI1?_>7dA&BQanPZWJB_?ScRtzHYc#F>0H%L7CN}M#-8&Z40)o>KEXHw=% zN>Cs<1)iqQR(#$-blbib$DXhyy~hm_&C!~r`+2JP6&lu!T$XO;xrHFTrEOYtl2De3 z4u>oe$f2jjX#D2b_o$7}EhZSPO`Crp{+LZ6R05>WZgo{Q;DY)8H2v{C7d&! zErkBvmYWm>NUv&_p<-z@I%880N5woI`^5TfxQT~xH)>5IqMc}z3)_(Fsl;R)w|;;( zFF-Ahg$%3WR^P(N#Qsa+Xto#<&ZceIT0f(*>v&)WZxhOStq{Z0@+GzCx12VNIZ55Hl~6SD#6mF^!M1&P~XK+ z#4vejzr5d3a$fxL_W)Zntnpi)Fw>%w^3ycUuV<+GlqT{xv34((V-P`k6ZweZBM~=# zmPfL9o9xfX{LxjS-|A#jy11FU>ndG7KTQ@YtIGq8n?+ED<@XD{eE!R4lHiHBG0~31 zirQP^Wp7nQj9fS>$s>$r>*2n(`e+nkgb!Gq(6{JJILlw_t!hvi^_qWXox5oN!0|8= zFV#m<-HMD1KMuRmFp6D4>Me>7{*9-Vbz~0g!EXZH8llHW;jf6O0na3NCB~FLrIb2e z6aXXL+NV49E>%Y&8&!K_CH=+mg*;|S3!+p zc4C0M{{U~uO+#>H*o}pyhhSTDSH5bIluU@JXJPj}e}y^uZ|#E85PQm_Npzbq?!3Jo zH)b`jYu`xcui*T!Q#dgykuCyN1c2j(J~D*b{G}ufqD$uTCKA!r|F2sE>tZO75VScuk*P zO0|C&QH3su=RVznpW{&O;muztJb}||dQKANQIWS*j)~nAc#0f`4HCqj&U7U>(r7%Y zQ#a-(QvK&{ATnum2)KNbXZnv^moIOAFy6BnR$?t3Tw#P|ZindSb#mV z815{n^PY83)|w!06KdpJ08l(812xiSCd21$t)5(y*PHIl{dV+CP zT0jvBoc2~Ur5N?!+#S`&9XC(LFZqVIqT>!m_*Kze5m&oKclqNI8V`%6{e%!kx4}&d z{&_1+V$;ZDv3+-aZQd)A+PE5P@+{`f8_99h8&<`+!tHnz7u|kcGI!3Ew48a=wxi0u zKh`*|5>7N6n+#u*=dU<>&;gS7xD6_Q2R5MTuKXaDO}-*_QDX?~p>@;y>?$*UnS<$!Qmf{H|5gcnt zLM!paQ+cT$k%AlvLH8KEx}T_#$PCC{kpF9TpxY^JvpIu>9tQChgEp>DQr!A3?P&JS z*D>9d6;$8pm=ACRDVAe22I=r6C0$3EA}CBP?r}(x&qStPgF9SKwuMI#h>en|VF@_B z{OC5g9qny($pkRk>< zmb=L>f7etcN3M41InhTO#sWy?C-3GJ0)ULD!vDLm`v!P}g!v+CCWb1LVel(O5Ufvt zP?#4)nyf%Hef`UvjV{ceSM$9enL6grS6LgCL!vBC>7=A>9wRkU2c#rd`b-F4j59fr zjk5n>a6ia3Muq5nL$lPGhW)=^ao-4c|8VJR20zPg&o0TSgU?0@lz@DEizm5}3Ff^2 zzgIl73^ifnL*FOj&St&i-^1y7By))^lQB&S$OCqVL-$dA>rSUjG|~M%z;;x7Hd>S>GUAQ;zJ_l zh||cwWsNZ+eVSps*l*smW30_8b1kp$eIfsbnKjGS6(x;L)&Rs3BWlf1Bv22*vUB%H ztsscek0D1XdC34d15c7B4q`+E{RhjEq?Z7)nVLRNU)Y>Jb23f-=S6j}?gu9SPE;0< zkI~`u9a%DFQ8|emSc!+ahstW+xq9m=4{X_iBK;-tkYZ0(A=f1Q-|j1WTe^Q5t$J}@ zA}*U)g5KfZ*&eouDz&iNv0lOce{RL?A1r1v5RuTj4nbsBiUWpHcB7l{IkdLmfIkX{ za;L6Q3%4uY9eqsej}^04PCfrgd#rhEjpWk)Bv?X?VKkjJBdIi&5;_i+^(! z;zCpLog?(~7goxRu>#y9FG$KAeQ4;c#H->bd?uzK0OyuJ8~xw+y#Jykhfm_J78iI~ z-IX!|@kL$1`I#Z@+a(T?C`&CFq%OEytmyh|&*hWlYBIje-27CP58vNoO&60kMy}(} zC_jd0tGM;CyfVfZv_o@XHBIzP^_-C17n1p1>Y4LB71r(-W<}Ck+-U`8)cvWU%0&`t&fOGeVk&A%qg)f|zRJ+c_q=7FhsBOb`>j~1TX4x>6vN=P z$vsh%w-#BNWX*rx0oDzPGF`PiKPcLWvp6A35j~ z@&1vBqCdGLWw2vVNOBd68A1+wsj(zA%c67v++yYC|F)hYN;n1;lHat$oHY)0K8}W6 z*n^Lby+&4IxHvG5TDo}8XP^DYNN<=$;{#T% zONXXV0tB~18l2X5xs_YqyV!kQQ4|$E%CPod^Bo!{Eey9#ID)Bbm}H9b0!ULb=JFW^ zB8mpN3;VasdVlw`g=ZSdcAR%b>;0l-r|R8(7CM&nQ3_uEcJ5{G?Xl$aLIB^Pd~!KLc2jyvF{ zj$2Wr33BUXN@PKPM-o!+He@FQNBxfvW4k)^?)P_LmqzI#c%lp|>s=D9GmTuVL;0a^ zrZscksvy6CjWs>uwU?T>xOxWpqy1W%`IHaVK1lYdJghjsgxwhZ26><`=BhL!7}H*q z9zT~yq6T6W=wfr?|9u6C!#0}8?pCairfz-_mfB)|Re^pQ*F6`Aq=Sq2jQ6#z$k=)v zD$%`kdHr^aHikp7^pa3l)ig5_`ds9+!44?}1S?m1aoa5XEe#u#(4>7C?7SGqtTak$ zPhHRPVU3!w%l5_?-lginl=Zmkv2$f1T34=vw+Pt_c{Cy0ej@4rCSY0;3Ft`epEl*6 z`;OYh7M5r$3gBaUgI053I~fr<*%wH}>Eh>?R8lAIvYxQ9OE1tWTw3Jx-yILcq9)~s z%`f;2KSzL5GRJ1^zxn0e596`GE5~1}2ntd|$>G21hKH)x@5%ZwcCm)2w2iOS4^z$G z;(Ehw-?2a_*V|+;P02GpiMmm6g$E10ST5PAMEv_8uO}utEWHHFVaTB?y|VtpLoe9b z=WV^iW?)t`u$@_X@3W;W`)-5bJwXSg*HMi6{($K1mF!KA;&F3I>TaP)&72U%B{8gu zNRHOd`jul@V;Ae$>xUj-XYd9)d`>rNltv9i(RNgF7>@)+~FOs(U z3U)cBA)atih;91it=B7iYKE!Xe_R0kGN3OB7tY}?UAUMIhq4KoOQq9!7R_liY*_0n z_GQk_kp6ABk{v56cyshzwV1fHq_Ld?Q^^9qr5ph%RGT(aTG{@joZd+8kd-)Wjra|R z8=UNbeSX+B#=;~fsPEsDfGIG^=pK50X7EMe)hs!+?KnTxSTd3I!cMD3W%w4Gd1w>) zPI>di3rz_W`6F5f>y%~9t}XrGn3uR-{ta4(%Z=sY&oj*j(W4MDTedT2URgDL_D^>I zQ+Rx~)yQpvI^OF0*L_v->bSg0E?bDxb{m+$~8~+?SBU#CBl|B32zgg!)bj%CdUer`($fz7FOZ~p}=i6hS za0j72Suoq7znkajiXtydW(cyB!xI@PHaGEL^0*b39xvH{l}Km2(Vicu&c%s6em6e0 zI#Rbt9E~0?MY%|bZ@h;M2{r~W!X@CUlnKv=CXG5#1 zJAATRl98qoK`-U(cdR}#qDgbV>`aci_4SXzFOPb&9b*O}oF^>B#0t;U^7mXe zD#Kv8b}|Kt`uInP;EX{5<<-Awx^MPXX(aLDDkx^Dr=-fR7Rj09v`^}6VcL(gr4P~X z&TR1xsOfGpPWy}h*tyW(%u%6299_|3zkoUZjT|qXFI4w@zTD}Y^DnlCQmBA)B1FXY z;--wBev~)t(|cuHSs(x2gUMo7nIsPNb&@e=tz{=27%>u>{HEu1k`pi=epMj{3GgoS zy$@Kh>ai?zDHwB+R9%)h;9U3gGXh*gODmf++{dAGN|?>O)YH=VE&DT%;cum4S-bDO z63RU;=`@$|v=~d(%&0_Oc`NXxe9ApG<{&X~w#vajTI2Wh@QWqn82_f}m^GJtv7Rp9 zHqo!U7}@8e5JOxWsjgjx7Yw;`!lg@x7h9ebmH9RekHzS$57Kx-ZJ1E%eG+qEI$4mx z6KCGS+v*D^OZ`x^0Ks-73#_2VT!DX~w_-;`O<3h%&-sC{j%NuuxrS?6gmQC*)Mz{q zb&SF*CyJ?iB_DF7rz)gVU!+WEG6$*eRSpdW*iTp;t5-77sYkV`e$nsP`JXBN7I{^i zp=MmGQ?TfA%1&$|VDR}E^>gF8@8p%Je>2islA}wi)Wa!0!*|A4#}z^Er{n)H_T_O+ zoL$>bt1Wd!>w<}Ty78XMYfsl~N+~1kdKJW9qzxR*tkNzr~RbDe7#HEYYH{7%je z@>*)bipA(C89f7Mn)RxN+7LlwK=Ru?!1l{BB|`eL4lGP&`%J8wCFV`` z#WHpiZ^c{W1l}+}KVn6PtjQ^huyx%u1`=KaIZ4{T6s@6m->^SP`CRX3D6I^j&9-r# z(NO9a`V9^3=DKGGI?wHBJsxqEMp#F`J4m%5wiS?*$s}b|Qr5~Bq>N*+>%I>i(mOog zgNi3Q-Q#nl`lRk(RST_OGi^Wq3>QEFlL6I!d7eLGq}uIb`>PRXXfk62Z)>mMMq z+v{#6?N`k;k-HHPfJVWy;hBZTC)NR9f#=>`U>5pUz??m)o@p{#2PS%Uz>WhM`)BU$ ze)jDF+xEr)()k48W0G+I)rt76`L}>1LMwad%X)A}>qTfyUD;h^yZl;il1ycse-qur z2p4%fr;lI^j@y2XJzxzLB;AdTmNha~pegc8(;C;b|UJ-NGTpYm-_o*wWGo-XC>?RWauk^Eejw`Dh%G8DpM@qCDx-?xU0HJB34{b8lN z0tMr}sEn^uxAy_vH@A8pX7&8V5UYwFRDng5TBYjEnf)n!jJfg@fy4WthuAyP?b3tI zdxz_l9alregF8r9c3?@X>uhR8I1I@pDnO!{p@Za%7`IM#HlqY-jBvEcKzTYLXK`+g zVQGBY&jTl&wwe9daVuINmok0!>58#7q`nACB=h-8t|~~gF1n9``)vC#YfP%y!Eqt8 zR7jf*M-^VdT~G1mlT}|-7Zoj&MiZom_zj3b#Q4z;8c{Lq-}dJ(g1rYN4v*UELQW-0 zhj+aw6_;n-fF)_ya*zUIP^TkPqC~L~YlUSAjOhMsQXdxNrKn5&+Ng@FBOQQfsl#0v zYS{{ub9Z$Ze$zJiPRn(|Btxr%PFFZjC)!nYRqH+S&{tkpdfQsGZlHx$uF+3EYWTr7 zEN}xV)*Wp6DSWY~nZ<>q22}kfzjr)7y(pH|&_R2wW=K{GFqU`oB5WpZ3n}4zKE! zDIsYyX-P~Iv=`Q=(50{NshH)ai;DXtRTZ(D%W(00)gmw96!uLQOR|-=O3<`{o4Qg` zI<+?BX!^)v@8t@Xu(hf9%Z2?t{<|*(LP)J7{YPgw^mnoz1#LJhe_MTPlv!cWi0g9I z(0d}gktnMynbIdEt0-Bj&DMvbOn(OlLO#xWTE2vIh)o${uM0>>FfZQW%6|UQ1Lr)0 z`bTdHei&3pjqf?A?GiSY@w0O&-9G)`Xlms!qtoJDN$aBoD&*3;cv16$NbOUkX3d&Z zVxSX1XD|tB_v}tqu)=oWE%r=|?Jz92LB|&z z1}L_Zt#Qu}(xd%O;ykvSoWwYP>9=6+){Zl(P2WWRE7`!A$n?|9=45$Irb{n17*%~^ zRJGv`O?EPXIGRX>T*kdlE$~=Bh(NPZZZD%p$|4&fo>AO4OO&})5k{+)MzT{Zrf}>p z5_~9oSv-D|@i`h{Iqg~1Y%>xxAw_m ztFOA0@$?mp8j-84!0B(Oi#Hph&z(#bsi)=iBkw?M)@+eKaUbCBCo!(kN#Cm%EoH5~ z()snnw9`FZ0fna|n*+amwx<4FiM?bA@dV%GepT{nH8%GQX&prDuHs?a*CG4YvP(^} z%p!+DD98ZZa9(2b$E^~qbbm&5YY|*yxePxz$_XK22k`qu^eCY>CRIW0h1%pCzp#^o zp|`%RGd|Q3v)4E!;g_q94QB>h3|}u|*!4reI4BF5G6j0T)P?%bP|co$J<8CK@=pP? z#@ufH7DVQCWO^Ou=*gbkZK3Zew{rB>sI@S<=J6+C6%W3)l4xhE4M-0n%NxDVf0zc7hinLI-; zvYa2)9Y|0BG0=3nei)&*d+D9V$9OKqJ3V`^FE7Wm6?)#x-<~ly-iko_;@(ablPi~d zn^O~5J)LEiULxC-#>=t+Be2YNmKhu+Cy@ojEuoPj@)Y#hA}}LVH6+tB;69TKY*dW% zXJMcHi>jK0Ck~5q&cXE5TS6ESpKA2H{wT0@ov#$(Yat`6N>Nitcpq zzD{P0N+WaLZ^v90KKdC=?svI^tyetvAWsnvy=>_i=YWFSdE$Fq-X4Fbl>TAt7<#R* zhrU3sM*S~mn)vLi+|*umFKTLF}+S4qo*!RzYgV17-4x{SfVIO*^Q+gZnp*5 zC+?v!s+v1PmdU(~y32nc+U?)72pvu7C}d9ILD9Gz9>E^evB28$J$4!6oyr)$)B=%S z_;9++Hg7?MnJVwWKz?RT{3WKKJdeKGTg|Vc)ULtU-Q;)+@a7@?vL~|Wl@F(n1B=|a zrl02S7%s~cFa5=jnDfCl!YjP$p{9Fpt_tG>@4^Ks&3;R}3cfM45*?d_Tafz*)p%qe zd2_n@iW^Y)dG%u6Tj9wi1ArQC>X2o<_{TBkz166vqAmaUvAJkZk))iy1VR08xSl*@ zcsyR}Um+M@CXa#kvciAYXcvtqQtRNHB(v6l;;ng2(m{oxCYlfa&+s7ZpHMPrUhF}=|I#v&r}!ArvH!z#b@xZj=1bytaCHR6^9G;=br406n_4ZdDYQ)9(f2Jx z`lCtG)Z`J?6BB=O(P!5l5l@t>N=}in8U|6^Ft42W2pt?#?(I0t04c)d{dWX0Y-SOp z?NMfrxQL&eWPDs7aWA27hZ)d&kW;Eio+>(9G|T;wwoFL zo?ai>vS>M+vqyV$|3+*ma-%XZupp)J+4rccBGVaWQ&IqJkN^Ux-8S&-6K~y@eharu zMN#8|F8W4d%)*EY24dSTdcn$MGV^mmUXg6;nIDf8_3jmz&)y@QJy!Wae7gJVwT>#Q zbs~ActlYVOn_%XhBSd85ohNt$;eUGEU{QQa@stl=msXi~+8&hX(&*2(WrhmGMF!9$ zrV+abazy+a=umA6c3FS#_vGsyOrMX(=?J+lHsh|5=#Zj$EH80lHNrr=^C(-Sh@F2A z%jez;b?_GPoYw?(v2P(sJyO@gUXToJk~``#z?*v?Hz(ac&=WiL@`=SwC9-A7Qv!vu3o;ve+=AjmrW20{Lg}iR(^3SK* z61Be{I?q^vouGM0{Tm}UQjLB#Q&r(Bg0B5#eq-yhA{n_R41!=E)Wc``Gy_Ev#5azQR|cDJ4gCScdG}7;)%GutlpPLNIr*!c|*jxv(a1=sfl) zL7$Zus#>g4@HT5HY}U*4A=Q&x2cp~mA;4?}#umIKeZ0ei5lBOtI|fzxM8gfprTL0h z+T9&vn{adefrOmuvk)QQ(sQ}eU`R)-Nklu}<*P@%RSD8*K{t&*4LuW%D{ z{qnz-7pV1BcJi}(Qm@KE+C!Gn1Tk=k&d)1>I_w!dsy5aUCP*zRF=6?YvuK`eHOHBr zn~2E#9YMr-hRFno$6Cd7%cX-v^rFUmwNr)iw0#)O>M_x{s}}!wCP*7(t&B$@me3|a zH?YPtgxPoJ$7|mTd0yt6^)0Kc2b}wT+os=iBgR^?0TRhL%MLt6hGwLx&1pHi;TmcS zZLlCu)!_~|u`nW1EM$IC;3}a(hUz22%sKhVM?!)RROSs!1yp_#tt4$~I*+zzxja%t_+8AQ8q6>X&a6mW_>4PYGYJXie_ zC@HcH(;bgCBIWQx1;ZHr(2&zl>HDBxF|D3kL?+N&Kc{Xep!aMQEbam>XAiaLH&Qg!Mj{k<0nlg#Ux zRsgW4sz?VYO^dyP0Vh4S<;SsYrCeKwyQ3e$Apfdqyv}_U#_6wz?jcJKL$ik`G{XEwa8!Ee9{}xJlwIH%$%>2Po zMS!Dox#S-Dme=Wb?e!S04t)t!DF+gq{d)H_gW8P_Lo?oqz@Sp`-Sm_U?? zf9k-TFJmEuO7JA0lghkym^+r958Zl*-DKB4!}nY09bBQOXpN|VnyTi{DO8;OuWkWv z;mo0E4zPe4R)1+_>68?*xv8&OY~=^Xt68%5m_Vlk_ogV^I_NC0S)J8p%ul0S`#$); zAoRC2bqdigY0!z7>7U-c;rEs|t7Z2z*1#G`Ia&9X?M!ByXv=y&4PrIM!L1&uB_G=W zFTtgy5$pK4_M+5=irv)xVR#YO)}bXK%twbnZD=hT%ezKsHG)!5VSf!>r!GQcCC!e* zuk9&;boMn?0ThXym}+qBo`d3uM(!#D;j4T$$Zf3(K^{hhr-C&nX&owcK`j_ zD4=2%`r>Psrwxfq9W+OHc-fe@r?*9*biZ(0*bANK&thGR%)T}jof_P1YFfNLEyJjk zW^x^Cg{-?6`R1CMhQvh7)Dx69#j*mK8;1oxj()`N;-yIkP~x+L<7`doE1KQ@X;`&P zZ!aY$e3^NgEW@qVs=50cryoF1pdY_@LAZi6c^00uj=YHhvD9{IP)sM6uHE0%yy|D0 z$F*<_eX;;L^LqN|JB3;l+9QV^eHZWXnDKn55<#-HC+LiMiMjL@ zJ&d=C)g9fR+!fsreV@({dN4AePIQrml)XAgwiYJs0x=Hs;bCgp88{19UBY<)6pFU# zWV>wzOJv*NY=Fso_sg>~Tr~{B?Ks{ale$3`I14?~f=dm878xfah+^uY>lmAQN7HPz zU{we6gxSUB$4{IX8Vw4aMiBsLt02# z&pNL5a@gRgSZFWg{p7r(h<9V=XBbyVi-%8{PsRaOSY!RW3 z&bG!BJTv3NF#93$+YA%?8%G(7$xHpaUz3!=V92ALZHRnm7iOEH?w%^ij6XqPtPTN} z`h2<$5Z($jA4w9MxZoXhTh%qo|66Ief?DOH)0-!mefHrXG>2!_$+xcD)%|YiK z0va`<#H9=O9l^S*jZ8!T@X7YX7M>2>^mQdnl{NZbT%Fnm*hN_vORh|NxFF{(wZg_n ztVphUBkCP-DLm7^E5mU#-tC!ZNHzGf!I%Ef z+gW!X^OG^l$M7p;!M;UEt2P1FRVeS2M2w#mGun##^u5M?CecgjUgK)<=xuz&dyH7| zEhLM~%jiPU&E~cMmpHS(K5tp`b?0)YrCw#4Zz?>^?SJYlnB?ghah5(0j`@}Wumcs2@C!?a~A z+9e;ccWPL})!C>G?C?CQcS%X%>B*!&@5N>cLkHdSuoTRxFqv0q^4>2Y!sg2}D4Rz> zf8koiwj_=awdvSQ*y^f%7@%i$gOL`6-evI#Gk%`@15MpmX*p3(1DY$R zpFIifA=4721fRG9k+ zqMA?u!g7J+a31S>c8iejxJFvQ9l(>ui(L1c-_5dpGtGgb)Xl6uX+@7Rem1*mt(V9_F{sm!{!9GpeFK*m=8onjM( ziif(O+zsCV%-{g*_;%Y5AjrBNA^(VS!DvB$EPVMzSa6ZVr)vxprW;2XOGv{(&?G`H z{sZAdL^g*rtJ=# zB5SU!f7{YK0Xl0ZxyYMTrLSzaOGB6li(8l<*&GbsQ;=_lUhF^>X|gHai9P^jjfU z+x-^@I!BttvR{p`ogy`NfHGg6g?zP|gI$pcdq(qV-uA(XxS}V&eA+nr z*^3IdEZt1ACkMO!(E{9@2px3Ye3MH>3yap z-#{JZv(d@_IV2ng8I9obLEXS^N$%i`Oh3YHx>4QNggw0$-^AW2IDW#;PgLh4h~4y@ zcS!0Jfm1u?ZxNvL2qsD6r@3haj*>m4+N59D&KHR?li7=)LI)6@3M|PcS!NcfCh1b& zzqLq>W~kF-ivP+X#hdy(*rH{OBK8#?+TN(#ZxHLsq8i`Ro9O}7vFn`Ug;iEh-C%+j zT&_Xai_J#gQHoi+F=!VJLGxp-lDb$_X*VF#aF2HWO<+3av%{RBlmQZU{b4QH-=kf7 z&XVn{?q8|#BPu&-lQNiRfJ&m|I-wI?{{Yxc=e4kipj8`hn0Z{D$(x`qqW%XVd0r&} z{CormsOV$`o&0?N{Np;7BrPAKzo-vxA^zrG7Il=I<3Xw~xJ# z)RZZhk1_B1G7KJh?LM$zCd8xdFLniOzl(C$)qDuo53p-7Synfpr7V-$7m`bQ@B}nP zyroe&pn)j}kRon*&b=DFZKgCLAcSFl^k@_ARq#tsjSC=&{h^F!=YY0E&%u*aq~b2XHo<`)xPuH9b8jWtjcUP-ezi+%`fz|M%<3%ii9nNlJ1U(wi}}>JqCQFK|E#MqNw^2Z zA@5-a%OaEIZ!7WEV5^JJ8Q!iJ7j&iC;^YP!Bwqk`YzDD}Pj_0HL3_-vokW;Q?PJjH zw=zB67^{4gFW8oVekJAX(?>$w#xs9J>SH)-HlXO2bXU@9hOd~$3Eym;aNO}a z3h-?6Df=YeQd>`zDUENjbCV;NSLTL%wKG`NHWxO$kvLLkn;?D1cBl2T<#~%*>^)zA zI?H}OUe{pM$tg?grnFVL=<_gb7=l)2H2XFmUw2Wu;u^H*!dP_9oQ9x*83F9c^V|nY z%J+hzl0V@8v}T&CiHWwZ+j}}hU3FsbE>iQ~XNTOyc$1jH71C-n zZ?xDfHzl9N!kE8*gRgO#6~@bh_b_T+GG@|ksvcGiet&S;=JDa<-ZEx{Hd)?LCZkuP z`CQv2GF6!h;US_m(LZl2Njx0o*PhVR2)&}-HZ<(FPK_I{5R20iM$Lx9@80fp`>h90*34Z&>O*~i@TBX$=h zXT4+5E#s#>k4@=IIFs8w7|E!uxKX(pS(2dYu=ILIFpGiRy7rV;upRM=7^4w%$T@(5(*Bu_OzYYdgqQVNJGDf`^zs{!@RMH>+^`78YYratZ`j!A1 zR6;zAL4R&(I;itha`SFflMVowi^(0TGXnop4@leor^n9gv#SeljO9Y;~z`1iv z5ovjmm_!;)C+?zcf-)j=P^xKAiKeb4<7@)e)(%d6o4Ns%QZm}ID*98voy#N+)}$Gb zP;jM8*OJfGTKy$`4j6Ql0>6B<7C2g!F6hu>k_$_D2P5eDJH{Okw&^^)DC1?@n%i=; zoDz(Xp8z_y@v%3~1dX|Ah*=)6vaW_i#i2h)=DOPVc%$^1IdY--{d6F_jCb(*!yc?A z_ObN*uV>63TOw_^T}VSozt%i=xnNK-r3ZWXL?YFEc9f6BRAYN+n1}w-bx17|#mSC= zPl7t^nCLvo_rLh_2_~btDX_#VL}mUImAgUrXVfqDYrjY}rP>?IXc|q8|EU3Nw|z%@ zTy&8dB?VpqiuBurcfeF+Avk(k(^1a~dhzN=^1zBxnFRefw+CBfNl*t;f#IYgVcP?s zjUJY? z1))wX0~UP<>J~TIe~J3i+d*r;{|(y>UGrVs_UDQcT{Wt@X}5n%D-YijbGS#oF+a4lt}|S`cn?La;J5?r&r}0ri$qx_IpLo zX}ulTo*9d%WbHFdB#Fviysx~GxPtGL^srVjZ5#kwYQrR~1W=FO9R!Sq4I49QotDff z2nio72})l;-s)5ZaMpeIpenHznY{gu43oKD$DP+c>-Nv9C_pBfKa7h_w%rN_HdTd= zs4jKC&6m3enafD0@y>$Xfs=%PQgawef;3qD-Huw9{rgBO9{4g4!Jk{AC|@{sV}7D_V)oj+KBIjbR!D3m{0iL+BL z1hN+tDjW-&j_xRO&U;7L?pE%Nu?ELN5Xrf2BUiXGk_>e?suA?TIn!E)sW#U%SH=VQ z|BhjbS3D03rq7SlY?~pb2hG_tLU4^!`<#CIw9C@!QgqAu15>eOBAr|Z1M0IY#6<(t zJvY7vT&m+VtW?2^1z^H<;(4OMVCX2F#~MOkGJeAOL5pwRuoC#a_8;5}v2K*RQXQcC zV*K{CrE+RL#OfRM>rn@7{D8f*->Q<5S(!hBL0jJW`uRCoR0umULcMwv@uMAWU_Ft1&rR^p5^}#d&Y_6g6?8^~54^NGtmz?Z} zhE$Q}T{!Vq460EluYskJY^*Y~8gEU_F}3wJH!a>oVZNJ0GPQtI$hziW)DAVO_1$)C*(f;Rgqf;@5Z|bW&~(4%6ONP z;PMW1|6kHF4QVYkGFCpS1D#Fnf4&+N)DdSPnYyE-L)f=KlA_obRST&~d(|}~xVBfk z4pD3^)V^2$C@K1B2pA_&8NAy}uyR{QXb{^`jZ3nW7fq$gvhLsd>32qZhkjfXUsAkm z#ck|*eG{UjKa9ea4OH2#{Pb(Ko0%1BhWP8zv{9S;D;sj4QXSIEf=@-8$f;CY5lUOS zR86m<4ej3pGl&eG{|~j8Ux53I8X3Q#B8-<$2bOZ^Z*_)8cXYXtsH_f-=+izXP^AKD zrz}m|eaBeZnN6|2Df+F?^0e;)pjX~P%po-B8wK?CI;76`1mq*-7KVlU8?_+5fy?C4 z$Mk6jWtWuC>yjGIIJ`bMVwI`MsymgoF{R2InFBg0SU!5CyiIZFXlJHdN2t~EbM#s= zI?wRfK}G(GmeH;e8%JhQ+cRpF(TL?z^Uf&U#R(=KcDXiH{0W%PVlkk=vzQw?_NxVI z{_KYT{A(TXCTDr4dHBo`s)N^oo%b;t*?H!j*$6=umCM90M4j}3J6$}>!I8)p_85hP?e0lE{JZ4Wko65 z0q3zDhbxg^-fbl=%Dxo+M$F8X2|LpGEwNFhIYzFeKG?e=eP3A4%e-I_Q>Bu987+wP zFeC3(p)L7Fj^qwG<8x*@o|Rsx_!On?s!rXHHkYBsGN#`YgE$i#f9^+rChZb4;E`4j zCYDT@5SevX;!+t7E1daxxcdP`iXWiims$ABl|bPGfM%7Aa(TlyLLbaZLOm;4H9 zmofh2y?Fe(^@(=N`k}PGsC7Edc0*$PS|fG+sZB`FR;zxosgcP@E>dNBt?;r)F!zm# z*a_~dut7J5lKxfWMa=U9Rd_y|qvbt(B%HW?MEOoY#7>NBq`OpeDjT(g8rPjpNOGD% z=k7nc{S)foIf9b7(1aE+;B_iVNp{^gcmF)dd^d~nUCCN zp5scN%p?uu6J_Ujp?H$w72QSiI_kwrrjx_}tdt(r^{sCGk?f=SuRwSPaKpBl zk~HBfNgxX2Mf~2n9JZZje@xa7m&Kt|Z9i#!ezJ+I9A}KY868`*Iq=~s$ZnLPzHBgdYJ2L% zK-HMefb3@S+JfpWx%2)>w%+w(?50f5nCAYGeylx{jb0vxCBJBEMG5Xa;PB01?POa< zjE7Q>)ZX}k6GHKVFzdxpCU#hybkP3gD zHd?(tG$CTAm-j|099HZmUvt1AP&kWAH7$U8$`B@bSlj&fVsxU&1(g7=zHx6^&%BleWDWNgoN z#$A2T7!A7+4u)GCEe!LyqicB%JZojXE^v)E~{=YoRd z$sL&Aro=h_c^vTYfLVyX2{E1Qm8AYX&E4Y>#hDomMZ;jnzh6JE3SwG%$eoB?`wg&f z6uf28BmUz{dw#CT0?iwBgYk{z`{EdCf*efAE&@^eY-pjqH@gw1$Ld=@KIPh4r=*M?VqYjbNz>NqBaRC-RL-MD2OhD_3->4S(_e)lgu- z+v%>_gFS-hP>V#3Df0;}sQGy$QsBq4gK=pc#sJr2|Bk0rSpu{lk2giMW z%=6iBaa#pT#>h9P&gE5R7)==oMu(lrMlWDY;F5cMp@!=6nPiIFMGm$Oo(rGtz`QW6 zXnU7x?)iKj7-e}g9+s#0w7`A3Sm@+Am7?y3JUaZv>`0odDrdca&ujRAFI1G{w5#zk zJ4Nkf!c~0yp(Dz=-ky04{npZyzw^}Ey_~A zVW7B&3Lv^=26gZ3S&&Y!O4AZ8F&#bQoT_E#LqCdkREf~it+07SxMG$x{@U~W6~(sO z^`hvzqFM>o0JCfKMJUW$s9;QWVxIU?sqR-JH;*Cc!ud0u};xV{tXnrRL*|E9(4p1NzTKrztYjT2O16mM{ta2W;YLkTPLg08}@ z3l5kLKevo#vS^(+nES(XMknTkxP!~SC*Kk!jg^}270%Nq0yYH`L8K2tqXwSW*jxy5 zG6Se51QZ?3J_@&#vFZwJ6)461x#sVlb<=#vbkX{^IEcLo4@ z`n$d2X;en=srVl~$aG=~2fgdTUw+;L7q#&n)}B7M<;!OS_PeQNo3$SE{UUOdE!#kSLV>NDNM17DmNO4p+l&qSDD4U5zRnu_60%W}(S1z6q1N_x8o-yd(4uz%GWR zM{`t#+M*jg6`%t=NsK=aTnE#4|NU;%PlbLX!A94DspNGzZi0M9;lWk4t4v*}mCjl| zE!PMVp}NSrbN{c*?~lEN&3PTxeT_>ZC@kvVLVZ&u(qD?ERDA+RFpnMT(t$7ZcFpJP z8dGoQ{$_*FkE&M&<^*kjk+}0;)NZ(>)F{xU1D*b35DJwEMh&hvm1?YpHTz!#w!P?m z;6HmywoLCkya;z6p*^yPSg1rZJ=kXIb*UZy`@P_r4T^!!sYy(F`WH?PYE|TNpN~%q zIVw+YWGZ(oZXD|NdAO@81=>csYUJHOhXG|FL@wcDJ_PFn=C{giq@OY=@*SdWHH*AX zds6eatY8&oL)3cP3)H77*j@)+qU2af6z1JRnFE2oLva2dcmkDdyQ){Gqgv679tcozL@qlb5`z%8Z;=b|~_x>F#sq+4#afxph_ji)dTr5@VVwt0P zXUsQIQ4Y0-PKXNb^-)`qf*qJPkw~ZocJIC)eiz9qW?^u4+I(bCjeUlHvz9sDLX(+E zndck_HJ=B7M6@xpb?3LYCBmp}f-j>|36(KJmCix-Khqhs3cY$DFo98kpf@v=p>?1F zcZ{Cf4<)HybpK{|sfHojZ|6LBcVa zAHvTE7(U3DDC(dn38@Ggqs5}8L8{bzLFhcMz1Vto$sLEE{=d5Kdt@H{h*GmF_sQSY zgU)>WETSYYsxIO5P zZ)*M#_864gH_j@XeiJj+R2%z4D>clZN+wrCt%foQxFpwuBV+1P!}e$`AGO_i7l0RFU2gJv*i8eR;8tccn_UC8i+bUxI3kzoT;|y_*PI0NbGS*1F_TpbUurJ`~(FRdO#}+p^vR*`$Wl zj9D&4%`1BOYt}vukiiOIA*NX2P*OF}CfA&_z}O3Cd7< z``D6GP*7wEoZRW{3>J0*hjmk83~Q*w7H}yH=$%sjNiU8!-%Rb$Y0|Iaa-i+m*Aq1x z%ZnOp#kC+hM0rfixVkNY9|)=w4atHL>jChPSpZZZd%4URu#?I2HG5}cDGI&8#(JL2 z@vF|*obj>$=~ch7ZD;XQQ|R8J;O6~DnLjxE)oLd>|IbON&@8267|Ekyfb8G>+7C>QmRXndBm>wgEsDDY83t}kgC`QHW@MopT)D|idRe2id1V?{VD$IM93 zE+y@ce0sf*S9 zl3)faNpNx-@p{hvV%u3Wa-cs;`CCA(ynUj}%%hsZedB_3%3tC%yd2o7~ws@dFk#@5L^? z8zz>5R|JQl1TTi`k^KR3Aa|a~1Qa5*GTR|QeSd`?TK$g}pl(fg@5`wFtHBH4d{}J5!=^(ZwM|2<224=O}Ow$oe5EZJ(9X8&65xi2ybfO-tHPvL!+ zq|^}QVLZfl;6iUbm};2O5Th3a&DW^v zl-8*1c@^xFXsic2W*U;)7v;@6Epe`(C|1=_FTxnzY`*R`cxFo%CpLyc&}S%wV_l7o zOZ|DLP4A+wdEwrQfS{Lv)syeakAq2dLRZ#&PnbNx;*EC)jFUC3#%it%Wn zgoVE1+VV0+Igy=nXFj&Biy`Q=-5%=p0y3Oi1+p$<>!kz>7G;MrT%NiOfIzIV%Jyn0 zo}7^*t*|)-q%uk^J=sr9jPXjie?CgcYVvp%DzT^Z`wTBX{^gy zOJ6=+U^#47|9ocgO10V+WVvv1=salJx{#vW4c0{W4J?;MU-uSU4*vH{8xOKElyLZu zmt7L+QU3Y^nR=%Pw?~w#KHIV3YlHZj-V>l9pSo3nc_cQ+#sjIIoF&~%{_VWdT3f8y zPlOQd$9EHHV1#klEE#uWffuLDUM`KaBvOar%QoahU@a`V$3d{#IR7&99Q{uBYO?!2 z1|3yELxTZ^El(O(lU=jW1MDe%AYVdnU^-KNdqx>D2>Rh}0;E0jTkI~+hs9 z*}AN|j;-ru!0g-aEoJP59hg2EBtDMv;+w#NcRTO9O;^Dxtc;zzSAqSu*fZm75N(lR zj_r!OdcR+6uk-QZTvuG(|)A7Njt&Ja{JQlH6qdDA5q%Cec zq**8)0=bP+^Jw^70E|+v)Cmc;>MQRtFuV4R(#U)8^-k^=gZUIK@1C4q`jTOS_lP+5 z%w-_Emoy;2_)TSxW1Obo*eJ_b_s}lQ1mM_q4jDsB!+W1 z)deO)e98par`?K36*F~{I$QmjiD=#!2BI{;VzQfP{}5GnCW4A2?m*SJ*jT=He>h6v z>I_zGw#hDP-Wr%*HW%5QjytH@2|DJ=P@_@0)OA<|27seII`oRcG`2>TpRx}vl&Xbe z#>_6}xlXn~GjbMsoAI91`zozSM7BeV3N@c^Y!=*0ajQrw1UByn4?oSc2qt&k=qV9> zf7y~zD`Z@~hKW|yb?lO=21*0m|m z!~Xc^Z}%HNbo!ocY+#^t;fo^9eXY3wj zHI3I9L;jhrGR!z+{(&~kdkw1~ju9`OE z)?O7iQGF0Q6;vc?i5GWde-OP`@BK(OyCSm<-{7i6w}nRdt~KDz3uM_a%{T8;5_}G2 z!g;y(j#*Yq-z&(j-c?W@kHmiJF@($BI@~ zX-;yvjP-lkfho!vB6$!^8a^Prf3-N$x@BpK7BlXM{|;Fm7_J@1(+EfFWB~J{eb~pg z;G{_UF54Tg65s!cjI*di>>+0d{4Ov z>Qa-8Nu2Z5n5(zG5w>l;d583yEz8t(BtY`Z*F-D&cpo?LE=5V9%=IT7A1O^&+Q-y~ z*~RPq>F=>=1H2e)O?B|Y!_9~1x2#m}U^pcd(FE|&fW}s2ofDL%=qkl1MbzI?aL1R! zYvo;P4Fwef3vh{D?idIMQGiFIG=!N*J37M!!J>1hx@quQ?*$>blh z(313hSX$LBKoJYj)G92CkAJJSwBa#ccl^WtYgpQp7d*^{@6YJllDuaGqWfahH;9(B zP+C&eP_{PuP~kIno?3yQaYLQkJ>i3X7o^OLd!$~k)VdX^1c%kFX2dWxODy(o**I&u zuH3@%?Cfks3zI)weHjNU;KgnT~Htw8bO?QH=9vkdQ& z!4P!JC4s;wH7r-p{3c$kh09c?xp z^*0~?#uB9p(UQCvs+&^dk`+a@1ZwV~&(r2!GXC2|#UvK{Iy%M(2P-*GIkp5{Apf`9 zOBcQwj&P3(E^pC<8HBXakV6zBIIv(?HjxZBAYHM`H zVXf|4VnyAc;qRp;B%yiJi?)w5K(efYQRqP-H#tUi1e_N(!vl-;c-V|_S9LU7%(BV% zpLkIH%V`fwVm!;t};-dCKY#6_3xz-e|u`e&H?!-V4`Wkf6n~#h9duU(hjcihMZ=J~--evw42XjPrD!5BmyEo8F z8#-|LP(zR4M`3aO2X0r7C{I)(WS@EgT1V>InvthERda2?{I?4{8C;D9XwH|>cqdY3 z>Z1Jh{N1q<=GcP>$rcAzBC6;^H~#w+p49^ml4V{T2bZbwvZj9GrkK?(d>+;dkD9PW zz3Bfq;~X(Z!tp*RTz}~I-`locMiKLxQP@Ik-3ZLx-kkS=6r}%pXB#l7d(87A&zODo zO1XVfTyN9OUKqZo7l<~u2PDCyBgu@pRU2$0Z^_j9FiXL^@xeu}V$H(hgBHhs6XNN> zXTI_NwJGn2zc!h-;kbBd_2@ zk|r}61DG^SgV7*%IVSH}Y>&y4n)a^=jmUKyDEVV>iK+Z;n3Fu@BFRZdQ)EB^gEspl z>B0MRt|_XQE3!1_uVm19p<7(fFd6hqr9)0LX7G9^o+UIy~-O4lG!~e$=<;`Hv)r{zD zlsjUDD)JVhzfDoQIc9D1@ypc=u(USiZv=@%v%6?h>gDUJJaG zBq?RA(i$L*@<)mJNiEL?{PUOsOLT4E)F6z(-pAf6d&$=^($}F2|CR$dxwD5R5$+i+ zlTy0}pQ*4^_93*9tWg`i6Z&{+di1cn>8IKj7`(+^DHtC`(S^viXJ9HL!RQ%u{7oNeNb~%@@+X!KUlZaliSCbkoFY4bc%&FK^lz;AS&upWf`ys=R z<)yP68@|vSGZO`VtjjyHi+;tphl=9mJ+mD-QU2wn4c3*swpll0$;BN%$e72>HxjNi zw4zry3UU-@GCB+*B1NNBvWV0oq{e6R)wqGxnugQ^=Th_qj)u>_2i!}9ORbP!g_H?#_X-sp_zRH0cySNS zhYO}CYIVp%t}{X}1yKflHYAlnvauRJK}_>`^D4mkyfiZfO)~@Mbd%DrPe*#HHNR9R z&-$|~_)!Aq%&x8Rz+dkg5^!-3%J!OP6b|kr`_1vb(3WYVf#pZE1zv2`KTdBo zE%{UZ+1KDwMz^{zZ`vQVL7T) z@L2-36rc&T9@KzmXYAb{KukO%?FK4!0Pi1aMEpHg-zQuzGg=FJgvI11wA-auX_f+m z0KB3NFr{%-c9)*aweP9ul<3Zl4~!9A+5w5EpDmwyM;nEMUkYV6t`uA>A^$zO@Zm;t z@fBuJ;>8!gJ?x9aj9!T!H3|QCX5p+I6OmQJtb|M%2HKUJ%ts_CJM(UTjy6OyTZibu9h=k@X%>O{GEm z__`KEMFd1TQ4vuQ5gRIC){2PAS`ZZ_tB8oG5iB&xwIHaJC<<7~S`ZN-q7;#GQA#KZ zD@ZQ^LJ?^Rp(NzyzW=$n`+fiK{Lb+lcO|5}nRn)yXP%jvo~rT3iqxFip1=J(Hf`+r zO4}*D;d|P#*U=_m{zd-zqaW?ElbCxviW}47YIJ6JXMHDnM^&M%!LbhxHA(}?zB7d1 zjN=!QW=Ll+DfJhbOsGlimTV;NR=YgMT*)IJHS8roA!F2Z?>A*7|Db`7;X{mT^z&ks z+RPmgmmk92onQSfUTS4FcW2$P^H$>< zdnJB*5(HA8r$`LQ8OkWsbe00>?fyVOXM?Raf@Y!}MA-vu<{L;EY6pP`QKhOa{|<2p zB#gMm2hgHc{u5f*ee;8mKsKR?G%SwbG)G7#U2;9NnvtGNOG|WIav|A-wx=Ufe0dX{`(YA8f`8hT>CDgi}zKRz5v|u&S z#u_u@xc4DsY}2w)SeH}XIu>I5z1^djr|r!d^+t5_c^w|nxi@btiS|wOzq`4V$i65X z{$7W&FV04DkXr{hQZ|B_f6=hu6e5}V>19yrtD~1kC)P?R4`+ZUk$mE}|lgVMv)qy4N&{Ruu_XxToYEU;!xT`z8a(U16SN~+|bSAzpI2ZJgduqX} zqb0i~c5$!(gFpJ8l7;;P>x^68tF!G!fKj8~TXXh`EYBmIP0L2+lD)V3>i-DIT$dP~ zH1YHSuG3LSp*HK?K~)x{3bK(KRq&h6&KnGRDS;7c6vqmk1!EeP4P-Dkh^YRx!AwEg zcr!ru-Qm5lI4fLVM04U*8<6snbsN!h6jY~s(%FrGHi6C5qE0FTJzB&P%44*>> zA!Wa3jJI8L{3IIeVr`9{ps`H|<(3`2Ab5IO*hFt>s z9rCnE416ejWgGnoU+^(*hAmurqre(3kO;K zQ}n(UgN{B0OmEUO^OB3OK)F03nt-KKu(PT8 z!$%Q!?%1ZclwN!r1YTbyD-A!oOcc-L(wz2jgmVztC%_Gn#y`r4Ve|aI$7>>}h!j_z!kVgdotBH}ex#`k%ABLR;kFz%K95so+R zj&T8tzv|a;SaMU1>z0Ta`dBMF@Vq>0?-jar;tjbOxp`!y@IbJHIhVA1iw}M-|FCU$ znFuD1XK;!VQv~~<$P&>`hfnjf0Qc>IQ7SrNFLW8ALZmdHjG%zcmM~m-37$eaQRd?J z8IfYs!Jmz`qg@rxseYtJ9Zz@bB$1iO$)yEhsNkeFwz-K}4zvt*kjYs^U z9mCvl^j7>ad0&r19}UYU^&Ay%eswNSO-5uIBiwY(C)7UJpCs6q{;)@x$YE&1uc{4p z9zx+ANu|BG0&kbZwSBHn-cj<~-%!1BCXC}SHXKRiF_3hSjDKIUHxnU7t@#i8ni%7@$v$nf-b?z-EV_>)l zev;_Ba*4@*l%AD)s$F#n?`KGHex3I8pj}OpvjyAI7pQ-x`>k(1CVw1$F;C(pBiRzV zJw5j5a9LbzF02-GV6%FM6K`&&%wmqMEV8Zs|%>J%0#dF3@RT@ zsi(nrG2(Veap6jK5?docednXTn1*{hCHNBL{+=!zPv`RpBk@NaB(dz!|7-6t^cwcb zs)ST^(2VQ1J`~`q;N&b0;}>P)=|Zu82)0aFz@XmEiy3H#050{G$s$^xc`u4^*%}AS zZj@YK+`nALUK1wvY`>J1_;|vfulb!Iv+_(Dh#9oK82)45FuS&8u{?Y6%41j>J`0~$ zJ(tC@)Ii%yKX6JU?q99$=xP1V-lVUxgLrl5!`edo6TWwH{xS4k?n9{F5!6pT;Oy$D zYPzUX&-4~Qg8PjOSxV~FAef@SLpHWDOP8)tMBGu&N@TlpyvNVP2jH)nAr2Pd0 zA7CGfU8sdA2&dRzC9!$V60Np3N2I*Br{~wIO2(*Dvbq=Dw>p@M#Ife*N4maB?0Y@h z=YAv)p371!a9H_qRe?@y(U(#>hn}6dwWZG9fYnRFtR<1%N#&^cuVf4?66_8|8f-k4 z##c7|{?6yr>KR`=Hmwk8_2)A9Y=&2CrL(n=(;n?p1Wpl>E-&vOU2eBGr!;HLU-s{R~B%N6V?S-@MKBi ze_DXsv@tK+{~0+_$NkCyl|`?*Fzu1|fw^1E+HLdJ+m^C>nQ?b%rg5A-in6FGZX@|q zlo2HQdI`HUyNN$i99BR7)!74QP96KutDi^1FK-+uHY(4?pKaS6_8>-+Z1Ij5=1I~D z>kqot6rR-)F>DCV32YZ0PFb_lFFWB4Q_j{lqH(wDt&0NX0k%|QV>@_-{>dU`q(*S^ z;g@e6%p3Ev^3ek0w$QkO`m(j?eCOlHY?eex-ldGaDall`?337S5e7Nco(el&$k&Aw_w3XxTeDfqy0E^s^4t{-sFg zpHT-5MB4cjokwrEjA;+`n@4DWX0VPEYk_^Ec7kdgudS*iGnKrPmB}#3~{W9T=v`9&(?HB~d@N%2n}VsRL}D zyeq##lh_JO6KDd4^{|njy!9>`xDzAl=00})BHX+HYIyi<_`pGEs18#mM>yD14kn-K zFCi|H?Z?AQ=^LB&cP`bJF@BN)jj|s_4rQ+k@Vw`xa%?79K59mGrGRg=?FJ0oE5XTn z^b!JEc~BYCRa`@iy8Dtcp>$L=92|4n#&Tse(uh*nSPoYQ!g3=UTT_i6AE9*`&mKB~ z>RS1l%j=Nu>?h6=w3ygm(C3JG1 zZj(6^_4)NXZlJ@NjmcGH+KH>-64M0w7EN@%h9JaiBloq@{{{r_M zEMxc};{-+q^)<3PQeOOegZK*aMc9)O#_)_*{CA*@FzYUCcGlB;zOb&?pscz4(UFV$ zJKVnN>{(~$`LZlHtJlRVGwDJyscX?xPS(kB4MBw0t}yHox|yilrsJoD&sdT8#mw>* zv!{Knn}vr(!jz+wpVfak(%!Ib_8X^Co%#(?PnRsW%A^0tsQTpXFy}#Mk;-*r_Ud%S zYJU$RX2`l1+d#zWp~)hKKfyVIj-%@bVHrQ`)?WQJ=B{TM90 zRa>(4NG*z9%|$}g5SCSsO(i*GH@~Z|;!#&-g*-g%;hhKjmTPM+Z>otrGW5b4mqn72 z_T|2VGG=@Mw-K)BfVXatohJJE7UnU=40YD1h_FT$`NP6@sLwD95hcm5^9rQ>awh%{ zc-AiI^ZsVEg)ptXv&WqZsyw0^wi_->ghd7PCA=-l!=`#zW`o3H^=IkAOyuq=;9T?(5J7(~QW^$Qfs=5#&0)U%;)viPn|Y$6 z)16v-6O3kUb?u7!v0Y{gGYiq4-tnZGNLjf<93}>7&T$!b=D;` zo?vXn4HAaw?;5Qu#}mGw%d+qxY!9P%1C~|qJXQ}z(w>ys`!v!w8 z_a4ODeubiwBDUHJKdrxxPPSxN&gGT7*uK=#yUamRlxCfMR%O?{=Pv1sgi%#?Q-{4a zFC`lj(OA57tY?&)s&}m+m8&uQAl4;{O(x61dpB2yzzr=QHch}CWqzjf3_&MIZ>5oC zt+~j@Gjsc`lRSW?7xDw)qN^4w8AS@JhXS$p%M{ftr2`AIyb1qGiA_3!?s+hZ;3Cno zh2>%YJ|Pw=XIPTa*(`5=MYn#UbKi!ms9uC6>YCo2+pNI)3jV(bki*7294Z!)IlL!YEetZxDUq=9uYHcV}1UuxTioA=l~0|C~s@=c&lN0d4D2 zj$XY(tGLs{fEi(X<@U6>eR3Z*>TAOAlP+ElD_28}W#hP`dK^bD9!4*j$5BS-J9 zw`I}feKrT?IA|m9%!%L=EvOT#4@Qo4bZg8`go%m%aFb580sJgu2RWX|;a5tkqrtoO zSCQ+Z!wbR8ZeXd(sKio&vEE#e#R~cUmv;Q?5{(~QPydh=)F7F1{=IsaWx57CJJyI{ z6|arGnYK`bO`jfub+?}^hmT0*x_rCZZwXatuH-o$oftBaOUNMmQK^{()xF^I)Dn@vo#M2_JG9n%&rJ$fbF^L*l=ux!VlUVA^2yJxtG=|YV>X5%s4?8$GF zO;2}zHz+>vaNin5NQRmNAQ@__^?P@|{|H_dZX8OtW~jiq1^3y4*e9fZtk5<=CgWWj zOEKw<0)`>wYD_~R0I!j!Uv#e`NsUde(jW|~A=U)1cM{4)N$=LB97m5YBBD!4PINOe z&siIsvCZ6nU}K;@OtL*|cypV`eFSb$2$n^~z#GVO^jz<(_fPy3-AV{vNqW@nW^|F@ zfBY5gd4v~?ukL1)XI7@m&(-^%B&Pao+^L^rj~}!CX+k;<0Gg~A?5s<0pg?<60pOd* zD!q!lMfYt`Fa zaDTIo$sHzoeqzUyn4$is`aO71YID@6WTBjKQ1RIPd!5GNk_>U>#)8qF&G&4IMXBZT zl<4OTE;rw#msRu|8pgZj&=Zfni;>3+?eR5?OqkgXBVRH#_GbE5vwvqy^Y{`_afzW2 z6`zD0R8edQJsZD-jDwLu*JQmIF}r+pWX1pkTJ@~2JBa^}*qT4_ba0BjGvXE@cSR}x z<61NH6wz#MpmTCWeDfL<$Y?+0oeYR12e;mK{P6cEm9D}+UQPEfN$Eh^|9=Exjnmt(LNw5wM+A|Wrb`oc zU~V4voMfIQj1%ain-X1^TTdH0r#{)r*{r$~iJIL{9$#`ioAJTF$jNNY8Lzm~ zdp%mCdTuG$8!OjVyB(V5{pjXw#G&K{O2DY4QPhj_?a0xQ|)Z2YYGm?1u#RD%rmkYKkNDo5^{oMUF+H z2f{hQv(fVRnSxUrh>{lz$rLE}^OsFu6hZ}+tEMM-snVo7)=eIBeFyR@+DfcR4<$K& zR{|73f~5VCFS5WHxtuIQWi)?l2I_khT8*7v%Faf;8W7;y_j{GW1JgpTt>wYS8?P6& zu=AR;DX0J|9Wr%GTzdudOIkZybS=7x`gryX^zGssw_L3kKE%fV=XVaa!sZS73K&y| ze;FwFG~otX29JxMgEG!u*`KpmFG}KW@yDVc%>27QX6XrTtYvG?IQS3vEkmKhH`JI* zwtSKX|Ca9gI4$4*Q_8{vDDva(nVFZ*POvfly7vuzOIiNGA;pe z4NZW8!a|m!mA8>ubh1e=U)7)kxtwhLb+mM%z~Tq%lu&3ryOTbz^&0^AF5U?J#>dp% zy(HHLFCaVB646(<8$K5zt7y-ULjzeigFKY)Q;14SP@%3La_}S4I$%vMV+X}4NcoR% zqbCloZgR8FKy3D(h~5;$!{+fBwl~lgIX_22dE&VR9z5^M(krR+tQVi%S*7TwS`@|E85Q6)Yz37!6wq=Ri1#bzPZV~+OCfCs1 z|AkG_ly82p?yDF^6{aDdM*t45;D-rv+t%{piLE~;-tqaK74Th^^#wa!3r_oCCzgkw zLE=^XX=4_8=I2DrmNZ`>w!dt3k!+mG8W*$(8AG=!yl}M8JsLQRk5D$5M&#gAu{N^g zD9N7+Yyxu{rX*$v53ts0*#w4rJGLMF`-Stm-^fSCQRQh0)+G`{^1-P8&kAznSg-%P zFHX9CqNpmmW9_x90MGUVJWU_>_T!^RjpHB3aOw*TjRo0nPu_YUe%JQS+hs5qI4HGz zI5n5CQwxTfPGhHLl4`96>7EL5xQYZk-&D*?vT%-(@C7$}RVX6^U7_19snq|1t?enR zpOq_Wi+8P7*Dny4oy}~QJ#UDz>w=V=S2<@X+~z%&r(u)Xcvdqbc)Xdb} zLXte`^eKJ0P->FpJL0Kgy+dM#Qe1$ehu%`NJe1kvlzwn9{vFmc8l^P-OXAH7u!sa% zmp;$Bw!BHQJKVu8CESX>Vg70gpHNjME`@}$w%w>&nNxst`uh!GQ{k0^7{$8FdbkM~%j;|cX7YRr7 z!65<7ynrJRj;w4pP2j5lw(OK?_mp`^WILL@l!;x7(F6L71-st=vbqAsK_EzC&jPx1 zTN*aWQy}eJL9UawF0_*VtX)LZQCNop!u?z09N;{53|!i2ap@J699_&0Jl2nT~v}`vBSpKm=2elvU9zKRtB+P{Z9DH7{!X zsvxiPR@x%jxZN9YJMCT=$MejwWrY1C5vzHk9~s-V-X}NJzv=B)OnPnTz3(BP;iW7a z`O`IXZz|fJYM45$f;%`dMwYa5iBW`c4Cg5LxhEsIL0#6z=v%GqDI-{OSq|S3zDHDu zrk@_!HT0?kP1-;(6iH71$Qfi%=fBq~sAVL(S-XQSw!FEORdaMl#<}9pC(^1;UDJwk$T;9 zQVMMHkIIaw9W7-E)-u9tQwICBf*4(*iRdCoCwnx-(V|C z;@@+QeB7ZEaR12B%>7y{%lz@=0C-h=Cb>U-PcL(Uw>N8a2tUO0E(j@c;&ek)PQo#(KjfY{#KfZ)u5dR0ocF5}R+mA2O12|3=dDFl@kvu>XdxU}0$^65I#j zcFi0y#cD7bC60>Zq5*tL50okhZUuR`HA+83BP`Us_b^#O`5gta0}?B+4tF6Y&tOtK zN51HL`H*1@j_QGpqp_|@LGE<#8ssg&KaSkuX9cWq>R&;Oc3$Q@iQOt&V>+iYkY0^q zhDNlp6zF&5T97U1ZVz>SoVyMFnNGsAHkf?E$qaL|_zbss$}elY5022VM;U15apZWB zwP$WVfonjv%3nZ+kMhcz&t2PkZ_jaM>7+HcqHOE_*MjZlaf_3p(*Az?hV@K1@wz6~ zaLo9X?&g>w<$K8 zYX=!v4z}7fDw#T|40&}kHc`DxHSH+%ZRH2OH8Eb!121E67rBiAU<_%gjb z?t-aaXspS6NlJllHD=TlglES9y%A%}{i3zX}tq0pmZI}Y1b ziskU@*_D2gEVj z&_fy^+whA(Xc>@3SJ6-{?nCsv^cS85xle6v)kz_wfcAU&HRSJu(<6~!={5=bt98}HDE7G#lT5egDUz46oe|mZ4(I<)7yGI*KrjR<{ zs?B4vyf$V995*qoN$t5l!T~|$m6M-*i1vq(_Yg*lh ztt}w~%d7D~#_}dKwVrRu+PClX-fQR@w}w5jLrm|K4yA=~(ypatcp>*(sMr|5geQNp znuL<wj#9M)G&R^p!ygcEF*@M%`Tn@NXG-`?x*e&bhzQJLnH67YoZ*5OZNgFj&_Su&%7Q z(v;H^$l*?Ws?VfBrG@eW?{%l|oKtGWRey7%r#>-`RmZlQ_HY&G)&8$pwiO%2feocS z6Q9P&YcBS&7Rvh)PS}n(Sfo!q(DZsi1$QX>-pm04Pw|ZG3;xNjW7r^Zy=R?d&o08P zAG2@mw<1$Uur};U$Z=w`n0|aJd`zeUo7CYJL{s&lPN|*5qMfb>AscIEPNH|XFC9Z3`H=eBaSOt!4(;h7i9F~Xb?EPPx5& z?vuElOuDaYT6X1})3zmBv?VAtwNv`Sg!feag8i)OxB=+~n&%p|w;!v#fq1(bvOjA(8|)=vEMb zf#Mr`6|dviBM*7W!{+;Q?uI`1B@(1`$a{$zB?uu7H$a!cSy9JH>pc;Yb{{da{A_6C z=tXUG!|GhC|Dn=OD~!;y@|B#n2f~yeyN|$TvhUT=Bo?{28M9{+Shjfx1W{3uz1KhJ z@N&191rA~3TP)8!ZdiM+?caD$mCragt||-|HYFeZHbut0Z5+ohmk+vg9SNnY&4z*M z_Y52k(oJe{F`4!~`;h>`%99cLYel?3;?M-ega1VoJsPC4k5xSu=MNXm{H5yY9ioT% z@bDZ?W7SM$F#`vN7e3JjqKwsoZdbpTN7X4106%!G7*sVzA-}I)HQi{zd(&#)JjS}> zn1iC~7Yt{@=5!uG>zo5{D#p{X{q+a3J?r)gK}raSMT|PoA$q~jQaATo3UG^er(1cx z#hnQIFW3#VPR=Hys27&#xbfVvA9+fcq~A(no5?-guu)my_g)(fqrmioHo*?D)b z-b%AJhO7vX=meHc>MQxpgkl5H36@7;xjdwwd%V@@x7$k=*+1pqP8%q4`S6>YZm#h~ zMbn+Wp37N*4c?izSvzfHUNva9=AO)4QCc&aE@PxfQu6U(l5qvdTOfTTowyMH(w$E( z3|Z(@Daj{zlcjdC5;chUkTbGXI`HgX=t&oqVJ+B$>R|aE%{`W5j(QRb=J6|@^D&(_ zmMx`rggDZOu`Y&Aens0`PpH5qsgwd56XshzfT9SFH{O#&nA>6A+mRVbg}Fk)PKz}b z6O8l6Qn0kuNXPlJh&|AUK2*wA!_v0_P>*EjxbaaT0uwa%GWyg7KFH)#3ViQTISqZ?d2(N~7D*L?O z#&0I#KsPya1bi}B7(N^&N=!ydaZ|BCrpb%Vd9>DDzl z`!i-&)ufPF2gt3TzKO0odEcO>Pmg!>;|n2o%!_N!UcX&2bgtf;(WvFH0Lr^=yiTd7 zKI4^Tsqq^|vOxiD7deB7$fqKt9@+FOLPniB_d3+7m5NW8p@i-qLhH{b8(X6KmOfZ* zcQ7K!4P3M`aa3-m-+>#uCDWNY9Y|uv(iPG8Fln9wOEg%JAQI$Yx+Il)S}WsE5-vA8 zt^27CVPtJ98-`m@@wfB)8`#gNB2*sf%pBjk(yVFtrO?RRUdrKK-ZZZPJ>e4H##~<@ z4Ym+5(^y9=A3Ny7<>!8X11%~bVu_Up7T|y16yj@%m`=R5;w|gxeuLdgj^QN<%iHr- zdRo4U{8>fSsmLB|j`Nan+~WW>)xJr7&pD~u9^xF5ng4O>&$OnJ-#?X1n3}x6wbAZl zDR3c^&K)6&s-A?aiT>eJe&$@m~KqJ3S{im?( z>2a!jAvC9aTkkIyXANa^Y--9G3~zLtOjUQrWBMeei-AOPInY^N41(>^{@n2AIB4uz z$)nj{hTr}5OZM()Wi?(i)ztmfLE=q=s=63YQ?>6)+4fTr{JAj|b}q`I3h)D{{6lS_ zoKrsfXbAMwk-9>!5d0c!2CWVSvisBBSLuO*El%O$Ck7Ew+WxjquM^f}MhpMrFess) zg*GHlflDgF0}ATRRhsnI^zVOLZlfq~*hkoIRWsOnNMbwP)>B|RF}K(#N&U}lU3PW* zA#yGw_s+!XWU%_xF9dA`Ri720(IAQOFU!HQxu3|!R%kn^*j%?1b_R?cy0RFp)2B~IQI-5G`ME^wfrn8| z|L*{)qW=EUhw5rsuS;JFU49@6S<~!ri#|en zap5B3<0x~P>Y{0WyvM}TcBc^PWRI%~*XWyn+(+!r$ss?&K#<1mcuehhaRnFG9d;SM zET6Sz`QjvhdDac(9!?x5#CCTdPwl;^J@7vjp`k-x^=AhI zAhm;S486!|H5mI9+>U_qfO+<%vFzmk{(N6i`yr&=U%LZuq{x}i7i_!McAUzf*aPll zxOAsi`+mkrhICBV)7j{VGgc0-;!vG!S}XpStxv+}2x={RqhQ%9@b zabpdSHTzumhS5x4aQ2jk=?&9&<`-~g5&R>_v7%~^$UPYAmE*s|^RPh(RW|Y~zOA`% zonDBw8XI?{rmP{1OJ)GR?7;tG+y%j+0V!Qan2LRq=tck&b@j)7BmsTk);X*%Xy``} zvPi}HhD?9X#N5eF<=bIF31?B-M(VTA7<=L?dF}2|n(%6Y=DVs}Q*`ZiH?#b+A)m8oy|i;3eU-F1vp9Un5_LmVcI<(GQ}A*8>@lum3b6&Po$g-74d>= zH%=w3#JJgfO`V%3v}tN17*Q#oN4+0z8M6Kn)iZAwcUXaB2^FL*4`uu(Fa$EU-FFxZ zme`hI8a8pqh#FQ%YH@mCZC;7C?Ykto$>~bU&4G)&$-gfx%846JYf1H6$|8PODl%qo zm65mB*`(ihoYF;OY*{LndrVZr_{J7z9{v5F9`5`;k=5VYeGlDlCt|7lpiJy&8DqE1kR5fNHh1J}fM=ov za2@#OrmD4jUMSH!(7dk=Qn{~Nsz>mJ6OCAL4Y=4k?*!Yxg|IhKf}s%-P`5u%c9mJX(! zHtip#msW&vn7O2nWMh;3!@Ezatn9<%0eZ$Nw42;ndF-qIhh-`PmBX}$%HFwA*WRSN zT57Y)+FuG{26fIoFkBqj^NQZAqQvM--#)xUc^kgg31YQCtC;Gxv%t0d0J06JwGIxcorO3z}{!DN`H}L-+0G31j>7e_A z3>mHygfq_CRCLN-@0oPSw7btD(8Vu@CJ?1oHe=3Tegt)o>(b{2akl>npeH8vuMP2j0ZM9$Pe}v@@(zYKQWrVyFR?oz&cL&S+x2{#g zN`3|F3@x`$R6!8XFj8@eoGek(R5Mav*rc*|;utZvBhz5Am~S?W%Ot*gGJHS5AVp0o zy)Y70X=v8f3{-)fqY+v)?>&K#vtY; znpj_!=SANGIXmN@9lD^r)_+Z!>Xi5>@gZsW=yTG`GK9_(m=ERAB6?5`jR)oIvHHU6 zr2mnUfnM<>1fvXY`ok{w#PQArpn^LhdqgSEC~E-J$`iGS9Y4y3l>8;#j-x^(#|J?# za2WDMIxh??0v{7tfT1{(6>ej!GU&+QpqRBJImJ4un;|e8sXSkyOlq2H@E%Bb{FW`R zlD2$67ScP5RUV}8IGA5n|N1Mc6M_b9_~pJ)+d_f@^m!+q56`j2mU2fx^k-n^>Gv4bCKzt_<##$vTAkZ_RV@ z?%~Y~G}fJ`-@SV%C$b{4+sY1|2yV%rK&s|S%75SWf$6q(%T?W^cUK?#N&kMqa#j0A zPJvZc{;{pxZwUTtEQu>8*@S7+IweVbA);&r+kF)6l|9U-wXLoy!6xW`TWsg1k4k+Z zW_Qhlnhbp>Z5ui*bOh<`P0<0-D&nRIMxe5Stx{4}Z)z=vd? z@_KiQ@<8O{r(r;$V64Ug-#-VRqxvymd=;J~ic+unbz&IH;MNz9&mY{1_8oyy8Em5e z!@+OFlla^4l>Gf3c! zuL^@btCj!pHpbo_c*N~f5!fj6HLCk}76(?|f2pCqB``;vZ{Qid#3oT&p8OZ)^-4@S zoFd{HQPv0!Owlcj8)`j-x%czzRoo_$39D}d?0Z;>7J-CO9s>nFz^-1`u&oQW-$ph6 zEpcZx1L{O`OrEDZHbFJ z@Krqw3dK@SJytv9r%+(ghp~w#@4v8mdcIxLN&8I#haM%ZZ|ulPPE`GyvGBi7{B?Ap zu8w&lipv2m#=ILFq{CAib6du)E$}9`A#MQ*b7Q77m?5vw$95D~;NE)*3qJJPib}o4 zBod}di(>2f2~+0YE_gJkId?Es_;B`LNgjDWF=Ny-G)n6MAF{w(JmZFc z!%Rs&$|no&NV(xf4)erdd_h%GIx_B7>5^GzN_`bN+DJ;m>6q-z*s%^`=#V%=?F? zcyHfn!3xtDuD(uRwLkh9P$!GKFGS36?<=aAdSLmory`!rJU9;vpc`qbmN&*4s(DKH}1mBLd^4--8b=Pa++i_k#<7_ zEgKZaYyEgk{Gd4e2QcCfd-yt}8Te6_QnMlL)t+Yuu4Z1LI6Hp1Fo)RH z;i=prwzuvXe0Bwip6;S2+1n5UO-b|k@#p3nB?KHz%#_|*O!i$Gn&}XR|9Q{QVLy^A z3&8tR%}Aq?C6$JHoUBW#E8a~gQz24ADvb0bH=a97)D>4QScBlRZOomSP{MDi>Al@)dy$ zp!c;B3@f_>t)vxH;}I(x_)(f5X0nvwDCK<%Aee`rfXJp|mq6kL%zHI{>I3sski=1l zKW!noitLG-*B0PsiCLDAOL@&qiNthw0Bt?;EaB0YRiA;cCG4OD09PY&C7r3AJ*8Cj z{+h(urR*WLJbEi`5;N`MrnxSwENA%6ue?f6?d`W6dhxR`?(VF$T4@_kJ)$|jUap~V zA&hbBeZ^q?k!Kz8XC=k~-kG8gDs2J1nx-{rM=T0fm0KO?wo2}oM9PzfLwHZ_rw1rY z{XEw{T6}lqn;o{J^K|3Z`bam7%A=0_4pK>+s@RzR#0)87*=U!E)NbMHiFg&^st7Lx zq*doG8=3737h>U#ln^ZDl?4$mrWtqWer;vgG)ghUahRTDWjmcNuf{7t)LlDdlrd1}2UEml`cul&6gn@iO8K0$^I6&F79ux(`v{lR5?I&o0UG1UFOhP0CMhyIY5C$@F+t36~apDl&x z{B9EgW8v>)m{4rlw7W^pjC(yx#QZyvz^|PA#5hU%H`C5vHr$-nW^?JxB_3Ok@wx)S zY*|6g@1)^7B|IP7^yDCTN80TnbFajZHr0Rwf)lB#lNn}tqJ(s1)msl9^OT)lzl)07 z>DI1d*V%J@9LK1+Ed05xE;dJA6yXgm1@sw^OGknDk#sO--TZh9ZIfX?pUoS<2QI){ z0AzQ@4GV=&D%V671%Oh=vqNs9?aGYvLD)p5q5?!!P)fci9qZP>vv;uaSO48SdN&6A z!Y@GYxgm&n3S(2-c4*Z~n{Jz{2U&sgp{WVw39h-{G54{~k9HwTw!Ox9TWTV##PI z2l%%rD}UsyUlQ>z>B&#hfbUI^+h1|z?8@ogd9?X!Tdq6cA@|VWWx!}x=!+;lnu0L4y>DGMv;{GsEoh+F`n{;|CC_X`b+@s^ z*)!z_l-mHD4$npvM?mcb(Kux_Me5Kb)y0+1;5F``!*PzXPABwP-oKVQBs&%Q#VgeF z(zN*FLuCA<)Nv5lzZu#4Z1lfPIE0I_ zb8X&&qiWA598EZMi&9~MLEEnGa0yg5)`n|CSJ@GNUU-e%ra$jqi{;(hI@8PQI~M-Q|D?qf5; zHfBgBR)2|^ifXEnWNr*e0O%_ZMI7;P#O zdGpf$c3NVT{nzc)YmOT2>l;UQIgDQIlkYc*idV#++RBHmku~a01|=q_GicxceXdK5->F1beVyrreyOB*!C{@3d}G#}6mU`#dwDb`>` zY_-UA7Q2%k_=K0_5iFvb0-+tlimLQgf?=6Gxk2}b%QA-qYZ^(Gy`s_%=Lv8#U&sx* zzuf?Vsv-sOuFLq}KHBAiUG=A4<2#KhE5_q<3BLgxTH$Ogv1Rv^qUq_8GN`=SIG%V1 zx~--?$^-N~nvfR2Ig9-4ta7-@=sNB8{Fj=h`vPfpq7O$dUCSSK#uxGyuThd*Vd#vB zw&*(xHHN$KHDA1Q9j+(h?;e}o?b%++jmlII%hflj%BsZ+ZCh-A8`q z=o;ghFmQ$}BFqX}R^(hXjK>#ny3zhMd7OVSF9qMIKj?wPx&1HfFj#DV6A1bAuSh%IoIBBU{wJ~$5)`#T5{HXkSZW#xzzB^;z`rw5{Xkx%ajEF23V;z$f);;ivO!S-D=u z$v9)C97~IyY2SsSWwez66l>gvtnbxsi~$&fk5UH_w{$F3VVJO@(20CH#g7X6c~s-5 ze6Z_+q`h@}c=onVaWtJglloJ|J`lH;f43oe=d@wI)NO)4_}-4l34|{c&nc-F1ot{D z6S>~)vzPf6}WXCqR0oUO-=wxlJb9>x}ruMn#^w=DE;S3vz{&R--w! zy^Ba@12W8>Ppt9GVJLu#kDd<%;uuE+0qve-8vWYil^e+AyY=jLjYcia6EQ*UM=?EOY?VwAdyv=kCh3xEyjXb@(9dwn>pxxkl`dn*^p5 zVSn=fl>CXS9GjT#QM7pqWAdwU*qf%4J#3OqR(qiMS$L#`4VDAbw}-Ee9UFZrrRt(d z(vm9=mJHCk+bsm2&eGMaPf;ot;TYLCx-|2#=Un1 zKXq)aE~OIRD3*C=QMHR6f-ra5Sr;RM?K68J1`d zrLmN*0`Qk1ylc4ec&4Nn*ZnC@3~8Bf{|nPxL7NELFM??4%x9vhkIv9*QY+HSdu-2N z)Xq2|32&q(LtrEA6|Y66qSg7wRIs&_#%v5cT!E-hDYWQlG|G%8l~&`o&A_IIwo~jT zuFguMKwnwf5hM`F;(u=9LIWtezRFFDzOoHiI-=(pV+BYwA$>N$(;#*wjLN> z#RRQ61faBg51g}Zn?)Uapc#?J*o)%>3Q1}Y{;s*SnVtUFBjm%OHwl*_!Y7waM^(j} zyA~6fMD3`?D>lh*mN*0>zkY1$-f5sRgJmlJRXI7==`R(a#9-pG{r->b$_|?QCP~p; z@UWf2WEc`DdFYgdEqsjTwRvV+y50b(YBZd};=^y8LF>rh!0fKk{7(x&Nb3_?tw|#w z{3$t?GI0qrC4oSRt<=+FFK+bzm>BTgf;7~JydhZ6y%NyY+IRFsEFtmHwpMd-_kGW# zbXrCZMIa~>#UgGwHaO%^Lz8k;WwDbbI=QB8p`a5i1Vy$s8t;`e%3L*7?VkIGy$|vn z4UDw%JGF+ZW_I>Q0R3Hki@s|1lV|+tcayUYIm}8r?t24!Rh96gg=@L&R0wf7ZC`1^ z$)lzM2kjd#?bp9arxk~VXqo2V`w~GNFnSk&2Cm0?Z9pcE;3p|fM8q)K>$tL+5B&x@ zCFs7%iaLDWFM7+CaAqwp^kGb+T9H>?Bu>suTmN2SUU;FMBGA;vE~yuut;m$zraF3=q$pGIBw41&E~k}5CP`XNg@l+SBRzpv|hU+-(YpBXYF(!$p;E>M@}#3Te1!8OV* zrS@z-1gX3*SV$O6Nym)sx z3V}qYk2ZDu{>Mp7%joccCYc*FU7xl|1Xa0RNz`IqT8ttTWR#eb=%2akw|diKP0z9*+R}I;B?L9G%V{Dfc3I2F6jT0auLbnmw4Q# z!0jV3LuwNOy*XruAvGIX=`#VO+J`?P+eGr2%go%T#%EqN+;v>XsX@(dpe`nKnT7d1 z9Z0rf7WK}BQPK{9^|sS_Pxb_+K1m2zdy%hMo$W9y=;0S7M<=iD&v5(NA~2#vBow*@ zN5)!(D_V`ClkcqMWPx=vIOGZvge_#|wXvV88#Gv9RfZ?pj2GIDdE{f^+>e3p?u)+C zLt_KQ7mx4U@?s&}S$295JsAJ@ByMy}Rq}kWfTU9l zW1CoJQfej)&vS)73QJ!Of@5nPUs`K@j@WQ4%;AX7WWG%_xN)Y-o*iD>ph!%$A0ue3 zq;G(+7d;u_Np$L>+oAMAf^aeDZGxodl|jv*^6uoIr=n}x`wq<-^}GMkRJY&U#D3qo zSD->|^~BHmU+zAs9)N_gE0`R9*Y$uj*V=H(yc;@~jtV<(NL9HsOUJ;Z8)cTa`8Jz# zW-31mcknIIYb#l~-L-Qb1KXCi2|n9YX&m6rLET6yKus|1SsIy~gl7>;9~?RZ=9kVN zTrj?eKpL!@GGY?mNW?#AXZ$J-Y6=7_^f`2G8EpvBz%z`5$=)KUvkrW$PSVe|> zuER|-_;VZ{hnY+Vll6+_hsu4690HRxX|>(v!QQxm36rDosBi+F&r(8@BOdo|oNw|9 zeHuR)!i(t;&w{u&ZddC=1+aMc;Qvpva zOb$cayz1W*D(0pBqL!VuZ58`o)XvIT1>=cMK+5eMmPQa-u!eEL}L3 z;JkJRLo>)65-n^@iQ}4XL&z}F0^40_^_t^p4&tC_5Jve>I;7&_$2#d%y($laT;|1E zFGvoat0J;;3^c$^+!KLxpr-=duX4}8^jq?*QjsQEz}epJWihaQSXMtTsLj_R%N)QL zr&ECGfF^&Ll8`kG8v7el_&|^OKkiY|J^h<@u-G%h8EeXFj{IsJj z9}b4epnHcCNG&ZxwuoK*4unIFtbW42#FlRB#zp#=#SX! zRKM|ko^h#_8w~!D_30U?+n7Oh)9dHxDEL7pk5Pd5)dq<3x~k*IB*%CX1ww?FH4{;$ z2v&K{1d3ODcD_!%ohWqBS$v?A4DQ45@?L%8?}IHtOB{C9FNv|!hVFO4 zBOU}xF_&$~su%2kQ*zV|^(fWfWuNTc`*AhQguK}j=20titUgAPNa8fe6^cL&L^NlR zG6{kc8xvsF9}FM`3~nc%_!=T8H~X9Y_%1;OBJsIhea~kkg;#(2!wBODub`&?#;frP zOzxSUQTp)Fo`Hy`<>SXI+4rWNQ~d$5X#e>#*zui3hHh5*EJaYKfE}xJ&?<&GrjK)J z+mcnGogvoaR59EB!R!F}#USMy;gW`mdA?L~L%&%Spy%~Z{)o(ope3Vq>M(~wve3k| zCJ3d1A)Z?@fa(k*L#$FXbb7+7=8CWbX>IQ#V>$x6cXvX!oZb41On^dS*uk`aiDC7x zQzJJ@}mH-j)9njB9Xna)EI~{ISn6CIkCR^A`N&om{+1oRBb#J20X;p;$g&lIm%vwJ6jbAEMuZIOgt{)Ua00ObK z8u37Vs4fI^B;=$qC0M2=3=ZNvwh|6$nB#T4+x86pcmL+efNUQkHIJ&^wBJhbvy)M! ze7V`dlNvmTBKg|Jo>GmNxRs2@77J>7eRDiekPV)UIO*~M3V5J-3R+D`+oOZ4Ts_(i z5Lp{%51u&!P$>ufFg*ynWXK;Zo#xO@_&8XkHIul=2a_Rjlyl+efLR^IT?yt5L=xnK{$ZaEwph%efq|~79uj>i@vWBWn^laxyNpcTr5o!QzQ~y*!tgd!&Exggg`^#3?T%yzaAZCf^lLFX&q>dxF>O zJZKVov8%j9ZFfP@Slv1Hx+MLc4xNxM9Y>!Y$eHE#kt}gfmBQ}kmEX;3tIL{h5{d6X z=H)**rtdJB@(0D80S0a#4aN}}W`}3!2oFx?l#I(2k{|*)tZ5tPA9Ne_gE}b_@PTca zO+H?7Vy4nCqSO1=Fjm?Q7Kk#2x!VZ(bC9hG3<=gU;u16Ad|xpV@IY0lAj}EmK&}3h zU@{vSgMIhdCyg0in?ZIpSOXjg8+G8GPzqD$T7*j|`h$iGaB6D-VIzjTo*Q+bR2J0- zU?y~jP;#&{ipu;B5l{^((_s^H@hZ=4w0Cm2ZaA>(#_WfbZ=%W0c+DNqif;_7s}NJu zfZtao33FM>8T|Q-eokjV7OKQUVR!jl1ZO6|A!+Rt+7{d7FWu71xLajKv|#kn=cZ%n zl1s7GntJRCcs$b!{x{?A&HA*~Q@<3KGI-M!Ep`0El`BjQLzSZi5yqyxa!SXM<*NUY z?R)ajSE;pI=T-G-h{+K|(}fnzqy5vUPvSxNWVCjdLhQ(FQS>;$uR29$&SR7m9Ftr+ zcJM6Z~i(jnZDnN&BiFiCg8jmF>y17KO~(zFefG z_t22~1z0RXhNs3lveHd6VVBrYF0Y{O^9&KU&HW|tQ3UHi-9pd|vcu6wnkJ?#L=Z@6 zAPVcNhehk!$0%!@O9;8!s1Jokv)TMQpGb^Ab-#cCiDRMwD~b?fL%7vwDVBL3N&?uC z0gi+(Q)nqc_7E%s!t_(XqI5W5q7zkWLSKg&rK7KbZX2spLfb0kUh>~gA}bhArrx~f zu8QjPBWfGh@&#E(et?A>a7e^5?(IhEx@!5#eC!)Lpd2LBzp4VYskH~RK#_QGB%oHz zx(A-Z8AI7vFWP)0H3C_usTOlC6MXKiCT16D5kI@ZKA2?@(b55V+BW=n8F6YJ)x3Dc z%fQf0XUjy8cj)z!$e11(pq-|^Cj53AIl7* z|K#<2NJ48DZFQ7@DH!6)B*6wo&9NSv)m*zfQDX@Bnf&1_{z+e+BUI${&@BPFL!LS5 zk!?aadg>aicEUDrHcly`Rfte?yy!wb5(h@t5`W34XZNKF8GZDmb)P4$dIOwg)N9E@ zC`W*uyt}F!Z90W-+yG4cp%&B1(6|y&H~Cr|h{0t9)Qhg4A*8Mc?=H$%cVtd=9=MT9 z9+ABO_B+wHZpeZuyF?z>2#j9Et^*f!lpYC+hw9qVC!iMUgO-E6BiPMZDGyM8HB^hd z2}_~Vr(ZQhO*k-+B5$#T%K80;3P5`-`<;?VS_&@f81&6r9ojwNKU#rwQY+APTq|(A z{&gH*JQy3E)SkX8V7BV8bz#0>tR zvORd98pJ&(L?Nsd)0Al+soO8a>es1Fc4`IUACHGhi|b8{e{MNXOI~ObJO}Enjeb&h z{<;g#!0C<5ZeLAe3Zo)x4k&%_xHZN%t~rz#b6ecjEo?4|(~vQ_JDg1kr@X1KAs1vv zphdq8EB|7wJpNwmd0YLs#yM8F2C+OSoi?k z)?bq4-i{TByQ_-m+wCDeT1Ioh*V)fB`@tXVMD^`zPNQsIoywyuteS0`L)g?4Wa>}> zy<`semT^YW*{+3Yz^xebaeX}v-6;l&gnqD1C7L%YwVm1y8cVrx0_G8%A>ghm#SU@M zSt;Gu3ASwiW7!Ff0iy!~p4D#&4H74eGf-^hOC1`#t1 zeQjXcnNV>~N5d=0PJ;rW)^k0D56b63O*4>#=}baYmclS8x&(`I+sn z>P4sap<~XUW*i)?1O6J|T{p;Q;BsR04OJPs6#G@Npr#(!z5|i*JrbG%gn8KylZzEV zuaLyVAYWsMd%B%|)U7j8?x_E|irEz=seTUS-Fr&IKc+9^N96y7=MNr1&do&+$R<~O z>-@0orWZ~9f&Cr*Bdt|y8q7_sB32ytD=xb|3W*~hD8E$~t|OWQI{WUeKDy9mX3lTT zixQ8?jJgWHh+A!xBQB~HHICq=1a;t1tjDYOBz%T^2dw&trD&OYKKB9<erVHd=7*8-S9*DJYjnxX4xN~Vi&aAur;Vz8 zzP*5VVQ)=t{JilJ=Bkl^GM*QqY2T$aIHk;VkyVgk41R+OYk2O8^yDaqnZ&l>fc?Oh zvp@T(psS4jSwI<4_Pe<97PRYlS<40q;EQxZu_QwyDXm5n5CPQ2(4@TOc#`)dlyo!ay{BIoDK5T7WA<=KiDy1lq%#f4Fowe}HC z^Tf={RU1@5c0QHASA<2A2ZX2nSN@=s>8=cR_H*oml4^;Fx(d;}+MuxahVjidPqIrYey>Cz%lsN64byt+ve8iAhdZiK;bWXalo{TuVBJXR#aAhv;#>d*h)Sxjj*sBf`hv-nTbMo`e zjBCxSVkRwC-7zV@0IE&>4-)8;D_q3>hU{ZB9mWoh5hexiR^}w>&)*zKZ$_8zURA2J zeM(Mf_P(?kaFOK6I>Tb3vE3>FxJ-mfiR3CGLv;_p$_z9))#bc8)P98|{lNw39qnbq z%pU?;5ALZJal!5jSj!KYZg;-T-^lg4N#&HhSL!y$JaO(Mbcf#AUR8pgNk$6C)4D`s zGT$N*g%R@xMq`jy^sR4pDf364g(vPNggY0s2X^#C6_dC!H$ILnqm`&=&^hGCP!7c&PFZ7YU%H}7I z_M#e1*eyOq%vr9^^X3q&=TIc!aGEu);Ja04bxyJ0-AVTPF^sag>w=rS1Ir$m31G@9 zvz;;PNaC-JKjKZ(0v#Z6wc=ez!c)N{VoUp}MsMcN1ZTJ#j<3uAb|syN6>P zI8U1EEe*g=m>i0fS!sf$0gV2n&mcJK_7clctg#yuPMX;fo9WqD9mg%#NEv~i0n!)~Fx-DILH3dO7AH$F0XvBdL&A)i)dyxs zAsH?VOq{-SdS8NF^~$*$?Pu>P@!K@EcIoeQnD_#S6s*duCL_a^Z zDGWzF{xX6t;Jtu0N>&jP0pT28#B(^xYj?-tYL*jjOE*PJ;*Nv|M=9_j; zC$t<_9-UsyWa_p=W&SkRiJ&(yPoV?vp~B)&0jk%XT~Ilu+rkkhxCO2DO)BsA{9 z)p|d!wAbXPZ}VRskn5=2=Na(iEO=(=trxI7={NXqr!u4ggde^Q39x585?(oiu*|J? z_@3*0dS!18pai2|wDYJjVwz!xbU@zD2})-DQtCn?mF}8ovY}plzco~IsGQamNNen3 zUw!;LYk;qPmXkUZ)rSIe$2Kul4Qyb7Qi?yzAMe#AazMOx-kna6Px{-E$c!}+;!f7Bp$6_fIMAK#EhWkVwBG3_)$_f*Bo@+%8%Yvj4?CiVO6K{vU}}p|a~$0XM1? zYwSWh5H0!ze6R$-rq_A=jh?c>(!=GTea3G6w@O$^R`$M#uoy3>b-E|Qcu^_utrNfY zAcx>Q|H)@+phSgPpx2yFrz3cFo|L8c))_J=CWkpkrcM9t;P^}NcY}Fw4{dubw>f8R znECqzq0(C{{!qs$T<1`?Dxbak1aLU46vXh4fZ5iH>I~rd$_G#Eh6AC`9|2(}!mAdb zD&T(77=i7`<#%@>8w)`qCi8qV_yZ%@Ncq*RM7E&fWP_NQ6SPP08D~ucPTwtuq_pMt zL|^ptUi0Mo?{=63o%amxp`XEfml1~uPW%}*u)rgbfRo?4rxTpJOV$a{WaMHr=nuu# zNtjy+<%FIvhT*?l04R%Un+6{9 zFT_tNH~hk1YQ~E6WWPWD^Thw9+>X_lgTARvw78-}I&{$TbG@nBJWlE#Oz$6Uj5dO*k~+=ouSe zhEGJv-gcCSTS-zqh#Dip8uIf8S)hpMhvOQvHO*!q*bvf*OeWfPJp-M4dQRQT-~$<# z5WLo$j?m@16FW}h^(ym=A`6*!Q_{f&9F-I?CqG=mr6qLkwgEz#sD1vhgQjoP!RL1F=|e=tMvl%vruJoi8NkiW&UDJUBjOa!{?NB{^_s_#YL9 zp*Ua;H7lX!v5wa%u%>FUG0vlXR}?TcVNC-zLzwrnMSsc|lY>Uko}(NgqJdQ)TH;Vp zQgeYqGT#*-2Mg*xh`G`0q14PQQ58sVfGRGvnk&KZ@OpMs+7fF+qSGEgFf#`|w#haE z`I)t9NJjvRME_wWGYG0iZv&wM(hlE-6+Bk~xZ3iv=snPIQ7c8oM_D}D$R2C=72MDN z<%UHAK53}mMmg?E^AVWkFGj>P2-HL`=Ux6t|QX>MlO8kGWy`Auk zgM|CQX5d}{H3E&luO&|WmxXNfhlN~n@%}ff8~uZFyQj-GJH!5)GogoD8F{Med3!8= z+|nR*BrE=-Bl#IURj_vb$_sQdSz+J0FOwP^w-+~tBjC_*Wsz;RPpwq^(Vfd_7q{fd(Rd0TL$9)Rg%*jV*7KKh9( z75TKu#Rr%8rmw|)Z<%eIv$~%hbm&UtA;ML5cl+M@@i+u>R8@jX<#;kB6G%1=yLjL9 zI!fs*>3}?Ir(R0g>G6{X(x}QVV3B9bNLoQQZ`CoKpLP@(WBL%k&o zg0+V5B~GoV-xrjlNban`X-FwN2J>0Uhy<$6#*||?ZQTiny`5)rM09rmMa=K75Pf^5 zdlEKpnyK+P7q8PIp}^!4*eLxG+S**y;1{c$_>2~Nvjf$Kio3yDDAY5wu?r0coor0* z?%bt~}U-=EU4^((zT_ne~RavO{L<7k2oX zOm6S#f2J`RKgr&m+6ueBpdw@knmoPmDR7tpIR^!Se#RvWiO#2s z^!m{C)EF2VkvD3$%F}!jyjl47ox;Qf+{M8?YcE>WO>tF(8tdh7?8)Pt!=}Vj0@MMV zoxg8jS?=5)Lt6$!`pIqGR;Wm@6uxBxmJ;LcMFd6gw}b!Q9ImjJH|mL9M$MV@@eY8O@j1sC&3z8 z?mHy+N}urdf62&dMJzvj{H`Wr?)W1qI!lPCAsnmEzBxCI9lzp6vq`xyu13&T9`vOK zkkabKgG2dT-eBDOt+rKtn;+$?MRcEBZAcs=yO5gq?i)z?HH~jG3H(Y?;&=DDX@G-v z*%Br@;0WH-#H%wQpuw&ruE2nD{9+_c8XjT{+$k5Zr>Go^UL?qe}fWOm!0H={WfA`7o{?s}j`DL*PsjK1%}%kXew-?7*232fxT z)c6O_J<4}ih8nttF1@VCd7GW%(Rr?xG&TQsQm_eEUfXqd^}M*vLxV#IZQ0U7HSA2z z!8BVLQLbI|>A35s7iGsQH|;v^zTJ)<0f$ZG!1L|LZ8%Qa<{8|nvq>6m6~vTK+Yt^s z%S0hvcw@{gov0}A?k4on#$@+XDWV~?nhRezOBbpy(rjRBzPt+qDf#Ns^y@g=s9$V|8YIz-axM(>DqYh z$ymwjQw|+=4s6!03u^1b&}+wSp!7P{#U~vG?2-DwhvFs%_244D8p*K-Ykt^dw^%yb zN7UpV!xkl$leVMOHtug=x#kLOW6)O_2BTTg%2+fZZOMf%IU*+s{ckiQP!_g2T?&Oo zv_u<=xu1I{f>az^M(C2Kq734xia-8toG5JL4BdW{3@dTZT7u7#&;%j~%`(0HzdzR5 zSoqj{<%DtKFaOz{C%#kYD@E>5@Q|EsLpD`eWu^w;8*nd$@>~brr`tnkA3uRziRjw$ zk>RTW2e$fq8m%5|c&yiEZv4QeyCPekf zZS;tNWsYI01`KR2aKNc7uyr4A>5ZIwB&XMbU}AG?A95 z=V4>d@?0{emk)*1c&so>dqqoIO=&~ zrDiGSRehDjtu#`XF@(=LAcb?R_I4p3+o43%E{J`|3#owG1M=`mN6@cA+Bxn@9!0vh z^PvO|MSyLMJY*P2{pXhu3+M=pzFVYS#8T)zVR7W#r_}_ET27kYnlt$Y{ zL~mYSJnODU|wt~ z)*AZb-t)lNzv+xUQbk5g)WY9jc$)bHkD2qLq8vHZoTT_aauGG6Ytd$U+b21W3pPeA zv2riv+)-mFf9E(KkKVE7!29o^v-G}&rx^MLq6SK1lP1MPH6GH1%fucfkFdlc`D$w% zBAx0BS)`kQj}CPZPFe8R5M^wrrvim6hMwO#O8l4ysbTaf(1ZAoxIoSCz3G<(y$Af5_Rq{)OsXCj>bNu=s`JlRqED9*!A;huq$S;Lf}r}+d%bn zQC#Ja{JSP#*Uoegqwt`#1G&(VzxKe1E4(^te9-I3b1t%PY9FV@i$a4vIT+-gim5vxQ7toOo8gN)9NNp)w{gc$N!df@ z{G0s2XJpJlO!-66sM7=kok7yS(kW~a8E_ViDAZf9fJ z&W8v8TY<~&iO`2xot45#3h<$VUvI^gim(kt-(fRl(G8w{gDW`nln=+Lm=VfZaw4xb z$dIZ#-8TyYfH$U}QEw5q;=+*@FfbLpM!-wNXac?en}O>D8MwCL+4B$Q)=*|M`uiHTL4&`dAYm7FYx*BCf1uEuq?Q3%ln0)(Twgga!$p% zoQ34^%_0#dGt=x44&{mQ!SNBiq#GbrAIamyCqb`oP+O6(VfGaZsJ4PE0|ps$kOX}g z@jH_`jL_29P8!ABunCjZh{Jxlt+Hs4&DEamMe>JyhKJ{!q+sp_=NtLd~26BNz-HE{74xm=lm! z^_=eeVTd(?jlBsPS_3BOmLD67O3Qc`r1j{?&ST~;V24m-Omgl*XdC5l-!a|sTjW$? zGcpwUC+?Pc(-()M5P8|GJH0VFVeLVvzXMI?HrbCnw-k9gzBdoLl5E!%@~9S2nXx*i zA&%U1X!<3X07fBS)&+I~FbJz#{ixf?99-uJM^6U%vwjLXTEs{RY;>l#0bM@TG(jz@ zNJK5S)+ZJdlQoCx!pK|s!?`_$!->(Wi76yhw1ZHQ8+o5Uc*VF?t(1CR-agzzqdV)w zQ-+deBMN7=xoT7=luG<{?SK6#^Ea9OkRtOIS0*W=0mkJ*wU1l$^l%qGOIesTJ4STZV30?2zRqTGwx9@?qcH9gL-{+sHahf74wom%6feYFnT2;M9DaNXPgxD)`F4>36Z98UO@>as>HN}8kunqKE&_ZG7#Bmk zO(Gju5(=Iyk`}OX;6nWK$#Gou(dsGx(?Sbsiy^YWq`-L{Qxu$al`vYv2 z<`s<<5EcCld zzEX%*$_8WkHhpA9V-z{BR=Hb$B9r2&-rZR)_CJvWm>;Q(s27{KsDFLuUyDLkx0jsS zKY7)v6({G<9Zl4-zpRo|GiB#(<-oYmlUo*574MkWIj7L_^!_<_prZ9Tt!Im;E!aQD zG3GpVQtq4lfwvXHLB`YHNoi@x1F7*izVe zhT5VJ3H9<-ASPT|UBRgLU9b82IJW7xDCUZoQAMCnRGS_svbXgv>$Km$$Q5pCa)J|3;Q?#(Y2k3vyM#cGk6k`Pm(SHxy- z@1@L^6>TPVUV?GK^o*`6rt_Xi=~a>u6UB`E+OPPW>ph#nPH&HGmWD+g*dALc?c6BK zaHt!N58CjHxk_4eoer!*h*J#Ea}#wRopTz`B+iX0NJYw{2CF6T3O$eyt=_Rm!H6B% zR$76+-2yD$k+=3+)a~1NZ;eIS>FIMrujkH9Sa#HSb?#{riD-?{0=XFez zneUcCM^PKn;o7T%3Ro3Vgv3Shat|o5fyL%~mvQd%39Z;pPzHtDX-W6H@ zdn*HdE2d5smZ)^(3K8c9_+ST)6J}k;8C$_3G4`B?d|yKx{&Npc!Q2^Y#OfYVqJSAb ziWK_+W4jT~7Ad^Mk)YW+)hCZ!=KJ29R6gw6Szr0aa` zIYA0>GF}0U^1;Hu0IxEvd_CAF)6MY>niTFnzN z>^LO4Ozz|Uf+-f0UmkFa?&P0KHtWm#^*GKV?onHT(co+43HUOjZEWni?;Pm<1~xW= zcf{+6V*|is@5?|<S=clA=d zrB2U?occ0Q%C|HcQKRXpUWa?$IjmcR$ZCr%DpP5JQ8Y=Q}c2RrMNt zyOTn(TG~f=(GU$(16+kaLKWX21(k!cLDwo|dq2xI=mC%EAQ!)5&lyML@8+A$R@w%IID5AVn4V0W%0_pO*yz%B7!fxnqp6rC zFqt7wXnp5X)kQ9{Oroso@4JC>dqm2!;R5;Nf)%SpVJnujGh@NtqY<^pwNcI_K>oSv zTu?XwY{B);S5QGRaPEz%=%2ruoP<3eL_F_F3yrr_PCR zqp7s$7l&8BR#{&2wLU`Q<$+lbszSs){*Ky;FHhW8o+93I(PnylDI(Lsa3b?-j*3;;H!Z zWMs4}@t1NKeHWOyE^H*x_qFEwzf)!FEa2jPY<1;&Y?)4O`05v_sSn>7lZPjY8K!2vebR{}RH8-2jHNkwhjnQf%k6zTyr-P(JInh!j7WM570Ee5V)bKwTg(fc*;i`*P9t(jg862~_fX6( zx4|7f2A|%!8j+kdkn3cwHqY+W$sOR_C$mkR zePNpFqrS^e+MLxXr6ofjl$Q6tsftJ(Rmc}*jMRylJB@(60#VlI^R{t%6mg0I#{XHx zrxx)UI;8(9atAZNBYk}6_%6VUH?YupHujFb{B+pu2~z!)m4VB7Mrk~z5P^Q5OUHQ5 z+W-5r=vwL1*WPc9pj~1X%NfhL87jb0Xnd@{ctE@`Yp`9431c>#$s@K7qlegN{CT_w zhj|jHLextU@|jxR^? zJFP!vniU>?xWeZ4xC=qvNgls3okI!O|MT>D--}*b;cx$%R5LuWw*d8ynJ>vL>0YYe z?0=pWGglI&Wke*n<1XNbNF)~G`EpZ!ld7-pvE(7d#ZYh=skS=FBc$jRJrFl z-1jtSQ>Fj4slA;655Z}{+3WIPinx(z(?=4j(3p#vz%kH&K zEIf4Cy3)#2k~c%VI;nWvK~m1ilAdn-eBmo9j4sBX?$(;g2{7%=(-O~qy}y4Gn^zUJ zZiA+r?J?6+=+#%yfXdVWxdkVxp$*Ysr%7Gho^Djg`__Tjg4JqZA<7!vacMLzBm$jS z%Du0>XPD_)gY*d%-VjEFoEh|n|E!TA-DCcz=~3-}C&Ps$*FA%63%#qKi3WJmy;ft~ zubnEQ)!HEbjuv>-Pq0p%eX0-{BD5c}I~wo(IJ2vlRR|j7o_gWgpPU?V`CQ;4o16f> zVLNf%626kj4Ctq?`yb^R)|j?{$_27ZwNayHY*e567`imOZ|f~pf(w+k_?k>~Epokd zz;sRNBJOmi(-+6#9hGfcfeV;OmdBfeO?ag#I*N3+U0R?&zJ*^2rhxhs5Au|RW)CIa^dosQAu(VIF$Yu zC)Ov0Ej0UsBiaf`t3f8+L}Xp&P3g`@J(omG-TP9#ZqaXuz-VUw6M@wo_!oisUf&7c z6(hb6z>8s*3F+#_6?`W+OA@@uddmd{C%W}Bc7gc~%v?|R2{^gmyU{?6%zwb$b+d6a zShc+yxzNNdcWxCBKKFldj0cY}`WX?R?G|eIqTH43J4>*;SovwU>UQtV)+W&;m@uYn zfRmfiyiFPSqF)?E>dB>hW1H6JpV-qE8vg5=u%iw59^S7@F$kMDbDg5krG3{7!WPw^ zu<|v2zGKv9;PW<$k&jh+qr-xWeo0QcrOy~;J{sVAVcbeLf*rT!Hln%m8&{v$HUL7) zhf<;{K_1g;sudv8qrT(Rt*23w#K(6RBTq$g1u#z`2!c2D=;lA*2HPnbOT-nD%TqV7|Ok1%L;fFA1 z#0pX48@j|)%b-QW*c~|IvIOa#F|)gp`fL!BVvKu#acVQ~Fi@9*qiYklOn!~pmeSM- zsut`nT=|Ai%@;E&LEn6#h-Le!65iS&BVzk~@aEpgr)fBm{fS75rgVvvBdvFr-e|tb zyYgjC2{MUf_&W888w_Voj^BYSROWx@Z&akW`+DN({FCF z$_`X<)Cz8#dgJHw>+Q$7XYDhs^qI?GXZK9Zo%x;q0c-Yu`D`}Ja>4cwu@Pv}vLa`y z5}|yZPw|#nM_`LifWwgx*50iI=XUQQl$SLyj@Qn9G1zCAy`3mWYKuu;m1}PA}RNobXg)=rZKb=1=o- z^WC+*XaDfl+dgU~6$yCYchRBpmGl2u&T}hXlST`_4LiC2sDP42@FT|YuZ5UWByW7f zl<52>=PFlU_*RhT-}h_*zy3o{d(wSs(UKFQFo`m(BuoSsdmeE zE@ZI=dj0S(mJA-WO2d9$Mc2^}7iaFk$95<4ppVx&co!TK_#V*g{`z16!}EfIL?rKt z3(QZc0%#QpROOzhGYxO6^GB75{JIM z+=E&Yl@mZ07=|JpPwDFy^-i%?H zpjVW*EvR_T>-}2Ye=%k3d6l(sy#n7C5gFW_CfI0R)?+>K^~3FyGt!JpvmX=XGVYGP zHlNAO8rx>>IH?k;BCK+tj@Czi&UtKG$zLU!MKS#ZI13Yd78KuO;JR+TZ z#zs)o4;qO^BI3j13bei8z){ZBjcqb|KPcdn>$(alJaWcZTkD~seec}Ux66&q)b7Ye zY#BDeY^%h;M~DB!2XzEwHWm%n>O0w}7nKPPbLLsy4s_Aq)_46=1Fa9=Wk&b3Du*<)wuG)4o1d`LwJvfv3Zsua>VmLiG^^gn^iC{F; zPut!|w0o*LpaCx&n7#=WL&MBDaJej{2smCUf)Bo{f!S|YKT=1q?1L8dQ*$Eb#qx~Y z&q>)!kUK(!Dv?6&_z}%o?1u7lTuW(?Qs4}fnLmU+_buPWDvDn`rPZ4(Y$VD{DR8_o z7g0?{ZQ+rwkS&|+Epw1A*Z{3FCFb87an3|P4>RN22Cv%nU3@currf7&0x$@28}_W9 zwEF#vQj0UjYmw1rqcWag{`yT#x6(~mqgSK;(w8Q7J$GYI z7AzOP%HqEtwJ3JnKRO|Q&5|qkD5+nLtvI>Kcbb-Ps={i{t7#TnP2(1BJGg>dcz}(x zT`1&H=k-y(^Al~+UiRM`q^K;RF&x2%=S2S#M zb7Z?CJ93Gc7M04-p&WBW`@y-+lu{U~Z7c8RSj<+*5-a>R+Q;2v@J)JXWfqCiq93 zD4PUdka1_ip`hAEZd~BDt)y7r65^5xi|g-XEd}6BVSUY9ls1V0Gw`X+_ujuUdM~(Z798<`t9D-{1Nm1btE@XS^URkAi%ah8ueh&!LE4{PwBB;HUDixi z-tetAuG~+Ts@^#tT1gCklIqz9iT^&O_R)WITgI8M@!qyst`FbcZgS84ntpSoS|9XN zI~u{ECCud-;56IbH_v-Vza$H}^mMsEewwGo#s;y18;T9jJuFS!v)S@gF)eX51A^LyVdhf6%)~yc|D^`kyA|;9_Dov2yVnMM%#0H3f z2#QD(kY1uFO%Ox`6oiN&iCE#KF@vjA7>x8gv`wQ zuJvo{9UHW@8=N!Ohao#YjMk2;MSuF+g>V>Otp0zuB5*UJX^}Nfziu0YeSS?0yZ7-f z{a$)179QO;c?YDWr4Pd9$JwGC^bUI7lBD@6XPUGD~kQ_%G_sBlK^f=RsNtH>NnPU;sndGUJ7OM0t zH3}L){mS;c%z9^(vu=qnMvSk*AHlR8mPt39)zyU@O(!2j;}?WrFewLL_7ZCNuO;;8 zwZsoz4EkFQFO^^8pTv!#+QP(IUNQ&9of{hvW5#Q3I$Wj>(}@}0Nh;B4A#GMie-2tQ zEJ|5tjw8=}V4KXK$L8TKP{p<^VD~!p2i}IRXci=GO=5FGo8MW%lHnr`{4#W3WraUo zOOi(_Dd=y6Bv0p@Uy|l#xxKOczh6?2;eP}Lw9_+&s`a4l2u=_ybTCw%zR7&}^JNiD zRn1J-cmFAE2ZvVqS;S`8KOL#7Po5%$k~=+|=UKZW`SB zKAu=ia+mn>O1ezH>XHKTkzRHOro}_gFXqvFQsANvr+hohHGII^N{{Q{T6&4;n8DaP zBhBfhw?f8jeD^DA5031u3tew&$advgd$udjO$knoskZ6umXz`>Ou zPisAz!TC{nH?rKQp-TzYG@|gKYZ{?xH1fb-{Far}R-nrJ2XOZ>;jG&v_-s`dK5|79 z|8c1%l9tO9a~3?u%t3=PwiKdzH*elunIHV)+~b;=`Pig*ps9T@mUfqzS85*4dImD> zB=B~w`3@@KcgVDgZ4CNh@?95VV1~X5Mz2qh9}S-NTx!$nnX=N+;W+nlpRbD3oRpWo+Hjaw2@i~gfdH{6YAKUq z`j&h0v9*kkc1VZ&bN?+arq3^~-j+zF!+EAZS5Cm!JHSW0xWrqVM6gIe*{N${`-RXl zf7tJQmQb%OLUUNGj!RLj8C8Yo>xfzVu*l&`+R48mWIgq9vl$ebI@FC?{CfK|jf`~V z5R{dbmF9|RufoHh?H1Fyvpm~dQ(H^5VL$C{^I!|l@ybho?-SG9e^>wgL@q_x3Eo`O zO(h{kjl@p=F65mRdOQ?0AIH1Q-Y#D5^C-*YRA1!6`g;@nL>J2H*q(_t#V8Uc#moIU ztCh#zn=R>e_Y+IfD{;BTuUIDMR1ix>R`t94#0}>b5rM39AK$n*@e?^LH`b*BmNo}s zOhnC}AxB?xo`mqy46b#Gq^GV~ZM)?29WHmEwu2rT1}JqVjYe9b`m-sTx3lcp7Mz$t zy18&j>GGMUn}RxC>BYsI{t$esgV*V;v!F1SwR*0aAz@f_;x)lFWggTjZZSj-AHJkF zi8g<#I$1$K_a=H{z%9O0B{G%LP4wPj{BO>a?*M!TTv&Ivibvvi5MRw|^yH4vp>DUE zn=5QuZoT?&zVtU}IiQx^^I@HV_wr3O1rc8bhku<%_n4s5BweD6$oEyPV!o*ri!qC< z$hTWW7DMbmsJ*F0)pm9GRM7aaIAc^ITCY60R=w;6)DnwNXqr*c%@m7rzn#=N@w7X? zKb#8C6uDV+D`nT`uzoLT_&kIyMf|jdXzXUJnz97wwhuM9ZB99ZZ5s1Q9K4a5O6bN<&DiaC zM;ii!He@Kvo``g8am&pme!Z-w7THr}(!e`EcC6PMHUEH|q7yd&^Z%)Ia9a8mC!BMn zf`|w`OZhK(Am@@P9svtD(cMH2+qhYx73$IorA?3?HTy)=>XrOWwI$}`>(~7(F6TLq zyNhUDjPm6Ful|O~tF_2+2WtM#Fw?SSNFc_{z;97o?gg># zePZF47VdqbkUZYK`AaGYp^f3+PUXkXkR(>?W^fBs(nVHDZW^n<$yc;b>y1K24&4fUb8t)_{3(k&!cCXd z+ZHU<^e^%vrny9}dEk8xtIZXOqo&LN$>sw^&)=St2L-CT@bBXV>lMaV3(3+eqU6ID z4s735Q*Osy&2ebahx=;iyp0-e>3Y3b(D8hL2~BkMFO;SlHirKl=B86bQ)c~rl(S|j zv;l9fk2!E;b4;b>n&-?yF(zhLEh0W`H=@|=-YSsw(L_Sy-E;Y!W9whM83=u==6<)+ zT{Yr@q{hd!qh(6E&`-KEYWARt+PnL`8Irt;Y{`0Q!hSpWhidJj<*oegH$-o>9~P>g zx2XNZBUU?YS157U0dRKS{%-sh3gI&pb9Q*I2fA^AWn66;mrES&#_wEsb_bfwoPRdl zSM)%}1^_=(E8*6lP;;(FOzF^)%kL7qyMMD9@s^Av7pDCv$`(o{%3eW1-kJe%CO)0W zmPQO5l1{k%8+gVH>MW7X+FdRa=iY@3f)TqW=0jA=f7gX>7(t;%+|XFQv0|O%`cgEU zz3$|qSgK%}TH4nR_fxM4*9zxd980g)Cmju5p{?z`h$_yIhEKUUG^!|UQmfDl9Zh|O z+i)n?^{K@5;~$AVyg!eNf7_{PT@>y5jhAm#jcJ)1LgctOxw8Eut6UE8;X%tr(RHr~ zAOV&=#iyA70YYJ?yMCRqlWr1E?Lnxc_~GL>R=O8(DH8G%I%{GLutmfo{CCjMj~_(@ z)!nZjNpPBKf6$p8FTE;v$R~lMP|~h_uHOedm;P)t$yh@hWUC)Y=_r23?9f5{g5@7N z=MxM#y0I=sBDPBP=NZI&W+Q)KIstnd9&lp%FgBrZzyaGd+Gkt}dh#YR6{GudkpQvqVi zQeG`*Dk|QHcO`)a>ZXF$>!2NEB1Qsx-T3bjCmX=Y65FzJ!tM)L+o%;9`sd5Fq)#)$ zBO|MkY5R!H8}0R{;eYdxO|@tiH>@uM1KGG;43FZFYVm)JJ}c8)O&wu@yb09-{9EiV z7%QydFLfbz<3jL%$50G|k|GXKEE$Z0Fzvx>a{l}XGh6`QJ!2PMS#E+N7cQ5Ag45l< z!IvL?5!^Fm?(=PtCG1ODl|FJch(q(2q-~iehLOC7t6wGf3DtPw9&?6a+KiabIDzN5 z@DpP;=hU&!335%t))$(DX|C1<`)l=J71`>~fF2rAmp7xfEAa5i&8Al>Md-r;DPsd3 z$riDCqNGDsin}>9>9IPOy9La@_Fg`sQ4;eaC)xiCEKxz=8M|p$6_5?)=#`h`50&Kf zHBde{!QWtQP5p6H z4Z|^lR*Z)&GBK%-6E?PIOLlE&A>CxEwVM@GnW2H;;&Fb{mI>Pq#dpJZ&U&-;+eU@ z+lPndd}U9;^T23O7O4yIG=?(%npquhmN~!dff_RKT%xGne*9N@6SvIPE5$kiu5zRs z0bC7cP0uJBzsk7HP*;kb#|yu5qzspfRn=C33ACJQ_Hiw!(f1FkT_Nn96fOU2%jJa8 zr{2zbyVygYzMlW)EAi=xf#YT8wGZ71n1t;fe_H$XRipACdXVuR(|v6jNSQHbI_+=e z9&4krya@Okfvj(HD#(SYDtYABKsSC5MVf8Rkz$g|AYS=S)CDC66uxi&+oXxIBQ3kr znx*A&ep|~w4L?IzQNj!XzjeD4Sx>nN$;}srqM6dpaaHHAo1eSmQrLOTcPsk}Sgj}1B&pRa*2G+V z?Vo;5OAx|P1_(()#MfVlTudO;HpJ-62E@-)-_gi>lytfAnN1gB$w%CrPka0QU$uQ) zi65esjzLZE7(MWV4(PY(;FB>cmv+Z#cv%9<-@nxw0-he3YG z7)y_E^DTb7O)z2M{HSMU$U>vX7p>*MdHtk8-NNCPPut+Z-sm#<(Ym@{Wa2Lr9V9OBoQ=j`57qQMj&AIux z_POX0M|(M-P!lWl8yWuQSP#q4e&;j%PfYj8yX~wsb6q8<%=4DGwS-l_V`jc!p@2Y?+!vD*IM{&f z@Jimwe$=Y&wjdfQY3QdNqhJc~y|cta@kLNjbF%Ki_x4r%5BiFgzZXs(>v`Ow4eFcs z?Uiuv=E5+CodOCK6GRZ@d8u9`u(k(hrXAj3N}U=yB`H6_`J|*>aYzn z!`o?o;MAKpZ$6lo`(a{Xw4z-IeWshzZfKXY8eziX6jpm6(DJxo^Ui%A46^Pkc)>UF z+q9kM4tCvzPU0MbN_SqyGUmu80al{BPJw{A`vs~MBKUK#+~0R8M$Xdbuy(Z4iU<>K zalKHHT5yxfl!TO@Eg}}AEmu0+)107{ap&iH>%W5Fej!b99dwsC5L!Gig~^5(8P!Zz zLm{tACCvdh$X`r?u)$bUzqrN`)`IK$B;BXe|)j0#tW2xZm%ahhyP^*_<5 zRQ^<3WvHn(T#VYRh1;7f)B8VJfcW%uuCr&)9yxZbtkjF~Xl34%&+loAj_OV!mB&Bs zMH%_Qlly4Xoy*}>vWCW=@xOBG*5vqxpYqbuP0k^|{)W5B^u6~wMuBg@uy*|E>+9QD z#%N;#7Vei^ynG_Gp0$a{S&NE+E@4VX) z{Xost-f#ZG`*_BMpbdoMEnm2o<@nQ@)bst{0)emaTy~$LZ7^sP24lU` zgi)Wf_Bzkg`l;14kE{L_y9;;Hjc@4chBeFuh8TpS{u1bgeTZPsdKc6XMcT;3+pZID zNaZ~HU%FaK#JP)<7do|y2mXjB*S|lR^G|&u9QnEuv^al}e-3Srx$;)%5c1`8;`wUQLsl(k;#WGFZH&GzD%hlq zUXdidYD6aRttxr2w~OgrRx48`=nL4%9i<&mkn;N6#SdS8`-IknCyASA zf)(Jr7}ScBd%y+Yd=pzT982|H+41=OUwp8mJ9ND(U+m?RH4kvQrllDX5%E^uis!J- z`vAMr)v9Z_bps3a($&`p>b@RxB^@oA6HnG{m>=}Vx!dB{G+2w*w&NrHb_)1`!l_Re zQnVFB=Kb;dvIgW8CatMC$4XD{oh{{^)Yu_p^|N_383YK5FR$^BH%G5s(bXON!U?tW zhgqn)AM9^KPS+J7q8K4=crD^`4NwGeE)eLRNRlzD+F@GaFgKf43>hY8(E@Abr-@AZGyOFDyW@`paw(LxnF@t+EU zXKg8FePh`Dj3e&K373M@j>$FUd>T>Y55oDq$9$D+9diH2lXdNa>)C!q%U@E`%JN)w z7!+K8gsBs!7Wg;I!tBqd3oC0=X+~q`w#;SLOO*$3AIx_Y4Jb$Iqok|thzvu|)sd*= z@1yvvlfzKmy|MV=Mmz8Glex3Nk|ewpj>Q`E?p5xy!`I2q^8-u z^qH`N0e_r#r?d3WG*s`#4Fk%fmPG9y6}8nU6K`b~!NS_*eHP;d7vr>R@*{M;y*1#0 zO1IX&>>2f8EKOC%Zcn79eEpg|&l-)fQ>#?EvTVPl)cZTJ*yF(`jsm@V=Uhml%PG)v z#>TrBM(V$L+%Skh{gqJeiNQdn{7th+9>Pi`q8n=v?#PM5Pdt~yA7#Xv)qBX?l69MQ zivS#1gh=Z3J($kxqH)>~WyTN4_? zXm!ILm5`eHwD3^J{1q$9iMdIW*x{VnjDDd#EkGuiP4bvPWgUwe3*MNc8K$MFiCEe;nWY;*IVPiHiG(f?ZH zFVu-stMN#4%g{kKsO{As&jvvUVON8Wkt@(>yAou}71JzaShH+TsWRRH*1S3}-dCckVAC}`iOR-QoSD{U0^qoCkK6n0P=CEN zIT+f}Ac43RK31v4mQF;ygZIgA!#ck6bmxJHp9z&gyxUoI+FI>t58`5wkL;>!11nTY zyNj%|D`zg(!`{N2>(zPv-rdgAVhAQb!wUREw<{Ro(NbS~8{Dgf^OCa-PAj3`vhK-m zb}Xr@yLf<9wY)k;s&4Y8pO7kzFG7lps?T<4lYrE&l4wel1w8y~-C<^LfZk08nWoRc zGSx8}3x-7?ml$KR{D?Mk#%alT-GkcaqgHrt5VNwOe__$Q_Q z>fa41(6%;L*f#bJ@*M+99VRYDo)v$nlxi8L$?LZrY7gmWKL~T`3qtEX*D3;c-zF2MU zZ|wspcHDLT&f~eh-ssdt2bO)-)}xn(f`1)`uDff2D|UOx^4gq*)Y}dYCHqFJ;0;bV z{|aRTbsm>y&vgD?-4|S5X?2ADo?&)nl*laW9}L`146T-C#!`xcdDA?j*N35pd@`bn z!&JmtbgSw+nbI4W_}&G}Z3(P{#Z|@If|BB5cK;z2J4&p6(Q;h`v26EGnLhX8rt~g6 zw|eF&;s|2*136iILH)M0GLP5t_0Ybf6=o&o^`Ub3?P2xbPd47@4RfS?t0|$_wiZ|% zd5D@HdAK|o^nO-RBxJb|5mI@ zM{r42<5TK0cZ1L5q!r%HC}-J{^g2Nb90_caj)`*r31dJi;m-(YHKQ$&=x;Lm=Q-Yq z)?K*OcEr9>qlKlj389YbCg})i;kL|l=W((fcO1Rk<4J2+K^SvF_w>mW-5WRd8oN&% z+Obb=3-sE!c{|W`(n~1Sq2Swog-!+n=c9<}@{-MesN(f5wTnJn= zeGOPD-mbs2Y(>$uY~$ioN0a;h{l*_<4vW(8`%K#B#yjP_nXV?Rn#n2hu!=1S9k>k# zheoZ^IWHijW303H+|>Sg!QkzL=1=(^MO>TlM=*UTmu!OF*$U*nn;3yc=t3rN|Fcc6 zgQ7=vW#S;G(j0R31JCAH%KMD*ZVPToAp(k0M`>38?q)XFt!1ECXPf$7)R@~6VgkY= zk8S?oWm_X-7WS3ObS)P&3bA2ykYzu4Mm18{v}Cl3;+B4yW*W6Y*L}~Zrj_7jZwYtw`-wYd8NW{>`~ZR zo<8am9+=iKMUseQl<19&snjt30B*2=Ze>A=}R~fmgSWuUEUG zc`|U4T4VL+u$BLqM6t%2<%#nPHwKzi&cFSS1f;mGB{^hf*WFv_y8G6LGR(#}a)nzG z(}mxUT|0)q`=Q-8YX6@^Ns+PKr@C|O-#dTv#k930OLe}uCeR-5Zt+xJ=8SL;rA}<- zysLLzmy7p>OwSOI!2d@df;7+hjbYon+k#6X$JRMbZrgpaaBo?vhSMl~Rx3%is zXxSwCg2vgG5kl0714!F~F3sU=h-+`Zfv$|kant?TSMQ&kk6M&Jf|#TktD6e!-Me=M zKqYlNA#|II=)%QB%b{<1eW&4m9=GdLGbFjPzMGIs)4#!{NXX9KbH<-z$y{2P-|wlv zu=|!1_kTU%j{ULpP>(wTc&1*Ov3{;Kf1&ftWP!<7*0ob2UrXN8Zk>~Rx8p2D8jr^v z)CzelIkpLf00alD7{!}u#xq@gXE@cLzdK>!zz_^g6IOQE2z#XhSZ8SJ_rkgx#J`=& z_Cp&lUb#fY0PK`^pD_MN?VwK>CoEalhYb=ibrgNT0 zC^reMxx9C~m7S;gAcON%n#|nA&LMab$ZLq8vJWN$oDJepf_-fd#eXQ$(DszA?RPQ$ zOpUc>B4E6g6-sCri4+QKacJP@vm-~3f+Dc(`%S1a*F}{6T9nH%2J|3VZ+o<3VqsJdpa~T2AH)M&RcET98bk7Ad*T z@8`g21OtjsC@kEU6zjYXf5^E;o%1QQA81= zuK?C5HDL!I^yJGls?jdLcWO5n?V;{v(nO4p(3;Wj}1&7IoWUt5nJ2)yI>qwN%EDu$3&AxxVMsZ+Tgq zLMqPz#yc>2KAhShXVw18dA2jdOh5h3It9DFVBoIt$;n&ba?b)iw{{bejAGt@J@aa! z5`{YZ(Bl$bJmEt4VfeZkNeTx7&6cJ*v_PdWlA%u$MS`_kG{F%R;=`%C@7c~PRRP3w zzSpJSfX`*RlN;7tw(#B74)j+Ek|c>943fN!Ny8-P%u2+2Erp1R9>JHhNO1|KBT*3% z%A*gMuPvilppikc~uN9f{bprM%beXfA8F&-Gl(%Xhfcsh@ z#m<0iYV z?5&1*wmG9dtlKEB)a@e?4KdpfFaAEmX}Y#J@n_8&-q(I%t8K~BO@ciK9QP3Bal;nI zg=i=ntnhZt-8Q<$ccP?;eXlN%Cj{amE>95@o#lF9axBY~*T1&Fd7v}k* zpjRF@Tn4f`KdEtA@FV9$eQG$RHHZCq*K37-c-W$H-Hy5KNNV~FkNI2fx974Q+qH7S ztKa7d9lUE;yx*o;vuxokxMrNEy+2Z#p7Xmh#LSp&4_&r8q)l=p=9Edf->WA*CEk^%O<#Ouk1M0T$`lyMhSiq_l9|dP9{cBCU2~94% z@`Tulg@d~BUlz;)35y4BHOakYimmkqw4GI%x9GpW?RE84Ph&)Y3ytbkJGJ=DC9_gX zgz=)TfrQ5a=|4r%@cOh;?|fgyo2djl+8^qn+v}z}wkP~2?km|g22G9*4?mI_Xj63< z-m;lfIGD-wY)#dZo<&v%Gn7R_nQKHfn^Us0ZZnB02#Yy}*E)OF_e$vd_kzroYJ3&M z0iG=^ID9qCYs`q@kVLWFx>z-f=Wx-e+Wi~{sCJ2Qccn28w zTRc%C*ZS{}0a4Rsym-)00K*6$U>97Vq0j~HLY>#oxa%wDa-g-?%@M#6r&(2ShUeKg zR@6qfB^1caFOU(!4{MhJrAt9@I6s>9MvcD!(Dp@g2tV>zLF3P36oMm@@j+K zCsq&Kk}jwYc_=!>OMWFKiq;ameK0vB#9eMPAk3pb`F5dGy+wI8)t93;a|i}tA6K1a z(Ns0woS=LC`tXq=kQ+eZ=)CphQyTiti$%DE_&;d0u988AH)z?Q71bsU>)z9dQe@(J z(g|(!F$+0h$7s5aCXI3F^MC&Q`K_vp6x8=0-|ADVb7cVVc01i@<BnK&ZX+?f&NTiiv4wj%OEQzQ;j zDVbCk5R)&zlda5oiRr~qupj*Sv=un1FJS9Sj62bXy{SPa9{^n?UrP#UMejM%&HKW} zT5K2Gs=X=wn5=}6=aJ#z;enLY@0p`M9cd=gy#`)0T{*yvH>f-wzY|{F<@<}>gL;Nc z14*3|WXQ7}xOdvc75w`;&Wrjq#;Q_aN8~-zdN5e#>k0(i%Lo-ec5J>;b?$sUXrZmT zO^Y(T)_mtq+jG38>gCxQnW}ov-Dqa{Hlin_Q0_tQP()sOW9Wz<*T~B&uBf3dlElKl zMbf$u?q^wTI70roz9zN(ppg8Rm__4ojW8ja7r7VUfe{ z>gxvGk)0Wvd#7|qt{%YuVP0+(UOdrSIwHmQGFr3&IhRmXQ&PzO5FK8}XTIGi{PNIs z!+t9rRhP^0t2%=jzTEd030)kHf@z*o$a7#d3)LovJMmAcyvmfzt^A80`lF}37yZ$C+c>uL-s!W8hYbK5QHR3`cN^a;ugsTo%2@spRh$2@K?!Bj)R*RJ z#YowG!jffpF)@D+;pP|>*e|;l1Qe_TFm3uF86LI*$^fMY+kE+S+EaGnAD~?8UcKs* zl5z~(4~hx8#%l|bf@KLHgkb&?n+I0Vmx_G>s&mD=U3%=vmtf-X zy$N@hJ~uIM=#fQ}r>+$vbL|{neT0}VFNj*9!a25Yd;;-okJ@hN4Nj$ztLh@eWw2ls zU?|L>7;Pd+8~r$g-%Xka94VcHS1@U)CaV&oT0_db1=)12Ib_MX?4P`;`mU-}d zza_cPn_+W+um{DjjUNPqWXn`6e2M(E$y6a5H=!atYl5)5>h0lubLJI?%a3yfYJMs` z{JKe%NB7QmGtitB z1WW$hSYs>|mMw39#`Up?;&C#j{(#8vPyJEP=41n3rTo=_Gruv#uPeLuKz$H1GgDS= zsr6bubD=)Nm3p_SbAL2>X|5lKiE@BS4@lO-@z-KH15hW=fVCpyJgwg!6w2jw(h}1Z zn-kappUmpd9|&)vQLxWi9S+YQdLf?vc;aePkU56`08GVSijvaLvlV*vA#MHv{9OLZ zP!P4|VCc#%&y68z$pJ(RxKI;ttSwl4+2S^LucT#bvhMir_zhq|c~z4RU5Xs|7$kME zj*pf=9>2F0r~@cYk;0U!m*wfE<)Dmg$$8jzv5SzW7*)?CXJ-Dn^<3&B#@m{Cv}-H$ z&q?%UvWJA?@U~uJd^8?hU>E)BITN(<&C)8aWT31GQV_(oH2i-hBjBPeB(NH7kwfcJ z%h!maySUqrN=iD#Cd7{^{`Is2IOw`iD`v!?w~&z5=>D%?ziQgs%V?lX$HnQt*KVbO zhhkP8GP3Z10r|TodAu0dg^J96l!Zf(WwKdY%8j?`9ty%9(=xa1EBA(EPIaV3<(_S7 znx9|3SeuT&^aZ9Cix;*56ZyPU4Y)2=)#WY}ua$vkoat_~`+^#td>BBhlLD6pp0|r0 z>z-FOLX}J zuGoF)A?754JPxKICWaf09RncyGdA^8VCVBO6smmbT*6B1cDe%#1(0rC^dYk~*T(R+ zV}pE%J2csySa{cx_@f~7%>2@>F-_XcVn$3qqw=km3fdIR^#A;PQS1FOx%?Fh0~%L> zy2fw+9XseXCR9IJkaH$LUd~2IxQXDlR-9aXan+VDX#Y?RjI4hV{L34rt0){2q@HTlm5xQc3VW;EI$20&V?t|lq`Gmxmo<-=gfKX{1%f- zeQuz6Ogr_%v!;djvO`hQ*^tJ+%J7gRkn&vL-9eSAaq9G|zW9BLr)Ch&9}oIO9<7NT z`d9Ww)_7kr&tQZ45bb7=k1=yt@wdHi{w2Az^zG^Sozx%jj)VE`c5S;w%c^D30bwrG z!sX=a)yH7u^?A&xf4yC>i?~vbJN{_kPzYjGpEBi$c;9N`EQtIJKI}i&s?$Jvv==ck7HBLpaLi^Zz3Y>yR{zc zwnM!;jtPivBN54lc~X~KG=ceHv_ZnCuyv`bpM)|krn_?LUtf4ITob0B|0sS2$I7+N zRb%UURKD}(Ure068P$8}a9C#rji_rxmK}<~*)a`s9!AXD_yb9(?nmf~@1eTn+HYh7 zDp`3+x}@S8`{dJ0eJcWZ@8YHX@@aOUC0Bkm$eNELGdIBs&F%XN-Sy0Er?wmVg^%G3 zJjCrNl2*EQ3?vlEHd3%qdnnrgh*9O>kXjep_7y9JbTu_fFCP7z|H(9YXlSYErG70Gv}U6BTHluqlejlBKH?hq2QRC z0^aMH;*wU#Duym{+hZn2A8vu%=x?Xuar}RzFV5~fJD2Q(G|SvrAYdP$Q}pyw%@?4Q zgs9HuZ-CPHSRxW$>x}gbBbQ#^wp2aGjDgi^KoHHa>5J#fwktUd2kg0&2Bh^EcKcl+ zPEA=rp+F4MyX~r>Z`e<^9_?S?UW&kO%F<+8O+&*=aRn-qv~m$tz;9m#GG@3;R)>P5 z|LjAJi7Y2f>kDD;DGtV;27};dgJQq6VKRk>xW%?OFPV|C^JR=43p&w})-Z_>gHlgr z@B{~deIl%ads|9CwzjWEBgFNFz&|*>3i`!KfSvh;ZxaJC@p-mrF4r?W(e*e2QjIzT z_ctRzOHAke6H`8{`sDM`))Lduzm6_MHWe&w z0k+kDgXpX))Z2)yOGkR5W!I=sP*9K!Ekx2VH#;ZnJkxB<$I=)J0#^yx4Z!*B@iU&H zy9OIKwXBfgZeB%6$4%ES`?7xuiL$SeS~MGJc8rjiO*D^Bu#AQ|tVcasgO%@~H+J7n zx0dpW-R@WKDyzL4O7Z}m#AWyNy=C;Df;-%$cfh$`*%fTy=?3{H_CXuCb5HF7M#+FU zHr<)Ap|Y~FGs_}W9@hgR&hRKs1$C*E{0m1nEL!kf@hJVTf_R5z^4XJ`>CL+k&9ydo z=$Y$4)wRRp|I&A*0cAeq0NFZp_xNVFw|Gb6w&IGaPBKE-f9LbaC53fd$0zfIGyiTGt#wJxXE&JZFQTentY#94S<*@D&*@~emozNmz@!&!ABGV?+QwnW_AJ@EA|65 zT?!^_#9gwnEuak!*1J20VMOye(WJH;T#K#VYb~UUHcYr?GwM(!2%BNq>Zfg`t>(|9P;hD? zFJb%JJ4nZz^csq6}-?>?w!@4ipC(AJ^6ck{&SS^3+PFD z$=wiq_?>z0(qmYOc|8u>g!Ev6o!WNMU|%25e=_VOrB7#6ikD_GloIQ0oh6oLdt(IZ9UUA5ms1|_%dUPA zZKFy{ta3&L@5o2LsX#1^v=@P>I=AyZUJr?(j4?P2Nwrw#xA>N35?9GpMr!sDG#XOFk#sJ~ZsS(>YrEvn_zCaLmFR?m>k?Oq z@&YKC8*I9=slzClIRc}9FBMg~;_E@I;t)`@-9vvj!`qEN4Z?CYRQJHH*6k|hN;)wL zJ3-LhmD~T_NVSKEvO?U|iebLhz*gXS%}#ek)FMz_%UtX(F`BtTPL?tZ9TmIgT}++B zx}ZR~;+rg`*G-tB4fqS-cy;Ez`r|fTa@h9z=ik;#<~^d46l|hx6xnZv0zWn26fK-U zA#!(-N&+ySr*XjH%=J(B!JT}^+3ZS|cqUuFn29&h8bFla+P&VX1d$-dI*GS$;Jt2lQe|DnctU(D|W2V zdwqxqloE`VcVYtdkgZvqz&<`*O1qd{SuEj0hevrQgxH`ImfEwF7(iw{BcIRh0H#>n+FFzN(gKid+=X34QT&U&q-y3kU+s_E?gx`pSIKGn_wto=pi85F2BI z08*^HuwPpvt->p3YNDp+*PkCHWwWl?617k_8qpX=W|9%ha9k)V01o3{!SzPo13#X& z3%=xCh3LcC8#f~6_qCLId0-$tZXRt*^Bx%&Fba+J|JXf5?Nq?Tb@8;~KjAF9q8SCN zM!$~3ocMP_CBvxqbW=CWe>rsI=?QOFmBN=~xY67}ywX*GJ|8WP>tbt`Hr7-PDk_!H zkM`9ypGEqioJ@_}RkOx?9y>DY<_q>1tH9%jX(4cvbS^RRuJa#$D_DQ89_oi2DGc)p znRqSj?ekhTx*V&r7kiq(c^}al6dh;S?+a#{M<<$nzbZ-+@>lEMZ}zg%$6|Nxjsv?a z0<^&jHJ;yiAM^ZKtKc0dIg2FL_q$SF<{Axc&7jRlaC?^ACXO?dim8eobnEMSFfaRb zez)lL&1_8VXKF5R`4miUpG(;t8L&z!Cd_3ZoiYqH1s-abtsM3$?0{@#rV z{5`22t%8oZ`5`y%3h%n(QWnp1PJd=g{a@Z#rAfC}cBbX!CQo8Qh>Z>(-81Rjj~NU; z;6&VYhN# zIW{a^Tq3wLw+Er@BWp=Cd{EhQ@>gOP+UpjWyBj8jV3dha$jo0L$qm}o6VETy%#kF~ z1};=g4w^n@a+NYsNS4^!EQ3@PmD*pItebG|t(u#x2$U<$87@JviH}Muf}Wx&!cACl znQYw(f^iANZD5(?b4p~+)SBlH4r~&O9?BqhIBQay2&%TS#q(TVpq0s00lq(JZ=dl@ zdTmh_(eyt10Cefw_>qZz7=!}id8YHGscF0!FMFYou4jCcqHPZ!{FsBp&0Q13sc(7M z2!FQ}8@4zhqIp_Fk_a+qnL~hvYh7w}`P=Vfo6Ht^cT$8@ozKfSAKYi+#j+S9?x=;= z=N?dtMJxMt?o8u+n7C#o%+PgYTv(P@ROAI#sR|Y78PG;{tUJrxtJ||fKw$?o*xl`v zoT<-b#S`Qy={J+ zxDY6q+ozfr0Vo(2wbd|5^t}d%9>B^T`)VOIIQDvs?p5NRww z-d@ntb9-Wgzn`g+u+nf&{Td44spqd>@6u8}4Z3)xe8+9d4^pMRoUJCG*ieiu-)#z?+B{8TO!wCjh4`okp`rtR3)^ zk-7D+O;i^~%i$$t{D)-GNhiU!FW1dG|&4UE6gWEp7HiB%@$I82>v$o^x^TeIP_AS=jo?) z=&m+=9HZZ~2F-?(v$tij4o+`f3wO~GeWTZODQT;l%=?-HL*IBs|G_G}$9$Tf zn)5kuh(HV*>x0+yDYu}XgUxN5mO5occ8gx{{wCo5^TF@mZD_-v1f|u+7$s%mW}Ru zAMyHkb_X_KpSBNuQ)|)BSGTJce|?BRj^F0PRQ!N6CBSJP4&9NuX~reL3!SVCg>tc! z*>hH8+rh_>#Eu7Sb6dCxJg>TZ*$D@%d`UBV`#2EDDZ9;*co!ZLBbjUXw7BHp^Tuj3 zqT)!-gXYsUs!o%8+?QuxLY!d31wQEU_g3JMiO&$gfA<_D2s`tvqC|v-v&8j|mojG0 z0BR^0aa*$L_>Q6Y3-w{_x(BFpz;cQivqfdj`{W-!hp4dQR0dzxOiR$Zk_vp^h7mc| z7#@S z<|}aEy#K@_RL-fNp4=rM^Jh+-UGOR801z^~ zS?&|^LTpfi?s_G$%mHtO82LRA8JR5@6NWUIqAQecY}CF7b|V(y6!x4yh1s1LLk3Oo z3fNGF>X8uform&Pv_^%NbLGa3Ly}sa_uw~1reV4*hGwzKj5)vIX)Cp4P>1f!9Ii}- zzXZe$q8VAfTK`8*92B=!g{MK1G#Okv+Psnnn(?4*Al%U(0(Qkuagh6FyQfut{5Qczepkp?zi>75n&TF9ftR*`>&gSyk)a!ZzpcpwVGh4{6e;Lqm5V z+071XKF$1nH-HENS6+TStEga zn&|`+q#*{SEikG-_wJt}Ijr)}qQ=A2QN?=;z_|-(F&`ckBWqJ$gZ&6U^ga;3&qxJ!@{ zIE!)eg}=E@2oz&+mJmb5k%Erf zX`1Mp3T$xk<}ePX-@l1X5jwH6XMtbhJ-*H~joo|0vT^$;iVZFbyWGvBuAf9DdI9l1 z=r1j?QqN_9xeHb6!bp+i=3Q+E$8cVYx|Sq;>(aGJaexpG_3sh`vl>;lYe&mbeaYPd z<7c;D)906cC%bAqRVkn)E04s&0u7OsgV@71Oouc<7I@!8MjnCr@ar1y8tR zKMXj{S|w8@YivuEh=^hV>&_)}EWY6qf%{L~(rc`NxKRT2Sn9TzpKQ07?`k(0%K1jF zNQD>KJg=sRT`HZv{b2_8n<>W4+`etwJPi13WpJ zyKN;T+}em8-;J;=vRnu_lEgAF37@aQNWuSVWtc<_^sD*+jxE=&Kcq>6aalhPSTLsa z+ZIk7{to659tVe76sBvi!8t^~BKzS^f>%2ma$OFC0U(rDU>Ti~QYpla&xM_@SlHX=6#hyNf4Ed6bs35}Km0Iv zt{vazIFDK7n6&hn-=$?!*FIA1z*Y;9ef~fCUAs&WCV4mi|426g?Q&qfPcl8PQ!Ux#GN z#GlVS&ReL?Mt5aK+sr6@@tQ+?Y2P4UW9k(NIa?_#)eG6$be7Z?NX$rDoZZF3t*y-| z=_~;xBNNZ6jvxQzfE*2TmTf~aOI2Kfqs~umg1GuBIcybaiZrX=_Y32v7~XnLyW(e> z-x&7f845vQ30CjPQAJBt>ZqE5>I-KD`z&(Qrt{CC{ut23G@T={rm|6G)!*-`7D0<3ZKacl-&yVqROQ7(%T&&>%+n9f}q;+*qi3uh;Ln*sSG6 z!9xiCC<5}SgN+5uqD2y@bwEISVFoZRLAW6FV2ajgx1~c?!ng*<7ptDTQWb9YxOWZUo{QQ zH@bvm3)!OVQjuj+goISqL_$cml8{WBeM^ccCbDGTx5#82TZ9mj?0bxL#>|}O_c;4} zKEKD~_t$;jkNdi$ne%+VkK=W`Ue9B4K1SBOO#OlNQ)k0Hj@`yGEoG~3n(VzJJhi#E zZy8E_2ccc5cc22($@aU35lfN)_aphRtc}I<6J7BIq?Y@9c)JP3ilw}!1?2-#hwMYg zru(I=i`7^rBc2t{5<)1k`vh2Cqv@1Q674D554!Mcvdmdb^g@xnWsp{OqKRFtUei&1 zefR(4r~1qr5WoG1L*q)T2bPDQP>Eqp;c;Gcv}&b2x)gF-E*)b*sqnh6f(XVMGeNb& z+~D6p&uN2k#RH4ZDQM`#oloF!!@UBA!x|d*aJco@sG2zOm>CHtG5$(#XE9d(EijB` zhp~9!?`Iu#>CmZQMw~>S*<)B56^k!)f?W(t#`EA^{2sutv5GqRE&^HE)NBXipU%J} z1iTJE@OnIvPzg3DtNM>VWydc<>K}@@ywliVsvG@C`$mo zw_p=$-~Rqs*y(XPcCJdCDxbl@AobwEgEztO^y`#n{VWbdxe*uHAZd>ZaB->5DBk%Y z4xgHGZ7JrIg7ZpwQy#oXjs)8JLMX3Gx%zPwtK;67SO&u{dv6eIvNagp4nEw@%njfd z4UtcI#()z1&t<$cjmL5>w>uJ@uXELZ1QP_eiPhtieHgMwFo$Ui9PH<@#Owqf%cOyS zOb*7feV&fD}O$A)sN5itX`P_54^uAQcrGJUs~Dv9Q;7)X}>i*o;I zL%jhJ2IIK~^rPBhA8M9;ZId|taGRh{L}Qk3nbIpbpiNgUS5@s|ZclUci5IqBK;eoo zFi(f;5+c2EM!zE&;DQT>1J05E>{x4^)dk457^{}*Z7L6%T^*5O_*PoR@@vgaD3H(D;s{d>YG1E5gxbCebtxSq$bjyKk;jc2!50A zAo||@T@^Pdt;#9+8F>`PG`U9V@U7H#J%u!|PgOM@?Ei8+0k!u=VxJ(Z`sol*4-^EI zU1mJ6AF1uDZDPx@UGZvU7yV_)mafr}ezkf}w8tpGa4*tGp?LW@|6bHvIg0Bfr}I?A zk=3M|^8IdVmlremwW>|zc}`wPF`BQDvP^a|PSluy@s*i(*VT7NlbH^Q^R=}^f7)E# z{$m!8BVN(mslOok#Cvo{UQN8_fo$aV-K6a~MWO<2xw0PKv+rLUl+1h*D*~^=xx_G- z?mCf~w%x_Ej14>dXgan2wWj>`{Fj~AjQ5dn;k&&yO%gSF!~{NgqBJVS_}ZTz?F(On z$7*k+TuCB6f5m|o{z8Y^#g1G3I2!4J#Kuvr|3T%67VVd=zf=Z{PE*aM+1ua`(PI=6zu%Z07?V=(tr7?)gaXMi=A zxP(LpJKa$#ZY|KD|7>};f}-73?{sTU!W55D=wYqclzu6{oM4G!qb78diL2aoyI z6Feg1PXDU1nB#?h7(7=MlbkR5itG)rt`;H=Q!&?xeyY$QmCGdD97AjUnNlAMhkmd5 zGv9DJI+zSU$!#Vz*5^*77Dz1(AOZnYX|#O=!9B9#Cuq8(=x?#TI@;Q@f=|vKIdX)p zMKI7@LQ60I$zdVm+ME)8j)G;zF{8_$E^;`0$u$0IzK?&WdIkI0nvd%T)Ky+y{M4|$ zLiqGvokRwsrs!RNe_Vh6^=r>A{dbv-^<771-Sv0~sy z=Uh{W4hL6O))Yap1b0Y2%|a!xwXU`?s{^OfHF;pZ3BnU^^V=NS&KFEx(+myW`T>N$ z04L=&fjv9mTXL;vdM+YHiLUbeyCVMH)3!`6D>Eb#hj4)drw;4T!Hv@qlPhmK^=?Oa z@l~6JC5>dXd-9ppqlJ@6l3NrXtxFo`nEOM>K~PDF+vLUrj)&531Bq=G6L6wQJt#O2 zc8~}4Qy#fjjEur~Pq*i56Vguq_Sz2Tx?L#|2GsiqPfIFp8mm6qY1L0QSj}z8Jd8(V zkWoU=NJj|Eng~l3>Pe%LHt_7;HR#Z58T|Ug*V@;tNA$XmB zKAW`t3`=m{R;T57e_rvHlZXG$3vkXet3G+JMAeMP7i4>*Kg$k6KEnRO!Vx|GvAW6_ zWm~{yJd$ax&bd8@`;d6XPCDA9 zQl_3#>YSIyaKq@3NKC@`$%J;A-f+?J=%Z{*zjtd%R(bg<{7sI0Yx-JzZSho3<+^JK z{!^siesbikkjmtXZ4`rvdOUdsrBbO8-eB#PzLb}dQ3JW@I7ees@+upZ*u%8x@EsTj z52*T9x1(qLP_d(IS&-cM0MYMSy28%q>R9Da4q-CvjmF9?<%fTNbemBsM@&FJxcNJF z#vVLT6Q+OP%Gtc|E4|gQFV_+do`z!!{c-B!f$0j~`)yb|DVt;g8+vpCYCS!bff#rq z=WkvW$@txXKQ&&dge0gw>Xp^cpEeyf$avXJ2_7wIq@>5OcI%F=m=7z5 zUa^YA-R0$F%sO_g9~(7eQZ&?jSV4~Ez}+`j9f1pV5VIY?SZfX6yJKX@2Cwd;<8j`V>bp2)@ax*%zI}178|*R=|GoG&kdqeWV+1NYG?Kr3 z`}_OBJCHI{&D^-U_l~ixKN*B++borMP?MgtwOzs?x=+ZsG!ZX!a*`f>d16Nf-i7YG zK@B`_SvKq(5<4Z3CGWNJPKavEgilt_rXK!X6?|c&4cEN1(r9>k4rjcIMToF_0?bKE z@R!%}B^xR-49eH|Bk1rInl?UC==t&ECKMXjOy$1xTTPcQ_8$h{XGeB1!V)O1Fb=7W zKHEIC^)n;qdYL{hI7YK-%2d-(rMts%yjUi3S3@g>b3fH`I#xIY$1QND%=R~4OqPle ze%f+{XIp;O64n#WN%rEn{ebYs<>b~no_rhl5KYIx9RA=0y}fn3b|g(E z=8!gj?fsl3vM_wpqDZL){e`v8e>tzU`zzFYyCI z>_NE(DM~5$0sL&-X8HqKY%y`2QPxrRC6+UJwxc6?awz;VafnIu)8|`6QGzBaW)u-) z3|rl@#s~ta=t0C~kT8vORCaVpS%hfBMZG;RVkp#099*8Wqn)nD?PEp1lhc{jTtm=n zFQaS5aisODj@iT6b8dGBjnB? z@$glOhRLrmMrxI`?=Q5os6Kn-35Z?p6OXXhOu(E%7O3kecJEX`>jX}ZNh3^*k1mM> zJb4V)(TLOU!i0$dbI6vOoAdaAV#&MurUV6--k%r=AtNIUbdr>o7Vs_|T$bg3o-tkW z6{0aQG5Oys(G)dTQudrbFpG&J!lI&@7yUqtxDd%74)P@AsrkSNrg7&^W_x;6vN#1? z?UJ}%@8s=5Mg}5K5JLC-Ytm47VBfYxt#ODUGGh`v)e4R9E)}i50n^K%4^pzs(R(f) zJ`{Ku54B+0bg)Ej`8J40hunIGX7@I%ZTK z+a8JqT~pH2-%+Yw6ojD?ADamZxjH6t3{^gyO5Bpyyxd}u z%3SdKW78F&H-HzbLr)Bhb3Tx#t?<>+(c!}Rsgy+w%}>2AzW%#1Q-dF6JBl!o{JiLl zvYid8NHscm@&5Jd%uMa0GEKugXBCPr@=e?gWZAJ)ywaKSBBHRjYg(n4-`ICRH9nFv zsNteoILi&sVzT{&LCWUCTUv_iMY-&~Cpr}My7-+Bf7QNTDr(*R^=+;J632P? z*quMV-bo6oH!q)0XB7-Od*SHo3;pM4&nt;fuJFFdeA}upE#|1TL}9sH#u#K@9~`;L z(G$b?{MZjAwXqx1gbfC}240b7hcg)x-20OhS`Lj`txV{DN{YS7N=Dhm4*WurB4XdI z&z%bFM$EiKo}pUabQ{LnMf%7F{&(%LGwnt=%0>BZ*Y}YAm^M^`>!cBb%JAY-HVNOy zv*ZxDv;+g$(etrvQW}H(^ zAQD~fNp`cPX1qC^*k0%hv7bG=p6}VQ%>tb&;g0!RxYi;3CjKi2m1v|?td{K*cQ3gg zJ?YrB1LXE{;B{bGqpSR8s!)!)LyT$%<`YvtZDiz(_dT!|U>h3F&N;su=PB-fetxEm z4shHTfcxBqieXj!7;{#e6dU zpdIgyvGP;5GcWg#rI8l$-ns4_Q73KJ$UZk2`kL+|fO=OUC98l6dFEJl0q$~bJ-r9E zcyRJC_enlBo!I&n8gS7cbE`Aml)+)-XmPkcATK&z*!h72e-|U$GyEuLrdAiKd5=R= z-P}CB`f@`sx^vrB%&ujHXPh)?2Pd`O1PG`oYlKaFo@ui^71Pk#di*s-hWxL(?$-;i4rLWUB?2oE+T9%rHjkvwS247c?^!(6YlQB33LH z@7$)N0%G6`kV4~Z&8c`$4?AI60Osq^W3CXl!0v6s%a^}OVItb*NnO|F9VcEH)WH;E zeclY*+ON6O{h!O-h>?VFbP|j^jw;X2QKsHdo=Yyq$)x-56Pyg6ZczR~dUX8Sr5Qz1 z0VA8vO0rTFxcZF4b>AdGn?a{UN}V1>1U7X#jC$c(HK7mJF(UcUzP|<9@6P87TOB2b(ucKh1D_s*QxDrIYmgPR=NE>7Ahy)aVAwYP-AZnpKr#}1s z%^UyKRgc4pZeL%C9Y%$x_=cuY@B1~L+D1ky2xSaB$_?0jI8C6rZMSmppr-G*g=n0M zQFV{wf-z&U+6{UaeK?oZTAFJN!;c>O6It|Rh^?HlNj$=)aVRe+GF3rG#ZAMzZe%6Iw^H!} z8=iH(1<_F@G?EH^mliB8SEvZOmLFtP`Nwk z<}KX5$QP@qVhD~7pxQqjUEem)`r6^L;YIW^VE||IP)t?EX-e#Z>>(q1aAdgI=bi@l z-z#{D0U{pfvpQ`(8cjyQtaiT@AP}ILXzS{-k9Lf1zxi{)ycY#S+g&q1c-}AhCd+H4 zi0_k^m%mgc@9Sx+C}@V-lRK%ln>b6Qf@#zo)E9_A-ULe)1%}*_U@hSB{4z!EoPY-O z3x=A5%bD4`sHjNK?)wk8b$4vr${1rF_)k9k=pn1yx6@JyOI=_&EcZ6^EshL7ti%Q$ z#*x3aM5t@KTd5$AB^MUHiWB$|m@Y|`=W-I59jq~Yf$R4?`HJkC<9e~45}5kV?Qq`| zZVzq7y?bu`YH0Ym)4}I1ZzP*mu8$EvH9xFF%_^5)c@{f#))p`@YdJJpQn&*jAH29( zc2f%Djmf$EQp~s~XeI`9H#v*z3B7$OI_%NEZPn5dJlLhIEzV0Hd@zeo=1bwwl$$@0 z_r|8=`F*JJ_WKNy(bumJ>RJifD0ZPat3r<(9DnJ|KDo@N2}{NyAc$T0W00aKI$Q+h zYyr$Evn{{yG&eU-50=T~5)mH|61D*Zqo{uPKNlfo+o1aJYEoDDo8J(5b+J4o5O)fG zH82+^WDSRKNG##e4Sd_Z@UyvI_Tu)3~xAq086l5*qw}B$ube-W8YPN4C zjNSI0M1no;5BV9>H6^+Fx=dFTJr|~|S#{`Z;jSL{MWzUJO2=!l0VI$1=G&A&`WViD zVA?OhgmN~E9ZO8aJE+}@xL{m8uX0dVta8PG2m8VV^Ntq?b^tD>E)xZxSZ|lUVm-m) zl3hB&BA_NI*$o!^;MDFa@0EOj-{rdS7+k!#4`Z}Lb{}K3ISiIcL8f<2uMsoSz@Rva z_jF-X1X?u7XEvcxgm%D08(2wLBC`!bLKq)lraQf20^qK2aeJF99~}Ag&8Vv*9BwGn56e)p*@q&%vNSXlK+5ohxvh>|Cp7zBurT3JJ5@|JE9J@(s}DEBf2A%Ka2`M)?Gj_qzSY##BF0y*!E?3S6|j6~}^ z)UCeYG6Gf0W+47-NJlW=8r8}&n?khDGQBr$l?`RUuY%?k%{Jy@ICV_!Z#e=c2Fb8c2FUoym*anw%*lO4L@nB zf8C(E%Dxeo^ocWC=HqT;VR3gLF0#>tCUF&)d@s9c-|jPnyA>%etFC5rM@d`C`xy3S zB=7!IJEheMd4>fAy@219?=o~I+lrXz{cLNNijk3fx8CU_m{h^bU*Xr$k_R!{%f`ly zQn5XM7gCykc1T3Gi4CIA$lZcy4#p6AE02wnZh`o=dCYDL)>xfb5n8pb1s80bj}zW* zF!#+jeX>1OAoBhC*qR(-9WfTb{Jnc7VS2{@Ok#=7=DBM+GPZ>=Lmcj)eFQLK3G-*{H{!$MBDgxCkpoOqwp z9{tpGw^0@xa(@~%UcpyQ5qxgJGcmM|>%ZsFwcH=&T2gZb0)Y3o%C`P>>&l+I1Cs$x zV}{fHE_qu{C=K<0j$So_8=j+<^5T6~+QO^Oz1vVst$JFYa5;#xRmi%^sq$iI3+vNl zw#u_)q_E`{nQZ%6P=NKT)cbpEUl8G>hbb*OiYUvC<44pQO@f^Kqjz!rEub(@bosWi z(5cGoGwjcjG!}NSruO@vqxA^yj`Lk>Kt2;Qo28wtU)az}bctwpcXB7vv{N!M6VHUQ zD7ac*={|6PUx{lN5%{>CcjRVFlsK}uPT>^7A<729K{#FeLoh6@j<8j#W(3>glQ-~& zj%d9`Hq_H3ohQFY)m2W0JVl395$iu4q3CEmsxEoBKV^@ODsCe?2&<*AOo z(^sRXR{@D|R3LdCHTLP2&zZH-@SGcVQOZU-^p)i0v%3^VN1|h50tk$Gd&-yq8iayw z3`*c`c*d+Z9bRg}<&K%91qEhIBnKd?BlX2@IlzWEd46OSH%>~HH2>mL(vAh*82-vR z+qe7zUjmf794&palO?=43qrfbz+x(Pi(c2&|NbjKX@;0xsA7*hiAa2+oxP^pm)ATT z^-4xO{dYayG8aAID3Dv=aba5H5FAzvsHtSh&C|{g?rAFoS-!L`@p{sD;iKDJl*;3v zqbEI%bJVU9F$u^n|B!`)^4FEwDE~k{lry1a$JPkTC5~6MIVhBS+2$o76}+XF=sB6k zF(wTbNCW-(sMxf1(^Lu9T5!2A35;dK=xL1 z-$3Cdl=IlDnzvfxqmK^tl#x3m$bmYXhIGyL!2=t%cRd~;k-dZGR}6xAPI0j!N( z`_9l$X=xWC9h>hpS6n>wCN`GT=9j)gleDy~sH(WB*9SqqxefjIicdj-bD`1T)XXI` zX~w29N=^(*cfETcb#d&?Sn+8Q$GTod@SVnuNA{|%lfRt$djHm>R0uhUA+4i@>K5yebbVr2iep1hsr+trJ%J=V_2;Y2pCx< zX5%GL*SCW8R;oUV)eM~R0zs5mO~d~n5swsESjO)eGyMbF6%NUAMHa^v2L*8Jl~P2@ z5`1r9bJ(Lz-A7VL5C;-K5qp74O`jR4Lkzk>h?)C|&NS$HP$9QxL3dQ^d~AmHjTb-* zfFXgQi#S^CK*K#YNcpH;9W=j*`$n1@%-+Ps_!=s?tm460>@}SfxCE^dC*U^~thH<^ z-N!C$|0_g1H@)3|c6Rn{1g>zr80D6|`2-P^2<^=_`?vxrhzqVJlJTorIS{KKw0!x!NkeikKLLR#~D+ zsIdT=pmhJJBrQ5RI&NZl(@KwY_Nxlo*wU)|@RhNdS;kzd_&%@$i@nYRJGLWsAX~R| ziv#KSF4{f&Mr&qf=BQflf9`Jssk?74;|%H9na8nIG?s)8d$SdZSOr!zBBt->ctVWBbp4 z<}nW zpJM-g#C$YJ5Q+d6{L*F>A7wQ`u)rr9sO{-NOBsTKM2is7 zvxJMngZxaVOU@N8G=!pB9~ly>sgD*q7RV%L>e3kTMI-1nLoty%NCN*#zA`i@-Ru=V zn$dQ{vDvF5YdyLc4xIPU)yBoel}_Zr$nfoN;2Gz8u(P(Jki-iH?eeB<(*%6%7{ZC4 zgPN`4Vko(ZJ3XOXgFCS2CLF7j&Pcx(kP2|8Ht|`oE@!2ri2Ug7m0tl}%@@pLyNDra zj6y$-2=rLUGmHTPdFi%Q&?5hUCehT?^c8CNiV2`&B?ApD=Ci4FcIKUW*@zv8r30E6 zhGSk4pz{p~tIL%QE1)Cl^bD0wp|T0##x*N5vtyU~)Pe+?BN$aTai-zb27a{gBZJ2qqkq42HPRkO}78^1#VjPVhmdT!8uNxpwyD#x#H z{2(eiTKG+*7Lc>*fel>FB@Kidh~Si|6QLd5$MA!I_PIDuh&&{sHG+-Cwmln59>F5s z^2oF}^bGxF|CQrNc8`QgnPJGH|?d0WZHStOs;AjeGaxAC3S3_#aB^ z!5nnxc9RBHzGThG+c@LpX3ak;h4J|2mKL_eWRE{zw_>o=n0pFrQrR#K@vWO(O$9Vu z$h!+Poa@#r#Z9dYVzM|4gLYvtN^qAveHXiyEvjtN5BX+Y-de$QwcD{W@Z~}R<5$HW z2tsJ#1B>tW%eyGSVL07il%A?0wz8l=UBvwoK&yTsb*UOK4xzeWV+9ch#vId2Z8zw9 zpXS`?cGRbuR*hR(@|f{QMpkPrFOQdt;w%o=)xbY*`3axy>CmT7t-3`NqZ3qEcRWen z_2GDC;;tX5yj?e=S?&z!+Uwn(HpfxVD|2Y>osBlIjrSAS2X8|Xf2%L}-S};hOZ4F&>oj~_r(PJD7HdvbHK40NJg~~agf(?4hHG4|u z-k@5K=}cUIxhLLrE2wd2(~%Bdven~)VRo|BHn>?96B#b88{3d57xeNLO;Jy;o-u(5 zy4Img_l>@l+FLi4i%uG zP5O+YrCT?O=)*0iiysv-1QyM^hn*P1;Nkub#)BceVxF2i)t)3SHyA_ zY6Ap1xzbZpb;zAW#{@PxgtY|cZ28q~+ku0REff;|+u?5&6F6@&ck}|Y=j=wXsejuP z3BT5g=BT|C<2;~LKqxZ}=<9QuxZ^|K%!JVc*hAwfUUsb!a<+$~5)!1sIDo>}7Iv(5 z4TV@pQUqA=69jQ{d2i4tyL@plDyB%x6-yS*gLeq7E6D^~x8gH#8Rg}s=+7?ws$*kX zouBZZ=|DP=G%wx*w>M_dfsZ*5n=yh)f9_FJF$^5Iv0Np)R)f>foFnsOiULzH%N?3_+)GW!=S2Ap7 zN+i)TSRM(!>(S~bwacc_DqDfe;8Q8!xk9x^^G4}au~f##20FW;^o?o()SpBui8_gj zt9O96<)k-LH5=9e33T1H`B>I(R=C=ST}m?v~e`gz+U z7|mWCYHHuzz3{!ouh$|qjFIiM>?g7baV*k3&LdHvg+eCuL?oOZitfqR7}1nvdc=Fz z*plaer+7}?o%W)C^ai0seT*nO-#2=GaFGb-*#^2J2R|9JQTRNGPc7Z9i$j!Gk^9W9 z-RiOLmTmlr;!VN+zTBA|l-A2%*72XkIUWeqWy$(!qy8_zQ@AUMK66;q!WkO=yzrVB*&9 z`%|NXsLgl8d*Wyc`p9+cJo0~D0B!i5dJG>oS_Sx`1}ZSjU?2t`%kQE;bRX4`IFc!1 z8ioy4k@!#Y6=W+2+g^Y;mBO={4^k*r3)q^u5d9b_4@!ml=|XW^@_|w03+qeMXhL-S z%DdqYK>h^#geDm2#R{{byjtgO9{+9> z9;VSQU73kx5LEaqMu%H&~Mxo;C&D(l~lSZ1rLmX7j}-yqRItUqK7^=)ia5hNktr3 z@ZrmVsds}J5H3T4eB-kZ9eE6xQEM8ZXIlz{l-{-!z>Lt*q!1Bc-X-;5G>XqEcxr06 zxL5&W24fFA0>MDcZHe7Kkd&}%wz_)tIfQO*$S|>`4}EuT)1x`wn?)g;a$pkkR3kJv z7r`|(HYo*cP?%rltL(S2M5l@c*bNoAR@`!c$SXF+Vn}ZY>YmPTD_X&i`$i{F#c+s? zrSeF$bTnk9*XZXt*>|s#S}8K0OGiUrqpfXJr6|{vEG6*0wO+li&?TDy&PO$3#3Q}r?3_OfnYA<66}0rZvx?(Z0j3=ut= z3oq5XW%dkY`|&9S&R$h>_n2EAJQBEX=|*ff%xwJ&y1d>rJ3dCu z!Rykz*unvF^MGq6o`{B8(u5Cn{^&_1&02j&I*;t!XRlcn;l8E>>w8jClWKxG9o%m0 z<*_h%_Bu+`!EK03q1=V}N-i(o=Tqq?%U#0coR@;${uF3NI?4|mQ>PE>{<8om{I3O| z_G=l=ecoUdkr`beymhl9;T{x>ddtqLH3pqQjv#Dg!a2r?`eMUIf_+w#p9Ex>@|J+& zcAuO)fx#2O^`DVH4^7MX)YSD+gXkEmda-5Vb(e|;H@&NRdjCU(qPMoRtX?%a;8UOm z38`Y&VSaD~p3~IaS#;R2!dTvJC4?SV<@pS^V@<%tTk`S3Djw9qS`f3BLapfAFgo*h zSYZr*!WiZ`CJEq~wTp4iQLLd&k)kK7!5bt!`9pSgTfU7{f*Rn_vB%I{jmhR!W>yyYr%j~J22fqWbPSNN#&qka z$2uA}51`-Imm1xBe>(6;yiqJ5aG}lq+L_jfe+#b@ee5I>8n|g~Z(cFb zJ_UXo#!twgJ_lXd-95M%ZLWVBtbi1F+#B-CqJ)O^aTUa|(`>p>LvrdWJz4;5fE|@9 zc=-;T`yISW1nNQ|dPbTY&GVI@4$zM>alV*L!YF3v`B@QwCY=5jh0RZtSTti!gD<*O z?jAr8Fj%G?16mp&I_{MDvifSFAl4sW<}&o692?(4*gP`=B)dyA zJMk<3CYQ`yFFn8CuTeM!F}SX&%eJ$_cckC;bQIkEF`qBh9IxlpAgs(=$92mPbwgz%E?@*QeYS)s+!I9dj9w14GognRl z*=7GhCEE7Oub;@WM6&gw&CyzC_m2nMon+T+^9_mlIyE+Pk?`u4wy@t|0m0<9InTD8 zoPrr2_+ITB5UjxdL;Bp6ccq(OQl5EE~o@s1Cj*zdPoSznHC5bjH zqJR9?7jH9Ki}4b4I|fdQPse$X;OdI~uy52-PKWMxw{N;k4(Q;6pd7}?I^M&tP<$Aj z)4^N|g?0ly1!{vZiqRnb8+VSDGMMz4U#jXI$)t2E8@g*d1n#C=X+)}Riercb$onLr zUtm=Qm!jJTM2;)6iF3l!BSp-~j(VUrGe7_Py^SjB%G4MnchqGaeogzQVe?EN{k0Vf z_))fEbW*_L>|eH9D~>*W#dbHI-%8Q%PzJIHYfT!rv#30Q%@hB)oYi}nlRn$A2HU_y z^|#NQRBob)g}Z++HZFRAA zHvSK)5LG$d+QhQkhDTT;48Ku1Yz^k42$K0B(Q|ZRp?>#Y3h3AaTJVjw8TS9qbBApt zwBtnY(5KcmO%7s7d((AD9bgO&_ioK~B5)LAKCgTNl(Y85i)<}J(EcB2m?A)KdEWzH zaOfRi-jzBI2uB-8lv0Kk{Q|MS5@674b8l3>RaVE4;*O4v=lUUev+eNaFb3@dnwyrX znv$jC1bC5dG~I`U55VwBaX3ui(=*Twh_fTzln6r~f$;BGK_hQyNj6z(<7+w|q7;>&1kO zMfqi)i17ek7ugBJgPH_kGYE+lA)w$!0%&~Cn&RV41(z!F1?(8h%#@!agR!I>mKl*D zL&iIbz8gLj?>u(B}C1S26AtWpB zUwyu^%$|yDAK$+zleMMy7d>>jNMJe1QjCYoJk+7Z6K;=?nkx8mm;4sqGr)q{ru$d zzK7^W3q{L%goF?FCvwgk*rHR`e+CI$m|%Qx09P?6G52EYsOt?nyD)u*C31}-V_PYR zqO%0*gTnp46SA~EsR!dj@{mcXz#jeGb7HLVzdO(r9*le1f z_<;%l8Rj=ckD?uN+hVpy?J}5@mtWZo;e)wP6kS8z3)=UF$*eF;+Pm;HOg~Q-x zVR#yNxFbP#@C0(mrj5b%7|H*1m2Kv0MzB67)^6I*>c*1n<7%l8ew?T(z!DOe5CWJsw++o ziB^7Fgzzjk@StAdn8qwP3xv|bqM|rOhgEoZ2TNf!g@W6k)Rm(+%g{%IKB6#Ru zFwNjFshCB2fr1CZO}o|@Nx1O0t*`%v;HOWBj#Uz_arG8@`hWV^P)C@c!mC*-k6JO4m;f#H-*0{5~X)o$*SJ=E~p z9Osx0O@ocCB|m{fbO3WQ)!i%;N7yWsO9+9F>d8|xIcHTc<@zrLH^xm`ri%Ty5E+L; zIyq_$pQsXLVfH26fZ$U5;;3^(3WTHGtPBs<9p3Be$G!!F{XdR)k&D+f^ia)qSfB65 zEH4<^dYC?W8hc#ap^y9sTL8)dx>x{{hKzgKY$JHsymQv@pdbR{SFST2;utho(lmby zRE?$;_e5cI_Y@S2+51gGT}z*`vwy6ZQwu&x9vT*nwGb*M!rnb-=ep+1x`nxzM_~}H z459pwGR1{Lai4NFh-2^ow8h|U;*#-`eLZpSuO>-okHtvLbD&fn0)SiEB5JzG?Qn@TK1<}Z$H&1W4$VyTTWf0_;5=-;cenT*0H4(y)Y*$= z#k!u=H_`}2Jd38wW*eXo)QsZN*Oh~LIX31u#)$Rnc$pvgC)I+=TrI~%N5@!is2A61 z9M@C$*?3M(=bxI!p zJ4h64Gz_K$My0XZvz;2H=;F}JpM8FznvR2It|aHOp#ZhVn;$?*!oJ5&ke0xve)!)S z4rWcmm+#+)f#@eBD(WxsyjQdf!DBd0i1-za4`OWZhkwJcmm3z8l|y#F69O<80U3k3 z_YH47A|JAUMWRI04a$ec`hiGnrH)=yx&jGqy1caDV6E_KNe< z9C!;;V=&fDF9g~VvvCE>XJ+v5+KWjUe1z12VW#tUN1$?DaefFq<4a*+N)~=57iy4F z#>ZQycm6E{e{Gay_n6|B%8z0TQ|);10LocKbd-c=)qBo_z6_i|Qe2g~xlBUq3TxC}W@`&tmk?zE);zsOQ|Ohe%>tQ=q+rNHs3(=7Jz zV_G-(FC5MHBum|!=mbGN5Nqd&F*)x#aOh$1owCI|#=O!>N^$+t*}fBiN2~`DPsf{% zu7!zMt5akLkvTN`MygIV{H@>mYF7{jg*VL$gjF0DG zC-h`&S8!1%m?!*?U?UUG+i{c?G#bypzqqkPX4yQpxeUMtzanX`qNDW$f(%Es=|?Pez8C>>AvtOsRy@p6aw{hf&RnCB`|$8Zhbdm^F@tk6)&`o5~7(1lN2 zQ0@sosa0D`crVPY;w6ijrl3TNpG-34a=I@9&b6Dfx#Ih$Mi#>l>I zpt_E9;E@v;z5=#yY`609IRozXn=j8t8x1=2WOC$IZ{Eq378(9uLHib9tbzP-5Nnit z0lpF73vQq`JumITGdr6d2Vke>(br5{z>c5>Y?T1`0&Rdyh7rP}V3i91PprXH8bg;X zR7Trcc^433O3IFmj0_7br!)m?A+QP>9y%{FMbo%gf(7r4LoK zz$-CokE6vQiRw;)LS4U4d>3QsJVVMvMGfR%i8@Pjoth)UQWRM9mt{v?^;HhfYf*Z< zKj{qS1AE1d{}YLqi!!+KB?x!8F?{I>==);LV1dj)pNL24e|+;=&`d4oToZ9*hn^?( zR}4!m`QdfgsIgcI|KRRfH9vcz@KJ;L{HH__Lg|qYE=f=JeV6&sthr;$kK>_ZzTLd? z)bh_4>d<5dqNL8C%s=(Rg|^|t==Qto{<@Uy&Z90wK#%^>nkdpgay4w^gIrEEjmX)E zgOG_SeW(-$BHC{BoYfV~!&&Z({@Bf-5^@Hqof7EzkX3!3BTno;IuWkWU&Zis9ag%h zagj3|d%+nt*Tg7JwkMMuC-Cs1Yr^%GY722yW=yKZa$hhOsFw#*!&fYfjP04}0hi3k z9|8R@{t{LJGGb!8Aq9E**GDo6h){srvtVi`3pFDnV4H@6 zm+xKvNGCkkOO?Y6{fjb�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≠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

?0|bbs#lDKU2n}fL^OG@P63-rnfn~ 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

YRk+zeE4tdo_` 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Ⓢ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

kW7%$oLBJ&{hv; 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

99ESn-;;$LE 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

hRO#L;I9}><9n}|)W8oQ#vhQ%_1S?;Si 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 z⪻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

`WT0zCL(32^2Utn*V+nNcTYLL(y~(*8?BC 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 %>JZqV9gtdXA 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 bc4y2Yd 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

sFZl8*Nu4S`pn>oq9SS(8>$CB%R8vCi@t?mHX> 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

$+Kok0t`&gqK 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%0AZvVG2jbq|R58RWgURhAVzS(GFh+rH@E5|1 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

f=L=)u(tD!%#ax`X0P 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

Z|I3?+P|MU`qS6vXG9i%R?Vy(4QBm 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�L68P}anYL$?aiyc>+d7_rpFRYH=f>gQZHaOFA3p5 z?P?0xcLINf0gll-+v+ef02-vd=-vyCfi3+vyShC7kjcUsLxkr$X2;Ol$yMy^I=|!6 zQ~IZt)`tq4Kr=b>3EgJ&zX4)3X!mhP4~6@84};V3hPto^q}e>zs`^JD@n*_k16$In z++UKFgaUdSWN;$G?i4`1eRZI(lQQauw2BIT8zx?Mzn?c!P`M=fx;Hq+_!qE!bS-EU z@ooDDH%dtK4x~+_{R;zp&iaBqV>X1JuSn)3gkt#DSF*=-maLhS4k3sA7>U}}nlAw; z7H&=N`bPbCBwooExK{->^6WvE=#e%5iHQ~5KGahKSM*kDTD!Hgu*+<(D0tunQPRBF zD-#5Q?p*q4UqM=}LC4zPhqy?ruGXky@^b6jSL9-RbwW4GkNt*9mS$G9kUKXA8nl_& zlM^toc}c3oMgsDo9FI=bT>5YEAW7?ANH(%zgrz)Fo%bv@9-|i5lNL|g+A%a$-y(7J zE;H;$oV>`tb^ZuD5*>@|cbcL5>UjUnkE9)mY^?tAc}=PBoVEisPJ{fj{YU36p^jSw zoXz`=>WCsPf7a`&sV__C#&&XRX>XYb<4+8kT@A7SLHl?7yGg2AnzV~b;KQ8al3?^_ ztAK^^K!9KsW(#Lh2(Hv=s~G67!+yB@0MU{LoX|<-*1Wi^0MTdvUY~5JN|PvOTd1zB zz!DbXd;9&;>jNVH#8C?~Mc!IP=BvV5)CQ%rncF^R=r4UD6>XZLs6a%AxSOE zAZ&JNy>ZwGv%`~Y!|7VlQrY-F8NPmZOM5A2tlgh`w1*YmBy z#%l&O7hmf(yKffD?x+nER4Qg@86q=r7g0>!E~?uLm!_LevgYPZ(P3hz0v>SHG%~pW z^q~00*0!*b&;x_-j~b+$9xbh&Q9a@Q@J@HiG^=<{&QS3$Twhw@#P!)A2Rx+jtRK5l zpA3v18MHwP;NMLx&+)MQReFVKu-qrxQTa|eKF2}_b%=(Umgvz5l;jdU^CJ=M{zSw& zl$-qWOz`nk;>);#0Ma?+9l>oNctuHqG`pDM8~+23xr(JA_Wefr3*t}U?tjcOh1P${ zGPA4uoc_e2JlTRhJZ8$t!Y|q{Z&0w5r~17J7s~!s?!gh^l822cZ%Tc60n2&GjXPw; z4k83rz1lxVVY)`As(lP4dhG3$a4!*q6&0quZpd*ExA|8x!syOcWsVFWdnk&og+fh% zbTAA_wg2gP1nM4J8ER%jB6zS)ilel8Nw_DjvsP^P3uHD3OV#E}^vBlG>w*nmJ{ z%pm&$oXLF2IuXy>3ZFg9g(|GtijDcZGvc&eqfXAJRku>#`jMPR?lw`oEv?ucSIRtR zsJY$jfIe#^;~GK|*`*QTp;5saH!g_E=WO$S6yk$^5x0T9?YZggiH0<6Cy^Cu!aYXt zQ57C?&8CG`ND4P^J);6eJ?f5}T_P5!h5$Ed85sdirw@%M;Ov3QOz_%-rlj z6Twrz5MPMNSQ{9PpsbYDv_-6o2zF8Pf_{zo(poP_-QF-VU8iE4p3}3RZF^ni^nUd(vj@$VhCS2N#D$5sXjW)6RD8(h;z(5LHpR^e(gFC1XxNl3=)QP= z$Yvc(8`zSflN30SWKrO{LUHy|?N_xGxhsnFz69L_`bK2LSvhEUpg4|xPx`+HUl-MR+!o$U&|^zNA-ugX_lG}skEuSLsp`dh&h7Co_q#&G=~)!wWg z0x%eI*=kTA?;=`GnCozV&B?b%sJ?acR4JpH`SK5w23~`MUA~ICnQ`r$=_kOQpo^Pu zpM8>_`!JSCm;!*;jR~%CWJ)Xv1Y6mvc4&C$Q*A=m6T~L&jZf(PUv--1=~Tv6xj3@3 zwp!r#E%!$5)_=tM{}eQQj7*j!TKgQglHd?sC1K)Cna&sdr>(fdYJICex!C)0auv@3 zE_lklmb*H?g36iX`gPdf=4}wI=$=Sri9UDHys7o(ftp9HL-Vs8k@-@kjR<5LERl0m zdTR!a1-?3&`+_#;`C)J5{^p>pv9?E6%mGZd_C#ftdP*c;|E%#z zUhy$Igd|HJ(-v&j^M#WKTPPBPCk+ls*2r%7icb3fwLmqijc2~^xuE-3{3V!Do(X4D zl-XwxR`66gt@t(D(HUau*30zrFuPCsu-lclLc`xSe8t#SHG`YXjIOFVTmPw05f9A= zjsd<8;u9Dal_30F)L=P>^xi|5#O~L{O_x6EJ*pyCUg6Sqb<7W?Z?u<}f1RqQ z#s(i)BMRkt-q7NK8VrX(sbq;`xRO+ws3TZQBoUW2z_VH&%iAkew~dOs(2G=yAewlZ zL#OObBnXY~3@dK|Yt5b<4q-^Ys?k#jQEK8pAS-AK&CKhPY6cNqT2^;Wh3$OEYDsIj zTRai_ln&t}OU;ExidQLaYHyMzUeQ<>jGEBaF-sq60xR-0BGQBV;_tgAaMu;8B9Oqe z|4KEihS478fJK;G9JUD^E3qS(vEU3FQuA5X7wDTvFzdG_UHovF)A_=gE{(4{A-n#qht( zfb7#-_zEz)6?~>|qr9zR;lTXof1O$W2p`3Muq@NG8c0=<)j@+>6>OITghp!!BZ*1a?vlh{#8;}q7ohMX?u0aL=VSdsUJ`ID@Ro%}H6T5Ga- zcNDg`jVfUDRrfG1Bvd2)Sm|M2@^V<(F|=`8E$j3|XY9ED@D3?SXZ`xP=@{(O$4~q- zMS1ez&uZVS&=6lXs0|(0?9X-IAP96jpm#6HNL@Eq`p^yBpr@PIY3#SK!yRmTJ>QY> z0O#_j_qIkhJb);QBgk(YQSYn5QqDc$qO4P+7Bf3`cOMdBi&UnZ@oy1OyrJ?>T)>Be31szB9G+jXvc#RJr z-tU$L&H(2L#SGNp#$=9D&#Xh4@6{&^c*?m-t|pB+l7I8BRFEi3Z<@{V>avt_0vLChjOJq6vzo1!}ya@Sc=!)xmKS2xrm(Ug} z3sf@y>jgN)Mj6syMqB8F^O$Az;EIid6Gwp4+5{eo%+*sQkonZbF;M)N-drPj1}022 zez!Q0O5|N7y0w1xa5;F@J+}$)sY`t zBWY{*I=9FD`gmAKhUeg>9LOw>YeTauH_xP19nJKgA2+2@fcbX)S6dGIH`tSuSv);S zl|Ar8pP{up!J`|tD3Eysj1J8}M|4=O)(@jQm$SVCY9zrq2{4R+U;@YTS z4{4Nw;yUdtt|*Tl_9Tv=NW%Ane4xe(y25y7#*G#{7m;5eA=WSy18ZfbmWs(mu>~d6 zR^N>_9tlt%AZx})a>d9C#BO4pM2|mlAB;95lPvt;j7}no z_K{M{b9efTb(>KnW_Zs89>;*nnLMtYSpj zHMac@_T97a(fVsC1J3M1SbqR7zM|^1tU4#1Ha^j!i2dd5+$yVyFXV9IEOuh*I01n* z+{%T`Q1V3vT{fZV;f4jm#7SQKCWq7zM@i!Uz51*TA&gl0)IwbYl3_gVoLA!j`tu5PO6VuB5`*0L1 zm<&~jLa+Ov1%}k>6Zp>9<6A(h^^i9HbE6Zs@cYSM(~U=Of>Ra~;#~F)Zy0q5Z(w$~ zSwfy!idHn0k8cP(xHmsmzjLomz5Kqtx}LucdAQmhO9;!t*iqwH!+oYMvKyl}uaPzz z)tgxW(?E1;v7y8%4?Lfk#cX0o;=3mCg;)z~xrpXp%6 z{k0DRJ{rJ^#QV;MxXHfb6FRtZn^u&7B3jR&Hg#zJXmC@w26E2U0NLqFn7uKoSuYdO zt1TFMD0q{D_x0{%L1=wTdA;iX2Mz7# zSO(QpT9>845~9;jb}RM=9y9|q>Io8n^Lo_ue^#E&wdaEfbIH7E2H{nuuS)CNe8Rvg z3tk)JNJMq9{Zt&R4o4R0wTSylPjHJg?^l<7LjC_4WRNh4%^-)da9YyZfLQufWxvyK z(%^-b-;EGo+0GU_IKLMxU=aA628=)+{X?ST?%Jxl!3vc$k0s?rlpnL&-K9qPuGi0A^HL!I;Q~Ey+;yj8GI2a6Ec^jsRO;WlzINyHl~Thhv)affbR;dD&OOd zHk7nHoP#ap>_77Avy}MP=ABuX$OVME2cxN_OSa%ugONuoW1E+R(rPaBR zLy!f*gOq$iUTB_j?G4cpotdn~FS)A3imFx3u#=gKp08kFpO+IJFj=ut^si&#;TQcc zcjA71AyLG1sqOcuKYR5WHAUSxL*?Q>djQk3U=_2*WxQ8cnGxWee z<1&H9DJXQRI+_maCF8ZT-IBPYufOHdc5ss!bGQBS_M~4ag83EcB~(ofSR~^h_Ia8~ zoDZ|%tWM5CiV%VY{$0$s0NE~C>)iyL80a#EgjlzNd)0(3uYx#!F3jQ#Us140o>d%h zLc)p=8;61*;YnTSg}sI(SK0xO z(5r>2B%ny~M_33=4_Bo5Wcmlr#w7W@)ErN|GD&9^<$K$APjD}}M(&23NQ#h|bA&a8 z6VJ?pyYs4tB;dV#ZSE>y(*wq%8L(uMk2?^Vx)P}V;u;BkneIDZ7;^-4q3MR`x;k7t zWINN_mcDvhfw@G3gP^-{!^a_Ji%%sYNGJy%gW!g5qjBjr4*$k^efl)^$Tdw1%KYFZ zU1|3d0IXWdjSbXd{ZHltRp5f5lEw{>+^lQ)eivBa#e@2hfrOqh*z5mY3XAdnve;dU z^2h2yft%vo*_hVJ6uhks9mkX{ED`yDxF0nQl-Y*{Q>$s_{<1-0;as9 za>LVs;CJn+>kUI8l6?hSUx7qLmRMG+PH!T#6O{*}r!^z>6^la91WQUsKQ8DxmfB}3 zP2;K`twqFhs%67*ENFS?3F`Wg&h>`#!|OxalC?6HA_)_x z)95<&B-x~A#UNkUQo+UnL}FC%s;YjE>>->^!jJ{`#;0%;1DDVNRhWL~#Sz|?V9Z2~ zd*k<=qX#lTKf{=41d5(w>6%BzEv1Qxtv7*V_x9uwG@Ua+fn5?*@~TX_Cs0=wM#?JE z+b#nE`8>xzu)|q1h{iDHhVo}D6;N)4P_V>&;WG310YC=KRr|!W?p?+C9KAm!mvUm) z*fTZMX5d_?S_*ZObP00^T5yRH$~#;jK9Cy!HBdMaN{C@Y$f-=(({GXfZu|gw5;DXl5JDtXO^#& zpJg@R@_!z4n-X0o?bZf+ETOu%9O=1f)TX1J&^85(kt?q*6^bOeTzYd3kb_!_mog&N zx;v|Orbnju+$QYMQ&UUfO5?n=jEA9-jo7Nqu1OKhI)_Oo!CvkiNatk3MoVWVS76bp zd~zK)uOiazp7uK_X}PB(QesXAF2n~jhTb!22QCyUf8gNT<;M5<@!Prg9r6g7tOpxg zY~(FfGG0pnBR6M#KZRLaVFi!-KFEWxp;*pzm%uMO#_#L0Ay!ruKVTf_whZN7^0kiB zalTr}ZUgp;x3dw%+LaVd!YK#1ta68H!@8p@PV&wr?CcC4EB<9=>9=D$GAxA%eu1q% z<@qTBMRooh>yC%xgT;O^A^}h z3as!0#j>cR@&1i+Aw*l5bi}CIYrmwX5afF<+J*}3Qvtg_FUTk-H*+p6_$2`^Uaxnk zdo(VdEnrl?wEn%#4~h?t#=glW90KcIQ#k0snh7)yH7RvI-Yq&Va<{e8+8YnzI0Vn9 z&+F(&4jSeLG%f7~0_xo9SNR@^jvcRJxIr+pTOWP~Oy&?7X|=}W?8(Flh{^onKiZ1K zCK6-0j(V7_5G74str&7?px}eek1J#; za`y_~BepiW{?FxYy;_vt<^IFiXKg)^Avgc*$WSA4>QI3X@Dlr3hDp$7VR$u6@<#6u zXN$s}S~CMWk|mg32Ab4Ed!GU&deS(admKBB+fkRMqbk_5cn0d~zJLP8+}5QshifLh z=gWiGXj_{U(jA_aC$j5}c03-~BLx(YLfWI?@r?FarU~%U^oxUb#eHcFQ0VL&@sBpL znw*PWWou0?h(y2A`s^q9=wvi@ClKph@OuoO>2oY>y=O2#eN02-ewUig7!$hN+CXs*m6|cQXMd2hLlXf`tv`xlaq^Z6l>QQ0 z0E_2I&UBv2@c!SSi$t>lKi$<&?6x#{vfz2Qp86k?$)7psr!9Z8<@b1BieZ%W_ZT)y zd$u}Je_C9wHNXA$Hvg0p6m)_SR6i;!iFAjQ<1=w^Trh^urn9<8;UkDY4g62U2IgDm z%7a3H5*g67(8y&aueNE0J*oa9t@Ztp){^R}vtRxP|GNL-U%RDY)rzPJPn*79X)Z5B zGqeCu*TJ$D$*-e(M-QlZ=pVNNO@@bstbO-J6E2#zhaSJkJrQ1&Xa!b$mpPeslIDTG zLvlb!@=WJ0ec9~!(|h13tShiZ=ny|VKh;Pso1RWmL$J%WPDKedvqhWZDcCzB&pM%9 z5pWJ3ab}tyakBI69z69!L?X;)yUOW$26PHipn5zbcAg@UXUOX==6Ae=KNj!u|FL5= z!c}!8BFgn<5I7#OrY_yJb$xih{6W0mhv3A#)gB_(mRVq4&G4bvWu}NrzpxKAR^+Yu zgLYZ6&dzz$;Fy;Dq}q6CZo_;6qQH15+o4+e*sthI72VW$cd?EwK-|AAB!x6sf(=nX zB=||MEY%F)*p=;?a@@1@P6KvWSJ+k30_6AHF-@R&fQ4$BtousDRRPENtF~eCP8Hlu z1k#=}7qeX15GXl_^_X?dsyBM`}t%_k>=ue z7kL|J<~Vqa#=?%40hW|0mln@3*?Gqb&ms{uuEsY+MEhm6_%O!$3{YS_DeRwsMru@Y>n zBYW=DT;5WUR9l+Nav6j2g1Qo0bnS?=t6oz9mAP!V{E4|WOqMe~djZD9>!q=>jZ1k# zqT*An$yVIWCFOA{5d${skWe1Xgb(n;_=`BzVg}Qh8k3GdPb9iY#LTG`@LRx1qgQ0r zdjwhju^VuDsoAuCq_TyVE6_umPaPlcsScYr@IoMc66=7uwIz)LV&?fTB3gjWo@j5I zTBS!4_MN@IbZ>$Es~wBeixUn%+d1=|2Dyj~h(z;m2<_h2cH_m^2V8i{VO&B1F>F8K zxh;gKYVtn=+LYF4srjf6$xKOazi-WPd&Uyp$}h0;+gEn%H7^fl|rK;+s#SN+IR zhMr!P2F{MnOVPfg#Q+4=tPHyNkC*w$O+VRqJi zr9r@|o1UH4rA%MT`J#XXz;fH(%^LG4aBL-hR z*6rUGrLV8-h}s#?*cn|2Q%}D_arid<(CD_%=%FstZ}$C20cjj8$KQ@A--a4GH#EMQ zQz#$CO)EElPbh9hL3jy^Iu=X<=XuSW_Z7rEbJ@iwoWOxSQpojuIsI^WFljLjUte{x z{yTY~k+^X76=~#*F5!Zsr(a5*IiDX2i{IM9IGyZaK6|-Z2@C$9U#aRr4P<-j7iAYx z=x0(SXfk&Mf^Q)G%wZ_K2t*R2cT5RltAg!yMx>Q^Whr@N51maGHgjl-@ea*2Y3RO& zP*rM*WK(4DbT4pWkhNRz^wIeM@uK`}6TDfN@p$(C^Z}hMnZ$_}$CQkD8LFprSc-(HgnV=mXaPq8hALwhRj=d2 z;o(vJaAWt=s^YSS9^WG5@8j6xlze=HMI=x;xVH8^TS+g>^*v?!{y~?{Y_iid;3fA<1UjWaa9K2;DANaJkxu^Wn%WI7DL_hH4lPjd=fQC^{Z#mCG zOMN}7KiB(4yXkw&_>q_htZKRzm90iRTkAscVd*e}A#9QcPtEff8c>#>ig-RX= zmFVd(>YY7Zakawf!?~=G^*HyOqwLE<_ZW+9@CJG?8yIf3=OT3VJ!;>0xeoexXiN&1 zifTWbVi2~2yr&>>PaQSchOoP;*ldK7BznBgKN`0_L4t;po4+0R-bpvo4S9tKBb(0> z2UW{9$?yNxM+Hm?4$L6Y#a4;o66!{^psd#8AF7Z>@|nON?Bmh=6F zvhy>|o@4c8XWs_c?TCoKvctS54Hk#(4W&Bj$R9IyG}_N~m15t@7LVt-1&{e`9O*BG zg}svuFRs02na?4V#lVWPGyJN0kh-ty4AR3Kz{0y-^XJ~M6CJIXG*=oMFh8gDUI-sNmA zFi7*5f>qdl;pburc3eUD)$U9!cg2BwQ1G>p&nB*BJ{OJETBX@3w#SM( z&&T%PUcV<4q`B=$z~tlFyQz;+`OVIbUCeuVlds!~waB;J$Dan{qcqgxV3E@+qNg{T z&;LTIUf4alS1oVEE$Grfk)}%lf6hhhq?u<$FWfoB1zLQ-E?P}JeE>ZaFGuybukPMr zfQ zkrRPot?6UN4_7}uCuldP9*$gTL$;c~5m8U=|`sNktnnwBlTC zir>_}Y0!J_xxOSjYmCx#LBqA7bfT@yu>e6Bn`G8z4OvQEZOl!2-@&FK2e;%bOS)OE z7j_4zKY<6VyJ(e@~{Z%yUA6Y)RKa&OH{UX~&$5)j6a6(;p&`#Xiz|qn}?&z?a1Mw?C`t;M^xXJ!e!fhBE3t z1WJkHHeHBe2It0Sq+hO|yp`6|kvscxwlH!c;fp+9U(A)j#PFUuLvxd>-8oK3j7)sZ z*UX;U^H4+mRgoqxrmfL;S<<=u2ITOmjjQ!>w`2O+veV<3+df$so@Sp{0QcOD96Mf3 zUTi_9c>0!B!=dPu`@8@U^gxQ2%6Meb9C+KW`1N?=C zcAr&HIc@&M7;cN!{@T&hKiH~{!WfcKS=+FaCGH^PqztSGZRA!^|LCd3JIhV%YIC(+82*Dn?suGym<#(wRQ!I17jjb&F zn@*%b+k1sur)%pEyZGe z9#%ZH%buoZr_O0&x^_IPIWvEb@r|}i>yo6cE#d_mcVEvTPtEo{8(q7*1pTAqI&<6d zJ-ep4b_gfzxvbzuSX-mf=7QuDUkmm5gxqy#o;N!YBSsB(}>RHtQ@$Vn8#@ ztD1UV@#5)1!LKuK))EIEYQ@;mo@3lKF0HpI&^&!lu@PDIuuqlzZ z#+bgWYk2e5(4^Hwh!uJZti(b2Bc{aBKE*e~oN{m2HB#xI%hZ3~8F|4(4SVHap)y6h z>$9rfurI8vEtvr+ZMFfiueh10c9s{bUr%l=Bo?mAzDE)5~Fc9HFY z6;V8Fe6e%keG38R{q{9q+2Xr*c>hS*x&8#1doG|}9CdAJR@7=|fdsN)pMGwa6jP+a$2ENToyMk;c+%m_Ki?~Qk?>wLspF`#aHS}=p$00F&gQRY_0Ms z?G}1p2KsR96-Gs>yijGloQ79|1k%bj4w5z$#lGl!w}L*RV3Hvca1BP}@21;oh*P}B z5Y^g;S>S+}#g?W8s?HqnBR~kdN|Ez_SW<^WnjE_+eW%kfD;c_tdmv#SmN2|ul*Nx6 zFHE#z&A@c##MVhR%>~hmI{Z|(;q7Ga(*w<8+KI7qh#5U=2-{)YZ2nLmjhrIyuN+1g zk!{Akl3lCubm@kIbKU{UDf9z{5JGB@;_M~C>pAU60^Va(>K79=9R?VQR~dxCUvP~% z+dCPKUf7w*Z9#&o6fU1LOtm`{05VNEBi?H;au?7H{eTnJt`Kh6!5cHlC};^-6Q&rj?`7_;ND!+z?90by`^=}FZHD#3;-Eib|1S^@v{C}Q&VtU2+%TV@&`G`xSzY& z+~UHtc)vAHpfa-*85Q!WDwc`&lM>x67)9YR zDBp*qlY>xT~j9g-W}bQTR1yZIr2_4=%cC9283Y z^5j5stD_LN%kwSeOtj456@lU)zzlJHnRxv7+j+FR-QTmW>D7jPY`^m8~IdI&1aou=(i^)x;$k!ADnjV zd*ybPvNv0J=iU{5I9F}7G*)WF<$B#_Gj~R_1a_D5;o?2~1rHv(Ac`L0%n2tme)7Dl za0do}e3HM%6xB5?nlb|vvEe3+YzVie>DX|a1Mow!s_g*6ZOujNQtI z_%>b~D7;rIuEO(EomXG2Z*=MzQz|MZF5eD@ElAe@&l3zvhA>$O4I?SQ;pmIo(mv)-dR3fpePHkikNS_pj9 zZ98|_sqnJMlNO$Lg_hSE9kkvz?^27=Ta7GSZ<#x?BsKp`X2AyZaq7qdDV|UG&ab95 zfnyB%|7d&fuqMy;Z@jHlstDA|qhs#cI8c^oVW zNfnh%L}Zg71cmm)@%xM8AlG%>=lGnT`&#FD z|1sAt+^Bf`MN`6UC0$#TQewr|%yRnT97sn4MZ*W6d;iR27mdsfhNI}6+fl zCf_BDfRMrj2nCAqtmVpQ+5gl)HAZhb3|Q%kjt$+(Gg{3wVWLwmZladZo5l+4vzi=p zlA(a7sX@!(v=tcqS40ecW@X;hktfj|y}OOt2f9^+J<1Nc)Bi9cQ8?k>!}CrSKH;%Y z|H4(DvSzq~Qw9(tQJtNS1nMT&jh9?ICgZ$G0>`qQX7CwZPJ}ekE7G*hQfmv9r0TT5 z9_>d`g*av-8ksf(!+rP_eM9ev0z4}w8%}ttW0YnLT3k21-IeGt#tpxnB$!!_gO(J8Rgxtrj<`9*q>Bs$HszzaXGt)-gQkL<7kReczc zaWH=T3&xuQzh`TDL*d>A@XtkQivQ-PlDX~pr>I+G4P{Snw2srj>f7Fi%g45XZ7l#; z(zSJL7>JTS0I3e@C_+I~7Cf~$+h{e{;NN00p0^EDqCD?7yIc6LQT`J%+bm*4=`Q~< zdYM@9#zNj-5&Q15PDU0@JH0OX-k-#G+n(f2COtq79+M8lpLMC!4_hiQB9QznGPp>g zqmv-xB(pj4M&+eB8#&*}jcYefy&C2;RH&bCDS0EY#hprf|h%H*b7(op-bJh zPDRl0?;=_Pd!K#?xI0gw{5p`@tq_x{`qK@TUut`9tfE2qi>}4}XNz|RAJxw*Khz8L znTa#yMU3?yqx{m{(A*{fp&~4f;)8L$aKX#&@QU+Tq(xHpN#pJYJd&saan0xq$P3^N zC(K1)gZ2e@XXIxaVaBtMQU*GKQLw@`Y;KuoB1j2>Reubtx^aCR*8h78EEVWP>-g7z z(cT@PXxLMAC!J3{-Qlwb5J_yLWG#z$Un0B({J>+m)-$@AfSsx?uchV$n=s)P<>Vu7 zp1Q%fb#C^w_W1cRG^G3d8ZBVDQuNfA0%;WGX2aPH=z3{4o5@uaMB!(Kxf%jv17Lqi zdU&ZhZHd6_YY*j&au>JC#^_j!^^tK}lREh-1g_a=V3$$+ICz$2&PxgHxB)B@ z^%w=~Q3E`zM~8HuN2@|Ekongf-s`YGt|#JBmNL; zeFQBm4IjU!WJsB*>fLs5qy@G5K49+UH-7$Z0%L+QS;h$@zMwf${{S}FZT!B=NNfK$ zw3QcSdwth!(lb;_o9f!$Xa;y?INEQ{+chO(g#)V4O2?(jxJ3S0Zy*Rr_P;i5hk?gt zkO6~xUGMEuT^uh5-$3@%oG#$iMeoe@VDIi+!Gh0^Ha|C);pud|NmjDTD5x;aRT7-I zi5XYM!B3CiW-^!jJi6%U(YbbGcO6|QUdQ>|s_+-c< zohqV^R{n4TS9|HuZ0yi(UbS<8?yJok^i70m*z1o1!+HO`q_{iB3(sSXR>R&UETtb$ zV&{mwvzy8|_s6@kvm}Kro_Rrgcr5X$nC*@TJMKwaS@|q==jw?DyfEWJ>0m!nQ>$Fh zLNCWx;LwkUxN@~&LAtZG06fK)#}=_OGdXT`8a{3 zdY79M0nEcYwp{Bp8@W|~Z-6Qv97!#Pj8;pqa_VJk;PeL7y9C^|uABRS*SdNb9+<67 zTFjE@+6ElUsYi;JVV@S(@aC)YkoESq9jx!G-n!xSATwN6#3=(#5OOoI?d8Y&;RaSMF#na3p2eX#?}Iu ztHKlYJTc>fk^kEUq@np+?N_uG-OKdP#M(e53Ydbp(_1 zC_74{(nI+1qx5u65W)_4^2uNu?&{7<3x5pe-cQi-R@2gadEZMXJ;67#APH4o4z%h$ zHs+lpC+{4l;KUF-6lSE9p3hIOH2Wf;_f&;XMnJwHEGVkRw*(Vi4&8Qjfg;aF7%oTMoI@Y#sjh!z2xAx^YJrZX^fks`n7%4oAp$`A z)*V;`tn_s~BHuY4Ej=xsyUX`pt*-H{;HwrC5yJq~J_l?}i;%u-uq?7G0~kJ0V)=U& zLwYl=tamnwhx?;4PM{JMpA*??{0fxt?n(dQXkfq=S}8Q)H6;0qW)|7Ua=gve%w7B9 za#o)n|A)JV)s!kIOQKtUS52v^rDYG-r>iuyW8%y!tkPJz5%j+_0CdkX6sKI>f;T%` zy6{u}o1h9nn1OTZmP$L)(LbXjUGZm0L(VAjV5$nz zd}2Y?Q_0p-&=Mint~Xz2uafY(3khbcr~ZX})Bi+1>Hk0E`_`_$dvERq$|hV z-K|i4O!KH`n%m^H?0-_t+ItnA&t%*JNw7ag4guo)QMnDBSOq8V1mj&yBi37BX)638 zW59vG8VKD>s}!9Q-Uf*+09VY#t3(;^f`ME9p+6+1;~*K)lR&WX9*SxUVcFP7`>$2> zn%onvCgwJ7cdUOUPJ#3tYqP!TKp95hq&ROb8ww0p7IR~vW!6QPoBBGq8 za(?k%)$O~A+HmcHTSX4OncRQ_=Sm+NttTlmMY@c?jM^m%3sHDX-G(|#QxzWSx3fh)%rx;Yy+0)sCVDwSw}fAkbiLYD)}bK>9-8K7)KijFO*By&CFl9d980 zGuh>GcwO58MqvFU-&S?j5Ir+J{_H9%Y;#a=_?Y>+$}vCdb6MOLt2%NgoBsUYXga zd4$i<+SHAX{<89T&;ERW&9}8(5;`?pw?h@zfujozdSkuCwYZh1AvYa}TkiSgt_0e% zdY+~9Wj(c2I%MqKe{yl|Z@@WejP!7Y@y96hUiZcfkIJ*NBcpJ;nBSz@OUQ9_z_`?g zG(}0u!;B4)O!Sz>jOc{ePI`0P*6fv942jMcuRhStAw4^2U7Bq2B5m>GZtftK^BfV} zPpa>YeNbp|b{}RJ%~}hN$rj-mq0unRswg9xY1=&V!9qZ*^R9zfE4f!<;0{Im^f{cBeOv^&)&jj1@L30Z3e|xY8c^8oH=jMZ^y1^?YNaZP zDk50HNjuOdh)~RaWZ$IOQKneRFR&YDEx)(sYBKmI zRDl@3@!UYjK2hwInH~FdloyTI=%k|=%MbBeZ#PCp6o_l|B!`4{14=oh)Xg$sW>W(w zq_a-=ZeczcBX1xbMenb6ubz}9F0vIck^vjvED@A%mgKP2N~cjBrw8vjWt!UGzULSo z=aAM}Sb3L%B)jATXer!1v`NYG-8CCWW{TfT&KIx*GLNzp;a_EK^pmFW3JQ?r#_7*4 zU0R1RrF+-V;#Ry$$kx_b#|<|;FKP0o0ov&u(XF(CO1ML7=Cn*giCjf;5K}BmW+rf? zZ%WRTic61I4GF0dNg=aYJZYe^Bq`US(VBh_KY8v%-VlFd3@Rm)cQ}ZD_Pm=;+&m*` z4dYj?%;vzXgNwYn9fYg&y#{gX^-7&oMXzQjIc%g~CVUk8XIR);M4dur-)VUrABZ6?Uy0_ z`G(CxreV{X6XRe&8$&l@xW0P*e8VdzR?h2T%U>F|%F*c>D#A+xcAY1K8j@01qt*n> z^!l3QV$FcC1qmU3x*0mQ0>`)Rf-fJSmqbd3ZJ1`L4rTF`o@c5Y^?qFTtdapdbYsat zqatA@I(Uy^zQnL;Dw7EvOFS=qT(c3=WRSB6Hw#ru+ycH`s4{a=C=tCRZ22grdH1|p zB}%mOLYpUD&}$CzF{El@;SW#B$#jTzQ+Tk7q>3Pg{CGPvV{+cYv5#X$ke5zzC1!G^ z>MZeQ=~2;lwuIN9E{x9^l}gYsPm$`8g?@bw5nHP}vUsV@d%(#{D=9|~q zMIM!KEQKZEh{i_UG^Zt>;vUc=gNy@gqq2tFF($W)89xen4bm)sOM)bbU8m?V>SWMd zO?g^DXMY$&=1V_%vIo(N>b1T$@s>XUD`gM17(M6C+#_IqG_H(1N>#QFhiAo7)0&nKzywj~%??0{Xn;Kpwlw?x2q3%GxrLdTRzo!y~No{O$%mGu3pj84Q&-*9iVH;*d$ z$g5^_q8884?ZghN6w5x?!&y*g!P0)sUmw6;R9Krq(eueAn$Z^0r{$Z@CHY6T>dWUz z_A1{&FO)>7@!DE|qZ8p-6cavF?$iGQ`&FaC)r%LQ7B^<@KYyK{)mq|P+xqrkTI^M= zS10TTKG>zRAh7W!Q5yHA2>d~=J! zoc6rC$u3NefSu{p^?hx6{WcQRHl&7w*Xhe(aLU{8@fQZof3tB@hX zw>Pk|NnWk*DhF1F#oijH!9CR*A*`Tq`w@K~V4EUxCVL8-jM+(3LUp#vz<^$eX}wN@ z54F?Mu#EnrPASW^qAKax`DstXh5f*62+Dpo?7&y7BF<-Lu6?56utZ)Lyk={B-l z-PS_w-?b>qg4a_IB`G~Xw7j;-2|GzW{z+Sp7m=Q^bs5WBuACUTW8k(i0dz|=#lBpv zTmxSVKf!*LSoZSyepx>EfKCSdK)}@F$K^0f^kiHGyC(a9&R@ODLLdaxy1V$=xe(3A zgsrlE(i3ungMCfnNp5m|l^^Vj9_j~PSeiSJ^@0~z zG`uw>Zmaj}uGa^Iu*hh>==v_Mk*?-G#vao{@1x^(2#U2u#b*5Mg{Sr&PUZWpE^f}h zHMdRJox#tn(R_p5NadxY>@p9WJScAOxRY%lb}A3^IVoSp`c=!eKfi4t+`04*TAf7Z z;t37dAT9hmH5uE%5`1|e3p=%WHN%Si+{xx28i7{w$^22B(UGWQZKH7^M=m$3Hm_?T z0#D5sJdVD6zJ1Iw&VKCJm4N%#ExtaJ7dP8)VXqRPC*Dez9)qC6FJ_DA?M=%Z=r}w| z39Y5Po=a!C`0Lq=N@|1ZWj-xm3)kw%h)fQIZ@L)pOE<6CF*iU!^*YA{T&!tY(b$=W zgb-cyTK!Z zOFikatSzgBQp%nXnkB;ib|^Ut?@3Hm6kzLYP^-%^?N5IWsMt{)KyXbtUXhsLwZnAo z1Dq&h;U>V0NL$o4C3QWD@GSaeb!PC!J>H!>Eq#Ixts&dPQW_s(&-~O|5p!k8h8PwX z!gmmvEzI2Ad3J76yE1z}{rQtQs%&z-R+CVa>EgYw#P*~jp{gncvC4*77ow-Yr0?R{ z!}?43FxJK*%p4X$qN`-GJYhd`9 z@rL5KkL{QPp*80%aVxn+G%Mn65dj^6ZU4gCEJ%JtOny? z`DxTrRu#7r@!?T-P2qv$cI?O=nngPii&&XF+1@3(h13dCaX(GnN!IsitSB0=z0rTtZ9QFpHWfgt z__quM=RR%U4hRAc=Qe?P;ESqBWc#D;A+8Z+CTIonaB+VY(!$C*@i-N^;ktaQC0h@* z{L&Q(%|m7US2Jlk4`2Rnw75WXOdX)mO6Ap{9K;*>y_~4`oo{k)A?=Ln^|44Q}H&u&?2McI#z zYK>nXtUVW=2-a;H4>b0mMb*k{Mn%|q(+5Nc?#kx%hTnlQWl)>@N|UyX^yQ|uE?Q+7 zOoEy9)J{*sTMjzu=p0>-NsB_@@LV4P!c5yzydSBmriVqy`4c2+LPi4E}=ZnKDSv&|!XOB>45cpt1!{)aSpVrj< zwsB6;?ux&=%O3sw0C&(4`)`9Eoy|<$k$b|{yTh|F$xiW=>~9W%*AqbB2Ai6fOj{Dt zFd42x{I-c874=)VzG|CcaBYZ~o6KmT_(Q-SkOqb{qz3(+HhYLKS}Rl% zEe|L7JBAd8DDWEG*pUg6_?m*`vkke|2|c7+nITY&qg7l!izis_bS8&#piH_4H^;*&4;}e=C?-ISoR7Ir%ip3?M`=HeKT_%%;is* z+sl8-Z}&fcW@!8Xuc5CyvembGY)CW6a!`iLmpOo``XN~xqitYgKg9D^klzRxi)Dtz zqptmw6x7`N_<4`JL^v2kD@rUT+|w+z#JfvY|GZ|jre*^!;G3mu_eJuhx<+D%ef5=Q zjoQ}m;%K26>98t4R$}w&e&7|<%G1lH{x>T3^cc1W<1~}>3|CH{bK|PwPJ>W<+`id` zC-)Jr?aF+n?gr$;SH&oeBbb*sJqtHlJlMPyD&1_X2R*-0HzI7WiIkU8$+Hns%T!knnw9Tcp>2@gz7iRShX`mX>e8`@l|vI-V5{Sl(fIojE1K`` zUfREW!ubgJc2iLMG0zycgq=urW6O4@QZ``=A?~W41Or#TH5thlD@R~= zWP!4p==)}onSWrSulgN4C6yM!-<(;*hpyjyXUp{uwMcd-c7q2&OWeBl;_<)%?(Rccxn*I4YcDw+i04hdsz4c$b1pR< z7jK4_Yn^N+H4(RP6MecY1F5m~%O}w$eV@>m4rzH0JOI~z)4ulF<%z>~whl*V z89lD3PU-Y%m(i+TY{2e91h2h$x{W&{5k=|0EV^cN#4uU&JC&x|@6tRWl*`|RU}JR4)M?f){2MNpexLYK{PcKJEtDn*iy(^6 zys}J$s3JTiX(99UQlHotTci9?0&1#AQOUi+F{Stu`N?IC7|I^fd9V*k}hPU zXdHnFvi#zP*RCgPo!Q?nxYzqYgFgt;S>Md#f@qgE%3m(owY%HUU>Y`r{*k0Vi8qce zc9#F(&#zjX!vYsVnyhCntY8Zeaj~@qX1wrKgblDsOz*X%eAc!x&}%AFUQ$8bn(g1A zQK=X8zCK#+E+#5}n^it^pMnBZM1zbqKzMUs<6W~fX8@jUp)}ZA(AN#=m9R+BwG~+m zv2ZQ!QjA;y@XGp6j&!6Ta$`m%0|gnt_OhOhXg_cqUz@zxPYwdQ6eQOJUr-gC*NAWp zyiN?GOu&tqoVzVMA8RM`HFMc2C_S*}S#i3fOvQAN3aX6r1hIH1$vaC}Iq)wc-q(FO z84D2OU!=Xw(>yppwhQEPjxkq8sDBW#cPwRl8B$hS2W%8@0oU5 zRbBOS?(odEXakp~O)CF{PzMg;8>8*mP1On4Z^1M`Yi%LYO_+#7HbeI_Q;4DC6z69NJ_c-)?x4POnJtczmCFP7f5)|kTadE@ukJZdF}xI_ZcrwM~2wM&OE#t|IS z><|7&X}3G4$lXTBS`w5teFi6ZxIMBZ+o-@p(5}sJks%cBAa7!4#w>Ayyy=7}D%`4e zDb1#dAn)xUlXP!-C}HJ(U#z^Xl9qQyXCt4-2a%?QO^9@>XuH}r9!TPz4_{-azwUDh zI9@p1c?G)v>)UqG&Sdi&aYKSyS(>PKTdYHv-0=p&(>8BB)&mu5ag;m6UIWHKYFStv zX?%syG;WB3c}^unEyr0J>Zt?Iw@&XsTzj*z9AV2S$3Om;MJ!_%YhT~9oqfT#eEAvs z!8g$uwB!6q*ljXZmBz zmnT^{O`k@DmLE_QmZ&SduE?*`K4n zFBkdlcPKe7b2LrCfHE__DU8!(hEw~EwrHFdADEGIXy)AtOsrjgASrXydA2*$=iWAVXSINslwF4-g;CI%Cv+8jGnn823BB%0AaaBUvL$1&(_m%S@|tK39_Z?A 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 zƪ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�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

ZTYv2J|z#+DiJ7v?iVsC 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%0Dv~Zy@#~O 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

1U)9A#-;JI({9Gn^BOf;~ zM5hnSa9>*x+p=x+wa(wtzZeg< z`A3ipOo0gvGqpNTYuS+Clz;ev;s}N>6)7-+adK{Gte5uQ? zKsiS1^ocXYcT^DT5G~nOf9Ga2SJ&bcvOx#<_W1OLGpbTw*~h!-p!O%ESZXiyvE;Ue z(}UrN1SBb%wOIVqv#5YV*k)*|M;XyccYgThRshSGv?#=!dh5HpbTY#{D{!{!_@3Fs zzMS8d9icDdnA(E*NXD4v3KoCU8g73eeaYuDO2R*95iN1HHgcwnlu&jmF4sDUCtfF0 zHVX}H&i!5>aDEE51d#qVn2e`v-eB?{aw?YknS{ z!EZpx^Lyreou{J~vUbW68QmJ{5@*c+kEt&Yhx!ZKuN0|}l-)>*M7HePq%4)Kl6?zh zU$U=bl8~L0ok>F3_uY(r>=R<_GPW2D#u&5z=KH?adtJXjKXaYWSw82S=bU+-=f3Zi z@$(+<)jZnv3Tmz9_jwS5FFo#JKN)yeO4K0C;q>5KE^8<<>{KhAuc}jF4E#?h>}XiW zHTtWmYz8_Vz-ps<<~0oXZ3iZ}GVK*S_cld+N-d0hYSX-wqp;{dg|Z^(fJbIU&vtfs z9n4W~R6oIbwa6?5kSYWHX4+g?NM~0(NJ6H~k_WAKJxL9vSah=0R1x<}Q(=PPdlcMddRk?EaE= z{~^CCQofO4B?GSz*(=wGIt1v|J{*=&iN&#_`OP9p_EVCsQgK*6rxt` z&&cD0H~029{&c(V`c%-v_}l$V{BMkoYD+I#7*hnBH%v>SjFjB)&FED|!EhE-&C9*h z#Lp_D!lwfqAOBiK2s5LJC2SFQmz<5F+J?s4=bE^XbRV`o>?eV*PF4@frSWAShDq7h z`8PXe^=Am^fdl;|2kiPB)k-eS4{yFAhEn$2Nb;>;g+wa9I{GBtFWZ;)2^BIn(+N)R=P=$II;& zXHRW<(!X1E0eAD#vrAQJIO##Hs{Uqw`0lTSGxdj&ZAq?7hbfjcnK6HtUJq961AW$_ zsia2q4adD+l{oqI45{EO>)_oY+FiT6!_PHyTx>HXn<~c=yT-*8yR>h-F;!euEE89Q zH`qFN)p%!V3^8>IhS|Ojy-%{X{FwD&_s)!l8s6vFWT{X_YQFP%E@3&P`fmmt-*i8M zs=0oB+Dd*CkT7#?zE#YBrl`ME8j?)`5*{`-uE~47UWosbRZS8sI(z@wcbi{G?DU;l zQ&841k(ePhF5P-y2s?iwNP80aWa&G`mlD?_123i$$bv1@EA>&7<)~UG_J=l!igg)= z+zlCy*Us<;J#9C5RdhE~LL9#*G?#x*1cWngd~l<)sUT~_P;fILwR-!~Z0JnGFTcpM zF*Ev?d(>Y!r3>~I$LlHa=*iIjbAhrp@-Qec+@U3R4E@N~fmteoahPk$=y>aCPGL!_ zkbEXy&P$J>23S=SE(J5SDe_C^ z?F#fUncL}qZY0O8_mr0FddBoiSEXdpT2wd=MI8NP7vsp6?5-)iwNkgk^ahAu(ax@c z6X0mw=Kv*9rt@B$R04GF!1h_q9CIIkV3kD{npAk^U`ZGMXl{bR#7%&d)g|IzukOqA z#Ny_@boiwsAEaQwh>+pD-Y?o4`ASIvNY)!o3#Rzp>3(W*oTt%9!O zRn_IgrsRr7(RW$aEkrD${ib^06ubmCV=JW?{7iShP1%~O&k9vK!1oz^m3<%7|Y1kN~z^j=0Tj?aD=^QGC`af7?iJHwd1=5FXx{{~oFKQ(} z{jb@4V_f4-FVW$1#fH&sE)5$B9d*75wDB<**nHEnHqdG22r%7j(^yH};BtQlGY6p`DXZu_X_%@vN|mC<{0C|mHwU9GOAi!;`U zt%wjj1goO*$qbksiCL(>b8Mr&U4&<1Zy@^Y6J@H(QpoCpe&&5cV!Dl% zJ@P5FmmgTIiikRYvI`5@MeVcbHiS~53jl_zwS=(8bHWR(<5TIWH={u*`k}$nu?_)@ z$-&%vW9!mClk^_ja2sLt+|0+;41qcO@$6uylXQ&KXrb%j7UaF@qRi0Kx~O+xdkNP! z%I2XH{-j3PoRQC@=_{ejF+=@{E&ef%@y!FPi<+&wrnw`t223eUf};Vs@3!0>+tj7S zZ6z5Mx>{y<)d&nFIVJ=NQlF5T38SLoVAF1z$&8-QZH;?j>Lh>eaDvKvv4!}{J}vz4 zX{2SYomYE8NXJb*uBKfv)j*B`$Gw5iyeT90QbY#me2)7ZGDpM=dOMo?Ha_A`SRP&^ z*L(FgAX;y|_S-&smQ5eo$XobJN8YqL1Xs@g#yM+g&efpZ{sKLS$Q4jz`z1>Klg+yU zp6xQdh`HL|vNEy7aPRsgb;@>YR*XVz$}_;R9a6=ijLSo>D&h+;*z!wN=h3kLevn~6 z^HP%W(HHp&N&&djt`++GoJ|WP)X=41@{)K(szL;cBdJWjLPiX7LaZlW63-dmOhov7 zPS*YIcZG_EZdBmO3?CHqjgbAkz_~wZ1xBx!`-S7zb1n;ta7m#id6IwG+HxFndQ+C- z;WFbmHnM$ymUT}X`g7;Hd(pz*v@Rta5?8)|quIj!gUVgD>bD6)Deg0ECb_>cFluY^ zjQbzUNHObhWR>rjuw?$K`IzX=wAv2zs>ZMg`C<_DCl3Ep2S$~sB)X>vmF#O+`H~P= zv-}QLy(t*72}TX>P58RbXNjh;)XZd@3xl~do=vfaH$ZMq%?pbn;e&8?zwJ?eM{Ai6 z_D6#}&J}8;UFIl(#QwOWPmM>PToVBXi*X(wE+?Pn6zRI-)MLl zW*464S_zRmAo}~}}wrfZyDG&N4(%ocMf~jL# z#^IG1`=boS3G0xPISxj?vf6=(s+vJANqXSNEJ7YL#UP5BJZnbxgI!Ly4!k_BzDoK4 z@6c`8^04;)*Im_%aLE%_RWSzRw2Oy-ajr!bN;*F+Dja{=4|K6FJA96c5(#(6{ltu9@(z{iwP*#bljRhBe?_q? zGiD%XKJ3m$-M4>u&#eF(Z6G@uP#MKOG{Ge?l2%W90JxUQ&nnZM_OLQ`^ZWyih)Tx2 zZbK_adY}z*G##s1Qu5NRO67GWD&qR`zC=c^UaHtY>V!4N_V*N@B;k}ipMf$>h@gGV z+8VzS5?T59<%v@&$@X$sluixt*>dQ?oO$yZ?bc9{+55hcUsb2ZN?E}d{O>G{ zx!HUzYg1ZT$<|TAp)=x{;tZGUF50|@6P`!v_F#@$l8s^4|M2iB?DpZg+rI-mr2(W>@t8Ej4?E+FCLM`#7`;gL2R%I06UaQEYG3S1YcnyxAc*q31;J z7GL_AK4#T^^<}}HD~nK(%`k;*Dk=Hlmih9$%9CWihwtp7Hb?#Y+l8qj%b^K!bQa-t|s9G0VMd8j1V?}^QRVnh|GV^*#7+`foa zhXg5~1O|>nD62hbd})csq8vh*tUqnQf%3g#!osc9rZx{369?P{Q>)&VyHmHa&^z3o zJpgRO*#UN8SQJ6m)wABzR5NDJh@A#agKP92>6e%knoiU%nv1x66XJULy4k`#5FLcmIbq|TmY~+tr=M$pM-er03HZ{Q- z{HM5E;y^_U{ru5`gzJ~n7bl>fK1ys;ivsF_^STNpJuPf>bPlI^>nO&iz{;b<$W9q}K#E_;@z;B{ge8_mix&;ne>@^PN4 zN;x?3l!6C#u{kdKzy)^2H0tkj0xut&O^StW*|;KYg6=bZ2YiIp^EuWqx>vO_dMouL zDJ?mPmw~=S7A0#a?6qSO_V69zC62pJxiC_@VsS#mq2BkuP|QJ4si`c<#2wj;%esW0K$ z{1wrcIa9+IJezs&Zf2u!#}s8*^$jtjS~inTgjd&`xcWgCgO;JvD%Q2xd3P8#eTv%B zaBqdlP>93j@%wzX;CG>OBL|UrVoUy01{*Qos`JP|I>XCbK|{Aj>SP?m2m_`uO{P%s z6?LY+!^R@Od!Z+qrCWCIgy8Y{>F-j>4H(*c#Y?MCwMeiN?@4E)(?_q1k5$TZ=cBo7 zf7oxEaLkFnXZffZQ>*j>P-_bKpXH{SX7H|?-OlgWr4qW?LyrLL2rHxk{GGn{w|uAl zuhHgBtYgwwn@zM%iguSQSdZ6MB7SZphxF}r9X0_*y zv9Av){L?~gW9Z*cZ2Bqz)^>bJmX_sa1P+Mtgq@7iUer|yPjq8J+DjDSJ(o=5qUA!1lxFe1jUaKO^h@`z-FR^!-$Y*pjR2tgZ` zW~->?|2^%vp_Mge8p2xYe*{!cz4TT>l=rXAF+6S=xmU0^hrXxdWyIOtpTh*A6`v7a z9Rtis?(xNlRz74Eki%b&yx_*&lN6d7H7wfjFfvqV>U%5%f?_+#PdQyGI4<0YSS$#3 z;y~)O%baVuH?5J)xhf}bUN>ail0$x43_fCmcOP$BgXWk(t9`dd-NB<~x{`En0 zabQ%fbfNpqMK*Hr-U=nj7(DXqP*#veT|p*U(6ifKKY$1ivuMXK15-S;_{&lqSg-m4 zWD8_a^Ts_ak3If8hWLzQ(=%?dP8Ig!+cZ7wd%94Hoiy=`gEu#0_MQ2><`1uFddUv3 zD2!WROs*r8Mp$kOZl$=r{irMo#d*jPEsDY!I%q``kj)Tt6wAi z+7Db{WY#=?-Rx8e2b(Uq8l7jYOZBG)QC8!CEidjW{0pFH`QKZMJ6XA#YYUcsUVSHo z8i2HuX{E)7P(I$1Jhl{uTdK=;`_3loxlzVsL47#zICRsmC_rnNSwUd4 zsxfOoI2LAgVJw^?(@Qn~j1&y%3t516ckbe1~H}37QtClYRd39-w=iB5#>id)HCg)+%%~@ss9ht4Z$NW{n${rRC^9 zkC!QHI%U|?)qVoMd*Rgn>r?V=sjIh|%#vTSQ72mBg-i|fK3hT$zJDj*`c>A`3OZbu zN>q7HF<6bc@zQcGmEh-8ywTJqx^(mr7@V{hrE4}PZ7ye3&$*8OSCi{lC^lO875HXT zLh#BY{^W()My>B~;Zpr#czc8e+4Sh`j76$fSWoqo(Jrx=BEx}BS!~eI8v&9D_g>G* zAKeq@gqVb9S$BL&she~7ow+|b@V6cJ%lv&Iv!F6noE8%OdwZ`(;fuwkM$}=>C93`gk@AtXc=q>v*GGg0^F3+ zBHw3PGRN;O_)B=F!)iU%}SV?u$8Bp44V?WhW>t}ge}z-s=Wrb67gG_dS_0JRu6rD?cPe7 zzOca-TFNw0kx}Sd1U302jlmThvwP6>9>)74gG`b3@=?TwM5OIiHXX^{LZ z5hdt??qChOV+*#3>M)bE-YaZKGzrcMb<@zbl z5y@w;WpZJ|B&T9A-zb%Z5N7aCM$$?+Om8^Gy+8axeCNkX>9EExfZ3f#P~h9$f&QI) zkc!Q=5bygpBsze1Wn8>tbCx~0i0zva`evSo4=wFSfIrYI?HUk{KaVxkeGs;9kVfSf z_}mh|k3jWW0Uw_H?Rou$3026IfkX@CVmDD=cNdq5=gO-gr3sso&&t;kzunN>_*V(t z(Fesz_v>9)tK0j5_kJ6n>kICGCbs7>YtTL~XjJMxS)F)VUL$DlC@-QZlm zKBooz!G^p^_sKEL#@;kE#wHBhjC~xa4wbZdyER}EN@+s>@m(bfgX?#54=hFqVV%C9 zOQLomA<{O9KKv~jaX-fNZCRgdjET5JK6;dfJ3Dt?_3ue^)mqgAy2E=oywA!jG4KIH z*JF=H4D&?)Ap{(uzE?1r~dzg2E-4DzxDM)VC4zyJzxM zQsEKk=V&;`xib#le|Q~jz&m;4YE!({49V^C<%c{ODkt0m(Ki@EZtkZb)Zhi5{p{!M zNdl8i3ts8tD%jYQ^=!V=vw7&s_Nr)Lg3*ZuJ)-whtP=sECTzcFIC-#qX`9YG(yFfM zQZ46Am-ehuzt5z&v>3Dk>WF(1Q7CFt@fG@BFZqxy;-L3D35J zdwRYTdM7-ox`MN9Z{4PJv~C+ih;Q1^Rqd1cC(&e|sB64#M`_^?u3r#l{d8yZ`mc5j z)f&R3JS1U8aO3H)yqQwxQvR%lfG_R2D?@EAcOpU4I6yKO%fB)%WwDxs6R zWNcP7Sx$r)>8+)ZcshZ~AEDu%G;eiGZ1`%1^OI=d1e$(D^F$&SYE%Vujsj!Q_-g_kqK z?dmbkBNlIxjrnU-xRxpHAG`7F>_GxxP#E1)cVJsIQ?I&H?$|r%&EWt#T-HS23hWcL z0{0^u=k|;C0UuTlj|Uri|B?i5x~$D*YtZ%)djWn`wZU(KK?g4?F#dm5_J$Jh2h+Hz zeo3V#@`#z#E&+HPHBu)lbYiXuo|@vnaPTteQ*V%Fv- z*LIZ3^vi_S2($V80LS0FaZxLK4jzFX_bEhUcm0q7chhWd-;w#`(^#cGK#VH5>CP{# z{zN-;Z6D5V?vGvqK<_G=otB?jd=Bq)LEogrhgn0-xFW|~1mG;5EvtyVRj%|eTqMR* zFtP~Pa*iz(cV)UW=cgP!6!{H=;Hmw@mOkRr*RG(>d;X5{ovd70$=rW&j{A>O1pOFn zGO&nnT4xD+h2~1cwU{rJU&m1K&~IAg{imk=(j2XFf(C5DD=x{Zy_W`We(Yrq{;L#o zm3;o}Bk=}|>_@X)NGhs4^L}2%=ch)8-7y1yT_hHA%o2I8vpLNFn-Dp*Y5(oMc6KC0 zX6DXU8Z7^KLvF$AOdR@O#Mg8<2lhGZLy;mTsDJq~Y6DYRG&6}TsrDKcbC3a4JofnX zz&G<1#ocDrM!q_%!dviH%%5+=!J&Wk%mVSs2j7mrQ*74??linHVQEhM&3PCL`ZhR# zBE{nRt!U7Iu+N~fX--u#*SWn-`|fsK&U33+j|Q??u3uEPLb z`9ES+U;W-cT3Hr1SL9KzbZuaEw`7}5^mHXulP)cr@cq$p)GiL`|EYO+Q(>7}PEZA_ zsm6OAQhM!Z#NHlJ2jhI-373R4uv4A_LO?BV z(%3AHr+sfJBp00S6d5KOIT9FvO{PE;dxGzr){3)P-9M%}m+B2I4}SGS9xi+uMm(Y@ zeQj7ZY4bFxz}sl|`T2dX3TKI*mj@<7c%p>c*uK*gxTJZ^X1JQax&v^cMNFXWXVv5E zQFf6kkUzQ6^A}nq`hhClcl5Z|de7d+@Y%Ns!B-;B2C2VdlKEy!{vgS_`CJFVkoCLP zd$AiK`>&5tVur23qZ_4A>9j;ob4y_#7-gjR{qvyfPTb2_F8}F#J&Dwooph76A&Bt{(`rnVw>6i}EsKJ%r{+j<;bny6G$P_Ji%=7;LpC#mgOcfwl8@V{` z-g0)+j@_mD1ENM2xwV98cMO;D;*A3Ap*pb0HdM5NUy|?G@TG6>QiX0Ft3CXbg`)~` z&wNDrerk+)PPnIl(-va8X_k<8mkA&<2A^h-8W8Tx5}x|SgqXNNm)WW-gwEEUeIuje zLw73&NXJ;;_x*0IHuopoTK(V$-`+D3RaCzceHjf*aM*SFTeiOdwBDC;nABvm?fXHe z^7 z2d@z;Jt?iz<5%^w;JrpVN#eOf;?}qB=V#byA@;+Z)_u%Gsjp);)7&E zoI-jevdo$RDw!>?8SS5Y>3BQx16s=c)6EYBbvph4W#MxPEV%f}O1nN`&W+zlwJP1( zgkWytv>L;F{Ii?pkL3ztw;tOook{TVCr`whjaE+Me)FqypT=5Ng|Cp0Pu9k__`SX` zxoPW_y!$7LC}%f+&;H=EyrU(;9^k&o(=8cn>rScqaEEFU~@9?xr-(BV5<2Rk&+g5vY1CJjzrWg($~u!ft!C8k+20Xs!6kKg`T zl>DT8ZcHe+F7>#ojacS?8b-Sh+V_J;S@QZ59p3AsPb1kPlss!zL$|k$!g#$;=fbgL zajQ;W?X1InLb16kIZ$e2dPvdlC^q8KP+iDgBeJxbj2v=Z$=vN-v6HGF&1*niYB5>h zL-w<>Y5ZuN|D^#Q;qRz8rm3S$A`KWEt^ zPUf~s{tK59*92)UMpWhczcn~P2vNUnp}_pO*<0zOBB-)$r;ORo<$#8T*nMFIkyJw* z4HGf$b~K%~t>v)Eg=J!jYm)qo^hrg-i6w#2Yf2Tan;F21+b{Kd3O={_4Yp*fyQ&N#AG<3Tm zut?3weAnw8arYUcHA|ff zn{Q`?13j6purajmJ~Y%BDf~YhrHg(d!EDof-y{9yDEo^`-K8+a=YhB1+LEmFCh@XwzN2 z(=VC3Mid)V*s#ZXvWv`)^cbS!!3sh6ga zbXjOiZ4VTt87>_SL1rlLy6vA7n(YmxVBPpzCVC%Kp6tf37HJBes6(p?EF?n{;jfQh z7#$|ottsXt9@(uO@V&fx{lQ4*szQHgD_A?B#Yfn1Ap63Ax%V_gnmgmpu|U+HE$(hE zmGs|I9!mS-Zo02$$SN_)rDKcH0C$0Q(CE^*#G-$%h^i1%TbdgBjru=Q!3|dRl)3t- z7k~Qt%XmtZpKm7qa(i`Zk#aKjo|Klu{E82E6gBI@W~$CM&3)0~OtNscHc;=PO3@CF z>2V#DIZxX$2AREFq=JImV;uWkS7M)O=p)b{`VT=}ZT2pF*Th1Unl5q9JW|ypJAYG7 z8I8J!WWG&i3(Z;^EigX1HN^c~LAu;`aB8{%9p_RS>GM$gyi(yD`{S!W(kkF(AH~jUz7poPM}0Lo-8A8s`y;#IRk~1 zSYvAa?u+$m^<4qiWROFurH$fKHy~@196Dvtsg61_Cn_^%WX`UA|C%n8b|csA+;Xog zg}rR%l?;k$!SB@7499N@kbi3P&~3R=V62?AbFRDU?aSuufurgWGlVl}_O(ajKvm;< z70_IdFvx(;D4^~5Evgt|aBNiPI%>+go%lCD$Kwz=3cC8D(=bhc9~O%x*hyAc-b8QB z>n3=?4mdLpCh4l}Kt>VaC>+xyjkp!|BcWA5pxr!3Do6(TE}N`56X%?$)<#l*6(kjI zQE~I1an>$yuL_PWq5h$rv4_-4jeG6UTFi`=>~WW423ntFRrP^Xsw3On*9Pc``tiMC z9Ym{VgLk(2fBJb*nZDed%{Di)W+X+iY{7H)q$_6s%n! z=B+M(w*ZG3I*-veT@kGEe)zf2XN|==X-CyzC-s< z!?}T*6TfsMyl+#^$}4^!V#Mix23`3#RC@M>k;8V93hlb_cH!c>96Tbmb)zSD%J(ux zDm50;S?7+YOfG}(xO<(Nvn7`LQUr>TVlC_&DQFL>obD@g6S93FZ*2|rGolvm>>)?X zX!vXs<(^B%ImhjS8P(}3nVX?h?~XyBP*{>SzIbmpC$S|}L0<->n%GG5lR40k&%BT6 z_43Rs;huK3vrLmY`h5~)_v+x=-ff=fM#5IjcE~ZcT;u3d8FxyD*L9{PbWEQ?jZ?+V zx375!=5h8VKFzb*r4RnqTD+@|0;45}MW9vX;+d?!|5O5(azC8+Dh%80z8Xj}b zT7EjJ_Xnr>jsKqMxbK5cz&1%1tSoa>pyzz+i?KHG^+rqk8FItMCp>NG&Y11o(CO$O zm}wU}`UiK~xdF9A_3fT#syDatVqG{eW3hhJM%MH(M;|PHemsw62z^_q4zOQ#G&%)5 zl&bjoPTHa~6d+L`;A*rC9%VLF3E8-BRq4JU?)A9gtnBvF1g{&v9!4odLGzzXuna7r zA2x8w{%7YNTh*t{*Xuo!lPrt#n zoY`~{15OK&F`(@8jwIr3JRCZ&{(cBJ>)xw4xbmPC*tIXd)m_EJCzpNSN|a{dFn?p} z;;niCnWV9;ciJejNn z$*RYhT9xDnE(+NM&TX9hC``Ck(83S~=MS@fwR-xW&O$*mslc^<3;>}!n%a-yVVI36 zw|y8b0;RgwaoJOkJ$&%@YYw}3v4O8xxU@OrADY1oWrXucwFi5}0q z7DP-pBv#Xz$v}71Pik|2cs4E1xA;vJXWC{Q^c6DgZa?ZJLjvb{wvVU4S#->!@J?mp zOwRUaJ*odx8N?vxZ^x=k0(2~=iRFfGH0oD zX0xz|;s$~7H?I(-376#tuC}5cmhkG)p+t1{i>`GeI(mW5sv=iVQLy{e$nQ9HsA}_{ z5Ql<=`oALFwx%SwN1kb>>65FPMW?-jsJpWdWyCI#Np>#Unt$-))BkFDA(b3ml*u;K zm+M8VOR**B*s-TL`f%wQovhRAn@R_RmQH|Ik+>wlchzL<1|nSbM@Z&B?}xWa4qfOc zsEw5B9Tp!vjCN{FBEiiU=yH#xCbU@W3fM&*#XD!xQ_`Yf`fI>=iB>09kiU%wrf;nX zqf^|~1G|Eeu)!q9mB&TZxzM0?YLCKZ!R9`%4+W38kESvK_pRnH>-44y5m#oz8kElI z0#2$vJla~|hSAo*vgQEkzX{>EKfbDl->>btNvc0*hmriW5%7%~8=q$3k*`~bux?}L zH{NRM2R?o;{sXoj?q0z{&>u#ZE{w_wvIhUd+o7u^lB{>wv{%fElL?K=I}>WZoQh5n zXcyniR!SMuR2fqx*Mn4D)i%TD3e2>F{(HY!$Xk9NNe0k~5y;w~Tf064s((bk^dqlS zJtIu6Ri|1C?A!Vyv4ZfaYir+I9k?{y08a3NN5y!}h_FNw6WdOFtg*4yOd0IWzl9Qf zLnyE;WTaQkfj6Zz_L)^y;B(9gyXch#a6(9$&E1wMY`BnSm#wZ@%m;L9r?x9=aMr<@ z%Pv_~pu%_taNPc5&Vdz=YZTgUXIMog+GJS~uK}Npb>QmP(>%7`&nEl_566X?{Tm8o@Lg*~hqw_V2OxK%fv5Zy3fMOpG!9 zrbnWJjZc7{Q_VmdkHaX#U8IiRGVLso)=8|QddDimU4Pm%bfY2i9T6*f!zym?&VB&> z9p@+k1`Iy_phap`nHedaS#i`PS_JLNu7CxnI^`?>wQ%WU-iSJBDcsLg>XYXI|2=LI z(-*d&)m{{Qi8W(C($Rd_%5i$o8B280W(#^;+9DC=joVi>ihn(+`4>^9j{Wfq>UOop zM9?-pdAfyB+$i_ac`ZZNG~#j@1^h~}C#oT0+c`0zw(M@(ZIXd){~LUg$3O`7mF9_> zJ0fSfw)`iA(UXl%spfl2+8#3NtLA#K_DkqZ6|RG}ovnyK1Wh1FBWLDiQ`f8* zgDcC3QzA#1aJ+mFmG_@c!9c{wQi{cvP~`A&_B&R*DaIX{qC|ig)tN$_R+kGr+WZQR z%OSMf`LKCw!oOh!d~OiL;m>mJ-Cfb3nz&9}Vd>wQKH5Hjwr2K~Wk73O-RtVa%agZw7{c+fq#)$Hp2piS7PP`Y*pFLhnYvo;A?tQQW zhp|ox3tVL8w2~Y1BCfwYehUF?jH$b;^K?ixTI+20T@zN+EkvIc+W5l+9td^bhW(nE zXn`b_%a*{dg*fYg$6+lz1!MQ`V#EKb!dz9Ukw2Bqsdoh)2|B94$ zZl>q*{bsmT-5BebarB--tcLmEVid`Y+mAjxoq-CWbgv1M^D(EL(<8PgYnnIqx#=2) z>luq&LCZ`fvH5DYEy(vN{vHrw=;^RoQV^fb=g>aWD^^M>K7MS>%6J2BV&zw8__Ug^ zKAS~nNNDQia4}X^k|w=Uw)s+iiU;Xf7{tt!{xRjeu#_(sYxO{TlH^k;FB7Agk_xws zEckxU>P&F+#GN6twXVOHbeV()?hsP@lyuwP!T$;iU}r&xpkP}D zjmg@_JH3^MUPXE@s|O;xZzQwoj6UhP;Kv90QtB`}9HkLo^j{AclCS^IVEUf?fA#YI zkp>BF#lEMi3nX%9dRlolLT;5v`zV^7>k;6C$LW0ll!n7;1|bq+%wd3?hSwI44(5w4a2D$LbjHUx*B(e!jIfM{}@NQzMV@< z*TeOXSLFIUq606|!Yn;YE33ZOhlb_5^%vtg2_d*xu$m#cPuM@-ID%3>$DHD3 zUv7>aDS~Y88_vmDsncY~%&$zGGYS7Fe*r`^qLRsXBW&_SeUrr(Wlo>KUqyxJZF5A8+{g=yp7PEk*A$)nCw709?^?FW z@oG>gx|~nFQDwiW`Mg)H(!9gaR_7x2Mac_7ap>p(^AE?Li&xLb=PSC2_;Yg9JZl^&?i76pC9ws#6aqtV!p4bBh#&|QOI3l;PUiR(;0qDdwwZ>E z&6XrFla(*AP#c@6>bFG-GhG3%k0i!~ohR1FVWTheZuxp5 zg3YXFtmBP0`?l~tP@0h{*aS9)T=|6u(;vVT7=~@RITS%!ZV!D%0_tc`euZ|~<4LBD zax;W27?uR9${^uM-u{9sJ0yGtx=Xzml9LKM%X;UHyJUFkkq!1z=3|#NjETB?5C=pr6 zM=9mN-1D+owdB?T<>(}8vITXdmFh*JfFo$g#y(ucU_h8M65_V9iGdYSXcK~z)tx;| z=+;h}sD=-2R~K^UnHAe6$!J%iX$CK92Nm@7Jg+C^nY7G?wY(y?48_Be=?z~AIOzNZ zfuG<-`qxLBYXL}v<2HXcYf`y0KNGl5W1NK9dgaVJ_`2i>$h~EUp|Lf?VnYdFyyCHB zkwKG+(wr#W6eMY$%eUGwW0uwg9Wm&d#W3hP6299Nbli=e(PNuhe{!K2vm zJ$Bl!opRmK*D%sCOY?wjzee&{D@J1naFWDPJpfohoAm9qr?ka_)+8Ni^LR0|JDX)` z4loR80@}+5{HXsYDgzR9>tGyaF5{WkjH1KeIF2no?~bX03r_25u%`1Y0DV5vSqQwuo#aTa1r3 z+kR08*SYD+tKh%`nu0o)D7eaa3_{5-g9d_uOJMH^l6Nx});x(REyonMx_Zae!)GgP z=TV&;6)WD60|DnnjNowj2d@*g2Q;gXwp7$4s|m$QZwefZiy@ie%<(-D_ysG9( zPj1=O4GjG1L$rcq1lX`q^QSq0R2~-Ba{JHTVMwO8l>pH3gaR_pW(EB4u#Qc{A?Xh5 zZY>;;5RM6-D$nU?4n5|n6wLRgF5nBTr^dc*Wgi2TCV}(W8AtaF!+x8gJj+-NGfrTZ zjkMyaFRf3fhvbVVjZMe6dLKxjorF-4Yq#Ry8Gp1!W{!Uqi{an&YfrrPS-4a+@9m@( zz(uEK?DF)`FnkjD$FDd=eSqW5j^}*Q>1!U=NHQ8rsIZvVn`{mpHDw0&Y0Q#+jn% zMj+_68jURIs6-q?7JA`?LMwsNwqFI?jRG-$@bD1=7Gbai z#22rdP|4Z?P`GpFano?2^;=4=G!6TorI?D2pi&`tQm;|O&dz1KBUoeHk0ne>uJM>evS3Ff6NT3#h17g9qd&UyXWdq5y=~Fc&>=Y2*Yd?~1k{d_y@llvg}|Q*+V_py z@8k0(yKhe%>eYR84FT50`G~W(Cf>ana+bCqa zlO~Z08k||4Hr}cQo{+!M2y0(RNM)CCa^ek6xV()Y88%1g+{T7o#t610k=1R158`|I;vGW~usl2sZdK4eg-;8nO_F9_DK5A3mI!PHAXIn z#*`;N7Sj@12A6H;mrKGQg<7Mmb5ZMvH>YuCH4n#rY8%N5JF6WRQCm-lqRe6<09#k` zvf230J*OQpL0$)^iA_ek)>4fU%9i{Meb1y{(W7C?ZTYB=TT}wUc6_B_isTP7*UwN*f^|9OM7(`tXeLLvs)6qUJmS&UVtqs#8uv z0BI?k_2FJ?7dy5fwCs=TwaC+#d0T>L#Z`)ws?|Kab~YHX-^ok@!f0r%Wc9UTCE#{# z1jjf~bs=1FaW~L4MQ_$ABP}561Sb8ySY6V-NWh!u)k8(#VdHPM`BVB85TS4K5s+W} zs`Ph#Q#LkPU|+V(J*<(PimT*$h$Ft``j)BydW+s;3~(GnYg722Q5?!+ma#Z65e-DF z%|5V=$EE}5eIjGM>w8M*AUgW2FLpt|*c{Y}j%?&AzwIFv)eKSajG*jLI z^2PN23Sp~F$v=F#NO=i{%3VrmrP+Df2pFjtzHja~Z@bs%v3MTdd4X~eJrF(g`4 zpZ3};eAx?9u}0GmISA2kd*5o^lczX?BkNl2(d~8hJtK{nTlbZhme)CA^&5;X&^ksz zi9R+oKU@aN4dfZna6*_16db>ckC8el>|Brd@dTNm@pN$SpwxX06SFG3)>+6?CkTc2 zTJ8O+fPeLEYu;~!H=};$3Zw{MsE+QlsTAzGhKy8niPxiFx_@0aUP%8^Dv+X*%4sia z*?-{afI9f$^#7=P^SGw6Ep51~tP(903K3BmqJpBLAR;p)rKpG~6e>go5&;#J$q<FAwptxkj4Pv#4zemic$}3_VmaZzdY;_%pOQ``K zV?-8%pG78=aHYW07yd=+UuGX39HaY0@TDL^7GKaunpx4ueMxyS8nmz>wkcN?#{$}t zaFD1r?2U0#g4cQ?!s8cP)rA0sdbn_)?sLMVhC5QYs2tniuyD}E$g-64=yn3M($voa zX25jvIbfek^yI3mPhyHmNZp`h!CeAh+tgNfGc>lVb2oPav-W7 z3Ii^M>Xm5_Q@ICAx9W6Ii$k&T7w32C;wg@$+r;12nPgX&_A?ZXC=A3v(Gs9 z?1{qxB~5m4E0tYHl$-}OpVxTfx0){Y9X%K1dZ1$Fxix-+)_U;fDzn#; z12hG-u=X$$VVbBNjO-wyltCl`fX$(5*gM|eZT?jX_kvZ_u8d==yBQh&JR_D?VC zVyc0Igg|-5TTtf}^rJFfT7c-G#+7e*>U9rWyTHkMRi1txkM$GJWj0G)B81<$Xbxr| zuN(Qy`|~`QkBb;}xmI3>g*Lq0?#({ce%D9ng3kk}S5wTm{lA69B5Gqy`#N%5bMx@w zT{S*k_=sLDLBgp>Uh)*sz{AX@+$S zjmn(cK^;H6?Y95$v=e(m312?M!PDh6R)w{ZL>R9V%q5}cehaH z6X%c!VZ0{oklO}hwA~yf3Ey*{F(rcVr>(9$iH%0Z{B zmBmlPN*wqh5wh^R6g=w+2Z+sg3b+xU*uV;Ef;pQm zI2cANjpnLb^)o*0_3xLKc<~WNVnL0ewQau>Rd6*ww1&$Tn2Bq~M3>Hoil;GSWQXys zOw6pPc}zAIOqHbAO$H7JzMa*&$b+iEl9QQ0aXxWLE1a9+wk&zu<+HUfl&&19ZWC8y z^m>T#Cbka}R6!h*MqCy&BHxp!uSq?CrvX6kn>%NJYl7 z0?c>yFMsiiYxEiqyJu@IeimoMlh4wzgJk9&MbaGxam$zi50}|@VPr!AnE$h+?=keo zRKL!KZrCj4%KFGM>RA4He{Oc*9+t0;3f<*o>GyEvtiRZJC=Ms%3I3#`<5 zcTFZl=Dh_;wY7eIe7@3enkExj{7jOSL>sQ|6I-9Cma!%j?|n$<1SvPzq!bGCo*%{J zx`{jC@f7%dcIm-sOLeOH_28`LQw?F48Vt-uws}yih-Vhv1>hoWUt6CgV~JH)Xjsb| zgLK_JClVo{>7k|KZCTh7qsSmVf2$@qi<}nn!};D4&(|y3{Gx(ZC2w#p`L%+uXEJ zTEioVu|;DZwl|t~uSoRXBdiQArjVnZ!Yw?KfT!sb`{k!k_Yc`9u2q7M?BzBpanUQ1S89|+xhk~p- z@$Ez+;l<&AW6etYX!``8xKK-^O(nZp7D41!xK8tO3o{M}aL+{+Pn!lUaoJS)k}@Rh z26}3`(z=p8OC)n8l#v7~5Rv10vrFADxuY`REk#K{*85g+h(Il3&nWk=ssJBfy39Rl zPpsIpB!VeZg>8)~;%E(bRU#1xB<~sxj*wwKF^Lj{?{5DdUht4)ZQI@;CIiU@a&D8# zJCe=n*uXTOd+Av@I%h#}*`u0mY?i=FDNl=aZZq1#-!9L0&M2Q8z_wQ}KU}sttt=Wd z?QAg+j*Rsxx33Vwvl<3;FN_g-s*q)ZgfIK;T?2fYGs9$PLdT8p*F!GM3Q}hvtjSK1UBK@D#eW!!Q228YgjELokfa+3)K zteBx;>ZLA)5wDS#H(=b=K*ecvk$srtd51+YRH+u*MBT1MEQgaoLSY&@s3`n_~HzS zj+`+!vwZww*P{xU?~zusL%-C@7c2BhAI76rm`4^5>VjM>4~Lzo)ZfsAn5&k>;vt5? zGlmg>;k^@BN_keys+JT z3u*1L&hocAp%s-`86VX4+^8udHA|7UKN?FdyNgEx%3NLt>d`OECJV1y`S5-gvq)p% z)3$yb-F@pT%!A$wXv{{ylKJSsEY`3q^F{^?Ioct_b$Q*xRsh9gcnUsT?FHLC0)0jx z*hz7~@;10G99NQnKFr^HtKHq}0=7&sqg|{~ihYdfKNnWt{GZvMnAX{XTRW zs=#sjcHL}PfPL|CpG|0wpR47LZQe0d#0evt_CArl)RX^>)W7Gz6{LJq{9m@W!@f85cedQZA<##WF>xp zKU$C%(R`zbvGZxDAtt-XcPduJ@b=XtbGxaSb|-16@qG0*b1=!cAE89tv~;hnspQ>) z`47udkF-waQSMYtBBf?U`pBF-!&=FLA~%d_*Wc1#Js0zg#=8?~+vWbvK>Nwg_G8%r z1YbkM59jSYTUZB0cz#0qM(aCsn8R9U({Z6z>YGbcE8bgK{g(49|Mj-5!oXY6Iu55T zR-edUy1gDTp#Zy6(5Hn1>+a;cZ(u|rZI5_7#nxVlQFAxKjPjb3rt% ziUe#z@UtFacM5%ckN23Hbnj}f80tS~Bf8~0u653U^nCiuc7yDU5>3}hbubejt1NrQ z>q`my)qhaDY?zkqQKGKJ-tYB}tD?DdX0^pF6dSEJRmgkSE;Wy$2%`(j=Pvd`;j{Ni z*V#QdQ_XDC=bm>@n`P>w4=Cupn;xBl*CofI=<#9SgWM-i>&@32Fztd1`y*pB>Y1x{ zh?w2>)t@zMZMIh=*op6MB54bAaCd&e9cf(Q>=ZY|2lSg#^wA1>>86aZ{eXDgw zNVe4j+>rpS6#m3^lr6^&)c0>7_n4(ABmSB?h%C4WP+o^bf9G%ojz%vVW|f2mu_8+x zAYf1WQ*58ad_83t2v<4l~)_-=iKLXrgupPX05nhu7$o2*@@NVNabKV|)*D(M)zB!{dpvf3NP! z1}ziLfJDDBLG6lo5CGbt2E%KLc!j&U30$|8;e8v6RWfY5!m2&hHGz~?m@ciUmM15A zUgH4CHaqCtz6Rkw3;2W*t^qfa%uFqJ?7FI7HAh6QWZ+w3+QB!_yd2H1h(BQ%#CV#m z_xd{?xmL93WRVonBRbN&#)xWYfR=_9Tk=8XNEFX81|+)J)ox;y6wK>Q(HHIA=F#D?q?;LpE*(<%)#VoNJ{gH!rd72uoxqW^sy=F8I^IJ=>1{)>>kh_yw2^g z&UNQpS6@B}v6$7>3kc233&uNjvMv|R4}cNNKWTQ z)o9U@RpRfAnXs!%0@DGWHm;a|knZ;?VhVF86UYd`D!};3HUp~OtV+V*weo*0AR8NR_WX+4`#yaRMwmV z_J`|r2)i{3cz;W<4}ip{{U*D?>XG`k5i{94zs^+M1V&_M7~SS;n9W-DOE1WFjrBG$5Y-gkJ3W*(qC{bZ zF{{Nl>GL0cdOkywJovHi)Or)&P+{Pu7g*kveeK0X<^6at&j!SQ6%9S$wOn?;Owy3y z@^LcdQq~CCx}Fv!8Y`=r(6lwtUA0v^>p64x>SWs1+`hSH?k_t%McVl-`#rX)66E(T zS`?I#d56!t6u}m+=x@qPF~1CS;JP+@Kdof!#y;l`Eyxf}N z=X_m-kj$RHNRn?bn~_iA=bi#}d+TH2`(9TUUhIYEhbA5Ad=jCDlullfrU~}BD{`bS zxV{(nbPauF&6Z}##0z6~0aMTSdVy?B*PvR!b@kec^xGW{2-+1E^@K98_7 zyDM+j8*_DecMYGua>JwTe=fesyhz+Zk-Wci+w-&cXyh5YRGs@ewBJIXSQ-0WO3Hx7 zJLdAS|3_Fg&&i;endBdaz5VEY6=Q5MHS5EG%_!cpTi1TX$+OoCNQFAYf?rW#>g03h zLa*e$Az$KF9+~Z}pi@!y@xW4-SL6EK#Y3^H@ATiV4^0Wc-q}(n@7>wN#>VF6ILv=y zCwk}Y!zs2n+xv)WUuXGfo{dlCzeKUBbFx+rBPN|j%xUK`7&}a?&K#NgJ~!(q&6fuj=11Oveo$-X8z-ryu66pOtG2$I^!* zFNEgaQhado!r08I)(gI;9u>{MmVcsVkW+V*gm5}(XRw>scBJpowt#n>%-u>ok+)0X zu2I+M0YB?~eng#0UA_YamvR@KLg&ChxDPD~h=z%g;7X($vDj|=h^GK?%XJDKjGnbU zs+#hp%R2a6SjmLbjAip;)yZJZO3&_s&BU`zr%hE^vBQK|b}37IEg3V)%hPFfb$w}} zIBGBh?E7=L>hX&#qQojpxM5f zp=8{=CCW*&3g^kVgeSSaq)Ibz3$9e}xh?Aj18DV~P$AU~AC}nBxVMt~Nh1jc#6HX^ z2CI6XGouy&jOq)zLsjYtOnNDcUNtWQU;b}l@-LKRcWU|a)E2i8Hvrn8DNhSUcyjXs zW5Bd8S3l)T351z#LFMfPPPJPFfufq6fQB%+S=vZM^n&HR=2vS0qAuhnvfVxAZx#SX zi~09pjc-{M<@1#*epMtz=l>Qa|2jz`Htf?wSDaLZr2uqu6ApCML#K+xrpETXnfAS5 z^AzD1;Csv^FLZ?ehD&O$a>TSHi>Zry5XI5y?`LA8 z9u6q49vjDcnh%RlDyp~?jYH`HJ~-cXLv`jeuT1DbZ-^9RH29wlF^`>0H1h3wa~5~;q4VjW z7w^wnY(O;K78nkfs^p#mmkql|fl$6>+a6F{>ATaWqr=TXcUtw5s4XIsyNxrnfu5~V znLpF%4!uv3Dn5L$0s3(2VTTFObE>FUPIl*)6eZDO*NDztE($w9Fb(AGK_ENcJ$wpz z;LSYbBE^3QDPQ$S}<PQ-)~O!41y6oQCrxP|ci&D+ti6xxbUT zmkS9*cV4><##Ru@bEaIWHU@tum@i%yD$A8fgNK1Q`P~`my^g@f!-tubFi$`6DzGJ^ z$?ODCz~JIHL%;&SxvoEftpK+%z|6`8^_g6f6qw%d>-4&Qx6PU-gvq>guuVq6#A$*=C_}^Zn7sRSIeo z4J=gY5+7}=@*2E6b0F-FXM8`PP;e4#R)h1y(YK7EGOJ`(V6S&O%5XX5w+rta)!cHy^&al9 zr}<*IFGe)E%j(=Kl^@H`EbcoJqAYV)iHZEqCxC9VZ|ZZ>sl@6HI0slFGGBf6Wb_I@ zz)KQxaoyE^i+I+$M5rCf{17vK5l!C{8b0y%t(&=X_{Z0(K8@KF-s#OA6Yi0A51c^! z4Ky8W2+uqps4eABBD$jk)zJi#fFI=*)iPEm>)DnbwNJGmh{^iLvF8mH~-;8pf}Umkah|2x-rR$eK)y)Izq( zq-s~v(pNj^srLxGn?F|&p6swCIwG3?6FF`1#bVvll)GCq__ zY;;BsXt@rwK-vKE&q&4V)+9xiiZir|HQ(!E!ykoBe&oAe>x;6g3+~f#<~#$6P+5ll zH=oRNzbOFEDe3u4f~Fu-t20rs;=y6CcvrtCKROblwpOTWCIMEUyEVwoo`QuST605K z+;RebmC0rIRK^R|vUk-|e=)EYVaVTh31stPt^@FmPN6gyfJ5c3+FDwSw!mdqkpaJ6 zUX;_7o_im$XIIVrA$Di|GzBu?fm^^>9Z~WQ`?p=1zrNk67E};f(={A10nw~}tNBbn zWOG7qxAloLy!#qm{4JJ_jBg@a{q|J@(KH8j;oH5q0?>IsUJB2J(bG|fB_U}8oh1gC z)s_%^j4)<@sq@SGkIahI>_;m7Iv@|sx9#Z8g-*>-znAP?*v`v4j`nz@SR4>^aeCj* zDqim1-yGeUHpwm<}h?ceWfd)pfG>WgKg*J#U5M3zlpvW_SkeRrPo zqkX>|Zuzjhq=|oZ1eqm0!w+V!bJSnh%-d0PjP%%K3MxqrKl$XTqScLso5mK>%@ISw zUo!6%Srp(fZS^k;BZxH(d*3{DJ_nw#46C<3{%!B0om*`3_JaKNdlm*g=*qU16N&|A z)tto4rRUYZZFb~@T((pEri80RfKG61mR{d_b;b6$?^fk3Ma7aI9~r${NihF5omdo6 zdoP?-cWytdQ4m|%WO377Nh^Kinjg-Cc~_7`4M&Vf=#K z6^wr7{}9IsDP$}_^#;eIu4&q-2lQ&8j!Xvj=k61qawhw@XG=^~QP1S!ToYHuwXAYk zi=#~QmHmpTE7&S{s?VbJ5!_yd1Ly2QN10(q31wiTLH&248`QBSvlK}j=a*1*@X8s= zj5$hBp#W}Mw-4wUq`FUS^~Vm+XzL$(E{x6AvoBO`L;p%0FdLC%UvBocUlSwW`Viub z`_(oV^orYA>PyAtofc75n60dk&I7=`=K`Pnb;>Y>L6sCMsv3&u$k14eA0_;uH7)#` z=BW5;f+*iwvG>_|P}H@_3&5}e7LOeg!_FKjvnfWFi(A<>rV9~>8PWJx2KeB>`?xRCms;|z*O=`Q)Q zuBNGLVgb}>4nwxBhkSQY!{eX9js>PBeMYtr%I7M^#>3-xvbXcJTcf{2hHnM1#IKIY zn}U5N1N)#FVZXli5t)9cl>!W#IBbAQ?6rPSVHJ~EKk5*{ZbS%Tb^mF5{ZHpyxz@re zbU4qCEsPi}2}X6@AZJ@%(~MFCcOxqmXlOztj`K@2yIlOJ70{o1nf|oy!?QBcV%0Ok zDbN?AAcbJr{{E%3i^eOvQ)hp)Q~$5Ag9$3K;(JdZoFgW8QI2eIbGqt`E3?>pyL;e>f+B zGSOS$I(QAH2trK~R;vIi+zCa`EHv+v{^2KI?@dQbOW@O&1k=(Oce_MIFreme_k@l) zE?hm-vj6W4wR8R(vfa$p<@?|^)rM&K1q9$)(YtYL?%JrlrU~F$b#J2Xkyu9k!mMFH z#f{0EBQ{I}e?GbmeDY`__<&n1_>(t)o7Az8VU)Wz zQ{V3Ara)EGR3M(!`o-)z5WsZxU#vMD9~>8!IC=7~9Q>74FYxa#1Mut)U(lnqjJK ziqD9Q?~vOR^5bvRdVS4$e#G?RX0phi^35k=&{jp*nNkc#T?{_vd6!2#g@0EO6h@kC z_)f>wjHkGCWUF1x;*|(fSR`vdU;jZLt;PCnpCa`cD5OC8-CLdO%VS4;K0nDkaiU|* z=^qdUx!zSpC77M+#@knSsgdcLPy-*^qM%C%((P7v^ah^-3Y>bHzmtnoGw?0m+F_(} z|LnE{uPx^*wpy{1l;(|2T>VarW5#i=#^s~B&;QKbm?|AP8!KR zYUQpx#i+mMAnC1(uy5eWE4^>Y z`wK|zU6aE^O}VyH4-T7goMcZfqTek!&G23on23-Xo1`1G2m#T@%@sjtcRMVq4?@3$ z_dz*@S(ZW@x(7sH+;pX?8z3WM9ZGn+63JzTx`D?kE$DCi(E5I z7xT5(&lm=~g;>S98JiU>mn*H;i`Ikn1rHjTlr~Rz>J21n!Ff2-J{>i9@?^b!x)En1 zlFULP=pPFbx4*hsk8)MTg3u}FyAE0@#F5_awIR)d5cv+qq=PkC_h|1~*A{J3+3kTI zPqpGm<7fVFifVd9RQFt6n2%}50}rm`FNbxbDTK&ckUIcD^l|JF(F3i&LrzR`m5T(T zi*SN+d1g*6t3dh-vFPe zNcQP((dm#7D2>tUh-W>XrfudT+)N{uzoPoTE$YWF@-6|B1yZG4(RD^aH_KLFRi&^V z^H4}~)md*=_eCE2S3cxWlNQ7QYn0-mE9^G~r~(9t=;OVRw>tY*YyEruz)0#N>idBk zN$=0%)Yf=LcS5JQAw9#@!P9?BSzGYxyDM7wBZ4Zhs*XbS!RX_6j60eGCssZOe?|3w zS=4pe`aZ1*M3GI#Y*IY&EKz4vFlWAfRcTrrkhy(wL$tXuG~l~Z=;X{mCvK8ZW+BP_{Zwj5u6bU2Sx za;I7>h?bA&NI{p8_NA{D%MGWPL-BL)a=~HrbzKF5pr#8lg%}Rxv@y+%N0j#A8DE^t z70(%-u)zXLCth^((EIt&d*9eIx4+xmI@`#z6dJDg10SkCmtcjNzD>NyK2Wi5y#2L9 z>t$yL<3La2%7tM_rSwK*v*gq2RSt1}nq%r{X&-d@eBkn1yX&?ValD$W>l1UH8u*`w z>y}{&ug>VHWHF9^ew|EP8PL?R@;3|{ z&KD2djI%OYh!}=&2aTF5#lNEogalDt1VmI9zS;;F84%$rUO3Xf7Ha(e*UVnJe$8z7 zWR)8w$6-tN1^iMU&<1&6&Ti?;%S2EG;5oPFK7A}6R{JywVkFZTM~jEkqUR1aK8)(s zQMzqAEzKhz62wQ^)EuleVZ~1IOnk4TBZ`6@OVg7VGfAjd&EPHfT*q7b zb+)(a?+}<)+m_xd*0y#_EOG#kw8Wl2P)au}=9EUIU%%B8*5W-B6i&D8+J5TSQ9p2} zO^5C4npWt_$%Jhd*Q{s05Y_x6;xEm2jr2A|y6o*JPc=xpHyr3V5+wQY+{ovbWVckd zE#P?LP8XO!5>Cx#^xzCpbYm?SmA#!l?tI1bV*%cBr4a~%-+kKkDC!|{P8}DYO?VZc zp3WRFC9=aZ+tsHHRlK0;A<0>IOWC*@(D8tV>ZBHeISDwQj}3JN{PlyImd2eo&JUPr zs@b^NPMI20iV-kc;4}mLM-FW7`i*Nzz_t0k;n=n5y8=fm8g@-+tmO;exZId;M*!(E zAVO@Bvi%kJ6-B5!ZKk_#I0e~?dl>wm$TSHF0yQ@|mYo$9L<|BMI{yC0rsYmskZZZt zY`^4XsN~&Rp2Kky;%-5q!FZp8<|-WssGFW))>+q?1z~}Ep%=`sok*VyYH&^04F&Ft znD@F0)n_SW2hEifH`$s}&0y_h#(-sWQz)8h1`_;c!QTZO^|cjgj>3z%Qhk9WdSMl5@<~<_P#m1rXOP!2wUc2EXcAf3Wh6zK_kgb;ByC;$#mnA z;T0)E*|bkOGjWMWr0;ZTYmM03=t75mKh1L^$8#ZUp#1z2(?KpbAEP1|xM0uMJutRK zaPSC`Eeh!+mXU~z{%ZrebiMdyo4vPgc>k%GFY2U zPF3$+Q0J?XmhGHri#$v)4=Urz?qzmWdsd6A=2;@^T?KX9Xb~9I1xEU%*^X(Or zHgzs(eNNYUlP^gN-V{IUVO7DHN27%28V6P6V0(orVKqO*RXTOUdF??!!rR86p|&V7 zwP1j8!G6}+7SpFc4CJ*n8-J85YumXFCYh|&&qBIIMc&i1)XvDc;`aS%fM?{Gopxq5 zBvzmvGL>>EV~youQZ(lyc}`^azVe4S^qGS)r{2qLGdwpYY9wl5KypmBq9G`aHdo|- zuje8TZ~^=9^@jzx!-Q?CABI@Vue6fW96md(Qw|&Jz$xp?XpuIPl zj(N!g-9y-On;pzGvnXiti**_J)RP1O(v(0yAVj}Acu+N3tIY1+ zR5GcZ1k`Kn?DUz8#HoM1f(UP(-2FJiX~6|=SvBpp6x)!{zPFM?5)=!Hz{?YgMB+E@ zSp6B5f>I8{x-HizZLlR}PHIk%L-qbR4Zps#F%Gqupw-o4lJB5^f3)nzKSghe*QUN< zCMbdf8g>X9QfTCsiJCLC8*pvx$eDonFiqjOmQ6;214<}~RUeD}{g(MHZlO7Bp!@|~ zaoSMr&ns9|gU~0ty^_WKIut@EbafA6@1Vt070T5EI;9av{#Q%8(kCkfK@brBfnw8{5t=5f5Fb$|U z35Cs6&9xUg5I%RD2CuXzc}*(ArJ}%dnjS4zrbxWj_ugYF!$2%x8COK_xU0kNtlhMZ`9GA5xuJOO|mxW(fT7xk*4L>S^ z%<_#mN^D+h@mE`A1Xu|wFn4%l=_iP<;yj8s8zmc5oVR4RzmY}bmp2yVf_VoD97GKc zaeS*>^)-el`RD_bw%P11J(cg+(V`<|qQ~T+v}HvSf|nxWz^|f(a0zA4Bjjhuv?ur` zPfI3-xJaOIp-Qb}*+KTf-FM9ujIG#oCs)ME)5(`!DTLUl^Ks&j+HOSkyQXzD09kw* zZ_U%4Mm*J%@DZ+SiQK}kWcyp3tNy=1$N!pJhdRSq$^k>dxAek&k;ru#gD(jXN3XVZ z_^jby_Glru=#A!VXs8XoBJ_*ZQH!V=;-tmqOKr_(zTka&d~fID#T0vU|1oEEeCdNr zlFJqI{m`_;!C>*cbO4j$p{|@F?yBx}%ra%<;XZ@wm?4+E{Mw%4_taZX`|!@|@%5u| zratol54{@mrhD6;*l2RF+7-tXXY|~H+rK%EZV^pcna&HcV@Sd89 zUbOU=yfrhK%TT1o5QZiLWuN>`av7$;?{1jJGorY9XPluF~v zROgdcY#+pK4NQaZdtdp0m7b8^Cd;|zUH2x>_`gIY{#>GU)r?+nBklU~ZvySXmj3js zWvX#chj=4g$kN+O>&vvyU%|Y4nkfI27=5e~t)po%8`Rj-zv1=DzQKonD0tsCV@_xX zNqvbPU%1|(6nL;(DVNr!Gg{z+-Qkl3W(RZW*&|w56e+h2F?W2BOz8@ocjLD}nHS7d zbf_(GG?=k>?%*^rEVmHO4AI~U(gO7oPvb>aw{X`_texdJ$lRc1uK#Z`>4Yc5$ z@V_XRn?VjUyCE^R8PtMjUYWY&$_J}2b%}AZ2f241(?lz=kp#5*2tpQ3V^+==P^5*Ftsm}>vZ*pd{L-yC zTd&n(2lVV!#T#K2%Uu7Gpu>2~lzET}7ivW`fXecGVKn|r|H1M8@+i%)TRgawM=lkS zWkir0x=sgm;=IuZf3YNZOg1e+%m`@X`P>&(db5GO#KV2!mOtLnDH1JoGz(A!$7y9& zn_*Xhk_(^<0b7<6-UvvYRaKT@(p*das$Q#O4)@?R{{R6)oT(HgT5&=ti}}PMBZtP~ z-@!=A2Fe=?fx|(-2B2!XE=ZGUMSGa+DwfNRy=JLV%2a`=CMD zD55v-=$_m%j0h{Y>$T*xe-VU#zsQna5wDl05WHY5}e z{9aHg)J|WZjU>JP?zvf2ru0L2)~a^q9f4(oe{(2!CBxQYszJ`_iiIZD5*C1uL7r4596b$UOI;_f5`%C?0;^w>#awp%4Xv^ z`+7~B!|t>_S}&G6a;AIw)(@APZ{Jq=N^cV!+X^(nSQ%x89$ZLe@-(F@I9Uj97A`L7 z!%LSP;8wy`2W(cWwPh)wL&#W)$JHzHoKk}x0Bl|S#Hj-`8z4)51f>gZQxWOM8SqFaTP%20{ak%`9y zq&{8vQcR!A80UFk6^)zK*MsMO=+h~SAdkzFuJIaltZZ-hhcY=&wC3XdQH(n287Tfj(ncEE^wob^L$<((Fp?^!54oOy2R$lBqaAmVC(MX+`%G|Z>K!^AzqS<)W@)~~*U{9%=M!aHtsdEMK z=kfI@Yn7DxPMN_plfNMe_r2mw=#nix z7#|R~%BfYB8|AhTr&4`5PMa`OvAIr5%Y10_XDfTr8_3sDeuD^6W+1n6R>@(r3Th2PU6qD3#R2RaECPEr5?JY&W{2!06G6H;br;z)X;T6MI0@O#j zc7M__jJ=foPe7J`Q!K*Jj$4+W;q=I%J>-FQoUc9JS+Vzbp|he)?>1Zd&)+vi94z%$FFrH1 z4E|&z)Zm6qp6K?PlBfQ?DJF6s2=;DDuWrdPMX2jUQG@;imW>K*wZ9t8H5e^=rT6E2 zgV4ssa6QCjm1f*MbvK~;Rr*o)F;H}pas==^Bb&zS;bV>&;s!4zxxZig^W+tQ9;Mq2 z04s*tAQq4$aq_yV{zV|zgHi!vAZM079LyS%&YA+w4z>SkPSKnHoYem^(si=o5IC#$ zyTenTa&gPFI7Q~pBzj2irn5AR-Md<7L}))^vtV^zhkw(>?f&66%~qPG=-G?*4a5-S zdBkL7O3--xw+=_SBi>^2FvkcshXLz}=T`Q2u}o=_V`Pk^bU2STg6YbodXbK|9Y4qX z6@7aq?9&rd{LfRMaaRjEYvgjJ{m4Q{7eQsWOCELgqGqRQ6{YZEuyR)D!c3CS>tsah zghKYO%OXM3COjXUvfE$P(qrSu<2_U?$qgtG-BLs3#&NY2aI zZ3~87rZ;W_?UYZ4!j4OP-lQCFb)ouNPCe7Go8(2!AA^f0cWIK9o>6a2E0QJ#acAQD zPIwj`{*t8$OM7LkYT?gWYI5vLjm+xX=$Wqr8xOSeYn_wtT(-X#9>oyX})2 zZAGmBFT!8~cpYArp1fePlm&H2)BLz(I@9q~v~tk@y0ZMV*`kxsj=Y@Tr-+jM9!V+) zSr)tahxN>=VwO~)5IzOt!=sYvy3Tm68Q!h_F`r#M?_1z6dG5b)?jqRfz0lAa7I>5a z7be56NRrrMQpn}~W9B;@d&DJtUJ^u@RG>;)d{jVOX(JX+Sf^+F67hOPTUQ@-`pt@~ zru@c0d^ycW5m_yn_lMUA1hn@G%uSLxSGaO4XN(VCwjfJ}3m|@qiEn|j&e)MMDZ7+J z>z`f1OkS`o&XPyl0w3bsXkpB}pdP+BSV3|)lmTGI|1wZT<1O^Xl6as-K}JcH@_SS+L;6y0QnYbdvhfN3cn{8Tm>xF7>sLyphl0Z53j z9?h+E^ab{D{}2hw86vp|QBgEO^JuH-1v=oRXcpKA_t};A%LFi&i>L7(%x3^L^V4mv z>RgG*eC@C7Rjev8f}P2ZGabW3NH!DUk`c;k$E+D8v}=|ualv@!$g+ptNKY5%Wr?R} zf$I0bE^X6f*=o?xHZ7WPRj80kOPWR57*iFt8#ZJm@izGl19>_&#_Of`q&bD$ zC9Pyp!ykmVur;W?d#@+SVl1YS1)^d^#&7rvRta{vfj(@aK+-k?Hg!zr z%*(6dro(`>vb)XzIRee0cjB@oozA_VoiO(QJR~I<=CS<$HSp!GY&dbOlAvWER6GG*}(avBBL*lMv#e@7lCx3T_SK0 z`xW=JdGR%I)68$$l3?BEY#_I>5F;LzNvMu`(>2Cv0XulSs$Ce44(6SGl~5<6B;3yZ zG1!7y_HD=ULxiuR)O&uGby21BE1)M4lUg8{q`M&E1}{{9HQ4Hy2PkwhfoFY!7{T*) z#;`FfO?^0Ni=v#r=tNO$4$BeQV;cjjutgVC4d zLB)RA`mH&zl((Kpy~biWpfpI_P&a7e2lU+A9(X!{R^E0|Pxz&Vj*XwCTNv91dT$Qf zEy&Q`hN79SBu*|~re?YXdMvTk%8nK6jWgG(@OPa$kb+uy(BAq07pr-g)N@epB_d8u+Y)8#4>GdA*K@CgIt03;YEIs6{FWLUlCOFps6CwMyX)+J zIhVLO`i-C4&8?0#Y<+ghcl3%CifEPhYExM1xz=Zv(mT0k+FF-4J}SFO|IN^;o1Azt zLp^NTA^pZh-%Cow1I+b-m-C;t^U7EF4O`Fq#HU|~8h`mPa;s_GBy5y?=Z>YCx|5!BHiSEfUu9yJlp)2UJih!K(1AiyHtWLUwXQtPoCEmEFgNj(04iP8b!PjJpGaS-*4*Ni0DJ5u%#fpE$79U|Wa{c{UQ=!GIq>0f z>`V^^#<8Mltn`2v7|s}}9r+$_2?yRuJ|ttvD7a=#nCSl@?!BX$%)b87aa0f$P*FN$ zlu=X!j8X$6qmD326OkfS5~X(t5+FoGDbhq#kWf^lmw*sDiL`{?0)*a4fY3vL&~hJV z-rx6~cip@0x_7PLUH2dU;Ow0JoU=dsJm>8FdG>j?@)!-21=-EDD+@gVtTVIy9M!pD z;?nRGuhhzjPv@{`pHQBwo8#5CdW3}HXzZ;Qjr_Oww3)>C`miV!Q6@51p z(=9)6O(@WYRg$TJ-se%eARuq4IN}rVipTD>(0A7F6_eO7MSk(xb8-B@|EOm|&W=|| z=~(zS+$;SNWig4hYMS;C>FErw{ENI6D_ywxwZC?PD!P49=8_oZ@=_zy@(6PvG0yDW zA`hP@U)=bX0XsT8_iogirDDveIcJ?7=*sHEY-mjfL3OVY7DbJC_sJhu(DT|tUhz}YqNfN|2?4rqPUGHwfy%a&@y*Z}v#?PLGxR+4PBHzkA{+rtvG zpRUb615UaphB|p;fYrtXa}la|kN?>L1+-V&XM$##*uA^Le=|;CpBpp5ZA|2hZRxGF zI_-#VNvb6#O5WJ9KA>|PSObWdd`Z8#N#CZqicYlaUT6xnn%0+#8HGNZdyd(9ZZghF z9Lv3NS4RJt9z)@Xv5DVa1BGYNpbskvMvKm{?}#pN?J-zWjnS7nvICZ%)& z`|^bY$TJk+G`XYoQ(#4RJC{QQxVG05~EA5jFEe;BPw0BI(t#KmvQbK^)z`1&U z?vdSs1ZUsqie=QAwx4*Z_WYalgS*#b@>O56*Zn^DU(48Q=ufgTPY@LU9s13)7Wj-y z!Z5G@a>xE$!~Ll{FPnY#FR-$MH_UqQ(T(c;{*m7{>zpTkyDMU|p1L)TYlO(BM%kt} zip!7&FHBZ0RZ`D9=K(5r^Dyy1DN-GFxMfZ!Abt*3*JKXf&fx(Z%cpU*{t$;VxXb6; z{O0TKrF$K!D`%cIt8(A^}jm{-F4~9s#orL0(D<_v^9@D z3m+%yu{54{^j2+kR1c!7i29|Iy2w7&%*x7@JRlTtUhY|@jl0f6@`G5!-Ny&DT%I90ukJ?uYu?EiE3o4ySp@fIhua_PQc=x`4-$l-cl^@oG29x zuP!Z_$-$u|PK;dAS<5<{k$*)WC%kSrtN^8kh?~vjUZ+I~vxVb;fow>TR8$-A%VD+B z`rsueE0T?ombL6om*-w=?ISU-UlEA>nXX@Pb*HGPKMC-OuVDQK6@4?$J}M#lsH;GR zZ|@-l!sQxog#B~>4lwaf9)S-;E3Z)UHVv)^p$L&=Mi`X-i>Xm#h3Wl6K8cL{5}Pipb;>qO6oNnz%vK?f0cDDchMSmiNquS(!js-CUQfl@k2MlYPh}LvS4e8 z@DAJS-3aIR|67#{>;=IfEwUB6ufF}7x z?c*lRsxIvxVme_X9%Re;Z*ltf>kS5m4NWE|!3v&Iq>Ao;Lta?SNh(y(_gshy2|&}E^C6n94W_Wa{l@9=KYruj z)IyO7+3Qt`>cpQ972LTRiIUQUl70^n7Tpg6>+yNytHD>B4Rv-C<2_9Kx=kXWCE}Q; z*ZW9GfPR^O^dlt!M<};%699L_eY9ZVafqPdSN}Yr*gq0r*Z(}>jzhDN^{$y%xo*Og z0k@91VTu)aCbQHbpnzAkq|3ynO$@vaz65}DPAk&GGt6o9bg+I3e27{dS)UV4Fx&Vt zyDb%*twcMLp-YY!`T1KVT5nO%m)JY4!m^&Rx%y-)^E@>KtGb|<)5SLnsw4EFY65Zg1oQFuy5&+;+Fjr$U=4+ z%kRyU=P3J?cmc5DPu+CFGwe^tDN1=*ZgezuZ)21(T ziRa(X^w`Yq3;1V(=)PftbNFfhlv1EV4P9~5yvQX=HhFuw+z1=@-=Z>wA--;-q=H-5tBuKnWfuax=Ci4V1I^WF7N^nT?#x_b zCLh`8#O%w!mc%}>RbTEt7=G;Y{g`NAk?&k5CWT;2#un#SueZ#L=d#B9m+vW$dK(Ve zPe+O8V4Wx$W3N1_U7Z1-7rByLW(J(>M-#L7#Cugvxp+s7Geni=H5>gR7uYa2@*xQh zc6#r~&0gh6>ZKBaGR+wn;!dqTl>O9iW-?S_*k`Wm6`hw+d+A58b6o2&e}SpG6LLDc zOGN7jF{1I)iq8(yZ>be6rrXr-v3?Z``e+IdfB1dop>_s}c);?WWYaT&%;4oo-EV_- zsWlDV-HdG^wKZ<0ty5*Ok=8+K!9kqcnU|Q=FQMN=?2=;N5?$rXCvI=eB=o)w$T!YjB!Z00NP19m)IDR!G-AY={ zaQDwQ?~>F8EvjG_S5Vol7>IKk`Id_{G^z$(d!~IV`%zH^EL^VBf6d1Ntv7XhfE|P0 zcdH~P79Nb)AxFBAoT&LVY=4nSo~zz|cuWCn1sSbddC*oIy=(LdLxF6*>C1P(Or<&P zGaN-Nr?)Br-Ic0Fjo9^#H%3vE@qsxrPGzMgb-Sj(Bd*}@K9V^DM2_MpLe~_tTnt&B ztK^V2wsjc;GRDf82Mt=(oh=CYk|l=rn7p6UMs$$yZ(Qgvfvv?_avBBA8k zRAt+u$+c=ZiHl!y5$t&>(SE9=ZoPGolrBRN9XBiMh1`=YG3N1)ANX2oFwt(5=t7>b-Xgjb{zt3lsiut(?!$CLZ*4&nF;awBxP(P{Z3W*v3RjznK#R zgcz6_faoRnTkVPPWbb$0+wy$cjDj+Qolvx@cO03mx8si{0*9}0!Pf#Jf7W9Gb6Zv3wCD)zP zry)(ax`n|}%kP<#W&8~UT<(=yk92Mr-Hh9;^u>-wloLaY349xpAp{BqG z-REnnN)OAgb ztQHc~%xGziLpy)&pQc{eJ)IeYzX;M;cR0id*NCK4R$D~%YaCUNsa=b$dTnU;MM-ky z9xb#*nJ`E+cr3mC5X9ctHKpt}!y0`rS}jXoS#VEE8xE=Q6w@K?7m8xvt$@};zh0%` z1G4g8+>iLoZ)Cc~oVm*GJ=~y_B#+i$p7{;Ns)!~`8|a_VSbsFX*W5@g*Qq@=_PIMZ|#7L`)9QbX5Y`7-Q67xQWgZIpjO-QO&ez_8QfTfmC^Yz&@%0S3GX z9M0?t=JZhutv@D?N#57B)CfbMH3RlM{PywG0L#MKL)cf|qg~cp!wl7fbab%*!6n>m z{Ykg)D-HD2Ol}_(RS@TNpU-2bB(kdGrBUfsE)6j%*lZ&5N_-LY_6ayckCfRJ6B>N`El=q9#yZ;3aQ@awR>CD|!2q@!w}6=}@8&J~ei+D7@8Y`GqQ zr&uBMf-sJWND45U>OO-jo)N$?PgC)eW;e!OU6Ec0>vohRJ?TChfl9pYm~9{j9)g@y z5v5)kf?QkwsxL8(42+D^*H$;1LVgUGLPDo1l`OPL*z2=@N`TGU>xHk0F(L(hBWrPQ zuEe9)7XYx9s>EE1G;@5f4GiLNGzpUSpHWK{;63Dijx-zsFG&mqn<_NIQ~oWBeDj}i zgQjOFXJS73CSOebISB>4)OY_HXe-d|QAxyVF1+PgYBdDpkuTek#*_9@boLCO?nPQr zhdraPDFTX&q_V@DT#`;q>n3=9jTX+Q*_;&A1s2eM$pS9%pC|mEb}4YG$3Ly+G1Til zoz|xwS^M>hAXCAn_hFg^yaXxiu25k3A5-iJOQ(MH{g1~YUCRG9>Hiw2Qoo4os&KIN zIYYVKnZBQo>5NHx&};wrC7nme+~2_(CrCz(u7Il`&K9lFrArsl9qs` ztYXVWK;0oNMDl;5<1}?hMd;sVO@xE>|0O#Ox%;0djPY2-?8T+-gloiGvtci4N)HDH zd?s%W*%8SAFe$qOKrA5Veetiw7>Zt}kg@m&s%)jWiH`lgF%$YKj%4 zDw&Rtg_hy>8VEBh{{BnTD^*`fH}%vS8Haqjf?#svRgmTFxSm2AwuZlRwb_#(HoAst z=EaK>yI{p{x+Ft7P_;{5UTNkBLDeNTnNmaSbAAg6Wq^IDzgr)+itpcbiZQ97Ow|YPo)YKghPE*9F9eKg+U*{T~DNn zuAa_}2Jn}(ng&6{6X@4dk6Tem4jyF;K)7FPRwc7@AcnMye8_0Qj3c}*=eX^u{h#+A(z`VVkROb zNWJ1Kh_`&`(eSHVUPCK^@$Sy+Z)6JIf3$QR^wgofXitiv+-SX)Y;5)HoSN~@f%mSp zo4$4G3d5m>)zAF$SY|s$eebWzrBZW>jL(sq(d{XoEmtU?YlHWH|AeA_%De`AK$+r* zz${Atam}Ry-yh>5(3nls=&QI>Cblr{Xm~uIxp=eln^QqW|DCGk(p>a#+qa8tL#Ll~ z0PHUHQSWJ8;AjdJR~+|il`XB9)q|6DH_r&yJY$1WRLcV0trXy|E{!v|Ce5Y0U!J zXLNALH7W4s+MfdHgY*PSU`4r(*&y^9j(P`a!Qap&9RscS5zjqKThXHxJ1N(ZC&l?~jp+ZxW6tzV31sJyn-^B>FKZ11aMC7H zFOr?OKjjY_ens{_Ek-V=TCUvKpmcuY?CnbF-(=4i4ye;McyCgMnJ;Bw7|*eq%`vr6 z2h>Uh-3k`YRW^C@X4~6-tLMoji{D!xJ}i*<)iZeg{fZ*dc z8*WP(LF&yRVAnoHFdta&<{d4n ztTsxZML`->1h0|5UX))zj?H92*HyWY8#YGzslEc5d@kaKcwJ#uVUn_}*Pj~nFUBmO zzotz7RqMjm#xjUwAz1^XGJM#i=bxmKQ5ILnhX_6nA z8PB4#sHnKKohG_4&~5}AnSeM^iHA;~l1*>D=U7SGX;xCGS)Ue^{97vY8u^J1Fer9O z&K(`RQNn_X^+IKB)0ceFU=;THf=zSgtoT>Sa`+5I6H5N9N51gi+FeO@avgWjOT~f> z3+u)9sb9?_6{-}SJ@nI19oUbmU#;l6(F;-a%I2G1tZrR?)q;|GQN8V1onI=MI99Y3 z__=3C=+R8UwrQw_ro!48vgfcpGe(|P$ z*;ez=I4rqktabEh9Is_e`=9}U75v{Srt{Ls=!&H*ifLE~6 z{^s+{$IdYdO=Fb(1A>2g701V|F64s3Ol54*KZX!=tN~1p=Z2K{v!Zveq!}=Aq|hrUuQ=% z(+k8R#fNgh31vThG{CIm{6dh7Ce#HGU+}&L7p17@oR0_Nb5?8vXjAIFRH)OfJUO>> z8K^WpaP-mEBKzhDzhq_A9BR@~rXC_k%Yy7!r=Zo_O+{UX(JpF2Wl?4V<$za{Y@|S7 zh4tcikSZ4<$EB_*(?|lIlVA6U%zjAa1(vWr;kKVx)`rT`PqBWS14?54T;d>t;3x;l zzPGIjW_{0ZLcKgB7o1Y@zZu7u9j8QN?Y zFjKFhK_LV6=#Cr$a1BNjWT(&!_J6VHK-@eZ=|eezZD98)E--!g4wkUmtbFS3hk{*M z+@A1n!YNwU+qIMT8L~IuRBx#Ms()mv`7d@c`>&K|Gjv0n#YX~a=LDxqyj5@wW)oTx z0pnqZocs#P$dmC%GdY=p_N@m632Rw0=mN_uZWa;-)tam}3(O_6==TK!!BE=e;wA>d zG{U7&u|SP_m>RVu>V8#tdjC(TizNS>k*|CPo+sXjk?c_}3G%esjq8f*OmCJXy*h$n zv}%snd3{~uf^T8&%K*Kmr!duHLTz8SEj$Z?P`C2BW=~kqqAIHk0!#I>wIus*MYP{# zOOiK5jX$6oFS4BOK`&?VPk*6H3x?lV!Q5K17wN?RR<_;XBB`Ppw(D8gcdb(?<}ewJ zX*xk&ruR)%LdK7iGeD^|5(toIbL;q_`DMT=VDjkjHe!4o&dMtb96P%)bwWOoCNgfC77+P-Fg<=Sl;w7{e&B5o z{}kWeLv#n}aWYk+Y~&f2Eo=5@Yj3iIA5S<-EL7;*&rv z5b9|iH(SWU{`^x}F{m@9o>y5#XnHc7UFq^mUFS_7-Hc>gQJjbt%BhNTz@0}bUK0Gy z?=J)iFco9G2KEyh6bEv$k7E^d`@vptX|#$gH|T|3eKnZBBUP~InF}Qro=yr3?- zv+51vPoBQB>D+b{V>>(%#J`7u6Mg;nqb5sjoRo%vTAO{ld6XDcny|H6p4gC@Pt90S z)Ja_R`c_GOwAz5E*(Q!#>9~WG5O_((Zgrw|J}fQT(Hv1AqA&+@7W>^- z9?m;hIKOaaIP1@onn8pHAENWYXy&bFzr${O2f%MflHmG zMJZxh^&%mAt5SO`(u!3sH-nAi=RCvmgP5rRTaK#Cd;zN?IGpH2wFz~)RqH+ER@-Zz zoKGt5_|9vA+qt9}Ne;oQFO^UP^m1<3+csf_7z#=~6G%ATtzcPEpG|u|s}7cSehMTe z#|IQ$lG_kRhUd25a3%s9NtxM;_!qolX>wIF?-a)0p5NrEOF3E9=g)g++di0!cO4WN zZhG41B!BND^4H%U-3e(knVPx&g4f#gj z*ut-?Gw`DxY~S1Zjag~g|G^YeR;lJ-DD~;P@S08F_*Z{1iJKnf ze+GL6-0xgWr(TAOPkUFnf*wZ!>Q=Bo;b!*iUcmV;g$9|czSB|hfganFl2fAfU%0@| zPxmtSMWXP@X<0(z77VGSPKDk%lU!5GNaogO`jhb=KBhgoE?q{7mRLRC8BJ@} z8wYFEIc1yEF(Y$Mt^fr`e4}XWN5yhUWcQ|)mYi2N?z=8N2v@!-CFmss@NSfS4iK9= zm_90Tek^k9XAdhbfB%ZSu@mz%OUT7Y1BAJ(v7SJ9eFIwL!!mH3 z1WBTUizfM}ihmUS^Ov{)oL7Md>LlWJc4E*6%(9_1w@ZUmR(IfDv1-l-fRnJBGmb&{ z9U%PnGW?~+5V2zDnzFMLf+zeS3|WU=H+EP%p9tDp<=}bK7%>6->Z=dxNMak|liH(_ z{);@Eul)|0$^EQ`C*Ah=OQfVO`WH*BCEL ztx}o)X1EtYf5F%uaQ9xjEA*R1X_WHN4;8isD^+}(q6EFCC9yB#4`b@6McEH2RH3^U zoN%*Siydm5tp1@8|#*BA`}WEzW?^1gcqfv|5QOYxf`uN4V+S2Mrt^q%oW zjqJ({*1KYwXl^F5|8c8jk^<{s7vu}`Ow-r62Bdf16n84pb||+6z>ZI(G9c^1Y1YrM zj)$#1mb9+Xj0-lUa1N5E4P6>kOe7+}eT{^5z+^w$9DmN4Q=(SGBQbD?5gD$7EE<0= z4bO=ZCNHdPw@~*MWeWbW)#&=8PJ$yI1e_*}D~6=?hD)MPr*SF4IVMyh(6^Wxr~h~Z zex9|XJR5H6w82T)#m!fQv#%EHhs_WDd2Qjn7}XSqXsGOqC0lIdI*SL3_KJi1v~-X& zU`=9+Qa%y69VO9P}g{f>0R~~3fWIl5*KC=FU zyQ65k;@T5?1M8h_f5-Up82aFwfO4%i6Ako{SdqZq^G9uuBr$)Gj_fqq@o|Gs_|R^` zly8)HH)_7|v_R}|dX3B@;~0yPyCk09Sv`>}%oSp^Ut}ak;DS8u7Kk;0852w5_O?eQ zI}?P*accdi{p$Dp;G;{hdUad=3cB3Gc;H+WU)p9F8T%ohd`aSQ+g)PMS7E0t6Z82K z9W3L#MWLx4x1RYw>L~6eC>`_lH%78(b7h6?iez(syf#{3-Eu*C=r=g(?QtmMTW8hbvvhNhgyZhJc50E-l>kN+-VdCzrVU&@6)&>q zHSYV_7Avt>TpRw!51Ztbe)y*KnE3mA#v4eroKCyaZkF82@GXgtEj_oa)sL>17j*h| z*rlDF{s_H)xHHjO%=?YU?jmRHWi3cLYUSyv{g=0lO6s0Sh-g{@ksxVgm$E>;}szFKm9Iy1*dCl{^FQT;UWg2u3zvc>YG7NEcDJtT2 z@l$g_NT@||W!`zhJOx#WlFH~*+p-`Feb?0x8wkI!U8tlK0g%NVHlvgV-g?cRGuhTm z@|4Y!3@8_eVciI*osj%1BocRX=lAKxB7+Hlmh|eGt&6todY4xBz*k( z^-*sM`<_VFX=%eJhhOlzX0Gp5xTKw8*c{ABMVqRcYA~f357FBr(Us0nuQVam6vPw*0txa53k;+Jz~w|Jy!1K z{+0AB-YU`E4eB6f;QsxdI{PTgQ_f6nS#{6eP)-Ry8em8WMYZU+c?~&avhk#5{qgS< zlbl3a@0wJ6g$O-y@@&fPN)=V_ab*kDC)o{W0xUZ8n# zna4}m6fS^@!AL1_ifV@{4>xQ2YP=Av#0+ssCGEV@)dXls=)`uVOj-O!PYQ@%m><%+ zJ(~Rd-iaXtR-7)hBK5|RlVaKh6|_ztV%`&Jh7Nst@WC_0=(9f{Z*JWYu{ta*jQLef z!lC{ZrG50GaNRp8m1+yE+YAe z7Gxe z)iDLtd&kF5y*3=R@|#ar@LiqoOwU=ypScEMr#Qzv3^n}V&WWrG;$Ndm&pROkY!a5Tz=`Z{Z%!t8DbSmxep_ z`aOUi8#e7>IVTehBd6dMxA#}%*RQ8IF^5w3ou!l9zs7{>e(?`j@pk~YOgxytY4h5A_D`{0S$+NJRmYNU&Ms*JyFG*&CXz6>gtCFuu6df#-rx*zB z2Z>tKdl-<-97<95ilROs0xNjFQG53!!U0%c_nWdQS8!C+2GEQc?dFd6%Ii7J!0CCh zATd@*h)10n;eiG0t{VzU52@z%IaUdF{;|mOoRAL?Sd)zd9oe~>F0hnqT(ziAlbWRR$Vv(I+Y})8rj|7 z*ZqxR@w4%cH5M+aWnGkI=$hoVQR|Y(4NR-4VeehcXA)Jh3*V!%^QOqw^DH9LxF}01 z)VLzDTT{pDZe-%s6U(cUZbR`IEkcVT;DRm0rsU(uTFeq_(m`ZeUw!S*loauSN=TT4 zhNk>F{dr^pcalC-B=&%r%GnSBSsx3R9}w>(Y#>8KGPb-=$ds?-#l1u9vf#=i9tGYqoT$mR=u-oY#JD?Wm)~ zcqm65GxaLzRRvoyErwlUtf5wW3Mw;BtVMRhm zIu*HSl!-_icS-@k5@@k97aSo>>d}-0@5CBr8d~9)b3ik>GL2u3ZkjIDZ=FnAKuXpu zcrTg)Ae|M@^={b7y|dJ2`9Yb~WS2C}f)L6y4Addp@Pow4EiHoM* zj21#mARa~IDi#(17wy-{hevk*^tZ07@qpXIB^!YV7J!VPD2BxTI{_F~u!k)FHiUmC&xDEMtFAVEs~$7^HejOn(*LRjfDwF`Y6`fF z36w1hNS#T5#qi*5OXwu|UO{W1?QZprSNBRL2b_b|394kSmRvXsE*)L1G~;*e z(M&UB^_oq#jQd}zl6sqmF78-q1^#Hh-DJ{OZ+jjWjC#q(FfY*ez?IDg1>5$^csPmr z4s1U?mGU?+i+`cx(N@H~n1It$e&~b17Y&$2Xj}i(i^5_aW#qx3M{~ysaS12D<|1Ri zTV1@$0?pu4f&$KTJ^%b;09RMpcdKgk!iiyS>XMLLKao+O)~fnTz4D;CJ7+&S|9eZz zv2*P-TaDD`V7sI`j|!KuAA2U|=%|uG8aAEBh4PCi^hZsfu{oQ2@Jm&llJIBQikWu_ zS)7T(3uelCUO(Raf|>oWcS5?{e!Gxux83;Grd5`B8(ZKp`kPYwHJ=-;oqW&%<#X36 z=PvMI)4SwqW*)*m9L0wE3?fa`khXlCQL3_)b6*{#cHLo@q69vky2E5x4zOGh-O47` zqskIC#jSNGun8W-`pz18!JK!|}1ErflDc}=-eXk&{|+keFb zuCjbEcRh4}b6kE>EaZj$6X`E`-&?Lagi83hkLs2V9wlBrtQ6(p{)TV8U1Q5al9D7S zhnPz`X3oBtfTz<17}V6rUqVke@#C7 zDh{=Jf!KTrTWP@@c_OBl61Z?>{7Grl0Soh$b;qcMIUOGjSSiY05g#wtMuWHLBhGvL% zMau7SI#Z(JhcG|%1K;T@f=5yG6qAL3(FpYjxl&V6hR9J|H$;D+wP*pt#clSoje9-(r?wh{dv;tPN*u;QLNIc&~R9Vb96Q1Wg}S9stov6 zBwzy@fY{!P>Lt}@dncUJXJxkp@5K!(9_7c9&15@09INyn?T5rxN>W z)|Cmd#+ELM7|S}*{F3z+fS&o0sjA_+rCGh1r0n8U-EVe5kRBlr?MfI_x-ukgQoNRt z?34KLxZJ@=J-%Mu{rlMz(6gIKP6Et#0@K|vPBpU!xZj8~!43P%Zon3tR8m&$QawDp ztW|v}&8Ap*O4tdApXxB%ZpIL85tOcX+OqSQK5{izs zQlX+GAUx@zpUboGW_E!Ykc(vV9tJBQ#in{B875;C&j?V=7n zsMlp2Rvl=29Ama56N>srV~%&&yn5Hl%*~kf%4WlKhON3pX2CdPJ1^TYKlkT0F_Xy9 zm-Q^d8Sl1C4u~EuThLN9f;3De`mBG_LXFO3Q_fo{Qgej8x~|$S?(L2pt}L}E7N#)5 z0;N+???V%Ij8Hk=M%7m98xW{d&+aksm^Q%XO4UX7W*v3`r;RnS)sG)l1|+sPG#nk@xurHV!!$^|C9*8#fO=SaN54_=+- z2TQ1t2sw;SMG-a3UdFYu?)^Q6ZM84D#CX$2N`7a?F{vnrZe|3ewq_gXDZrrKB(mZ{YNfqmr~B>&a!^O?Nv%8 zBQLrCv41`k;BDpg0n86dsV#v`@2F}W0GNI$A-w+0XiNVEjac=!^``<9OsmPr%}<%^ zkgRwhkWF~IM!iUrKutUZTbF#kQPwmBH{~xacQqn-4u&qh54D&DlSKO*LFzlb_9smN z2m*j`&@f^~sW9!U|AvdIG9HL;GVSvmmkq4b@95CMmGtp;-y&$oo$1lGG`&z?3z-5t zfTVspO*0>$kRq;zf@xWGa7oWB18p5ea0X+bo%KWx$SMMsgh)(5+;)t>w9iJ-9auE& zLh47zcJe~Bir0T>``-)Bp7Wu!c@nOL!q{#z!uK12*Bw4k##xzy6$2)K@!XxGg3MWI zNmnJ{)_trk{QPx{c~U7Ws51mPJx)Arn7Rc9_H_Z9Uy5?M5UIHI_DtN5Ed~$Q&O~K< z_1-ZFHkA5b-?Sje zQPAEP_Sa)o(U(c$Wl-z4>p8)p#|u}u_tqxi;>*6jTFvfO|8S}Yud1LZap4x!kh1Lr z9m$bn8VbboJD+|L5+aJ%UJ+N}os-+$e6OqQ;u8IX=hWWCuKO}LIE%e7bK)$iu30Ws zka&H_y`Hy4WCzqP!RP#-~qtQTJ^ z|H?Mef%eMHx7Gow4`X?owLu%AHz$JmD;t}|Zi++cL^nsT%;e7K;fq_aRMcVJt0w25fT(2&t^|=I}TaXsoXD>GV4pVK}i5Lix ztC5^&M_{Gg-?d=t$L;G&xccnXH^&Pp-}E2{+n&Xw2Wr_4SBI<9mw>NNH`>+0ma4|L z_K#d^%-w-xUR5U*W-}27Q=B|-RX=3=?O`qc;L*=Dw&+_rqO@<)V?`D-2KudI|BmK%-32dIN`VA$_ zNO935@_6S5Ymir@+xxog`v42hQjB-HF(grG&^vCUH%@>19;ANB`$E#p%?Ouosx;su zIIYcqR0q*D)EE1*Hi;2$!CL2w=Quxb)K6l z?zEro0N+|Uu}_J4S(VZEhu!FLy}v+Ru{XNi{e<*95Yv0yyrNHW zNM<@c#sA~m;i~2G`X$G4i*_Yt-R_XuTe=bQgz{8JWT?m5-k*BTl@0SQH;1xK29Bv* z6;s+8Y^SbS(Y?6G69tE_mYzPgB}C^J&!iX07M~=v=GPn|UvXI(@+!`D=zvJ7m{=o` zmCHj;NjH);xRvmRMJ1D+=>jpZ+B@b$q*B$TvpL@f_tqBMF_8G~z~_arUdM+YyeV=| zwXqB(9)zG6K167EHfz@B?mGMb~Zet{{swgTEwrqOKZ0Z)RlE z61CqXZ6zdKU`(cNH*IiVurtyyojzzgr+UHKDZeg<^z7O?z^GmhuT)v*Jwk%mAP+=A zpAP<*$;-)%XIRH)UX32evf}u5&H@4ZGyRR>xqWMj&>Q5yWsDL$5wP`e z>i_6WUw#W?A(oFno+}z()UB|2o>^IhR}p?$KuUp5v{!&;?l0hiD*CR?v}XWU%QSGK0_ zI~CNN2YC5=V@cdIw{XN)S|}509(88_ajq*_I4sEs5%c#aghr!6`=|rnh8oBz)m++O z>pqC8`QMl@a5Kt{2v$3l(EpkFAL!Ira4OY}JQ_4vJ7j-NYR>W8+!Jd}(q(db7WvV* zwb*%nU<&;-`&hV^QC;Upk+4%veW^+NlRm|lCQbrPMI2l{hLwwPvOOJ&BQ}St=v}Ha zE52KeOO=Y87V!4VA1OP1PHUL}Wj-37O6A`cdKIs9L(u%}!p8Qx4~_^=x@6fFsy;O2 zj=hbQXBgmGzkQUm3mvz@H7>1xz>p@!Uo~1-bXS%%zN4|)2EPlU9q&K#Uh-}JLq%C4 zwW#if+p&08Yw^Rw!p}PDgzHs&3pFRcD$*-9%iBXo-1d7K5Sga*uM94d%PZkic< z*u%2|TGmHcNAnYs=M5ksMd7qu%bhVEVfK&JTMo`=>&l2H zi`!3aPsk5hJ|CO+5>cT4HXb%{OZ~~UyhAig1?Sth0$%bEJ|67E6W=S&sp!4#fNb9d zlC84Dy5sW|cBw3W+;qI|b~;6>wDxGTkTpD9p+55Fc1XMy2>os3^2T+gM%R+1=t4lHO3PAIEC?dK1uLis zk%b7-BB0Wn5D1VE6&2|!Do9C01f+xX8Wlq5p@$wwFaZLD5JG^EzuT4e0BdmHpG)SMgIy;wy^a<-)m~u+^wT*HyyK_l3)Xa zSjESAOUQ4fB`LVB_TxR(WSrqyq!h|{AhltsKF%Nho0zelfIpudycVMpX6)eG1WN(XJ7C#2cZE`9gWQiLv9ks4d3BPa^7FmM+@;_eV{uT#Tz~M8deTOMwDs7& zlX`)3)eipb!GwVAKA^t%9w7vjJuzaCv zSX$Wo4@lN;fp%U2*q?^|`OYF5%13PKlvW5*Alq22#|1BQruFXyPNlPQnJz?F`?kSOE>$+AY)N<$>6Tq$GMvyFW^czDII zHdxNmdVfl#e)rbB z!2 z!RL3LaV8lB5t28mC8(>kJ+xgBi>LB7VJ)Y;^`^cQyI34}Tm>3=b$N?_58wu=^mR>t z#*BKA0GDwNhz#HO;66YQGdTCF2x^1c(Vgh)ofncBvY5}$C8#HX$92VKwMvgKO)I&o zxGY@1ruGGXA=9Q9=o{f18;G{qdU-JktS@J)+9u@&l1`Yk)c?La8Yo@$u!3Mx7lEjI zk!4=s{OBUNwV|pg>oh>^6(o90ysE6tPNrPe%(!*bJz*}Sb01i5ZqOb5B@crB=QqiT zlmx#**up3*@MrKKP44zj1@?bq1sc8bQqlM^R%Gx{nLVwiUw9L3wL#?ir9-OH5CrtviEi+j!RC2?o+(j$lKt<3iGZQ1-%2U@)zvBaTEyQI^s zXu?sbgInM%c;Yzd_sDiirf(S6(2=h&?FLBXiNL0b?(d}qQ0A2e(h{0gt<6#L4`T&zo?p(+vXn*N6+aK1aVn&I@)w(XVe0n`` zN~Lz@6$B)Gc5y+%S`kQx3@>PjDLOc1z-!)X1A-p$EqOARB|RcbKPpZ65-rOudi_hQ z!hlx0CD`j7|NI6v5ZKu7TcxJhpjMLMx9u2JfM|UsjC`b3B1-|KFdA~SvXN@DAi-vI z$|VJ;ngJ~%2yWSSuPahkoO0;$(ajBPO?_JXKSODVYsl|*0_ACg-HJK)zqqMwmu-eE z=DQn-D^Wq`q2c6?yh&kG(dOHJWLG!Q3-<`v)l2pdKjiR&l=3no@8n;MHYlQO(~Ie& z5e(F=HkAtXFNS8iMH{edd({6a{=+tCmP*_gCYQJ`8kwQ`6l*acoDB8~$|({?&RvKL-~NX1 z(*dt(s0ZEytF$~$38Y6fUBrj|mE>Qo;Xu_^TSt=HZC=?MbQ7Omjm)@l2^8F2yN=}N zs>Yg4+O}T)Kpb#8IrN(K+Wkn9rh1?qNy|DOfE0^`-4YHM4s*t!BEX5lnHDX$p{-An zFc-(l5w^ODLn7WAx5b4$Z{vFtDf(|%VFO3sapHu%J|xRhR+UYAQ_KD>ZQi3P)>W_M zIa)N-2zy_l;;h(ns2dpbCsZ$|a7f>*^5n{Kg(A z{XC)MbA$O%FR_X_`S8`D0~_dD?%>|GQ!FXOnuop`&-v_%OQ~?p*~M1Db9R%*O3h+7 z+`rj>&9f_o1y^X{9-7d8S{0_bQmR!A-i-HezW3!Y@qCSANt{(9E(jDJ@uD8Gv8kr@ zK&ePUTlm%M3pr<>)!M~2l#JHlYl(Lx-_aG0Cq-tjJP~FuW6qTN^vKBUT67iFYpL;(=rY>4$Ug3) z*;hx)NNz3@7r42#zB+Pw&GZOG-A`q&g)eDx7f)H-Bm*caiC$l6VC0C$Li^5EEIs01 zxhHCW4D;8)^aAo_QbEH{YWkp*t>cHyEJW$lUgyw>s=sZfM+cQW!zkl^y1t|Fk9EFp zN^Gikzs$Nbl91~E_K3%O@A$qd;?CUz4$koUw)Y}CsTCHt^%OKqY%D+6e%#k`;*?g# zA>5sJ64=Shtc0ucb_tG$5$C`oe|Dp;JI9u(A2i&$s^d4#p+{L3;IYpOnCiM+r8eUM;g;6v!Edf3 zL`e~hsW&fZvoR{@d6m>7^UACIZ$bGU#Y)P&s^a~F7R1Ou-#q+5Cmqhq^dn@WX4_yd ziJ#wHlqzoa``hR0@-?FfXU~>4Ngbaz1>V*-`+t=25k0#=gp_Dd_(?1^68flIO6}CRfJ#r&o~e>|q7#_sLKLhu zaCGv_$5SQx{iQ8mzp|9q(<&-H>6#W*)u=8P@aLAqYmjfl{cq1HIMJcHasAr-FLs4` z(N?d6mUaXU7(s2bN3E@^{Iw#ln~8V>J8P#5BV4`<-ynY6QaZe6EQWL@QKNFinf0Xv zSZ1jnm|3rf|2sqOULXSZDJ0lMp~fMu4xm;pZgy~XEcAm}H2OVS8@K5R{7Yj<5kCjd zkN|!V7Hi$I1Cy=FR0S3%fwfg|^C)hjS~;N}ZA2HkX|c_&_V!otVJulEN>Xf9Y>=#! zKE79gKihFHXJWT#=Vt>e@ROU z4}>IWcCpq%s)?m`Ly2nfln`%?nu78A;n1!)@8RN-7@~!xb3=i?*s&M&6kx=lSh$lT ztl%P6%&i32?pzoX=W-nOAt%KWfIK=bWLFT;5u;pRiAvne{3i0kzI*$*sJGR60)T8H zWCC4YM-w+lNZ*+BPO8K!MQ~oPJXGP`yPVJ~@JBW1`m!>MebJQd>lgAcfgzwNE3+M= z;>y4IheiQ9v^cue1YpTzdARDUjY$BHcyj&kdgitXH{}W%F~IaJhK-mjn^rat9fTSf z!dE|P`HY$)+rIqSD434$O!ut`z2<#FMtiA(gZ3PIkit~ooIoZuDUfMa?eyUdnmx?0 z?Mr)1)dlnuzwA#Vc9bveTO=@Qnr=gc|E1wrsCNQSfgJ4>n)ee+heBy6mcjz$>NtsT>WgSV1A>3UvpFTQ%^I(s9&cGRD`mVAV(| zuzX%Rt`o8+sfcZ11m{b?yEA4ap5M}W%bC0Lj%csHR`+H-d$+SL8f;q-Y-g)OULQW4 ztN-09Uap%^9*d=jOST!@!ssNX`2XQ11)sh$NTvpK*&2DrHgum13qNZDRd#N8-=qBi z3rpx$KMB(#`y!Y@&!=X$oY|S$)#^Ds^n*xy`CS5;oV$@U4%_#4<7<&?BGBn1XLn+K#PDn7iz} z<8R`DaAobgly3F8m~U>LnTW8b#)R2A!K#7*TgVk&X;AlVSgz)~1O&9nhc;HO|7{-T z)EBN4yx*-SAgo}&&K@7PaE#<{M$diH%3fMU4PNY9E!Jcau#Yo8G4F@>S^g=fMa$rS z=anLTf2_TY|L`#5RMXZ-`o6qGBWA0_$)mG>$e~Yu3Igip)BWwXgw3p8k~w3O>J96E zrx3i;wE_kXS*CwmIJkLEKk{|(&}%b;5(7mm%3nV?Z~hb^>57bQVkUA62tfLC87S9P zBvpt{w9p8*ar+EvZ9+x^@zoZlVABb?q+}p^Zdz&+6n;Ue(iy0_8iX&n9pHB4YI|ch zq!G)*wuP|wzp)TRst^E7hD5!sUFLzGx(wRu``ZUpni6K{QCb`OE98JG@x$4$KBY3| ztVhH9$Q!W>0M`9oB|Eg4LOiUnIu`Kv01$(nVK=X>buIKoiF>wuZ;3f8y$*F&TC0e1 z+V0UNUMrN8kEm3lHZi8T1DXV*OaM;)w%N)D9Lq|bUSZvRn5o_5k~eV=*`Mkib6mP6 zAta8Q+pMxIpQ(h}DPMn;`RuuWb3K5&-%tDY4u;gk_eLd@{hFgq z4|c?t{y1D|r;Bi8L6(Bm91jL{O{$$7Nue9nAsr+wwYcq;ewW-PGk=)%3MBLXUN|A+ zc**>u#?R_8=;dqU4)ESM@wx*2WVHewglQ~7O|$Y$G>jMFd5dkt9K>u-Ij zj}uusc;wuDZFTJ|_dfGBB&Cs`oxA6eL%jr4e{Q$ps)??)0 zS9ko<@f74_klwI(x_cn`wT_QkTiX$zPl$e<(?Ik-7E}o!p_kD0ltjawx8H$ydr?qy$A}_`RS2iRD6|bX)vE}qv)o9G3t@gkA-C`W8SBw z+EO|bjBsC`?1pIkdajFZzpOZAMw!!4;rYR4thyTe-Fpk*t@ACPUln0`WPFZ7+Yf8BF*^nk zue0rR4c0vKW5TpcCflv!*OzeiIF8erTJR;ucjM^cMo&EmnT_IdT+^E) zTL4O~D>xa`s|q6BCdYnpx;_9?bFLnmyNwCjHR82})N-x-HkRk>xgEs&fPF^@e{g!v zG(q9=+3lV05mrPel$(8MX4T-|8%q7o5i4j*@Xyd3zvZfto0p^gC}G-oBtS>&T+KoM zI)p_bV2qgt>UXe>HNK`lA`(5^F%iz;+Y5+K z{moond$SMYJ_^gMQNg?o+418aHJ+<3^#{0n>)+D}Y4bumLP-@K`In?0<}wq`weaD3oMRO#lbo!6};pVHxYGncF`f?AMcb{WW*?o@&eg56wP% z{p!JNvAfLDKezAPOBYv=|8uk*2tLwMTkpCpIP4-kbxairN{c(#WEodwDR+ADD=Oh# z?awl74&^($Jx}G}17~i>rC4`GymuzzilPtSg!ns%vgO|2GXTiaN*KI4Vzdam6Ul}9 zvTPNpV{3Jh3V0U$bYfh+1M8TjA_5C8+kFi~d>-k%*eGV_zor50p*7QX-I}Y}x*wVU z^^@w0I=%P4)QRltVcwN=GPY-~RZ(IFJK6my-Mq}Qs#i+(OWy;~VS89s+t)0$&`pm! z)Zbrnuq64tkL`zE+w7IvIvbjSLhHfqUIPzgRjti2YZJfOQ(7usY!{m{w%x4W3}u>Y ziFwRX{!sRjyYvPA?IGrovFd#K)1B?R87cz1N!{I6&`qO@`#RQ69B<&a%fK?64ho>k zPjnNvQcar`u6czOff0$LtW*a3a&(f9Lx92rLC86#A&QB=PBFxYgD+`Vugv`Tc+Kzr z9QOx{@=B#uQPn3a=%G^gE%l?Q;7Q}S)RNi*E6;>+qcqn+@k618E?uQ%jsB89gy%8g zi}}Ia<(dXRPs0;(pxdQNLUAdWkD5J3LC&_^nbq@MY7V_m434#^yP_jD?h@jlGY1@8 zo=YLJ`&z`oZv$fg96uVTMwZUNE&UNiFKrls$o=q?u2tys5Q5O!Cw(;z9!R-mKr5;+ z<^Uu`sb$}HB^b?x^(Xdhq?&XJm0)=u*`*W*oxE;UP%l2;!d$KHGu|f3t%vzNbW+O4 z(QUJWpb?Gv<2e{MpDik{ql$D*zj`8B;_^7Xz46OsNsXUxqU^k16f0?osMdaTs||Io z5ItKl)+RmtRzKUS=z4U|2@{j0vc^-m#lv2p zFL-UU!Za)a2jBdQFC0?;f-t>P{ZQ6xYrwKCoYgbi8%DCk4zy{zECHzN8+ym*JtLZn z>&Ly2Bk@K%PsgR(b>r?O`j2}$>K)!Af1~X6UQin?H!JIMbgoFRiOG~(So!yRgFQMd z==%_Rd2@$qOUDE5AC8-lNMA(}qruO6T&+0s%1Q6_CrWRN(Zl}&jflz{RKAXy1XyOC z_^*ENqzAQ2tMOXAzVYx9!MCG(%)WhW>G1TZnSK=Kf9MBvL=3!s3u-33^t;W7}1G{7fuSg0s>Gj*j4Qr-Im$=xw9b& zDwU$mKu&S4^g3%i7rHZ3MfDFQEvx*|>`73}NPQ+DG^U5zt}IH>Lz2Cu+^|>!YIY)6 z)wSCkB&`7;JT4~P$+?_CIhZG|s)HM4l$NNuqge4vn+g#6#rUv;D#9AB@vuT=2y9$M z4B)6y_P?D(*eS~>P0Xp?=ukYY$O<&tE&~b&!dFb3f}E|L#kV_Mpc)(8LN~Q>XV!WF zrM4&?yaaIa7PKj4Qs^1~AV?G%yhKfj+ZB68ooW4ri9r6{L_lqqI*cS>M_#)9Vvr3i zHE@bpkLVdJOr#`r(4fPkU%Z#-BwHH8#D??Dc43a&xP=zz<`?ulXN<~)F9FD1Or=8j&J4zOvLz87ct{pRf$oqyowU4$X9H;TeoPb zY_NpyA0?vJ*sim0c~0J%5C3_5p}2;$F%f1OK@wxUMtI3zTMdgTi0C*3Hv-RuwbBlq zTTXGLT!}ZD?pilb2u>^C&`7U+bDp=DO8N{?!hgqJgK?K%#XMRiytDanohw49Qva!7qKF(ixDNx{Ty05OYAU4S&u2SiRbYbQ3jV^L3pC1={l={4J=mV@@;up~wdl-G>BuEu%$v0e<{+FSqkK zPH3xjrm&aks(Nj6L2q$YpP&#*sU>JP90$Q1T$#mwTyeKR->+)!RK2jT#euWdDfqMN z?>~Tj(a|%i<9oXy6KT;`V-32(>xTj-|5l;2hCOZxo6C7^@cLy>ip8J5jmdchduw`v zAXF;r6*s%@7HwawFg2)X=1A%GwED={?-92Y-R#BPQn8OF9?95^T%DPnTA2U}Zs(%`!n#ixJKg z{b5rk+QJH%;c@%ssM#rq-q)+&!uyC4&)0U@zi)hnF0DF_Uo78?T+E1lf($USi`?%t z8MLB&{G_SrWa$g**$O|I2g3K~o&+j*Kao`HyePfTVKwez1<8J(*#KL5cIool?W0Lo zHBL=FYXn$XeGX=m5)vms&+n`wLoNez&zx}Z*mZWK)jNx*ml$&@eTI3=rKkE zBXYo8WcnAKcxGB4!eI89#H%l@(oQ~B+;2?yLJN?3BaV%F=ym)i3aJDN=k{j?*C6*E zR*|21q}nj~D3O(gxU_xL-3cSxAtjA1>TI|&5u_{}8Sv-_aF#J{U@vN!eZP1O@58>{ zdn3c^Jkc>IZ1tI$(yrvp$Ubae{pwSZlc$#f+^Un3Z=!g5b|BA%86~QZHQ1gH z{#49#*f2NL8A?i!&Xn^$Ar9mg!)n53TqxgsDhMk;+0b^B!*EuKxexl**{}1TB1`qJ zE0K-<@S?xL|Fv?|oDq~Ht6%o*C3Gj+a-N2P=4vlrk*mDB93_}5Y1*(?x-3>?VtHaf=RSXH3YVK8gGNnr?NxS_PP7$< zu6B783g|3RrvBsu`Nxq#OXUlpSgw=4%3|5U`%P>j#}WQ5_ox^T}Hl+_W5ntdKgxYYF`Vtc?`Z6iZ}#2)o%s5eRUOtob#>aJ!$Q&LHT4ps-z6M4|2 z!uO`?gutC)@zJ-b^Zb<5)5o8+wT}Akl0Ny=RB?~zZrq;ldtNKyaw|*T^Aua;T%Wu* zcJ-8cYvI%glZx(9Jo@sJR`|Q>KR#O>c%^jE7T3Un!HjFJkM@Dxh#-De3wxZH+<3o=I9eVXT72g$H^b)ZQ2LL zp^!fY;8sRkS0V42S^D&S=a;WL{C@JGB2dEOlD+s!s;VzGn=?e<4?)hNH(OQIoHqti z)L=i>x6-sd9(=#g6ek;Z(rq`;oO*X|6)g$FH0x3^ue$?@Nw$RKcL`@_s9>tz5VhkL zYJPw5T-m(0m>V$7LUXDwUy5Z%Ms_Fh=bv1@G`uYsOxkHDy91qxC)|4=f~EBjns;#| z_7rJqBu~4VkUbO0;2<&fs?lQ7+s)3w{a4MGwg?f^1Ma;y=Ea+wnQK@-P6N2`*#eSf z&K%2Dp)U}__tZDE{qAghon&?8X9O*IF-uZOK2e>zh5{B00} zZL+{6G_@PkHR^n3+aKNxd>53!RY3|kbP`s;L$*e^4RWm5&V`SL6z^)y*xCwsJX9kG z3-w2g@z|s#qQIE>{+5{HZu<6{gMZ*yJKJ$5zR2sk|fHVQB zv745c1!bFQr4hGwa$foSUj;(FJGf#$Sl4LpW&vbrfwa?8Ch$2L;5U-S?M^a~d1lkhH@k9tlykEZwYm7ko}WD=S8jwAtOKvqcyd)!W+`an&oDHVm|bY6Am05C9R}a z?gJ&Yia({7#;Z_@T5x%mwN55?U5EQk^hc5r_B^4Tk5+lJSvU1yxo>=v@35;LlzVRb z>~pHVktI=T)g4PRd4Hm5^G9BIi9f70={_OUjQJ!>uha90y*UE}kz7oU+ZEXT#WQyh zdN%7Ow@38I#lF7!AM*%nkq3Y1I_VZ)ba=9^!8~`CC@BmTLu^8h{Tz?BJW_D3^dbx% z`yF<2p21&Xj7xY{?lBG{e~MGHC$Cm!fM=W>!- zx}LW=cbT{U8g80+py+KR?OBBJKl&Ve7q9JO+@i@-BqI)8kFp*uzeH^ z{pzR7E*K_%7mt`Hhm!BTKu@lIz-)bpYamgS%-5ZOmgeLR0WsMD0k9RR>b?BLLruDY z8sLlwl6-Ut7{x>(h@skv1nZcejw%>!g>RKFwLWtTO1BGe0v;XP3}>a2B!z$QJp!@t z8_&^~K9TIWC=`QZ@9+DYuvcU2qS~4d7WXVLT@y404i!>a_|w7Ws!D96vTd}i7SNnM z;;dRcx52nv#TAMTSg73d(?2+Sn78Ld;gOx9irzOBwHJ4muagI?N4bjt@SQJD|SECCfB@@q9b@U6#7b?2i7(1amm@fszL7zJEZJylV3i^j~Wc z%wrk0f@M;5ln^Ig=%j94f5N!SQ+Ga7lj3=dr`yhx``i3Ie~obv5*!|)aA?TcXqJX4 z+ng1ww{+zR_M&<#Fir3*^do8R)<cyc0`n;7a?au=e#o$L;- zSZF4n!G7&=U=jT-&GU?hj=YyP6HUM-uy+VhUR7?)rJfS%xV}Uc)7DO8qJFgSxX!-! zfqB)ofdqZVq~5vBC$+lJubV(W+xnl=^SYlg>>_uZ#4vieG@q*JG_|7C=vR=Vv~C;K z<}o+o$9%_h=EY$*<08vc#NHurwg?=VG{xUwN`6gh1U zw#eOEYg!RD=@Z;C4;ps)``o6L5zoXM1x>Ki)ndX3F4&I^FoZiQ9aJ ziU|u*5@ctC4=Q1&*+71pvbtm&dE4SB-dIZ`J{DO<>zvI#-iyHUOM=il-K>ZQVug$F z-YVz8h&LSVS3ycJMdj$8RM*8`m-*R44Zw;=BJM}F_31+*sauY;vVugKBVD@?-I+j5 z(SUQ=j8ZJgtsWvf-1HqOB%JQO*<=u%g|D~NCjtYQu_RW0ZR(@gKfCf!2qIN&n)O4C z*Nl**)N>dR%!p=Rx-Vtx%tMQNU*(*mYJbOdeKE`Fg5j9@b8CsSU3Xw#-f0Bah5X+n z5G1?Zzw^xS*N(pk{f}GDwlmRwB#r~m=PQ8i$=w`wgJp_*_P@CRdc)Q<2^_EgKWsgf zj%mC27q3?Arh($#?Hs`dNd^NVh1M?ns@v}{u;JGu7GIUQ^E)c;zqemd+Fted(r=nW zcjgnER>IZm%$-D3Bgx5;511s(X4mH~gI$G9Oc-JT$sl@tvtAVuuv5k%LIWb>4I~y= znA&Erp3;HjhVDdfxL*jZn~NhG?yGTVT)nF9th6h<4P?xEoVX@fQ)f6BEgd9DLI4mn z0(306reTU~;UCT-+c0TW0Mb&w@*#E(44oc{_{;MNb*(C}>|~O#@utf%A%=HLob`VA z9&)W?)^-%N6@zh}&-?Lt@Kz=&!35tt7sm+vcp}yNU03;|{eXkq6*lsDo)s0*}iFFXQw8ypvE&zMdS$cmB}Q_@4&4QKwJz{+L|+g8r-_L@fI~;fcbC2I4N` zciZY8znr6FHYl^D;2&=;3O}uz25p`j^WD{dj|a z`D{8ZI`>E4_t(#(8L8Y7oSAvXR+!&EXG2rk|2X-xVm^dEqwqz%cSn+sTt0N|$Wu8i5toCn!P2FA$dt)V7*SHl>{kNN#5@ojEv7 z(;WM`(^tG%d^?NI(rKP--nl~}X65DdK@3oDASIOgYO%s}m~)DD1SazMdc8ftgO_G# zaC4bwC7Z|y|bjhyx(#^qS4;O z=Gai5`CaVDNsXFor`+Eub_ibKkw|g-3MB~L z{}JH#U>D&>%ISck-CM+cTRSoudcShi>ep=hz1}t@F}#VEO)) z-)^f{2BJcm(me0wUAyYKYDy8EnqJp9Qsb0$>gv^&x23@!#32yL`bdTGEdZ-{SDp%y zSTnGy?73rotW-`sVpDls;v#tGb&_hN8d@))%Yjs{s54-FX~3mCrVsJl8?ng0-j3a1%5Ko^vhghl*7!ev^wYl=PWZR1ox zMs`PIr#9ynrq*t3+~|UBW&G4NwOa^QuRho;c3^%rM%I^YZ)+BT>)ZKTVW$6xqUZt= z4sy9Pdk=@Qn6w7PUB2{#Eh&RsaJHW!njGMKOTr)dl++rr!c0Q#klOTTP@L~;pXN?;oDoN-iC6&_i`~TQJ!Ve?!aw(fj*BQF!q<{f z#$xh_TT(WD!>Dm{>gT3S@xX5sEO>TboVZiuU4^1>#|VSLJlqpB>LvEc4T!u1r-HGm zU#wm=zH=0{qED+P-5YswrU~R1QjuQOaxi7FS=S zKyHh_$uSDUi;hv~R?`o4?5;*CTb8VH5jXR}WYtLXO*e!_goR&By4*_aj_v0jK z4eDgSYx-+ilO(}NQo$w1uk-oeM@~b28ZXuF)0CbZDKs|&6;VIk zSvFC~MJHC(d13#IuhULkyzr->nE4rey`*t17U!nKN~OltI2v;gq(!t{Y%{aK-uVg| z3ONJx>$od))6@9-wdmQ~g5!ZF=le-(XP1M_Mzfn2(#Mm#r{%HWdE%QqcP(y*1OgQ2b!mv=oLj zkO7KL2S_E?YsdrH$4x2HnY59GzL(L!T`J*RCV zs^!-o=4Y9*6`RjU-KjJ9;aKB|^7*zZF%ySbVnH^Zz_ySl# zJ^6kKrm6zEq!^Y&T+a47_a&NbFjwYb%8@lH+U(xFyqAR-u}P)PUldEHpHy-|6AaGX zMR;}mFQZHgmJ&8DfVrls=3?|zM8ZL87_$+SstT^UfB1)1-=XY4dRim;wU`Ap0(qggrsx-k_IfMzxFDvPTz@oCKqTM zPFvg?G?mNCzm5!U{W@2c*g=$aLCX-hz#?bfv``IV%~EL}Hn}cxq&KoWbk5kh zCaK{2N2L+^tCmlPr`%S{$eJ>h%H6EHwl3&wVSS&HZ1}SMh3>e} z){^{xQP{n&n?r9N>>a#d4ov917H(>w^?|`Nm9?jSl+8r^_YK1gw6eADRDFq&PISc^ znfz!CL<3$j^e@|?27f3`-A?Sl6e@Sa(l_!>u=@{oy=gHx0d;#8=4`|O78zy!|ERK0 zM6v5mie~ai=Nq%E1c6RGe zyqO+m%)*DajJu28JgVO zCT1h~PYHb3e|qbGk@#l!p0Y94tNDxD$^QC zd+D9SRi7>2fq=#v-Usl+*>Xa3BcTg6)ba!W$-2mjY4A0TurLp?V7pq*m351Xq-=F0 zo+G$BJr7%1Tr5RT+ct~4Vv+*>IY%y7oDCYq|GEO zUf4q)YR>ScEPefV>dIr8a8MiXXs3{GA1s_#U?4T8LXFS z<0<*3*yso&3jhHO(fK;)a%9%vkDSBmu<`vo?=5LF%L|5D+FO60CT@FA_2(_zH*A7f z8ueVf{+hA_DOCnf*_=h69D;j^VXN#GbKe_}Ego);Z&|Pw35Y2~%n7|@6U5XuR6WgZ zRl&-&)*m1he{6NZ$Df@DscGQk4aaX|!l-L=w+AsY5ZvY%hFgcTCY$3+V=o&s;?!HG+oLp z$wOb76IOq=kbeq-8XuGfGD58JM!f)iqUSU+Mg&Acgvd{sjNVO*@6h1FI3Ka^d2hWl1$LD$xtPRd1#i zrly&FcA4+VxfM{ED{MS3FU{etsr$=OdyF5^Cnm$0!yK%DOpN?#J0Xz}e4#jD^fJ+V=^6S8tOIv|ul%Bjsf14Bz%KyBe z(*WmMe9{h&Y+g5~@C1BZ5Qen`XCUCrft1G2J!ZlmR}KoBDjkCO^+)VYld{I35r5;K;gMlRPi}Ct2_Rz)O9ro5RJhv=l7LIc(i!F53&Bv|^OoB* z!arlvl|D2ih2V7RI5SJ*ZkA@tuzzI;8+ZZ+a2qFV27QCv<%i|2Xp+oVEPiTD^EYa0 zqAr~+lOft|KQ>Pg>QLUF>TUDLwx~e6a~T*xckvzTUpc{L9)^+K(i+5JmW<}I#-IX9 z)34>jFe~9ngoO=`;GtmvuuzJ#Adq9S!XW{F^SOkY0y`58jGU6L*th$N{={?6I}V3t z#{Pb2aHy}DB!m6!)k@%%8H2Z`SKx-upOlV9nYk2*q|Yso#Fo77)JQi zqkc~yDDa&<2rEF{Bh6>i4+tzMSI;i0F63p!NyFYV-=2^r(-{G@hR!Xrp3XZ*>Uk?b$zA<1WKG9zi9qqKCk;$?#GCA16v=R(!Kb#ik zdS`)6XlGD18MO;R`_bs7Au7?3F4f5BIeo_|0R3`kvDG}i(C6lJmO-X^hgN!+Z?q1~=EVMho zo80;gq2kEJdhnJr4a1*RJY7~x!9j`i;ciwxUrF6(;+?pD5E; zOjU&ew^hiJRw}rf-421=Wp3w4B6h^F1KfGlv z9MEinUjGCs0SVLvImSPQ_p7mPEv1V6HGk@=foxEr!_@ZMsK1pn7w1piOG_6sm|VM4 zBd4@}z!tfFOjWUZ(7JhDY3(8ilOC|Prb*pYxZ|lF=lzjjF(pzHC!~bXfn#sb;42?A zj6G>W1B9hTh}|O>P`M<5KeI9|w364f)#G2T z2Sv4vY0Y1^z^$|>o5fp}yP*lGuK21@|ClHZ-NY!bnwNRz`c&--HMc}}pAu?Duf|sT z2s?6Oem;*wo-B3SR_HI)4zCAj;4`cG2D5=~fEhohZCFF@kHMkSiqYNcm`mYUPXZy4 z8@u&Tk@b4GU9Ubq4D1%GNUEe7WKt%EG6wZepa$!kn|*_`BZmx2_-QG7Sg$ZNGQ2Hh zI6pVZiM~`|&CmxPUyWWq6`+zSQ(BPm=}h9}L&fG7zQGL}$(B*g#A>#GgW4w27F@?L z8JQv4MmD!4x_5Jw-GU78bMDJuN@z9x%i|CO(QQ8iLWvx`F?Yv;eqMahzhI&Ygq&}% zFkyUvC3X<>c;~5G@uxx%gK6~OM1SibOIj-M<@R><|L}8pcJ_2GYzAb5T7*v-$zURY zRrkv@cxO7nnon${mvnJ`vnQ%B!E)Ff~B%wwYerqgA~n25j^oaJ4OL)8WpJ`v!xF z*#lucz9X~Vqo%-U3tICHP%K|BSbJ3F!P@jmVQ{pKeehuxqD|5e9kCJ{Hs$NpyP%Ma z^>l)^=+s-8EGpWfdd#E3+6h5{Ms5v@w+HbhFhJ;>e>_FIdQ6kC~dPi%}D>?~I1E4y2%b54L%Yr5$4Aww!`r|o&X#p-q)`hh>I9{Z z9SZ+IRn`T{BUbBl(~hly6}mR9T%1GG(|(z^zkLelxfVbo*$M-;L;OdWp#O`#_YP|^ zTl+?5wxi690x~EnQdCAz0Rfd3Aj}L3qX>uyM5=&_f^@E}_W?027czwds}+57vxbFO{)j~7|by?%FD_w%f^?lKbB1AA!j zV;)K=;g$HL0w-lAq^My0f(~nJ-=Mgl9RF)#3Yw|5(a0QXe(M-~39;CC-~8HQ1x0_@ zr(idWiQsO8II4I{lP#XdYu~Q$AD@_C%Fk_k%qr?Uw8B5UDwNs^zG-;%d-Wwrw8gm< z3e-N~w5T>1oOZ=}VKXmGyk_(J0f(>$@k(DC&=;_;P-mzMyoz6TkJX+!z~?SG(5l`ij#oE}i8%nJF?JgqKkt@Uch)w{`&D)|fe6h>!?WPsw7Z8n>mc7#dQ=VV z8WP~v;_~wvsth{j%HqQ(PTqn-esG=`fdw(P%fqXL-IFR)UvON|#k+eZO7qW^pI^K( zcp}%HviW^1Z=cL#?UF9u-8UhUsvwns@$9gTAFA``jehbib*P2;5ju**_7)%RwbqBh@2F`VLQ4uK0tk)~Qym9Vu8zFbXI|UCBFiNotIaCn zO^~3#6{acc?TQbA8`LOEjA%r=(JM}?@Ey73DUJ8mafnTm6~lIU;jbuX!TlW$vKtYj zrp|@VlVkTKFslL}Jg7!T$kVIY$KMyC=J7ypv8r4g)i7&TIZJuj-7(0_7b@D-Zcdz6 zpl5iCH{j7$Y|M~ zC9G0w1@(BSxpwpl(QxYiT&)0{KDX3NYdn*G*d-KZ$9+WOUS$Vhb&CrxoF-V5d6XPp zD%~Uj>X1vn)1Eol=dxL#!Vvj%bERD;U*}Ugfk?kI<4^E!6zni@>@K!}L;&Ax@|f z@GPh4ngEbVkw-!g!>ZVhwhN@f*Y0o4#VJbrkplw`!cO(@TDE8;XQ3J0gnn3sMFJ!_ z5%AXtfmY^-ur4_hp(D$~T)TCHQ@JQ%`(Yv#m^DC?!9yc~PhSUs)(1F$P8Jdjd_D^q z&v&@4Q~+~@E`Qm7`4_pESu>B9ZI>zvq)r=XQ#zCuOx6Wyw~Bv zwWbcUVYiLRpoM4oavI6&n{gqW8Z}OAX@&@IjQaHHE^N@96P4`>v0~#*?H?3}yZfl( z=;mgUG3=e^L$rNof{)R--028E%|{hpHyTvPhQ~L^@}O-9-BTr?2R0*Lx?=NUQTB&H zbJ{_sC+Co(-Z72I!?S3Qt++$OE6;`88D%-?;6_E86#$i9fq> zdhfEV316eox80VGqkS!CH?8WwympNjG}jfQSbTs&d6dGtNYr_yh4V-RFbxgCxlqL z%aYcM3CzbG_2ZND5p-kL?TrbtzPqmN%Ag*Jjqgx1q+DF-d_U+y_l?%8)LNdYauHS? zaki*ZB-c9o6&!ccJe5JapCl%4s@gGMdLs!v>nrUK|M$ zvE3%`bPBw7UtA??vt3CQyib>pqo#BmRTnLBsT5ngcNPWF7hU|7>7Z~BSJs9`jrEEY z>4Qh=K5}6$6EgbBZ4$CDNzh1L{@U}0^#>!_9!}Qg(hDXBL#kg`sATO5XbnS4JedPl zFi^#Fxz3(6=gAes)7|NoDqQthz0>lJ9U?|^;m(tTvn_tjv!Hm6w{iyiMh6ae)ks5E z1(I8|eI1ukS~v$sw%jyV+HF{YY z-?pluPB$su*oKgwwLP!~`Ay%7Me4dF1smdSlq(c}*|FR1h-*#VZ6vw&#t@;pwFp+= zUzp4LdIv#^@pwkUt*br>b5ukDxk z=?E3*zC-{cHU2v{|4IzK zBFcN@cRT+dBmIvNNdYxYIN}yxev&Ye1KDzE4|V`!W5geJvYN2@9g%bJ4yYV+(ng2T z5)&Vv`_R=NQhLdDy#mmUHI6S6*@Z0KwNLGitScDevJKge>2hf~<=8<0E&ggP%L>?| zsMjierQs#?5&K5ejN6Q|V)V|U!2O1_R7o4?#Gj^pbTM-O!}usns*F_efHkk!%^Wi9 z_jfcuDqehU8$vztnG^}S-)T4-_h>a_WKhli9H8~kznb<{MUkQo7lxAVJkwx;L(OxAw!&LyAT8XXvOEN9>wznTiX{2tzG#T2v+kOUAc`QN` zQzV9O&M9da863IE%Zr25?@=_pj0Cs0j#C3EV;rp4=t;Wu9CTL4SvS7kyw$0Wup2?m z_%qfGg;;GG9ZOu$b#9ZnlKr#705a-~MP!{fQ5dnq8b zZ#!QKhH^U&DFrEm{V)OQBjH|;gZ*REi~5Eq+$x*a2bT9mZ|ut;Jh`m|C$ZjBdA-*z z+i2+D>zr}vh(&Psv{t)ER0Zf7kd6#zo;VhZi5N7ye|unJ*Ao2x50oN~WK<=uD9`MD z7_^qwy(Rr^iL(IOYI|SG;`P@_cia;zyCgb}d#x8v{i^Ma=)YaH+f~;AH_!F$Wo(d3 zy=tAvft&Ir8v&c8~}ov*s}`q{5$ow=zvA&r@+CWAA-F`g&xjbZ0Rl+*&fy}Zfj)$2W3X7SY0tC z79J}TA6QpCTUQ54CQn1qdeM)$?@VBWvy!Oo5WV+janR+N_>lHlQJ)aEiHa0e;L93* zH0zQ-KO~Ky8_VL;xO0*G7_BJAECnncF}=f`I3G~5)#t~ay(0%MKaIO?JN(NWRJnOz z5w4pTlof1EV(H8w7wnLIl+D)|OuXmDX1*b8J5{# z3~aR3yx`YZ=2JB?MXtF;AXzfkf}x8S3^y$p6mDtI{EMa00VJ9&2p1q*THLe#bM(~8 z#SaK)pDo~kw234vppQqu+WR#(5}>+LH3OldJU-K~iH7m?{cZ~psAj`bWgV{`xb29{ zEeRY74F7J6L`>%czI;^}VG-ic7{9?)#SPTs`3~cA-I&TcXQXxhfHf0{NLim04nup0 zZ?MSgDRV#u1W7myOI%g$z_A6uN$xOLan-Ua{(6erux}>Usd+#*i}uScN2Cd8(>tEQ zv1M%4#f<=v?X#Q8pg|5Lvqooh5!urU(|=5>=g1R1ok- z77>9E+Oo`=YWB&Kxx!L@5wp06k_OyO)$%;#D?aNkRP8u|8^+FLOrcq*PB#WDqO^q%9luS ztFF$5`YI6aNJHQKRG4k?eQ)L@Zz=~t0}J%d3i^NiVq3o}y0-EZNL5~+_9$GtPvLx& zSfdK#M%(~s%A>$X8M-EPP6Kbv4Ka)E?ioC}%ujuWX=YHA(YyRAs*y2Lwuxmo(_%+psOlOsd4{k9?D$1Hg}1#xO!*Gz)k95?5jdYA<{C)vE|L1zo~*|R@1 z$YB;InQ5qpStnjgo^4E@-TLbLq&s&!NBSW;%=X2L7a$4OqLuckGCCxmzFy^iNUN08 zv)yG;kAqM(qaHUqUzV+&Zyta|i zDxo6C&zPaV$JhsR)NnOwE`JBNT?u&24;Kk;ufICbbOSj0Y4~wv>@Yc_f^dCerh;A? zveYIgC8CD+Vn39fVdkIU7HtO>`=M_S2Y7>Rwe#5h0p7CpuDCiuKlYsusHW#MaFY70 znN!rUI}1o@$xU%8On(ELaP)228CxH*?sxzQ(c+H}Mqjf~SRHmSTyLqMtEX1(p(=yB z<%Tkgt~1XELvQ#zB4iwBn%)^}+rZnuQW?lAtgIChT!QWIigcT0u$??%P}j&=4K(I@occ6+;QWQIVvXH`SW=k?}Wzi zEg2JGT^8~C%i--2NPi)4Y*t6t{H9(DgMxt{b1}5;8}j?ejaS5Yfj6uzIF6E~A3ya_ zTt9@67K{@|w$bAX7ht(SuZyJs2ma{AMavRf-8Fqe+l_%UZ!p^@!mk7ax{#dI{Blqx zl`sJc>ZraxM~1gJCI^fflRZD!kjET}I{D*4V29Y8_m;|pc%J3v7120HPplS!0f_!d zUESjypU?9?0{gUKuajrM!uGK`1p>n+mT(FCjKmyk08Ziz$_bS@wYWmA4fId|ZNErE zVF2VZGr-ZqNm9MA}fE* zQNtr#lx;HVHaRgyd{?5R0qTH%cm-pOHwh0XdXXxI8ZVHj8zqUxiowis=0pG_<4H7TZ9^i~~PoVrqsIOJdDvj;5#U>KVCN>apY z!++{ze3TRgxYHH7geRS8%O&%@OFJ>);%MprtstvTP&*|Pu?ULePfGyazFN1 zgYLStQanCHSWh~bySE+_9Sp;MC}Beve5i3eSXa_LKVa+=o4dUu*SCCh{ryZLJMKc?vq8^uF2 zWMF0KTfqiUpc!9GM>Kddy90P#w{<|#6(Ghgy7a0N!uAPhU{J)=OeOTX|56#Ur6BOe z!2KRpgRAJ;;C-f8qZ+Jqv+Y^R@n|{P!Hi2Hin6s41m%%03@;Vi(lJA}fgj}LxgT&+ z99>#*MKWv6!EEuU7~}1$KOQj)oCR4h-@C~wnK&=!@f|H3S1%e|_a*)!FO`E&vURH4 zerEz65DT1~-lcu#F2{v(+*Hh9L_;SDh!^)|XW15i2?v!m4bpp&ioG`8#N`TQuTSIRUbD_#^+^Xy_jE+#Nuj<0kTc&tK$^k0`Tjsmh>FzNSmR z{eJv~=;Lai=SW{_hh|Z;aUgSK(+4wdeHL~qF|2$V{iUIbvFvc3)Zd*k%$ak8@&}o} zg8CeSnQ$(^EPYy}ij2J?U@6(;1{K{+2yXh`D@kH#As|N`U5=~v%4!%j%!1nWpneyx z^dR(Fx*de$($(_}(Ar<)M~M{&FTp60x$?i0xdu|Fyj=))D%-V9c^ekZ=Ty}!pH1d> z0y@G8T>gV_Odd14`AM7@WVr~G>~TiiZ`!T@_c`#udm%GF3{ZJuj#|*50G*F!z0Ojp z^?WNHYiUwd5cPLwoJs-zr%?YFiyE*BmuC2iD)-5)=Cb))U1bPB#(yOoOV>t!L~hfo zoaG-U>(Y9SWVRuJzZ+1+V{->`fm~Se-277PWMwn0fM!sjw3{xy*5*27>E+?_pDLG3 zFx+nZ8n+l20P)yzoLVSW?$ z=*LWlx|GrhpO4z9MU?*GgCfrVlv0~@Gbcndu#dx+0@9FNE({3NN zbXfiXs3UvyLcFys!ga4m?|apPt7&o#nIe`21#--m0<@@{b)`op(`G#27BZN(b zV@KKJgw-;|5!*yR>ifp=h5MDc-cc+p1GG4(^}0_%QUAKw9@nlO^kN+~KhzVvR)&d< z{OMU`geuSv$_)+tRf&&1I@)J5Ck;e_oMEpNmqa0I>q+%F*9fYBcPWL4e&*CujA}qD355) zmj^jE6yU=b(vWqiP~9Lj_eH+$x9(^N@oCQ(bRAge$U-3#9o!fNKbXFGfJlsyqNQ@D z6=)7DWq}Mmm1`|a&?Umi?+m;77!R_;ep-cz$iAYPfZ*oYFnk?d&qScYd&aAl!J|&gQ2II?szc&Ee zt0@{{fc3Y3|1=&5R0&uW$4wAcb3OsH(vQ|#gagTCcqmDCb*y|hx~aBy1`R%v@tGr%5GzlnTL4H{e#lH3d~pRMTzC4I{roq7 z2h!+)y_rye3PTREbG$|B8?Wj={; z8Ic^}IQRU^L)lgxw~9%Kb)A^+OeaE%ltc=Yw%_3?4wxNBKx-{O?k%R}jNUWEkQvwW z-5jxojy1hSYxkMKQ-#jsvkQVvx4kgu+(@GM^EZ(}sO9;Ns)b)ni~+9ntY^qoSsoS33*EI83dq*oxXS)H{{LkjDz=ZcS*v zoa2u{6SkM#l>IZErhhP?Di$$o5b57Leb*GDhrwlEUC*OzJ<kgdhVFZ71H=sJ0x(1{SMWQ5Bob+v`r*q66P|B)_N_A6KFZm zSkitI5(*3PzUo?o>~cPk14VPEy&Ln$3wp`4YZ_s=2@za5(R=-DG-O1V9!gR83k9)Izs&emDUv2|m|ZJ=+J2!Z zW6K>71{d;qj+$1JwlatO-?-Rn`xEJZMU)*=#EyID7ApH$zPK~;HQO(YRA@3R6PbB3Wigo;_zSg&=lSA{=LWU#RY}2p zrtyrX2K2C6Z6lo6wW>39Xb@X(ZNnH$47GW(cD1-LPP=R(#oLbmr5N)}&3b-lt6vdx zFE?%M^j)>&TJBiQ7mCF+j)Af2?EIlNyh@gZxwQ2A!Q z)s4cuD@xht++IAiaOo);JQN$;IJXk#kBe2k{l;mb~)xeqydh}2i>FG~D763nLra8UsYB{tp6StOe0F|~O%W6;; zUGvhYTq+$(JWiArb(*%F(7i_#4BZ56%KkB|rAuP>AS7kA*jjcr0SMk=!SB48*{(il z2ZW1sJuBiQL`I$_KQ;-$$6A=Nk>O6MyFUL&?Rw@Jmv_L|-`6-aL_we2k)IcVGf=y{ zBf@?U5R}8b*;QpcxLZe8Cr7_QB8xF=Wz{s7bs+D{Ce??)1~{yI-Y$o-GeaiBQf}&N zLg;$INs=F7_uv;KDI;JHWpLfUqCbGW9qp8*ev!RF2Y+ z7qJ@sP#WnIn|&cV7o}2HD6gxtpE_LKuB~so8|1nHN>0hT6GqvgY=_ea& z#{ZpwQ_^ny@_Q|S|5VtK2e$VIi;Y(qYQ7MInf##>U;p;jb0Z6Sp4QPJuNi3@jq=hS zI-ivQFP|@j&riSX37!4_jD{M2NsK((-FEnY?-B^<1haP2&$MI9J^NjN#V6LpQV;00Zx6|5P;LVJ`4mb5uBAUgK`O88H0gQ~s9hnG_|Pv- z^$Eu``N|zEo8$O{73O-vtYl|2*v3Se6y6gH#t#JjTf=I!w_TV(+fJTsgleZ-Rz$@B zG{RbqUX$l+@YrPiQm{HkZA(w?$Jnl(Erh464iGtZ6Z%CfE!1!WO|vZ}n1;q%6Wn|a zIvzqzvww7EV+GR_o4 zpMPuc-W$<4o)^}m?PMBtMTj1GlofEQoG%meZM!(<=1fko+-jL+CQt6FJT;CJIT+pa z(V4=J$oE9>Ndl<-nwcR#Z?Ls~CeduQvnjMpVnrr?t7i4q_zBpef0Kx}!uh6^Oeg%4 zXwfQdC(?s=m8S-@`u4HPJr1^QuVLc~UI53%Uo~HR^|E-wv^Xi9Y7X!8FFtv#E%eZV zUG%1q`E_DPomLs`-Fn`U)pmbY-iIYZ7_cx3Nu0p2HTKR=Yra`cC?W#S{ zX)|pUBo0(@?XjuL!071a1GT@VESfMqF!k;Ii!^_E(dyRJ12UthQW*P{$oqi$bKEW# zv`&0ib8CbnJ*NfT_V(7gMKEG3O1Jw@3PTE*RLcb*xs{*rDbA;blU1*#?;H!&(5!&U z9%LN*D`<_V23Vv1+Yq-~c14fuUkcH{MrlyTz#s2T+GWu_G`M0_JuQZn*y_qF6 zCc*>mJmQNuFB*yG?P?WYdb_jphj=Dvx=AdgSb_dv2XriD zHXrM#-I=aly~C-x(U1dgrl`jmho?QJw-gw%lkakeLURr}Ry#!tdSf9$Rd}cSpl;93 zn0|?z9zSC7cKd9Rm~d&V5^B;(RLjs8{I(p}d;iLNHj+HV&uOpR7f_nydI#2r8@P>r z9uv^n;3rrSRc68A&AV`sP^{3}GRKxaf(f-B-*Y;18#ejlkkg$H2Ctujy`}~^+;9+m zJ@uz_+H>3YBc+N?Bbl2$p!F-#!!$pU$M%!o5RV?|NWzD<76DibO%02;K)}a3cVE_a z7U{eaoSVPW$T^=hqC+(yZI#N;R;xAk_=DpnpnjTjsEZg-$?Zp*mamP@ySLAD+`1Y& z@Jrwk?;2xVzU_WnGXut(@skgsKVWWNR`j6l^3*=mpeaQM$u?N(u0f&Ya4Xq{VnW%} ziTWqSfTtO+NHFP@@a9B2)797DU zkgT|hpkJh0&zgCS0Pfw(Isn0sXK_AO1q1T5Oa=D0~`VPvyUMYFJm%hRQ^fW$&_V=~EPo;X@Oz9q?hz8+A~l&jYq--W5TUV{)K{P`RlvyYg-1EoWOe930Pgyg6VYrqd7kOSUpzcwEG zjRpMhuX?zG(ocL}0*q6`Nco2l@>hjy{zli9z>tD6bg1Wn6`S$5CzZyT?yykV zPf#(4dZ9q)Q%WRR(9M!yL$zqtjlwr5+EZuu3h!|Nu@WGnspZ5x8Ny?2-A@p3?ITDz z#l*x%=PJcl@-J{~BINVOvVP20;>iq|F%@BmzdR-GFucQc`OCW4BC+E-5x>7(?&o}H z{qS>tgT)#<+-*J?N*$mDPMxApwbZWQ0}qMM$`wo%l#Q4MU3c%MjO^Xz9+Mp5f<;bJ zL7f((xd9wcO!+{;LmJ3jHl*EQhwD9uVy*ZmnAp0`p}VXw``{C8)fydX%@4=ntHz33 z_dUn1<2}y|?$lbbCoW*uW+d7aoMuF5#lE3M?9CtiR^_#_AnoC0>$4r~Rs);&vp45# z`_357CK5m$*j-pw-eC)K&r8l5J&=gS!FT)znhhO}B!_2l^3g?s3HF0J62r!+XBW(s zj%X(Cs;adpULW7nMvHE<;n|pRtQ)J(T16}*g}om2So%qQ?7~G2NHsopSM}_oOqpjx zo-c0NEpxZ{?)=6VU$=%WH=U5HZx&TNZKN4gQc;AQ8eN3>O=z$`-ooH7L`K!nKtN)d z_PD+pP)i;K+$^j*oP&haqup#}VHJH0|38O9vv`(ZH>b01F)*DJ4lss3hX!%F3p+pN zc7-BXjHV~*BrCrW%G-)u0h;!~+JtoPg)?3`=rSCsEDEX}eKiV|t*0)ft1@~*JAj-x zzuX^1wC&IRHrFk^B`gZJXB6PVh$EUhijl5q^(GZukOLpR3#V&nvfsvCw z87nSAa|nUx{Bt0T7k^0zr9M4CsH3;FfDXt>;nCdMB4kr}VcExYyD1XCK~15Tbu9x5 zTDw=!{8?c3iz$p4Kw@*3BE`I`?*uvG0Abwj;rTn2xoreE+mGy4jb^1`2K9 z=E=1KFC)`c(;SIqfG|eSG-uc@r}AWMr2~B{E>!%(QutRv=#yT{$QKJ;&!B;2iUVd` zW|pz>fORPsN!O2zT9f&c1n!yE2#b#E`8x>7oPXTN`j`J5?4c2-Rua`t3PwpQGFV1h+Y?5Vt z2pwN)nDS`q_0$w6Gp!`Y;_*FY#4eE6eyn%+9*p6A_hHr($XVvwunE+rLNovDdSUJA z;CGKJBv#6lPvmoy9kNE|55>!PdTOKH(D{lX)xNN}?$C*>WVecqT82% z$_qs*U^j_1YNrvmPI_~8l%eHn?bqL=uUzvgki;AOXyD4xd=O$K+-m_}#ngI+%QRm- z7g3j;Uz{O=h_+Jum`1C=?Vf;Y5#~kBQbl{ktorRVMiqF6QL${}gX#=eK@f_`# zSk}gO=bUPQNJZ3%?~i2d89L}Cw05W;@oElSA3IeUxR(DQZX^`;V664cu=x*#X!Dki zoLF?uEr+VwSxI^E!%hxQw^}~DlCz+nWcT)HFw6TIpzD@f`BLGFBe3;H{UKtPNBF&8 z;;t4AT+`kD5M#BF8m$h0Q|8@#7Jg8+s&uGu(P3fQP1!t2(m7O^{g7}$fZbLHdAJo= z_tkZ`;A}EZDK%{fj6_kfJm|Vh;80L32D?G*Fd0SJ4QE+@CfRNa7A{{E5!I}itTcp< ztOR$8=j2Ew+YM(F$wb`iDDarp@LoTa71xY74agLLdHCDl^3rKq>q>aX{C{&iUxZ5&d!tiLj=d8_e zzP?`FUxi^uznVNyh%w0GyfL>AfQSP2UmetU!_H9iy#z~XBTx%cEgLtbA~20SAp(;Pv=YoCZ_0g{xIzp{G9qC0PCH=+F`*~yi&^fdaUJl> z-PyCb-iqE0Tjx=DALy9mFPocrPWgrscfj6QA*zw_MNLT|S~%M%q8}y_Df(pRmC_rc zL9RbO{yNCbwe368a~{8baqJD`ySU>qM?O5#kTxAUk(`>Edgr@HI3jNH>zHrf1cnUE zGC?5r$r_y*0VRzDX2JwNXweftVJFPeFSQu6Ei#Wc@L1;a(QDcUO0-+Yoyd%tC*~qSVpmk3z-u{bo500YU zHryso*j~lc=1#~HmhyrG%3SB|(W$*e5@7;H$Jv~oYDKCm(7Un0oNwF>x|*^=Ob*8Ax-%ZTv-wy;{b#swR59BgwES(P2rST!VQFg z-#bZU))iznZ|MhOK#GQ)12xGEJDs|84jZ$KSRf#bQ2PO*sRYYPd@STibS;3?ulT~U zzQ1a{ztCr!Yv>f6?YWT3JBYJu$14!am5GQ24i}cq&4ya&n0!R=XwHt+U+G^4{6E94 zB%)UoW+Rg*KL?2gfN+-g5;fQwa#n+y>oWUm{Lu;Wx)P`)g{;++BYyX83AK^5RTh#v zakj*vLG75*?2yNT8-BIy=sjJ!A+!D{7x$6Tj)2D*kCd~b6sEcb^+I`+n1YI7`a-R6 zR`cpacU0NP+<6DT;=$Py2(GM8j{fbJ=bv9Al!`b}?S;HX~}$1Wm? zjv8jonXT|_x0+{!LV5TiomSy%RWD4YF`TEuvS$rqg&hk#0~;h{<6z3O7jr%AZsj1^ zke*~zkz?7T3h{-G^iF1TR348iLF+qZ*ZyMi2|Fsnw*%_E&90g63B5db_02dKo9sog zYrqPlm@{UqgtNDV%SD}QuQHpi-?p>OV#N4xkKFd|;3#!2%j=Jg9S`oQQW%MWjXVPO zOPvW8A9a1$U4>=zA{-RHaM^9REBd>w>b+|DO)tf^In{V9+zA%gOhjxB99luW>7+Ri zqLGx>?|-6baKEs1z`vYRUe(}lpa!soRp|-hBO+6XtNh(V`bGYXiA37-3o4O zU|bTu43L4bUktPXUFu@|in6FN!OSGvJFS&reN-m7xAh_-p_}U5{R95xXH%j@6eMuM|2lTxJsPWyQrZpa8 z0Bd^sVl%X7av(@=x%l2`)O~MCbd(zIdGLe=Ay&jVOJ~HF?h0vlFQI_WK^B4NZsXVn z-XmQ(jlg*~8HR+dm+Hnw|2y~lCQtPBaX8n)g|X|NSTWJ$Fvv!)nUi0;9n>EChM8vC z(m;a9hQB?tJGp`CnUEr{fm2w-zLAX$ZNBa~&_hrb=6;y<1~f292D8lL5z9v@$u$iZ#$0<;2Z5e!8F+n$JLS0*_^E(APLl8%umBqn z(Ua#Ir`ZJ4aC(`^*sYYzuW|$M>|3A}nzMycCU5GRFmH*nYW$6`aff^Yy@3E8Eo!dK z&9LEDorDK_Jlgvk1wiok z|AQrbfm`CkBc70LEFEflW~&CcErrF9_V)?#e!V6RRe-NBQ9$jK)7V&(k&i7%_WbPd zs4iV+wE-BO!(NnEBc7*sGT?5|7&on^2YQr|7Npk-iI3L+jX~9Kn^zQD}zeXvU==a(5FEM+>#h@XV&Q zL*G&zJnPDP9w?76ZBa3Wll#b1Uy!G+Ts9cKVa`^mjOp)UMYPM9M1D-1`HvD$uTpG` z0Q(naYbql+et*Z5-z>Vq{p}?Xo$x0F}wTEEMql zxhW4SI@(J{3Lul+0^mFY8*Bp>a@2TOo!ztG9(R!lo5}a?(Esto3*=_HEPb+!)eo5z z^%Jtm>Ahrfb%CP96I;V0Oc(<>O zPWmv9MUS}gj_RGG?bWJYe2O&K&YDDB*zFF0l8gQ{Zqm$4xSkQ1-0in=j1Hkqbj1Oj zkqN!!+UJGY71FH{^riS=KoY>WHa1v_%k!z345CD_k0RyytMLQTKy!i+ZW8Kf)@E8( zFha=slrdpcT*$Fp52sUADiNS>D*1iG{p?Ic1|GK0;- z>2>a5n>k{aF`+Am2MY4x-d{GYcOK3U&Rj!Q5}m?Nzgw+s6T8cr3^En374ioVd?Il` zzIi)$clFCrah+)w%A+>tEUn4F!JQvY*DpT8ZbQH_?+6C>2K&o4B1= z8BaNwy;YXO)hOPYMZFE~~;hyB1QWyQEI{AfyaBsKf_;4e+4!Sc+u-Ou(#}%iX~fq(tOKFgAA~CGayDprK6ngy zFjQw69NfOIEua^MF?AY&wtFv_nhI%=by_3)I$dpaATz3$LxI~@Jw>z>^jIgj%+~;L z#E z*W_2OAn?1yY&cTJlaE?#Ez}n(9|7AOv08$xM#mb^nTqx-1u9!+&mI^Ma&DmGG^5H= z_lwzt?6#T$?tGDti!Nk7Dzo@R*lAYG1!+Re@~w|ccacx~v|e6@)WjnVLn$-&=(nE~y2^bNfomUrW#0Zl=_9moHNR+eT#os{*wN`5Q8nrd!`iNEvR3B1 zz1vgecN5)MFs;u6QZd;eU;}8PH-xIVADPq?WeE%%mIUNG`zRrL2R*>#vW7lxf`y&G z6Sr1Dk*Ja6%gd0<8jZ)_1`6xJklF-xRS9*$m87=iEqg6Z_;H z09{s(-cH|4@rh{Llu7FCsoNkyTi4lMKh&sv09x40ZTbiWNtND{*p0<3KAa4`%cN>j zk}x{QV0z86Kl^;^8o&C^Ct$$nCp-5HKV!~(J~$K3rv(i5`80Wg=BFb!>>mVOWHqrG z2b7We#|-amVp|7m47O^GKwC>WmFt1bVcT3QLoR!>&j(&KJu9RO#4n|LRfoRdv&6zK zW2YbN{xH1OCfY)Tk9gM&|AAE3FV-eTN z`~X9leIBsr`34VEYv>nak^%Rf>*F#63}k*~Wge^JIzRKvS#6&*2@74H#R8pE+o9C8(amZlUV6DE);JRt%L=O{& zJ!5IBO?}@p($fN_M)WFVD)vW8LY+173YWK98Z}1q7Y7Ym;OAFdhm$ZJ5x0`BmcCX- zb3#R3qTa86YYR2Ymtpx)C=(7ZI`nTD-(Fq33-Fb?;S|Z4zr~*TB}s?Snjwi^$q`r9 zjIhxDAYi!P^miJY+mt54sB$!PsIK#*5!5gKCDG`6>|*ZEdCygo+&ieo_2U`}_w?=S zmiEmfJZmWK_g)QFD79Wl)z>(?&;iQ566&8fI6U6GSybX7H#wh0r&_p9eLb{ zgRJD{-^HsqhOIKA3&sYu(&N(+5D=Ipg( zEaeAu-|gWlc3l>aQKU~$NdB4a*`17ueoU>TW+BeZU%oYOl5kC5t>)CMUtX~I7vJs; zcU3fBH1&6c>%6)AzW+_ddY)&G^7BpO>>_l-v1XS$Go&|`9+zGOtJl^292BG?)xGDT zTlgNzuEY4Rw=y61bo9&glxbZPW(UZ`_RZ$8E<+*sjzU1Z0nUmt>mW#KXds<%+Ei6lPh99%Ft zgb}_c-%%L}&ihD?;7q!FxKQ}vtlR)|TkhM$)EW1A2ps>^K7>_w`gGxlHeX^vT`i=T-tx zBY#`6$A&5ge!4ZqHK)u=#uJ(=Do+^zUB@q($T7Pg(2l;=BZaQcA~L+wgKt&_c}>Rq16^N*nrzvVTT5KjzRVm3g2EyAjVE4J<~Bd( z@to&b;!4`*eZ5ss&7~z5YyE|!b97_W}%!g9;aoKukcqDd@37j3p-^uPi0lNfV&E-)e#5U5Jy7D@$ z46yek+%N6MFrSd77m{<4w0_kIVJk@05&Zn>9+=ojdXZS8I%&27G5p@ONqQKXL0hxP;^y%U z_gMY!9G<&o4;mRvRvb8la%!VLq+T0>It)KjFfX?BBu26JVI7(xj7Jb|7Q;!}%kxT3 z(~QncJ5@5H&46kx|8p<*1b>5mGgnz$cr&O8*DZrIO;Jw4+5H4}$wWIXreH-)Gn0|K zpW3Trs6{VH4fV~9u=9C4p#foE8sc{PP=G?J{}+4j9oKZW?v3slM;Qkdl@U-N8D$ie zCL+>8vKv+i__7uMlH{mBtAiP+D zl~Fru?7Oc(2_LjV)PD#d?5MWs@wTEKKTuG7=l1V+Ol%%M9k}>>zfX~q?GG2+ewI8) z@{={)nTzJhTl@0pDX%}jkLOiWi}j3{zY{we-U1yhqgv^pZ%esH*d$ zF&8}Idy?33a1c}h;<5sj1=r~~Oi&ZbeuOj7jU+{Q@Qm1tfjYbPQ`EOXHvJE7)bBBJRtPfJ zfXseh8Axe~p($#x%UV#oZrtiIRNOThvyMd7(n<%q-o#$<5{98cN% zSRo;(;XNwNUyE{L1ggpPicgI6RN<}QKll75a9;lm42wFOc~p3~)98xKW1u70FV39@ zOIFhC#yX4?!5*H)byNj`?!(s?rrl261s`(*B)8ObM5lGGP0-RIzPtG73npC>Ta3+= zT+UFoH?7@htT4>~J8c1-O{Cu}WG8$kqql|)`=`vroMN6=RRWrBC3^$%ZiL$eXfWL( z!?)OQ9V2}~_iX$}xwtx|95wnD_jpCFSz6GWJ-b*TZS5b@^js!&^Q&G2X+!I_bfvWn z|3W!I=6|;aK*d9{Uocsr5*PA?#sh5ru7Ihu7|eEzLLIeHh7DLo*`#K>+zrZ8<5R`7 z!|G%}-j7I`Qx25s^%W7ItB+Nf!@IN&F@L)uJ~ipmdGPPn0H_$Q^97RwftrH{ztFhR zg}>AGPnP=l{~k+C0gUQ9j8RKTW)Np`bxT(P;4hSuruTPi094%S(e`gl7BQTP^}f(} zQ0(6oK!QYShL?XvDL}&k%fRmTx%l6()FQ6g_uQuq-v4Ik^OG4+E0vPhATuWgn>%u= zN{tKOOjEHjafXh?3pKWjMv=~f$&Nb}@Bb$E>4Pkf!(d%ZmR@ixYG_gi?OZcZa^HSp zh)2&y)${w=nzw~xK0z{VJQmkqs61v%lSYt;g2m+0WMNsVoW^v#Pq!sEM4dG$Jv{&W&~rt zn4KQ%n3_0jCdaNK{rdWShOe&U7qGGRz2N6v>aDu$kWYVj-#=P$i|L;K|M~ECDmF~( z{i0PQqrMl? zI~`&h_%0X=scG@z~__P(%Oli8&{?-|AYOWGXh%_`=$X!j z$}>UuX~(Gh+w11|t=NlFx5}nTSJ2#K|)jZSvk}%;XDZBxY;vz|7@oH865>Z>qQ zLOQP{xe-&!3|JLX0eC zJrBAk8>A|}U?96gW)wJ4*y1o!GvWzyGO>YV4mIsY=$xV=RB4}%G6z@7`1uOrl_Av4 zE2X&mvb>rrOr`o?<{v#$TqXD!Zt3BbT1tqi?)u&xGRhG(q2HS6kO}zyC&;zQ!PO*N zx%K7`{2#WYwAJ*m`hV^5$4AwPk~bOKqoePwzFG!2RDhFB9qIjC>Zfw08&4Rhr>8+UQ1#>goEeq2VL)au~p&ESL;><530F z-~~7go{;Sf@*wH^w^xTqG$jQsP)I1&`8lg-w6X4fzmd6)GxEmdg?hGf;+7ufo_M?4 z?t(sSXlTtY1>A)E!B12FO*X13WXs^8cumtbKuSO{nykS8#mDzV?p7%d@> zI+oUOJNR*B6dPQG1e-4vbom{CqPl@L14O5Zn_LSj%4P(P8O>*}`a zVKvhp^KEK-ENhoVuD5|eP#}}l3p9j!Mp&!B<- z3b_e3RbMKfPDFfuPJxOu`5dD37o_wA`1s2ljPa3i0fCtOaXfVNssQK_0`&0Z6$X#o zrXQ~&ED^-_=kNI;>}oWn_i8Z_jqH3!!cmB2rK;wDK@b=zSr>M;NNNi5D2;^o8O#TT*aZR zYo=8Ni)5m?CrP> zv0-6Y)MjoD8_gEaKiL?}Bma6SbhTahF`4;D4a>yxl6Jx8Kym%d~6hOl}q zpdx&5<5P8=Ih{>YHUh){kXmN1IkdXoQ+g#% z;g~j!5+WcAS{r1*KVC#Kba5Bu!aqr3vF-BEntLCIPr3)RFy_ggo0k~DbR&ylfRs0L zgEKOH-I5JOV%mxyishQCM_Ir4wC6ta`ad*cFzwzSV+@lP;tBP0RI}Uw{s%7yga`PrM7v{*H2gfS~Zd3r7Fn zMVlbAqv|N3b?{n=!EuDv#Jlsbb^fomnq$D8wi?FdefwjLXMlPs(c6=AH6MP}rv~Hl zr_J*FCFipZzP>SeAj8toR?^&5*z|Q4C&wlL@$31)O-&bWEDz?*DgKp|P;O}y{OAid|k}R z%G$LZA0zi$j*qw+Klp$=V+jfE+ROO;_`3_oHuO(AEbmDFdRBPpsCyf-&n@*q!kKa# z(@|0PzJP%N<DRHL;rid$};h)fzdIu2_sL8{GW* z4l3c9Z%CX<0C~^A(=?WvIWBiC49M>Y1MZ{in#<#z5v8QC5;0x|sPQ!}L)w!CZ|-h0 zUz9Eg<(AaEG{o5KKSMI`H1s>0=Dcw~h=AVhV%;P;Qm)Maw47*C)2#-JJRmOG0uw4XjIiP}Aja;It zG3m+cq=X^q0B{g!(d@7WGkp+#7LJo%&U#{9OAlWrzNY4_v8u%Tcx6wW`i%^-@t&k7 zU4_vWT2m>iFRdd<;~1ynB{zYZ&T>+E?$b11wOQlvnJ2EHx6X1@!(d+ck3r*@y4R>J zM&Y=LxJ=d?_QsPFp@4ucl>Ap7!LF%$l_n_Fr;N~r9$>xfDvZmCjg_Z9`%YwvY;#D$YOL~KI!TRG9~zqV@!cdk}RlU=$wk$WAn3K zQb#KK7I>fQvV>jD1l>;Ec-FWn7j+#uDVv?a){!(?cnHJv&khIo1!s&dX4@EZ*7=Hl z$e^e{dy6j1)`*t{Ci4R9MstC-W!TUSQaegiY=+IwUhVXGPR}_JLat2c-HK;{*51dw zjTnQ|gXhYm$6;=K-kYAy)n^on2|E*n>V7c46Ubq^mQwE?Hm+|fMNq9%J&?CY&{COP z6g#x?qD~h99`$N&y^^R^Ka;Cti?oazJS#l6YoIUNCY(9iH@=Ka9bt`Z#2pu+gDOYw zi}_EsfwF-gP4Z!pBYJ&Dg*v6umY0 zXh>p)6_)cCeNwYGbYw|G%IC&qINj z-HRA(b~1Gs-1r-xpU;RX=eneV---rw(Dn;=9L95MNbG0y)8#;9@kPvVB&LRL#MYS= zR=lmXj~cq{S4RJj3IA&fj&& zW^vqEQHx)py_Tr_ixz@1rLPIG`yJiWZw2nTfIWzehy|%UI{?lYuanN7TEUyuj2Og` ziJb!<7q$_-RdwVHgH5_sjFo4fe(d!8*lntGC2i!g`vt7KyX%_H+cCL{`I!kIdTKu? z&U5oyr79UamlByX0`06I4_OnZyW#Z{UZH)z+?}GG?hF4j^W_J6HtKw_?-i?N!pPr=?N3xkb?b|Hzq>O7N^JV$c0^LSmuJcgb>(W1_jW(Xk#I7gb+S zORqk~pHumM6#zbqOtSj%29~B;a8FG7| zaNu^IH6rKoi*Ac6MvTa>I&yn`G{NVGj|3GyLWTq|yuF{2|73JIYvbn^u`lek(>iqG zYqdk>u9iH z0?L&t2quTF22;GF0xid7M7axd>L#IJc*sPCuw5$zJeT^$EGK(ezA~^g<`GZ{^p6#) z@k~R9{A@z&;K3r^1P20~yq6})k+h&=O0|0u7l%;s0|>TZ4sZml&z-DliBX2r8j@6N zF?eIPs?Q%cXP_#T>;CXXW5W+{fvy9yemWiqG|<{&rWL^V*?FL(Z_X8%AK8~nR%@B!YYdo`~EWC~TCPvxX#YQXL+a=aijpjV&KI?uV?1Ea%R?5t)tmYbQ%pHE)#Z!K4W4O6g?sR?i*)z(_ z6-<;>HIzz?=w9uqq17)tPh5WZc@-C79kA-~Hpdfjw}!rLO{YfQ26BSQ^ZTyE<;BE` zNOT$V1iAMfu70i4r}Cuf8Q3>vC#N%WTsN*l(7bh1b*$4`XlT?lMVBlSUAevOVg*hWlgN-Rcb#&FMw^dd_9+zLvCWKiF+U5M`AH2szuKUH>V54o(vt=zb z(5k~RXG!l%LsI?hQ1GX(pRUzErWY-=0YIIY0f*v>Ves~Hso7YBFg zjI{BFs-qH~I|4wu!=v1?2T@NLZr-{kSf40PV&Zu&djEijcjlSx3;rN-|0#A2h4}wMT80->B1i}S zxZn2|7|sEztZ8Mc=;P5uZ$#$hEt zdc?O_Fwb(m7L7&ZL5Zzc2dW>-EZ$d`_b071HTTmY_7SFH26qWeogx@GZV*2~`Cr8;^XuA63 zdRAOgv=2*|6zYemMlJ-}zUEcgl=*}Bi)P!J`Unthlevkvdex4B5XoId4l*FU#3bKE zCv|Bd+-;$Mf39D=rK%_+p-!nbG3o=uCwA5DJBajY?d8ucO4*}4>Oh$uEf=^%P}hIO zNMgvXiTyqdW*%p^u~EY13O3l+Qeo0UJ0NQpKAgbqyWm^?R5bl(jK}M8>Gkd=hohbx z?&DWh8pa3OMZMKSZjiq4yBBFhX!ehn2Kj6H`+vzw>suKQ4K- z5Xo?YpSm5nkM(%)$YZ@cnGn$(Ac+zD<0xF#4k!g3_+f@K4gJ(EPZoiCfHJj%f$m-X z?3qda{6mw+nCvQtEa_^#w&a(AWG6$Y(#t0mT>mNPyAxx&k^WwHG_nm^*ubJ~~1AEhYic(*KQ`I(f6F>1e2S zTA*h5P?{s;tvqGdvK>`-1pzO#w7z-t{*4a&=NoVjUHyi(ePR%&z+!O>0f)+!_2xX% zwQP1l7zThn=>HQWDBHQ;Ijs=@aJpSinHO8I(>!rV@Wj^Ci%9{f69`?_AwY$^I~|4U zc~x5v_8T(xmCcDTk!c z^W|x}k^JVV+b6OO@@o2jahOubQ;`LoojqVDAFqOE?*qnBveX9)*}RGs#F~$1|8sj= zFYNYR)_>ulU)|P9&WrD~&IcqTYzc0xKL%ZWQcx5=p`_KXvn|lZKr7audts zv7C+7y%t_;+CG+P+l^^R=WhpW$#5acI6$?@0_ZuKGKKIe5iRIZL2+G65e}{x-m(_IVkB_KjF!7tbVs?+uS7!2f z2awH}jHFGzFIve|0a_2}JW4mqANLf{(89@oXDRC3f>m;X1Ej zK-&1AhUaj=9O|YHXZhds$08FSQ2#Xv*D`b%baaPjekF1Gn~{7ebcr?pDjJ+>BjKxe zY*Vx#PPOs*8}Ik%-5?4}{Bq5(s}}OA;_v~yMQSFf+-T*BOlnNx!+9-rKM}cdrt(8( z_U7VBYHH=5<{#_;fqv2vXEF&tpacd9l=P{ifSXoFVgNH!B=fs>CE^Bn6%Rlx)Hj`?PLqOR5OpyKD1 zA2!xW`T1xe4XsfjXR;W}J)4f*n8}~FlyVvE(13SrU7zV8sd%>Xy9<7ah|a?@OnO{( zXgv}+{cQG`huq}cZj0hRTbP3hazWiqkj}!62s;m%+DIoE9w$}6G zR%)LROoOF{G~+YG2eS+92vt;n(yH}Oh(vX1Ltn2g8aexocq_YBKR;hETPeC*yL5Jb zQn+M`m5eEVXM^#SifHpE(ChrCv%a2U_D1MCX09A+1xGeS`ZFxhA(4oopZ&~wMa}Bc z!>CPJPt8poUPj1-m|)kDk+H{U{Z+YLlyd*gjFK)nid#|?KS$a{n<+d^$5BoEdUL+z z8Dwb$tsj(ijO^^O$fb))=qJUf*|O}o;-NRJWfV^B*~<@9#F}2;YvDa7O-3+LC19p! zUeQPLhJTJ%Lz5z+-f6&ob^u+kb&YzmbieJGeh7B{^_dhT7DX`<-l*8tr@pzF!_cy+ z6YfkzZk~jFUR_s*=8l!kgpIGxwhXuuLr3pba#v^uL?LXx6PuL|em|ly&RZ7e0Rf{Q zO@l+t34S5>oCu`X5?LOj#=*lVKos1l+LW)24|j=WCKPDvr@yHB0(vbLBbxI;_#kG2 z5Yl-GqtL3k&zCXTj0#7QRvMlblx%qdRFC}euW+?$D$=}u>o1P<3XJeV?#&@J<|_ig zqmw7UtPdcwmHWSjmw$oi0P;XRWwAc!wF}nHt3R$ef9gJ8{31qPa1O<7=Ko-hd1R{t z><^w+>SMlBc9^spfFWJA!H8!~t%&gGeR@yxFStd;jX|ZcEL;nXu0s=We|T`-1%XbK zcYHrp9ln#CIqt_ut#LL%$zO5IZ?d;AmgLB2e+P5CqIs-l{qd2>Rr($M%ylhy4Gh6n zy^dnX{FMZ0=G%2bN;TGhljvjyT~4(eWI0jK(W0v;o`h6F2xzQ>*3!LNnloQZ%EJ1F z=HOydEt3uGpW8zV97{76ZuhyQch=_``6^h|pYN!+Rvtbc*0h4#U1y! zt4Bv&DhtWiDkjVQCLY}^Sv`q!BcHZS$PYhJB&(n9b2^NMt>RNPTRL6jcHO&qi|njE z|C4({zA@z{(x!qi&n4U}%!#VVY&I?y?X@2EGqAO>optEhxV%r&QD>CdnP+ftCtD;- z{P?U;3#;2+OQ>tV)mur%)y_->bG9>!tXwjrezKo){fwH7E3?T3emfS9oeV0v4Q2M` zXGecG@9x7;C;hhRoC@CCtM!J7=2yAYYpZ@8EGL#cRtQyNt>=AK3!co(!fl6PiuzSEM9E9ZG9+QJC30?5$4h1_j9M<^+BM_ zVa`q8R)U^yfH;s0^gQjq+XcHR4LFM#cZ9WU9`N}Si)>Nn=draC?@lWM$9OmV63^~* z8Dq5lyH+>ihBxiON;1xG4bZuD(Z(-$0hW0cMjN;DFM9fk`7Rvvz%kPgiTE0P7%55D)9pV{T>&ToPZF928TETb9UL zq~a~HOVcEzVMwT_;5 zGpk!CyjMh1iqh&C!H6$rb%n+COQ-`*q&=U}Hp4~``Q=S}OrCE<&;^^oH{jP-_iS#; zV=pnWXpf7mb4gYFA7VlKxw$d-`t4XO`nq||S=h`J3%faQne0zBT|UJLfO2~RUSc4q~NMyi`fAmlgOP6vR9{z7E7|46*`R4?f}nHye}q%>-sW zTW9FUBvn(lw+3ems3m^(^gmYsS3-JSnIYXdpmfmh^u05z1mMJ91hkn~Gv&0SFN5~) z&#Tl}l0MtkYv~#4gzP_u2@o|q)(`4mmRLZhCbyd`uBeftZ_8it-++AmT)TRvm-{Mx z;)muDuQ;ua(a0xwj1jPdyoaG~@3gl&RG;)T!v0f|g-XgYS}Hzr!a*)!zM*ibvWO^s z`!-kv`4BpRVDc$pb^5UNvX|GQzFoMPT#wd4!b;4L+XN`)!D~}47meiEZ&i0^0EaSdiH*4X>-=N7FIiyPcl{^)+}m58@=l~U#F17OqLu8%&)|N7^N{Z+MRPt& zCgak@AXZ=m3d0)vsaC#oEHL8xqL_$0>2o_8RDE@qUe@$WMTe|6=12XMRGe>wV6(Fp z>hkou5v2@0&z8uO-mNXh<&Re1>3J5#XRQ~d0JPu*1wV%&>sgx|8X z<5~n3dwpO3G-$1@UiS8y`mjoB9SOPc^EXYtnb_10Tb=o&x2IEzH`x&3XbKSAaKJfd z@q_yjM5wxYP)+2exY|#+^b^Zav|`>F>bgRy0PN> zT&LB9`W^wJ!Qkzx^B8ScvlEsa)Po7YQrIT~Ac?fYULJiF6ka61hkCjwNCEgbixlLp zhU1-qNz-LifKMXTWH!gE3Wx}zjsQk5w*eVbw28kk?L-FtQzo%iSM=e&HY?60qSlF9 zV(w?KoLs9fFo#1 zpabO`3lO@J^&%4y*##E->EriB2P5~;))-l3uOqQ7s8#h=kyUnFRJ=HtlWF>g^6j98 z3S)3VgHQT^QQUlU2tnM7RAF+QqT=V5glTbUq#l7&2qXnOJrp-oQOW`AM1-i)$yADK z#iy_%1!^?bBng%5S!hom$~c5Vtn9vxQV{5G(;Z}T-T3gaeAh*ffI4daSwrBH*TSmW z`DRGs8J8^*irz$pY5pN;JJKJL7DwJ`i=Bp$Ql@;d1jqlJ=;^tLMg0}POyOYW6?GsK z;A5o0e6n!2O-R2BL3tWJFp8H<16M;hA$JSQv{Jb9CeI(0oIDD38#Qati8Ip z6JQnDWxV(^RHGUz-B4sq?mAVxf|dlL;wXjoMdS=*cUv}U&4}^fJ0_Vp>b?wljpD2` z&v-T9dY97WXMDA8w8XFe{e3EPn^sCAs8$X{jjdY*MfAtu`3iY@)Qxnr-CFAbxtBtqrOzr z-pLqAK`g^ykNfj%>2Hb$63PWNR7oFJHQ<`4%THUwZ(SHiBYuROk6CXHBbYALuu6|^ zbQWN(#pCRAx%rFHYiK7Cmney7SOe13fQWjy)(8H?#I4l{!3Ztiv5q@*(IauW z8a%_>_(b2h$5}Oh2c%iuY~+~M>U^ymdgOE`Vx1BOc5~2(0&SUhp^GQ8!fjf37+d4- zwVUL#TEVUgEB_xDbR2ULK!?BD?7u^YEfo4Iyxog0h)LMO24$wd#7oaGtQxiDf=63L zntyS@xN(g{!0UIAfHQ+9Ck)8NlqB;%u-U$!o!Ei^sDdwqLuZf72JlTCQ~{(kTssn4 z;tK(z%A-Kbvg)mG0*V8EV`MC*QdyBY>sC)uvd({fMm zp6$^$bG)lqhUPS|aQxK5@oIZd;R%>Vaa2ixd%v+aCd7hKOX9-aOlAx+=k7MbX5N1W zaLnJkB_JDa$srSX6Rw9~wF-p8K>+%WDZk8}Ra|})adc|R7~R2I&RWjyfO*sgEiXJ? zAK7@Eg;YIRTD93Xf122wwVhN*@W)u1k|QALF*W?kw5VQ2ugCyx?hCG;B#9sNdEzG= zwu2$k=bFYXjN%$(^Zg4~+}`!JpEy_D(~A(^D+96;-fmPfW;6V<58Er|dOY86iN&3R zD(!w7t4}Gus;xMXdDXtWFAQ7Ft+N?Fzw9aQm{tF+=D{7@hxDuNU6)GtsDU`&JKDS* zJ3Ts;;%9VJqpf(8`hg$lXPzfUlP8b}1{@Ny1<3k$L>oymwzs0Hh;3V52DGn;^r8iS>=KD)kHVE1?t z`9T5m>R^IUBsMB9O_+vnAo|@XJX+-D0l~Llys1Spg@A%u9n= z2`h3#BU{(WlkiA`6zEy4q*19NSifw&>ef-C>xqWN3|9Q*Re=7NRN@q(%klVU8%xyAPk=H*|;xbQ01KEHetu}HW>a;j#m z$IA^|qvjSfAZTn($k{{;hk1q9T8GZUpj-5Iu*jAE45wucML6T}@&Mygf6xh5YotV? z;zIk2ytSD^U*Iet;+rqtOqmA#vyd?b1(kwzu0%SM?_=}Iw9ys0aU*-@36n~qWa-j7 zgTlFl(0+6wA(Q*Mr_LR&cRp6?3M7pt_wNyg-N_ck5MfUlw+Q2*wW~8epYGQ#rGNrH zHK}`IBAdUu=-F|PF0r8iDK4f)j`OP_!;Dnx1yMGx8Y$WV5@m5|=;Y0rqdK-QVY@AV z($;sd_+nVyboP8Mn)`;2lWsf;=3ZoX`n@V7O7-|gpvE&z5fdn{()xgT-eVYg`WHg3 zag@|D!XxU5mEVG}K`zSalIg6jjO`^50%(UoJPjKPZi8c=*@%&-_1%py^t>l;^!M!F zE3?p7G^pV-SXGBtqnm5@xY0LOOB}(QEA(7=BFY+(vA4!jr~XX+qOF{*l#5$ES1+Cj zBbKiYx*k|Jp-ViFf`|z$R9IkZhIJ}!vEW5tEv_9yfXCABj!CWF?ECSi>fxmqnhthV z=$4STokhUkn&9h%TmQ0Ord#1IMP#^ap}Y_!?2^ z%v)K1@rk;EMKs9g0ImmeN1G(%?Hq{QY}sH<{wYh#Z^gf4GS>ruJDmEh{XWD+osCVM z@Ex)?i-RHAIwdl}6=-{_5D8v1V|UV<#!Mz|e#{YG|Q1t5=6ADmZ58%8+W09hWk|c5Vij3ZRor zu*i6YTL#NmMsItY?NPtqJA1|L{Vi`Y^~CKL3yUwgFR@nIQuiX3(_;s>7@FNhB6<*J4L2}a5JLvP0t4qdgCz5o0y8Qs*LBJ?9Tg>jC~FJiNjLTkr8 zE~0rCg|Bn1ALmZ0PNQG7-AH;M4;L@|N-~}i2e05)@Ev8D(}>B$ebhpEj0EW(*#Cf8 ze}sg01|F6s;UHwA>=Yv7Gw-%hBQ7Mu%jQ1A z-PJr1DM1i9s!u?qZWjNRyG7#WN}b1y;n}!7PzCE^7J_M>4ZrnEOVBP=qhj9~4QgN_ zbMi`ZxIt$J;vg-<-A|NRRWD8ui3Z#I&S{0 zMVxjkUIxObsFMl!>g&PYr?dr&MB|k@$G?bUP@nt4$B4vRiBupd_FcpbhRn>#QCWYL zWKVNVcG&$HqsQhB5K?ziQ;j)+tH}%pf%KpH3_Oh)Wc{AA2ZB}m-@b54jc(pe4Y014 zb4kmrLcV=!rhiJHhfbi1nc8T6H0FXl3pr7p#8f&ooV#XGgw(_>{mrmY;s3|5{+~50 zMU~>ed7-e1A9qX_6D3~ys1e*k++gsvV3$0Sr70sRi84?4sh<|Y3`?tLUtWzieenZ& z^mcw0*~lHyVxP?0pU*Ay-gBnsYEU7ILMWPEw=r3IPBCT`Z$J95C}z{#LzwDObN{sE zVVha!A2d|33DBAMvi7o6pdGqS)#t{a=y%JyI;{GyT{ZM2YkkyQzM$w{_XF;2I8dB% znLo5~ioBIbn=Ke)zV$_32K>Ik@G z0blo#`N+f^Qe*>JJ2$RmSM~y*f|dFf&Shvc*vybAeRZI@qABBqKag4i|V@y zs*##6ooGBt0)Ss_u}mf7Kqp$8V>UyD+LUu_3q7}Z1a_LB^Z(<$L%k-lp6@!7T*aH5 zFFCa7IvY!l{^n##>U6I8yL@-8cl1y8evPbk#O2-g&E7u+Gb*Qeex$IVxyt27Ik>KC zZ!?UQCz0Z(Yd;pr=;qZF>Vy|0YlO5MtI@Vy6y?sn#YsbX!6Egapr_2BSKBxMtbzO^g9nMcnu=&}h(tff!=zLn|J)bR0?^zc_Yv)?Dj zDI{nr8PO1X=u2B^p*<#);>b=R^wax(XDbp9u|F+U(?H@Uj1gT% zDaAN${&O{j^_z}^jA^KYYF&!W&`^-dKNI-ZVQek*-7LJZh@@u+o!wAr_(LMNT=}zG z*|%oA=7R^4<5G-2T%U1c8VPdDojMV!r!*@R`Wk%aH(?QeU;B+ZJQvth?XG;Wc4Ys# zbI;A+U+B;048MXUKu7oT?&h>AB^&Q4j&4f-ebaoh2i-99%mVHxz@u*+_qwy0i zK)SEXG)oH*%=&2^ahgxWA~cb~7<&mW3ev=Epr|u!R5j+hQ}7z+i8ALQprC(8GntpI zRxI!ar0F6KZ%znrOkA4A*Hs`zhbmfWuED=Ftay8@=~CB*P%30{wLZ*&=>!srv)k$7 zKybtRxy9*ysR(DqNbH`-MF&uTTK0RmI9wBhd{0_XA*-?9f$MF3BkM0%DD3i_^#=3q zV#Y~$NT5KUOc!$jyZ;Zy`xStYTo1t=tW~tFN*5ToeliGL`%bOv&kc+>xm3Jyh>Bbb z8oML80v3LYWy-8^9>^h{)zW`4aN|dN@-Ay`^YGAP--GMVOoBIG6O`sxo}Se~3pEZk z+;sM7&e)!Rp;XyGaziTvr4!jBiz=~AtWK72<&+#aHJpWPK^<_|PMkR!D0I^mAs54< zD#wrWllxLpLRj|wI!>1Ha2{JqkX|?NcAv&0t0o_Z*%-XA-R#LXHl4IUj}fD0b^=o3 znogr71?ZO)4Np!-N0+#Rcj&TuPqlcAS)Wf`=i6pLm#3kFEV~Ky;VvUj>27JHs0t&U zna@XyfO>7YlEyw}VDhcntOvNNH zV)q^L^qc&fwU?|tqh>*<0WW@%3!Y4Q<6;tnp%`}PAQ^(1X?N<|ElAfs?WfTj*}aKkAJa3FTXF*KWu z`ljhk8D?u`AQ@kU>{^tMyYhum2B|IjKYZOJjtnl}k-VLX3@N>sj}-zAU5FWb*gWE~ z??B3w*Z9&A`(&28Y|G9k4W;{7y!q5M$Hdz0pH*aW+!eP30KVopGGt z?x#T+;VwR780*Fgho4p2yKh)Wm7qMrL)^LhF{-E!&r0`wcB(yj+eP9cPjj8}5cVn# zo1XToRDP(PRa!R!wf>m~inT@lK5#B3W}w8to19JaYe}NMxfij|&qgX=QV_7R>+B6( zFI(Q5F6OTn=R8`TJS{QCeWIk=IE$^U_j?ZRC7N}pe5gTmNN%!$gB2^qVGDU;OH??Y zo7yU8^J7zYi-lQ=k<&-ll@jCnWrqnD)UAah=`o&X;^cOXl5X$*_#$RU#l59IT}a?3 zRp$kn(Hgn%;n`}wQ;z8eR6GEU8A8*ocj}FbB(Nn3HZ+Q|jgnIbSd7;%5mu}uognT; zF&pdAUG`7E38du$^oY<%(a?tr*vZqRCEXGWLg&G*$zSgcJV?ElZHdtz8O{!s+M2-X z=OW(f6DAsymhdHzGZfM0{5Di4U?@k;Ka$Ep!qe(NRa~iUgfu@38}uOP7>=`=qBIQZ zL(Y&hAuyIWUy-l*Prv<**6oz^FX=K5GQ92@^4U9s*$Yny{g^*4?W5T0h(Nc2t;GMA zh`Snc31tMd=+9u@7bLgy$|j_J6VlsErrYPt_J5=cpmn<``5%A#k7(^t*)!yz`d9I0 zE!_r0#OsSASZr-1D#M`B4zp=Ml+bR{mn3sH++R!ki)}4>5>yVYr%CHAP}$;%^;QGp zM0B}hqzcE#&jiG`K8Ki) zZN@$CL|e>gNGDTir>Z_+x$W3ruxEp+;pmP2{6Qt_sY>e+4h1r+_mlItu1%BOdL?M7 zT=rBwVOmw^<>ow0GLpr+sO!mp+IiH&-sf5LcC#EmjZHlG-ivwuh!n`hBbnlH- zs#{=14YND*8TC%5s&i@~hZF?b-llM`6>93|RV2?d^GU&joYUwKvLdCfJf? z_U4#c`1*Te7;zi~mHH{YaVJG>l(%So9qZh+aR3IOM5QLo0nA+G}q>4I6 z)XVW$u@QEDBWwu$i{|bG+H)v$Y9E*oRQGv49H?CY{>;&d7$%QHrw?*Y*ccO`OLnjp zR89<48i92jx0OuiBc$|=JcD7~GTWP?8H+ubtZy-!sq{s>$dim+E6;aKi25mEeQQSt z`~|SD-IU~9-a8D7<{CcpYlha4!WLS#ZA96CIetrOb$5Ag$l@N*Fw`6{sjiJJn~0vs zbl7qd)GG`EFw^F?wX{Js&)FHFGaXj{%IBYcV@q$d0kaCy_NUAMF12566z+nFOiyOU zEMo-?mJt8Ixn%bzFK{GhyC4s8zP=JGJ+Wo|=aj06n;^vdlxFYZkwV2t2`I8?TOH?! z3L$D3MTrK-w_+-wT^Gz8PzwQr&8sY}I(>KkR4P9ta!AUBexE#@*?_~5M^gPopIpQb zW$7#fzX^-P8z8Zd{gkX+!sCzW?@?86DqCO2&nkfM{uU{q2SUzqV0+lF7N;``q3Skd zfVZjEBCK3vY)rC?%MvN#&jyxmetMX?DAdYk(4Nblc!lGjfVJ<_OZ+%ubACExlGe<- z-atk^tc`jqJ9g$KXKmw*8~UWjU;sV#uzO^p-BNLCv3te#0mBl>%Om-v*6nvhv8i>p zkgO1z2#w@`!U$#1VRh)acgNnFM4Y*FA9lr!6n2H{WV6)d_5Dpd49#uNLD_G2(*2qy zhqaInnFm?C4EoG6$ zmje=pS*{tW5`E&Uv5%G=Syr_!a)N&zRbPS5uwBH+M`aa{@DGYkr+g zq9LHM?o+FH*Wh4a*9?vA#_I{9eqifmuwxM0GKYq`f7PRN)o(m@Cl7nx*ERQWat0I+?z)=m2G>YRa#0} zHWW6XG|5p^R60APkt9{3pn^t4r6&T?Xb_}NAS7jr(nUn+NmLY6ng~cA66p+r5c<$Z z2oNAZ2q6jS-?r-9bI-Z&eD{tw-uK@4#$fOVti9)4zxkVUtv%OVYw668CLJ5j@51%H zAP&$lJvM*uq;*hwa?q4+cGf*J|IbU>mP2JAl82KOzpUS6gU;;r?81YKdxmI8$oQmL z8{?)+!}$|75~MjGwV7x#jT9aN3zGg5k3rD)uDqObci?nFAJKe36t%#uHi_|*;?sKU z=3*ygBgcyoNq(69ag%f=Y(RD8X&YHPnQi`13_N*orN69ykDX$VT{Ut$x)@oE+>Vhn zTDW+8vn|InA{$$SGDyAUe?B`KRt5s>;6F8{#j_5YXm%vvLxU5wGs~>W(C|XqzZymU z^`DGl8rzx`f8;y*jUGo**xv@eqtmLHL24@Un7*LL@qci~cmV3oQ8T99pj;gS%xckv zXf1x2eNs{IJE9aXev5DPdi=b}^iMp5mEYAd5mh_mg}+-K<1Z$la?FCS8_;bm%xx0e zoORv7HGM3Txz}O+a8fJwQ>y>eWE$XEUm3uYb+n=;BabCxk1n@{<~X-Fw}x-sdVK@G ztVWbXllyet6T2~m<$pfwK*|^Rfg8P!s4^d!#_HO9Uc$Ui4w>jLFacLF)u4jEm|8JWzi!D{?-_ddG>%ahHvWl^A`oEK@BT3<$Xfn5Z$#J_EHuF@E#K5wlCMGQ zngYu^!RsbyQ|5Frf5x1SE|P)-XyWncF%21U8)Kpr#!;qGgh)z@m*C8AxMdrhWkXpr zZCsVOWYfI`HHuUvP~stnubi+w0I;#Cu+WVZS1%=?N(Rf46w zp0515+=y6ls?TqWdS;Kz4w;>w<~#^zWylz{lZHhvweCHNYS0>A`w}7VMMTU2hwIRm zbKom4XWApMstC^5QmZi$`-!k#RLhMX5yim8+-*^SZ~~hOoU|7Jk=D)Jl!6KT$|-{A zV~AW&W}i5r>_te!xV+MNN9JuSOiPECLXeXOm%N7G&WJn>1`8r!zLFB$;vPz0mAJ*B zN$Cuxq_9|CgR>dx@oXx8JU)# zktDC?t>QAeE`l>b79MhueEoUXz$?3CD}~sQ{)*$spje=g7=s>R43M(9PML|%079pm zI=9+nx0jV!XLE**NxL+W^J#^T+YXJ!Yy{$GSQ9K22cE2!A(vl!=*V`<{@7 z&4=~A^qp?3=1n2Ry2>Bcc4C;AOToG_LiW>oSv8zyv1R`)x4k|+2S`@@ zH1({J=68f`9~w(jdYVoc#>9!w!A3Dwp)pDChAJl3&fYhU*yM~6*w%^FxL*v0fs0)) zjphIR#W8J!K9TI$8q^y4q)*Z;N62J;V%Is0+k)mE#4=;F1m72EXcoq3u;h^%CThvsdk zhA+oLByt1Zw`HC=bMx9%&5sZB(89pFU`vaY54GosD(+k^diu-Z7~R%ibMF`-%?5lD z$Ll5#<8?Ev5Xznn0qv{tS?Fx`?d$0cznhZA4yaQxw|V%37)O*d@n)+qzbu zAP=0vdfXH_c z_r0loenuYV1V>E2dmiI1LmCB&EcrUt4D|6utLFLg^c>VdaVqMzWF;$b-MviyCtY86 zwz;;`)a{NoWMyoVG1yh6y8*0D=+pE&7~zZlP2@UZWB=~$I&jM1hsKnpVE{%Z-`Y`_ zO_H^w^KTMVIIj5HW&`!D6ccwa-bg`q?^d(UzP&ilO3KI6$$K^!NqaR3Qv=ld`}fjr z5LA$%0Oi!(h4ZXBr$N@~_2()Z{j!Van0F^pp^F|-I)$kp=D6r>EbOtJ?|H_M3U_W?8`)oQFK{c7RgyBr-UZ8;w%0;BVfy256cqz7 zj0Z#i!?>TkH|h<2y=a*xv$Zsf#sCbfYeRoaIzr-GhHR~QcFzo$WybF@kZwEPLQ2!l zLxT#&N**Q~lIMnK_d?V~^wF8rJ^=7Y1o*L44p*19`9Pk;lDiceM+JiC$nE^|?%0p+eZ6hG`5A+-y$` zzVrA+l?yIj1!Ih=Tc2lx?b16BmL38_YL}jqG8R0;-l`|K1XQ6VLN3bx*EzLz`?=gF zq8g<O0K+#$`gprr@Hx=hGIzUD>&+M zE2WDCmK);Ju`?RDc33o9YtH@wWfmO$04Ko*TerZDMylgCpWCm8wi> zbaxD9QAHfI@8gXv88c}ec-*b2eIPr98VOGi z+R-iRkof^IB#&guPdQkLCN4^3&iI2tM~G1G`LAnYfX2%v0P~l5JsAR?$Jpj%PLHLu z;+i=@`~Q?-Yos%&A<~+BZk)jwxm9b2Y>(}H(;ot4E;4KU ztixKk=K+fppUY~M0R|ljJDoWXe>yHn)Hg!;m>l4$Gqo(6;#A?`jjh;8F1pJec74ny zd&-!HhUC-Kdy)+;mp=?T&w)YmN7b+3o+_ixYREtv22R4Rp7k<6e-lDm>&B}K!7MW` zp8utEGOY*m(B*f(V85o=i@|#CLR)wauVqkYOk~3=i*b)JD?N4K=9P=b$ZTE0&guP$ zvRF}A=eAE(FG5ag%O86jQ}k8eS78>s{%BCvkV8AisQ0nd&9!W_J+P#2b=oHD(sbp9 z(BnW_Y=yvaNbSKWcnlMb=ok4%DUC9 zuaq?TFc*lsx0SIzyiYTq>wn5Xo)2+Q~Q zoWT)sal(|eXmsCV859)v&#L{|sVAC!p@~i9Q_QX*!$U6ogz-e6tAYPcH75?Mxc^d7 zlCobLNxn!(3bYNZXpH|@u~P0A_;}zca=%X@9zgA%R0G%0Oh#*L6^6AVn?sth(*Exn z{9Dz$qR5|JT2qU^!|o@gev6@MPezEj$4*n#m^*VQ&zy3 zre!2mk$Kb$|y(4Gn2ao*FB5)u>H* zK$RNdrJW)yQv^313C&>^yvlr8dFHgKE<|{o8r79x9UqO}ngi*9E}V{=zz>!~ZPxyq$(7>k(r#!-i^ zV)^aI?mgLzxx_FohgD?}LK){4R@tob0r+dRSGVge=b6|Pq09MGxVkKl7x!mp@|2r|S z@F2-#<(m$}L$<@witi37oOEiy&+{|`4H5Xl8STHQ8(H(OUiH6+y8p$WUDO$rv?iY9*z)Sz4~N26i$k=aF&{^;Ku4%ZT>tL-h<)&Pq}uwgNXnm-Q>jMe)Y` zZO_p)9JIn5q(8EuUQze^d7nbAT8ZcN^>EBA+y`cXl}FWq8?%(>t|B8) zIuBo%QDc0bc3LcK(z(kB@!1KhBtmAi-)!2pmH(F0UxpGV-|wgs5_d0uW>9@1d3>U; z>AKnmDy@by!kr?vAmJVtWjhP1)x4(gzeZhVhAGdDc^I0ZCNpyKs48X14m(mKb8OH7 z0&{-nl0KJwFU$MN3=Ze<_B0r)|8&FwnD?6=T(#A^lKJX#>~7@#0pqL|@14FZ52%<>tOt3U`r?qmtzRA&SJGAdMkL}o2N~J|&@~5EgpH(|u zS>AU1!s?1VIg%MqCQ&qEf8-vL#m*F)xPP`D-ZL@>yC2~X+M2ak?!OQ?M=X4uT)=jlh5o`_n!jQw+<(dd!K8on4N-X*B?JdL}^ZpIQxD` zL4R{xE?Wp`RvGnLQJwT|`#aEo^s(bWch# zLV?42RFg)YEzbD@iM$x)bUuV3Ul38cnTmdVai$5u6v9uZzc;;c-5nA4=$mc->iOgc z&~aVR0x@j~Hs6gZ(x=jYglnc}{zU>34Z3UvMM*mKEJschOPf>giW!h^v6(&9Ej4h)z5N>>FuVqsUNpZ~3`PuI{+`)9tGt-IyH=8B*2BI)_u2P9l&aDB!*9z)}=;IKiqajUAh&Ps3QgzkDc>D z)~y?s7ZYtU$3gJl&)gCc)BIeqO_SZv9cp9fE}3VodQ^LLu0-Ny&oVq8 zpjVAdUpeMzP}?P972AyQ9)I+_LSU+1UfRDj=n#@~;XZHs1C+_a(+}*!IU%o&c8@>! z;_I%a)%O0(iyxP2Td;NjxltcGPCPiyd!#^* zYTY*u_G-l!V@OkJeiq|kxt zqU3<7SC8=maXYL<4=lI<20mxWv?!1n)&LvID{V)8EacQAY2pS$8!l`{77gt)H#S)haG=m58s{(t^a#a8 zsQ7J+Cc^d$8 zdfYdg7w=8=JOT`c_@G? z-+DYRfbXInJ^EJn>McYq0##J@m-(Y$fEX&BX2Gy(t1m%t;sq4!Ong%{*|Gbv^Vhwr@sl;ZqhrK$51IA09?-%qr_ zx{jgELmc8s>hZOM0{9LOvVEs`MZO|^C~VFVz)XHjlC8> z^xSPSPW;Y)QF^f#x~t9gD6bgG6x)a=azL}X3-_RNy83$&|F8`sL+b%SP{6j6^rXiZ z@*3MvQ#yC|tA97rYQR@i8t_ecosoUJA!~ycd98PE5O`7jdY>^;Dms36RqTFhMZIz1 zwT;w!ZOXO^IkTHH*L}Cdr(-CPa@~M!@A|n96?4t0f}UFJe&oAukN>WlG~?gsX5^J2 zLeW>#0EtFeU<`B=>L2rR_WjOo9|({T4){m^lU`0v%k};w0sGD0odC1`;b=;~yK?uE zt<^mX&t74#^a0!XA8rPHC!?dMj=28fw&ckJoZ44A@&9L={(l!dEUDY8)${|xJ2pBw zo4Sd$0@5QEUyPgfk3Y7;hhc_xRHCX8^(AOBZq-dE2g2|5PFwJaeUdoJ>yB>!na?Kl ztR>qRtuKv4zMVT$b%@wZ-}spDm3&=wI9BkKocQy8Bx>5EHQ|r`<_axR;Q<6V2Il;` zB3E^kFR=uIiDQEv2;T_ z1EGCmChpE!q|>5RaY0g82@&FRYwB8KDW!IfNbxL#3)>0ab*fDz)_q^Fkr`#__tfYT zVHa*b4pQuk$$@M>UJq1NP}p~T0|>s_RDY5#@!|N9wP5hESFDTB=tCXX4A*1#rI?hQ z7utLMsVGqUv9+5oSy6*Sg{daZ``0Hbt{Tw1b!5|?ldz*I!)ka-M^C5LuAHyFfA5x+ zzE|V7hWa1r!i;QuNMEaknFj<&joGT@hG6A zW?wE_z|$pQ=8Ta~?A5j9g^r1>7QndNg7e!{sS6ZmHI}5ju}PEYGSkLqIn zG|#Vkq)FfCeGm7l>-3fMr2Pr2v&GlCj+X6*RzBSRbi|Z?BoR^0NP=7OcHG0OYIXAV z0jm3bNLd5h+6qjvrSA?QkErMpfXa{98FaMlksesusyXp&jSWseg;lZ%8(O>s&RD(h z$OdFkT;M%(aq4^Pve2}9FP|UsT=W?G<9{;Pe|<$$!`+-UQ$Oy%8U#r(`ShXDt26mI z9I+v2DP#M9)uE%swMH3^x0f!!FnzIJoBnF?KMVPP%?h7HfB}z^8B3+mtyWv&HX)sE zejWT;_sG{!XX=`tcl>sYquICgO!f|%@erpu@8wE-9W5qd8U-x4Y&h!JdKVn)oluZ0 z|GNnyKdLq@lcCtgWW3yaV{pse9O|~#ASV@AwWC@XP2x=|AEUy!2Se!Eq}*3d4#R9aiUwR1WRDmob{e9#GSlhb7PtR8o3KYK@=YwA59lnn|O=nFUa_F03b%ua2 zPG<}!*!@XF^4Z;xjj$fS7WKZI0$%M{r zBthMfdU8GobGepn9Qoj;a>wb#{7tAOPWyKGbAjCU>(Vf)JE1!)+_<$Y5G!9!tf)Qr z^en_JOwijsnTi-g=YaS%_aSeO#dY$M-?{*6Da!%C-2iXRX0(1K?z=AP``MwgfP>n$ z;NVtF-5eUX4B2=3m?8MLsa}M(!Q-meE^VQFJg6aXm-EeMmDR$^MHTKYm&TDWHIRlW z`<)pJnf$smz209(BiZjp<9_88ZV-DWR-Z%&W%s(wd!_gEbC`dK@dD=^ zE-Zl~b@Y9R(Gp(L$B2kpP>KhYZ)0Zp;ua>jn@qW_coWzk;^j|>3Na$!&ZdTh&iM9M zHRHx)`Y_*VEn;5|JAhe%HH@5^L_ei0$^v1iFSpX$Y-%~u5z?N6<8Aj_$BzAG|Vk8Um%I~VTgw!{OUpHoQ3L;>Kdw)T zqX>zCvz8>8+M;F9XUFJYS`GlkxRx_kLd(fNF7Ek+?0tCE0m8aBl*Ei z&mHVi5kXaLVO+bOt)@yx?94l-E2h))x1ZZ@gf8gQyh?>b5s{6=y$j z!}Z}myg5W!xOQphcvS&d_BMZpSFRG5LRy>SA<&Y|JIUJopTn#S*zDw-s zcZBh^IT~8A=*@Q zme+VzfRZiv=zMtqXuAcga6>6*=GX8uu4XuSAPqB*vVlZi&Q_R7p*gk3+UXIej`^oX zjLBdl3NDDho}|R4NJ2X4?&q1k{InNVRAmj|9vrJEBNST>v2}$@DD8BYQx$+LM$SLF zSMIfeUb_&`|B@_&7WHlxM;fqO(`2^_=DiXhcL%o@TZz=fQr7N3PQumNg_$Yl2wzN5 zWDDeMevV*QdnP84PR|qv*@pt40d{a@or#{e4CuFHV%@2<(lAA~P~a;{BNi%%3I(74 z9-_fQcf(AFIq)*{$kKOJ01W>F>2kK2r6?uxsA*X?qatkd2K&1(s4@gMSbV`a0vW=c zpIzZD@Gv5(08^3D$29{*_Lwi=eV3)m%=xLOvew__#%t$2-(18(LpFBuLDYgs<_9Wv z1_6&KSE2-OjH72lTMZ@hU*h(yWU)`jywr+xL0wum^0w)UJ!E4h8)@0*`2-FuwYU^T zwT8}@F`VbSLmLDPsqt)Ml?f?|c%DN$T06EeFpVODDSq2pqK9M63#lZRyK~6)kk<{P z5DAP)lgW-Fqz)ppsbvO4F>FT0)A}HEv`nm*T^2p(NpLE-;@+1HHnlk*8VOP^zwX6` zOGr5peRO3=n2ad>nimy_PESZJ6-Q}vDQ-U2-#KMw%t8%#Raw?ux&NUGK?x(Q)U6Ac zUPGb{bAoH6zp8sBwsF$EVl~=9Dg6Dx(coA!46xY@H;V6DKkuyp;Pzfw6J^O{BcLRs zWg>gr$y{k@q4^RJ%h zvXx((IhL_K93Kx+5uEwGLXzB1R%G>T#0lNonRchH7XasKZmF=|0spC{?(;$xZ>3`l ztJ&mqn4VX;Ik2I%`iG1~GDu$V|i-{HT?mF1RP1zmY}dZb^sqS4lf_c2*f z|61$8TaeKrdV`F!MPhd4~ukvL_Va1^8 zaL>f%^NQ2`GG}{f)u$83xvg4Pq%WZpkZ!Aiho`(F{mTNz)O6h^Holo6B5#J3Y`-xC zqO%nKNwv|w#L3p_c*GE)Za6=zvvDz+U}?{c2ycUx4mxW~wE#|vm(67%BF|rtM||`)P}V$^ z&z?sA{;5l2Wem?zcWn1{*s3&L^T7m^wldLeDJ|>!0d~gV8A~m?@cdzw>edY33T0 zjbRUVjnjRiKKQ=KkKFil{TcRb+5QV7zwX9PkM}wc)NRESXDOVlQU;)F-pLL&ktL6x z=nJpzu`WJP-ykcEeOA3VobqOVZquz8>=t}znbT@Ze466%i3ZHHv-=pOsX64!p43Qw zVC~ZT%YhSxk*}PvBbF21RS7c5Yu(4ckp3Y1-IU~@WodshznFbXq(ct4!MvzutvNT1+n7v&4GL`pjeh%jW z&WZGicA3m}S45;MIOMK9P0|UyCq!hoeyAwKg@L@#|Yt3iLgb{Gqol>*w{<*D&u>43rm}!f zD(~KMDbeMN9$YJlRQS#wD9m3lE~WoUS&b<+8Sm=9>~U}gU!U%H(SK1tUa&8 zCir4IIA|#Sn8Om<4#n}xSC&ueo$9tPPXSZMUon>(3dB>W#RJEo?6n(H`x}vis`T5GDZ)d(PYaiafU?&U4s*h43hrvhEp6xOo`q5Zch*lU z5fWo+w=-p1TZ@awBV7DVURK&a6<5hIfSxg7= zg`rCEgk#gzXG;|my`)F`sw`>mn8&VE1VY~@!L{1cT*J27ar)KmLj1?kYx|!T2OSe~ zT_6p>rV(lS8z+lEBW>m2#@d(;)!7sxPT~L9{>xC>sJVm>r+a&a5UNTFyF-o;M(X1H zS{(=}72Az-EuiiR(YQVMQ-fs}V7~-7#60BNZhxuqi$anso0MYrGjB3Nc#~a5a%Ie= zN8|p5)!Y~0m6WiAiZcF&i;zaY z@-|Z*n6gL<#CY|Iu=k*iy&iavS0u?#@g>6OY3Elav(bOEwJ3<>7*w%E+?+G(^@FDDT*LLTSqK}t*KJ3a8XNTZJ=*HI)owkz@w2}AmOEvyF6C+<17PcQsSm^hc8U{y z(jS%>D|f}5eIcbshEW@2@9S&*JZ*InH3;Lu5chi?B@(${BeMtTfT7xjJ z{fN+teBbqSPYfbXTEX%fUpAx$UOp#?e$$o%Bjd};z&1LFn#AYwrgU%QlDKc~jwmnX z3vidsAh;GRobWD`&HF#ul)Vf7tz}DCYD)qQZngDG77Q@ zr@4+$vpjnGj#yq{sDE`ifFtEP+oB<<1**L{k2SoHv91N{`)p&$Q&-*E8o;{Ylm0%p z$gbS_NUR^yds*aC;OC$_57YXVr3lG`?D>aFnvnE7xB&$yqfS(i^Eg{l4kmKu@bn*R$o{90I^m zC{ReOcwnetli{(sGajXiFE2Z}PQRbMpIazL!|?(c9Q83rTdT8?xfHS?v~#FMpWRb4 zONU{O3$%;f9c%l}22vz%IiwWm$MP#u#jwP2kR#V9qWJY+|7=X7k@nW_I(x_Zxo7+v zZp35a*w&jSCe#BT%X-I|_zZ!dMMTAbkF(GZTC2s(q!d((E9ZdVQwS0@L=8_HukF48 z46o$C&K)>64JJBwR&H(FH_xP2*6mtiuoK_EQ@POl!Ylc(Po;?Id4C7#?WxxuSi-aI zV_~RUFG-I&-Cq31Spa;G`&Bixk4CP+Et5GbCPWW?afIijW0zWP&~FMSo$Alqb%-us z3UBPS>;880>gP*_YZ+X~Oq7NTANgvq;7Nzd#Z6Z<(ypFZUI)AQQT^e-Q%<22ayqU3 z*v6J77vH;@q(c1-uU}bFcjCI->C)|1ZD0=@ z{nX?Z_kz^ReZt2lj6br~{dPaDtlS>CKiJIns`7_h_@cz2)jthBNl^^mONf8#dtxHa zrUCL|;(&@n=A!2|ckAD9@};L+*dbc5b3?2%ec z?e91!Q=7a_P1{C2fBoFdgQc~3Kb<}$UbcB~WBylEsL=`}*AKO;B2qi3c9-*Pz94)% zmUq+{_iEGPl*8qA#_X-A%e7-MjDzEEa_XQGh_$?qTl~$uc1~4i76Jy?LIzjGyuXbE zdzm_Q54>?}182-_k(X90#o|uU!N{^gJS2h>#KI)<(^$b{vN+1^(H85#X@})Zez}hB z;(EHWFL?y{3wxkO#zz=0N?bPSv#qq{sDy&l+aaH+Lo@v)T zcUns7S4?1m)0Wm^D`u+a6>=*#@XYQaR8+E~@E%3h66YSR(10i(_Kf~kj#9mPBIHXT z{>bp=o6PpS^U}UXzCLs@msa6Z3^pb$Z5!p-4Bz?!4$I%9OzGt$KoX9Xx2v-vJ;8&Q zPktahY*^KK~f^7WPz>oEmLi``kBZ&{p=M|Lk)tdZf!-9j1I7`%!)2 z7x&cJ4nH%Pao4H4h<(Y}g3geqrR0WFj9NFWVQt+WlJBxtj*5%;PH6^4tHp|3&=<*6 zZy+Ao7IBwr^Y&EAO3CftGgC#3vp-y^8!T4L-g=dIZi3D`mp4hTT+*WcajdLNJHziJ z^#1CIi2E0aC;k7Zao;95pu?`4%+5ruy-HnGnE0EEdBGY{@%hes37}T;j-uMZ9}rVz zKR10CmuR@0qvcvxk|EEaSB-ul9GV@eYt&gr1ZYJUF11~Te^5G!F@ChHy8@uWn-or=xoW)XFQ~T5rHbzB@28 z%A-4WPBCC95?DvSR^F$LC1wmhBm00WZ=cQY>Mj)Kva=g=xMb2X$nicawO90RqPtjV zuomS$Hg%gcAfdcjL6W=rA2CAC-E|0pUtT%;&CEAx%k#$JBr1dVOLL$zaHTcZIGd0N zkI|wH<&!`6E{Zftgr}gjl#s#*>Z)5mi^?8frifXS{q%Yr!uSEobBA#;C9o>{p!(RtEe{Dvma&v=v5Z0s9pkV+(6ygK zeCpm4*4!vE9s?yy0*j{4)DJt{?9Td;ag0-h^3NFar#&<4H8A4MZLEzIm=A1mz0F4g z3%zSXUi^*F0lKMZ?pYeLP*~q;tf}67TW(C>y@+D@^}N!{7m2;y(6O8%7IsPldImjJ zP1qd=!iMU*&;CGCB%0>alfUF(SJL6EuUn+sId4H5PdT~Xmsp_2f~lZ6GZZ>9{_&cV z?&CSi>8hLer@Y=i3zz#baOSalY1E$a8;x(ugURw$`JCdnnh$AVj(0R)I*=F(SD*Yo zW04r}dRt|ZO|3V0f){%^;ESG?i>ljFuUv#8-~I`)b*6F6u&utaLD~7x#FoGVnq^Q! z^0is~GZS1LpHuMM(Z=6N>#6>)i}00?^!%X2aJCgC(HHZD*yO_)f3@D&D?P{jkn54d zlr{F4sroM#-yjc({d+J(7-zY-iUMl2Y%(0P#m+vA1E~`XC|~dB9j_lFc|bH0WgAw2 zrj>gzUsT~&4^4ZFc^ia$`%?eKOs19s?8P;I6hkZqDj>{u#84j!T+N(Ru=p{(@O6l# zhU6<7A{|jXTD4Inw-0Z^ZRAwlF4-glHNfXKQ|QDnNxv%s?@bs_S=<8)YdEF49yXE25elOrwD;61qxx5Ud>)$sll^C7hmpQ50o=MUZcFHCx7ZFv>{EA z@%GQ$8QpY4lt%>%X;ayltP0{P4bo6&Zg_C*j}1_niF1wRhR2zc!`ATB`~C zJ!(Ir@M9IH!P}TEIk}fqBbT>9oM?}X#h0nHWz;*|qsK$@s@d7Hi+`|x{t8<6)DBJD zf2K;lU9$V|af8?tp~C(~^!iD85l%@QwTW^X=PP&x8i`}3~jf?t2Wk?pSR2T1ZG#AObZjd_H!dGLlY(iF*k=5h zFR)w_1zn%c-<5xMG5uD%w_y90kWwqv1GJxO%i}bS_ZwoAl%L;f8{ zPsb;B-VJHYF&jN=MV``J)7?|`?G(-sHrTbBWGk`qP=_qG@a~6<#@9Sgoqc``-QJ?G zP32I0AqJ4}92KpKJcab(`0GOUAv!-?c8kWV$YOd1rM%sl7bd^BBTM<-#^xdC0bG7Z zzS6sA6X8Lb2ywACbTdNAlDtElTZG+-!pQ#k8ulzTV4udtKJUUZA3^yw8+5dsA7x*<*z$v>`*6GI z@Q+Blu@@RczbbuB*qujiHR&GQ^gQUE!)$R_kJD^e256W2*X_-cPZ|=(Gikf@ES@DPNKg{ z9+7mR#71IllW!`*5scgOnr$w&=tHI5uG_JNCZD1}QjUd|mU2?I{6NjE?U7~Za$~#1*+$QxcSH{l67c0XFA&OJrRH`Bwv-FSzPM*oNWh zF4@*6SeAVI_fXQw&JF>BolS5k+Ind+It}y2Y7g|)IJ%oH@?&h-9BYniV6E_-_sl#x zh8wddGA2;hy1t=vs;n2+GdLm@8cH7Gw#NA=57e=Fpk(sV;4bKRiYg)biHR-Q%lqadaS4@97RQ? z@NR6}vDG3lDK!5-t zyV*X*@t?`O@LnRmVKTEIG_GD@N=W)a@uyxia^M8Ggo z@P*mI)lM%)S`K2{#n@EAdIR4Ydi8Vv4!m_2c=a=GI?;pcL^&UX{5X&=)y2La;bcAO z*tjNqad&1m@BYpWzD)^h%+HEd{AI@&3|@5k$D}Las>6JdD26{S39{s2JLT7N7P=&N z7~uJNa1G-6NO4su=-;KPo2N%f6K^nQ3&-It5g9q$&lBbqh~wE876J@>*4wV60-7Z6 ztPgVx!54_9JPNe~RBN6Lu6mz+wFaD7KOJ`R;lQO0W%2#Ji5_>p|4`(C-v87Y znmh5s67b&l>+SQ!mnEMnGuh^gj5|Z+A!ok3Ym39*DX7W)>KQ+anZ;unUa$em%PZli zjM_)qA*(m1%?hBMlZbg6#ZcZKQ`6wN&hE?dAywBQ3~N!48FC|D*I_$~=WPY4gy0F` zA8}CwUBRhQwo}O^WyY_X-W;=w^W!Me+>nzNO+64rKyHI#mCzXDEpq-s2&ySR{vxi6 z9gH&5ui*?5mUW!*v=?J-o6EK0E+|A9VPnTF%6Yb;P%yOc6l zt6gtlMl$wyN0csz0gx=GphHx(MJ=vKbXIwIhu@L$W#R~%Pxz=Yl*rygC{QAxsS)YG z*BsCZ-(O+d`yzIN)$&@ii1qr0i7S#T1VmHWMrc<2DP`i6L8R0QZ!Wu-mtBWZS43u2d_z@cI zU#%ab2|d;l5#M zEf=+UakuUciyOjzvLQUR!4oo)a!~Icv^w#$3c-k`p$vY1PNxTdmGpK(!q`~t$oB!ve9di-1VU1mZDOr;QJfY{>VmG4w9`G@1^>0GQb&4tTmfy=t^t(i4l5)-$yANzMIDJ{&C!F%4JVy*X z4ez**hT2ID-z9cJ11GzXbD4Bs-?p6YlSR!cPI~?)a-=q*scvM;gJz^AR~PU4@$eK6 zq5s1cwfQmbC0Fqe5}Wd%u|PH3<48oh>Jek4%-A*{PbmY>;vuPC zuoMS(Zf6J5@4#51fB3jxPgV;nd9QX7V2!_vJnfM6@OS;BUf5QS?0@b{3nZP~v4$+)|mME8=akW=}*#)Y; zSohbJh_FR2mLEc-+N)xGcIXD{@DGx(1Cs;R%+(TMOH9qhCFov0-ujtDz%bwG!$8%4 zDr*3aKlJ>{G9sTXE;e}-T(RnWB=YVKu9+=2n-h20NIr^_Ne>?1oRb+n7EE)~#($kr zTC`p?Vz+;<)b-dTB|mw4EbzPGhX^e=! zijS#UeK)7FI;cc5=KC#})>eVQ!{=Id^xanEcl6Cg{h@|hp0l;Nw`fG}){$DC51D!- z*oXX}oN+{opn(S59I)s9S<877;dkUi=*-lh5hLs@)%T@S*h$ZlyT92daWjpr2EJA! zwQsXlb;8dfF+anze`QwHoybX9Qu_Y!ss9kq<8VtJorqP$ecHGZ^`qZy=+o2dl&CgH zQp(beqvx&L*~{j$EAhCeY98UZ`AHhL@6{Jfm%C3CHybBBWWbi!Xn#7C{ek_AMSVZE zzIi2cfw95gAN_oTrK_>|P!F{;kAF1SBbWLQdR5=u>Ys(UkUHINpxex*cUOLO3GE4C zE-HYCF$Ah^B>65lC(=midb8fI>Z`D!n)Ge2;SX!^>$O{#1?)f_*a__` zh~BMX1D~(LTy>B9=3kUeO@4{ncCxhjde^tTdjp!){9{K=p8d{*5WwLp&&=?+;ZddK zuDw18~t3v=u!|Xm%RtaW$HSz-l3nyQ#zC%JmS}6 zQG8V=CXY)8U58Oys9aZ8y+<}TJIkphPL}`5E(=@NDOL{K%0q2gIa@d}{I52L#v3^< z+Hs>W?jT>fy48+x@y!f7r=lIpJZ8lBIUutFOEMr@L%`-N5Z`K|MI*zF z=;J$#Dhc!roDFQNu0mU_opBz3Fyve$EwcN%+-&r+j0M-$v>=}8-QQ*LsCuZj*aAN9 zbwx8=3&bu_wL`bVin7jZK&Y#oTP|+8SkqDC9bV|KegLExy{meRzPIYyt3nSG@6;9V zW>;YK;|I53d%)yFo%W%1+U$>*B58e8$+wSo_<`Dv;QHZ~$%C%nI}qL_?w9I?x5|(g zlFY^&7o-c|zt_m{0+JLtv<8v;(tbP{*FGlggI-}M9(+gFky+?!1dXv$#tQ{2Xpy2#_~?;U z?!OHwR{}+6zH%r|F@yzB?w5nzI$pzU@S<0Nye-H-U3OVpXOIMLRR7=#z&Di^4(AqzU=x-RW>bq3bx+S`K6sNvYLWn@AXY^QHx zIJ554M*oIS0qb=n9J(+!9re5}VeaLyNsn^5_ zzm*)H+)@1Z5+gYh^FF$^B6y0?>+nEWqs3q2Xyzc&H(bjPDYilDf9+F9x9MZBJ9)XS zJtruhtoDF2llsdGwx`zk1ensCbig2uGu$lL{_VIKwLVsI21H|aa{W6%j;(?SM_Tch zAvSu$2j?kB8?LgP{H>pPFrCJS9O8+wvAXn){KbG6RC^Kaaz)vC&YL;ELFEJ==%&8K zUIh2IKG8SPY}Ga_>N_?G&8jgyz;LX}5Ny4*Fj1_DilL(}$p0vZeeT=)B@s2qU(El? z&y(E>o~fy0Oz%%5_qc@==;iBT7OZ@M0f6#1{Qa=YwTJx_;~p{z?EMPTfP3~T<{G+d z6g=k-$o61I4JFSrxMiy^v-D_tt~-pnIhNS)?*{i>lO0&;L9sF^d>!YV1iZ!X3pVAy z3`$>}nf`O_)ycr!zNM=*8TQ@uR1)g5Xy2=lV~{mfn%xi|?_KwjjcO;t3QXBt6O@iUuF@_P$v(^6l@;_4!88w4m>g z;Ys<4i_@PSl5w)2U@l_uFKHt5ny-QEXN~F2Jr)j!dA8ZO+u)79f}NL71}>9BEWp2d zN*`|Myn9v4-aJhdY{jxf{Q#{Tv#O-UT|I#ne&)LFzUo{r|2o|6-I5eUJ7Vki(dHL* zB{>haG=3*7WPg^bO3i$dk_svrSF>}CX4W;(F#rGouf?sMRj*xZpEfo9YP(5-_>Vmj zxbo2Y}oy#{SWRr!!7eoE)dcl5ZAgH3-}!17&xgO18`kqwlE8MKnWIo$bn5h z%Q9{$PycxH$Dc*BQ)^xBPslMAjXmnfh#gzXiA~Y)TdI&mzBau;0LAvIT{q>NO2p4% zXmqc60$uqcUUb7&_XbJREA}KeKCP3<+WsAGsO@YQgd(V4RrPiy&3PwVJ}cICLdWKFD);zI%2-ZU2bN#CvU2few6Db%X(;6Q8{W6$lz{nz zAiV;JZKN2Bx~NtMOTeT=% z*+p$0&B(7Kantmsy8S8^Y{!1!Pb)VK0x@^_E5P1c8k6wC`Xzr&)0VA&5N^Idaau1LnS ze?4iBa*baRdwLb%QyC&R!k*yc(=^f-ee59^=K0FNe$E6zX z29`ZyHtU`h?g7Uhd>1uZ*cJ8V=2PcWu2TbcQixxV z(Io+9-QwJEPTy@U#0gtaI0EIaP?CBoROzH$$HB8+y=YndnMzKC?L)*fqdlmV!47wz z;==-X*F7Lh2`y90Vs>yDJck;%4>D$_hR^_YviW!vgDRa&;Zmo#$e8JrM`}C~><#?8 zTvC6;4zNp)l5W8!#SM%*vD-@y=sHZ5D2gGdduATC0RZ@{mvYb~@G=#=h*xRfoV3~O=nN9Wdvp&9R;49Ec9h{7V)^k{T2&a=w zpZO&ZS3(PY3g8W+Q(F0;ICU8g$CWM@G~#GGyT<>1>Fn_3S^L*yd>(#yxlF3SHdH5z z%7(wyxr}-p-@4=Mdh>1X0?jtfA3d;r_w_3m&uu!i@1>D(?!KZO(xf97HYJ4aaX$0k zr@Kxe|LXj=c?;M)X~(m@0|$*S{(b9af42ET18rF&Afu8>S17mzYdS&=tcL4?ML|IW zKOdT5JY5jKfL181ScDE#E64gy!x$LLiHGx~u#JeyQPwLR>>4WtKA;>n@YdExF+)@I z-qd753oyqfm)lM5O0tJjZSgGGsl`z7XNbTU3Qq1;@L&-(Kv|3cEr%$wjiOM@_*ZOC z5=A>ob+OGBp;hoz-IwgHSOPVInNjGKxXbjj&nQJY;M|0IvDtv`J`4fsSF`f?c4~%d z5qKm)k>qe&R77Hl=Jz8uz3;d!bBA!Jl7Msh_dMi!MO-b(ua{l!nmfyuqI{3v!uI4| z0rNQAAv@rj%D|3$bkJ20G_5Vas5>Cfgg7@SZ?@~k*Epakva1DfJiP0Zxar*de#ISR zkB2Y-uA|b8ixAdkM0DS17_ugh2B6nyFh>+`C?hR)eV^ow-y>bRxWZz;TYu>v7~ZCJ zPTrD3zbjN!6i#HLwQ?#Tv#?L_BZ1MLC{I9@k59XyBI+I*!Dx7tbvtZ~G-)DuLf6=Z zl~_iM4_MX};(6Zn4(qJ(85g?OQOwc7bY!Px%?LF1d2zan(Jzo=)cca$gP&;(933Pa!ld?PEGiQCRED;Y@yoti$%dKyA`Y}bCt$=NWY6(Kay`~%bOi2oa7vWhamg+OwR>~30`JiE*w&#NuNBw=wLuh zX2-U!35(3#E_=bM-OMJTx4GL=+SSy(cos)qcP5X2s>tL1j?fMV3bn$5ty0j)eSOR& zDu6nek}kG$f%1-z4#mA;Il_NoCa9ky6?$KnU0bQHVf~GKe@p}puWyH& z8gz6G)o2{^7?KNW{D}0sj=FVP7QTZqISQNOjH17`cE{#r-JDm}Lj@69BubGh-b*P5 zLoD|JV&{w&flA0mSh3b)F(S3vs`U-XHoB+ena#X9QID@@87mew1+er$j)hP+@G3{1 zGd%#3QZ1?%9|UkNqE9YFM`B(={S>b*jip$)aI5^Li305cp2nwS{CbUb^mbqQ9N@Dq zoV}w)I^JdGl#%_3!M>C=2NJpxYp?$2DeO~Z%C@TPWBnBTXoShvGfJYia7_V!jcQs8 znWilfID~a2Eb4Y^og-!E(p%n;rNJI2?lZTJ%a$uOg$}mOp&WSL8*u$$*6l zmd(0biF>)7G5>4Vgc^`3zOBMW{oc^D6}9J_MVSBiQ#k=G5uI;R$Q2BkQP)5)Qw78g z4`u9!YTGD%y_9JyLI^;eTk~#)pZ=NcD^YAjYn!3~J=#yy(> zyn3ZX3iNLg&GU+<#D;c;JS#IJ%F{b=qeC>y7OTZy?!+{}l%tt{tlna}csdII9II+r zpBglz4-K~fL9v%*?^Mx+Ip3E}!~n0W`2`1gs_KSC(o}JMTn9e|W1K z(+WUhQvudB{h)}?G2FwXE^fan{}@vK$WdmJ*=O-5a7|J^T$rzI17$!5N{m{k??Q#( ze4~OJ$_G+&D!WH4rlilFrH08^xu8!wM;;`yDn)9VUwEQ)DEsZ0XCnC zi+H?|B^jLDl(eu9eeQ4HR(6jf)%|V|X3K(=Qm66#keN1;Lf$cwdSLa=kK`wBxtl(f zPbrRmIA404^$#Lp3y*MZ~NAAgRXeq>{vrT!L$gutVPg=1pX!L;FnwO<>yiM(7Yd? zri=d|n|DT)ZE%_!8GINf84i!>GQ!CNqkdQn)2wfyg6}s7M!b8nDpTx+i&_`SMXH@K z5)$nX7uolb(jb56TiUt!oee6_MwjW}M0Y}w+XbV%Y8oR3k23o2M6x;!s|ih{KI!}Z zWU-q6f)aHVte=@J3#*INt+dJ zYt$?5F|v>)?cnfK?zQW-o+-6}j*WF>*xx5nyfU%8EnA1x?1puA*+tC8MV8ONlu@Qx zXXl4eyil7655VgMw5r^l+g~sF2@s?_Yg$|J>k)IpC*2w49GNZnxttqUh!{G>+T78A z?m`SRp4SIon6YV)ej;azC(5yF4|;L+(CI4a zA$tgNBpuBbMm31*<<-6sH27iTI2^$0Tib#KZ%+=~w`oTftoDsDEl2;*{Cu}YgIaan z@>a{0F4bRuLJ{C};6R_lsUQH?Xki}M3KiD|a^&u3Z5#ktUfZ6M2m57^-kHKKg*=s{ z!gM+~ZHFJXFyiP<>){DYOB)yk7UMVGyDPDJkmG;Yk_=uhjs^c5Xg9&K3iDJu0QF;c`_()AzkSeF)k%?>zB)FLE&q~xqNV$!*ke>}czd@^CI0lqDY67}&H{Inx#JHO+HM=@< zJn@5apu(xD_##5!ZYz_Iwm;82Io3*GwR%^<+}PB2!SvDA5yO8$*AH{Qoibnk}JL zUu8C!?PS370aam)QdLYKVJc91&rCjo6*E5xb6~tqzFt`eD+1x~Uw(qK!TM-3XD30w z0INU?wiKnPiQD4OTdD%~#TKS!fMX#CJ8%BV`)UP9Z}G4Dn}^&TL%ZWUG8#xGkTF1= zZzkf^(Unz!kf1Q!?$DHcd1F{I8k!-MH7(79)GIdVuWQD~l;1k=p3jOrJUM1pEA~qC zo^+bXaKP6{NBkPhwM9En8`Bks3zlTHo0#@!!mH83oN2p$;T0Pn+_e`aW|d=UwYL*uq9|K6g)RBh#3>o<^@|>qgIAe*+uYXGI zkqj?^iKs{C<%t|Xt4d`@kMK~r=*mfpx*jN*-lPM+dcgpOFcDkrIBX_+6cSrecTzmF zb#v&72025n26?gh?+DJQhAyma4ADF~VrtC?4e6{Qi5{;b|A!f^?%X`lw+QMV+w*Tq zj}GX87pv#>{pIq1($o%_ z*V~(Ul)2vgFz@g|S*PFX}oyF)Fvt)@d2HDuYsT%!>KTebhpLpSfrI0r4%_~@C6o2wrI+Myo&NR`}p!+ zb@qK^*>};;bu8&A_18=3kj<0B?0Dd~TGwg?GYlA6ld4@veQ3_Sc(^(kMKTei%8km0eKiH_ z-=i-ib-wVDUFQ{TWEm@?Z}>V@_v{K^955|7;1s0PD=ZC=-Zux`^8n?Rkt?9L`%!3G#`-c=5WKs}3F-N@Ev4loS+Z*jeNZSV%v7g;sp(|nPW3py_2 zHm=LjrTa}a@!=8I(t6}Q55;%yCe?EGOunno1we@JlMsPr_KC*4QsV4JNotR0K$!(+ zz(2y$Dh;?9c+uq+{LCfg*YXtX_SMEF!7cW-K&jk2LiA)n{U5k6D+cJGWywA`Nb%@( zlTH-EGyg~;`WGlW4b=*lidfbKio%@8VzfRmilCHZ^eI8|ocQy!Q52mQ#1J+3qVB_c zG5j)QdO5bQ3^NB`m0mi=n(AfD#c$O_4vYbv>3?AK4Ot7^8~-Ekwli#Ck#j^?-1r7w zb;?gG@T^tResauyeIQbk|MAh-mW0xpHxx|c&hM+I_p!D_4`njyw4YZKOSFQwVwmqQ zjPzSdji$tND!2>8X-vFGVfOy^G5}THUlT zygd7e{%NCK`Q1^bsh0o%3|v+puWM~Fm4`oJ>38!ZWcJmy=nvpust{21OFaD|BpS0z z^mx?C5@X#EoJH%cUqTh=MG2pmj##)7lQwfwDm@xHD3Va|`25{K**FBChU#yDdQ2I4 zGdG!bt8Ni@NPn}QWO=ZTqAJ3KmK8u(k#cl?E?%|}fA;+nMqZvcr-cQrt<84ES4~39 zP}(!BB!bG_g;GI9&$f5M)Yq3fVM)P!2%*!=kpZ~~Am)W<~-FcF8GGayUK{15&fXHbX<;^xvanaKYPZop? zwljm1UB3_70CD$DNycp=R@ZS)&)^_C7D;V5rM_ci0q{t)AmZ-FLA7%SR@y$0anVq~ zImpJuZcDbc3vx6U!JgV&rV+f9aL#|U=Ae;cI_eDeQ9X-k%aMYsfT6t*K9%*t_gx>d zeYq4Jwt;v$+V)Cl1Muur!~QZo&5{CKBqbfD;*I)mfqSvQocbWQrp^>k%C^l5Ba}Ob+u{Gol+OzZPj-X?i5)EM(_eiD zpPw0|(`xGN(LJ809c}qB6IWX%`vlV~2zPPYeU{ycTfEHUb6s9YuzNnsen8v4_V|TO zvHy@?+o9ZMESiB5U#J~cU9YB*M!D%l_Q!}Y;|CbaWi{@q&b8y8IX|)$W{UU-fp>|( z7cMfi4RA#KD5ffCfX3_5HT$@LW8TuL%-?p~TqdVg1P?3(94hG`z%UZ5rEA05(hD4Ha zC)*};u)bju)h6GiBKO}{;^D<=iGlyGi4Q5_e_UYwp9|P_?&q3%WN-qW*cUxVSTpjS zA4TzZf_aM(|F026?kKZAX!k=_d*LuL|NC^*d|>Sln_J90&ZYupeY{dR=ik$x>#aVE z*fM{*^_HZwnYPkz7QZcz5O7^p^pf{`RV8El%8tZ1#7w@4Q#^5$0$>p5>?}@u79qQ{ z`Wj$s|E!~Rw%j2`fD)g-v`Bi>+u}j7t#RrT;*_|HHZ>f5sN<9l$fz%~iD4 zJguC0pD==J+nJRbibx*|KxN4B`GHCy^fTuKs-|oe$ zv{{dnKYrfNk4SU2ALArwg3PT7p2OuMDvD-(gV^==*bV!DYqO0DH;@7PmqkzhPFbfv z1N^mD``9Ia6lAQ^hq&B;evuc^_6K_}{SDUQm?bud462b5j$%7M$04@8#=^M4Q&ZQg zwRuU3Eh+@=ec*vI?j^0=slE}j&U2^HCZ~;Vff~Mt&XLJ&K{7t&$+BS6iq*Yvp{MGg zB_u?hRIv}sTpybeT;6gjuzo4P(o}mbur$=v17WdhtOT@aI31qBS)8t)QS6VLA*FU-}|5D^9Of0Su?^6e&vepVmvo-VOx7{yz=4BKrgklOTDhooE|y- zAev1;t$@y%oqB@Z?WR`A7W;OqhvoI|<*L1fo2w+4lj#eeo9g@*R9{dYcAksN(wK7s ze6OB?&S;hzov}C&jNTvE{dOUqxM=6F{OliQ4|5d4DjLjYnq4uuTV3Eq`PLlAF179C z@W_e2GbslfCw@hbVr!Zwj2y`RH@>)9VntU`qE7fiOK;p_YFO}EWqVE$)}R~#FH_W` zyHJ8+Z!HiVWp65+83p2e7gGig46}Iu#JPol9YtP=f3*>VIg*FnF|wSTOWE>Dx+sx1 zRGnosKUo;{hUn%Rl>AT_9Wp1g6;Hk^pT9&MUmR#qGz+}pmlQe8pB7=U3?CBx4(y*Y zTMx57_Z^W$R(cJe!DC&v^!aZ;w%CVhn<%aJm>LK*jnk}0W|;(J88x-zs;}AhKnGU> ztwKkNh#NP~TOT1(e$8~eu(uW`LqJ58cT3$~Z6Zi`a0VEYXX2KY24*`>DZrn=ut(gK zLLt6u1KelxA14yxxT4%C*mGuLjFtD5dvNRYq4z56U?5BnFhH71(vCp#8=9Ea& z#|)#cyqK1MaG)Fh5fwyz=(Y))yGfAUUnxcUp^4{@zz~MAg0-S5R?&fYT5ovm42t3lJP zIyQAnbqW(SGb5q+pXOZO2;x2F#pf#;Zr=A=ck-Xfdh@Jj5>?GI(X5RsDhT0FHRNcG zv@*s3Sa{K!cMEiT!png*^9MXpbB`7Az{hqotiLn#RFSrRvK|R|uIZZg%2;Y!A3kX# zEb{5)B76X-`~$9IeEY!p=N~ERk00FSMr)6KrEF11t>+H-F881&{=TD$HtAJ+I{-Bj z5mUpK_DyOw;Ft;E1Xl-#0$<*=%`+uc@{BH zy%H+3AhBKTda!9nc*q^?h_6u|6!EQQ7{H)g&#N?@HWHl8JzN;I6U~4=3uc48-=^i_ zV7BBBoUFF}rvSoa=tMqfDbU{jLHMMyZ)BUpVN3_mwsZ7l1(>xBYZ>eKgB$EUN4Ncb z7*n%*(6}-b14Kn@rxavdP1FmXY{-iTEUy;}C_K0LP$G?f7;jbTRZ#DY_#iWMF zMzmYBz$nSfnZ-55GW-c{kt>+8=tiTO00sc1y-RQW8a?cH>Fpji;6LIz>X; z1((KS_ho=C^vSpS#clJ7SbZ9)iGNvexQH-g;vl7(ThjIQWV2rJ!@%gM3n0!ryTm1dol19}VU4+1bZ}dix>|Qp z_`LJGn~?l~=M}Q0{=LzgFK@?OfOZ~%JG-paJ*`3DD$aR$k45ZAY;*}<`2~zxSh{Z= zV$p1t*-2G@Pq+cgaDuNNE%e|;bjxU~ZT_rjlmUo?^w|`{61?1O%Ui>A2 z{0#?mCe5%X>|1Ot-l##pThAdvBo7U$yaziXF9%sqEeJ>hiL)ofE!RmkD_1XoOaN zb@os;^i23A7x>S46M?L@W*p60MK22Nw#!f0ddS{)P~a(5C27N?C6!c$IW>e^BRTY) zFR`k3R#iga;=)I^*Oo(C^Dsp1oN8|1ZyG#sO$j$}q_W|;4Z;rjyeVeL3J5LZ#aRJmOh#p6l7b8Y| zLp!)dcz+pB`m)F49g5Q&++dBc3zHWzM7gBtdNOHmyf{vJcMi2j29d9hcTlm_+9alM zXScG4wrqdo{OsUwKP_rvL{%Ws8^IxGL(!8|ftn{waq~&ERdxSC#mdec%FC&V2HnN* zXw9B#tieTMX#db9MVZoXp ztBc-n!3}^qD>>Tl@AtV7r==H>T6sAD%cwmD0k)lPJ4WWd%3&Um{6zS)FAJNMt- z!1y<2CaI<80a-1O;F(e5_-UE%9lNxYbLU&c4!`8=mpbO@@@&|=sKbnJShx@)Z)MM{ zx`LTTynsei`vi!<8GqU%f%7@yyURs|=kK zUjVfj5esdMIC-wH&-0UzLOE!#Q>KLJlyIMZC!UJ(Q>E46F+!uw~POseE?_?j`Bo0nrE&YJqtMp6ym}`=MvEu%+5ZXaZ&)%ddA9kgU2X;CSs~!s@vY%smy9my+{UcjTYQaV;?h{PBcRh~ z;llHN1vz^om5f9uX%G*fi1$3aFIeuMfsy*AWTDzaG4C6eE~13D$b1fAwn;r^jz%9<0VJ8J~iq8-+2l%`i=8*#vgB6t-K478C2#_(0q6`lpC-N!fMQ|gk z;!ib#4*V#e`&izfVk9o5Sy7TnQ+CRW_6U(IAty&nl3JlvWi0E6(W`-4FdMO@xP+os zAvQv-T;zD$qkDfA^G#3Me(l4L}IHHQMu9&%(t~7Pg50E=3<}z5= zS@?W$Rv{T4ath8hBcv;V`Q2kg`DW{=3-*fay5RBMvdGHN zZcjw8-5sI?^r}Q50q1IObuvF_r*HqqbM*uJ&uX>2Kc{39N&=Aiklf;N`pjD>;jht& z67)PD%*NZrEic4sB{#$T;O_w=(?*o!4Wy_{0lS9JoMBEjZrz5(Zmy^BK@)%4Qhmd@ zyHV>LFyo=}Hm}22Pm=7jAymwe#>+LTB~D))UjyyLj9vu>?;~Ihpls0#O)P80f>#uF z02^#UBY&4e+XpRGhe;ANTC#T_AM6nRP=1OcQzAIiYZQr)Luq)>nYTS`Di13nhUJ2J zzXS0oX&d_Vy=KrHdC|@$5H(j+vE|m^$rzqJb|!2&@Pc8=K94vvH5QDw)50-f+hA3A zE6FO4E61%H+3kB%@#s&SyqlFdrDsIfXqY94o}Md4o(-~^jw2PFW2!?*5=d?m!n;>Vss#q{|~C zpK7^B6rYQ%MSHK+`M0b0C9_%2sTENidE@7>#gEFY+7$>8!=+oooV85*EE`aNltJ2~ ztfgb{`LW;c<0{f`L62ujao#%hlVwSzA3U?&IHKRF#1SGb$k>h zL9Ss@=_^B9_8q7|v<_3{REPAt&OiC^zyU_xaC&!)0ty&KX55?&iF^sW(sEDxybP*m zwi#8f`EMf`TZ>Pt1)VD_F^iZssf=bzSY6+xkY5X|-)0nVNjEpv<*-^aAfo@J?bMN3 zq`bc0W28a;-#6DI(4r@uf`fph9LYrK6{}UvyBQ-PwccM}rfV{lrUFzV&z)#q&Y!uV zt(`7fPEgVOaISlEXvaRlKTBEQ6$6!cX_w-F z(zS{)w1jkdS|8oLhx^yJKZlXD(Xvjw=p}0kXy2vmZZ;AFsKUt`twuMnM2&eR@z7jA zZ;t@_N)(a-df1ePjC!po2FLT#-P2eT!P-+D;!)04b%mOyEwS#4zROBnN)u2%?c*~Y zf>hkz%^(IPy53|?2E^Y`ya{)mJIW{raY*$l10UJ+wP!Bcbh?8?lfai^t>nAm$(*$@ z*W7dW<7L9n&Sd7y1lGvBCR(hT{F4b;(;ZuQYU0apyV$gNn1QmQ^cgAJ-pMpFHx+x# zJ0qu56>%-|Wt7ji9-=zuR|}&FI5bRF8B^L2uyA`Yh$URKk;O2Q>jOXoF>?*s-){vX zD;pd6HvkoSeE0B{NCPl=sK>vgkXg@JWgzqxGi28op9R|8YBXCL^PG&z1i$}lYZ*Xd z84EF>k&sHL_jdB=97z%c8JSgF19du%XWJkYjw~nqJR9KbKrIM6xp|fO&3ta|>$G)FL#AKmz_0*ZWz`osEg<3hV!}@^N_M18d z&Ac3928j7;Vmu8k1+DDs`uzJlr5Lq3hatbAfqpsy6Zo2uGBg9YdXFeZi9h>7 zQHmaUYUcw(?*!9sgh5>XIoFXS_*!z}aLc}{NaxPdRH~vxu~nt*he?g-z0_)POg1P0 zjG*=`ro{b$CPeiX-DeBjKRnx13Q$>JY+Gv;goED{JI|>v5!z)6)t&veePh0r_YFvJ z(T}{e*FL}HSk#KuE$GX?p#4Im&Z$fjLlT_&-)gfljpTcOOLOht=N^4@ zbkf&)0ch8EY#}nfFYW+xn`3;nQC(g<@)^%0oSB1MYeh}U>k5bvysb` z%aRzmj19vuv(4^1KfmAO@%w*|v&ZL;bI$v`UhmiQRhR~I);MJVH_!Er$=9J2=?vuv zDlPPRAZwYKLiUhTb5&;%nZz_(Fz_1;40@ZtOYU7a|`YyFfBnLknA^J&Q!$V4p^?-x4f}ek|^dU!`P8oo~go)BJTh4cGXMmBfjE$z|Sh%z>2Uk5{4m;8@3g@WrpeB0!JK6;^_V8H&dHq0}F8 z(PU@diviA~nar)|^onPU9#=`91KAO6=&E5sLttZaX$*i%hVKHQyt6uJ$t%UlvE^2h z*}+IFEHKwqhFM{l&#?lG!{ejeL~>zk$`_kxsvVipFSiDum@rLu5CqwE7%W+tq98Q) zkTeERfYbc^f!QWR!LCd;Qy2hV`7uD%zw2#rT9(rIH&Z79Sk+%ra*s7MvtLz6=e-VF z9V%?foLW;Z_MewOE3cwJopeQ9-mhIF3HzaO%7Zhd`a=`BuF1+Q`yMV~j$Bjy_5kd2 z7%^H)1oyymP-X*J(rtg8H(fuAvgBG}DS_uc z(2Jp(Cq!697yJ<0Zirg(K9wZur-pu@R4&G*-awZxsdGZg#N4dD@e#F3v3kg^saDF# zan@q`(gTe=Z2k43juF(eP%{ICuNh_ArybKW9LuEFPzn>q`!nGBGmlE`6G(5#L*~z z%=ap?Yu7}w5wP_Z-n#aW9X|A$n{oq_WM7m(#h=7a9qt#5Ly==V*Mb+_WQ-lMbF*X; zF2d9%BIuU~E^4+jq`Mxq;Qh-ix|Gn@KavlNNz3<^7MMo(uuhQ~K}_61E#f_jjyl^=RzGc~@FHN{C8w#v7!sB_Nvb&3< zm~fyZ=(~d-r){VlJR6RV4Y#c1H9r@7#e^@GEVMc-uIKdJGzu7N^}JH30)LFU(C9&Z zS~}$H&XV-N#>Ua2&o(nQ_V7&v5K`nY{{JR5I+-9#GnXHkC-~gf~XwaDM-KD(aQjC?>u_{ z%g6#wo7=3!7eIdo*H`-_z*(gqKH1Y}z7_FD;u0>?@9Yd~6dt|_#@F>eKn%RxuN-G0UF)WM_E zsoo-q-FXHATh?& zQg+U)*d(E(^0?pXmO#NjJvGL8D$)G$#kx{5^6p%0hyvi$Yv(7L(`H5aN7A%N{OcO` z|Clv9hZ;M^_{~Ue58`T;ML{-qq<8qEv)V+6qmCudJ~HFc_Dkk@d5zE5DyCuLdRz)N zE)g%=&sQVozQYad>d%VmE^NwTefC{7(w|(yO*GAjoX$+{pp$d&8cR~xnAQ|9V1w;I-R+| zH}9M;pBKL;<}~}k>1P&`)rk6Wx8RcY`AgIDr7d8_Og2kLwnqJL`O*XWDaaS`amYsN zk_dnH5&b{I>WrK?{x`LO6r!ow-i&nr_N$<*&J z)>Ej7X2R@Rrn-4w2%bz;td`Z2*+#1l^2f&QjRo)mBo*DU;&w=Y}GomhLX zGu7U4+^ewp`9eoo1i;7-F98|z2LejSXSPwKlWm!B$KHRM`Sl^hJ~fAp8}9sa1cfcw z;srz0m_qqKKMbN_7ZtT=^u#U7e2?!eQObH|( zOBaA<&=Stlyw3=?(7IGmw4~8}+X`I6Uju^IEzkc_FPn%5740fdLBblbt=S2u5CZ^h z4w}b)o)w84WLi7|EVit^*hscGR`J6P*$5cS7n!X-0(1s%MKPTiMuS#=lq3Noo!6xv zn$!SZEsg>P&q~K-z%^HN{W9?G`OYQLW3M_l>Bw}Turn`#Hxum^MUD*H+t3zS309! zlZV!zdZbY}_C3z3mhfKyHsg0)gnpe3detq_l(itQq9vH!SR>RSvUM~g9H5-}G5@F} zZ4_q$xq=Pl9PHz#ZfyWdI%eV?Er?f{CAi)MQ8lmWeR3!^BP}@-9oWu!DVg(~EtS3L z)^V|GI{r}9nbk%c`fCUqx_j^!)QX*1KmKmI$$G&4-G5(B_Fb!nV`qXduOWJA_Mn57 zJZ`Dq3Kl%DlcAYw-c_DZUZ6o-)=n#r>2R$i$9$mNDP@&aej~?te1}w0hFNuj z0$_wRp0yA%;Ti+^`0sz!!XFTaQe5& zK1D~LGs{mckE>!1I0)nm(*6vGGwI9URfeOJfr6M4;m@W zQNo07UIp0=aV(KZ7*=&sv=Dgcu_9mhC*2@QtTOOBef4%)C31P#dyum6J(ZqL;u3{i zF+|IfV;p|-{Cp|s66Q+&Z|^=JN_qjcL^7)Ir~qJK;aQA6L;xaIr{6U zze{KeqoLg=!|@7IeHhi=CaX*^mf`CHc z6b2~V-Qx7jehL|~#^+E8xA}GfPreomdV6Me&MrlIT&rlU)bThHJ$WiHz-`D9iLuw+ z_ITVfJ;yXy7(}n7;)s_rUdL0|8x?@rW_m_Q;M6v%cA6Q+MZ%IwbZ-6(B-9VtFsAty z@6$H*(*cU{t$lfBSjygKOIBjEEjFs&*Y1#Gzg?ThtBaZCb5Kl5WMhwxx} z{X(x&BbLQ5BKj*KMB>{weAv#b;;f3N)sKXm8R3DwqsR5ro(9?EiL#TTP4?p5Y~M@6 z<;p?BLk1}wCvDG6TU&14w06D#ZY2+mvJ$O2Me5J#yzG7>Ekr}%M>$f`z?{f{%hoI%3FLVe0%P_ zakXtyvX6P#riP(PX7&&u=$kdDZo3;FMY-V|+1elhIF933uO38r;+tr32X+2oAKRNS)p8U!r2(>`xI!uHO}T!1AyMtw z!NN&(zu3Gc>(=|>vIMOf`85+b`|&r|K-Cuepl(yn(EVQ+qXRusL$7sTI=yH${-IaK zWDm?}l?~nCpGtTE7j+oY4D3PIUV4N`)=f#DgXa>XTXq^CdpYakFH>&QAv*c0%jz?4 z)Z-R424h6+sh2F!jxRf}qE6 zvu{o7k#AddleMM}?@p$F+gKQ5Oqi{TJ`P6)Y7EOW1gZ`GIpi{`R_~k@c6tewQ5K{1 z&DXBmo3sopObxTlW@nh@s9J*lFBcoHxL;Yly_e7bZJJq$?cR_&^xdKlScSE$WJCRb zUwrj`<@|2tg!*$GXd+(IEN+W;(v*?q+Un~sv^tm>?Gu4>EVXWd`La=0;k;B!lkXuC zR4eNc@m3=-JZ08N>2`fSsBw7S)Qwj3F5drJ@babxs$#0a-ukcGKt1avXLrIk-o14G zdczcflJh{rzU~OEBsrMfH$*CGO*(Qs8?c?-TK^FV+aebuP?UcI25B4~c$qt~814CD zBv@gw>iF8+e4fq&J8q!A|HTy(11;vpXV&Ua%kqp=#r=hkSgJx%5;;Sarfhl&rFU?oJl7q(BogGm9Ht#Y0`1fC4m*9E)H?khNFQMP8JF@rO@snp+)qH^83*7Ah z3f|~#7K8fKim?A`P~WPH`@`x^oAcZ54-~(ToJzLWwSupQE3AK%p`3od{gEb|9so~> zVPU-Vm1cksJ~QzzB#w!oYB9-){y2T3T4_>tOa3vH&-FET^?c;pV;%R-AeM@H<5 zVMAKmfR!qlP>T!4OwM-?jfP&sPIKI)G9h|9P&^-Sys+w@h+Q59hqu^E=+{B4O^;*Zt9&8%?Mf;G&*X0ODrno?p8N zm!6Nx`}K##6qDwbzJwb4ltn7KtOX7ZDd9M|Z|FvFKW-Z83=J7GTiWRh&Rdqzv~Ick z#E^`ZzZH?%JyH0$x2ZfMWILf6C@d^)u1*C5HFC?dZ4v%@4Jw(LBXga2RfCUz?v0w| z;5IVfXa_+4>DC#|Aa9Up#M0GKTd|2+R?vy7>jRj`{a|@6mvO$!=mE_NBT|+4@_ht< z55qkUTQyL3u|!`?!=BHcYZ4oZhL>;_5@7RwjV~^3>Qn(XVIlqfrvx%;5KSxp6CUp@ zO||(i!UBjF;hK7T`Z%lA2yA!lYy~_5>EymziC$$#`e^a0F85CQa)_F zNRefQ+M6YdI_?C@*fgrV;G%q5rIx#Gv#EzDa9TTobMMbNWUBaBh3-t!RUnfeH<6!~ zTJAlrtvKRLvXQR3GGUzr9gVu7Hzj!s=kY859TV zg={po2g}Y+sI;sM;gKg?qGs#q1>`5%#o1_%k2JZ@gHpMg^PxJiyib4VZY-(RapJ^W?3@jb0^YCBduLA!p5gI$UEU`z6o$29JIQ z4ScVCpNdCx&Um=VI?LKgwQ{xd-%ZW)-KPRr@P7k0V+x)1|HA@zj(6jKP4G*rhvpu7 z5|pc+BEMJ-C`Kb^!+-l=IUCI7W{n)S8`~$yv)T_2`^vWITWd+C!j)eZ{;SNpwZPa> zzg!G>L*`xw7#QE@pCcLeHn+zw%J2>U_&Q6AL1yzC!xUG&)KtQvvIcUSnp@C!DDes@`q>v1w$X2-AGzVxOz#O#i^WGA4XSV!!c>pY;9Lm}e6b z+TXfN<=*=HZoGV&4 zaY*K}&DB|URshLzUh(0)EhVfdc$E!^uQ{ToTZW~uF`+8SI4Wo-x^wFpISV|Jd6~)jF!sQ z!wV(B`e2Cs^W5qHcAukRrH=CIODx;|Um^jm=@M|MtkMdd#Ei{(STlh2^$iIS^)h!u z$S+eyMM6S@$g!v#BPvQrtlv_1G)<6yp*CzYCd`~Y`mTtyAwm^mp@R9qj1G-ye}b#z zc+=w<&#O>Eiy<=)SSHl{+euf=mq9c1%gEvCskCiK>FNc3%}WQVhKAP}i=I_xth^Sz zs_?L9q3>gIU8=eCyckn#IdRZ%IfK#xp=>EoA>@zVtxirI&E68;-a*EChMlRgId^*E z48B*kE6O*O_C1hZZ+L3wD0o%!7IIEe)Vf9>R6S)PyQ_Ka72@+aemIM#$y$i*4NsAL z8@Xy;gZzQZznBR~YiK))h-MNy&>l_vS52#i4hb%;bt1c34^ zFciogUYZOZL}$7VP$dS^4~j$yPWAwV>NgPC62JhS$g2fQ4A3HSj6fMpL*F$d4*?Ki zw=7YSC`v%hwHXLIfV_$n1F&R}C?cW-IN%RXwm#?ng~RJOlZ$M;IFz{729aGw&nH0m z4B&eLQIZRM#g|8e2p@8JR9+*Bk$@I3fHsh94z#X5NR~hVQDvMgt%va2Sh8{8Zvsmi zCCkfYJq?bd^Wq90!fj;Tz=9%5kcbl`#y5k;LRqL;@&bAvzhJ2h(Bgku|2p&Kzy>3B z@(U)MV{xT`!3?LK3un?xL~ftw^QCrbeEtTda#IB%)*nXIKKcdxAv`2jMQr8G)J=_~ zLi{XOn}`Umb(&cXs`lH$WXkb>>16NY#B)=V()3ou?HI%<8~`1_#j!b&s#+wF8JW>s zX{EdTywG4@nVkJ60pqYK1_CgtOJwhqAFN{0SZzBcYVh%#F{0N%)B_(-#BQE)`@~%_ zghHBFEFT`@jS&QLRl~zjGP^~=hf2xlQ)|Q!N8-I7Klu#(JtJyZm}PGRc78(JttAgw9g*W(C+TFlJyWx+JFL=lv?y&t&%0wYE28`pO(U%v0@+7-Vgs@$ z?1^r(1NU9EWLS!R*wjBtb#>zy6J6ybZ7=r~W*F&bPGWF(&ZJ4Vs%9Nb$TV{#j%iyz zxws^TRoY?9>ne_9cAue0Mc7n<8>xK{9CNM0B5ZlilXa_Yqc^)7UymjnMAWS0kL!F{ z94?fza3%_u4HsPBQ-4YI$Ca0Vt#=>x;qP3AHh9iMP|T)ZzG3d!kURF-XQ!7>S5$GZ zaee!nccu#B9k2ch&CMxlGD2cnv~tm(or8sn*j4qzi?*P*^7i2#y?9Z-@0i-&O)=r# zv(pxZX~y11zEmqfgG4;)Pm+;bzNv3=eYzHYJ&#e5H{-Z5N-8|`*xiZ9&_PQO#~63c z9=;m3!{y<%OV>=dZ{2|f?dmkR-q0BM4-b9l?e-1Fb`5W|UyImNyE)YJzR4T;zgNi- zOmj>~;>M(dih-!_wSjXdfC-5!)0(xA^hSvEX{i#Wzemqq%?c_-(E1rV@x7zc1Ls6r z&L-&ep{9-kG)V?%n2Vd%;&t(T0CLP2FzHO~V=O}c{UpZ1a=@Xt3}Rr+62t<LuJtJf*NbFLyDPf~nej5R-J#cH3B4ZV0k z@v*b(o#tNeR@tA@$W+$YQmn;oB_Y1cNe9xv*R78JEZE_xI5t}jl{`+)A`xF~ot#L6 zHaj(Fo!##*=;o0enr9ouioROmWF`#jxgX6uyVh>&jjPQ?wi)x_$o%ohfd*xjqG%22 zT!Zj7vlg&M@WIPqS5DvJj0`SL&s^lhFwso$XD%^XR-Y5p91MyMlSL!A>$Kg#iee1l zA{L9(FWQ$=41+89SU?nP-JW2IqHc`=?gtca7)6sAo?e>GSupNbS~&P9PCUL=B)myJ zqqEuTt2Gxp4n%{Nr21wn3)Nq$A&+hzLzaJHBPbBx^SMg}(G!KAbNN--rgl|xYYc0z zh$TK0W`rk0exK^Oe~%G-0aCjXnQZl88&lqEy6#|98wBT^^iCWz9K|3SlFW}oPhEnKIv|&UVl7! z#|5qk>EyAS#Jxo3Lkah~!^icAs|1sT-KS0pFzVa(fN=B=@}DO=-pKtl`qW}!-6tHVC(}E4VyYm|G09{E=Cm1+F?22Df4d zh=aGA!R8@O2a`(_QY)(gC%?@6>>K5;7r7S40%kn2cG>&TpKcZPQ!qQ!%J%q%Rh-JI zC2VQh8$O%q((_0#9==cne(=VJdE|uki=vV4NSqa}B5lj4Z)^mH~9J!JgRyPPc z_7kL1*FF<+p}pzhuA3P8EB4JNQHUF$SZ%E);GlbgG8ktoWWn-6NQ`PZ}3VP;u&qadEwP3q z6S^}BP|ATMb9dB6C=GQ=-YASLM-sO2XGQ%-2Fem79b>Vb1GPe?UqxGZwKf?AdxvXa z$j5&=%$qc+&cGr2}6gqI8b zEJxB5*T*706`P}~>ZLK#%@_z*8$H=(Ac+UIe)ZL5r2&F8w7{Pz4KD{P{YPbqVE|nb zBJoA{e#a0Xt59G#0VGU^Nd6?SA%K*~YEzU=;=cl9Nj|`9L$82jP~Dnp=^{>A1(EO} zA`&=;%8$jx5*bt>A0p`>3UY6c;YF<=!HO8DqBhQU4F0mp2XfFe;W2_rkhrqp_DaB9X%lZ=C+K}S@8uoE9+#|*o4}eI$W-SuQYihKQ?!JG0HrdVi19D zy`4zw-5xQhcs)kLme)QAnmERgB5o+DNqxuK#30msK_3hOb_xQ|h*xi7C^6UmHAvkO}Xjy~0{ z5MI-l59g1tn-u<(N%qde^5+Mtns~M`groUUg)4tBVVcda)wU;TZ~Q=8fHwtrH2f1l z5SU6#)*BVm*c)FeGah~GoLu+!&DK9eKijYo-`{r~H#!`yaWFHdc%*l5J=BOF(7%zb zLWC5Zzi727?7iD+_8rSLA;&bAO#M0vk+NJnckK$=-OrFuA|%OCh{OG`l80ufDcT76 zq>xu1L0{hln|oFp)v-kGpVdS$gjyQHV=@yBNux|68%O+e;m|b9rz>kAl zo1!fG_y?16yGJpK{Me`zUtS~+ZtLR#|F|=Osx*Xq(QlCI;sjcwRmB;VFL6iG$KzNY zb^S3rz3cm(s>dRH(J72pIY#bl$R}&=wnmfmJLm9RWYC?ut7-8YPdJ-ZJH|xn81v4a zl6RjEJ{u_hAbx_MdNfI-0<&J~TSX#kGwQ1->NC^%h&v%)1Gi?HBF7T!F)^sW#gN0D znrJp+a#LVlQP*zMrXK0$*N3(SxvG6oe5m^0I?F8J!;3|}W@eothzqlu?r#40Yz%W+ zobW*c$>cJ9Ph5;cIa?pH&(J%gZxwdaLEHVi&Dpw>-vxO^hsLVg%MZ1ruYNb|wHk(M z)MmHz1ifpsQ$Znb;%pF}X1#{URn@mP@OyLPE*TcwJ2z)$UJCTcd)|_IH9Xjny!d~JHAlR=yRsFFpI$zSc+ONP{qKEEv4w9y8pXdYxsW?VLs!=+eD^iJk z(zJ6?C^b;z2`OC1jToqEe9G>sk4-|nI!cuqJXfN)0={vthl`b4pdSFNMWD9MKn$2?F3H59rD$`(E=01(_Pa%|d zO#aJ_K!&HJ6}IzZ9lHOJlJ$|dOX*n_Fzj^Z*j&EdA{ z4Yp`dW|>Bt%Uxhbx+2LDN0*&nvt)P z-p8a3qc|%#_eJM%`bTqMQ%Li7QfCwM@1d{rlC>NB*k`;FCb|1n#Cb2AgDE95rv1y3 zSaHkgpJA9?I?)dv&!iVP$6A3D58=ivUkqz2$x019>N z^jv#9oHCN`flM@DX_{Iajxa^RLZ^*?#JrbVEf}XoBi#@aFD!p<5RHGM$wEgm7l9>d zvDAn**ZtkZjdeYhhXLDRtNw8WK>>AYS46QNh%BL!#`JoA{)vh;!g7jIW~J9J+G@B^kDV zv15}Rb~7CLY%J1L0mgchhGg|qq!YNy8Nb&#f&<5|Ryq7$u(i0f%|U42D;q}_x${0s z^GRQ3=cDf`5n&&IcwCcagrU-LNoTqvtykB*es6W(3wpPBGZ|#^6W-%)jO)WNCwI(B z<4g?q=bvIHxv3~eda{+a^+k4p4x>WKb^$%HC%dLBRwIrai#%~d4x5|ni_}*zceqCs zxL>id==?EhV+V@dZR#WE9ec2;=F>(DN{snX(OZT02SDF6b0Z*CU;l|uP!#hp->**S z>j0ZFpN6@JbCfKJP0Fdrh@BRJ4-I+q|6w`|%Zxs@tqzx=9w^x798Ztn!NA{_^5fd6 z+?VRo1Mey#*@5D*YxX*(>{+|2E#U7eE`B;|sofgYr3Bp|ROa;ifTt>3dQ6NK2BewR2kSZ7s4!q)ybBY*8Zr9J!yfC^gMPygT9EypX>9j zIj7*C-pkTx%Y4>Wy5QClFBkjoO(OlH&gat9AMPZNOB&WLJjkTITZp|2qcZlEh(gGe zkLd0(O5aSXV+<1b$ndZbj9;qD15+J(g28E zgK*&yT}Pakk|%?RuNl`N(*9$JDyG_TMBjs9GF>--Y2CIninqEr9}hK-RJn>JfIxPf zsh$)%2bZZ9yO4!0@*Q~A9U8ifgcy7;1uwKVvj7XotjD{!b{43^eTO}v9&oIU`7}D2 ztx~gcl+28&xU4+?X=ydfkF)Q0v$}F>7V95*Lj!%`E2K4SbQh=CR<@d zjhNjj;{TM7JEJSWgxh12ZeSmpxykjAj6#)TT3!K_Jhs_syMW7sCqz*@BXS8OYwHAi%-du+;O;| z=<(Rzt%>7zSqrS4`ojEEn>!l_XG*>=(54z_;O(is?;J=g zZZ3)Igqvj|0iuBD>;3OI*!WXVk4kJ7lq@2Roekw*v#YGQ1g0C;hxFOM*sT&O_vvKv zSDkI>qtDCm$i|(oTDk+4w~eXaRK<-{Yb-A2p}&Sk(6`%@a(?%DFnTh63XIaON2|Rs zJFt|o)8p)PS}8JF+?aq=bKD)+u1ojkY1@3ndT$X#W59Y74?wHdpv1aSHRz9oU zghiX6`CcP=tIfprI$C+qEo+`zY60`U>xP3$s3R`4ul#&$Z`#&(r}=e%9*0fNxn#nh@5b+B%ZjE3zlpICL!D@ zoNxyClYrv{qxuriyl~l?BAUgL5xGa^rHsviX!|kOn7FrI#S7M1Rw`IF#sggqU0Lfc=re|3PSf;wlf0Jr+p#4} z)8>XLI`{;8M z>}M;Ddl0)%i%g#AfSo7wV-Blucm|8XMy=mpYuZc@Qu$>fwo;yoX74?BM~zJ8td-#g zk7Hq{D!*HTm1iT}sfp@v?u}7Ripy-=wTwG=?FVZj+pbyLr)~P6(7ASIN6?)Z3dF$s zq6YiWWmwR^J;`qv57}E4-%}w=6ng{4&|v)l2`3Sd?9_)k@yd#Pd6Y+mDOs zuvz^d31!DuwJP)9hYVd=&41QhbCa95hgfg;Y~H zz1t&2ERpr*2Bcv=`TfHHx6zUYvB<`;kog6c{8eZ*5>BHPE6z02$F$kixhaj0%+4CN zc}r*SN)4mVBEYp7#bBdpi$?+5-L>JZy`_fMc><*S(YJuyp}umZ!`tz+)hfDB;yTuD zK4GE6VTfpYTG473juu33NLL8nSJSn6^)GvL`mg)XzgaM(JoIxrks&jUjNbLT=}WRq z1UaD864_DGES|i+#b2Hz_i$!}+}}=LEIADuvC~M{{)GzNasgM*D!FhE!X;Mdt+aOE zZk|A!JNSji&W0Sz{&n2zKk+p|uv9g9r+n;C`hxr8gZxj)%Mq8LiWBYrW5-@T)&{QS zfDH%mu5xa=o>mZGI}?0jni&i@*G;h*4;aIB0v{UGDxPinB|*ez7et zFI@CaX-`tb7(gNu9dAteYjzybN)ojxUXADjlry6JrISa4kEZflH|w}FVOrRNkr$nX zj%H5>PaLVDC(h2a}_Fq<2_~e0N#rAEAwuLu- zcDv}EJr>4EHGbl27te@R3f;c;=9%`1MOHBHyK|txdF&qB;<;rCYJ?1W*!r<^MDC(I z@{90aVaZvA+dnt;-Q#R+OxIVc2s{I)VXD?F;;%t%IEk7CbGiy(V8x%dQ|-POV_;?e z0(H~9;PJ=J%X(_$OOoU*2d_M|{|yyGcu%*chAPWQvhHP0u80ZEsW{At1{B?2zJoW) zXzf$K9mpQiExwefVxQ81a@S%;Ib6w2e!9=_1zT9Rj`X|#C#d88^2OeXi66yDuC|kD zqCof99Me1+UoCuv3p#bKN`@&6-xNt#e9R8|t>wL^=k1E`s3j=1JHn;M84~enucuo~ z$15GQ`S%N26}(!k!@#gPqEGSqzX~zT5-sjsQnRc>F}@~R+WOLCcf}v$R-fv9>x_j3 z?k7_dOAsZkBOfoLSMlOy{HAJbOB<5rwg7=#^3tpZmOR8Db}>8?CI(&<#$0ysF*Z2; zD3o#O!fHEfZ(t9+!h?NcIx{enypD@ln;DdePtqenl$Xz#48=_!6~A5W4S|dZl`N$l zM}TK_%+&Q3IEV=5$XK5+XJsBAcj;*rZPsiA<{o9#r+hUc$8J=$mvtM=yf-&E)AY(y zGuE(pMI)piBzOeEQPlhxE?D~mxUC`jv)Bg zzb`{#Z&hGAWQLR6%C&W%z36N)juxYJL82rz&%a8HybX~!6W4ON;?yj&q;VlqW>#t+ zyUH+%V=;nOah&%LR`DwC`NE*Kh>=7R40yBQ4+mr;dIWCT-eX~>mp4oGwvmM@Wh!~P zi;`{|XPD|Ud^1GPEMK=9E1nJy%3J(}v5OG+mw$>vDnAfx))~l%dT#X5Fww;%>csfL z$)fpX^*XuSV=3*px{I6P)pz+XUTuw0+SM@zveR&Pd*l>4x63*oLpwa_@l-$f*tF6; zoX(!-J<9@V3VzY8kh4L#zdY^yY~6iB7|)8PYMqt<_G&cM7w84xk=Bnn=od;U2+y+1 z<;Qt8*#5$oZ!D5Hpy_Z)VqwFc@C9RH!gY(~btI96OHEigvoe)oMkAJq<~QySMEx+D zccSn}8sQ-)tyMngZNDVjZ#oeZcGZIix6a%lsV{kW;qFoT{*hhCvAp`*#yY7H5S#vs;q;aJ3=to6Itw3a z=0=#@8ueVgX$*$!AYYo8Fb>2z%gx?trR%`d4R|`sv31usJ!*yx$e9S6@=Rq$h&{LV zZY*XCOsYm_LmRem)Kg?WSY)BG5uWA zI?d2>_WNt^^WqTH@c77ifz!db@{!n6s>Fx2Vc6a!<^(fm6r&RMXqtGM^v zE`;UYs9tOOJm_}gyeTWEiI)bxCfm)y&qbrB5Bd*a-3jt~6b%Xw8ydRXu5<%DY7k`m zQD4myK*`SZQ1YbPGe?oL?`6ODQp{a*Q>DM1>Xg&;=cgRMF-yFY(zRKj&E{Ek$XEXoS4Gkh0iF)n5h4q%IH;S&xzEmNDl%N4qksG{$Cs)t6C1keQ;1g}E zDu)j2imkXcnhz3nnCmx|)J^HtYWMnDTvD-)Y-UQ;Py1hWB-Q5>oSNX6rB?v70#&%B zL$MSpRd!#zyp71{FoYnLd(6Y``7Vm43a*~^WW0YJ=Nf=>SQ<37b~V0UI@dcZJMt$dz7#^;>0N`| zXyi(EUHI>vZ*hf2V+~JYb5+YSysUh4*Sy<4a;&ms^0fWt?;*>qtX8vBvA=?In56Xq zT=UXVCy4ZCupiU9<8pO_mWfymO@n$QDW`FUts7U&Hbfa)4dTc?E6;Le19_ff!A>rn z{h@iZ)Jz97aL7$mAedbed^mYz)^$r?T)j~jf$DSZVng-Mip#5;U@Lu)`OL)2)47Oc zqQYKOwqk(bds`+4&|z6m`imD9Cicp<9(!?PFK+v>N?V5>mK>ur(1SzIPU(&c|wrN7WbM{EX0^-7W@S( z_Up2FbRT>_-Er2%7a!X<5{~P56NJrsPCT@$ef~?0!rsOm5AI4fD*6P6JkW{2gpa$PsI@5E$%$;;QDB02c)^_S zbwVxl{-6H4IPI5XwaASKgy7kvJW3MTwc`ilP*GT*uW@fm;mxnz)840CzHsjKHfar| zV7Uu#oC}N5*&i)w3?9BU^`-FqwZm~}$i6hLrgvIfDr*}i z@~D;p6N(Cl+^D1S=AmFV|D^Rrt#v@&4ZbZ4-JM; z-c@1X2w;0*wDRjI9RA0LfVX{pw}GnL4{+1|cNxc0SCioW%oyH%)OAhhXp;5ciU6q! zTf-lbB2eKyk0^~T0{Qy}_&3g);C*;XwIVHF7jeWlO=Q;+m9ADAs=I6km!_SW9whXo z)o6$DTp21tO@ERq6e}KMR7s8=ln|CiiNVne4mhxgomFBrh?uLVG%wdTlcL9h8khVb zA>w$rz&4>Sal$Et-x!<0FhH?cOA{9^B!d99H^P+ApHd?SnUjqg;ev_qg{zZ6jPhwm%oj2T|h2KOW^bW4Bo4b}W+vbDR|2vb1e<{m? z*u{Ei*=e?_F|(KWcSyLG_$IU3c?h zlSSrQV|t1PP-D|tsodS}H)AcuG?)8_%-Kg)I=-7$EZ+EQ;6aOsyT{5^nmiHoAw5=q zhgRgh3vS4+8*b04Dw&QNl>1|4Z3Yi{(HjzeZ6tzz1s%pt%NncoJfzZF*;|f9No@6E zcOKT+Z|SSPv8g8dY0;_nup6l_txyuGET|)nkvm)Km$$!(unwyAdn&JDnRJk8aeB$# z0Xt(*Vhv-rd5j%m(MmTSW z)P*u0wx%C5#9BCDtnsC*Vm;NE(;1Pkxmlws=Xy<9^}MN5UWM7Xoa6x|tYwsu1hv!E zPWk#q591Z4RigBD?E^BZ1@hg;Wh*<~2wp-fBxy!6JHp>)``t*Ne58y2S?Sv4u&q1P z$9B-)MWYfXH{$5>D`M`yvhC2b^c+l!YtKf~HjPKa2d1r9f{#uQolVww-j&{bQXCTx zkaO4I6spy<0m@;vp$K<*+W~8R^o*S6rLPJ5Jr0}xz6qCuu`kc2csE^EN+P7vS-=0g z4eW;0Rpwf3k}dW=xjJ{e&7k5wW&cvd_shrMJs9P+WSD`yj;dbBsava%JPnA}*M2#^ z;^K2&dmZ57R-eIkc^#9r%W>5--tJx3ij)a=A)r1DpWX|??wW@xsKEywT#~7B$HVBK&xqZAp#|aXcmMnkO>Y{P)cU^h{@S&- zyV_}GW#+&xD=Sm8GDl#SrIjU_rR4ybnw0|%IWm=&Rt{vQRt{8_W)3*ylmeLp&g6)S zf{Ka?h=3q69{=Zj&fE1_Z`O1_&%N&J`d(cNq&V)K%q-82=WkXB>pP^eGqTJ-=25hJ z3QdcxrTezo1mFU6pza$?$=^R_iwQxCt0pesm|=-}Max^|^1oNdMwZ{L}0ko(_@%LNC#oxrm8ajQXx!`3b<>zp5-wHh+}z zZEjqOw|>&_Rk?C#{8a&6h2m4umDpZ3hL=CYP-rCtccaQrXT>doszPf_OoFqX@1tBj zk)n_CCGr2XXDGlK2R?<64thSjN^ES_C&jkkaPm>@#*o>P|2#<_S8y*D7t^=8FUY%2 zEZCe6cK28Ixk0xt|FUoTt4#8em{(bD1mb_|^Pi3agkE2nxeAJz=75qVlKsh&l=QPR zsfLK)?U|6UP&D-|>NHl~;TW;}V*}lwS5@_-lGM4?B(bX{MTxaOMp|s1SJg*6QcTLf zsEJ5YBwF#SUSrZ}2-0jyN-g%lNITG%COTxDvgimV>4Fq5?8VrIKviETO+=Sm_anT* zvBaR+yhBlT(UY$1uMcYc#HFjQqXgA}b-eX1=SDOq+jXbgdE-=(1FVy%>@5DkQWx{f97J(B><7{FP3|XNy91I!|0!P zBc_`j!OK|=#%+1KEtgjZWbnwvh@apoW?a_`g9dNdDY{;tDca+elj`k`4v^ zdS)5zpr_|x?e>)o?a8~%2810$rk!`T9Z7iJSpQ50DL&Mk z9&Qw=x?^u>fREzvqT8!|2>;#sHL!}w;V3o(-;d-GV#UOx@c;d5+P`x@zeO!|zt51f z^Z^!!IeX%auI04H&lc6~=Ka&|>LUT@u9nJo@anrb#5SF}N5JQ@JUzh@KZ1h)tp}%w( zpJDKgHqd0_pZ{H;g4A_y4q9~#E+>UV;$t%)Lut|u%GsIIvWiQoz$s^T8>E}-pJPE0RC28_uiCuygq*@ zPp7sdP4mOvvei8+*DA@we!y7l1)62sh+-oO=;M0N4zt6=a}&?{Ff952#rnS%Faa7` zS(iG(Z}{6^-vUU%*wnK_Bwv)y`Uz-#M^7q6bEbWNj3nJhYX5DIm5D7_jTXkr#^G12 zv@eUJL8JB+My64Aljr;MB@-L-EUqoSt4^Y`MJTY53D1l=jLZn+n~~ltn}>wRg=X?n>9N z7tV*u&;H@Mb^*6T`()`JO{S@u#TwT3DG8akG!?^d(8#sm7?D_)3xqGKXG6WqKnJ37 z|BSmjK-Zk?S@^hk2OJlEvVVVAa>q-!K_ud4i$v33w~{w~hT%84r{8>A+{Lngw*uaj z1T6j=zmD;%SBGhvAREr?f(s9-dmEj6`FARo!7*Fqo=I&)82-^e^&^w5_qo+pXn2c1 zY+2?g$OHbn)JkPUgu3P+ZpFa%lC+BUSOLE}eQgs?uh#$Oo3_pFJFAbHC}ni^>jEAa z9@iy2RD}EFZT`f?!3qjuPnVnw@vzbNoGQt>KNN|+ca04bpY^`Y&n`S7C)-^<2?pmi zX8jrxyf-z3d6D_{sCQF^e@9b;krVrPHuSe1Ufn3c>1s%E!BEvE+9{A)j4lE z{eYG+ZLQCYSpx*+hWnWQpJ!*JMo&mwJf=8YF?>&CHLbI%nw8o(h-pQ@F_G6dY)?3+ z$#6o{TQI5lBs%?f?4+zmHSJN07-ufgZn}AeH}oWq-)nT9N8`f54a!znV@!jJ1q^u> zV>+%v8C#*0W};+y7adV1M?-IZ;5_>!{0A@%!es1 zC2vw?Hmb45GH|HWJav~OT%v40x0JuE0kf5w_brJ?SNi-*Cih)8mUK0ZLcWRtwol7! zO%e?)W6RqLO%rh*$&Kx%s8b}J!AkoXX~PS-6S=gLjS+moULV!Sdm9k|wJgN_2$|7G z$@QtB@q0x~hVH&+-&=gx+A?!j_E>7SE#4|F}g#dAk(Vi8|9`>(IN%6dPtn@gnS`J-FwEpTS~~-Y#vk)XO}X`m??a-u{E;7{W+G_GAjEv%@mRL}S+;*0;-y`@KfQR% z(|>bl=|#eQ`0TA@edatHH+u+53)P9(^_M5@UHHFDszcY4ufP7d^0IpjKKZaxT8I)* zvVi^Xw0EeEPL0_lS_a7552yQ0{|1Ci>!L~~l{Qyw+D^KDEz8erI`m*_)WE$AG_`D? ze)-&)UMGL%hMIsii!ukW-rH}IVW)0D6)qithG^^q;Tc^=?C z@|$Nu{e<%{vCqMS--@4X#T^y=Zj?8joh|)4?{%$WBKZ({)B(Bi;$@iNi{bjV=&>l) z-(TPJwXONaK8Kkf)^BzOtS|59zHUp_(^sPJ+S8cjl>1W;=rvcwJ1$fhYKUiw&0KD0 zN!<7HuKGIx?$J}RIon=`f96hD1o@0uPV(`gzTroBp^`_*iJj?$Yq7mgkw3qOTu+T2 zra)`KzJpkf`2@cua;Br;%rsJ0Hn*K&+p;h@Vx;d=Js81CPCY5|$#P4J?iuXTbK1$h zp!RNcfB1@B9%$&QEV1y@H{4P_?nHWq!Mj_5Th7H$XH4Hz%|sZ^fATBQJeFUSv&q8R z%F3k8*|#+6HFfy#SB(ACr`@@ib9IWIK^y@&rpf(Afbm{(Mg4VYQS`)l$^K5%AN*9l zDvaX7UwA!md=&CF!vb}YKDZw|c0*+O`?;a{RD_5EsF`#iOrG8{vL?!%nk0uy12HCP)BvrJI4gq~b+N%!9 zw1QlptBtM|o*3-OvX3I{t5Rr)nw!>KWccYGsh`1BlS9f2w}m?(D5fs!+o0vhp1w1y zb<})r`{B&E&&8?NQ>=ZbLT)#^Zg4-02``6y@s#`nYA-4jW|Hq>ukwFj57*^LLOq#P zc*|e!bSn(q{`d_>-10wuS8pKUoN_5#_)#+}&x_LhBoym~`@E4jI|z`KsLo?G!MCMkJ`3-$?xbgxTl zki+3Qv%K|GdO0L@#tyi_QWNgnv$w;vBRd2}y5U!w#9Z($g1zQ{yqGf}(!>liBDOPP zuQnF$)niRdb*Lgd(ntf{K0(fO!%PEW0!i+c`-hU3d{)8y1!7zg251dfYcMx*+Oqml z3J0+|;xiT+Jly%WHc^YW=M77f+A$+c%fq8&{Gqoo7O-cp71NSad9ts%{ovO=2|)JP zT505>v#V0uo}E^IW^duz?6fsh_#OGh*3ANB^e*<2)tayXpUTS+?_BlW*YlO8k5K6qIqt6Wo^!_FO<(*q2}``A9fb0~>B) zbH=s-eNcUQ5Wa`$UH(ZDs4ZfSIs~E8uBetjyEU+II}B>(?r_FWULWZ6$A&XCvH7wc zANe;Dw`mWzkHaE@iEUlBPCmsLs(c@r<$xUp$7ZF&hA?LmiXYX1EN01J`p6Z z&b zqp*5mI87h_k(JT7KVRs!_3s(OB}tSgX@^TioSWiXZOm&eQIy_tx1}T{B3#~*%eM)} zviS4*MT_bf)fd-pjY96<}|IHTI%J}x}$Wq4sW(exT>+E|gu0#~$ zIS`RtLAB+JEp2bpIue1B0ZR_i#H~~!IOOa@%?Q6MxR0mpFGEe-rA{v6 zB0lRwZQ`Y+)-VWFvJNj^1vFW7jfaT~O zLXn1G((I0?aKK78Kja7%2omTwrW8Z}(f!$L6Tq(Sgtrj3rxrflJFuna`0={$iVs?o z=R6}1{!3oomyQ$E9YM!n8$~&6bXv}f_q^?-^?`qzdsTsC%`AN2eA}b%QNy=grqUbb zk5YacC{x5%1_;^C1g|mv#pqdhz0c%JLd@IS2D9I=uKb3)@DM%H+We+9#MJWYGm~v?Fc>0-c{Af=09uuoA%Hb#ityvq;Q8PBzbJonx#VB> zKU2eYbGp&Cr2*|Y0Zx&&hN>tXV`+RJ_%N?0errD}%OT=2y>)uNvI2b@hE$qP%=sAcUQS%y2c;bS=Ywd)pI zRg)Npp7XC|k(Qs)HUgGoXjfM{4zJAnnIhK2@f2wq_W`6!=Yam&EOsO~szGCd&evn~ z5imo=Py$e3M0zM2VkxuI_T|ioO?U!KkOoF#SBsH9QQdFI1T8!b$5~vGFW{7;;ub?- zjO-&oxjlhK$45HT;iz7gm73l|1+K1Jy z5uf^?zpr*|DHIDC1$p6C1eGe0fcsHH_KC|TEmhED1cofAu_LZgDKW=Xq9&-AW^p)J zCXD|U6Ftze4ujcED+Np9Yjo(7f7Ou05qKI@pk_Ks6c_=j6m*_~{!`BON8=god;^NI zk9!FsU2-;1x7aRTfFNF?0Lo>DK+;+xi@R7ikPGsbjZ^CJR2FEJpc21yYrMOB@-{Wd z{DVr0M{&ffbd_S4jC=PwNyWt~e}^;-b;Qx(L5_rb&m@cjdX_lV}7U|=Nz?uCTbdbOR zbOlJs_ET~wD$g}VHg_{5`gM%-i4?AAs-^3TeO zuJ{u}TI$?9My^&r;h^&aR9=ygOcEGTM%T(fE3YlK5NHj=q#+50qZiCu+X`LwpanpM z`zQ^CBQU}1tU!ze3|o}*#FwJ@I?u{g9Ew6N_5mx?X{L&P(}?GKd!|Hqj6%E>tV*KQ zqG?fqq*WP-r%S8PY-mlf(BHw!z#}urMx}rQ%j}BI?uIh)ZEkTXD+pd6+77=&JBq$b zIOOv)%9$QuJ6%RB44jwF+ahci)3U3AN_{v|9R|@DPYkl7I>N5EhYwwv&mR-RFy_am= z9JA$;7?ZF(?E*cexcVx%#M6i0>^Rd_U6SyZTf$s9^nc;63}U{UuCdWcHXz$DR-sK< zZ0X|$RTd_m|DmuV|K&bgl7$P>Xz!sN_Mm3W_zkV!k<*d#xdlm&LFQaUPO53cNIafF zv*K;+HMO59s1Qc2CgdFd_z)4x`mm98@S0v|X6r@B{*O*Qm0J6667OHk*v#w;_F&MM zZ+xaF6XKO*VpRqx^Vc3jS@YX5j1xpR9JQBXF3rfI}O~R|FoHfLMxc}NM)*By|$^o zKV0}S9%4c@tu|+;NpklIy4JqLvc78EMaLu(pjmo*Fd;i1y^JOFRjG}96pAd?USvfa zvq?#0SOP~(wgqHBV3#(ryVUWaVV4_!?SNcbE;4FM*Rb8!%-+)4`}avD^y6*^w9KoyCpzEYcs(XYjA_~Jb3;**%srjD3o-A4N^mh$0NTuaDrTO07a$i<}# z75~V)3sG;_4|E$>zTKUI$*Eu2ki}HMJ>*mb=%;0ET76!LEhnzv5b@;_=+fSkp~=n9 z@+DQKPcPY>n0It~&2?8qd5TNeC*rvq3tfLPBCkJav^rE#SbDGqlHbC|RzG*RuX|b` zg!#h#Q+n0V(VTxLe)+!@5by1)x2!&OQ1`(8t+0gl{?E%~?^nE#EuMyZ9>$3p?w2`l zWtNyF+*_`J<>^`z!?XaWZ%%La{PTb**=V{`3;OLMFg>bs_XpwaGe5lFs^N14yNMsc zty{gPU1cHtZsdV>XT>BUMbj)S5rR?su|=G9_o1MD|NJ zjOY8=sKM-xti@vuU?GWJyE(Jmc(>-Nhm>u1rOtgYV&WNVFhMH-`mXpc||r}R{`GiJh&w{>fPo~qC1zQlLe91jx@1g zs_jo%`|V2JW?j6>;bM+I=!yf9xpvl3T__6IIr4mV+yEZ7rEYB}=~oBdFYYlsX7(($ zo7$Hrr%W&B=dJDB93%C5YM|04BU(e_c{=}5tppEL&C&g3?lWzK{^X4&u|hY-S43M@ zJp71`g<{kfF`lMTA3A+hrC$Y~ldei57$_O#a0pC{8mE5DvCmmyu<^?-uo%uFc+BJ8 zpc_6>$A4&&R;m{IM;c+6%a6On20cv|9}ZMGb{65d z-@)HZuba3XsV&Bl?-~DFh!Ju^k`y<-ww?H^P?-~Y{-aU@n7%(66!e@mdYSZ=`$Guh zTmIlXD*C5PBUt4m(;!>*&5zP1^bJ7Qr@1R*!cyw_sb-r+4)XL;D1T#~i`H$1v)vo( z-lnU{A1WP+nSacc%>c6ZBk7r+`LDtPRQf?jbg55+5puV8fU1bxn$DY*)Qw@Nt_l6a z)Ot6ulM(g44j0V*)AfDDoS9N^Svr;O5Yv#?x9|G3e_vGu6yQ$Un-HGXG*qo`zaQtm zW4C<7pl9aEj*ELXdE1ILVQ_9q4+ru+T1%ogV%N7;>HQZpvOEv^uVS!8v0l4&)K!ZYnC3F9~Uvj&*R9A2Xw&LX^vwPoVG%)RZeFxV zBl)HS>p)qi&$31DoHVLm##?OLqT!`o*>(RNwMZdUd;1xXUEABYAA&gY4PgFgqQK^j zS#$bk{ypo_H$#`C+~`8imV-9GfzW-Wp{C*e&kWJ+^r|G=EOY*W<|-q`>YIG|pSWG0 zk6`RqVfl>5h0^!|A(ra;{MRXMzhevDh7+lbr6kV2-1*A)HS8zx`t8A>7wY~4O)xOP zfa>n0)>=A{1QL&{%+XCd+>SR@BtrPrDD9}a`J~T+5G}_DP+9s_q<+Nx{{a~}8tA#9 zwKlvEC#HKyo^`yrJ8v7{I#qsh7Ax(UlT2-^Ty{@SXd!*MyWFhR9c%RKg;)h=TTQv>blJTt_B7_s_GV8&^< zLQWAq^_%r>Eku5=?fx3SRb6>Aio5}?393%Cojn^PWs&0UdCYhQH{iVwJ%yk*pK=&2 zJ+{%#_p$Gr#3%lvgL(UF^^^Cu4-br3&fLV}a-@DYmba=Oi>6FoTU6Rz7&GZp z9Q7Uy{ma1?m4Y1fE}prFIdlc&*+q(3Q)~i<|9yXKJ#v_zbt;moja0@KtbD#q41z3P z?_6Rdj(R=?Iv=ETHvf}^n$f-|V|ypx`$#O%L0>+%dmUSp=yF=qHwN`~^?LCcVNzi6 zs;rSG3*)Hj(`cKkNTgS6 z^}M-I4b?@Gv~h=Pi4n!OKXBctKZe_MD)j|_YK#P9WV9fhYE46|6J%YxVCz4!wBBMn8fQhAW21O74 zJvK3_PB~9WC$Vj6JSG--?~C0evD5~7BtwQAUT+C`s2Vj)lU>iVW^VAR_e&v#+hs?E zjIW}3tMokn3U7329UV?mwBc24%Q1^2q(Dp@TNn1bsJvwY2hhWLQ}d~-|LLl@B-Pj@ zHxQRKMkS^Ok=C*)01&ldNo1?4$Kl}Tb=uzBvaBc~oo7;)r`Ir}2E<>(OzY*%n)6>p zSW#PXB8ZceDqu^ZiKR$4g7fmmnp!tBNkk(xC>jMatcnjFEtK7# zYH5xU3s=bd-V1Dj;@X5#rt<1KkdyH=5$bh=IWz^r3I~6b5FKRBpt-O-g{>kcBCpVp z?$I1s!d&c}u`k{Cs9OdGMhsV3Q@E%QqB!Fpy|BQ$eV=*Q{Ee0s^RM>EwGmUxJNWt@ zH3n^)uk@aJd!gcr-Q3wHY%S#K8S!Q)4!A0gPfGa?NT+l@O!Id(#jTNE4c0@`?&ymqx_mQ!_Y@@Ee&C6vcv=J2!c@+%?b3vFVhcq7y8r(dF$CithiG4e(wq0b*Uzm z95`QLYRUHbPAm}g2l4~7Z8ApiIhse6&WFO*GoMJ*LE3*>n*@hC-a*dXDT7v4gb1p@ z=yqj){KrGh2J@2hUo4F+ZFv0ulJFOw#ku+Bx}`MJ!)QjSiXt-n?ly#XEuxegrk~sODP7L(Elsi(6I0jxT@?f^%Z+k9~*jQEH?|52~9Bc~hnx6w*93 zIy0*=K~L54%(u-Ey+V%oN0nKv(t9_5yhXrO_yKDw2adz9y*#wzt*n9H2eG~Le*D(x z)}5S|9?up|N}nY%E+CoPt94Sq^tf$RPCr!EXL>jDee~)#i=0PtYzErx{wPZqcskcD z>@jxV`|xCWYl=??UZQERR^U+g`xLSxeZ1e$H?||?o&fLsBh$@Bcod>8`SoQptP{+8 ze^oiY&xYlm)Q7vU6!A+#m8l&ia%|g(vSgA3KC|;$SE5&PHdWMik0}4rwlpu!U2|?D z5GpP#$&Fplw}$d;RQ6BcswKA&g(dgSO6i4*CG7+H3g2K*TTxFkxhCp!aysw6#=S8^ zmsbeYD7Ki28Nn)`vp=M%o%b3!DZS~T699s0j4mr)y}?EVBCw-o1kM&&^jeA zcH$!72L#x^0L8wbt!gS3Nzx}cK`3}>mJ?qe98TgWVijZbd=+^&cddPjUtL;ec-Q%4 z%)wHLsfQ>btO~~)8vmFKodX=u;`lpJ6^vhD|%Q1DfDAFfxt;#+wlTkT|8dI zzKG6%uOVu~%OapN53SZDp%n%Vux4!M4agLYo{uZ@!{%6)T#%(>17?G-sVO-rGq-&@ zCQRiG>PrVapxk+Em;}q;)w~u3o9tSY(*Junlj=YZAmplaX-oIf6>nnS7jmmjzbP}c zupJJ>cH4f|446E;IubeU=XLS`8!^eG{8)+ot~y2w9$x`7S)$vV*G(yPc9{@L(<5N# zgR=a`B}Kv(Qeg6(->bEriM(m*-ZBNZL0S#0;apv%$}f98F&4hxR^iVAq-n}-M_&!P6-lMNGf!-d|E zlqpkvR=TYZUXnVb41!<525B6ol#WQKXW9h3vCf3niwmlk)XYN`k%B)>)ndAN4>U9i zGZ8S`0eyo0Rt8e$>0@|~MgubkdE8q?p<`*`zR9Xatp~)J6m%(I=4EzcDX&5}LdBYE zfA@Mimfpi=b!H|IPnyJtz)9)%CQthXTd~GxAbBnYPScN|2GP@!aSOc;||BnN;44XED1$8e{lHV)T!`gf{0z&@k zj$Se8+smhEYO^czbrWV6nijp69kx`_M%@(#TGSB|A?)3aNlJ%07kowM&dtPd=7kz|{qi*)20{6SR-ROGKSyz)e<)&~4};dU)s z_Axz1NypEdWvu~#u;YlCR5dkaO>9o&`ntj0J;1-LF)W#xx)>Llawpe4nBJi!AG9Ef zmczJj5}WPMK&wmC2<_E>I{a4=x9S{rN$@<5s7-y`wi{NghGBLF>x)Y^9);fp_@XVU z#?rnxADcW~UVC}{?#C{sH;L!9l)tJ;b}k>n_+WC7ttF->S}$rID_;J+Gj_1i09J%l zk=xBAUyVPX5jB_78oZM8wKN&x#q^L0w-5Wq7@~ppDK}Z+OupVIamEh6%;qhU>Is(V zMs*UN)pZm9H>8%)@YO4enc9S#pPQ+SeQ`+u#7=F7#340ZzYFAN)sQK92D7=ermDuN zCJlpWG}8Z-A?akh@7y*B%>&co4P$yUnAdqnbrr!tewH#xysMX@HE1p9N2d80KATAy zU%Ntj0Y}(Rlfhxpjb7b`x)b~T)l($&qKLCBP%Iq*P6U_HD_Xj zeR;naRz0-LcynA{*S5&B)#tp*mHjrU^2KK~A2CZdWMUnSM(S#8uw-b)v+ zLD$%6p=m^I%iCzaakA{DS&%;+`Rm&Ml78+>!34okOb<#ssXt(+Rb&z4n1kx$@a5iY z9lE5=B2XiCSt}Uuh^;XJl2w8IW#Oo}t>i3Qc~Xr^wo%0wdq{6&+8{Z4wHm~p#DyL+ zEZ>lS2Q%mfI!8slr0^#o%3l8AkGxocOATbOaCBT64-RY)dM%Yfrq(vvpjsS|lD6zO z^E4e%+gl3aXFPJ-j{=bSd_&%fp14W;+yVK5@%yJ-hqT~P%TVMpN{=k=22%TcbX;S4 znO)fq>sq=hoC02}p?Z#`gJ$f&NQB%%u@yDe3)`#wQv>~&u3HL-8|JqdA_M3LKi`6& z76)o+C<(V#Lpn(dUX|rgXwbE9ZbeH0fiTf-SeeCtvo3J-B182it#N-*L{CH_cI|6k za4oS%Eyc=eJ=~ct$Q%Z;>M43PUAeaMDOe3q?nn%jS%4)a8`h>1F$-<08>@FYZ`l!MT%VLlUu{|{xAOB3l-=~nJUj*1mMJv!;=Ao0_7q1nIet9R5zn?96)z9 zDwiVsL7!ZlGBfA*F6f^Ic}Ed{ zc;LwLKdm~5_w$76f#xR|=INS=R~N8Xuw(SP*M2X&nB9)yqaI74v)Xm78aC1?Q`(|K zke#dk_s~+G_LW-&`_rquT&UmRNE%|(Bw@1?<2Xm%;czcOddqCWaD{VKePu;^G`7^n zz<0eIzO>Kc0{!}dg5%;I)V`r`RBXs8Bm~9m0_Y+Ym*$pvp5{QM9dD;Q>?pysy!c zXvk-f@U8GJp)$*p;yvB*HSempU);9#$BPG!jQrH&w)ZqhBXVk1j~tVE zn9%jg1Zf^aoJ-O;66YkRty-Nqc}pIa`#_(2HE<8#raeOwq>O|OX|Boq&m6LF;$DKs z`to!<@*gi9!#w;#qOA zEiy&{_r!YHb!k)Bs%{;yG&B4m9{dh23IO;wjpjwT^P4eEcm+BiA<~0?WAEp|WIIL#KWV^+UTt*D?6z^LzTOCbuGEUcL7#ozH+^GnV^{MWT z4!y$*2_xY8$?(Ja-)0eG?8fvoTf*?nyfiU0wP7xUI~vv{*C^ZLVcfw>J*nWrl( z&PoE{8qR)Eriquc0bF8IUmkIeQd$<9zQZQ-WMX(_rBasi=1ja~_`S&d3}GwYo! z&;ymF`A)O^Us$nH!vr5duJ;9n3v|_eKmQS$qp7iU8BxyJ9mOaweBvN~nJt-fv|VAf z*7}R8*#UWkaeiyW6EI~x`eVqaUg&K*nMhdipBaa1jB6u8nEL+y5L5CyA8IPhGRl>c zBK+HA)$;wjP1S4@(!BE_5;4)oQ_-k3>Ob67yIdGL08$hyHwFtlzol}z-tpe!EWE^} zYnSv8_BDZ<-<)1?xdSN?v84^gfaKU>8huzNNnJN|1~Uv*I&DJVzxY35{y!ZLVY8gu zoXBtC^U0*1$hi6A>+LGq(0B3ZA0<;Vos@-ip>?AFO4^_vCMA2B zY3n=Q#vY&Tk zh!NgXAaMZG+0T`GxI*NKy~Y6Y2mvSY+O6B;Vj!9CDCQQ1tiO9${`&8V5hF$7!Bc1{ zkFiaV)JqR{M6;NSQSoh?yT**8c~=LbfK#{_H``T%fZ#?y$^7P=Sr(BqJ5ppJ%_W6o zWnQw83s*Bv;oAV@-f%oM6^~qH-mIT{n1b3SaOVkgWA8@MQ;GwAj~Ki-wR$DmFgPvX zYP&zNZOJw~LHcH(xek#57m(3ErvhzI133Zdgx|s;@h}-a&!3EG7!DiCuI0O(9!z zghvliiQ;M?sV5P+EIIfVfE?CJ`|_>mP=*G!(*gwlJY@WJdC|DOe4!Dif{;T2`M<<0MF}#gh0qdp2&_;lLC1<-Q%cB zDt*sbDX@s?)ybA#z2Q1&N3B>iF(>g*U_|3)Hc3uZeY3DuWbUu6Ywb~6*^NiGzCE>{ z2ZHinR$d|-YI;rh%-V)|vfUSkWF!?sXib{@({v<{pUe~K;GhaJzD9;1vPxI(5qP%e z9C(Oru8HPz)@0U^d^V~@9^F_SNVaS*46~VyI`pG<6KiM`la+0-R?2Yjr1cKqD)ZSs zx%oDo^K|zBB$Tm!q%%ccHuK>TX6q&#T;)-lI>L2P1_c14@L!rk>uH3&7AHyqLX)=s z^}>$qJJR(k>sTL+AxWB@v*JR!fkcJvF41~4%pL1&4JELKFsq*>O@R}5 zs{tu34hkC^;6vc*BlROaKXYrc$;$D81;$T3-%-yT4hoBtelA3#@}oYs&oT^Z((C$l zwqCyVTQMQoI=e9eDOS1!qp(vjPMb+(xRsF(OQs(dBpcH8GEtZ`8gAtsXuu}rSid<9 z>o3Ia+W%2;8H*~6%KvWSSBp7IgD+Q*W*jE8?S|0zOb|g%+0nor{Q+u=pHTfidTBd- zuIZhnow&s>p=9QtgQW~o2Y5mF)u*XJd?7VR>K$b}u^MwcX8EW;bw3JQ3_#lPF7Y4a z;n-#3*jx`YdAOG^5U) z@e_8U?F;B_)u@cMddPzI#K4fruNq1r|;`U0~lb?HL028JH-#qa=q?avoy{*)cyJuq6&vGfIxaueg% z(S8`;g7*QpLhEK-5Yzt95J_tE%tfU%GA`sGPd{z`w#kRAZ|muC-i(=0LixF0BU{M8 zx%{XwW091b^13JYJI4xc#vBzop&>~C$oJfH65C#nr4a!aLUWol{WhPo}uT$!1fgK}i$#JzyZ%ruqM+=I-_t*N;OIdPLYaDs}8 zii&`W>>uCf_dI{_-*v#}0FKY+dSB;xzE0jBzx&xc{Xq%U1^?pMf%Bj#p`3xPXK$`rYd*2h2Sr2DiU-*y!C&WwgROfrLl)c$ingo{srzMFbzY?^V06`3~#o zU(T&=9WC}U1ioMuz?SG*d>U|#ik7zPCa5|fkg&MP`FX5k2GzG5%Q^5suE#y68h*^Z z#m&`6nUKHOY2w&$#y8T!5mvSy>bGGXKO2=VKVAi$XyIvgqngce=qU?oY;fx?c2AiQ zqP?w*{_Y^(w!xm@Qh$|q~)cz4Vw22JT^V>i#yUXrP5dw-1 zY5;b6$U1D_FRmxyQ+Dz@#+78d{(rLL3Sh%be>v%F#8?}i9+w9m8XOG+mQ$ssDcV(} zAm#%xf&;%N6Takw+R`}(`8Vj7;e3Ej9dC%gz?$C*jc?r`7o@spZ3-lA6?X^6ru^2t zb$ONDl&03@rZ2}L>A+EfE+ol?9;eJkj{`!=qCyZsWwGKAw!rTvX*yozF5942x4oo4 zeVMR%Fim0e5=P5?jLFa@KR92m7xp{Anpq@3{R@qePmET^(CDTqsQ*``_0F=gZK~Kq6zi!gb;|L6&M6A#h%+vG~Zcq zN3zef;3A$*I=4Q4>G|3oDh@#JQckinAhbya^^x2LCJp|wc1GssnXs8xI{KptKt;fA zcXM6ao!0T-*k*Dj4%TLT)0KMbBwyO(Vm#Tc3`Thv;DcJ;sc06hLbTmnk11&&*8xUO z2er!Dmt7{4bp2IUIR-y=oByHcgfwZ~zu}H`uM;HyM|>HvxImz;Bd5%_)jI0b_J5zw zHm^O%%DcKWL~T&t1|~S?ICnVkONWNvhV-~> zFKpC8^u8l(sG|l;DCIc|F!uTdW;#1}hj+-wYCA4VMO4(325cBZ#9QD`YRc8~dE2?J z$419^aaw~?;hZTDw+Fw|AD7mhs=+JbYkP}}n0FaG8IY9j9G+#1`iQODV@TSt+-1+=b{yDjVev~TDy$AAI9 zEw~QCe(|v_j#5P+cy;_peRsz%WOcWRN)ciR$Ep&3(Xu*hJBgjYBHeU-bM{LnNk5Ff z$vO2xNiAzR0T$(FAx@}2>f$r2z#>vA4^_ME=1x|H{4N+jG#ex1ex9+}z(()Y#X2|+ zfk^#-NB$18}THfzYw#a z)iNg)CR$l@3msUQy7n})wKr77SD2XKQ?W}|@1<7ta3DEPz5q1J| z?jJ#k!;2tS-?)NU$8C4(Pg(Tl!DDR6pYLVMmg5xMbzIT4FJ+$~B;ud${}iR*=f5~{ z^IACdD;RaND3`Qii_eQ~MYnJ+5bJ1VzVu(SIH!dx$~5QiALR4C3_jB(>8~{C`M)8u>f| z!c4t|Pz&LX@fWm0e#Heh&wq$uvYWACVZ0dD zcw84F9BUW4PSOTelCTMo|7|D5~P-F!oL%5xZ`PMi`#~^4t5?iPXyEe8zul=iCgn5*PM9 zFh3IT2Q~mE;B}V)wA{MM^2W7{X?F;lG;QKY6C+c?NzJdKWI?OtLB8e9)Q?)+uVn8m zH@Oe2+yKGd09mg`HnVANy?{~+>$J&;2muTLm^~HWwEyv9?2R@L7r{a~=CHoMU~5k- zcMLMS3B_V(@SJ5WtvDuVySA>9BReU8Ebjq2#+iZ{1WSPP1va(N@kY`0a0C_|o`KnQ z3#U?Ag9TC#TcZiTaE9W=7F^v^^yJYc2MXuNG-gfwowhWi9%BG!Z(}*@8}g`Ksc9Mf zmeF*u-vk)84VvUl8lqpa_blo^1?WG3;3jC-Qd*YAkQQGOS<05V9?6+xU;jQV3+=X7;9tJHmhdV%wOksHw|jM z7`#%pCxKQ*Xf;@_gp_D`z!rA<1-Y2z7UrOLIekwY+xeydX;o>yI)%p61Yww#UdMnS6|UXm*K=6^|BbV6tnqXQr+LPFtkS9CKv0f1sg72=`DmlWv+EjYN*d8u z>xAv!;0t^WMVVf)VlcI{y?GuXn>g5=4J!~y1LrcZ)HPEjza@7wynhpSQ@!-&ayb1@ zRthfo@g>X!fUl#U=|TPFrlsBCcNnzK#B{eLVlE>AtKMzF&@8|Ef;QaJmEnfFq%@sC zt@E(o7RQCJ3WqYl^;_mm#0$?;N#R)+L&PsD82#P7RFGhr zvNMq@LQGMY!uIA%5Gt8ubr%Be^i67q5blZw%GbBX9&R8!s9PhOb2+b|a{H<1PFXbi zTeY+lI<4xAP~9bW>F~YpS9tLnV2ms?K+eTDKD*$D@MMVEZVD2fniyv#wx}Ir=<8`d zqh`pGUSqxbq+|_dTIEBlESkf&q991jNf7E(ailNjYtsAG;{WrEx=^2_Z{j! zyek;ln3YGE4I)b)*Pni;zxTel}~Z_W*{ z|CvePKMIHV2|`B7E5bOy_*-`&t~DobKy)!^H*p%7BMg>VXrg^Jyosb^b^kzFpB=yF zt;`s4)-z86K;V}aH!s#ld)rDg_u-M<)@8-DzOy*fGwz!uD0jWNJ5KT(d*Z>Wu=>TN z@Dlkphg6dvk2$nt;Hh{&kFI&-K#vf5ze|qalQ1w(MWZ)Nsu=fF!sRBA_`smhS#^p1w!JHRF=MMo9b=xqwCCuWD@oZ}E1%q( z{{ir*?^L#@N`Vh6-BuQ>fUX2-9}6sM)&vBcc-cGha16lfgkEAE7p#zRre2bnB6XM# z(M^F5WyuV+9rIDpN_K&sRZ*LO309%onR?7E$C!P89P%;Y8BGVlon5D)Ijkg?r6)VP zp|WHPUW<8(7r^Ztx&{rbzo`1pHsPjj3FV3LYLM?}-sSNPr? z(?-vuBKYOv)|%ko^Tt&g_!&UM`KdN9IfWVTqP_d35Dj>jUu(5@t&+7o-4jI%0;Kz8 zMSb%8)!jBC(0CR_w+NzMQvBPdu>FZ2J33i#qp*A2>iLvMWeE4Gd5!pR`m%ld^M*sfemY3- zm?*QqT7+kD=U2^X3aU|FQ8C)m>`$faG#O1rIsHeR6y=R!%t^>E*2CAKimj0s;8cIk z=t%@4V_KT_69DbXEyy_M=SBLQFtk`l{P2iWLEva7LoD~<|!jkj_lp^3y(SR;Wf+s z;Nd^)?zXIN49j<^vq#!KcW9gGf&TWTKo-6~(TmI=TTo@baxZnn9MvH*Qz68jGNkM4vDfY>P1MTJ`1OW@jTmTON_c$zP^DjHWzWU& z-Dv#^bWhmKmpCtlckv;738^hr02?c9IK;A%Kc-H6F>|lC|A8F#h6^?Ik)Eyg>?R3(86$-_p6*LE=43B?4`+#w{j*r_dg5cj1< zfZShY*=@42M<0T!Gy*ajQrH(9dpQh|*6r`dq#uxPQ^W}uS3R$U1w$hp(lQ1J+J_C%?{`$x5xd+S*sWkb80SRn|E@`#sYu0(0(HQqVU%DXrpIwZ$ca`~bPGFR7BJMi+Tz>+8BQslA&6%#~JUUk`Ga(D{H+_iA`)R`Wg@eY*Xztd(_hJULhoZBNNe ztug0*@B5e0m-y(&A}Tt%a4~N(-HFxGC*Nv92!ucL3+ZRcE&9 z6}8!Nk=L>TiamXUvhqmfVUeiY@j#`mf|soB9A&##pFPA$zk&p9^sxcfry%_!YRt6G z@UFgRj% z=>+LVnUEH}Dp%eJwO-DWuqP&=BwV)x09x+2fNgwQy`zwZuJ7Mj;@llHCff#l`ovA* zfS1$S$86REGyF*X_)V|zpn(DdJ+;LwQ3rmj2t-n5u`)~~zG4?UK}tCunfGD4c;C^B z@J=s%EMm`1PM5c6!s+jd9y8du-n@7{WSo;o8({cC7yTA{Uu^9>!V)KNNgdSL?ZUVq z!&H_)*3IG+UTcj{dEMgW{AbebkkRRtz@~7bF5s<1`mgO|VFzK_3?O~Gx!}fHiI0@f z{j`5$qB?4`0wOcsywmt8QO|pgteXkYek0q9p>At4;N#`=a~9m8o78pEl`Nr^XcJkV zY*FX_xEN5Sv3m3RZIGE3`FvA_NqK?G)*t8zOxSH?lAslbi^{&DUD%JwkGG&5)uIUaT1|(q7%Gy zj$axQ&^nOEPtkF^VLa(5<0Os4m38-Gtw8J0p}k|}Zx#prC#)bO>4)pumopoA3K047 zv@=SuC|c zq+SKV#i|DO3ty4oBqHdh_Vx~7Ht|jsw7X_OaiY*L%oS6hJh zzmh)=oJ|e$CdIKd)yyH^l@K;=;(UB^47@4RLS&*3+mQ;1hmKa*G z4%L3OIfTHnZq*HeE=5`}2kpe-`N_NJC8b^F6=xLp)JoeBoHFh+h!g zU)nvF^sK6u`QsJ1%mBxx;C!$k(ILY%1~;dZ1R?aIFrVto7Wzt8UMsCXDD8|FoNgB! zssj5a<}Eod?gw8`g8McxT0qWC%qDabA?voqW@v%MF9L#Hfv)A|;Lk>Iok6>KwFMxq z)Ht7u=I@v1)77|Dn4RZkc_f5nPb z*C@dR?ySWOz6I#Inp_b&w);jnyzO2MEZDFw;I-#GvlwjPyXP<49TXhZ{B~Jz$-N&5 z@#wuz)uM52yBUI+ZG(kF^8zDeX8x2<Z*RUi z%4vHY5VE`bO`^5%71*GZp~h)f6X8ndk#FHzUd`@%`7T~-RDac&P&vDGNbBc-(kVfV zh7pLA;U^OK5&N5lF)%{+3@py%S3r1dlo z<6r1--i`BV7JOP!0m2&O(QSKkQacHLQ0%aM0N^N1p@-TJ>FW6@T^wxqoJYXtJO7;#Ea+Tf?7 z1?_-KO(&O)9an{K2+K>|Nl)b9F!x~FjproHtKVPAT8aUqedH7hWs_=PK1q+6SykEH zxehIMUJkwk%qa7~CjWt+!mK<-5u~frlk=<;>d+ffAFl;L1Suk0M z;-`T{198YDUjVfq(W%yeO)JSzI|~uDbm+hVa!-W6XGo`5NgZ*FC^{2)UAxyOmvK_I zUo77v{B-EJE803TBcBZtBGyJWTRva#dz_N}`GrbTr(jUX z5$;Cs;;q(GG*v+tY5er3sVnVcPa~aZU)JHFIoivvEj8T%MH&{kd0nv2e(UdaU*M~m zD+~g_vQDEi;f-=R>qFT(2i;htz|5;N#sMg*QVI;p@vOc;GifvF$p$Ik2oKMqCGkpg z;6EmB%@2KqLEcKk@*j34vLE;@jW;|4!7q3sSs%eOFqG5)1NN z*(0QU@NCO9DXpUHnoaj07COKN)q*%SeXtGgyxDw1XB>hJYTD7d*&EDPaD&Mel{*xH z!mEuiw!Q;ue-`uAg5!7C|2(LDKZ8RKN$iW0t>#?{ezfh!=8u0O>|EnfCMD#g^^@P!^xuL z`tFKgKWcn+bJ`I2$Myqxw>tB9ufQ_t=QurYk4t5~Tqx6zkR~I$!1HO-0AFIMRQ>lm zjw`8oYrj8#5fs4{>V8fi->jMZ(QTZxXN}N516n`-hX;Zcc1OJG8%fc9{2}jn!zX=r zy95J}Em+3j19nFb>=Mxansr8p`P%CwSnulY-og4)?oKU|uacM6l&A-ZZWmbHcKpRt!Q$8sbkEj1z)Y;&Bq$OlhSS87t78Bv>7NLV%jeX+G8-$bqYd|4wNV$fcrz+E*4rWv-q4(lIiy#T5&y2Hso$1Z1GU32J zFU#nk=SAH8mV1+04tnqIhf(ryy$!WuZ##Ahya#1kqw6xe_7e8BHs#S=_YuIOkxA+| zd-`6rz3t6#O0wv>gK{39s6BaKz)d%z{G90g`o!~Syri<%a(eLRv`gRQ^}2z)5Pk75 zCN*g?mJ-_{TGRB}1vxj&>BMF|-*`R>wui_uwD;OGR|a(!(lUQWcWJWQ%vpuD1nG;db}tsbR7wduiqnNMT5Tb|EJVK^J&pU9 zRSI|}dFfeKhJRaKde~R?%%m02f?)22z*Oy!?A3yZ`BN=xw&gA8# zrrKw@()kaLzWVghzwt?a<-@`c>akP**}AO8?(b6%hLw}qEm+u4SWXa}&W_s^#d7c@ zAYrMowI7CB3c)i56lyjqBat%6y#F$JGa8`4z1h5{dRbXoDL;*9TE~r+3gEkCfSSIp8PAL z1ZdSno{mBQ>154%O!})uM3o5U+<#1Z_u;nHLe+~EuJ-=G?*lm%=6alokq^T-DN*Fe zX*YJ;5lAwDdM{74F5Xp2iI|jF@z&g^RnBdqw~3}?G$|g%JpT;i`r*WON5&T9h$IkC ziG$w|u`&GU_r7`Q?rzp?1sRGi!l-4nN>37Q#;y=#=djx|5R zuS=~NX&dxfgB**|2xK%M6}_39@K7B*Vd@Ul8P=kWlv5hhB*Obd{>j-YBUygTKwW1j zN0T*MJL1A)O~e`6^hrl*@@Pg>$-T=ft`pq?)eww1itnn2zt(v5XhFcBvuF_r_6~gA zh4+Bz)_6 z+DG|}i$^c8N+-s>p|<2;f3CRsAhb~qm!8xftvj{pG?!G;9>*R`%u@n*$p1)PDKRU; zh7UIl&6^>fA`_qDRG{K$Hh#RN%yqp5TaVFfzBKj}{%$g*O)wpd?<-q^ft z<51JQTT>w``fh+a?Y8t4J&T!EfxjU(LL73oNjWbiRjw0zXe zu5v~An?c0aD9`1xjWYJ45+6siW;9@FZ`cIHGwL}c+D?@0M#~$pY=i5iaH1c3L&~+BzxY#W06xOTDF)+-6`=w%|u!c z7`{RK2-Xj0wn=b*)9{QIL`bg*Jeawt1k%(dWe*hvRL`*eS~nQktnPdOt4*S0yt$6w z1qsH`{-U`-oLfV&>=iIBYCZUHSzUPpCXB!a-h?sxA?lcQT=rvB1TjAq^jt=!%hRR1Gc-*sIZF68Vfxd!y?nlG#untS&i3rpjAqz;gh z<`;n?CLTBpFXk>z*Wuxbd3;Dc~@lH)({c*;V;B3$FP3X2U)Zy7q=`d5) z@TNFb?31uc|B&WdF=(jc#d5dCJLLwEqdd^NvSa3fXsvVX`(-$J=f9;4LSm*`?!j`c zw995yxZNZ6D8$)xpU=7#(7iUR5Owna?V(F=Lwea3oT83j4pBby#=SYtB7Q|0eD#Rx zOvfGXi1U7YhDErMAzf-jlm%n-zDrjYEYKR~$5htzBb-(nyVK|dvTwfHgp}7uCbjXv| z^m$;6-xkT0iOZ%V58=)=;3oE^tLe+`bvTmBN_ED61Ye0PebMv#`ZNE}+us(ppKfa} zO)^>ac~+^WQRL59sJc#BU&~$fa%`U{-a!9PH{vobUrfrI7oUBuAMPrx$4I-`Y`dX8Zmt( z$3|h<68&j<{?u4=GPRdQ)kr5(@sBV+x{KgWb#aGROMa=UY5oRX*A%J{oE7MB799VQFDT~V+ zdp1-)b7NG-XH|RJNjd>sxbQ1>tj!l(@hp#5MXJ9Dgwt&7GwXkz69-SvwQbhJJjO1K z_F(l-OOP6GEH1}Ly%mM8RsI}@;H+2)pnX9_ypm` zs%TC>zclN-d^|n$(Zn2AVG}LpB3HpJBfjcGpQ$5D0d5tG;IL0$?B8bj^}g9bvMNtT zgsP;LlQI8Bvfstc_JPTw;?q59P8_pK592{jD>YaJVtvwa1H1YK?_An#f_C#1GGRt_ zn?=+;{Als{`H#D%(l3gmO%_$+(~9!aC54LKmmQ8go)huyMvY@(=8?2D(NfR(JK!_m zo#~6tI3&p)OuI34bz1k7(tw~0CT3WFKG~*Z0~u~NR`KV49tp8X#P=BKPZwPu|9j@= zi$C11+n5i2X6<5e8qxKitDhqg9&zqb#Srj`=|c43&%MHi?YU{3Z^;b{{&I;9;G*eu z=mB-8#wp5szljq*UKb7H^R+kEE(Kg@7^mpoh?1TSGfI79x{p7yYT%pfz^jVJ?T}>? zOvMfZ&1D*b$3Of2ccpHtf+rz{qRB?-KTkB}Kt0WAf#(%c3>W<2(%DhJP zS7d9V&0dXa`kZ-}8jpY%HNGoheX4U1^C$;3x0?Di_w6U!M`Z$WkaL1V9tGKytwe`g ziwT_1H6(=7-Q;Mmsr>!K%NSNn&Fio%iL z&1%W8yUbfj`BZ#Dmay=(10-Rw!%CB<9~Q`*P1j#35$Y$j93Bc@#WV=}&HI=}PP0LT zo|Cw6%|{N)nLawvA5R434>OJrPE%#TSeP8t0Zi?cX^jUUf|Ke7c7G$^#7;?fH+ipUJooor;IT?KV{fzdy?`F+cXjg9(&#c)_Hn&I!ccr0=Jc?p`{jA=f}Y?0AvpKC=jjDYj!Npttl4Tduh^v68)5S*kQ2 z5j#?H=xCz47cJ>nnj(sP*W!d66!ix46TEnYdV zXo+mc+tSyZ2ah}!$9Af{zht`&&B=})OXx7>q%^_(waZ!fx^br0#&l@(VAh2w9WTs# zBzF{hFqb6hxZvh_CngK#ql;xvytK!>q6Dl@C8Eo1A|!I8aLpw-GohIwsye_|%E*(1 zSEbZfeHZcdKt%{3Kp|-U*TetXl-)yi$rnv94MpXk?VQO$X%on2%ZGJbu z{YQ2?BuO~NcYuJqi(3xfvXlwDYZa>X3FkXMg%3CZ&~v`YIvLVchIty+YuF@mqx*E- z_%KJKoNb1m(9vS?aK1y8+r>oj`#FixILpci+|&3P`8#*wL9k}#a?hna@5%2!Qyd@P z|9b|#k}zNanSKi2Mf%yrRIEkO_Tlsuyf1sn2P|?efYbNX4YY=Cwaz&gD7PH4$x0eF zVZ}J49l@zHtq?ck98ynPd+&sgp3`AUuDkp^{*!A3YFbuvBz9MRDV#-!%}f;h+LG1x zX}59jy8e;S+&!GShxf@aL}O+$7m*fAx@GZSXl* zHuOMCkY*;CT5#B-KQRd}=~Jj0TO0r`x={1*yVAHD`?R&uOUl1Lnb~t3b}6 zjFdIaJ-zvDIjq_q?og_s0w?bLg&TZ($s5Q!SKve_IcM=i8bQm`{(%@_TaLX3{C*|)oOjN)=N(TYb2^&3V+!!zp2}kQ5Hi`1{FyDPZ9e&w0FQJ1UYoAaXcvQ?3KMi7!)Z#8x*6tB z&|{#M8oD$Jj%St!sqncU_?6*L36JS_4L)u);+mZr(DMJS(&w@;#B%sLty9TC<8=eA z57eqJ7-?)B=^41}-U{ewH5LYO#@aHzR#xj%ocZk%ya$Abeg#WbDAp)#85L4;PVQ(f zcbH0VLbJnm=Wk~r!xt6$h2*#1EWNU57$?~KF`5X2geU&90n9U*nO=>?qCGPKxp;RJ z$At)FPhwRmVSIKAK}|5`dNyptR+nuU48c*n0f071kHAzloYnmL3^3zB@r~Tj!UyMJ zCWX67G$jbs4MObZyYi3)ltYgHVBJ*+e+Rj%C1dcEFuq;EA45OM*)799 z@oJ|2XgeOb?1Cn4c=phD>l|4M{Z^>ZGQnxyUy0OI&KB}2g~vd3LuOv_=J*^S6 zBS;9I8jom-cK+;G-paa;=WXa+#CiHa<9!UJYY#C;ByT9%NXzPB$Lm?LM;}^rb(Goa0<8M;&OCYQhZG zc4zg8vj4Y2A!nB`Esdjw&alrh0&~h>p;^$C7waLl-KhV&LdS?6{OE}L>BaLRQr(2G ziC(P(yF|u=f1NOMENfDW#?9XoM8x}!7sxf&32EV{%`eg@ciUf|EyuI)KO{3Md^Mv@ zYuA>x3?hSPl=ilFW7wm2E<}anKNGCZS5Wc>jT31ogvETI59$(y3Dc(3DI`TbOB_6E zS=U$JqnOQ5OoPS%H_F*R8|ymcMO&(pki>z^-sGrl2L!HW;r(TMe(MEh5OWxq4& zu5vKrB3jFg|HO(LHV_|$SfezH1GU$_SCU`A==TiRl}P@wWMVl{(5Dnt(Ud_i>P^L(V+QuTVICiyb3rv7(Z*}i>JK;t{N zA6@j)HQEZ;5U&V%%(t}3e~($il%M~{73XduFJ1QE_)R>b9pWb&u|8)p_fdoX-t1Ht zIYitNpJp(8cAnA7!TB$<3aI-J9Bana4{u50e@a zASkW&L-UuUp4-Z=nq`< z_BGEzn9prRDFF~V?;>0W?|rZd96Il(Pn^rI`zDN z%z~eB{Go+4>!y1{kLy!lrqc>IA<`@RC)yBbY4}~?Lfl7}>TgR8Hj zdpG{i`q8TjS8Lt9Bm7*W#Snilc$`)P^4=)ADv2ylAFYcnm>d$GR~A8gT|7AvZdoXl z(JYsvR26G+j*H-Iwr?pQ=vFyRUn=_o)JWk^U_8UKI7{L0#K+v_ljI^6Gyil+|BiTe za0v*SUpdRoA)_9Mw6}`QAFp_1 zU#sV94-y#y*euOzInK>cCLBO?pBwyc8}4^eVw&hyd-NM;RWeG`MM-&R90>{>Xup2n zkp!@+Fq8@f&QfY$W%Z?4os#v&AG9HVI8alzqi`+i?wcn*FDFEZd0p5Bxz5x`D^BlT zr$2uw@D!ltw-6;b`Lno5ctbwF1D{r&$3hZ&PRnt74v0Csli^=c?q8f4kWkW1X!oIS zw9!UMriFG`&jr$jndrKOLuwb*YPNJNC@H2$CHd)saCJ-*>ysM!!82ZZxvyp`{W34w z&kDUzK^Hwjdn)|SeSS~7cz7tO%*FZRDof|$R*`=8)iaNd{H(NakC%znH+}Ag_6M<% zqOkd!4mgybdQm;1>bh2ug1&)w!|ZwNS_H8-Dja&;c==4S3oEkS^_NFDXV#*h2~yfR z5GFFn0^RWEO8W`bR0naT>voa~oWgjgKjmA5Q`5u{>FjeCzEp$M138i7=%Yx2KwOLW zW~=g6gyxHp^p7oUlu z?8tm$o(cXT*DoUAy0Y9QBFzMaN=$J(i_Vv18>s zu5r2B;_#YT(Zl4cIYU_Hggj_Gf$Re}IOywRZ$$IG*kxB=j=5aUp(>s8nJ0su`Er-g z9jR$xX6b8iN4!yKyRGNU1Nyfb(;+EF)yy?5kb5^JuPQ9wG z^01Ub(E&XsV<_MZ!VcMx?x?y|K zVsR@fNt&el#JMMqt~sz{1zwm&`%nuGzg?JXWBMkHj%#mN$1Nc}hG;~CXTzTnz$mKY z_VTBzD|4=%+O5|HLNFZ~w~8;%;LYVaY4_j>!sbSMx@sGf1X!j|7=PaF?8)D^4?y}K zqM{+3NE7?jE21a9+SmuT(2CQU5f8ec=tovNaeFoY6obbQ`FDkbKVvbIhoX!xEzph8 zby8s9VCKw22I6>90#qfOcv)&&<@RyT=+~tg zN1Z?)kv=}!;OEt4Sv_rv-ugzc4g)>6wK_kaq5cM=z${qYX#!WrSqNIRQp~#PMYwqRyE}rn=L<}Y|_&&iIE~|Jemw6x70G| zEN3*Ko~sid@1dg|-`!2UUG+|qdAjvmlzbyr_CQAE!j6ukRBe{9lrx}tT@s~FAH3IB zLW>7b+r`;Wg?IH&{DCT?{D1h+Ql|nA|Ly>_qHJ#e8eDp0P+qd8;7#0;z>E4nYR=M# z4C4MP1fNqh9x!t3Y4m;^#t!wyB$>HLE%#uZt6};l?jNdi1r2>DvJJZd3n+@ z)iT;yyQ!}9By^djz-lAFf}FqA0vb9I5fQ1fU70HNqv?`G37SUIMf<&dW@Y}#j~^3J zEe$;Iya76hbH`7LdZ=5x$U~o6x4HW-y?iy9vm~<%J=o`#-MTz7Fz;* zJ)tGe+bu?snyR~thCa(KL)BZl{BPLWYLgA}qx2-gdq24b-gZCNl!hkW@myB!SnxsKt`7%kTNKQ4cE?o%sRlob@8@?>hsaC{X6|QlKp*<72?XzS*kBTvvnS&d*$Uj ztJs}n2dvyj`|uiXbkBBXxoPS`Gg07k%eB5y7&9%PB1cTrlabHVbp@E0Ow7!;0+_E0!PfW zRJB&-zX@_+U{!&x%TPh@y7QlhpjxGV_+5IJfX%YOypnTPKU}OMIVsQzUEn}!w8hn+ zrs-L(3b+Ek<1S!aPc!TKbNnr(w^T91;jrkKf%zL3oMsKA{3yYIsPuM(ZF; z#;gAMB0H1M)JpZ{SP|;=xkVNZ^8EKDxpw7Eo2gN9%t8^`YZ&`id}V+@TN21~T-shq zg`=QxsfoG&lJAR5r~pbKm%_#~N=n&(qP!$)cbQEH3PsHuMn>D>d9^5rAmN2_RBc+1 z??<+*1IXvHylv1xFQB~teCDgY7bt#FRDt78G42T=L<{FE&rVxv6K#CWTmge#=&9}f zYT?>pCP1ZfwaOLE4@D0cyl$ZW;J4T_OmI4z)9}rWqoBRkIVRRFXJ;KfSJS1>=@eAh za0ZWHWRYA28Mwy;>)g5UkW1^fSl*}pC=e$sLKwa5aZEJ9Az;k9U;K5s9d=?`0YE)W z=kE&ap^r~~Dx;?_g&9Kb?VCZR{kUI1hv zmqTM$HKi(bVsupgI(gb2_4D3}ExYX}YkL$Ua^Z=;r?}U$oaGfqq61>VFp+n*0^U-a z2-$A7d>W=8yKmkKvE^>?EHRg4iFv|VHJktChUk76`X1-~rZeOXIo2=!@Z|3V3wjKO z`MBC10Hu8xhWnQJ9oMccieJ9%P`_;A_@6d@{}5|*YDe#lSY(U@px@D|2-VCzBiFRH ziIza3AxBMczm9xL**PTQ(BCGHdXUmV%o=gbQmykhKJC7H?(}u)t=K%|S@tqXi%KPSkF{Pa^4F0#t z`2{zjz|uT^x+spq)BEOpOWb?kh8wNS;ijuC*Cr+AZEQgWcfB7YeC&{|#%N;~qO@|0 z_}Q^E4@y%=1wxL?{t~HYX~}0{LG}KenADf^5vgUk4@Bd@lv+(>=&=62M#s=;rmL9j z{}<~C6!w}P;_rMI%~^He*S&#DbB*1{pG@Spt&ue>58|-ZXbFG#tF|8FmgCR!u*bD5 z-Zf9M(58X4;htO3Ycz8guk5FP%1{2>D^M@zt+BSqOEJ(>g2`+2>cU^(^a)N@JbCkK zQ<51;N{2Hc;SoRQ0Q(ceeb5g7RFx_@j&7i{1N^U)Rrw?Gj{{bOL|7JDldf-5o0KMa2ipL2!z{ zYs!J=xu&(7dWGG{7iS-JxCe7SS~Jw&ad-CEPTMmlM|O1U&zbmByu>xkmR}AOKZ4Xx4T*tb9>+EYCYfqZ%Vr`8-J*KAAe>U!1?{SZgFc+u0*c#8n zovyocytMj#?wi)|KHjadAJx(Lwzb@GklTjt$lkt(cC}$${|9*6(<|oRmxZZbUq{ZB zx5vO)|6Tkkp7Z6}Sp12<%CU#P>pq)b*?oK;<-gkLW8?RH{E^ot-o&@TRsMtL7G>%Y zHyiVJ#y|C40 zdc|ZRzAd8)p89jHiG1wew#Lu08#(yk?R*%ivE>o7V*5U4=im4l*Z2z`9n$YVn{PW} zPhQ%~zY}@1-^GsS)p5H1tc|taHQ(fMOLERHdaXM5{@7D@if?)E-?-iAB{lc$$gX>v z_Uq9t*9$W<$Dd^Dsm{h0i7 z{m*9`TmJax`VSv-dct1b?)lg^ zkQZiNpMQ7(AWxh5Fl5W#D!UzRJQ_QnBin(l+jn3ZtvqY1^V~4(gPt$PTJ@V_>%U6% z`R6WJL{~XWKeTw4OCGDdymicCqC4<%E$hD{DsSh zbujx1KJM{K9(|C!!5!G+TY1>de#_Lu@z-+MnnwovN|r_ct+MO4AC?(+;j&rDMLX0u z%fxNDZViXr@ld!o8fX96-uWNfQ~&1NBJhe&y$**|gP*Z#L`Pnh=i=U>ia;wjnZCgL90H@E}4`CETxO#N=a%s>39 ze#!L6zXd(?vvJLD;Nv{6vO z`qT6+FMn*Ww)~n`zg!Qn$fg^F=RN;L%k#ef1$y}Ab87tUmLGrl%TD4B$#%+prsvhz z(BJy4Jg~tx13m0vf5PfL?sczy#qyHB{@0clzTo){^Z2GW{Y%$z`Q?`{-~G(*wC)#v z@!xsm56s^3vp?tkZ~EqM(l_(m)BFES53%&-KR$2aHX7gY&UcxK|I71>U-Scqtl#rJ zf8GxfVSMMi-hIaB-S586x{v5vgZ{?fe5v<&Am|Nm_^0~D9R4^X+s8kihlZ}X=Fe>O zSgGy4_q*Tn${&B3d-vVX{0@WWn&72b3PWYl<8@{Cqef zPy8LL?9Ep=eHs$`ku2QCKFR2*qwV{#^WN)&Be!inTX}D9c{{H0Ti^MJ+x)HHj>^2^ z*LZ7W`l%m39M!lU>AB}8ywo(yfb%fAv7tSzhC^TF7G^o#%zhys2>g z9d|#mCgXY;s@#`jou)_mvD{ykFph-<$Cd5V)1G{@!Ykliq$EM@MTgPI_ z#x~CJ)?<}5J?sP5c#S^4Fb6B|#vgm({Ov81+0buEP>8ri?6dTO3ghBVr#EClM?;^0dl~F{jU$sZ~y=R07*qoM6N<$f(BP5 ASO5S3 diff --git a/docs/en/advanced/megatron-config.md b/docs/en/advanced/megatron-config.md deleted file mode 100644 index 973363ca81..0000000000 --- a/docs/en/advanced/megatron-config.md +++ /dev/null @@ -1,131 +0,0 @@ -# Megatron Config: Role-Based Training Overrides - -`--megatron-config-path` is a YAML-based configuration system for applying role-specific overrides on top of the shared Megatron CLI arguments. Today it is mainly intended for PPO actor / critic configuration. - -Unlike `--sglang-config`, `--megatron-config-path` does not manage deployment, routing, or GPU orchestration. Its only job is to decide which training arguments each role should finally use. - ---- - -## Design Overview - -By default, when `--megatron-config-path` is not used, both actor and critic inherit the Megatron / slime CLI arguments directly. - -With `--megatron-config-path`, the configuration is split into two layers: - -- **Shared CLI arguments** define the common Megatron topology, resource allocation, and default training parameters. -- **Role-level YAML overrides** only specify the fields that should differ between actor and critic. - -**Key design principles:** - -- **CLI remains the shared baseline.** slime first parses the normal CLI arguments, then applies the YAML role overrides. -- **Missing roles inherit automatically.** If a role is absent from the YAML file, it simply keeps the CLI arguments unchanged. -- **Resource allocation is still controlled by CLI.** `num_nodes` and `num_gpus_per_node` in YAML are ignored; placement is still controlled by `--actor-num-*` / `--critic-num-*`. - ---- - -## Config Format - -The config file is a YAML document whose top-level `megatron` key contains a list of role entries: - -```yaml -megatron: - - name: default - role: actor - overrides: - lr: 1e-6 - save: /path/to/actor_ckpt - - name: default - role: critic - overrides: - lr: 1e-5 - save: /path/to/critic_ckpt -``` - -### Field Reference - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `name` | `str` | Optional | Label for this entry. The runtime does not depend on it today, but keeping `default` is recommended for forward compatibility. | -| `role` | `str` | **Required** | Role name. Currently supported values are `actor` and `critic`. | -| `overrides` | `dict` | `{}` | Role-specific argument overrides applied on top of the shared CLI arguments. | -| `args` | `dict` | `{}` | Backward-compatible alias for `overrides`. New configs should prefer `overrides`. | - -> **Note:** Keys inside `overrides` use argparse attribute names, not CLI flag names. For example, use `tensor_model_parallel_size` rather than `tensor-model-parallel-size`. - ---- - -## Usage Pattern - -A typical PPO setup looks like this: - -```yaml -# megatron_ppo.yaml -megatron: - - name: default - role: actor - overrides: - lr: 1e-6 - - name: default - role: critic - overrides: - lr: 1e-5 -``` - -```bash -python train.py \ - --advantage-estimator ppo \ - --use-critic \ - --megatron-config-path megatron_ppo.yaml \ - --tensor-model-parallel-size 2 \ - --sequence-parallel \ - --pipeline-model-parallel-size 1 \ - --context-parallel-size 1 \ - --expert-model-parallel-size 1 \ - --expert-tensor-parallel-size 1 \ - --actor-num-nodes 1 \ - --actor-num-gpus-per-node 8 \ - --critic-num-nodes 1 \ - --critic-num-gpus-per-node 8 \ - ... -``` - -In this setup: - -- CLI defines the shared topology and resource layout. -- YAML defines the role-specific differences, such as `lr`, `load`, `save`, or optimizer / scheduler parameters. - -### Overriding Only One Role - -You can also override only one role and let the other inherit the shared CLI configuration. For example, changing only the critic learning rate: - -```yaml -megatron: - - name: default - role: critic - overrides: - lr: 1e-5 -``` - -In this case the actor keeps the shared CLI arguments unchanged. - ---- - -## Current Limitations - -- **PPO only for now.** `--megatron-config-path` is currently intended for PPO actor / critic role configuration. It is not the recommended interface for GRPO, REINFORCE++, and other critic-free workflows. -- **Actor and critic must use the same Megatron parallel topology in current PPO.** In particular, topology-related settings such as `tensor_model_parallel_size`, `pipeline_model_parallel_size`, `context_parallel_size`, `expert_model_parallel_size`, `expert_tensor_parallel_size`, and `sequence_parallel` should not differ between actor and critic. -- **Keep topology-related settings on CLI.** The safest current pattern is to keep parallelism and resource arguments in the shared CLI configuration, and only put role-specific differences in YAML, such as `lr`, `load`, `save`, warmup, and optimizer / scheduler settings. - -If you configure different parallel topologies for actor and critic, the behavior is currently unsupported and may fail during initialization or training. - ---- - -## FAQ - -### Q: Can I provide only an actor entry or only a critic entry? - -Yes. Missing roles automatically inherit the shared CLI arguments, so you do not need to duplicate everything in YAML. - -### Q: Can I move `--actor-num-nodes` or `--critic-num-gpus-per-node` into YAML? - -No. Resource allocation and placement groups are still controlled by CLI arguments, and the corresponding YAML fields are ignored. \ No newline at end of file diff --git a/docs/en/advanced/rfc-vllm-rollout-backend.md b/docs/en/advanced/rfc-vllm-rollout-backend.md deleted file mode 100644 index 5c3cbd20f5..0000000000 --- a/docs/en/advanced/rfc-vllm-rollout-backend.md +++ /dev/null @@ -1,360 +0,0 @@ -# RFC: Add vLLM as a Rollout Backend in Slime - -- **Author**: \ -- **Status**: Draft -- **Audience**: Slime rollout/runtime maintainers, RL training maintainers -- **Last Updated**: 2026-03-02 - -## 1. Summary - -This RFC proposes adding **vLLM** as a first-class rollout backend in Slime while preserving current SGLang behavior and avoiding regressions in GRPO workflows. - -The design is based on: - -1. A backend-agnostic rollout request/response contract. -2. Backend adapters (`SGLangClient`, `VLLMClient`) that isolate protocol differences. -3. Capability-aware behavior for non-parity features (abort, routed experts, prompt logprobs). -4. Managed vLLM mode from day one (Slime manages vLLM process lifecycle inside Ray, same as SGLang path). -5. Weight sync via NCCL broadcast (GPU direct transfer, no disk I/O). - -## 2. Why this is needed - -Slime currently assumes SGLang behavior in multiple places: - -- rollout generation response schema (`meta_info.finish_reason.type`, `output_token_logprobs`, optional `routed_experts`) -- router control-plane interactions (`/workers`, `/list_workers`, `/abort_request`) -- rollout server startup flow in Ray - -Supporting vLLM is therefore not a URL replacement. It requires a compatibility layer across both data plane and control plane semantics. - -## 3. Goals and Non-goals - -### Goals - -- Add `--rollout-backend {sglang,vllm}`. -- Keep SGLang path unchanged by default. -- Keep trainer/algorithm interfaces stable. -- Support GRPO rollout with explicit compatibility semantics and observability. - -### Non-goals (initial phase) - -- Full parity for all SGLang-specific features. -- Colocate mode (training and rollout sharing same GPUs). -- R3 routed expert replay on vLLM. -- Multi-instance vLLM with router load balancing. - -## 4. Architecture and Interface Changes (Explicit) - -This section is the key communication point for Slime maintainers. - -### 4.1 Architecture changes - -#### End-to-end architecture (string diagram) - -```text - +--------------------+ - | TrainerLoop | - +---------+----------+ - | - v - +--------------------+ - | RolloutFunction | - +---------+----------+ - | - v - +-------------------------------+ - | CanonicalRolloutRequest | - | (input_ids, sampling_params, | - | return_logprob, prompt_text) | - +---------------+---------------+ - | - v - +--------------------------+ - | RolloutBackendClient | - +------------+-------------+ - | - +-----------------+-----------------+ - | | - v v - +------------------------+ +------------------------+ - | SGLangClient | | VLLMClient | - +-----------+------------+ +------------+-----------+ - | | - v v - +-------------------------------+ +------------------------------+ - | SGLangRouter or SlimeRouter | | SlimeRouter(generic) or | - | (SGLang control-plane aware) | | direct vLLM endpoint | - +---------------+---------------+ +--------------+---------------+ - | | - v v - +----------------------+ +----------------------+ - | SGLang workers | | vLLM workers | - +----------+-----------+ +----------+-----------+ - \ / - \ / - v v - +-----------------------------------+ - | CanonicalRolloutResponse | - | (text, token_ids, token_logprobs, | - | finish_reason, backend_raw) | - +----------------+------------------+ - | - v - +-----------------------------------+ - | SampleUpdate + Training Pipeline | - | (backend-agnostic consumption) | - +-----------------------------------+ -``` - -#### Component responsibility map - -| Component | Responsibility before RFC | Responsibility after RFC | -|---|---|---| -| `RolloutFunction` | Contains generic rollout + SGLang protocol details | Contains generic rollout orchestration only | -| Backend protocol layer | Implicit in rollout logic | Explicit via `RolloutBackendClient` adapters | -| `SGLangClient` | N/A (scattered logic) | Owns SGLang request/response/control-plane specifics | -| `VLLMClient` | N/A | Owns vLLM request/response mapping and retries | -| Trainer/sample pipeline | Consumes SGLang-shaped fields indirectly | Consumes canonical fields, backend-agnostic | -| Router integration | Mixed generic + SGLang-specific assumptions | SGLang-specific control-plane isolated to SGLang adapter | - -#### Control-plane behavior split - -| Control-plane behavior | SGLang path | vLLM initial path | -|---|---|---| -| Worker registration/discovery APIs | Supported | Not required in generic path | -| Worker-level abort | Supported (`/abort_request`) | Fallback to timeout/cancel semantics | -| Routed experts replay metadata | Supported | Explicitly unsupported (capability-gated) | -| Health/load-balance routing | Existing SGLang/SlimeRouter behavior | SlimeRouter generic mode or direct endpoint | - -#### A) Rollout backend abstraction layer (new) - -- Introduce a backend client interface: - - `RolloutBackendClient` - - backend capability descriptor -- Add concrete adapters: - - `SGLangClient` (existing behavior extraction) - - `VLLMClient` (new) - -**Impact**: rollout logic calls a unified backend interface instead of directly embedding SGLang HTTP semantics. - -#### B) Rollout execution path refactor - -- `sglang_rollout.generate` no longer directly depends on SGLang HTTP payload/response shape. -- It builds a canonical request and consumes a canonical response. - -**Impact**: trainer-side logic remains stable while backend-specific details move into adapters. - -#### C) Startup path split in RolloutManager - -- Existing path (SGLang): keep current managed startup behavior. -- vLLM path: managed mode -- Slime creates `VLLMEngine` Ray actors that launch and manage local vLLM server processes, just like SGLang path uses `SGLangEngine`. - -**Impact**: vLLM gets the same lifecycle management as SGLang (process startup, health check, shutdown). - -#### D) Weight sync: VLLMEngine with same interface as SGLangEngine - -Training-side weight updater (`UpdateWeightFromDistributed`) calls engine methods via Ray remote. The core call chain with source locations: - -```text -Training side (Megatron actor, UNCHANGED) - UpdateWeightFromDistributed.update_weights() - -> engine.pause_generation.remote() # Ray remote call - -> VLLMEngine.pause_generation() # Ray actor method - -> requests.post("http://localhost:8000/sleep?level=2") - -> requests.post("http://localhost:8000/wake_up?tags=weights") - - -> engine.flush_cache.remote() - -> VLLMEngine.flush_cache() # no-op, sleep level 2 covers this - - -> engine.init_weights_update_group.remote() - -> VLLMEngine.init_weights_update_group() - -> requests.post("http://localhost:8000/collective_rpc", - json={"method": "init_weight_update_group", - "master_address": ..., "master_port": ..., - "rank_offset": ..., "world_size": ...}) - - -> dist.broadcast(param, src=0, group=nccl_group) # training process NCCL broadcast - -> engine.update_weights_from_distributed.remote() # tell vLLM "receive these params" - -> VLLMEngine.update_weights_from_distributed() - -> requests.post("http://localhost:8000/collective_rpc", - json={"method": "update_weight", - "name": ..., "dtype_name": ..., "shape": ...}) - -> vLLM worker: NCCL broadcast recv + model.load_weights() - - -> engine.continue_generation.remote() - -> VLLMEngine.continue_generation() - -> requests.post("http://localhost:8000/wake_up?tags=kv_cache") - - -Rollout generation side - sglang_rollout.generate() - -> VLLMClient.generate() - -> httpx.post("http://localhost:8000/v1/completions") # direct to local vLLM -``` - -`VLLMEngine` exposes **the same method signatures** as `SGLangEngine`. Endpoint mapping: - -| Method (same signature) | SGLangEngine internal | VLLMEngine internal | -|---|---|---| -| `pause_generation()` | `POST /pause_generation` | `POST /sleep?level=2` + `POST /wake_up?tags=weights` | -| `flush_cache()` | `GET /flush_cache` | no-op (sleep level 2 covers this) | -| `init_weights_update_group(...)` | `POST /init_weights_update_group` | `POST /collective_rpc {"method":"init_weight_update_group",...}` | -| `update_weights_from_distributed(...)` | `POST /update_weights_from_distributed` | `POST /collective_rpc {"method":"update_weight",...}` | -| `continue_generation()` | `POST /continue_generation` | `POST /wake_up?tags=kv_cache` | - -**Impact**: training-side code (`UpdateWeightFromDistributed`, `train.py`, actor code) requires **zero changes**. Weight sync uses NCCL broadcast (GPU direct transfer), same efficiency as SGLang path. - -Source links: -- [train.py#L88](../../../train.py#L88), [actor_group.py#L126](../../../slime/ray/actor_group.py#L126), [actor.py#L532](../../../slime/backends/megatron_utils/actor.py#L532) -- [update_weight_from_distributed.py#L82](../../../slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py#L82), [#L89](../../../slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py#L89), [#L90](../../../slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py#L90), [#L280](../../../slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py#L280), [#L321](../../../slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py#L321), [#L139](../../../slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py#L139) -- [sglang_engine.py#L415](../../../slime/backends/sglang_utils/sglang_engine.py#L415), [#L296](../../../slime/backends/sglang_utils/sglang_engine.py#L296), [#L373](../../../slime/backends/sglang_utils/sglang_engine.py#L373), [#L398](../../../slime/backends/sglang_utils/sglang_engine.py#L398), [#L420](../../../slime/backends/sglang_utils/sglang_engine.py#L420) -- [sglang_rollout.py#L47](../../../slime/rollout/sglang_rollout.py#L47), [#L72](../../../slime/rollout/sglang_rollout.py#L72), [#L165](../../../slime/rollout/sglang_rollout.py#L165), [#L311](../../../slime/rollout/sglang_rollout.py#L311) -- [rollout.py#L477](../../../slime/ray/rollout.py#L477), [#L1028](../../../slime/ray/rollout.py#L1028), [#L1041](../../../slime/ray/rollout.py#L1041) - -#### E) Router decision: no router for vLLM initial phase - -- SGLang Model Gateway: only supports SGLang workers, not applicable. -- SlimeRouter: only needed for R3 / radix-tree caching; Qwen2.5-0.5B is not MoE and uses token-in/token-out. -- Single vLLM instance, `VLLMClient` connects directly to local vLLM server port. - -### 4.2 Interface changes - -#### A) New CLI interfaces - -- `--rollout-backend {sglang,vllm}` -- `--vllm-base-url` -- `--vllm-api-mode` (e.g. OpenAI-compatible completion mode) -- `--vllm-model` -- `--vllm-max-retries` - -#### B) New internal canonical interfaces - -Add canonical rollout contract types: - -- `RolloutBackendRequest` -- `RolloutBackendResponse` - -These carry backend-neutral fields such as: - -- input token ids -- sampling params -- output token ids/logprobs -- canonical finish reason (`stop|length|abort`) -- backend raw response for debugging - -#### C) Capability-gated interface behavior - -Backends declare capabilities (abort support, routed experts support, prompt logprobs support). Unsupported features are explicitly gated, logged, and/or failed fast. - -## 5. File-level Change Map (for maintainers) - -### New files - -- `slime/rollout/backends/base_client.py` -- backend client interface + capability model -- `slime/rollout/backends/sglang_client.py` -- extracted SGLang rollout client -- `slime/rollout/backends/vllm_client.py` -- vLLM rollout client -- `slime/rollout/backends/__init__.py` -- adapter exports -- `slime/backends/vllm_utils/vllm_engine.py` -- `VLLMEngine` Ray actor (analogous to `SGLangEngine`) -- `slime/backends/vllm_utils/worker_extension.py` -- vLLM WorkerExtension for NCCL weight sync - -### Modified files - -- `slime/rollout/base_types.py` -- add canonical backend request/response types -- `slime/rollout/sglang_rollout.py` -- use backend adapters instead of hardcoded SGLang protocol -- `slime/utils/arguments.py` -- add `--rollout-backend`, vLLM args; skip SGLang parse when vLLM -- `slime/ray/rollout.py` -- startup flow split: create `VLLMEngine` when `rollout_backend=vllm` - -### Unchanged files (by design) - -- `train.py` -- training loop does not know about backend -- `slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py` -- engine method signatures are identical -- `slime/backends/megatron_utils/actor.py` -- calls engine methods polymorphically - -## 6. Compatibility Matrix (initial) - -| Capability | SGLang | vLLM (initial) | Handling | -|---|---|---|---| -| Token-level response logprobs | Yes | Partial/endpoint-dependent | Adapter normalization | -| Finish reason mapping (`stop|length|abort`) | Native | Different enums likely | Canonical mapping | -| Worker-level abort | Yes | Typically no direct equivalent | timeout/cancel fallback strategy | -| Prompt logprobs (OPD-related) | Yes | Partial/unknown by endpoint | capability-gated | -| Routed experts replay (R3) | Yes | No | explicit unsupported gate | -| SGLang worker API dependency | Yes | No | isolate in SGLang adapter | - -## 7. Phased Plan - -### Phase 1: Managed vLLM GRPO training (small-scale validation) - -**Goal**: Qwen2.5-0.5B GRPO 8-GPU sync training on GSM8K, loss/reward convergence comparable to SGLang. - -Key deliverables: -- `VLLMEngine` Ray actor (process lifecycle, sleep/wake_up, weight sync via NCCL) -- `VLLMClient` rollout adapter (request/response mapping, logprob/finish_reason normalization) -- `RolloutBackendRequest/Response` canonical contract -- `SGLangClient` extraction (isolate SGLang protocol details) -- `start_rollout_servers` branching for vLLM path -- Argument parsing split (`--rollout-backend vllm`) - -Technical decisions: -- No router (single vLLM instance, direct connection) -- Weight sync: NCCL broadcast via `VLLMEngine` with same method signatures as `SGLangEngine` -- Non-colocate mode (separate training and rollout GPUs) -- Rollout function: reuse `sglang_rollout.py` (backend-agnostic orchestration) -- Training-side code: zero changes - -Acceptance criteria: -- `num_rollout=3` smoke passes without errors -- Weight sync correctness: rollout output changes with each training update -- reward mean delta < 5% vs SGLang path (same seed/config, 20 steps) -- Existing SGLang tests remain green - -### Phase 2: Performance, scale, and advanced features - -- Colocate mode support (GPU IPC weight transfer) -- Multi-instance vLLM with load balancing -- Abort/cancel strategy refinement -- Prompt logprob support (OPD scenarios) -- Deterministic computation verification -- Larger model validation (e.g. Qwen3-4B) - -## 8. Validation strategy - -### Unit - -- finish reason normalization -- token/logprob alignment -- capability-gated behavior - -### Integration - -- SGLang vs vLLM response schema comparisons -- timeout/retry/non-crash behavior checks - -### End-to-end GRPO - -- smoke (short rollout) -- stability (medium horizon) -- stress (higher concurrency / latency pressure) - -## 9. Risks and mitigations - -- **Logprob semantic mismatch**: strict adapter checks + canonicalization + tests. -- **Abort mismatch**: capability model + timeout/cancel fallback + explicit logs. -- **Training drift**: mandatory A/B runs with fixed seeds and aligned configs. -- **Middleware assumptions**: enforce capability checks and default-disable incompatible middleware paths. - -## 10. Open questions for Slime maintainers - -1. Should vLLM initial path be direct endpoint only, or standardize via SlimeRouter generic mode immediately? -2. What minimum logprob fidelity is required to claim GRPO support? -3. Should OPD prompt-logprob paths be blocked for vLLM until full parity? -4. What backend quality gates are required before default recommendation? - -## 11. Decision requested - -Approve incremental implementation with: - -- contract-first adapter architecture, -- external vLLM initial support, -- explicit capability-gated behavior, -- strict SGLang non-regression requirement. diff --git a/docs/en/advanced/sglang-config.md b/docs/en/advanced/sglang-config.md deleted file mode 100644 index 70af72d2ec..0000000000 --- a/docs/en/advanced/sglang-config.md +++ /dev/null @@ -1,453 +0,0 @@ -# SGLang Config: Advanced Engine Deployment - -`--sglang-config` is a YAML-based configuration system for fine-grained control over SGLang engine deployment in slime. It enables **multi-model serving**, **Prefill-Decode (PD) disaggregation**, **heterogeneous server groups**, and can even serve as a **standalone SGLang launcher** for complex inference topologies. - ---- - -## Architecture Overview - -In the default setup (without `--sglang-config`), slime deploys a single model behind a single router with uniform server groups: - -![architecture overview](../../_static/image/arch.png) - -With `--sglang-config`, the SGLang deployment expands into a multi-model, multi-router topology: - -![sglang-config architecture](../../_static/image/sglang_config.png) - -**Key design principles:** - -- **Each model gets its own router.** Models are isolated at the routing layer, allowing independent load balancing and fault tolerance. -- **Server groups within a model can be heterogeneous.** Different groups can have different TP sizes, worker types (prefill/decode/regular), and SGLang server argument overrides. -- **Weight sync is per-model.** Only models with `update_weights: true` receive weight updates from training. Frozen models (reference, reward, etc.) are served as-is. - ---- - -## Config Format - -The config file is a YAML document with a top-level `sglang` key containing a list of model definitions: - -```yaml -sglang: - - name: # Required. Unique identifier for this model. - model_path: # Optional. HF checkpoint path. Defaults to --hf-checkpoint. - update_weights: # Optional. Whether to sync weights from training. Auto-inferred. - num_gpus_per_engine: # Optional. Default TP size for all groups in this model. - server_groups: # Required. List of server group configurations. - - worker_type: # Required. One of: regular, prefill, decode, placeholder. - num_gpus: # Required. Total GPUs allocated to this group. - num_gpus_per_engine: # Optional. TP size override for this group. - overrides: # Optional. SGLang ServerArgs field overrides. -``` - -### Field Reference - -#### Model-Level Fields - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `name` | `str` | **Required** | Unique name for this model (e.g., `"actor"`, `"ref"`, `"reward"`). Used as the key in `args.sglang_model_routers`. | -| `model_path` | `str` | `args.hf_checkpoint` | HuggingFace checkpoint path. All server groups within a model must use the same model path. | -| `update_weights` | `bool` | Auto | Whether this model receives weight updates from training. When not set, automatically inferred: `true` if `model_path` matches `--hf-checkpoint`, `false` otherwise. | -| `num_gpus_per_engine` | `int` | `args.rollout_num_gpus_per_engine` | Default TP size for server groups in this model. Individual groups can override. | -| `server_groups` | `list` | **Required** | List of `ServerGroupConfig` entries defining the engine topology. (`engine_groups` is accepted as a backward-compatible alias.) | - -#### Server Group Fields - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `worker_type` | `str` | **Required** | Engine type: `regular` (standard), `prefill` (PD prefill worker), `decode` (PD decode worker), or `placeholder` (reserve GPU slots without launching engines). | -| `num_gpus` | `int` | **Required** | Total number of GPUs for this group. Must be > 0. | -| `num_gpus_per_engine` | `int` | Model's `num_gpus_per_engine` | TP size override. Number of GPUs per engine instance. | -| `overrides` | `dict` | `{}` | SGLang `ServerArgs` field overrides. Applied on top of `--sglang-*` CLI args with highest priority. | - -### Worker Types - -| Type | Description | Use Case | -|------|-------------|----------| -| `regular` | Standard SGLang engine | Default mode, handles both prefill and decode | -| `prefill` | PD disaggregation prefill worker | Dedicated to prompt processing; paired with `decode` workers | -| `decode` | PD disaggregation decode worker | Dedicated to token generation; paired with `prefill` workers | -| `placeholder` | Reserves GPU slots, no engine created | Reserve GPUs for training co-location or future use | - ---- - -## Usage Patterns - -### 1. Basic Single-Model Deployment - -The simplest config replicates the default behavior: - -```yaml -# sglang_basic.yaml -sglang: - - name: default - server_groups: - - worker_type: regular - num_gpus: 8 -``` - -```bash -python train.py \ - --sglang-config sglang_basic.yaml \ - --rollout-num-gpus 8 \ - --rollout-num-gpus-per-engine 2 \ - ... -``` - -This creates 4 engines (8 GPUs ÷ 2 GPUs/engine) behind a single router. - -### 2. PD Disaggregation - -Separate prefill and decode phases onto dedicated server groups for better throughput in multi-turn and agentic workloads: - -```yaml -# sglang_pd.yaml -sglang: - - name: actor - server_groups: - - worker_type: prefill - num_gpus: 4 - num_gpus_per_engine: 2 # 2 prefill engines, TP=2 - - worker_type: decode - num_gpus: 12 - num_gpus_per_engine: 4 # 3 decode engines, TP=4 -``` - -```bash -python train.py \ - --sglang-config sglang_pd.yaml \ - --rollout-num-gpus 16 \ - ... -``` - -**Why PD disaggregation?** In multi-turn scenarios, prefill and decode have different compute characteristics. Prefill is compute-bound (processes the entire prompt), while decode is memory-bandwidth-bound (generates tokens one-by-one). Disaggregating them allows: -- Using smaller TP for prefill (higher throughput per GPU) -- Using larger TP for decode (lower latency) -- Independent scaling of prefill vs. decode capacity - -> **Note:** PD disaggregation uses SGLang Model Gateway (sgl-router) with `pd_disaggregation=True`. - -### 3. Multi-Model Serving - -Deploy multiple models simultaneously, each behind its own router: - -```yaml -# sglang_multi_model.yaml -sglang: - - name: actor - update_weights: true # receives weight updates from training - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - - - name: ref - model_path: /path/to/ref_model # different model checkpoint - update_weights: false # frozen, no weight updates - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 - - - name: reward - model_path: /path/to/reward_model - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 -``` - -```bash -python train.py \ - --sglang-config sglang_multi_model.yaml \ - --rollout-num-gpus 16 \ - --hf-checkpoint /path/to/actor_model \ - --rollout-function-path my_rollout.generate_rollout \ - ... -``` - -**Accessing models in custom rollout functions:** - -```python -from slime.rollout.sglang_rollout import get_model_url -from slime.utils.http_utils import post - -async def my_generate(args, sample, sampling_params): - # Route to the actor model (default) - actor_url = get_model_url(args, "actor", "/generate") - output = await post(actor_url, {"text": sample.prompt, "sampling_params": sampling_params}) - - # Route to the reference model - ref_url = get_model_url(args, "ref", "/generate") - ref_output = await post(ref_url, {"text": sample.prompt, "sampling_params": sampling_params}) - - # Route to the reward model (e.g., OpenAI-compatible API) - reward_url = get_model_url(args, "reward", "/v1/chat/completions") - reward_output = await post(reward_url, {...}) - - ... -``` - -The `get_model_url()` helper reads from `args.sglang_model_routers`, a dict mapping model names to `(ip, port)` tuples that is automatically populated after engine startup. - -### 4. Multi-Model with PD Disaggregation - -Combine multi-model and PD disaggregation for maximum flexibility: - -```yaml -# sglang_full.yaml -sglang: - - name: actor - update_weights: true - server_groups: - - worker_type: prefill - num_gpus: 4 - num_gpus_per_engine: 2 - - worker_type: decode - num_gpus: 8 - num_gpus_per_engine: 4 - - - name: ref - model_path: /path/to/ref_model - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 -``` - -### 5. Placeholder Groups for GPU Reservation - -Use `placeholder` groups to reserve GPU slots without creating engines. This is useful for co-located training where some GPUs need to be reserved for training: - -```yaml -sglang: - - name: actor - server_groups: - - worker_type: regular - num_gpus: 6 - num_gpus_per_engine: 2 - - worker_type: placeholder - num_gpus: 2 # reserve 2 GPUs (no engines created) -``` - -### 6. Per-Group ServerArgs Overrides - -Use `overrides` to apply SGLang `ServerArgs` fields to specific server groups without affecting others: - -```yaml -sglang: - - name: actor - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - overrides: - mem_fraction_static: 0.85 - context_length: 32768 - chunked_prefill_size: 4096 - enable_torch_compile: true -``` - -Overrides take **highest priority**, overriding both the base `--sglang-*` CLI args and model-level defaults. This is especially useful for: -- Different memory configurations per group -- Different context lengths for prefill vs. decode -- Enabling experimental features on specific groups - -### 7. Standalone SGLang Launcher - -While `--sglang-config` is designed for slime's training pipeline, it also works as a powerful launcher for pure inference scenarios using the `--rollout-external` pattern or by configuring slime to focus solely on serving. - -**Using external engines with a pre-launched topology:** - -For complex production deployments, you may want to pre-launch SGLang engines independently and connect them to slime: - -```bash -# Step 1: Launch SGLang engines externally -python -m sglang.launch_server --model-path /path/to/model --port 10090 ... -python -m sglang.launch_server --model-path /path/to/model --port 10091 ... - -# Step 2: Connect slime to external engines -python train.py \ - --rollout-external \ - --rollout-external-engine-addrs host1:10090 host2:10091 \ - ... -``` - -> **Note:** `--sglang-config` and `--rollout-external` are mutually exclusive. Use `--sglang-config` when you want slime to manage the full engine lifecycle; use `--rollout-external` when engines are pre-deployed. - ---- - -## Router Configuration - -Each model in the config gets its own independent router (SGLang Model Gateway by default). - -### Router Policies - -You can configure the routing policy: - -```bash ---router-policy round_robin # Simple round-robin ---router-policy consistent_hashing # Session affinity for multi-turn ---router-policy cache_aware # Cache-aware routing (default) -``` - -### Session-Affinity Routing for Multi-Turn Agents - -For multi-turn dialogues and agentic workloads, session affinity ensures that all requests belonging to the same conversation are routed to the same backend worker. This significantly improves prefix cache hit rates because the worker already has the conversation history cached. - -slime automatically assigns each sample a unique `session_id` (stored in `sample.session_id`). When the router policy is `consistent_hashing`, this ID is passed as the `X-SMG-Routing-Key` header, and SGLang Model Gateway uses it to deterministically route all turns of the same session to the same worker. - -```bash ---router-policy consistent_hashing -``` - -**How it works:** - -1. Each sample is assigned a unique `session_id` via UUID -2. On each request, slime passes `X-SMG-Routing-Key: ` in the HTTP header -3. SGLang Model Gateway's consistent hashing policy maps this key to a specific worker -4. Subsequent turns reuse the same `session_id`, ensuring they hit the same worker - ---- - -## Resolution Rules - -When the config is loaded, slime applies the following resolution cascade: - -1. **GPU per engine fallback:** Group `num_gpus_per_engine` → Model `num_gpus_per_engine` → `args.rollout_num_gpus_per_engine` -2. **Model path fallback:** Group `overrides.model_path` → Model `model_path` → `args.hf_checkpoint` -3. **Weight update inference:** If `update_weights` is not set: - - `true` if the effective model path matches `--hf-checkpoint` - - `false` otherwise (with a warning) -4. **Total GPU validation:** The sum of all `num_gpus` across all groups across all models must equal `--rollout-num-gpus`. - ---- - -## Mutual Exclusion - -`--sglang-config` is mutually exclusive with: - -| Flag | Conflict Reason | -|------|----------------| -| `--prefill-num-servers` | PD disaggregation is configured via `server_groups` in the YAML | -| `--rollout-external` | External engines have their own topology; config manages the lifecycle internally | - ---- - -## Complete Example: Multi-Model Agentic Training - -Below is a complete example showing a multi-model setup for agentic RL training with PD disaggregation on 32 GPUs: - -**Config file (`sglang_agent.yaml`):** - -```yaml -sglang: - - name: actor - update_weights: true - server_groups: - - worker_type: prefill - num_gpus: 4 - num_gpus_per_engine: 2 - overrides: - chunked_prefill_size: 8192 - - worker_type: decode - num_gpus: 12 - num_gpus_per_engine: 4 - overrides: - mem_fraction_static: 0.88 - - - name: ref - model_path: /data/models/Qwen3-32B - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - - - name: reward - model_path: /data/models/reward-model - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 -``` - -**Launch command:** - -```bash -python train.py \ - --sglang-config sglang_agent.yaml \ - --hf-checkpoint /data/models/Qwen3-8B \ - --rollout-num-gpus 32 \ - --rollout-function-path my_agent.rollout.generate_rollout \ - --custom-rm-path my_agent.reward.reward_func \ - --advantage-estimator grpo \ - --n-samples-per-prompt 8 \ - ... -``` - -**Custom rollout function (`my_agent/rollout.py`):** - -```python -from slime.rollout.sglang_rollout import get_model_url -from slime.utils.http_utils import post - -async def generate_with_models(args, sample, sampling_params): - """Generate using actor, score with reward model, compare with reference.""" - - # Generate from actor - actor_url = get_model_url(args, "actor", "/generate") - actor_output = await post(actor_url, { - "text": sample.prompt, - "sampling_params": sampling_params, - "return_logprob": True, - }) - - # Get reference logprobs for KL penalty - ref_url = get_model_url(args, "ref", "/generate") - ref_output = await post(ref_url, { - "text": sample.prompt + actor_output["text"], - "sampling_params": {"max_new_tokens": 0, "temperature": 0}, - "return_logprob": True, - }) - - # Score with reward model - reward_url = get_model_url(args, "reward", "/v1/chat/completions") - reward_output = await post(reward_url, { - "model": "reward", - "messages": [{"role": "user", "content": sample.prompt + actor_output["text"]}], - }) - - # ... process outputs and return Sample -``` - ---- - -## FAQ - -### Q: Can I mix PD and regular groups in the same model? - -No. PD disaggregation requires that a model's server groups are either all prefill/decode pairs or all regular. Mixing `regular` with `prefill`/`decode` in the same model is not supported. - -### Q: What happens if `num_gpus` is not divisible by `num_gpus_per_engine`? - -For multi-node engines (where `num_gpus_per_engine > num_gpus_per_node`), the division is based on the local GPU count per node. For example, with 8 GPUs/node and `num_gpus_per_engine: 16`, each engine spans 2 nodes. - -### Q: Can different server groups within a model use different model paths? - -No. All server groups within a model must share the same `model_path`. This is validated during `resolve()`. If you need different models, define them as separate model entries. - -### Q: How do I access the router address for a specific model at runtime? - -Use `get_model_url(args, "model_name", "/endpoint")` from `slime.rollout.sglang_rollout`. It reads from `args.sglang_model_routers`, which is a dict `{ model_name: (ip, port) }` populated automatically. - -### Q: Can I use `--sglang-config` without training (inference only)? - -While `--sglang-config` is designed for slime's training loop, you can effectively use it for inference-only scenarios by configuring a rollout-only run. For fully standalone SGLang serving, consider using SGLang's native `launch_server` directly or the `--rollout-external` mode for connecting to pre-deployed engines. - -### Q: What is the relationship between `--sglang-config` and `--prefill-num-servers`? - -`--prefill-num-servers` is the legacy way to enable PD disaggregation (it creates a single model with prefill + decode groups). `--sglang-config` is the newer, more flexible approach. They are mutually exclusive. We recommend migrating to `--sglang-config` for all new deployments. diff --git a/docs/en/advanced/slime-router.md b/docs/en/advanced/slime-router.md new file mode 100644 index 0000000000..f4d3ba3099 --- /dev/null +++ b/docs/en/advanced/slime-router.md @@ -0,0 +1,138 @@ +# Slime Router + +Slime includes an optional SlimeRouter used during rollout / data generation. It is a lightweight HTTP router/proxy that sits in front of one or more SGLang worker servers and adds training-oriented capabilities that are not the main goal of serving-focused routers. + +--- + +## 1. What is SlimeRouter? + +SlimeRouter is a small FastAPI service that: + +- Registers workers (SGLang HTTP servers) into a local pool +- Routes requests to a selected worker (simple least-inflight load balancing) +- Proxies arbitrary paths to the selected worker (e.g. `/generate`) +- Runs periodic health checks and quarantines unhealthy workers +- Supports middleware plugins (via `--slime-router-middleware-paths`) to implement rollout-specific processing (e.g. caching, request/response transforms) + +In slime's architecture, the router is part of the rollout system ("SGLang + router") that generates samples and pushes them into the data buffer. + +### How it is launched + +In distributed training, slime will start a router automatically when `--sglang-router-ip` is not provided: + +- If `--use-slime-router` is set, slime starts SlimeRouter +- Otherwise, slime starts SGLang Model Gateway + +--- + +## 2. Why we need SlimeRouter + +Unlike production inference, RL rollout needs to capture additional metadata for training: token-level logprobs, loss masks, and (for MoE models) expert routing decisions. SlimeRouter provides these capabilities through its middleware system and passthrough proxy design. + +### 2.1 Radix-tree cache (transparent token management) + +> Use this when your rollout pipeline is text-in/text-out and you cannot reliably persist token IDs; if you already control token-in/token-out (e.g. search r1, multiturn VLM examples), you likely don't need the radix-tree cache. + +Text-in text-out interfaces can cause token retokenization mismatches - re-tokenizing text at training time may produce different token sequences than rollout, breaking per-token alignment needed for PPO/GRPO losses. + +The radix-tree cache solves this transparently: it intercepts text-based requests, tokenizes them, and stores trajectories (text, token IDs, logprobs, loss masks) keyed by the text prefix. After rollout finishes, calling `/retrieve_from_text` returns the exact token sequence with aligned metadata, without requiring any changes to your rollout code. + +Implementation-wise, the radix-tree cache: + +- Accepts text plus tokens/metadata and stores them in a radix tree +- Uses longest-prefix matching to reuse cached token sequences (enabling token-in/token-out downstream) +- Allows insertion of new text continuations as rollout proceeds (multiple trajectories per prompt, e.g. GRPO) +- Periodically cleans up stale nodes to control memory usage + +Use the radix cache when you have text-based rollout code and want token-level precision without rewriting, or when running GRPO with multiple trajectories sharing the same prompt prefix. + +### 2.2 Rollout routing replay (R3) for MoE + +For MoE models, slime supports rollout routing replay (R3): record expert routing decisions during rollout and replay them during training to improve stability. + +#### SGLang side + +SGLang provides expert routing capture via: + +- `--enable-return-routed-experts`: server argument to enable routing capture +- `RoutedExpertsCapturer`: captures `topk_ids` (selected expert IDs) at each MoE layer during forward pass +- `return_routed_experts`: request parameter to retrieve routing data +- Returns `routed_experts` in response `meta_info` - a `[seq_len - 1, num_layers, top_k]` tensor of expert IDs + +#### Slime side + +Slime consumes the routing data and replays it during training: + +- `--use-slime-router --use-rollout-routing-replay`: both flags required to enable R3 +- Rollout sends `return_routed_experts=True` and stores results in `sample.rollout_routed_experts` +- Training calls `fill_routing_replay()` to load routing data into `RoutingReplay` objects +- During forward pass, recorded routing decisions are replayed instead of recomputed + +#### Why SlimeRouter is needed + +We need SlimeRouter because the SGLang worker returns routed experts in the response (`meta_info.routed_experts`) when the request sets `return_routed_experts=true`, and SlimeRouter preserves this field end-to-end. SGLang Model Gateway may drop this extra metadata when it reconstructs responses with a fixed schema (see section 3). + +--- + +## 3. Differences vs SGLang Model Gateway + +SlimeRouter and SGLang Model Gateway can both route requests to workers, but they are optimized for different goals. + +### Key differences + +SlimeRouter is a lightweight Python/FastAPI proxy that acts as a passthrough to SGLang workers. This passthrough design enables RL-specific features like radix-tree trajectory caching and R3 (which require preserving raw response metadata like `routed_experts`). + +SGLang Model Gateway is a high-performance Rust-based router optimized for large-scale inference: async non-blocking routing, advanced fault tolerance (retries, circuit breakers), multiple load balancing policies (including cache-aware routing), and PD disaggregation support. However, it reconstructs responses with a fixed schema, so it does not preserve the metadata needed for slime's R3 flow. + +For more details on SGLang Model Gateway, see the [official documentation](https://docs.sglang.io/advanced_features/sgl_model_gateway.html). + +### When to use which + +- Use SlimeRouter when you need R3 or radix-tree caching +- Use SGLang Model Gateway for everything else (recommended default) + +--- + +## 4. Session-Affinity Routing for Multi-Turn Agents + +When using SGLang Model Gateway with consistent hashing routing policy, Slime automatically assigns each rollout session a unique session ID and uses it as the routing key to enable session affinity. + +### What is session affinity? + +Session affinity (also called sticky sessions) ensures that all requests belonging to the same conversation or agent session are routed to the same backend worker. This is beneficial for: + +- **Multi-turn dialogues**: Keeping the same worker improves prefix cache hit rates +- **Multi-agent systems**: Ensures agent state consistency and better resource locality +- **Debugging**: Makes it easier to trace and debug specific sessions + +### How it works + +When the rollout system generates samples, each sample is assigned a unique `session_id`. This ID is: + +1. Automatically generated using UUID for each sample +2. Stored in `sample.session_id` field +3. Passed as `X-SMG-Routing-Key` header when the router policy is `consistent_hashing` + +The SGLang Model Gateway's consistent hashing policy then uses this routing key to deterministically select the same worker for all requests with the same session ID. + +### Configuration + +To enable session-affinity routing, simply configure the router policy in Slime: + +```bash +--sglang-router-policy consistent_hashing +``` + +Slime will automatically start SGLang Model Gateway with the consistent hashing policy. + +> **Note**: If you encounter an error about the `consistent_hashing` policy not being available, upgrade sglang-router: +> ```bash +> pip install -U sglang-router +> ``` + +### Notes + +- Each sample gets its own unique session ID +- Different samples in the same group may be routed to different workers +- The same sample's subsequent turns will maintain the same session ID +- Currently, this feature is only available for SGLang Model Gateway diff --git a/docs/en/blogs/introducing_slime.md b/docs/en/blogs/introducing_slime.md index 06eb60f20c..f35c7d65b2 100644 --- a/docs/en/blogs/introducing_slime.md +++ b/docs/en/blogs/introducing_slime.md @@ -36,7 +36,7 @@ It wasn’t always like this: no one forks PyTorch just for a new dataloader. We slime views the data sampling in RL differently. We manage all SGLang servers within slime with [sgl-router](https://github.com/sgl-project/sglang/tree/main/sgl-router) and provide an interface for the data generation component, **allowing users to inject custom logic and freely interact with SGLang servers**. Unleash their creativity. -![slime architecture](../../_static/image/arch.png) +![slime architecture](/imgs/arch.png) With the sgl-router, users only need to send HTTP requests to a single endpoint. By exposing this endpoint, complex agent environments can directly interact with slime through an OpenAI-compatible API — no need to modify the environment, and training-deployment consistency is preserved. diff --git a/docs/en/developer_guide/ci.md b/docs/en/developer_guide/ci.md index f84f46879a..7e93f38291 100644 --- a/docs/en/developer_guide/ci.md +++ b/docs/en/developer_guide/ci.md @@ -6,7 +6,7 @@ slime uses GitHub Actions for CI. Tests are triggered by **PR labels** — addin The workflow is defined in `.github/workflows/pr-test.yml` (auto-generated from `pr-test.yml.j2`). Each CI job: -1. Runs on a self-hosted GPU runner via `docker run`; most tests use `slimerl/slime:latest`, while image validation uses `slimerl/slime-test:latest`. +1. Runs on a self-hosted GPU runner inside a Docker container (`slimerl/slime:latest`). 2. Installs slime with `pip install -e . --no-deps`. 3. Acquires the required GPUs via `tests/ci/gpu_lock_exec.py --count `. 4. Executes the test file: `python .py` or `python tests/.py`, depending on whether the test lives under `tests/` or a subdirectory such as `tests/plugin_contracts/`. @@ -20,8 +20,9 @@ Add a label to your PR to trigger the corresponding test suite: | Label | Job | Description | |---|---|---| | `run-ci-short` | `e2e-test-short` | Lightweight smoke tests with Qwen2.5-0.5B (4 GPUs). Fast feedback loop. | +| `run-ci-fsdp` | `e2e-test-fsdp` | FSDP backend tests (true on-policy, VL, megatron-fsdp alignment). | | `run-ci-megatron` | `e2e-test-megatron` | Core Megatron training tests covering dense, MoE, PPO, MTP, OPD, etc. | -| `run-ci-precision` | `e2e-test-precision` | Numerical precision validation (parallel check). | +| `run-ci-precision` | `e2e-test-precision` | Numerical precision validation (parallel check, megatron-fsdp alignment). | | `run-ci-ckpt` | `e2e-test-ckpt` | Checkpoint save/load correctness (sync and async-save). | | `run-ci-image` | `e2e-test-image` | Full test suite run on `slimerl/slime-test:latest` image (for image validation). | | `run-ci-changed` | `e2e-test-changed` | **Dynamically** detects new/modified test files in the PR and runs only those. | @@ -56,7 +57,7 @@ Since this includes every test, it consumes significant GPU time — use it spar This is the primary label for validating Megatron-backend changes. It covers: - Dense models: GLM4-9B, Qwen3-4B (PPO) -- MoE models: Qwen3-30B-A3B (with DeepEP + FP8), Qwen3.6-35B-A3B PD + Mooncake, Moonlight-16B-A3B +- MoE models: Qwen3-30B-A3B (with/without DeepEP + FP8), Moonlight-16B-A3B - Specialized: MiMo-7B MTP, Qwen2.5-0.5B debug rollout-then-train, OPD with sglang teacher All tests use 8 GPUs. If you are modifying Megatron training logic, loss computation, or checkpoint conversion, this is the label to use. @@ -75,7 +76,7 @@ NUM_GPUS = 4 # This constant is used by run-ci-changed def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") # Download datasets as needed ... def execute(): diff --git a/docs/en/developer_guide/trace.md b/docs/en/developer_guide/trace.md deleted file mode 100644 index 6fb0c6967b..0000000000 --- a/docs/en/developer_guide/trace.md +++ /dev/null @@ -1,119 +0,0 @@ -# Trace Viewer - -slime can attach lightweight execution traces to each rollout sample. These traces capture span-style events such as generation and reward-model calls, and they can be inspected later from a saved rollout debug dump. - -![trace timeline viewer](../../_static/image/trace.png) - -## Save rollout trace data - -To inspect traces later, save rollout debug data during a run: - -```bash -python train.py \ - ... \ - --save-debug-rollout-data /path/to/debug/rollout_{rollout_id}.pt -``` - -Each saved `.pt` file contains the rollout samples together with their `trace` payloads. You can also replay the same dump later with `--load-debug-rollout-data`. - -## Open the timeline viewer - -Use the trace viewer script on a saved rollout dump: - -```bash -python tools/trace_timeline_viewer.py /path/to/debug/rollout_0.pt -``` - -The script generates: - -- `rollout_0.trace_timeline_cache.json` -- `rollout_0.trace_timeline_viewer.html` - -By default it also starts a local static server so you can open the generated HTML immediately. If you only want the files, use `--no-serve`. - -## How to read the viewer - -- Each row corresponds to one sample. -- Bars represent spans, while point markers represent instant events. -- Span attributes recorded at the start or end of `trace_span(...)` are shown in the details panel. -- When SGLang returns PD disaggregation timings, the viewer adds synthetic `[P]` and `[D]` lanes to break out prefill/decode work. -- When PD is not enabled, those virtual lanes are omitted automatically and the base trace still renders normally. - -## Instrument custom code - -For custom rollout or reward code, reuse helpers from `slime.utils.trace_utils`: - -- `trace_span(target, name, attrs=...)`: record a duration span. -- `trace_event(target, name, attrs=...)`: record an instant event. -- `trace_function(name, ...)`: wrap a whole sync/async function in a span. -- `bind_trace(sample)`: ensure a sample already has a trace carrier before passing it across helpers or tasks. - -### `trace_span` vs `trace_function` - -Use `trace_span(...)` when you only want to trace part of a function body, or when you need to update end-of-span attrs from inside the block. - -Use `trace_function(...)` when the whole function should be represented as one span. Internally it resolves the trace target and then opens a `trace_span(...)` around the function call, so it works for both sync and async functions. - -The decorator is what slime uses for the main rollout pipeline. For example, `generate_and_rm(...)` is traced per sample and `generate_and_rm_group(...)` is traced per sample group: - -```python -from slime.utils.trace_utils import trace_function - - -@trace_function("generate_and_rm", target="sample") -async def generate_and_rm(args, sample, sampling_params, evaluation=False): - ... - - -@trace_function( - "generate_and_rm_group", - target="group", - attrs_getter=lambda args, group, sampling_params, evaluation=False: {"group_size": len(group)}, -) -async def generate_and_rm_group(args, group, sampling_params, evaluation=False): - ... -``` - -### Choosing a target - -`trace_function(...)` needs a trace target, usually a `Sample`, `TraceHandle`, or a list of them. - -- Prefer `target="sample"` or `target="group"` when the target is already one of the function arguments. -- Use `target_getter=...` when the trace target has to be derived from arguments. -- Avoid relying on automatic inference unless the function signature is simple. The implementation can infer a target from arguments or the current trace context, but explicit targets are more stable and avoid ambiguous traces. - -### Recording attrs on decorated functions - -If you want to attach attributes at span start, use `attrs_getter=...`: - -```python -@trace_function( - "custom_rollout_batch", - target="samples", - attrs_getter=lambda samples, **_: {"batch_size": len(samples)}, -) -async def custom_rollout_batch(samples, **kwargs): - ... -``` - -If you need to add attrs after part of the function has executed, use an inner `trace_span(...)` instead of only relying on the decorator. A common pattern is: - -- `trace_function(...)` for the outer function-level lifecycle span -- nested `trace_span(...)` for important sub-steps such as generation, RM, filtering, or post-processing - -If you want to record SGLang generation metadata in a consistent way, reuse `build_sglang_meta_trace_attrs`: - -```python -from slime.utils.trace_utils import build_sglang_meta_trace_attrs, trace_span - -with trace_span(sample, "sglang_generate") as span: - output = await post(url, payload) - span.update(build_sglang_meta_trace_attrs(output["meta_info"])) -``` - -## Tips - -- Save a small number of rollouts first; the viewer is easiest to read when each dump contains a manageable number of samples. -- The viewer is built from the saved `.pt` dump, so traces can be inspected offline on another machine. -- For GPU/kernel-level SGLang profiling traces, see [Profiling](./profiling.md). - diff --git a/docs/en/examples/deepseek-r1.md b/docs/en/examples/deepseek-r1.md index 22e3fd814d..ab10502eec 100644 --- a/docs/en/examples/deepseek-r1.md +++ b/docs/en/examples/deepseek-r1.md @@ -171,7 +171,7 @@ OPTIMIZER_ARGS=( These are the parameters required by sglang. Here, `--rollout-num-gpus-per-engine` basically corresponds to sglang's `tp_size`. Other sglang parameters are passed to slime by adding a `--sglang-` prefix. To fully leverage sglang's large EP inference capabilities, we have added configurations like ep64, dp\_attention dp8, and deepep mode auto. -The final `--rollout-server-concurrency` is a parameter specific to slime. It is used to prevent the sglang server's concurrent requests from becoming too large and crashing the HTTP server. The default is 512. However, since we now have one server for 8 nodes, we have adjusted it to 1024 to ensure that each dp rank can have a concurrency of 128. +The final `--sglang-server-concurrency` is a parameter specific to slime. It is used to prevent the sglang server's concurrent requests from becoming too large and crashing the HTTP server. The default is 512. However, since we now have one server for 8 nodes, we have adjusted it to 1024 to ensure that each dp rank can have a concurrency of 128. ```bash SGLANG_ARGS=( @@ -190,7 +190,7 @@ SGLANG_ARGS=( --sglang-deepep-mode auto # make every dp rank have 128 concurrency - --rollout-server-concurrency 1024 + --sglang-server-concurrency 1024 ) ``` diff --git a/docs/en/examples/glm4.5-355B-A32B.md b/docs/en/examples/glm4.5-355B-A32B.md new file mode 100644 index 0000000000..1be67a98c1 --- /dev/null +++ b/docs/en/examples/glm4.5-355B-A32B.md @@ -0,0 +1,190 @@ +# GLM-4.5 with 64xH100 + + +This is an example of doing GLM-4.5 RL training using 64xH100 GPUs. + +## Environment Setup + +For instructions on setting up the environment and downloading data, please refer to [Example: Qwen3-4B](qwen3-4B.md). + +First, you will need to download GLM-4.5 to a directory accessible by all machines (hereinafter referred to as `$BASE_DIR`): + +```bash +hf download zai-org/GLM-4.5 --local-dir $BASE_DIR/GLM-4.5-355B-A32B +``` + +Next, we need to convert the huggingface checkpoint into the torch_dist format with 2 nodes, each with 8 GPUs: + +```bash +cd slime/ +source scripts/models/glm4.5-355B-A32B.sh +PYTHONPATH=/root/Megatron-LM/ torchrun \ + --nproc-per-node 8 \ + --master-addr ${MASTER_ADDR} --master-port 12345 \ + --nnodes=2 --node-rank ${NODE_RANK} \ + tools/convert_hf_to_torch_dist.py \ + ${MODEL_ARGS[@]} \ + --hf-checkpoint $BASE_DIR/GLM-4.5-355B-A32B/ \ + --save $BASE_DIR/GLM-4.5-355B-A32B_torch_dist/ +``` + +Here, `MASTER_ADDR` is the IP of node0, and `NODE_RANK` indicates the node's index, both configured similarly to a multi-node `torchrun` setup. + +## Executing the Training + +On node0, run: + +```bash +cd slime/ +bash scripts/run-glm4.5-355B-A32B.sh +``` + +On other nodes, you need to join the Ray cluster with the following command: + +```bash +ray start --address=${MASTER_ADDR}:6379 --num-gpus 8 --node-ip-address ${WORKER_IP} --disable-usage-stats" +``` + +Alternatively, if you have a list of all node IPs, for example, an MPI hostfile (where each line is `ip slot=8`), you can add the following commands after the `ray start --head` command in `scripts/run-glm4.5-355B-A32B.sh.sh`. This allows you to execute the training entirely from node0: + +```bash +for WORKER_IP in $(awk '{print $1}' $BASE_DIR/mpi_hostfile); do + if [[ "$WORKER_IP" == "$MASTER_ADDR" ]]; then + continue + fi + echo "Starting Ray worker on ${WORKER_IP}" + ssh root@"${WORKER_IP}" \ + "pkill -9 sglang ; ray stop --force ; pkill -9 python ; ray start --address=${MASTER_ADDR}:6379 --num-gpus 8 --node-ip-address ${WORKER_IP} --disable-usage-stats" & +done +wait +``` + +### Parameter Introduction + +```bash +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" +source "${SCRIPT_DIR}/models/glm4.5-355B-A32B.sh" +``` + +This reads the model's config from [scripts/models/glm4.5-355B-A32B.sh](https://github.com/THUDM/slime/blob/main/scripts/models/glm4.5-355B-A32B.sh). These configs are all Megatron parameters. When training with Megatron, it cannot read the model config from the checkpoint, so we need to configure it ourselves. We provide some examples in [scripts/models](https://github.com/THUDM/slime/tree/main/scripts/models/). + +#### PERF\_ARGS + +A set of Megatron parallelism parameters. Only `--use-dynamic-batch-size` and `--max-tokens-per-gpu` are added by slime. + +For the Megatron part, we have configured TP8, PP4, CP2, and EP16. + +`max_tokens_per_gpu` refers to the maximum number of tokens each GPU can process. When `use_dynamic_batch_size` is enabled, it will pack data of varying lengths within a batch as close to `max_tokens_per_gpu`. If a single data item exceeds `max_tokens_per_gpu`, it will form its own batch without truncation. When context parallelism (CP) is enabled, it allows CP GPUs to share a total length of `CP * max_tokens_per_gpu` tokens. + +When `dynamic_batch_size` is enabled, the traditional `micro_batch_size` is ignored. + +⚠️ slime always trains the model using data packing and strictly guarantees per-sample or per-token loss. This means enabling dynamic batch size will not affect the loss calculation. It is recommended to enable it. + +```bash +PERF_ARGS=( + --tensor-model-parallel-size 8 + --sequence-parallel + --pipeline-model-parallel-size 4 + --context-parallel-size 2 + --expert-model-parallel-size 16 + --expert-tensor-parallel-size 1 + + --recompute-granularity full + --recompute-method uniform + --recompute-num-layers 1 + + --use-dynamic-batch-size + --max-tokens-per-gpu 16384 +) +``` + +#### GRPO\_ARGS + +Currently, these are some GRPO-related parameters in slime: + +```bash +GRPO_ARGS=( + --advantage-estimator grpo + --use-kl-loss + --kl-loss-coef 0.00 + --kl-loss-type low_var_kl + --entropy-coef 0.00 + --eps-clip 0.2 + --eps-clip-high 0.28 +) +``` + +If you wish to train without loading the reference model, you need to remove `--use-kl-loss` and set `--kl-coef 0.00` (the default value is 0). + +#### OPTIMIZER\_ARGS + +We have configured CPU Adam with the following parameters to save GPU memory. + +```bash +OPTIMIZER_ARGS=( + ... + + --optimizer-cpu-offload + --overlap-cpu-optimizer-d2h-h2d + --use-precision-aware-optimizer +) +``` + +#### SGLANG\_ARGS + +These are the parameters required by sglang. Here, `--rollout-num-gpus-per-engine` basically corresponds to sglang's `tp_size`. Other sglang parameters are passed to slime by adding a `--sglang-` prefix. + +```bash +SGLANG_ARGS=( + --rollout-num-gpus-per-engine 32 + --sglang-mem-fraction-static 0.7 + --sglang-enable-dp-attention + --sglang-dp-size 4 +) +``` + +#### MISC\_ARGS + +Some additional Megatron configurations. Note that Megatron's deepep is configured here. + +```bash +MISC_ARGS=( + ... + + # use deepep for megatron + --moe-enable-deepep + --moe-token-dispatcher-type flex +) +``` + +## FP8 Rollout + +The open-source FP8 checkpoint of GLM-4.5 is of per-channel quantization, which could not enable deepep in SGLang. We can use the tool scripts within slime to convert an FP8 checkpoint of 128x128 per-block quant: + +```bash +python tools/convert_hf_to_fp8.py \ + --model-dir $BASE_DIR/GLM-4.5-355B-A32B/ \ + --save-dir $BASE_DIR/GLM-4.5-355B-A32B-FP8/ \ + --strategy block --block-size 128 128 \ + --max-workers 4 +``` + +Then, simply change `--hf-checkpoint` to `$BASE_DIR/GLM-4.5-355B-A32B-FP8/` to enable FP8 rollout. + +And exemplar `SGLANG_ARGS` for FP8 is: + +```bash +SGLANG_ARGS=( + --rollout-num-gpus-per-engine 32 + --sglang-mem-fraction-static 0.7 + --sglang-enable-dp-attention + --sglang-dp-size 32 + --sglang-ep-size 32 + --sglang-moe-dense-tp-size 1 + --sglang-enable-dp-lm-head + --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 128) + + --sglang-moe-a2a-backend deepep + --sglang-deepep-mode auto +) +``` diff --git a/docs/en/examples/glm4.7-30B-A3B.md b/docs/en/examples/glm4.7-30B-A3B.md index e677561aac..1ad877e7e2 100644 --- a/docs/en/examples/glm4.7-30B-A3B.md +++ b/docs/en/examples/glm4.7-30B-A3B.md @@ -90,9 +90,9 @@ SGLANG_ARGS=( ... # MTP speculative decoding (EAGLE) --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 + --sglang-speculative-num-steps 2 --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 + --sglang-speculative-num-draft-tokens 3 ) ``` @@ -102,7 +102,7 @@ This enables SGLang to use the model's MTP layer as a draft model for EAGLE-styl #### MTP Training -slime also supports training MTP layers jointly with the main model for models that have MTP weight conversion implemented (e.g., MiMo, GLM-4.7). When enabled, the relevant arguments are: +slime also supports training MTP layers jointly with the main model for models that have MTP weight conversion implemented (e.g., MiMo, GLM-4.5). When enabled, the relevant arguments are: ```bash # Add MTP layer count to model config @@ -119,9 +119,9 @@ SPEC_ARGS=( - `--enable-mtp-training`: Enables gradient computation for MTP layers. Without this flag, the MTP layer is loaded but frozen. - `--mtp-loss-scaling-factor 0.2`: Weight of the MTP loss relative to the main policy loss. Default is 0.2. -> **Note**: MTP training requires the MTP checkpoint bridge to properly convert weights between HuggingFace and Megatron formats. The `GLM4MoELiteBridge` (in `slime_plugins/mbridge/glm4moe_lite.py`) extends the DeepSeek V3 bridge with dynamic MTP layer indexing to support GLM-4.7-Flash's 47-layer architecture. +> ⚠️ **Note**: MTP training for GLM-4.7-Flash is not yet supported because the deepseek_v3 checkpoint bridge does not include MTP weight conversion (`# TODO: mtp` in upstream mbridge). You can still use MTP for speculative decoding during inference — SGLang handles MTP layers internally. > -> For other models with MTP training support (e.g., MiMo), see `scripts/run-mimo-7B-rl-eagle.sh` as a reference. +> For models with full MTP training support (e.g., MiMo), see `scripts/run-mimo-7B-rl-eagle.sh` as a reference. ### Multi-Node Support diff --git a/docs/en/examples/glm4.7-355B-A32B.md b/docs/en/examples/glm4.7-355B-A32B.md deleted file mode 100644 index 8035f67824..0000000000 --- a/docs/en/examples/glm4.7-355B-A32B.md +++ /dev/null @@ -1,189 +0,0 @@ -# GLM-4.7 with 64xH100 - -## Environment Preparation - -The environment setup and dataset download are the same as for the Qwen3-4B model. You can refer to [Example: Qwen3-4B Model](qwen3-4B.md), replacing mentions of Qwen3-4B with GLM-4.7. - -### Prerequisites - -GLM-4.7 follows the standard slime Docker environment. For multi-node launches, make sure all nodes can access the same `$BASE_DIR` path and unset proxy variables before starting Ray workers: - -```bash -unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY -``` - -### Download Model - -```bash -hf download zai-org/GLM-4.7 --local-dir $BASE_DIR/GLM-4.7-355B-A32B -``` - -### Convert Checkpoint - -To convert the Hugging Face checkpoint to torch_dist format, use 2 nodes x 8 GPUs: - -```bash -cd /root/slime -pip install -e . --no-deps -source scripts/models/glm4.5-355B-A32B.sh -PYTHONPATH=/root/Megatron-LM/ torchrun \ - --nproc-per-node 8 \ - --master-addr ${MASTER_ADDR} --master-port 12345 \ - --nnodes=2 --node-rank ${NODE_RANK} \ - tools/convert_hf_to_torch_dist.py \ - ${MODEL_ARGS[@]} \ - --hf-checkpoint $BASE_DIR/GLM-4.7-355B-A32B/ \ - --save $BASE_DIR/GLM-4.7-355B-A32B_torch_dist/ -``` - -Here, `MASTER_ADDR` is the IP of node0, and `NODE_RANK` is the node index, configured just like a multi-node `torchrun` job. - -## Run Training - -Execute the training script from node0: - -```bash -cd /root/slime -export BASE_DIR=/shared/path # accessible by all nodes -bash scripts/run-glm4.7-355B-A32B.sh -``` - -### Parameter Introduction - -Here, we briefly introduce the key parts in the [run-glm4.7-355B-A32B.sh](https://github.com/THUDM/slime/blob/main/scripts/run-glm4.7-355B-A32B.sh) script. - -#### MoE Configuration - -GLM-4.7 is a Mixture-of-Experts (MoE) model with 160 routed experts (top-8 activation) and shared experts. It has 92 layers: 3 dense layers + 89 MoE layers. - -1. To support GLM-4.7 on 64xH100, we enable Megatron's CPU Adam to save GPU memory: - - ```bash - OPTIMIZER_ARGS=( - ... - --optimizer-cpu-offload - --overlap-cpu-optimizer-d2h-h2d - --use-precision-aware-optimizer - ) - ``` - -2. Enable MoE optimization in Megatron. For the provided 64xH100 example, we use TP=8, PP=4, CP=2, and EP=16: - - ```bash - PERF_ARGS=( - --tensor-model-parallel-size 8 - --sequence-parallel - --pipeline-model-parallel-size 4 - --context-parallel-size 2 - --expert-model-parallel-size 16 - --expert-tensor-parallel-size 1 - ... - --use-dynamic-batch-size - --max-tokens-per-gpu 16384 - ) - ``` - -3. Enable MoE optimization in SGLang with DP attention: - - ```bash - SGLANG_ARGS=( - --rollout-num-gpus-per-engine 32 - --sglang-mem-fraction-static 0.7 - --sglang-enable-dp-attention - --sglang-dp-size 4 - --sglang-ep-size 32 - --sglang-enable-dp-lm-head - --sglang-moe-dense-tp-size 1 - ... - ) - ``` - -#### MTP Speculative Decoding (Inference Acceleration) - -GLM-4.7 includes MTP (Multi-Token Prediction) layers that can be used for speculative decoding during inference to speed up rollout generation. To enable this, add the following to `SGLANG_ARGS`: - -```bash -SGLANG_ARGS=( - ... - # MTP speculative decoding (EAGLE) - --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 - --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 -) -``` - -This lets SGLang use the model's MTP layer as the draft model for EAGLE-style speculative decoding. - -> ⚠️ **Note**: Speculative decoding requires additional GPU memory. If you encounter OOM issues, try reducing `--sglang-mem-fraction-static` or disabling speculative decoding. - -#### MTP Training - -slime also supports training the MTP layers jointly with the main model for GLM-4.7. When enabled, the relevant arguments are: - -```bash -# Add MTP layer count to model config -MODEL_ARGS+=(--mtp-num-layers 1) - -# Enable MTP training -MTP_ARGS=( - --enable-mtp-training - --mtp-loss-scaling-factor 0.2 -) -``` - -- `--mtp-num-layers 1`: Tells Megatron to load the MTP layer from the checkpoint. -- `--enable-mtp-training`: Enables gradient computation for MTP layers. Without this flag, the MTP layer is loaded but frozen. -- `--mtp-loss-scaling-factor 0.2`: Weight of the MTP loss relative to the main policy loss. Default is 0.2. - -> **Note**: MTP training for GLM-4.7 relies on `GLM4MoEBridge` (in `slime_plugins/mbridge/glm4moe.py`) to map regular and MTP weights between HuggingFace and Megatron formats. - -#### Multi-Node Support - -This example already targets multi-node training. Before launching: - -- Place the model checkpoints and datasets on a path accessible by all nodes. -- Set `MASTER_ADDR` to an address reachable by all nodes. -- Unset proxy variables before starting Ray workers. -- Provide a `HOSTFILE` listing worker IPs (one per line) and export `HOSTFILE=/path/to/hostfile` before launching. -- Adjust parallelism coherently. The default example uses TP=8, PP=4, EP=16, CP=2, while rollout uses 32 GPUs per engine with SGLang DP attention. - -If your rollout GPU count does not divide the expert count cleanly, you can use `--sglang-ep-num-redundant-experts` to add redundant experts. - -## FP8 Rollout - -The open-source FP8 checkpoint of GLM-4.7 uses per-channel quantization, which cannot currently enable DeepEP in SGLang. You can convert it to a 128x128 per-block FP8 checkpoint with the tool provided in slime: - -```bash -cd /root/slime -python tools/convert_hf_to_fp8.py \ - --model-dir $BASE_DIR/GLM-4.7-355B-A32B/ \ - --save-dir $BASE_DIR/GLM-4.7-355B-A32B-FP8/ \ - --strategy block --block-size 128 128 \ - --max-workers 4 -``` - -Then switch `--hf-checkpoint` to `$BASE_DIR/GLM-4.7-355B-A32B-FP8/` to enable FP8 rollout. - -An example FP8 `SGLANG_ARGS` setup is: - -```bash -SGLANG_ARGS=( - --rollout-num-gpus-per-engine 32 - --sglang-mem-fraction-static 0.7 - --sglang-enable-dp-attention - --sglang-dp-size 32 - --sglang-ep-size 32 - --sglang-moe-dense-tp-size 1 - --sglang-enable-dp-lm-head - --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 128) - - --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 - --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 - - --sglang-moe-a2a-backend deepep - --sglang-deepep-mode auto -) -``` diff --git a/docs/en/examples/qwen3-4B.md b/docs/en/examples/qwen3-4B.md index 688b30b03c..56711878f6 100644 --- a/docs/en/examples/qwen3-4B.md +++ b/docs/en/examples/qwen3-4B.md @@ -280,10 +280,10 @@ In this case, 2 GPUs will be allocated for training, and 6 GPUs will be allocate ⚠️ If the concurrency on each sglang server is too high, it may exceed sglang's default CUDA graph concurrency limit (the default maximum is 160), which will affect inference speed. You can adjust this in the following two ways: -1. Use `--rollout-server-concurrency` to limit the maximum number of concurrent requests sent to a single sglang server. For example: +1. Use `--sglang-server-concurrency` to limit the maximum number of concurrent requests sent to a single sglang server. For example: ```bash - --rollout-server-concurrency 160 + --sglang-server-concurrency 160 ``` 2. Use `--sglang-cuda-graph-bs` (which corresponds to sglang's native `--cuda-graph-bs` argument) to increase the number of CUDA graphs initialized by sglang. For example: diff --git a/docs/en/get_started/customization.md b/docs/en/get_started/customization.md index 79d2e8264f..bcbd993ef2 100644 --- a/docs/en/get_started/customization.md +++ b/docs/en/get_started/customization.md @@ -28,6 +28,7 @@ Below is a summary of all available customization interfaces and their purposes. | [`--custom-megatron-init-path`](#17-megatron-hooks) | Custom initialization after Megatron setup. | | [`--custom-megatron-before-log-prob-hook-path`](#17-megatron-hooks) | Custom logic before log probability computation. | | [`--custom-megatron-before-train-step-hook-path`](#17-megatron-hooks) | Custom logic before each training step. | +| [`--slime-router-middleware-paths`](#18-slime-router-middleware---slime-router-middleware-paths) | Add custom middleware to slime router. | ## Detailed Interface Reference @@ -399,14 +400,27 @@ def custom_hook(args, rollout_id, step_id, model, optimizer, opt_param_scheduler --- -### 18. MoE Routing Replay +### 18. slime Router Middleware (`--slime-router-middleware-paths`) + +**Purpose**: Add custom middleware to the slime router for request processing. + +**Use Cases**: +- Request/response transformation +- Custom routing logic +- Caching and optimization + +--- + +### 19. MoE Routing Replay Stabilize MoE RL training by recording and replaying expert routing decisions to ensure consistency. | Argument | Description | | --- | --- | | `--use-routing-replay` | Forward-backward routing consistency in training. ([arXiv:2507.18071](https://arxiv.org/abs/2507.18071)) | -| `--use-rollout-routing-replay` | R3: Replay routing from rollout during training. Supported by slime's default `sglang_router` path. ([arXiv:2510.11370](https://arxiv.org/abs/2510.11370)) | +| `--use-rollout-routing-replay` | R3: Replay routing from rollout during training. **Requires `--use-slime-router`**. ([arXiv:2510.11370](https://arxiv.org/abs/2510.11370)) | + +For detailed explanation of R3 and SlimeRouter, see [Slime Router](../advanced/slime-router.md). ## Testing Custom Function Paths diff --git a/docs/en/get_started/quick_start.md b/docs/en/get_started/quick_start.md index 5d3856fdeb..3d86b17141 100644 --- a/docs/en/get_started/quick_start.md +++ b/docs/en/get_started/quick_start.md @@ -71,7 +71,7 @@ hf download --repo-type dataset zhuzilin/aime-2024 \ When using Megatron as the training backend, you need to first convert Hugging Face format model weights to Megatron `torch_dist` format. -First, load the configuration file of the target model. The `slime/scripts/models` directory contains configuration files for supported models. You need to `source` the corresponding model script to load the configuration parameters into the current environment. Here we use GLM4-9B model as an example, and it's similar for Qwen3-4B, Qwen3.5, Qwen3.6, GLM-4.7-Flash, Qwen3-30B-A3B, etc. +First, load the configuration file of the target model. The `slime/scripts/models` directory contains configuration files for supported models. You need to `source` the corresponding model script to load the configuration parameters into the current environment. Here we use GLM4-9B model as an example, and it's similar for Qwen3-4B, GLM-4.7-Flash, Qwen3-30B-A3B, etc. ```bash cd /root/slime @@ -581,6 +581,6 @@ export NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME=$(ip -o -4 addr show | awk '$4 ~ /^10\. slime has been deeply optimized for distributed training of large-scale Mixture of Experts (MoE) models. We provide some end-to-end training cases for reference: - [Example: 8xH100 Training GLM-4.7-Flash](../examples/glm4.7-30B-A3B.md) -- [Example: 64xH100 Training GLM-4.7](../examples/glm4.7-355B-A32B.md) +- [Example: 64xH100 Training GLM-4.5](../examples/glm4.5-355B-A32B.md) - [Example: 128xH100 Training DeepSeek-R1](../examples/deepseek-r1.md) - The scripts such as `scripts/run_qwen3_30b_a3b.py`, `scripts/run_glm45_355b_a32b.py` also support multi-node training, though there are little documentations about it currently. diff --git a/docs/en/get_started/usage.md b/docs/en/get_started/usage.md index cbd0122208..b85e537028 100644 --- a/docs/en/get_started/usage.md +++ b/docs/en/get_started/usage.md @@ -35,6 +35,7 @@ Additionally, slime supports Prefill and Decode disaggregation (PD Disaggregatio slime supports multiple training backends, which can be selected via the `--train-backend` parameter: - `megatron` (default): Uses Megatron-LM as the training backend, supporting efficient training of large-scale models. +- `fsdp` (experimental): Uses PyTorch FSDP as the training backend, allowing direct loading of HuggingFace format weights without conversion. ### Loading Megatron @@ -189,6 +190,7 @@ Additionally, we provide a `metadata_key`, which defaults to `"metadata"`. When Note: On-policy distillation (OPD) is now orthogonal to the advantage estimator. Use `--use-opd` and `--opd-kl-coef` to enable OPD on top of any estimator. - `--calculate-per-token-loss`: By default, slime calculates loss on a per-sample basis, i.e., `mean(sum(sample_i) / len(sample_i))`. Enable this flag to calculate loss on a per-token basis, i.e., `sum(sum(sample_i)) / sum(len(sample_i))`. - `--use-tis`: Enable this setting to use TIS (Truncated Importance Sampling) (https://fengyao.notion.site/off-policy-rl). +- `--true-on-policy-mode`: Enable True On-Policy mode, which strictly ensures that data is generated by the current policy during training. #### GRPO Algorithm @@ -256,24 +258,6 @@ PPO-related parameters: - `--value-clip`: Clip range for value loss. - `--kl-coef`: KL penalty coefficient for reward shaping. -### Advanced Megatron Configuration (--megatron-config-path) - -For PPO workflows, you can use `--megatron-config-path` with a YAML file to override Megatron arguments separately for actor and critic. Common use cases include setting a different critic `lr`, or giving actor and critic different `load` / `save` paths. - -```yaml -megatron: - - name: default - role: actor - overrides: - lr: 1e-6 - - name: default - role: critic - overrides: - lr: 1e-5 -``` - -> **Note:** This configuration currently only supports PPO, and in current PPO the actor and critic must use the same Megatron parallel topology. The recommended pattern is to keep parallelism-related settings in the shared CLI arguments and put only role-specific differences in YAML. See [Megatron Config: Role-Based Training Overrides](../advanced/megatron-config.md) for details. - ## Custom Rollout Function slime supports customizing data generation (rollout) to various degrees. @@ -382,36 +366,6 @@ After starting, all SGLang servers will register with the router via the `/add_w When you configure an external router using `--sglang-router-ip` and `--sglang-router-port`, slime will not start an internal router. Instead, it will register all its servers with this external router. You can then use this external router's address to implement more complex data generation workflows. Note that the router supports OpenAI-compatible APIs. -### Advanced Engine Configuration (--sglang-config) - -For advanced deployments, you can use `--sglang-config` with a YAML file to configure server groups, multi-model serving, and selective weight updates. - -**Multi-model deployment** allows serving multiple models simultaneously (e.g., an actor model that receives weight updates and a frozen reference/reward model): - -```yaml -sglang: - - name: actor - update_weights: true # receives weight updates from training (default) - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - - name: ref - model_path: /path/to/ref_model - update_weights: false # frozen, no weight updates - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 -``` - -Each model gets its own router. The per-model router info is accessible via `args.sglang_model_routers` (a dict mapping model name to `(ip, port)` tuples). Custom rollout functions can use `get_model_url(args, "ref")` from `slime.rollout.sglang_rollout` to route requests to a specific model. - -**Server group features:** -- `worker_type`: `regular`, `prefill`, `decode`, or `placeholder` (reserves GPU slots without creating engines) -- `overrides`: Dict of SGLang `ServerArgs` field overrides applied on top of `--sglang-*` CLI args -- `num_gpus_per_engine`: Per-group TP size override - ## How to Use Megatron slime supports different and lightly modified versions of Megatron by reusing common functions from the `megatron.training` directory, such as `parse_args`, `save_checkpoint`, and `load_checkpoint`. Therefore, when using it, you must ensure that Megatron is accessible in the `PYTHONPATH`, for example, by adding `export PYTHONPATH=/root/Megatron-LM` at runtime. diff --git a/docs/en/index.rst b/docs/en/index.rst index d5ca098e06..162ba19baf 100644 --- a/docs/en/index.rst +++ b/docs/en/index.rst @@ -34,21 +34,20 @@ slime is the RL-framework behind GLM-4.7, GLM-4.6 and GLM-4.5. Apart from models examples/glm4.7-30B-A3B.md examples/qwen3-30B-A3B.md - examples/glm4.7-355B-A32B.md + examples/glm4.5-355B-A32B.md examples/deepseek-r1.md .. toctree:: :maxdepth: 1 :caption: Advanced Features + advanced/slime-router.md advanced/on-policy-distillation.md advanced/speculative-decoding.md advanced/low-precision.md advanced/reproducibility.md advanced/fault-tolerance.md advanced/pd-disaggregation.md - advanced/sglang-config.md - advanced/megatron-config.md advanced/arch-support-beyond-megatron.md .. toctree:: @@ -67,7 +66,6 @@ slime is the RL-framework behind GLM-4.7, GLM-4.6 and GLM-4.5. Apart from models developer_guide/ci.md developer_guide/debug.md - developer_guide/trace.md developer_guide/profiling.md .. toctree:: diff --git a/docs/en/vllm/ROUTER_DESIGN.md b/docs/en/vllm/ROUTER_DESIGN.md deleted file mode 100644 index c18a29c997..0000000000 --- a/docs/en/vllm/ROUTER_DESIGN.md +++ /dev/null @@ -1,462 +0,0 @@ -# RFC: Replace SGLang Backend with vLLM — Router Integration - ---- - -## Summary - -Replace the SGLang inference backend behind **SlimeRouter** with **vLLM** while keeping the existing router and middleware stack completely unchanged. -This RFC covers **only the router layer** — what APIs the vLLM backend must expose, how the existing SlimeRouter is reused, and what translation is needed between the two formats. - -**Key design decision:** Reuse vLLM's built-in [OpenAI-compatible API server](https://docs.vllm.ai/en/stable/serving/openai_compatible_server/) (`vllm serve`) - - ---- - -## 1. Target Architecture - -``` - Rollout Workers SlimeRouter (NO CHANGE) vLLM Engines (NEW) - ────────────── ──────────────────────── ────────────────── - ┌──────────────────────┐ - POST /generate ──────────────────▶│ RadixTreeMiddleware │ - │ • prefix cache │ - │ • retry on abort │ - │ • token/logprob cache│ - └──────────┬───────────┘ - │ - ┌──────────▼───────────┐ - │ SlimeRouter.proxy() │ ┌─────────────────────┐ - │ • least-connections │────────▶│ vLLM Translation │ - │ load balancer │ │ Sidecar (per engine) │ - │ • health check loop │ │ │ - └──────────────────────┘ │ POST /generate │ - │ ↓ translate │ - │ POST /v1/completions │ - │ ↓ translate back │ - │ → SGLang-format JSON │ - └─────────┬───────────┘ - │ - ┌─────────▼───────────┐ - │ vLLM Server │ - │ (vllm serve) │ - │ • /v1/completions │ - │ • /health │ - │ • /sleep, /wake_up │ - │ • /pause, /resume │ - │ • /update_weights │ - └─────────────────────┘ -``` - -### What stays the same - -| Component | Change | Reason | -|---|---|---| -| `SlimeRouter` ([router.py](slime/router/router.py)) | **None** | Engine-agnostic HTTP proxy; only reads JSON responses | -| `RadixTreeMiddleware` ([radix_tree_middleware.py](slime/router/middleware_hub/radix_tree_middleware.py)) | **None** | Operates on request/response JSON; has no engine-specific code | -| `StringRadixTrie` ([radix_tree.py](slime/router/middleware_hub/radix_tree.py)) | **None** | Pure data structure, no engine coupling | -| Middleware loading (`--slime-router-middleware-paths`) | **None** | Dynamic import via `load_function()` | - -### What is new - -| Component | Description | -|---|---| -| `vllm_translation_sidecar.py` | Lightweight FastAPI process co-located with each vLLM engine. Receives SGLang-format `/generate` requests, translates to vLLM's `/v1/completions`, translates responses back. Also proxies lifecycle endpoints (`/abort_request`, `/health_generate`, etc.). | -| `vllm_engine.py` | Ray actor that manages the vLLM server process lifecycle (via `vllm serve`), the translation sidecar, weight updates, and registration with the router. | - ---- - -## 2. Reusing SlimeRouter — Zero Modification - -The SlimeRouter communicates with backends through **five interaction points**. All are already engine-agnostic: - -### 2.1 Worker Registration - -**Flow:** Engine starts → engine calls `POST /add_worker?url=http://{host}:{port}` → router adds to pool. - -``` -Router state after registration: - worker_request_counts["http://10.0.0.1:10090"] = 0 - worker_failure_counts["http://10.0.0.1:10090"] = 0 -``` - -**vLLM action:** The `VLLMEngine` Ray actor calls this endpoint after verifying the vLLM server + translation sidecar are healthy. The registered URL points to the **sidecar**, not the raw vLLM server. No router change needed. - -### 2.2 Request Proxying - -**Flow:** `POST /generate` → middleware pipeline → `SlimeRouter.proxy()` → `httpx` forwards to backend (sidecar). - -The router selects a backend via **least-connections** (`_use_url()`), forwards the raw request body as-is, and returns the response as-is. It never inspects or transforms the request/response payload. - -**vLLM action:** The sidecar receives the forwarded request, translates it to `/v1/completions`, calls the co-located vLLM server, translates the response back to SGLang format, and returns it. - -### 2.3 Health Check - -**Flow:** Background loop calls `GET {worker_url}/health` every N seconds. - -- 200 → healthy, reset failure count -- Non-200 or timeout → increment failure count -- Failures ≥ threshold (default 3) → quarantine worker permanently - -**vLLM action:** The sidecar's `/health` proxies to vLLM's built-in `/health` endpoint (returns 200 when ready). Compatible out of the box. - -### 2.4 Worker Listing - -**Flow:** `GET /list_workers` → returns `{"urls": [...]}` - -Used by the rollout to discover engines for direct abort calls. No engine involvement. - -### 2.5 Retrieve from Text (Radix Tree) - -**Flow:** `POST /retrieve_from_text` → router looks up the radix tree cache → returns tokens/logprobs. - -Fully router-internal. Never reaches the engine. - ---- - -## 3. API Contract — What the Translation Sidecar Must Expose - -The translation sidecar sits between SlimeRouter and the vLLM server. It receives SGLang-format requests and returns SGLang-format responses. - -### 3.1 `POST /generate` — Generation - -This is the primary endpoint. The sidecar translates between Slime's format and vLLM's `/v1/completions`. - -#### Incoming Request (from router) - -```json -{ - "input_ids": [128000, 2610, 553, 264, 11190, 18328, 13], - "input_tokens": [128000, 2610, 553, 264, 11190, 18328, 13], - "sampling_params": { - "temperature": 0.7, - "top_p": 0.9, - "top_k": -1, - "max_new_tokens": 1024, - "stop": ["<|endoftext|>"], - "stop_token_ids": [128001], - "skip_special_tokens": false, - "no_stop_trim": true, - "spaces_between_special_tokens": false - }, - "return_logprob": true, - "stream": false -} -``` - -#### Translated Request (to vLLM `/v1/completions`) - -```json -{ - "model": "", - "prompt": [128000, 2610, 553, 264, 11190, 18328, 13], - "max_tokens": 1024, - "temperature": 0.7, - "top_p": 0.9, - "top_k": -1, - "stop": ["<|endoftext|>"], - "stop_token_ids": [128001], - "skip_special_tokens": false, - "include_stop_str_in_output": true, - "spaces_between_special_tokens": false, - "logprobs": 1, - "stream": false, - "extra_body": { - "return_token_ids": true - } -} -``` - -**Key translations:** -- `input_ids` → `prompt` (vLLM accepts `list[int]` as pre-tokenized prompt) -- `max_new_tokens` → `max_tokens` -- `no_stop_trim: true` → `include_stop_str_in_output: true` -- `return_logprob: true` → `logprobs: 1` + `extra_body.return_token_ids: true` - -#### vLLM Response (from `/v1/completions`) - -```json -{ - "id": "cmpl-abc123", - "choices": [{ - "text": "I'll help you with that. The answer is 42.", - "logprobs": { - "token_logprobs": [-0.152, -0.089, -0.203], - "tokens": ["I", "'ll", " help"] - }, - "token_ids": [40, 3358, 1520], - "finish_reason": "stop" - }], - "usage": { - "prompt_tokens": 7, - "completion_tokens": 3, - "total_tokens": 10 - } -} -``` - -#### Translated Response (returned to router) - -```json -{ - "text": "I'll help you with that. The answer is 42.", - "output_ids": [40, 3358, 1520], - "meta_info": { - "output_token_logprobs": [ - [-0.152, 40], - [-0.089, 3358], - [-0.203, 1520] - ], - "finish_reason": { - "type": "stop" - }, - "weight_version": 3, - "prompt_tokens": 7, - "cached_tokens": 0 - } -} -``` - -##### Field-by-field contract - -| Field | Type | Required | Consumer | Description | -|---|---|---|---|---| -| `text` | `str` | **Yes** | Rollout, Middleware | Generated text (output only, not including prompt) | -| `output_ids` | `list[int]` | **Yes** | Middleware | Generated token IDs. Middleware checks existence as a gate for caching. | -| `meta_info.output_token_logprobs` | `list[[float, int]]` | **Yes** (if `return_logprob`) | Rollout, Middleware | Each element is `[logprob, token_id]`. Used for RL policy ratio calculation. | -| `meta_info.finish_reason` | `{"type": str}` | **Yes** | Rollout, Middleware | Must be `{"type": "stop"}`, `{"type": "length"}`, or `{"type": "abort"}`. **Not** a plain string. | -| `meta_info.weight_version` | `int` | **Yes** | Middleware, Rollout | Current model weight version. Tracked by the sidecar (incremented on each weight update). | -| `meta_info.prompt_tokens` | `int` | Nice-to-have | Rollout (stats) | From `usage.prompt_tokens`. | -| `meta_info.cached_tokens` | `int` | Nice-to-have | Rollout (stats) | vLLM doesn't expose this directly; default to `0`. | - -### 3.2 `GET /health` — Health Check - -``` -GET /health -→ Sidecar proxies to vLLM's GET /health -→ 200 OK (engine ready) -→ 503 or timeout (engine not ready / overloaded) -``` - -vLLM already provides this endpoint. **Passthrough — no translation needed.** - -### 3.3 `POST /abort_request` — Cancel Generation - -``` -POST /abort_request -Body: {"abort_all": true} -→ 200 OK -``` - -Called **directly** by the rollout to each engine (bypasses the router). The rollout discovers engine URLs via `GET /list_workers`, then sends abort to each. - -**vLLM approach:** vLLM uses **HTTP connection close** for abort (via its `@with_cancellation` decorator). When a client disconnects, the in-flight request is automatically cancelled. - -**Implementation options:** -1. **Track active connections.** The sidecar maintains a set of active `httpx` connections to the vLLM server. On `POST /abort_request`, close all of them — triggering vLLM's cancellation. -2. **Use vLLM's `/pause` endpoint.** Call `POST /pause` to block new requests, then `POST /resume` after the RL training step completes. This is semantically closer to how Slime uses abort (clearing the decks between training generations). - -> **Note:** vLLM has `POST /abort_requests` only in disaggregated mode. For standard mode, HTTP disconnect is the canonical abort mechanism. - -### 3.4 `GET /health_generate` — Startup Readiness Probe - -``` -GET /health_generate -→ 200 OK (model loaded, engine ready for generation) -``` - -Called by `VLLMEngine.init()` during startup to block until the engine is fully ready. The sidecar implements this by calling vLLM's `GET /health` and optionally performing a dummy `/v1/completions` call with `max_tokens=1` to verify end-to-end readiness. - -### 3.5 Sampling Params Translation - -The request uses SGLang-format parameter names. The sidecar translates to vLLM's `/v1/completions` format: - -| SGLang field (in request) | vLLM `/v1/completions` field | Notes | -|---|---|---| -| `input_ids` | `prompt` | Direct — vLLM accepts `list[int]` as pre-tokenized prompt | -| `temperature` | `temperature` | Direct | -| `top_p` | `top_p` | Direct | -| `top_k` | `top_k` | Both use `-1` for disabled | -| `max_new_tokens` | `max_tokens` | **Name change** | -| `stop` | `stop` | Direct (list of strings) | -| `stop_token_ids` | `stop_token_ids` | Direct | -| `skip_special_tokens` | `skip_special_tokens` | Direct | -| `no_stop_trim` | `include_stop_str_in_output` | **Same semantics, different name** | -| `spaces_between_special_tokens` | `spaces_between_special_tokens` | Direct | -| `return_logprob` | `logprobs` (set to `1`) | Also add `extra_body.return_token_ids = true` | -| `sampling_seed` | `seed` | Optional | -| — | `model` | Must be set to the model name served by vLLM | - -### 3.6 Response Translation Pseudocode - -```python -def translate_vllm_response(vllm_resp: dict, weight_version: int) -> dict: - """Translate vLLM /v1/completions response to SGLang format.""" - choice = vllm_resp["choices"][0] - usage = vllm_resp.get("usage", {}) - - # Build output_token_logprobs: zip logprobs with token IDs - output_token_logprobs = None - if choice.get("logprobs") and choice.get("token_ids"): - output_token_logprobs = [ - [logprob, token_id] - for logprob, token_id in zip( - choice["logprobs"]["token_logprobs"], - choice["token_ids"] - ) - ] - - # Translate finish_reason: plain string → {"type": str} - raw_reason = choice.get("finish_reason") - finish_reason = {"type": raw_reason if raw_reason else "abort"} - - return { - "text": choice["text"], - "output_ids": choice.get("token_ids", []), - "meta_info": { - "output_token_logprobs": output_token_logprobs, - "finish_reason": finish_reason, - "weight_version": weight_version, - "prompt_tokens": usage.get("prompt_tokens", 0), - "cached_tokens": 0, - } - } -``` - -### 3.7 `finish_reason` Translation Table - -| vLLM returns | Translate to | Notes | -|---|---|---| -| `"stop"` | `{"type": "stop"}` | Normal completion | -| `"length"` | `{"type": "length"}` | Hit `max_tokens` | -| `None` (aborted/incomplete) | `{"type": "abort"}` | Triggers middleware retry logic (sleep 30s, up to 5 retries) | - ---- - -## 4. Server Launch Configuration - -The `VLLMEngine` Ray actor should launch vLLM as follows: - -```bash -# Environment -export VLLM_SERVER_DEV_MODE=1 - -# Launch vLLM server -vllm serve \ - --host 0.0.0.0 \ - --port \ - --tensor-parallel-size \ - --enable-sleep-mode \ - --enforce-eager \ - --gpu-memory-utilization 0.9 \ - --disable-log-requests -``` - -The translation sidecar runs on a separate port (``) and is the URL registered with the router via `POST /add_worker?url=http://{host}:{sidecar_port}`. - -``` - Router - │ - ▼ - ┌─────────────────────────┐ - │ Translation Sidecar │ ◄── registered with router - │ port: sidecar_port │ - │ │ - │ /generate ──translate──▶│──┐ - │ /health ──passthrough──▶│ │ - │ /abort_request │ │ - │ /health_generate │ │ - └─────────────────────────┘ │ - │ - ┌─────────────────────────┐ │ - │ vLLM Server │◄─┘ - │ port: engine_port │ - │ │ - │ /v1/completions │ - │ /health │ - │ /sleep, /wake_up │ - │ /pause, /resume │ - │ /update_weights │ - │ /init_weight_transfer │ - └─────────────────────────┘ -``` - ---- - -## 5. Abort Strategy — Detailed Design - -vLLM's abort mechanism differs fundamentally from SGLang's: - -| Aspect | SGLang | vLLM | -|---|---|---| -| Abort granularity | Per-request via `POST /abort_request` with `rid` | Per-connection via HTTP disconnect | -| Bulk abort | `{"abort_all": true}` | No built-in equivalent | -| Mechanism | Engine tracks `request_id`, explicit `abort()` | `@with_cancellation` decorator; request cancelled when client disconnects | -| Between-generation abort | Abort + restart | `POST /pause` → training → `POST /resume` | - -### Recommended implementation - -For the Slime RL use case, the rollout calls `abort_all` between generation rounds (to clear the engine before the next batch). The best vLLM equivalent is: - -```python -# In the translation sidecar -@app.post("/abort_request") -async def abort_request(request: Request): - body = await request.json() - if body.get("abort_all"): - # Option 1: Close all tracked httpx connections → triggers vLLM cancellation - for conn in active_connections: - await conn.aclose() - active_connections.clear() - - # Option 2: Use pause/resume (cleaner) - await httpx.post(f"{vllm_url}/pause") - await httpx.post(f"{vllm_url}/resume") - - return {"status": "ok"} -``` - ---- - -## 6. Endpoints Summary — Gap Analysis - -### Engine-side endpoints (vLLM built-in vs. needs implementation) - -| Endpoint | SGLang | vLLM Built-in | Action | -|---|---|---|---| -| `POST /v1/completions` | — | ✅ | **Reuse** — target for translation | -| `GET /health` | ✅ | ✅ | **Reuse** as-is (passthrough) | -| `POST /pause` | — | ✅ (dev mode) | **Reuse** for abort/weight-update | -| `POST /resume` | — | ✅ (dev mode) | **Reuse** for abort/weight-update | -| `POST /sleep` | — | ✅ (dev mode) | **Reuse** for weight updates | -| `POST /wake_up` | — | ✅ (dev mode) | **Reuse** for weight updates | -| `POST /collective_rpc` | — | ✅ (dev mode) | **Reuse** for weight reload | -| `GET /is_sleeping` | — | ✅ (dev mode) | **Reuse** for state checks | -| `POST /init_weight_transfer_engine` | — | ✅ (dev mode) | **Reuse** for NCCL setup | -| `POST /update_weights` | — | ✅ (dev mode) | **Reuse** for NCCL weight apply | -| `GET /get_world_size` | — | ✅ (dev mode) | **Reuse** for TP world size | - -### Translation sidecar endpoints (to implement) - -| Endpoint | Description | Complexity | -|---|---|---| -| `POST /generate` | Translate SGLang → `/v1/completions` → SGLang | **Medium** — main logic | -| `GET /health` | Proxy to vLLM `/health` | **Trivial** | -| `GET /health_generate` | Health + optional dummy completion | **Low** | -| `POST /abort_request` | Close connections or pause/resume | **Low** | -| `GET /flush_cache` | `POST /sleep?level=1` + `POST /wake_up?tags=kv_cache` | **Low** | -| `GET /get_weight_version` | Return sidecar-tracked version counter | **Trivial** | - -### Router endpoints (no change needed) - -| Endpoint | Action | -|---|---| -| `POST /add_worker` | No change | -| `GET /list_workers` | No change | -| `POST /retrieve_from_text` | No change | -| Catch-all proxy | No change | - ---- - - - - diff --git a/docs/zh/advanced/megatron-config.md b/docs/zh/advanced/megatron-config.md deleted file mode 100644 index 1616c9f830..0000000000 --- a/docs/zh/advanced/megatron-config.md +++ /dev/null @@ -1,131 +0,0 @@ -# Megatron Config:按角色覆盖训练参数 - -`--megatron-config-path` 是一个基于 YAML 的配置系统,用于在公共 Megatron CLI 参数之上,为不同训练角色追加覆盖。目前它主要用于 PPO 场景中的 actor / critic 配置。 - -与 `--sglang-config` 不同,`--megatron-config-path` 不负责部署、路由或 GPU 资源编排;它只负责决定“这个角色最终使用哪些训练参数”。 - ---- - -## 设计概览 - -默认情况下(不使用 `--megatron-config-path`),actor 和 critic 都直接继承命令行中的 Megatron / slime 参数。 - -使用 `--megatron-config-path` 后,配置会分成两层: - -- **公共 CLI 参数**:定义共享的 Megatron 拓扑、资源申请和默认训练参数。 -- **角色 YAML 覆盖**:只覆盖 actor / critic 之间真正不同的配置项。 - -**核心设计原则:** - -- **CLI 是公共基线。** slime 会先解析普通命令行参数,再应用 YAML 中的角色覆盖。 -- **缺失角色自动继承。** 如果某个 role 没有出现在 YAML 中,该角色会直接继承 CLI 参数。 -- **资源申请仍由 CLI 控制。** YAML 中的 `num_nodes` 和 `num_gpus_per_node` 会被忽略;资源分配仍由 `--actor-num-*` / `--critic-num-*` 决定。 - ---- - -## 配置格式 - -配置文件是一个 YAML 文档,顶层 `megatron` 键包含一个角色定义列表: - -```yaml -megatron: - - name: default - role: actor - overrides: - lr: 1e-6 - save: /path/to/actor_ckpt - - name: default - role: critic - overrides: - lr: 1e-5 - save: /path/to/critic_ckpt -``` - -### 字段说明 - -| 字段 | 类型 | 默认值 | 说明 | -|------|------|--------|------| -| `name` | `str` | 可选 | 配置项标签。当前运行时不会依赖它,建议保留为 `default`,方便未来扩展。 | -| `role` | `str` | **必填** | 角色名。目前支持 `actor` 和 `critic`。 | -| `overrides` | `dict` | `{}` | 该角色的参数覆盖。会在公共 CLI 参数之上应用。 | -| `args` | `dict` | `{}` | `overrides` 的向后兼容别名。新配置建议统一使用 `overrides`。 | - -> **注意:** `overrides` 中的 key 使用 argparse 属性名,而不是命令行 flag 名。例如写 `tensor_model_parallel_size`,而不是 `tensor-model-parallel-size`。 - ---- - -## 使用方式 - -一个典型的 PPO 用法如下: - -```yaml -# megatron_ppo.yaml -megatron: - - name: default - role: actor - overrides: - lr: 1e-6 - - name: default - role: critic - overrides: - lr: 1e-5 -``` - -```bash -python train.py \ - --advantage-estimator ppo \ - --use-critic \ - --megatron-config-path megatron_ppo.yaml \ - --tensor-model-parallel-size 2 \ - --sequence-parallel \ - --pipeline-model-parallel-size 1 \ - --context-parallel-size 1 \ - --expert-model-parallel-size 1 \ - --expert-tensor-parallel-size 1 \ - --actor-num-nodes 1 \ - --actor-num-gpus-per-node 8 \ - --critic-num-nodes 1 \ - --critic-num-gpus-per-node 8 \ - ... -``` - -在这个模式下: - -- CLI 负责共享的并行策略和资源配置; -- YAML 负责 actor / critic 的差异项,比如 `lr`、`load`、`save`、optimizer 或 scheduler 相关参数。 - -### 只覆盖一个角色 - -你也可以只为一个角色写覆盖,另一个角色自动继承公共 CLI 参数。例如只调整 critic 学习率: - -```yaml -megatron: - - name: default - role: critic - overrides: - lr: 1e-5 -``` - -这时 actor 会继续直接使用命令行中的公共参数。 - ---- - -## 当前限制 - -- **目前只支持 PPO。** `--megatron-config-path` 当前主要用于 PPO 工作流中的 actor / critic 角色配置。对于 GRPO、REINFORCE++ 等不依赖 critic 的流程,目前不建议使用这套角色配置。 -- **当前 PPO 下,actor 和 critic 的 Megatron 并行配置必须一致。** 特别是 `tensor_model_parallel_size`、`pipeline_model_parallel_size`、`context_parallel_size`、`expert_model_parallel_size`、`expert_tensor_parallel_size`、`sequence_parallel` 等拓扑相关参数,不应在 actor 和 critic 之间配置成不同的值。 -- **推荐把并行相关参数继续放在 CLI 中。** 当前最稳妥的用法是:并行与资源参数写在公共 CLI 中,只在 YAML 中覆盖角色差异项,例如 `lr`、`load`、`save`、warmup、optimizer / scheduler 参数等。 - -如果你在 actor 和 critic 之间写入不同的并行拓扑,当前行为不受支持,可能导致初始化或训练过程出错。 - ---- - -## FAQ - -### Q: 可以只写 actor 或只写 critic 吗? - -可以。缺失角色会自动继承公共 CLI 参数,不需要把所有参数都重复写一遍。 - -### Q: 可以把 `--actor-num-nodes` 或 `--critic-num-gpus-per-node` 写进 YAML 吗? - -不可以。当前资源分配和 placement group 仍由 CLI 参数控制,YAML 中对应字段会被忽略。 \ No newline at end of file diff --git a/docs/zh/advanced/sglang-config.md b/docs/zh/advanced/sglang-config.md deleted file mode 100644 index e68c52c843..0000000000 --- a/docs/zh/advanced/sglang-config.md +++ /dev/null @@ -1,453 +0,0 @@ -# SGLang Config:高级引擎部署 - -`--sglang-config` 是一个基于 YAML 的配置系统,用于在 slime 中精细控制 SGLang 引擎的部署。它支持**多模型服务**、**Prefill-Decode (PD) 分离**、**异构服务器组**,甚至可以作为复杂推理拓扑的**独立 SGLang 启动器**。 - ---- - -## 架构概览 - -在默认配置(不使用 `--sglang-config`)下,slime 部署单个模型,放在单个 router 后面,使用统一的服务器组: - -![架构概览](../../_static/image/arch.png) - -使用 `--sglang-config` 后,SGLang 部署扩展为多模型、多 router 拓扑: - -![sglang-config 架构](../../_static/image/sglang_config.png) - -**核心设计原则:** - -- **每个模型拥有独立的 router。** 模型在路由层隔离,支持独立的负载均衡和容错。 -- **同一模型内的服务器组可以异构。** 不同组可以有不同的 TP 大小、worker 类型(prefill/decode/regular)和 SGLang server 参数覆盖。 -- **权重同步按模型维度。** 只有 `update_weights: true` 的模型会接收来自训练的权重更新。冻结的模型(reference、reward 等)保持原样。 - ---- - -## 配置格式 - -配置文件是一个 YAML 文档,顶层 `sglang` 键包含一个模型定义列表: - -```yaml -sglang: - - name: # 必填。模型的唯一标识符。 - model_path: # 可选。HF checkpoint 路径。默认使用 --hf-checkpoint。 - update_weights: # 可选。是否从训练同步权重。自动推断。 - num_gpus_per_engine: # 可选。该模型所有组的默认 TP 大小。 - server_groups: # 必填。服务器组配置列表。 - - worker_type: # 必填。可选:regular、prefill、decode、placeholder。 - num_gpus: # 必填。分配给该组的 GPU 总数。 - num_gpus_per_engine: # 可选。该组的 TP 大小覆盖。 - overrides: # 可选。SGLang ServerArgs 字段覆盖。 -``` - -### 字段参考 - -#### 模型级字段 - -| 字段 | 类型 | 默认值 | 说明 | -|------|------|--------|------| -| `name` | `str` | **必填** | 模型唯一名称(如 `"actor"`、`"ref"`、`"reward"`)。用作 `args.sglang_model_routers` 的 key。 | -| `model_path` | `str` | `args.hf_checkpoint` | HuggingFace checkpoint 路径。同一模型内的所有服务器组必须使用相同的 model path。 | -| `update_weights` | `bool` | 自动推断 | 该模型是否接收训练权重更新。未设置时自动推断:如果 `model_path` 与 `--hf-checkpoint` 匹配则为 `true`,否则为 `false`。 | -| `num_gpus_per_engine` | `int` | `args.rollout_num_gpus_per_engine` | 该模型服务器组的默认 TP 大小。各组可单独覆盖。 | -| `server_groups` | `list` | **必填** | `ServerGroupConfig` 条目列表,定义引擎拓扑。(`engine_groups` 作为向后兼容别名仍可使用。) | - -#### 服务器组级字段 - -| 字段 | 类型 | 默认值 | 说明 | -|------|------|--------|------| -| `worker_type` | `str` | **必填** | 引擎类型:`regular`(标准)、`prefill`(PD prefill worker)、`decode`(PD decode worker)或 `placeholder`(占位,不启动引擎)。 | -| `num_gpus` | `int` | **必填** | 该组的 GPU 总数。必须 > 0。 | -| `num_gpus_per_engine` | `int` | 模型的 `num_gpus_per_engine` | TP 大小覆盖。每个引擎实例的 GPU 数量。 | -| `overrides` | `dict` | `{}` | SGLang `ServerArgs` 字段覆盖。优先级最高,覆盖 `--sglang-*` CLI 参数和模型级默认值。 | - -### Worker 类型 - -| 类型 | 说明 | 使用场景 | -|------|------|----------| -| `regular` | 标准 SGLang 引擎 | 默认模式,同时处理 prefill 和 decode | -| `prefill` | PD 分离的 prefill worker | 专门处理 prompt;与 `decode` worker 配对 | -| `decode` | PD 分离的 decode worker | 专门生成 token;与 `prefill` worker 配对 | -| `placeholder` | 占位,不创建引擎 | 为训练共置预留 GPU 或留作未来使用 | - ---- - -## 使用模式 - -### 1. 基本单模型部署 - -最简单的配置,复现默认行为: - -```yaml -# sglang_basic.yaml -sglang: - - name: default - server_groups: - - worker_type: regular - num_gpus: 8 -``` - -```bash -python train.py \ - --sglang-config sglang_basic.yaml \ - --rollout-num-gpus 8 \ - --rollout-num-gpus-per-engine 2 \ - ... -``` - -这将创建 4 个引擎(8 GPU ÷ 2 GPU/引擎),位于单个 router 之后。 - -### 2. PD 分离 - -将 prefill 和 decode 阶段分离到专用服务器组,以提升多轮和 agentic 场景的吞吐量: - -```yaml -# sglang_pd.yaml -sglang: - - name: actor - server_groups: - - worker_type: prefill - num_gpus: 4 - num_gpus_per_engine: 2 # 2 个 prefill 引擎,TP=2 - - worker_type: decode - num_gpus: 12 - num_gpus_per_engine: 4 # 3 个 decode 引擎,TP=4 -``` - -```bash -python train.py \ - --sglang-config sglang_pd.yaml \ - --rollout-num-gpus 16 \ - ... -``` - -**为什么需要 PD 分离?** 在多轮场景中,prefill 和 decode 具有不同的计算特性。Prefill 是计算密集型(处理整个 prompt),而 decode 是内存带宽密集型(逐 token 生成)。分离它们可以: -- 为 prefill 使用更小的 TP(提高每 GPU 吞吐量) -- 为 decode 使用更大的 TP(降低延迟) -- 独立扩展 prefill 和 decode 的容量 - -> **注意:** PD 分离使用 SGLang Model Gateway (sgl-router),并设置 `pd_disaggregation=True`。 - -### 3. 多模型服务 - -同时部署多个模型,每个模型拥有独立的 router: - -```yaml -# sglang_multi_model.yaml -sglang: - - name: actor - update_weights: true # 接收训练权重更新 - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - - - name: ref - model_path: /path/to/ref_model # 不同的模型 checkpoint - update_weights: false # 冻结,不更新权重 - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 - - - name: reward - model_path: /path/to/reward_model - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 -``` - -```bash -python train.py \ - --sglang-config sglang_multi_model.yaml \ - --rollout-num-gpus 16 \ - --hf-checkpoint /path/to/actor_model \ - --rollout-function-path my_rollout.generate_rollout \ - ... -``` - -**在自定义 rollout 函数中访问模型:** - -```python -from slime.rollout.sglang_rollout import get_model_url -from slime.utils.http_utils import post - -async def my_generate(args, sample, sampling_params): - # 路由到 actor 模型(默认) - actor_url = get_model_url(args, "actor", "/generate") - output = await post(actor_url, {"text": sample.prompt, "sampling_params": sampling_params}) - - # 路由到 reference 模型 - ref_url = get_model_url(args, "ref", "/generate") - ref_output = await post(ref_url, {"text": sample.prompt, "sampling_params": sampling_params}) - - # 路由到 reward 模型(如 OpenAI 兼容 API) - reward_url = get_model_url(args, "reward", "/v1/chat/completions") - reward_output = await post(reward_url, {...}) - - ... -``` - -`get_model_url()` 从 `args.sglang_model_routers`(一个将模型名称映射到 `(ip, port)` 元组的字典)中读取,该字典在引擎启动后自动填充。 - -### 4. 多模型 + PD 分离 - -将多模型与 PD 分离结合,实现最大灵活性: - -```yaml -# sglang_full.yaml -sglang: - - name: actor - update_weights: true - server_groups: - - worker_type: prefill - num_gpus: 4 - num_gpus_per_engine: 2 - - worker_type: decode - num_gpus: 8 - num_gpus_per_engine: 4 - - - name: ref - model_path: /path/to/ref_model - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 -``` - -### 5. 占位组用于 GPU 预留 - -使用 `placeholder` 组来预留 GPU 而不创建引擎。这在共置训练场景中很有用,部分 GPU 需要为训练预留: - -```yaml -sglang: - - name: actor - server_groups: - - worker_type: regular - num_gpus: 6 - num_gpus_per_engine: 2 - - worker_type: placeholder - num_gpus: 2 # 预留 2 个 GPU(不创建引擎) -``` - -### 6. 按组覆盖 ServerArgs - -使用 `overrides` 将 SGLang `ServerArgs` 字段应用到特定服务器组,而不影响其他组: - -```yaml -sglang: - - name: actor - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - overrides: - mem_fraction_static: 0.85 - context_length: 32768 - chunked_prefill_size: 4096 - enable_torch_compile: true -``` - -覆盖具有**最高优先级**,会覆盖基础的 `--sglang-*` CLI 参数和模型级默认值。这对以下场景特别有用: -- 不同组使用不同的内存配置 -- prefill 和 decode 使用不同的 context length -- 在特定组上启用实验性功能 - -### 7. 独立 SGLang 启动器 - -虽然 `--sglang-config` 是为 slime 的训练流水线设计的,但它也可以作为纯推理场景的强大启动器,通过 `--rollout-external` 模式或配置 slime 仅关注推理服务。 - -**使用预启动的外部引擎:** - -对于复杂的生产部署,你可能希望独立预启动 SGLang 引擎,然后将其连接到 slime: - -```bash -# 步骤 1:外部启动 SGLang 引擎 -python -m sglang.launch_server --model-path /path/to/model --port 10090 ... -python -m sglang.launch_server --model-path /path/to/model --port 10091 ... - -# 步骤 2:将 slime 连接到外部引擎 -python train.py \ - --rollout-external \ - --rollout-external-engine-addrs host1:10090 host2:10091 \ - ... -``` - -> **注意:** `--sglang-config` 和 `--rollout-external` 互斥。当你希望 slime 管理完整的引擎生命周期时,使用 `--sglang-config`;当引擎已预部署时,使用 `--rollout-external`。 - ---- - -## Router 配置 - -每个模型都有独立的 router(默认使用 SGLang Model Gateway)。 - -### Router 策略 - -你可以配置路由策略: - -```bash ---router-policy round_robin # 简单轮询 ---router-policy consistent_hashing # 多轮会话亲和 ---router-policy cache_aware # 缓存感知路由(默认) -``` - -### 多轮 Agent 的会话亲和路由 - -对于多轮对话和 agentic 场景,会话亲和确保同一对话的所有请求路由到同一个 backend worker。这可以显著提升 prefix cache 命中率,因为 worker 已经缓存了对话历史。 - -slime 自动为每个 sample 分配一个唯一的 `session_id`(存储在 `sample.session_id` 中)。当 router 策略为 `consistent_hashing` 时,该 ID 通过 `X-SMG-Routing-Key` header 传递,SGLang Model Gateway 使用它将同一会话的所有轮次确定性地路由到同一个 worker。 - -```bash ---router-policy consistent_hashing -``` - -**工作原理:** - -1. 每个 sample 通过 UUID 分配唯一的 `session_id` -2. 每次请求时,slime 在 HTTP header 中传递 `X-SMG-Routing-Key: ` -3. SGLang Model Gateway 的 consistent hashing 策略将该 key 映射到特定的 worker -4. 后续轮次复用相同的 `session_id`,确保命中同一个 worker - ---- - -## 解析规则 - -加载配置时,slime 按以下优先级顺序解析: - -1. **每引擎 GPU 数回退:** 组 `num_gpus_per_engine` → 模型 `num_gpus_per_engine` → `args.rollout_num_gpus_per_engine` -2. **模型路径回退:** 组 `overrides.model_path` → 模型 `model_path` → `args.hf_checkpoint` -3. **权重更新推断:** 如果 `update_weights` 未设置: - - 如果有效的 model path 与 `--hf-checkpoint` 匹配,则为 `true` - - 否则为 `false`(会有警告) -4. **GPU 总数校验:** 所有模型所有组的 `num_gpus` 总和必须等于 `--rollout-num-gpus`。 - ---- - -## 互斥 - -`--sglang-config` 与以下选项互斥: - -| 选项 | 冲突原因 | -|------|----------| -| `--prefill-num-servers` | PD 分离通过 YAML 中的 `server_groups` 配置 | -| `--rollout-external` | 外部引擎有自己的拓扑;config 在内部管理生命周期 | - ---- - -## 完整示例:多模型 Agentic 训练 - -下面是一个完整的示例,展示在 32 个 GPU 上使用 PD 分离进行多模型 agentic RL 训练: - -**配置文件 (`sglang_agent.yaml`):** - -```yaml -sglang: - - name: actor - update_weights: true - server_groups: - - worker_type: prefill - num_gpus: 4 - num_gpus_per_engine: 2 - overrides: - chunked_prefill_size: 8192 - - worker_type: decode - num_gpus: 12 - num_gpus_per_engine: 4 - overrides: - mem_fraction_static: 0.88 - - - name: ref - model_path: /data/models/Qwen3-32B - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - - - name: reward - model_path: /data/models/reward-model - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 -``` - -**启动命令:** - -```bash -python train.py \ - --sglang-config sglang_agent.yaml \ - --hf-checkpoint /data/models/Qwen3-8B \ - --rollout-num-gpus 32 \ - --rollout-function-path my_agent.rollout.generate_rollout \ - --custom-rm-path my_agent.reward.reward_func \ - --advantage-estimator grpo \ - --n-samples-per-prompt 8 \ - ... -``` - -**自定义 rollout 函数 (`my_agent/rollout.py`):** - -```python -from slime.rollout.sglang_rollout import get_model_url -from slime.utils.http_utils import post - -async def generate_with_models(args, sample, sampling_params): - """使用 actor 生成,用 reward 模型打分,与 reference 比较。""" - - # 从 actor 生成 - actor_url = get_model_url(args, "actor", "/generate") - actor_output = await post(actor_url, { - "text": sample.prompt, - "sampling_params": sampling_params, - "return_logprob": True, - }) - - # 获取 reference logprobs 用于 KL penalty - ref_url = get_model_url(args, "ref", "/generate") - ref_output = await post(ref_url, { - "text": sample.prompt + actor_output["text"], - "sampling_params": {"max_new_tokens": 0, "temperature": 0}, - "return_logprob": True, - }) - - # 用 reward 模型打分 - reward_url = get_model_url(args, "reward", "/v1/chat/completions") - reward_output = await post(reward_url, { - "model": "reward", - "messages": [{"role": "user", "content": sample.prompt + actor_output["text"]}], - }) - - # ... 处理输出并返回 Sample -``` - ---- - -## FAQ - -### Q: 同一模型内可以混用 PD 和 regular 组吗? - -不可以。PD 分离要求一个模型的服务器组要么全部是 prefill/decode 对,要么全部是 regular。不支持在同一模型内混用 `regular` 与 `prefill`/`decode`。 - -### Q: 如果 `num_gpus` 不能被 `num_gpus_per_engine` 整除怎么办? - -对于跨节点引擎(`num_gpus_per_engine > num_gpus_per_node`),划分基于每节点的本地 GPU 数量。例如,每节点 8 个 GPU 且 `num_gpus_per_engine: 16` 时,每个引擎横跨 2 个节点。 - -### Q: 同一模型内的不同服务器组可以使用不同的 model path 吗? - -不可以。同一模型内的所有服务器组必须共享相同的 `model_path`。这在 `resolve()` 时会被校验。如果需要不同的模型,请定义为独立的模型条目。 - -### Q: 运行时如何获取特定模型的 router 地址? - -使用 `slime.rollout.sglang_rollout` 中的 `get_model_url(args, "model_name", "/endpoint")`。它从 `args.sglang_model_routers`(一个 `{ model_name: (ip, port) }` 字典)中读取,该字典在引擎启动后自动填充。 - -### Q: 可以不训练,只用 `--sglang-config` 做推理吗? - -虽然 `--sglang-config` 是为 slime 的训练循环设计的,但你可以通过配置仅 rollout 的运行来实现纯推理场景。对于完全独立的 SGLang 推理服务,建议直接使用 SGLang 原生的 `launch_server`,或使用 `--rollout-external` 模式连接预部署的引擎。 - -### Q: `--sglang-config` 和 `--prefill-num-servers` 是什么关系? - -`--prefill-num-servers` 是启用 PD 分离的旧方式(它创建一个带有 prefill + decode 组的单模型)。`--sglang-config` 是更新、更灵活的方式。两者互斥。我们推荐所有新部署迁移到 `--sglang-config`。 diff --git a/docs/zh/advanced/slime-router.md b/docs/zh/advanced/slime-router.md new file mode 100644 index 0000000000..c7da222e8a --- /dev/null +++ b/docs/zh/advanced/slime-router.md @@ -0,0 +1,138 @@ +# Slime Router + +Slime 提供一个可选的 SlimeRouter,用于 rollout / data generation 阶段。它是一个轻量级的 HTTP router/proxy,位于一个或多个 SGLang worker server 前,补齐一些 training-oriented 能力——这些并不是 serving-focused router 的主要目标。 + +--- + +## 1. 什么是 SlimeRouter? + +SlimeRouter 是一个小型 FastAPI 服务,主要能力包括: + +- 注册 worker(SGLang HTTP server)到本地池 +- 路由请求到选定的 worker(简单的 least-inflight load balancing) +- 代理任意路径到选定的 worker(例如 `/generate`) +- 定期 health checks,并隔离不健康的 worker +- 支持 middleware plugins(通过 `--slime-router-middleware-paths`)实现 rollout 特定处理(例如 caching、request/response transform) + +在 slime 架构中,router 是 rollout 系统("SGLang + router")的一部分:负责生成样本并将其推入数据缓冲区。 + +### 启动方式 + +在分布式训练中,当未提供 `--sglang-router-ip` 时,slime 会自动启动一个 router: + +- 如果设置了 `--use-slime-router`,slime 启动 SlimeRouter +- 否则,slime 启动 SGLang Model Gateway + +--- + +## 2. 为什么需要 SlimeRouter + +与 production inference 不同,RL rollout 往往需要捕获用于训练的额外 metadata:token-level logprobs、loss masks,以及(对 MoE 模型)expert routing decisions。SlimeRouter 通过 middleware system 和 passthrough proxy 设计提供这些能力。 + +### 2.1 Radix-tree cache(透明的 token 管理) + +> 当你的 rollout 流程是 text-in/text-out、并且很难可靠地保存 token IDs 时,适合用 radix-tree cache;如果你已经能自己控制 token-in/token-out(例如 search r1、multiturn VLM 这些 example),通常不需要 radix-tree cache。 + +text-in text-out 接口可能导致 token retokenization mismatches:训练阶段重新 tokenize 文本,得到的 token 序列可能与 rollout 阶段不同,从而破坏 PPO/GRPO 这类方法所需的 per-token alignment。 + +radix-tree cache 可以透明地解决这个问题:它拦截 text-based request,对其进行 tokenize,并将 trajectory(text、token IDs、logprobs、loss masks)按文本前缀作为 key 存储。rollout 结束后,调用 `/retrieve_from_text` 就能取回与 rollout 完全一致的 token 序列及其对齐的 metadata,无需修改现有 rollout 代码。 + +实现上,radix-tree cache 会做几件事: + +- 接收 text 以及 tokens/metadata,并写入 radix tree +- 通过 longest-prefix matching 复用已缓存的 token 序列(使后续流程可以走 token-in/token-out) +- rollout 过程中持续插入新的 text continuation(同一 prompt 下可有多条 trajectory,例如 GRPO) +- 定期清理 stale nodes,控制内存占用 + +当你有 text-based rollout 代码、想获得 token-level 精度但又不想重写,或者在 GRPO 场景中多个 trajectory 共享相同 prompt 前缀时,建议使用 radix-tree cache。 + +### 2.2 Rollout routing replay (R3) for MoE + +对 MoE 模型,slime 支持 rollout routing replay (R3):在 rollout 期间记录 expert routing decisions,并在训练期间 replay,以提升训练稳定性。 + +#### SGLang 端 + +SGLang 侧通过以下机制提供 expert routing capture: + +- `--enable-return-routed-experts`:启用路由捕获的服务器参数 +- `RoutedExpertsCapturer`:在前向传播期间捕获每个 MoE 层的 `topk_ids`(选定的专家 ID) +- `return_routed_experts`:检索路由数据的请求参数 +- 在响应 `meta_info` 中返回 `routed_experts`:一个形状为 `[seq_len - 1, num_layers, top_k]` 的 expert ID tensor + +#### Slime 端 + +Slime 侧消费路由数据,并在训练中完成 replay: + +- `--use-slime-router --use-rollout-routing-replay`:启用 R3 需要同时设置这两个标志 +- Rollout 发送 `return_routed_experts=True` 并将结果存储在 `sample.rollout_routed_experts` 中 +- 训练调用 `fill_routing_replay()` 将路由数据加载到 `RoutingReplay` 对象中 +- forward pass 期间,直接 replay 记录的 routing decisions,而不是重新计算 + +#### 为什么需要 SlimeRouter + +我们需要 SlimeRouter,是因为当请求设置 `return_routed_experts=true` 时,SGLang worker 会在响应里返回路由信息(`meta_info.routed_experts`),而 SlimeRouter 会端到端保留这个字段。SGLang Model Gateway 会用固定 schema 重建响应,可能会丢掉这类额外 metadata(细节见第 3 节)。 + +--- + +## 3. 与 SGLang Model Gateway 的区别 + +SlimeRouter 与 SGLang Model Gateway 都能将请求路由到 worker,但它们面向的目标不同、优化方向也不同。 + +### 主要区别 + +SlimeRouter 是一个轻量级的 Python/FastAPI proxy,作为 SGLang worker 的 passthrough proxy。这种 passthrough 设计使得 RL 特定功能成为可能,例如 radix-tree trajectory caching 和 R3(需要保留原始 response metadata,如 `routed_experts`)。 + +SGLang Model Gateway 是一个高性能 Rust router,面向大规模 inference 优化:async non-blocking routing、高级 fault tolerance(retries、circuit breakers)、多种 load balancing policy(包括 cache-aware routing),以及 PD disaggregation 支持。但它会用固定 schema 重建响应,因此不保留 slime 的 R3 流程所需 metadata。 + +更多关于 SGLang Model Gateway 的信息,请参阅[官方文档](https://docs.sglang.io/advanced_features/sgl_model_gateway.html)。 + +### 如何选择 + +- 当你需要 R3 或 radix-tree cache 时,使用 SlimeRouter +- 其他情况使用 SGLang Model Gateway(推荐默认选项) + +--- + +## 4. 多轮 Agent 的会话亲和性路由 + +当使用 SGLang Model Gateway 的一致性哈希路由策略时,slime 会自动为每个 rollout session 分配唯一的 session ID,并将其作为路由键来实现会话亲和性。 + +### 什么是会话亲和性? + +会话亲和性(Session Affinity,也称为粘性会话)确保属于同一对话或 agent session 的所有请求都被路由到相同的后端 worker。这对以下场景有益: + +- **多轮对话**:保持相同 worker 可以提高前缀缓存命中率 +- **多 agent 系统**:确保 agent 状态一致性和更好的资源局部性 +- **调试**:更容易追踪和调试特定会话 + +### 工作原理 + +当 rollout 系统生成样本时,每个样本都会被分配一个唯一的 `session_id`。这个 ID 会: + +1. 使用 UUID 为每个样本自动生成 +2. 存储在 `sample.session_id` 字段中 +3. 当 router policy 为 `consistent_hashing` 时,作为 `X-SMG-Routing-Key` header 传递 + +SGLang Model Gateway 的一致性哈希策略会使用这个路由键,确定性地为所有具有相同 session ID 的请求选择相同的 worker。 + +### 配置方法 + +启用会话亲和性路由只需在 slime 中配置 router policy 参数: + +```bash +--sglang-router-policy consistent_hashing +``` + +Slime 会自动启动 SGLang Model Gateway 并使用一致性哈希策略。 + +> **注意**:如果遇到 `consistent_hashing` policy 不可用的错误,请升级 sglang-router: +> ```bash +> pip install -U sglang-router +> ``` + +### 注意事项 + +- 每个样本都有自己独立的 session ID +- 同一 group 中的不同样本可能会被路由到不同的 worker +- 同一样本的后续轮次会保持相同的 session ID +- 目前该功能只适用于 SGLang Model Gateway diff --git a/docs/zh/developer_guide/ci.md b/docs/zh/developer_guide/ci.md index b8830ecc77..a43590d939 100644 --- a/docs/zh/developer_guide/ci.md +++ b/docs/zh/developer_guide/ci.md @@ -6,7 +6,7 @@ slime 使用 GitHub Actions 进行 CI。测试通过 **PR label** 触发—— 工作流定义在 `.github/workflows/pr-test.yml`(由 `pr-test.yml.j2` 自动生成)。每个 CI 任务会: -1. 在自托管 GPU runner 上通过 `docker run` 运行;大多数测试使用 `slimerl/slime:latest`,镜像验证使用 `slimerl/slime-test:latest`。 +1. 在自托管 GPU runner 上以 Docker 容器(`slimerl/slime:latest`)运行。 2. 通过 `pip install -e . --no-deps` 安装 slime。 3. 通过 `tests/ci/gpu_lock_exec.py --count ` 获取所需数量的 GPU。 4. 执行测试文件:`python .py` 或 `python tests/.py`。如果测试位于 `tests/plugin_contracts/` 这样的子目录,CI 也会自动处理。 @@ -20,8 +20,9 @@ slime 使用 GitHub Actions 进行 CI。测试通过 **PR label** 触发—— | Label | Job | 说明 | |---|---|---| | `run-ci-short` | `e2e-test-short` | Qwen2.5-0.5B 轻量级冒烟测试(4 GPU),用于快速反馈。 | +| `run-ci-fsdp` | `e2e-test-fsdp` | FSDP 后端测试(true on-policy、VL、megatron-fsdp 对齐)。 | | `run-ci-megatron` | `e2e-test-megatron` | 核心 Megatron 训练测试,覆盖 Dense、MoE、PPO、MTP、OPD 等。 | -| `run-ci-precision` | `e2e-test-precision` | 数值精度校验(并行一致性检查)。 | +| `run-ci-precision` | `e2e-test-precision` | 数值精度校验(并行一致性检查、megatron-fsdp 对齐)。 | | `run-ci-ckpt` | `e2e-test-ckpt` | Checkpoint 保存/加载正确性(同步和异步保存)。 | | `run-ci-image` | `e2e-test-image` | 在 `slimerl/slime-test:latest` 镜像上运行**全部**测试(用于镜像验证)。 | | `run-ci-changed` | `e2e-test-changed` | **动态**检测 PR 中新增或修改的测试文件,仅运行这些测试。 | @@ -56,7 +57,7 @@ slime 使用 GitHub Actions 进行 CI。测试通过 **PR label** 触发—— 这是验证 Megatron 后端改动的主要 label,覆盖: - Dense 模型:GLM4-9B、Qwen3-4B(PPO) -- MoE 模型:Qwen3-30B-A3B(DeepEP + FP8)、Qwen3.6-35B-A3B PD + Mooncake、Moonlight-16B-A3B +- MoE 模型:Qwen3-30B-A3B(有/无 DeepEP + FP8)、Moonlight-16B-A3B - 特殊场景:MiMo-7B MTP、Qwen2.5-0.5B debug rollout-then-train、OPD(sglang teacher 模式) 所有测试使用 8 张 GPU。如果你正在修改 Megatron 训练逻辑、loss 计算或 checkpoint 转换,应该使用这个 label。 @@ -75,7 +76,7 @@ NUM_GPUS = 4 # 此常量会被 run-ci-changed 自动读取 def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") # 按需下载数据集 ... def execute(): diff --git a/docs/zh/developer_guide/trace.md b/docs/zh/developer_guide/trace.md deleted file mode 100644 index 09588bd32a..0000000000 --- a/docs/zh/developer_guide/trace.md +++ /dev/null @@ -1,119 +0,0 @@ -# Trace 可视化 - -slime 可以为每条 rollout sample 挂上轻量级执行 trace。它会记录生成、奖励模型等 span 事件,并且可以在保存下来的 rollout debug dump 中离线查看。 - -![trace 时间线查看器](../../_static/image/trace.png) - -## 保存 rollout trace 数据 - -如果想在运行结束后查看 trace,可以在训练时打开 rollout debug dump: - -```bash -python train.py \ - ... \ - --save-debug-rollout-data /path/to/debug/rollout_{rollout_id}.pt -``` - -每个保存出来的 `.pt` 文件都会包含 rollout samples,以及对应的 `trace` 数据。之后也可以通过 `--load-debug-rollout-data` 复用同一份 dump。 - -## 打开时间线查看器 - -对保存好的 rollout dump 运行: - -```bash -python tools/trace_timeline_viewer.py /path/to/debug/rollout_0.pt -``` - -脚本会生成: - -- `rollout_0.trace_timeline_cache.json` -- `rollout_0.trace_timeline_viewer.html` - -默认情况下,它还会启动一个本地静态文件服务,方便直接在浏览器里打开。如果只想生成文件,可以加 `--no-serve`。 - -## 如何理解可视化结果 - -- 每一行对应一条 sample。 -- 条形块表示 span,点表示瞬时事件。 -- `trace_span(...)` 在开始和结束时记录的属性,都会显示在详情面板里。 -- 当 SGLang 返回 PD 分离相关时延时,viewer 会自动补出 `[P]` 和 `[D]` 两条虚拟 lane,用来拆开展示 prefill/decode。 -- 如果没有开启 PD,这两条虚拟 lane 不会出现,基础 trace 也仍然可以正常渲染。 - -## 给自定义代码打点 - -在自定义 rollout 或 reward 逻辑中,可以直接复用 `slime.utils.trace_utils` 里的工具: - -- `trace_span(target, name, attrs=...)`:记录一段持续时间。 -- `trace_event(target, name, attrs=...)`:记录一个瞬时事件。 -- `trace_function(name, ...)`:用 decorator 把整个同步/异步函数包成一个 span。 -- `bind_trace(sample)`:在 sample 被传递到其他 helper 或任务之前,确保它已经绑定好 trace carrier。 - -### `trace_span` 和 `trace_function` 的区别 - -如果你只想给函数内部的一小段逻辑打点,或者需要在代码块执行过程中补充 span 结束属性,就用 `trace_span(...)`。 - -如果整个函数调用都应该对应一个 span,就用 `trace_function(...)`。它本质上会先解析 trace target,然后在函数调用外层自动套一层 `trace_span(...)`,因此同步函数和异步函数都能直接用。 - -slime 主 rollout 流程里就是这样用的。例如 `generate_and_rm(...)` 按 sample 打点,而 `generate_and_rm_group(...)` 按 group 打点: - -```python -from slime.utils.trace_utils import trace_function - - -@trace_function("generate_and_rm", target="sample") -async def generate_and_rm(args, sample, sampling_params, evaluation=False): - ... - - -@trace_function( - "generate_and_rm_group", - target="group", - attrs_getter=lambda args, group, sampling_params, evaluation=False: {"group_size": len(group)}, -) -async def generate_and_rm_group(args, group, sampling_params, evaluation=False): - ... -``` - -### 如何选择 target - -`trace_function(...)` 需要一个 trace target,通常是 `Sample`、`TraceHandle` 或它们的列表。 - -- 如果 target 本来就是函数参数,优先写成 `target="sample"` 或 `target="group"`。 -- 如果 target 需要从参数里推导出来,就用 `target_getter=...`。 -- 不建议默认依赖自动推断。实现里确实可以从参数或当前 trace 上下文里推断 target,但显式写出来更稳定,也更不容易出现歧义。 - -### 给 decorator span 增加属性 - -如果想在 span 开始时附带属性,可以用 `attrs_getter=...`: - -```python -@trace_function( - "custom_rollout_batch", - target="samples", - attrs_getter=lambda samples, **_: {"batch_size": len(samples)}, -) -async def custom_rollout_batch(samples, **kwargs): - ... -``` - -如果你需要在函数执行到一半之后再补充属性,那么不要只靠 decorator,应该在函数内部再嵌一层 `trace_span(...)`。一个比较常见的模式是: - -- 外层用 `trace_function(...)` 表示整个函数生命周期 -- 内层用 `trace_span(...)` 标记 generation、RM、filter、post-process 等关键子步骤 - -如果想统一记录 SGLang 返回的 generation 元信息,可以复用 `build_sglang_meta_trace_attrs`: - -```python -from slime.utils.trace_utils import build_sglang_meta_trace_attrs, trace_span - -with trace_span(sample, "sglang_generate") as span: - output = await post(url, payload) - span.update(build_sglang_meta_trace_attrs(output["meta_info"])) -``` - -## 使用建议 - -- 先保存少量 rollout;单个 dump 的 sample 数量适中时,viewer 会更容易阅读。 -- viewer 直接基于保存下来的 `.pt` dump 工作,因此可以把文件拷到别的机器离线分析。 -- 如果你想看的是 SGLang 自身的 GPU / kernel 级 profiling trace,请参考 [性能分析](./profiling.md)。 - diff --git a/docs/zh/examples/deepseek-r1.md b/docs/zh/examples/deepseek-r1.md index 703a7730e4..368653844d 100644 --- a/docs/zh/examples/deepseek-r1.md +++ b/docs/zh/examples/deepseek-r1.md @@ -171,7 +171,7 @@ OPTIMIZER_ARGS=( sglang 所需的参数,这里 `--rollout-num-gpus-per-engine` 基本对应 sglang 的 `tp_size`,除此之外的 sglang 参数均通过添加 `--sglang-` 的前缀来传给 slime。为了充分利用 sglang 的大 EP 推理能力,我们加上了 ep64、dp_attention dp8、deepep mode auto 等配置。 -最后的 `--rollout-server-concurrency` 是 slime 的特有参数,是为了方式同时发给 sglang server 的并发太大打爆 http server,默认为 512。但是我们现在是 8 机一个 server,为了保证每个 dp rank 能有 128 的并发,我们调整为 1024。 +最后的 `--sglang-server-concurrency` 是 slime 的特有参数,是为了方式同时发给 sglang server 的并发太大打爆 http server,默认为 512。但是我们现在是 8 机一个 server,为了保证每个 dp rank 能有 128 的并发,我们调整为 1024。 ```bash SGLANG_ARGS=( @@ -190,7 +190,7 @@ SGLANG_ARGS=( --sglang-deepep-mode auto # make every dp rank has 128 concurrency - --rollout-server-concurrency 1024 + --sglang-server-concurrency 1024 ) ``` diff --git a/docs/zh/examples/glm4.5-355B-A32B.md b/docs/zh/examples/glm4.5-355B-A32B.md new file mode 100644 index 0000000000..8a9db6d698 --- /dev/null +++ b/docs/zh/examples/glm4.5-355B-A32B.md @@ -0,0 +1,190 @@ +# 64xH100 训练 GLM-4.5 + +这里是使用 64xH100 进行 GLM-4.5 355B RL 训练的示例。 + +## 环境准备 + +搭建环境与下载数据的方法可以参考 [示例:Qwen3-4B](qwen3-4B.md)。 + +首先需要在多机均可访问到的地址(下记为 `$BASE_DIR`)上下载 GLM-4.5: + +```bash +hf download zai-org/GLM-4.5 --local-dir $BASE_DIR/GLM-4.5-355B-A32B +``` + +通过如下方式通过 2 机 16 卡将 huggingface checkpoint 转换为 torch dist 格式: + +```bash +cd slime/ +source scripts/models/glm4.5-355B-A32B.sh +PYTHONPATH=/root/Megatron-LM/ torchrun \ + --nproc-per-node 8 \ + --master-addr ${MASTER_ADDR} --master-port 12345 \ + --nnodes=2 --node-rank ${NODE_RANK} \ + tools/convert_hf_to_torch_dist.py \ + ${MODEL_ARGS[@]} \ + --hf-checkpoint $BASE_DIR/GLM-4.5-355B-A32B/ \ + --save $BASE_DIR/GLM-4.5-355B-A32B_torch_dist/ +``` + +其中 `MASTER_ADDR` 为 node0 的 ip,`NODE_RANK` 表示这是第几台机器,这两者就像是在多机 `torchrun` 的时候进行的配置。 + +## 执行训练 + +在 node0 运行: + +```bash +cd slime/ +bash scripts/run-glm4.5-355B-A32B.sh +``` + +在其他 node 需要通过如下的指令加入 ray 集群: + +```bash +ray start --address=${MASTER_ADDR}:6379 --num-gpus 8 --node-ip-address ${WORKER_IP} --disable-usage-stats" +``` + +或者如果你能获取到所有节点的 ip 列表,例如有一个 mpi hostfie(每一行为 `ip slot=8`),那么可以在 `scripts/run-glm4.5-355B-A32B.sh` 中的 `ray start --head` 指令之后加入如下的指令,从而只需要从 node0 执行训练: + +```bash +for WORKER_IP in $(awk '{print $1}' $BASE_DIR/mpi_hostfile); do + if [[ "$WORKER_IP" == "$MASTER_ADDR" ]]; then + continue + fi + echo "Starting Ray worker on ${WORKER_IP}" + ssh root@"${WORKER_IP}" \ + "pkill -9 sglang ; ray stop --force ; pkill -9 python ; ray start --address=${MASTER_ADDR}:6379 --num-gpus 8 --node-ip-address ${WORKER_IP} --disable-usage-stats" & +done +wait +``` + +### 参数简介 + +```bash +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" +source "${SCRIPT_DIR}/models/glm4.5-355B-A32B.sh" +``` + +从 [scripts/models/glm4.5-355B-A32B.sh](https://github.com/THUDM/slime/blob/main/scripts/models/glm4.5-355B-A32B.sh) 读取模型的 config。这些 config 都是 megatron 的参数。在使用 megatron 进行训练的时候,megatron 无法从 ckpt 中读取模型 config,需要我们自行配置。我们在 [scripts/models](https://github.com/THUDM/slime/tree/main/scripts/models/) 中提供了一些样例。 + +#### PERF_ARGS + +一堆 megatron 的并行参数,只有 `--use-dynamic-batch-size` 与 `--max-tokens-per-gpu` 是 slime 添加的。 + +megatron 的部分,我们配置了 tp8、pp4、cp2、ep16。 + +`max_tokens_per_gpu` 是指每张卡最多跑多少 token,在开启 `use_dynamic_batch_size` 之后,会尽可能将一个 batch 内部长短不一的数据拼到 `max_tokens_per_gpu`,从而组成动态的 micro batch size,如果有一条数据长度超过了 `max_tokens_per_gpu`,则自成一条,不会对数据进行截断。在开启 context parallel (CP) 时,会让 CP 张卡去上的数据去共享总长为 `CP * max_tokens_per_gpu` 的 token。 + +在开启 dynamic_batch_size,会忽略传统的 `micro_batch_size`。 + +⚠️ slime 总是会通过 data packing 的方法训练模型,并且严格保证 per sample loss 或 per token loss,也就是开启 dynamic batch size 不会对 loss 计算有影响,推荐开启。 + +```bash +PERF_ARGS=( + --tensor-model-parallel-size 8 + --sequence-parallel + --pipeline-model-parallel-size 4 + --context-parallel-size 2 + --expert-model-parallel-size 16 + --expert-tensor-parallel-size 1 + + --recompute-granularity full + --recompute-method uniform + --recompute-num-layers 1 + + --use-dynamic-batch-size + --max-tokens-per-gpu 16384 +) +``` + +#### GRPO_ARGS + +目前 slime 这是一些 grpo 相关的参数: + +```bash +GRPO_ARGS=( + --advantage-estimator grpo + --use-kl-loss + --kl-loss-coef 0.00 + --kl-loss-type low_var_kl + --entropy-coef 0.00 + --eps-clip 0.2 + --eps-clip-high 0.28 +) +``` + +如果希望训练时不加载 reference model,需要去掉 `--use-kl-loss` 并设置 `--kl-coef 0.00`(默认值为 0)。 + +#### OPTIMIZER_ARGS + +我们通过了如下几个参数配置了 CPU Adam,用来节省显存。 + +```bash +OPTIMIZER_ARGS=( + ... + + --optimizer-cpu-offload + --overlap-cpu-optimizer-d2h-h2d + --use-precision-aware-optimizer +) +``` + +#### SGLANG_ARGS + +sglang 所需的参数,这里 `--rollout-num-gpus-per-engine` 基本对应 sglang 的 `tp_size`,除此之外的 sglang 参数均通过添加 `--sglang-` 的前缀来传给 slime。 + +```bash +SGLANG_ARGS=( + --rollout-num-gpus-per-engine 32 + --sglang-mem-fraction-static 0.7 + --sglang-enable-dp-attention + --sglang-dp-size 4 +) +``` + +#### MISC_ARGS + +一些额外的 megatron 配置。注意这里配置了 megatron 的 deepep。 + +```bash +MISC_ARGS=( + ... + + # use deepep for megatron + --moe-enable-deepep + --moe-token-dispatcher-type flex +) +``` + +## 用 fp8 进行数据生成 + +开源版本的 GLM-4.5 fp8 ckpt 使用的是 per-channel 量化,目前无法在 sglang 中使用 deepep。我们可以利用 slime 提供的工具转换一个 128x128 per-block 量化的 checkpoint: + +```bash +cd slime/ +python tools/convert_hf_to_fp8.py \ + --model-dir $BASE_DIR/GLM-4.5-355B-A32B/ \ + --save-dir $BASE_DIR/GLM-4.5-355B-A32B-FP8/ \ + --strategy block --block-size 128 128 \ + --max-workers 4 +``` + +之后将 `--hf-checkpoint` 设置为 `$BASE_DIR/GLM-4.5-355B-A32B-FP8/` 就可以在训练中使用 fp8 进行 rollout 了。 + +一个样例的 fp8 `SGLANG_ARGS` 为: + +```bash +SGLANG_ARGS=( + --rollout-num-gpus-per-engine 32 + --sglang-mem-fraction-static 0.7 + --sglang-enable-dp-attention + --sglang-dp-size 32 + --sglang-ep-size 32 + --sglang-moe-dense-tp-size 1 + --sglang-enable-dp-lm-head + --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 128) + + --sglang-moe-a2a-backend deepep + --sglang-deepep-mode auto +) +``` diff --git a/docs/zh/examples/glm4.7-30B-A3B.md b/docs/zh/examples/glm4.7-30B-A3B.md index cdb2b45629..0a7a141c27 100644 --- a/docs/zh/examples/glm4.7-30B-A3B.md +++ b/docs/zh/examples/glm4.7-30B-A3B.md @@ -89,9 +89,9 @@ SGLANG_ARGS=( ... # MTP 投机解码 (EAGLE) --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 + --sglang-speculative-num-steps 2 --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 + --sglang-speculative-num-draft-tokens 3 ) ``` @@ -101,7 +101,7 @@ SGLANG_ARGS=( #### MTP 训练 -slime 也支持将 MTP 层与主模型联合训练,适用于已实现 MTP 权重转换的模型(如 MiMo、GLM-4.7)。启用时,相关参数如下: +slime 也支持将 MTP 层与主模型联合训练,适用于已实现 MTP 权重转换的模型(如 MiMo、GLM-4.5)。启用时,相关参数如下: ```bash # 在模型配置中添加 MTP 层数 @@ -118,9 +118,9 @@ SPEC_ARGS=( - `--enable-mtp-training`:启用 MTP 层的梯度计算。不设置此标志时,MTP 层会被加载但冻结。 - `--mtp-loss-scaling-factor 0.2`:MTP loss 相对于主策略 loss 的权重,默认为 0.2。 -> **注意**:MTP 训练需要 MTP checkpoint bridge 正确转换 HuggingFace 和 Megatron 格式之间的权重。`GLM4MoELiteBridge`(位于 `slime_plugins/mbridge/glm4moe_lite.py`)扩展了 DeepSeek V3 bridge,实现了动态 MTP 层索引以支持 GLM-4.7-Flash 的 47 层架构。 +> ⚠️ **注意**:GLM-4.7-Flash 的 MTP 训练目前尚不支持,因为 deepseek_v3 的 checkpoint bridge 尚未实现 MTP 权重转换(上游 mbridge 中标注为 `# TODO: mtp`)。但推理时的投机解码仍然可用 — SGLang 会内部处理 MTP 层。 > -> 对于其他支持 MTP 训练的模型(如 MiMo),可参考 `scripts/run-mimo-7B-rl-eagle.sh`。 +> 对于完整支持 MTP 训练的模型(如 MiMo),可参考 `scripts/run-mimo-7B-rl-eagle.sh`。 ### 多机支持 diff --git a/docs/zh/examples/glm4.7-355B-A32B.md b/docs/zh/examples/glm4.7-355B-A32B.md deleted file mode 100644 index 0954721da4..0000000000 --- a/docs/zh/examples/glm4.7-355B-A32B.md +++ /dev/null @@ -1,189 +0,0 @@ -# 64xH100 训练 GLM-4.7 - -## 环境准备 - -搭建环境与下载数据的方法与 Qwen3-4B 模型相同,可以参考 [示例:Qwen3-4B](qwen3-4B.md),将文中 Qwen3-4B 的部分替换为 GLM-4.7 即可。 - -### 前置条件 - -GLM-4.7 使用 slime 标准 Docker 环境即可。多机启动前,请确保所有机器都能访问同一个 `$BASE_DIR` 路径,并在启动 Ray worker 前先取消代理: - -```bash -unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY -``` - -### 下载模型 - -```bash -hf download zai-org/GLM-4.7 --local-dir $BASE_DIR/GLM-4.7-355B-A32B -``` - -### 转换 Checkpoint - -可以用如下方法把 Hugging Face checkpoint 转换为 torch_dist 格式(2 机 x 8 卡): - -```bash -cd /root/slime -pip install -e . --no-deps -source scripts/models/glm4.5-355B-A32B.sh -PYTHONPATH=/root/Megatron-LM/ torchrun \ - --nproc-per-node 8 \ - --master-addr ${MASTER_ADDR} --master-port 12345 \ - --nnodes=2 --node-rank ${NODE_RANK} \ - tools/convert_hf_to_torch_dist.py \ - ${MODEL_ARGS[@]} \ - --hf-checkpoint $BASE_DIR/GLM-4.7-355B-A32B/ \ - --save $BASE_DIR/GLM-4.7-355B-A32B_torch_dist/ -``` - -其中 `MASTER_ADDR` 是 node0 的 IP,`NODE_RANK` 表示当前机器的编号,配置方式与普通多机 `torchrun` 一致。 - -## 执行训练 - -从 node0 执行训练脚本: - -```bash -cd /root/slime -export BASE_DIR=/shared/path # 所有节点都能访问的共享路径 -bash scripts/run-glm4.7-355B-A32B.sh -``` - -### 参数简介 - -这里我们简单介绍一下 [run-glm4.7-355B-A32B.sh](https://github.com/THUDM/slime/blob/main/scripts/run-glm4.7-355B-A32B.sh) 中的关键部分。 - -#### MoE 配置 - -GLM-4.7 是一个 MoE(混合专家)模型,包含 160 个路由专家(top-8 激活)和共享专家。模型共 92 层:3 层 dense + 89 层 MoE。 - -1. 为了支持在 64xH100 环境中运行 GLM-4.7,我们开启 Megatron 的 CPU Adam 来节省显存: - - ```bash - OPTIMIZER_ARGS=( - ... - --optimizer-cpu-offload - --overlap-cpu-optimizer-d2h-h2d - --use-precision-aware-optimizer - ) - ``` - -2. 在 Megatron 中开启 MoE 优化。当前 64xH100 示例使用 TP=8、PP=4、CP=2、EP=16: - - ```bash - PERF_ARGS=( - --tensor-model-parallel-size 8 - --sequence-parallel - --pipeline-model-parallel-size 4 - --context-parallel-size 2 - --expert-model-parallel-size 16 - --expert-tensor-parallel-size 1 - ... - --use-dynamic-batch-size - --max-tokens-per-gpu 16384 - ) - ``` - -3. 在 SGLang 中开启带 DP attention 的 MoE 优化: - - ```bash - SGLANG_ARGS=( - --rollout-num-gpus-per-engine 32 - --sglang-mem-fraction-static 0.7 - --sglang-enable-dp-attention - --sglang-dp-size 4 - --sglang-ep-size 32 - --sglang-enable-dp-lm-head - --sglang-moe-dense-tp-size 1 - ... - ) - ``` - -#### MTP 投机解码(推理加速) - -GLM-4.7 包含 MTP(Multi-Token Prediction)层,可以在推理阶段用于投机解码,加速 rollout 生成。启用方法是在 `SGLANG_ARGS` 中加入: - -```bash -SGLANG_ARGS=( - ... - # MTP 投机解码 (EAGLE) - --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 - --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 -) -``` - -这样 SGLang 就会使用模型自带的 MTP 层作为 EAGLE 风格投机解码的 draft model。 - -> ⚠️ **注意**:投机解码会额外占用 GPU 显存。如果遇到 OOM,可以尝试降低 `--sglang-mem-fraction-static` 或暂时关闭投机解码。 - -#### MTP 训练 - -slime 也支持在 GLM-4.7 上将 MTP 层与主模型联合训练。启用时,相关参数如下: - -```bash -# 在模型配置中添加 MTP 层数 -MODEL_ARGS+=(--mtp-num-layers 1) - -# 启用 MTP 训练 -MTP_ARGS=( - --enable-mtp-training - --mtp-loss-scaling-factor 0.2 -) -``` - -- `--mtp-num-layers 1`:告知 Megatron 从 checkpoint 中加载 MTP 层。 -- `--enable-mtp-training`:启用 MTP 层的梯度计算;不设置时 MTP 层会被加载但保持冻结。 -- `--mtp-loss-scaling-factor 0.2`:MTP loss 相对主策略 loss 的权重,默认值为 0.2。 - -> **注意**:GLM-4.7 的 MTP 训练依赖 `GLM4MoEBridge`(位于 `slime_plugins/mbridge/glm4moe.py`)在 HuggingFace 与 Megatron 格式之间正确映射普通层和 MTP 层权重。 - -#### 多机支持 - -这个示例本身就是多机训练配置。启动前请确认: - -- 模型权重和数据集放在所有节点都能访问到的路径; -- `MASTER_ADDR` 设置为所有节点都能访问到的地址; -- 在启动 Ray worker 前先取消代理; -- 提供一个 `HOSTFILE` 列出 worker IP(每行一个),并在启动前 `export HOSTFILE=/path/to/hostfile`; -- 并行度需要成套调整。默认示例使用 TP=8、PP=4、EP=16、CP=2,rollout 侧则使用 32 张卡 / engine + SGLang DP attention。 - -如果 rollout GPU 数与 expert 数(160)之间不能整除,可以通过 `--sglang-ep-num-redundant-experts` 增加冗余 expert。 - -## FP8 Rollout - -开源版 GLM-4.7 的 FP8 checkpoint 使用的是 per-channel 量化,目前无法在 SGLang 中直接启用 DeepEP。可以利用 slime 自带工具将其转换为 128x128 的 per-block FP8 checkpoint: - -```bash -cd /root/slime -python tools/convert_hf_to_fp8.py \ - --model-dir $BASE_DIR/GLM-4.7-355B-A32B/ \ - --save-dir $BASE_DIR/GLM-4.7-355B-A32B-FP8/ \ - --strategy block --block-size 128 128 \ - --max-workers 4 -``` - -随后把 `--hf-checkpoint` 改成 `$BASE_DIR/GLM-4.7-355B-A32B-FP8/` 即可开启 FP8 rollout。 - -一个可参考的 FP8 `SGLANG_ARGS` 配置如下: - -```bash -SGLANG_ARGS=( - --rollout-num-gpus-per-engine 32 - --sglang-mem-fraction-static 0.7 - --sglang-enable-dp-attention - --sglang-dp-size 32 - --sglang-ep-size 32 - --sglang-moe-dense-tp-size 1 - --sglang-enable-dp-lm-head - --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 128) - - --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 - --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 - - --sglang-moe-a2a-backend deepep - --sglang-deepep-mode auto -) -``` diff --git a/docs/zh/examples/qwen3-4B.md b/docs/zh/examples/qwen3-4B.md index 1f3adc9c51..2afc70bfbe 100644 --- a/docs/zh/examples/qwen3-4B.md +++ b/docs/zh/examples/qwen3-4B.md @@ -280,10 +280,10 @@ ray job submit ... \ ⚠️ 在进行训推分离的时候,每个 sglang server 上的并发度太大,超过了 sglang 默认的 cuda graph 的并发度(默认最大 160),影响推理速度。可以用以下 2 种方式进行调整: -1. 通过 `--rollout-server-concurrency` 限制发给一个 sglang server 的最大并发量,例如: +1. 通过 `--sglang-server-concurrency` 限制发给一个 sglang server 的最大并发量,例如: ```bash - --rollout-server-concurrency 160 + --sglang-server-concurrency 160 ``` 2. 使用 `--sglang-cuda-graph-bs`,即 sglang 原生的 `--cuda-graph-bs`, 增大 sglang 初始化的 cuda graph 数量,例如: diff --git a/docs/zh/get_started/customization.md b/docs/zh/get_started/customization.md index 509badf3f6..5d1e3ddffd 100644 --- a/docs/zh/get_started/customization.md +++ b/docs/zh/get_started/customization.md @@ -28,6 +28,7 @@ slime 通过函数路径参数提供了广泛的自定义能力。这些参数 | [`--custom-megatron-init-path`](#17-megatron-hook) | Megatron 设置后的自定义初始化。 | | [`--custom-megatron-before-log-prob-hook-path`](#17-megatron-hook) | log probability 计算前的自定义逻辑。 | | [`--custom-megatron-before-train-step-hook-path`](#17-megatron-hook) | 每个训练步骤前的自定义逻辑。 | +| [`--slime-router-middleware-paths`](#18-slime-router-中间件---slime-router-middleware-paths) | 向 slime router 添加自定义中间件。 | ## 详细接口参考 @@ -401,14 +402,27 @@ def custom_hook(args, rollout_id, step_id, model, optimizer, opt_param_scheduler --- -### 18. MoE 路由重放 +### 18. slime Router 中间件 (`--slime-router-middleware-paths`) + +**用途**: 向 slime router 添加自定义中间件用于请求处理。 + +**使用场景**: +- 请求/响应转换 +- 自定义路由逻辑 +- 缓存和优化 + +--- + +### 19. MoE 路由重放 通过记录和重放专家路由决策来稳定 MoE RL 训练。 | 参数 | 说明 | | --- | --- | | `--use-routing-replay` | 训练中前向-反向路由一致性。([arXiv:2507.18071](https://arxiv.org/abs/2507.18071)) | -| `--use-rollout-routing-replay` | R3:在训练时重放 rollout 阶段的路由。slime 默认的 `sglang_router` 路径支持该功能。([arXiv:2510.11370](https://arxiv.org/abs/2510.11370)) | +| `--use-rollout-routing-replay` | R3:在训练时重放 rollout 阶段的路由。**需要 `--use-slime-router`**。([arXiv:2510.11370](https://arxiv.org/abs/2510.11370)) | + +关于 R3 和 SlimeRouter 的详细说明,请参阅 [Slime Router](../advanced/slime-router.md)。 ## 自定义函数路径的测试 diff --git a/docs/zh/get_started/quick_start.md b/docs/zh/get_started/quick_start.md index 463af729f4..a308ae70ec 100644 --- a/docs/zh/get_started/quick_start.md +++ b/docs/zh/get_started/quick_start.md @@ -70,7 +70,7 @@ hf download --repo-type dataset zhuzilin/aime-2024 \ 当使用 Megatron 作为训练后端时,需要先将 Hugging Face 格式的模型权重转换为 Megatron `torch_dist` 格式。 -首先,加载目标模型的配置文件。`slime/scripts/models` 目录下包含了支持模型的配置文件。需要 `source` 对应模型的脚本,将配置参数加载到当前环境中。此处我们以 GLM4-9B 模型为例子,对于 Qwen3-4B、Qwen3.5、Qwen3.6、GLM-4.7-Flash、Qwen3-30B-A3B,是类似的。 +首先,加载目标模型的配置文件。`slime/scripts/models` 目录下包含了支持模型的配置文件。需要 `source` 对应模型的脚本,将配置参数加载到当前环境中。此处我们以 GLM4-9B 模型为例子,对于 Qwen3-4B,GLM-4.7-Flash,Qwen3-30B-A3B,是类似的。 ```bash cd /root/slime @@ -578,5 +578,5 @@ ray job submit --address="http://127.0.0.1:8265" \ slime 针对大规模混合专家(MoE)模型的分布式训练进行了深度优化。我们提供了一些端到端的训练案例以供参考: - [示例:8xH100 训练 GLM-4.7-Flash](../examples/glm4.7-30B-A3B.md) -- [示例:64xH100 训练 GLM-4.7](../examples/glm4.7-355B-A32B.md) +- [示例:64xH100 训练 GLM-4.5](../examples/glm4.5-355B-A32B.md) - [示例:128xH100 训练 DeepSeek-R1](../examples/deepseek-r1.md) diff --git a/docs/zh/get_started/usage.md b/docs/zh/get_started/usage.md index dede294827..1db38f4215 100644 --- a/docs/zh/get_started/usage.md +++ b/docs/zh/get_started/usage.md @@ -37,7 +37,8 @@ slime 支持多种训练后端,可以通过 `--train-backend` 参数进行选择: -- `megatron`(默认):使用 Megatron-LM 作为训练后端,支持大规模模型的高效训练。 +- `megatron`(默认):使用 Megatron-LM 作为训练后端,支持大规模模型的高效训练; +- `fsdp`(实验性):使用 PyTorch FSDP 作为训练后端,可以直接加载 HuggingFace 格式权重,无需转换。 ### 加载 megatron @@ -193,6 +194,7 @@ sglang 的加载非常简单,只需要: 注意:在策略蒸馏 (OPD) 现在与 advantage estimator 正交,使用 `--use-opd` 和 `--opd-kl-coef` 可以在任意 estimator 之上启用 OPD。 - `--calculate-per-token-loss`:slime 中默认的方案是 per sample loss,即 `mean(sum(sample_i) / len(sample_i))`,如果需要计算 per token loss,即 `sum(sum(sample_i)) / sum(len(sample_i))`,可以开启 `--calculate-per-token-loss`; - `--use-tis`:如果需要开启 tis(https://fengyao.notion.site/off-policy-rl),可以开启这一设置; +- `--true-on-policy-mode`:开启 True On-Policy 模式,即在训练过程中严格保证数据是当前策略生成的。 #### GRPO 算法 @@ -260,24 +262,6 @@ PPO 相关参数: - `--value-clip`:value loss 的 clip 范围; - `--kl-coef`:KL penalty 系数,用于 reward shaping。 -### 高级 Megatron 配置(--megatron-config-path) - -对于 PPO 场景,可以使用 `--megatron-config-path` 指定一个 YAML 文件,对 actor / critic 分别覆盖 Megatron 参数。常见用途包括给 critic 设置不同的 `lr`,或者分别指定 `load` / `save` 等路径。 - -```yaml -megatron: - - name: default - role: actor - overrides: - lr: 1e-6 - - name: default - role: critic - overrides: - lr: 1e-5 -``` - -> **注意:** 当前该配置只支持 PPO;并且当前 PPO 下 actor 和 critic 的 Megatron 并行配置必须保持一致。建议把并行相关参数继续写在公共 CLI 中,只把角色差异项放在 YAML 里。详见 [Megatron Config:按角色覆盖训练参数](../advanced/megatron-config.md)。 - ## 自定义 rollout 函数 slime 支持不同程度的自定义数据生成(rollout)。 @@ -384,36 +368,6 @@ slime 会用 [sglang-router](https://github.com/sgl-project/sglang/tree/main/sgl 当通过 `--sglang-router-ip` 与 `--sglang-router-port` 来配置传入一个外部的 router,此时 slime 不再会在内部启动一个 router,而是会把所有的 server 都注册在这个外部 router 上。这时可以利用这个外部的 router 地址来实现更复杂的数据生成流程。注意 router 是支持 openai compatible api 的。 -### 高级引擎配置(--sglang-config) - -对于高级部署场景,可以使用 `--sglang-config` 指定一个 YAML 文件,来配置服务器组、多模型部署以及选择性权重更新。 - -**多模型部署**允许同时服务多个模型(例如一个接收权重更新的 actor 模型和一个冻结的 reference/reward 模型): - -```yaml -sglang: - - name: actor - update_weights: true # 接收训练的权重更新(默认) - server_groups: - - worker_type: regular - num_gpus: 8 - num_gpus_per_engine: 4 - - name: ref - model_path: /path/to/ref_model - update_weights: false # 冻结,不更新权重 - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 2 -``` - -每个模型都有自己独立的 router。每个模型的 router 信息可通过 `args.sglang_model_routers`(一个将模型名映射到 `(ip, port)` 元组的字典)访问。自定义 rollout 函数可以使用 `slime.rollout.sglang_rollout` 中的 `get_model_url(args, "ref")` 来将请求路由到指定模型。 - -**服务器组功能:** -- `worker_type`:`regular`、`prefill`、`decode` 或 `placeholder`(预留 GPU 位置但不创建引擎) -- `overrides`:SGLang `ServerArgs` 字段覆盖字典,会叠加在 `--sglang-*` CLI 参数之上 -- `num_gpus_per_engine`:每组的 TP 大小覆盖 - ## megatron 使用方法 slime 通过复用 `megatron.training` 目录下的常规函数,如 `parse_args`, `save_checkpoint`,`load_checkpoint`,从而实现对不同版本以及轻度魔改的 megatron 的支持。所以在使用时,需要保证 `PYTHONPATH` 中能访问到 megatron,例如在运行时加入 `export PYTHONPATH=/root/Megatron-LM`。 diff --git a/docs/zh/index.rst b/docs/zh/index.rst index 36d3d79eb2..7c254194cd 100644 --- a/docs/zh/index.rst +++ b/docs/zh/index.rst @@ -34,21 +34,20 @@ slime 是 GLM-4.7、GLM-4.6、GLM-4.5 背后的 RL 训练框架。除此之外 examples/glm4.7-30B-A3B.md examples/qwen3-30B-A3B.md - examples/glm4.7-355B-A32B.md + examples/glm4.5-355B-A32B.md examples/deepseek-r1.md .. toctree:: :maxdepth: 1 :caption: 高级特性 + advanced/slime-router.md advanced/on-policy-distillation.md advanced/speculative-decoding.md advanced/low-precision.md advanced/reproducibility.md advanced/fault-tolerance.md advanced/pd-disaggregation.md - advanced/sglang-config.md - advanced/megatron-config.md advanced/arch-support-beyond-megatron.md .. toctree:: @@ -67,7 +66,6 @@ slime 是 GLM-4.7、GLM-4.6、GLM-4.5 背后的 RL 训练框架。除此之外 developer_guide/ci.md developer_guide/debug.md - developer_guide/trace.md developer_guide/profiling.md .. toctree:: diff --git a/examples/README.md b/examples/README.md index a1e3bd251e..a64fe249d6 100644 --- a/examples/README.md +++ b/examples/README.md @@ -6,8 +6,8 @@ These examples provide concrete examples to leverage slime in your own RL workfl - **[eval_multi_task](./eval_multi_task)**: Example for supporting evaluation multiple tasks with different configs. - **[fully_async](./fully_async)**: Demonstrates fully asynchronous rollout generation for higher efficiency. -- **[geo3k_vlm](./geo3k_vlm)**: Training VLMs on a single-turn reasoning task using GRPO on the GEO3K dataset. -- **[geo3k_vlm_multi_turn](./geo3k_vlm_multi_turn)**: VLM multi-turn training on Geo3k dataset. +- **[geo3k_vlm](./geo3k_vlm)**: Training VLMs with FSDP on a single-turn reasoning task using GRPO on the GEO3K dataset. +- **[geo3k_vlm_multi_turn](./geo3k_vlm_multi_turn)**: VLM multi-turn training (FSDP backend) on Geo3k dataset. - **[low_precision](./low_precision)**: Examples of FP8 training and inference for improved throughput and stability. - **[multi_agent](./multi_agent)**: Example of running multi-agent RL with `slime`. - **[on_policy_distillation](./on_policy_distillation)**: Example implementation for on-policy distillation, extending the reinforcement learning pipeline to support teacher–student distillation directly within on-policy training. @@ -17,3 +17,5 @@ These examples provide concrete examples to leverage slime in your own RL workfl - **[strands_sglang](./strands_sglang)**: Integration example with the Strands-Agents scaffolding framework. - **[tau-bench](./tau-bench)**: Training in an agentic multi-turn tool use environment (Tau-bench). - **[train_infer_mismatch_helper](./train_infer_mismatch_helper)**: Algorithmic methods for rollout correction (e.g., TIS, MIS). +- **[true_on_policy](./true_on_policy)**: Ensures strictly equal log probabilities between inference (SGLang) and training engines. +- **[true_on_policy_vlm](./true_on_policy_vlm)**: "True On-Policy" training demonstration for VLM (Qwen3-VL). diff --git a/examples/eval_multi_task/multi_task.yaml b/examples/eval_multi_task/multi_task.yaml index bad2d61412..83ae67f8ac 100644 --- a/examples/eval_multi_task/multi_task.yaml +++ b/examples/eval_multi_task/multi_task.yaml @@ -7,11 +7,11 @@ eval: path: /root/aime-2024/aime-2024.jsonl rm_type: deepscaler n_samples_per_eval_prompt: 16 - - name: gpqa # hf download --repo-type dataset zyzshishui0627/gpqa_diamond --local-dir /root/gpqa + - name: gpqa # huggingface-cli download --repo-type dataset zyzshishui0627/gpqa_diamond --local-dir /root/gpqa path: /root/gpqa/gpqa_eval.jsonl rm_type: gpqa n_samples_per_eval_prompt: 2 - - name: ifbench # hf download --repo-type dataset zyzshishui0627/IFBench --local-dir /root/ifbench + - name: ifbench # huggingface-cli download --repo-type dataset zyzshishui0627/IFBench --local-dir /root/ifbench path: /root/ifbench/IFBench_eval.jsonl rm_type: ifbench n_samples_per_eval_prompt: 1 diff --git a/examples/fully_async/fully_async_rollout.py b/examples/fully_async/fully_async_rollout.py index 1df005ed02..7208365c18 100644 --- a/examples/fully_async/fully_async_rollout.py +++ b/examples/fully_async/fully_async_rollout.py @@ -20,7 +20,7 @@ def get_global_worker(args, data_buffer): with _worker_lock: if _global_worker is None or not _global_worker.worker_thread.is_alive(): print("Creating new global async worker...") - _global_worker = AsyncRolloutWorker(args, data_buffer, concurrency=args.rollout_server_concurrency) + _global_worker = AsyncRolloutWorker(args, data_buffer, concurrency=args.sglang_server_concurrency) _global_worker.start() return _global_worker diff --git a/examples/geo3k_vlm/README.md b/examples/geo3k_vlm/README.md index ba1ccdbb8d..9841e7641d 100644 --- a/examples/geo3k_vlm/README.md +++ b/examples/geo3k_vlm/README.md @@ -1,26 +1,18 @@ -# VLM Single-Turn RL +# VLM Single-Turn RL (FSDP & Megatron) -Training VLMs with Megatron on single-turn reasoning task using GRPO on the [GEO3K dataset](https://huggingface.co/datasets/hiyouga/geometry3k). We used processed version [here](https://huggingface.co/datasets/chenhegu/geo3k_imgurl). +Training VLMs with FSDP or Megatron on single-turn reasoning task using GRPO on the [GEO3K dataset](https://huggingface.co/datasets/hiyouga/geometry3k). We used processed version [here](https://huggingface.co/datasets/chenhegu/geo3k_imgurl). Supported models: * Qwen2.5-VL -* Qwen3-VL (Dense and MoE) -* Qwen3.5 (Dense and MoE) +* Qwen3-VL (Dense and Moe) Note: Please make sure the cudnn version in the environment is 9.16.0.29 to prevent severe performance regression in conv3d in torch 2.9 mentioned in https://github.com/pytorch/pytorch/issues/168167. Otherwise, you can reinstall cudnn with: ```bash pip install nvidia-cudnn-cu12==9.16.0.29 ``` -**Important:** We use [Megatron Bridge](https://github.com/NVIDIA-NeMo/Megatron-Bridge) to support multimodal models. However, not all Megatron arguments are passed through to Megatron Bridge — you may need to set some manually [here](https://github.com/THUDM/slime/blob/de84e10d468dcb726e1199fd6bd16aa9538aed09/slime/backends/megatron_utils/model_provider.py#L89) (currently only parallelization-related arguments are passed). For example, for Qwen3-VL-30B-A3B you may need to add: -```python -provider.moe_aux_loss_coeff = args.moe_aux_loss_coeff -provider.freeze_language_model = False -provider.freeze_vision_model = False -``` -

- Reward Plot + FSDP vs Megatron Reward Plot

## Data Preparation (For SFT Training) @@ -63,6 +55,9 @@ export WANDB_API_KEY=your_wandb_api_key # Megatron backend (default -> Qwen3-VL-8B-Instruct + Megatron) ./examples/geo3k_vlm/run_geo3k_vlm.sh +# FSDP backend +SLIME_SCRIPT_TRAIN_BACKEND=fsdp ./examples/geo3k_vlm/run_geo3k_vlm.sh + # With different model SLIME_SCRIPT_MODEL_NAME=Qwen3-VL-4B-Instruct ./examples/geo3k_vlm/run_geo3k_vlm.sh @@ -74,6 +69,7 @@ SLIME_SCRIPT_MODEL_NAME=Qwen3-VL-4B-Instruct ./examples/geo3k_vlm/run_geo3k_vlm. | Environment Variable | Default | Description | |---------------------|---------|-------------| +| `SLIME_SCRIPT_TRAIN_BACKEND` | `megatron` | Training backend (`megatron` or `fsdp`) | | `SLIME_SCRIPT_MODEL_NAME` | `Qwen3-VL-8B-Instruct` | Model name | | `SLIME_SCRIPT_DATASET_NAME` | `chenhegu/geo3k_imgurl` | HuggingFace dataset name | | `SLIME_SCRIPT_NUM_GPUS` | `8` | Number of GPUs | @@ -92,11 +88,6 @@ SLIME_SCRIPT_MODEL_NAME=Qwen3-VL-4B-Instruct ./examples/geo3k_vlm/run_geo3k_vlm. - `Qwen3-VL-30B-A3B-Thinking` - `Qwen3-VL-235B-A22B-Thinking` -#### Qwen3.5 Series -We provide an [example](./run_geo3k_qwen35.sh) for Qwen3.5-35B-A3B. To support other Qwen3.5 models, add a model config file in `scripts/models/` and update the model name and config path in the script accordingly. - -Since Megatron does not currently support packing for GDN, you must set `--qkv-format bshd`, `--micro-batch-size 1`, and remove `--use-dynamic-batch-size`. - ## Notes ### Reward Model Configuration diff --git a/examples/geo3k_vlm/run_geo3k_qwen35.sh b/examples/geo3k_vlm/run_geo3k_qwen35.sh deleted file mode 100644 index 8b402c8dfd..0000000000 --- a/examples/geo3k_vlm/run_geo3k_qwen35.sh +++ /dev/null @@ -1,209 +0,0 @@ -#!/bin/bash - -# Qwen3.5-35B-A3B VL RL training on geo3k dataset - -pip install -U transformers - -# IMPORTANT: This branch is specially modified for slime's current Megatron -# version and Qwen3.5 from the main Megatron Bridge. Other models are not verified! -# To restore the original Megatron Bridge, run: -# pip install git+https://github.com/fzyzcjy/Megatron-Bridge.git@dev_rl --no-build-isolation -# TODO: Remove this once Megatron & Megatron Bridge are upgraded upstream. -pip install git+https://github.com/coding-famer/Megatron-Bridge-slime.git@qwen35 --no-build-isolation - -# Configuration -TRAIN_BACKEND="megatron" -MODEL_NAME="Qwen3_5-35B-A3B" -DATASET_NAME=${SLIME_SCRIPT_DATASET_NAME:-"chenhegu/geo3k_imgurl"} -NUM_GPUS=${SLIME_SCRIPT_NUM_GPUS:-8} -DATASET_LOCAL_NAME=$(basename "$DATASET_NAME") - -MODEL_NAME_LOWER=$(echo "$MODEL_NAME" | tr '[:upper:]' '[:lower:]') - -# External Ray flag -if [ -z "$SLIME_SCRIPT_EXTERNAL_RAY" ] || [ "$SLIME_SCRIPT_EXTERNAL_RAY" = "0" ]; then - USE_EXTERNAL_RAY=0 -else - USE_EXTERNAL_RAY=1 -fi - -# Cleanup -pkill -9 sglang -sleep 3 -if [ "$USE_EXTERNAL_RAY" = "0" ]; then - ray stop --force - pkill -9 ray -fi -pkill -9 slime -sleep 3 -if [ "$USE_EXTERNAL_RAY" = "0" ]; then - pkill -9 ray -fi -pkill -9 slime -pkill -9 redis - -set -ex - -export PYTHONBUFFERED=16 - -# Detect NVLink -NVLINK_COUNT=$(nvidia-smi topo -m 2>/dev/null | grep -o 'NV[0-9][0-9]*' | wc -l) -if [ "$NVLINK_COUNT" -gt 0 ]; then - HAS_NVLINK=1 -else - HAS_NVLINK=0 -fi -echo "HAS_NVLINK: $HAS_NVLINK (detected $NVLINK_COUNT NVLink references)" - -# Download model and dataset -mkdir -p /root/models /root/datasets -if [ ! -d "/root/models/${MODEL_NAME}" ]; then - hf download Qwen/${MODEL_NAME} --local-dir /root/models/${MODEL_NAME} -fi -if [ ! -d "/root/datasets/${DATASET_LOCAL_NAME}" ]; then - hf download --repo-type dataset ${DATASET_NAME} --local-dir /root/datasets/${DATASET_LOCAL_NAME} -fi - -# Common args -CKPT_ARGS=( - --hf-checkpoint /root/models/${MODEL_NAME} - --load /root/models/${MODEL_NAME} - --megatron-to-hf-mode bridge -) - -ROLLOUT_ARGS=( - --prompt-data /root/datasets/${DATASET_LOCAL_NAME}/train.parquet - --input-key problem - --label-key answer - --apply-chat-template - --rollout-shuffle - --rm-type deepscaler - --num-rollout 3000 - --rollout-batch-size 64 - --n-samples-per-prompt 8 - --rollout-max-response-len 4096 - --rollout-temperature 0.8 - --global-batch-size 512 -) - -# required for vlm datasets -MULTIMODAL_KEYS='{"image": "images"}' - -EVAL_ARGS=( - --eval-interval 20 - --eval-prompt-data ${DATASET_LOCAL_NAME} /root/datasets/${DATASET_LOCAL_NAME}/test.parquet - --n-samples-per-eval-prompt 1 - --eval-max-response-len 4096 -) - -GRPO_ARGS=( - --advantage-estimator grpo - --kl-loss-coef 0.00 - --kl-loss-type low_var_kl - --kl-coef 0.00 - --entropy-coef 0.00 - --eps-clip 0.2 - --eps-clip-high 0.28 -) - -OPTIMIZER_ARGS=( - --optimizer adam - --lr 1e-6 - --lr-decay-style constant - --weight-decay 0.1 - --adam-beta1 0.9 - --adam-beta2 0.98 -) - -SGLANG_ARGS=( - --rollout-num-gpus-per-engine 8 - --sglang-mem-fraction-static 0.7 - --sglang-ep-size 8 - --sglang-cuda-graph-bs 1 2 4 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248 256 - - # MTP speculative decoding - --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 2 - --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 3 - - --sglang-max-running-requests 512 -) - -# Wandb args (only if WANDB_API_KEY is set) -if [ -n "$WANDB_API_KEY" ]; then - WANDB_ARGS=( - --use-wandb - --wandb-project slime-geo3k-vlm - --wandb-group ${MODEL_NAME_LOWER}-${TRAIN_BACKEND} - --wandb-key ${WANDB_API_KEY} - --disable-wandb-random-suffix - ) -else - WANDB_ARGS=() -fi - -MISC_ARGS=( - --colocate -) - -# Backend-specific args -# megatron backend -BACKEND_ARGS=( - --train-backend megatron - # Qwen3.5-35B-A3B has num_query_groups = 2 - --tensor-model-parallel-size 2 - --sequence-parallel - --pipeline-model-parallel-size 1 - --context-parallel-size 1 - --expert-model-parallel-size 8 - --expert-tensor-parallel-size 1 - --recompute-granularity full - --recompute-method uniform - --recompute-num-layers 1 - --attention-dropout 0.0 - --hidden-dropout 0.0 - --accumulate-allreduce-grads-in-fp32 - --attention-softmax-in-fp32 - --attention-backend flash - - # Packing is not supported for GDN currently - --qkv-format bshd - --micro-batch-size 1 -) - -SLIME_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." &>/dev/null && pwd)" -source "${SLIME_DIR}/scripts/models/qwen3.5-35B-A3B.sh" - -# Start Ray if not using external Ray -if [ "$USE_EXTERNAL_RAY" = "0" ]; then - export MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} - export no_proxy="127.0.0.1,${MASTER_ADDR}" - ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus ${NUM_GPUS} --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 -fi - -# Build runtime env -RUNTIME_ENV_JSON="{ - \"env_vars\": { - \"PYTHONPATH\": \"/root/Megatron-LM/\", - \"CUDA_DEVICE_MAX_CONNECTIONS\": \"1\", - \"NCCL_NVLS_ENABLE\": \"${HAS_NVLINK}\" - } -}" - -ray job submit --address="http://127.0.0.1:8265" \ - --runtime-env-json="${RUNTIME_ENV_JSON}" \ - -- python3 train.py \ - --actor-num-nodes 1 \ - --actor-num-gpus-per-node ${NUM_GPUS} \ - --multimodal-keys "${MULTIMODAL_KEYS}" \ - ${MODEL_ARGS[@]} \ - ${CKPT_ARGS[@]} \ - ${ROLLOUT_ARGS[@]} \ - ${EVAL_ARGS[@]} \ - ${GRPO_ARGS[@]} \ - ${OPTIMIZER_ARGS[@]} \ - ${SGLANG_ARGS[@]} \ - ${WANDB_ARGS[@]} \ - ${BACKEND_ARGS[@]} \ - ${MISC_ARGS[@]} diff --git a/examples/geo3k_vlm/run_geo3k_vlm.sh b/examples/geo3k_vlm/run_geo3k_vlm.sh index 098a329906..d4e0c89234 100644 --- a/examples/geo3k_vlm/run_geo3k_vlm.sh +++ b/examples/geo3k_vlm/run_geo3k_vlm.sh @@ -1,11 +1,13 @@ #!/bin/bash # Qwen3 VL RL training on geo3k dataset +# Supports both megatron and fsdp training backends # Usage: +# SLIME_SCRIPT_TRAIN_BACKEND=fsdp ./run_geo3k_vlm.sh # SLIME_SCRIPT_MODEL_NAME=Qwen3-VL-2B-Instruct ./run_geo3k_vlm.sh # Configuration -TRAIN_BACKEND="megatron" +TRAIN_BACKEND=${SLIME_SCRIPT_TRAIN_BACKEND:-"megatron"} MODEL_NAME=${SLIME_SCRIPT_MODEL_NAME:-"Qwen3-VL-8B-Instruct"} DATASET_NAME=${SLIME_SCRIPT_DATASET_NAME:-"chenhegu/geo3k_imgurl"} NUM_GPUS=${SLIME_SCRIPT_NUM_GPUS:-8} @@ -154,34 +156,46 @@ MISC_ARGS=( ) # Backend-specific args -# megatron backend -BACKEND_ARGS=( - --train-backend megatron - --load /root/models/${MODEL_NAME} - --tensor-model-parallel-size 4 - --sequence-parallel - --pipeline-model-parallel-size 1 - --context-parallel-size 1 - --expert-model-parallel-size 1 - --expert-tensor-parallel-size 1 - --recompute-granularity full - --recompute-method uniform - --recompute-num-layers 1 - --use-dynamic-batch-size - --max-tokens-per-gpu 4096 - --attention-dropout 0.0 - --hidden-dropout 0.0 - --accumulate-allreduce-grads-in-fp32 - --attention-softmax-in-fp32 - --attention-backend flash - --megatron-to-hf-mode bridge -) - -# get MODEL_ARGS from scripts/models for megatron backend -SLIME_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." &>/dev/null && pwd)" -MODEL_ARGS_FILE=$(echo "$MODEL_NAME" | sed 's/-Instruct//g; s/-Thinking//g; s/Qwen3-VL-/qwen3-/g; s/-2B/-1.7B/g') -# VL models require rotary-base 5000000 -MODEL_ARGS_ROTARY_BASE=5000000 source "${SLIME_DIR}/scripts/models/${MODEL_ARGS_FILE}.sh" +if [ "$TRAIN_BACKEND" = "fsdp" ]; then + BACKEND_ARGS=( + --train-backend fsdp + --gradient-checkpointing + --sglang-attention-backend fa3 + --attn-implementation flash_attention_3 + --update-weight-buffer-size 536870912 + ) + MODEL_ARGS=() +else + # megatron backend (default) + BACKEND_ARGS=( + --train-backend megatron + --load /root/models/${MODEL_NAME} + --tensor-model-parallel-size 4 + --sequence-parallel + --pipeline-model-parallel-size 1 + --context-parallel-size 1 + --expert-model-parallel-size 1 + --expert-tensor-parallel-size 1 + --recompute-granularity full + --recompute-method uniform + --recompute-num-layers 1 + --use-dynamic-batch-size + --max-tokens-per-gpu 4096 + --attention-dropout 0.0 + --hidden-dropout 0.0 + --accumulate-allreduce-grads-in-fp32 + --attention-softmax-in-fp32 + --attention-backend flash + --megatron-to-hf-mode bridge + ) + + # get MODEL_ARGS from scripts/models for megatron backend + SLIME_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." &>/dev/null && pwd)" + MODEL_ARGS_FILE=$(echo "$MODEL_NAME" | sed 's/-Instruct//g; s/-Thinking//g; s/Qwen3-VL-/qwen3-/g; s/-2B/-1.7B/g') + # VL models require rotary-base 5000000 + MODEL_ARGS_ROTARY_BASE=5000000 source "${SLIME_DIR}/scripts/models/${MODEL_ARGS_FILE}.sh" + +fi # Start Ray if not using external Ray if [ "$USE_EXTERNAL_RAY" = "0" ]; then diff --git a/examples/geo3k_vlm/run_geo3k_vlm_sft.sh b/examples/geo3k_vlm/run_geo3k_vlm_sft.sh index 06b16d5f92..e2cf44d7cb 100644 --- a/examples/geo3k_vlm/run_geo3k_vlm_sft.sh +++ b/examples/geo3k_vlm/run_geo3k_vlm_sft.sh @@ -1,4 +1,4 @@ -TRAIN_BACKEND="megatron" +TRAIN_BACKEND=${SLIME_SCRIPT_TRAIN_BACKEND:-"megatron"} MODEL_NAME=${SLIME_SCRIPT_MODEL_NAME:-"Qwen3-VL-8B-Instruct"} DATASET_NAME=${SLIME_SCRIPT_DATASET_NAME:-"chenhegu/geo3k_imgurl"} NUM_GPUS=${SLIME_SCRIPT_NUM_GPUS:-8} @@ -82,6 +82,7 @@ SFT_ARGS=( --rollout-function-path slime.rollout.sft_rollout.generate_rollout --prompt-data /root/datasets/${DATASET_LOCAL_NAME}/train_formatted.parquet --input-key messages + --apply-chat-template --rollout-shuffle --num-epoch 3000 --rollout-batch-size 128 @@ -121,33 +122,42 @@ else fi # Backend-specific args -# megatron backend -BACKEND_ARGS=( - --train-backend megatron - --tensor-model-parallel-size 4 - --sequence-parallel - --pipeline-model-parallel-size 1 - --context-parallel-size 1 - --expert-model-parallel-size 1 - --expert-tensor-parallel-size 1 - --recompute-granularity full - --recompute-method uniform - --recompute-num-layers 1 - --use-dynamic-batch-size - --max-tokens-per-gpu 4096 - --attention-dropout 0.0 - --hidden-dropout 0.0 - --accumulate-allreduce-grads-in-fp32 - --attention-softmax-in-fp32 - --attention-backend flash - --megatron-to-hf-mode bridge -) +if [ "$TRAIN_BACKEND" = "fsdp" ]; then + BACKEND_ARGS=( + --train-backend fsdp + --gradient-checkpointing + --attn-implementation flash_attention_3 + --update-weight-buffer-size 536870912 + ) +else + # megatron backend (default) + BACKEND_ARGS=( + --train-backend megatron + --tensor-model-parallel-size 4 + --sequence-parallel + --pipeline-model-parallel-size 1 + --context-parallel-size 1 + --expert-model-parallel-size 1 + --expert-tensor-parallel-size 1 + --recompute-granularity full + --recompute-method uniform + --recompute-num-layers 1 + --use-dynamic-batch-size + --max-tokens-per-gpu 4096 + --attention-dropout 0.0 + --hidden-dropout 0.0 + --accumulate-allreduce-grads-in-fp32 + --attention-softmax-in-fp32 + --attention-backend flash + --megatron-to-hf-mode bridge + ) -# get MODEL_ARGS from scripts/models for megatron backend -SLIME_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." &>/dev/null && pwd)" -MODEL_ARGS_FILE=$(echo "$MODEL_NAME" | sed 's/-Instruct//g; s/-Thinking//g; s/Qwen3-VL-/qwen3-/g; s/-2B/-1.7B/g') -# VL models require rotary-base 5000000 -MODEL_ARGS_ROTARY_BASE=5000000 source "${SLIME_DIR}/scripts/models/${MODEL_ARGS_FILE}.sh" + # get MODEL_ARGS from scripts/models for megatron backend + SLIME_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." &>/dev/null && pwd)" + MODEL_ARGS_FILE=$(echo "$MODEL_NAME" | sed 's/-Instruct//g; s/-Thinking//g; s/Qwen3-VL-/qwen3-/g; s/-2B/-1.7B/g') + # VL models require rotary-base 5000000 + MODEL_ARGS_ROTARY_BASE=5000000 source "${SLIME_DIR}/scripts/models/${MODEL_ARGS_FILE}.sh" +fi # Start Ray if not using external Ray if [ "$USE_EXTERNAL_RAY" = "0" ]; then diff --git a/examples/geo3k_vlm_multi_turn/README.md b/examples/geo3k_vlm_multi_turn/README.md index 23e88e2025..1947e3cad9 100644 --- a/examples/geo3k_vlm_multi_turn/README.md +++ b/examples/geo3k_vlm_multi_turn/README.md @@ -30,6 +30,7 @@ The reward model is the default math RM. export WANDB_API_KEY=... export SLIME_SCRIPT_MODEL_NAME=Qwen3-VL-2B-Instruct export SLIME_SCRIPT_NUM_GPUS=4 +export SLIME_SCRIPT_TRAIN_BACKEND=fsdp # 2) Download the dataset hf download --repo-type dataset VeraIsHere/geo3k_imgurl_processed --local-dir /root/datasets/geo3k_imgurl_processed diff --git a/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn.py b/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn.py index 8481735cec..bc47d65a0d 100644 --- a/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn.py +++ b/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn.py @@ -15,6 +15,8 @@ NUM_GPUS = int(os.environ.get("SLIME_SCRIPT_NUM_GPUS", "4")) EXTERNAL_RAY = int(os.environ.get("SLIME_SCRIPT_EXTERNAL_RAY", "0")) +TRAIN_BACKEND = os.environ.get("SLIME_SCRIPT_TRAIN_BACKEND", "fsdp").lower() +assert TRAIN_BACKEND in {"fsdp", "megatron"} DATASET_NAME = "VeraIsHere/geo3k_imgurl_processed" DATA_ROOT = "/root/datasets/geo3k_imgurl_processed" @@ -102,7 +104,15 @@ def execute(): f"--sglang-cuda-graph-bs {' '.join(map(str, [1, 2, 4, 8] + list(range(16, 257, 8))))} " ) - backend_args = ( + fsdp_args = ( + "--train-backend fsdp " + "--gradient-checkpointing " + "--sglang-attention-backend fa3 " + "--attn-implementation flash_attention_3 " + "--update-weight-buffer-size 536870912 " + ) + + megatron_args = ( "--train-backend megatron " f"--load /root/models/{MODEL_NAME} " "--tensor-model-parallel-size 4 " @@ -124,13 +134,18 @@ def execute(): "--megatron-to-hf-mode bridge " ) - megatron_model_type = get_megatron_model_type(MODEL_NAME) - os.environ["MODEL_ARGS_ROTARY_BASE"] = "5000000" - misc_args = ( "--actor-num-nodes 1 " f"--actor-num-gpus-per-node {NUM_GPUS} " f"--rollout-num-gpus {NUM_GPUS} " "--colocate " ) + if TRAIN_BACKEND == "megatron": + backend_args = megatron_args + megatron_model_type = get_megatron_model_type(MODEL_NAME) + os.environ["MODEL_ARGS_ROTARY_BASE"] = "5000000" + else: + backend_args = fsdp_args + megatron_model_type = None + train_args = ( f"{ckpt_args} " f"{rollout_args} " diff --git a/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_grpo_npu.py b/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_grpo_npu.py deleted file mode 100644 index da47268341..0000000000 --- a/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_grpo_npu.py +++ /dev/null @@ -1,154 +0,0 @@ -import os - -from slime.utils.external_utils.command_utils import execute_train_npu - -MODEL_NAME = os.environ.get("SLIME_SCRIPT_MODEL_NAME", "Qwen3-VL-2B-Instruct") -assert MODEL_NAME in { - "Qwen3-VL-2B-Instruct", - "Qwen3-VL-4B-Instruct", - "Qwen3-VL-8B-Instruct", - "Qwen3-VL-2B-Thinking", - "Qwen3-VL-4B-Thinking", - "Qwen3-VL-8B-Thinking", -} - -EXTERNAL_RAY = int(os.environ.get("SLIME_SCRIPT_EXTERNAL_RAY", "0")) -TRAIN_BACKEND = os.environ.get("SLIME_SCRIPT_TRAIN_BACKEND", "fsdp").lower() -assert TRAIN_BACKEND in {"fsdp", "megatron"} - -DATASET_NAME = "VeraIsHere/geo3k_imgurl_processed" -DATA_ROOT = "/path/to/datasets/geo3k_imgurl_processed" -TRAIN_DATA_PATH = os.path.join(DATA_ROOT, "train.parquet") - - -def get_megatron_model_type(model_name: str) -> str: - model_type = model_name.replace("-Instruct", "").replace("-Thinking", "") - model_type = model_type.replace("Qwen3-VL-", "qwen3-") - return model_type.replace("-2B", "-1.7B") - - -def execute(): - ckpt_args = f"--hf-checkpoint /path/to/model/checkpoints/{MODEL_NAME} " - - wandb_args = ( - ( - "--use-wandb " - "--wandb-project slime-dev " - "--wandb-group geo3k_vlm_multi_turn " - f"--wandb-key '{wandb_api_key}' " - ) - if (wandb_api_key := os.environ.get("WANDB_API_KEY")) - else "" - ) - - rollout_args = ( - f"--prompt-data {TRAIN_DATA_PATH} " - "--input-key problem " - "--label-key answer " - '--multimodal-keys \'{"image": "images"}\' ' - "--rm-type math " - "--apply-chat-template " - "--custom-generate-function-path examples.geo3k_vlm_multi_turn.rollout.generate " - "--custom-config-path examples/geo3k_vlm_multi_turn/geo3k_vlm_multi_turn_config.yaml " - "--rollout-shuffle " - "--num-rollout 3000 " - "--rollout-batch-size 32 " - "--n-samples-per-prompt 8 " - "--rollout-max-response-len 4096 " - "--rollout-temperature 1 " - "--global-batch-size 256 " - ) - - grpo_args = ( - "--advantage-estimator grpo " - "--kl-loss-coef 0.00 " - "--kl-loss-type low_var_kl " - "--kl-coef 0.00 " - "--entropy-coef 0.00 " - "--eps-clip 0.2 " - "--eps-clip-high 0.28 " - "--use-kl-loss " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - "--optimizer-cpu-offload " - "--overlap-cpu-optimizer-d2h-h2d " - "--use-precision-aware-optimizer " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 1 " - "--sglang-mem-fraction-static 0.6 " - f"--sglang-cuda-graph-bs {' '.join(map(str, [4, 8] + list(range(16, 257, 8))))} " - "--sglang-device npu " - "--sglang-disable-radix-cache " - "--sglang-chunked-prefill-size 32768 " - "--sglang-max-prefill-tokens 4000 " - "--sglang-max-total-tokens 327680 " - ) - - megatron_args = ( - "--train-backend megatron " - f"--load /path/to/model/checkpoints/{MODEL_NAME} " - f"--ref-load /path/to/model/checkpoints/{MODEL_NAME} " - "--tensor-model-parallel-size 4 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 1 " - "--expert-model-parallel-size 1 " - "--expert-tensor-parallel-size 1 " - "--recompute-granularity full " - "--recompute-method uniform " - "--recompute-num-layers 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 16384 " - "--balance-data " - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--megatron-to-hf-mode bridge " - ) - - misc_args = ( - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " - "--rollout-num-gpus 8 " - "--no-gradient-accumulation-fusion " - "--use-flash-attn " - ) - - if TRAIN_BACKEND == "megatron": - backend_args = megatron_args - megatron_model_type = get_megatron_model_type(MODEL_NAME) - os.environ["MODEL_ARGS_ROTARY_BASE"] = "5000000" - else: - exit() - - train_args = ( - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{grpo_args} " - f"{sglang_args} " - f"{backend_args} " - f"{misc_args} " - f"{wandb_args} " - ) - - execute_train_npu( - train_args=train_args, - megatron_model_type=megatron_model_type, - extra_env_vars=({"WANDB_API_KEY": os.environ["WANDB_API_KEY"]} if os.environ.get("WANDB_API_KEY") else {}), - ) - - -if __name__ == "__main__": - execute() diff --git a/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_ppo_npu.py b/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_ppo_npu.py deleted file mode 100644 index ca873e9c12..0000000000 --- a/examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_ppo_npu.py +++ /dev/null @@ -1,168 +0,0 @@ -import os -import tempfile - -from slime.utils.external_utils.command_utils import execute_train_npu - -MODEL_NAME = os.environ.get("SLIME_SCRIPT_MODEL_NAME", "Qwen3-VL-2B-Instruct") -assert MODEL_NAME in { - "Qwen3-VL-2B-Instruct", - "Qwen3-VL-4B-Instruct", - "Qwen3-VL-8B-Instruct", - "Qwen3-VL-2B-Thinking", - "Qwen3-VL-4B-Thinking", - "Qwen3-VL-8B-Thinking", -} - -EXTERNAL_RAY = int(os.environ.get("SLIME_SCRIPT_EXTERNAL_RAY", "0")) -TRAIN_BACKEND = os.environ.get("SLIME_SCRIPT_TRAIN_BACKEND", "fsdp").lower() -assert TRAIN_BACKEND in {"fsdp", "megatron"} - -DATASET_NAME = "VeraIsHere/geo3k_imgurl_processed" -DATA_ROOT = "/path/to/datasets/geo3k_imgurl_processed" -TRAIN_DATA_PATH = os.path.join(DATA_ROOT, "train.parquet") - - -def get_megatron_model_type(model_name: str) -> str: - model_type = model_name.replace("-Instruct", "").replace("-Thinking", "") - model_type = model_type.replace("Qwen3-VL-", "qwen3-") - return model_type.replace("-2B", "-1.7B") - - -def execute(): - megatron_config = tempfile.NamedTemporaryFile("w", suffix=".yaml", delete=False) - megatron_config.write( - """ -megatron: - - name: default - role: critic - overrides: - lr: 1e-5 -""" - ) - megatron_config.close() - - ckpt_args = f"--hf-checkpoint /path/to/model/checkpoints/{MODEL_NAME} " - - wandb_args = ( - ( - "--use-wandb " - "--wandb-project slime-dev " - "--wandb-group geo3k_vlm_multi_turn " - f"--wandb-key '{wandb_api_key}' " - ) - if (wandb_api_key := os.environ.get("WANDB_API_KEY")) - else "" - ) - - rollout_args = ( - f"--prompt-data {TRAIN_DATA_PATH} " - "--input-key problem " - "--label-key answer " - '--multimodal-keys \'{"image": "images"}\' ' - "--rm-type math " - "--apply-chat-template " - "--custom-generate-function-path examples.geo3k_vlm_multi_turn.rollout.generate " - "--custom-config-path examples/geo3k_vlm_multi_turn/geo3k_vlm_multi_turn_config.yaml " - "--rollout-shuffle " - "--num-rollout 3000 " - "--rollout-batch-size 32 " - "--n-samples-per-prompt 8 " - "--rollout-max-response-len 4096 " - "--rollout-temperature 1 " - "--global-batch-size 256 " - ) - - ppo_args = ( - "--advantage-estimator ppo " - "--kl-loss-coef 0.00 " - "--kl-loss-type k1 " - "--kl-coef 0.00 " - "--entropy-coef 0.00 " - "--eps-clip 4e-4 " - "--num-critic-only-steps 1 " - "--normalize-advantages " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - "--optimizer-cpu-offload " - "--overlap-cpu-optimizer-d2h-h2d " - "--use-precision-aware-optimizer " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 1 " - "--sglang-mem-fraction-static 0.6 " - f"--sglang-cuda-graph-bs {' '.join(map(str, [4, 8] + list(range(16, 257, 8))))} " - "--sglang-device npu " - "--sglang-disable-radix-cache " - "--sglang-chunked-prefill-size 32768 " - "--sglang-max-prefill-tokens 4000 " - "--sglang-max-total-tokens 327680 " - ) - - megatron_args = ( - "--train-backend megatron " - f"--load /path/to/model/checkpoints/{MODEL_NAME} " - f"--ref-load /path/to/model/checkpoints/{MODEL_NAME} " - "--tensor-model-parallel-size 4 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 1 " - "--expert-model-parallel-size 1 " - "--expert-tensor-parallel-size 1 " - "--recompute-granularity full " - "--recompute-method uniform " - "--recompute-num-layers 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 16384 " - "--balance-data " - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--megatron-to-hf-mode bridge " - ) - - misc_args = ( - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " - "--rollout-num-gpus 8 " - "--no-gradient-accumulation-fusion " - "--use-flash-attn " - ) - - if TRAIN_BACKEND == "megatron": - backend_args = megatron_args - megatron_model_type = get_megatron_model_type(MODEL_NAME) - os.environ["MODEL_ARGS_ROTARY_BASE"] = "5000000" - else: - exit() - - train_args = ( - f"--megatron-config-path {megatron_config.name} " - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{ppo_args} " - f"{sglang_args} " - f"{backend_args} " - f"{misc_args} " - f"{wandb_args} " - ) - - execute_train_npu( - train_args=train_args, - megatron_model_type=megatron_model_type, - extra_env_vars=({"WANDB_API_KEY": os.environ["WANDB_API_KEY"]} if os.environ.get("WANDB_API_KEY") else {}), - ) - - -if __name__ == "__main__": - execute() diff --git a/examples/geo3k_vlm_multi_turn/run_grpo_npu.sh b/examples/geo3k_vlm_multi_turn/run_grpo_npu.sh deleted file mode 100644 index 51ab0b99dd..0000000000 --- a/examples/geo3k_vlm_multi_turn/run_grpo_npu.sh +++ /dev/null @@ -1,15 +0,0 @@ -export SLIME_SCRIPT_MODEL_NAME=Qwen3-VL-8B-Instruct -export SLIME_SCRIPT_TRAIN_BACKEND=megatron -export PYTORCH_ALLOC_CONF=expandable_segments:True -export PYTHONPATH="/root/Megatron-Bridge/src:/root/Megatron-LM/:/root/sglang/python:$PYTHONPATH" -export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 -export CUDA_DEVICE_MAX_CONNECTIONS=1 -export RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICES=1 -export HCCL_HOST_SOCKET_PORT_RANGE=60000-60050 -export HCCL_NPU_SOCKET_PORT_RANGE=61000-61050 -export HYDRA_FULL_ERROR=1 -export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True -export MASTER_PORT=$(shuf -i 20000-65000 -n 1) # or any free port - - -python examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_grpo_npu.py diff --git a/examples/geo3k_vlm_multi_turn/run_ppo_npu.sh b/examples/geo3k_vlm_multi_turn/run_ppo_npu.sh deleted file mode 100644 index dc1b919a8b..0000000000 --- a/examples/geo3k_vlm_multi_turn/run_ppo_npu.sh +++ /dev/null @@ -1,15 +0,0 @@ -export SLIME_SCRIPT_MODEL_NAME=Qwen3-VL-8B-Instruct -export SLIME_SCRIPT_TRAIN_BACKEND=megatron -export PYTORCH_ALLOC_CONF=expandable_segments:True -export PYTHONPATH="/root/Megatron-Bridge/src:/root/Megatron-LM/:/root/sglang/python:$PYTHONPATH" -export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 -export CUDA_DEVICE_MAX_CONNECTIONS=1 -export RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICES=1 -export HCCL_HOST_SOCKET_PORT_RANGE=60000-60050 -export HCCL_NPU_SOCKET_PORT_RANGE=61000-61050 -export HYDRA_FULL_ERROR=1 -export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True -export MASTER_PORT=$(shuf -i 20000-65000 -n 1) # or any free port - - -python examples/geo3k_vlm_multi_turn/run_geo3k_vlm_multi_turn_ppo_npu.py diff --git a/examples/multi_agent/agent_system.py b/examples/multi_agent/agent_system.py index 5ccb266079..065f868d51 100644 --- a/examples/multi_agent/agent_system.py +++ b/examples/multi_agent/agent_system.py @@ -115,10 +115,10 @@ def __init__(self): async def rewrite(self, args, problem_statement, previous_solutions: list[str]) -> str: """Generates the rewrited solution.""" - # Build the prompt template dynamically. + # 动态生成模板 template = generate_rewriter_template(len(previous_solutions)) - # Populate the template arguments. + # 构建参数字典 format_params = {"problem_statement": problem_statement} for i, solution in enumerate(previous_solutions): format_params[f"solution{i+1}"] = solution @@ -136,10 +136,10 @@ def __init__(self): async def select(self, args, problem_statement, candidate_solutions: list[str]) -> str: """Generates the rewrited solution.""" - # Build the prompt template dynamically. + # 动态生成模板 template = generate_select_template(len(candidate_solutions)) - # Populate the template arguments. + # 构建参数字典 format_params = {"problem_statement": problem_statement} for i, solution in enumerate(candidate_solutions): format_params[f"solution{i+1}"] = solution @@ -170,7 +170,7 @@ async def rewrite_worker(args, previous_solutions, problem_statement, worker_id) async def solver_worker(args, problem_statement, worker_id): """ - Run a single solver pipeline. + 单组 solver 流程。 """ try: @@ -186,10 +186,10 @@ async def solver_worker(args, problem_statement, worker_id): async def run_agent_system(args, sample): """ - Run `num_parallel` pipelines concurrently. + 并发运行 num_parallel 组 pipeline。 """ - args = deepcopy(args) # Deep copy args because rollout_with_multi_agents mutates them. + args = deepcopy(args) # 深拷贝 args,因为 args 在 rollout_with_multi_agents 中会被修改 args.sample = sample args.results_dict = {"solver": [], "rewriter": [], "selector": []} @@ -219,7 +219,7 @@ def reward_adjustment(samples, reward_weight): ] rewrited_solutions_raw = await asyncio.gather(*tasks, return_exceptions=True) - # Filter out failed tasks and keep only valid rewritten solutions. + # 处理异常结果 rewrited_solutions = [] for _i, result in enumerate(rewrited_solutions_raw): if isinstance(result, str): @@ -258,8 +258,7 @@ def reward_adjustment(samples, reward_weight): args.results_dict["selector"][0].reward = sample.reward break - ## If the final answer is correct, add a positive bonus to all rewards. - ## Otherwise, add a negative penalty to all rewards. + ## 如果最终答案正确,对所有reward添加正向的奖励;如果最终答案不正确,对所有reward添加负向的惩罚。 if args.results_dict["selector"][0].reward == 1: reward_adjustment(args.results_dict["solver"], args.correct_reward_weight) reward_adjustment(args.results_dict["rewriter"], args.correct_reward_weight) diff --git a/examples/multi_agent/prompts.py b/examples/multi_agent/prompts.py index a79047258f..28ae411f7e 100644 --- a/examples/multi_agent/prompts.py +++ b/examples/multi_agent/prompts.py @@ -1,4 +1,4 @@ -## Prompt templates used to generate different prompt variants. +## 定义了一些 prompts 的模板,用于生成不同的 prompts SOLVER_PROMPT_TEMPLATE = """{problem_statement}""" diff --git a/examples/retool/generate_with_retool.py b/examples/retool/generate_with_retool.py index 339b79dd45..a090af63d7 100644 --- a/examples/retool/generate_with_retool.py +++ b/examples/retool/generate_with_retool.py @@ -216,15 +216,6 @@ async def generate(args, sample: Sample, sampling_params) -> Sample: """Custom generation function supporting tool calls""" assert not args.partial_rollout, "Partial rollout is not supported for " "this function at the moment." - # Retried samples (previously aborted / partial) arrive here with stale - # rollout state from the first attempt. Clear it so this generation starts - # clean; otherwise the concatenation below appends new tokens to old ones - # and downstream `slice_log_prob_with_cp` sees a length mismatch. - sample.rollout_log_probs = None - sample.response = "" - sample.response_length = 0 - sample.loss_mask = None - state = GenerateState(args) url = f"http://{args.sglang_router_ip}:{args.sglang_router_port}/generate" @@ -238,37 +229,22 @@ async def generate(args, sample: Sample, sampling_params) -> Sample: loss_masks = [] tool_call_count = 0 # Track actual tool call rounds - if args.rollout_max_context_len is not None: - max_context_length = args.rollout_max_context_len - else: - max_context_length = args.context_parallel_size * args.max_tokens_per_gpu - for turn in range(TOOL_CONFIGS["max_turns"]): # Check if total length exceeds max context length total_length = len(prompt_tokens_ids) + len(response_token_ids) + if args.rollout_max_context_len is not None: + max_context_length = args.rollout_max_context_len + else: + max_context_length = args.context_parallel_size * args.max_tokens_per_gpu if total_length >= max_context_length: sample.status = Sample.Status.TRUNCATED break - # Clamp per-turn max_new_tokens to the remaining context budget so a - # single turn cannot push total_length past max_context_length. Without - # this, a turn can append up to rollout_max_response_len tokens on top - # of a total that was just barely under the cap, producing samples - # that exceed the training-side max_tokens_per_gpu * cp_size budget - # and crash the partition/batch code (asserts or OOMs on an oversized - # partition). - remaining_budget = max_context_length - total_length - per_turn_sampling_params = dict(sampling_params) - per_turn_sampling_params["max_new_tokens"] = min( - sampling_params.get("max_new_tokens", remaining_budget), - remaining_budget, - ) - # Use token IDs instead of text current_token_ids = prompt_tokens_ids + response_token_ids payload = { "input_ids": current_token_ids, - "sampling_params": per_turn_sampling_params, + "sampling_params": sampling_params, "return_logprob": True, # Request log probabilities for training } @@ -309,14 +285,9 @@ async def generate(args, sample: Sample, sampling_params) -> Sample: sample.rollout_log_probs += cur_log_probs else: - # sglang returned text but no output_token_logprobs — we cannot - # recover per-token logprobs for this turn, which would desync - # rollout_log_probs from response_token_ids and blow up - # `slice_log_prob_with_cp` downstream. Abort the sample so the - # fully_async rollout manager returns the whole group to the - # buffer for retry instead of poisoning the trainer. - sample.status = Sample.Status.ABORTED - return sample + cur_response = output["text"] + cur_response = postprocess_responses(cur_response) + cur_response_token_ids = state.tokenizer(cur_response, add_special_tokens=False)["input_ids"] response += cur_response response_token_ids += cur_response_token_ids @@ -350,26 +321,6 @@ async def generate(args, sample: Sample, sampling_params) -> Sample: sample.rollout_log_probs ), f"Token/logp length mismatch at turn {turn}: {len(response_token_ids)} tokens vs {len(sample.rollout_log_probs)} logps" - # Tool output is appended verbatim and can push total_length past - # max_context_length (the per-turn generation was clamped to the - # remaining budget, but tool output is unconstrained). Trim tail - # tokens so the final sample fits the training budget exactly. - overflow = len(prompt_tokens_ids) + len(response_token_ids) - max_context_length - if overflow > 0: - response_token_ids = response_token_ids[:-overflow] - loss_masks = loss_masks[:-overflow] - if sample.rollout_log_probs is not None: - sample.rollout_log_probs = sample.rollout_log_probs[:-overflow] - # Resync the text field from the trimmed token list so - # reward_func's `sample.prompt + sample.response` matches what - # the model was actually trained on. decode(tokenize(text)) can - # be lossy on some tokenizers (whitespace / special-token - # collapse), but reward_func's regex is whitespace-robust and - # the trainer sees tokens, not text — so the drift is safe. - response = state.tokenizer.decode(response_token_ids) - sample.status = Sample.Status.TRUNCATED - break - if tool_call_count >= TOOL_CONFIGS["max_tool_calls"]: break diff --git a/examples/search-r1/README_zh.md b/examples/search-r1/README_zh.md index f7d9fbb0d9..a0d273a278 100644 --- a/examples/search-r1/README_zh.md +++ b/examples/search-r1/README_zh.md @@ -47,7 +47,7 @@ python $WORK_DIR/scripts/data_process/qa_search_test_merge.py \ ```bash # hf checkpoint -hf download Qwen/Qwen2.5-3B --local-dir /root/Qwen2.5-3B +huggingface-cli download Qwen/Qwen2.5-3B --local-dir /root/Qwen2.5-3B # mcore checkpoint cd /root/slime diff --git a/examples/strands_sglang/README.md b/examples/strands_sglang/README.md index 1d5864a47d..0101fc0e69 100644 --- a/examples/strands_sglang/README.md +++ b/examples/strands_sglang/README.md @@ -32,7 +32,7 @@ This example connects `slime` with [`strands-sglang`](https://github.com/horizon ```bash # hf checkpoint -hf download Qwen/Qwen3-8B --local-dir /root/models/Qwen/Qwen3-8B +huggingface-cli download Qwen/Qwen3-8B --local-dir /root/models/Qwen/Qwen3-8B # mcore checkpoint cd /root/slime diff --git a/examples/strands_sglang/generate_with_strands.py b/examples/strands_sglang/generate_with_strands.py index 42484e1298..efeb13e104 100644 --- a/examples/strands_sglang/generate_with_strands.py +++ b/examples/strands_sglang/generate_with_strands.py @@ -1,9 +1,8 @@ -# Updated with strands-sglang 0.3.2 import logging from camel.interpreters import SubprocessInterpreter from strands import Agent, tool -from strands_sglang import SGLangModel, ToolLimiter, get_client_from_slime_args +from strands_sglang import SGLangClient, SGLangModel, ToolLimiter from strands_sglang.tool_parsers import HermesToolParser from slime.rollout.rm_hub.math_dapo_utils import compute_score as math_dapo_compute_score @@ -24,6 +23,16 @@ MAX_TOOL_ITERS = 5 MAX_TOOL_CALLS = None # No limit +_client_cache: dict[str, SGLangClient] = {} + + +def get_client(args) -> SGLangClient: + """Get shared client for connection pooling.""" + base_url = f"http://{args.sglang_router_ip}:{args.sglang_router_port}" + if base_url not in _client_cache: + _client_cache[base_url] = SGLangClient.from_slime_args(args, timeout=300.0) + return _client_cache[base_url] + @tool def execute_python_code(code: str) -> str: @@ -46,7 +55,7 @@ async def generate(args, sample: Sample, sampling_params) -> Sample: state = GenerateState(args) model = SGLangModel( tokenizer=state.tokenizer, - client=get_client_from_slime_args(args, timeout=300.0), + client=get_client(args), tool_parser=HermesToolParser(), # tool parsing for wrapped JSON tool calls sampling_params=sampling_params, ) @@ -60,14 +69,14 @@ async def generate(args, sample: Sample, sampling_params) -> Sample: system_prompt=SYSTEM_PROMPT, ) - # remember don't set --apply-chat-template in rollout args, it will make user prompt wrapped twice prompt = sample.prompt if isinstance(sample.prompt, str) else sample.prompt[0]["content"] try: await agent.invoke_async(prompt) sample.status = Sample.Status.COMPLETED except Exception as e: - # Default all failed rollouts to TRUNCATED; cutomize your logic here if needed + # Always use TRUNCATED instead of ABORTED because slime doesn't properly + # handle ABORTED samples in reward processing. See: https://github.com/THUDM/slime/issues/200 sample.status = Sample.Status.TRUNCATED logger.warning(f"TRUNCATED: {type(e).__name__}: {e}") diff --git a/examples/tau-bench/README.md b/examples/tau-bench/README.md index 07724f3bfb..6471aae306 100644 --- a/examples/tau-bench/README.md +++ b/examples/tau-bench/README.md @@ -25,11 +25,11 @@ cd /root/slime/examples/tau-bench python tau1_mock.py --local_dir /root/tau-bench/ ``` -Initialize the Qwen3-4B-Instruct-2507 model needed for tool use: +Initialize the Qwen2.5-3B-Instruct model needed for tool use: ```bash # hf checkpoint -hf download Qwen/Qwen3-4B-Instruct-2507 --local-dir /root/Qwen3-4B-Instruct-2507 +huggingface-cli download Qwen/Qwen3-4B-Instruct-2507 --local-dir /root/Qwen3-4B-Instruct-2507 # mcore checkpoint cd /root/slime diff --git a/examples/tau-bench/run_qwen3_4B.sh b/examples/tau-bench/run_qwen3_4B.sh index fa36af5526..a821734012 100644 --- a/examples/tau-bench/run_qwen3_4B.sh +++ b/examples/tau-bench/run_qwen3_4B.sh @@ -100,7 +100,7 @@ SGLANG_ARGS=( --rollout-num-gpus-per-engine 1 --sglang-mem-fraction-static 0.7 # If gemini API reports concurrency limit error, set this parameter to reduce the concurrency - # --rollout-server-concurrency 32 + # --sglang-server-concurrency 32 ) MISC_ARGS=( diff --git a/examples/train_infer_mismatch_helper/mis.py b/examples/train_infer_mismatch_helper/mis.py index 3bbf5cf26e..ef46a2e278 100644 --- a/examples/train_infer_mismatch_helper/mis.py +++ b/examples/train_infer_mismatch_helper/mis.py @@ -449,3 +449,45 @@ def add_ppl_metrics( rho_squared_seq = torch.exp(2.0 * log_ratio_sum_safe) # (Π ρ_t)² chi2_seq = rho_squared_seq - 1.0 metrics_append(metrics, "chi2_seq", chi2_seq) + + +def compute_mis_weights_fsdp( + args, + *, + pg_loss: torch.Tensor, + train_log_probs: list[torch.Tensor], + rollout_log_probs: list[torch.Tensor], + loss_masks: list[torch.Tensor], + **kwargs: Any, +) -> tuple[torch.Tensor, list[torch.Tensor], dict[str, torch.Tensor]]: + """Compute masked importance sampling weights for FSDP. No context parallelism. + + Args: + args: Arguments containing MIS settings (use_tis, tis_mode, etc.) + pg_loss: Policy gradient loss, flattened tensor [total_tokens] + train_log_probs: Training log probs, list of 1D tensors per sequence + rollout_log_probs: Rollout log probs, list of 1D tensors per sequence + loss_masks: Loss masks, list of 1D tensors per sequence + **kwargs: Additional arguments (cp_rank, cp_size, etc.) for compatibility + + Returns: + pg_loss: Policy gradient loss with IS weights applied + modified_masks: Modified loss masks after rejection sampling + mis_metrics: Metrics dict with flattened tensors + """ + is_weights, modified_masks, is_metrics = compute_mis_weights( + args=args, + train_log_probs=train_log_probs, + rollout_log_probs=rollout_log_probs, + loss_masks=loss_masks, + ) + + result_metrics = {} + if is_weights is not None: + is_weights_flat = torch.cat(is_weights, dim=0) + pg_loss = pg_loss * is_weights_flat + + for key, values in is_metrics.items(): + result_metrics[f"mis_{key}"] = torch.cat(values, dim=0) + + return pg_loss, modified_masks, result_metrics diff --git a/examples/true_on_policy/README.md b/examples/true_on_policy/README.md new file mode 100644 index 0000000000..620564d410 --- /dev/null +++ b/examples/true_on_policy/README.md @@ -0,0 +1,65 @@ +# True On-Policy between Training and Inference + +True on-policy ensures that the log probs generated by inference engine (SGLang) is strictly equal to the one generated by the training Engine. Here's our [blog](https://lmsys.org/blog/2025-12-03-miles-fsdp/) for more details. + +## Examples + +### Example 1 + +In this script, we provide a minimal example to use true-on-policy. + +```bash +python examples/true_on_policy/run_simple.py +``` + +### Example 2 + +This script contains more features for various use cases, and one flag is about the true on policy feature. + +```bash +python scripts/run_qwen3_4b.py --train-backend fsdp --true-on-policy +``` + +In order to quickly see the curve, you may use `--mode debug_minimal`, which will skip evaluation and run generation with a very short output sequence length. Since true on policy is unrelated to OSL or answer correctness, this can be used for quick experiments. + +### Other Cases + +In order to support true on policy for other cases, please refer to the flags changed in the examples above. + +### What is Expected to Observe + +After running the training, you can see in wandb that the metric `train/train_rollout_logprob_abs_diff` should be exactly `0`. This indicates that there is no difference between the log probabilities from the training and the inference. Without the feature enabled, this value should be nonzero. + +### Setup & Results +We fine-tune Qwen3-4B-Base on dapo-math-17k dataset with max_new_tokens = 2048, and evaluate on aime-2024 dataset with max_new_tokens = 8192. +Global batch size is 64 × 16. Results are summarized below. +

diff step_time rollout_time raw_rewards eval

+ +### Observations + +Train–inference-diff is strictly 0, verifying full numerical equivalence between training and inference forward passes. Raw rewards perfectly match the baseline, and rollout time shows an acceptable slowdown. + +### Reproduction + +Detailed reproduction refers to [this](https://gist.github.com/fzyzcjy/46f9fc096258cf6fb4516ad2ffcefa8c). + +## How it is Implemented + +The core idea is to make each and every operation in training and inference be bitwise equal. The main code is implemented in [#566](https://github.com/THUDM/slime/pull/566) and [SGLang#12058](https://github.com/sgl-project/sglang/pull/12058). + +Briefly speaking, we handled the following components to make them aligned: + +* Attention: We use the [Flash Attention 3](https://github.com/Dao-AILab/flash-attention) backend for both training and inference, since it achieves bitwise equal between prefill and decode operations. +* GEMM: We use [DeepGEMM](https://github.com/deepseek-ai/DeepGEMM) for fast matrix multiplication while preserving true-on-policy, thanks to its algorithm to pick things like tensor core instructions ([SGLang#12142](https://github.com/sgl-project/sglang/pull/12142)). +* Batch invariant kernels: This is a prerequisite for true on-policy, and we use [the ones](https://github.com/thinking-machines-lab/batch_invariant_ops) from the Thinking Machines Lab. +* Torch compile: We also utilize [`torch.compile`](https://docs.pytorch.org/docs/stable/generated/torch.compile.html) to speed up by avoiding many tiny kernels. +* We align numeric operation details between the two systems for simplicity, such as op dtype, detailed kernels, etc. Some operations can also be compiled to speedup ([#603](https://github.com/THUDM/slime/pull/603), [SGLang#12161](https://github.com/sgl-project/sglang/pull/12161)). + +In order to more easily align the two parts, we use SGLang's [dumper](https://github.com/sgl-project/sglang/blob/main/python/sglang/srt/debug_utils/dumper.py) tool for quick comparisons. (Need [#12622](https://github.com/sgl-project/sglang/pull/12622) and [#12623](https://github.com/sgl-project/sglang/pull/12623) for most convenience.) + +## Future Works + +We will keep maintaining and enhancing this feature. More specifically, we will: + +* Further validate it with more experiments, and compare it with algorithmic fixes such as TIS. +* Potentially scale it to larger scale models if it is proven to be effective. diff --git a/examples/true_on_policy/run_simple.py b/examples/true_on_policy/run_simple.py new file mode 100644 index 0000000000..086c8c2432 --- /dev/null +++ b/examples/true_on_policy/run_simple.py @@ -0,0 +1,142 @@ +import os + + +import slime.utils.external_utils.command_utils as U + +MODEL_NAME = os.environ.get("SLIME_SCRIPT_MODEL_NAME", "Qwen3-0.6B") +assert MODEL_NAME in {"Qwen3-0.6B", "Qwen3-4B"} + +MODE = os.environ.get("SLIME_SCRIPT_MODE", "normal") +assert MODE in {"normal", "debug_minimal", "debug_one_sample"} + +NUM_GPUS = int(os.environ.get("SLIME_SCRIPT_NUM_GPUS", "1")) + + +def prepare(): + U.exec_command("mkdir -p /root/models /root/datasets") + U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.hf_download_dataset("zhuzilin/gsm8k") + + +def execute(): + ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME} " + + rollout_args = ( + "--prompt-data /root/datasets/gsm8k/train.parquet " + "--input-key messages " + "--label-key label " + "--apply-chat-template " + "--rollout-shuffle " + "--rm-type math " + f"--num-rollout {2 if MODE == 'debug_one_sample' else 3000} " + f"--rollout-batch-size {1 if MODE == 'debug_one_sample' else 32} " + f"--n-samples-per-prompt {1 if MODE == 'debug_one_sample' else 8} " + f"--rollout-max-response-len {2 if MODE == 'debug_one_sample' else 1024} " + "--rollout-temperature 1 " + # temp remove this to make test easier + # "--over-sampling-batch-size 64 " + # "--dynamic-sampling-filter-path slime.rollout.filter_hub.dynamic_sampling_filters.check_reward_nonzero_std " + f"--global-batch-size {1 if MODE == 'debug_one_sample' else 256} " + ) + + eval_args = "" + if MODE == "normal": + eval_args = ( + "--eval-interval 20 " + "--eval-prompt-data gsm8k /root/datasets/gsm8k/test.parquet " + "--n-samples-per-eval-prompt 1 " + "--eval-max-response-len 1024 " + "--eval-top-k 1 " + ) + + grpo_args = ( + "--advantage-estimator grpo " + # "--use-kl-loss " + "--kl-loss-coef 0.00 " + "--kl-loss-type low_var_kl " + "--kl-coef 0.00 " + "--entropy-coef 0.00 " + "--eps-clip 0.2 " + "--eps-clip-high 0.28 " + ) + + optimizer_args = ( + "--optimizer adam " + "--lr 1e-6 " + "--lr-decay-style constant " + "--weight-decay 0.1 " + "--adam-beta1 0.9 " + "--adam-beta2 0.98 " + ) + + sglang_args = ( + "--rollout-num-gpus-per-engine 1 " + "--sglang-decode-log-interval 1000 " + "--sglang-enable-metrics " + f"--sglang-mem-fraction-static {0.2 if MODEL_NAME == 'Qwen3-4B' else 0.4} " + f"{'--sglang-disable-cuda-graph ' if MODE == 'debug_one_sample' else ''}" + ) + + fsdp_args = ( + # Set to true for FULL_STATE_DICT mode, false for SHARDED_STATE_DICT mode (default) + # "--fsdp-full-params " # Uncomment this line to enable full params mode + # Set the bucket size for weight update + "--update-weight-buffer-size 536870912 " # 512MB + ) + + ci_args = "--ci-test " "--ci-disable-kl-checker " + + misc_args = "--actor-num-nodes 1 " f"--actor-num-gpus-per-node {NUM_GPUS} " "--colocate " "--train-backend fsdp " + + if MODEL_NAME == "Qwen3-4B": + misc_args += ( + "--use-dynamic-batch-size " + # TODO pick a good value + "--max-tokens-per-gpu 2048 " + ) + + true_on_policy_args = ( + "--sglang-enable-deterministic-inference " + "--sglang-rl-on-policy-target fsdp " + "--sglang-attention-backend fa3 " + "--attn-implementation flash_attention_3 " + "--deterministic-mode " + "--true-on-policy-mode " + ) + true_on_policy_envs = { + # TODO note: "Ring" in original RL PR, "allreduce:tree" in SGLang + # "NCCL_ALGO": "Ring", + "NCCL_ALGO": "allreduce:tree", + "NVTE_ALLOW_NONDETERMINISTIC_ALGO": "0", + "CUBLAS_WORKSPACE_CONFIG": ":4096:8", + } + + train_args = ( + f"{ckpt_args} " + f"{rollout_args} " + f"{optimizer_args} " + f"{grpo_args} " + f"{sglang_args} " + f"{U.get_default_wandb_args(__file__)} " + f"{eval_args} " + f"{fsdp_args} " + f"{ci_args} " + f"{misc_args} " + f"{true_on_policy_args} " + ) + + U.execute_train( + train_args=train_args, + num_gpus_per_node=NUM_GPUS, + megatron_model_type=None, + extra_env_vars={ + **true_on_policy_envs, + "SGLANG_DUMPER_ENABLE": "1" if MODE == "debug_one_sample" else "0", + "SGLANG_TEMP_UTILS_ENABLE_DEBUG_PRINT": "1" if MODE == "debug_one_sample" else "0", + }, + ) + + +if __name__ == "__main__": + prepare() + execute() diff --git a/examples/true_on_policy/src/aime.png b/examples/true_on_policy/src/aime.png new file mode 100644 index 0000000000000000000000000000000000000000..31a04f9275a52bc78dec3d5ba79f84f87880bea0 GIT binary patch literal 113208 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 literal 0 HcmV?d00001 diff --git a/examples/true_on_policy/src/raw_reward.png b/examples/true_on_policy/src/raw_reward.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf013f91a1ff5618a158646a4a1f399a02ebe5f GIT binary patch literal 338062 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 IUO??6ZCBM^A$;2#!j?Q+I&~;yv)~p+VXH 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 z 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
QYNw(HIYF7&dd2E@dBoaPsb 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

Ch4rII+Yka1cUAGK&N#sudbX*&=*Y@Fl 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

28w!vlWEF>T*TxC8K=m9uKREyvv8WU);uR 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 OUkZ1WWs9Xvga03JJYymN literal 0 HcmV?d00001 diff --git a/examples/true_on_policy/src/step_time.png b/examples/true_on_policy/src/step_time.png new file mode 100644 index 0000000000000000000000000000000000000000..469706dc190d52cd25fbf63f876f348b95208f37 GIT binary patch literal 158297 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�OsS6IPIoSn96u?P{`d= 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 z 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 b0Y@NOC%`#g=Pus<23!_LaHd5+xkUaAhK$9> literal 0 HcmV?d00001 diff --git a/examples/true_on_policy/src/train_rollout_abs_diff.png b/examples/true_on_policy/src/train_rollout_abs_diff.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bac13c7a5c7b99cb94cf7ada5c8e4d4671bd19 GIT binary patch literal 192604 zcmeFZcUV)~_AX3EMMOnq15!j0>C&W05m2Nf9i#|I?=?UOMHHkxrI*lq zlMW#XH3354F3&#O?fHH8e*6A?pOfcF)?8)Ixz?C-j`5CnjFnJzRe8!wbe9MS2q+bv z%V`i0kk=9rkStyx1CBVPX7m#fTvoP`l~q@em1S0Ub+WXvw;&*R9-5#_u17s}t65Xy z4#@>MX~hkds~@gQD_-CZIAD3N_?+nNb#oc@@|^HXrABgJvWu8`>g$OrCckioo1w!= zZ(0~}O(uY335+la=nQm&!1*b*&mS)8W`!~&*kJH26r>p=VOERf4X3>LDpF0=G^U<_ z^bcYZk)RmgK*OHUs3?L#GPpksHj%|v)q6#;#2<66J90g2g^1vT_4|=`u1^@hw-5yg zQ{-0o61>;wN>l4i;@G8o@A3Mf^!uU&5zTjL2_i=Ccrm!|ovwHMNC@;Z;7JxlSwqC$ zI)Tj8TZ5)GtqLqRl$bFglft}CVON*Dug*v_iQG3TgsYybvh6#iZpx$q3rpzxw&J zT3WKpP-~riij*FBCq%6LzO%<|*^Ah>_yf})SIX~vr;VNMdQS+=zU=a4n0%ayn`V7~ z>CSjit-(F2F!~))jf6WT4%5OL>0%de(4f5C7}7a^kawy_KLk zbNR~eja`Jk>{6VPTH2i3F#!uqQhlU|YYHM4gTz>lkKVT#zRhlB)<%iw-&1(6xm%kl zD8;Pf!RyG@AIZ4WNi0`)M{)l0l9%_B*~KQ(V`taT2fJoAe(sGNs*NmZOt(tH$QLMB z2xv%%ZmG8>Uda!zXLdw5ZUpOo&V1EM&i~<}T&rmSZR6d-7I~s*m#nL&7h^7Tg`g-l z&^H5#y8LN7I7D}^7Kn)jL7%;wG-@NTS-9;NDd09MM$ec3Z9YY&kxz6^7>s0-<@^}G9=c>swFW0Pr9npPc zHwPy>=(ER`>q+reFO3RZw>e^#eVCTt#ZpHyoLKkrwQ#m;B2i{_B6YQdS%&^vP}l?? z9&zcbJ-&nch?oF+7XpE_K$gEo5$uGMpWeHD+A;Oz$8a`TYf2E&yJG3~A3el`exe&Y z$dM34n&_9n<5~jHBIW6ms~3o0Ff-l@Qh0d6B?7m2MVCyv7G$P=NhhE>i^!gAMq22I zcAJKUsd|f=<;OpJ@56ma?It= z`D24$vs{-8?3200oY%#XOEeWW%G|-N& zG|=iMMTLbah2EdrKZTC16($rRwZ(HhO^`wLHT4-{x)Rz(ADfjS1t%{K)3(ZN1XFMJ zLlb3s3%GN}2BSt$L-TeI1#b&^(aA*C(IwCw(j^HR53;)}iG@gp8b9aFK^K^0f$TH{ zO9bmuefvdI6H>{A%Iq+w zXIi2Tq7Kgvg=Ym=w{ zG54HEw;gx{e`sPpZ#HjkYQ{HUmiV-!om(l4b%wv!HDlGL7o;<;qo5OBOjn#~fY9GB zrYNy1K~E0apW5e7YfTxJvrbnyxY-L&8&}C9XSXZ1IgmV)IT#ei3>S$(=3K~mEU)lP zJF*^?g=%$q;QYy>7Tx6@;mqY~@9fJrZRXyyk&vSneYUl-7LTZ!+pMXqaZ7fKaf{pM zq!FhHRLbj3;H%-+dTN|IHzNh6Q#D#*1P^@nglXJX93Xg3*+W z6H{W_)));8t=b!_fOSK-C7j9_WqfRmYdqWY+!@%NU&Xr@ALw0INIH)9#Wq(iy8I%TI29q5iS;!{x`# zA5<*cEU&MrEDySvF6%@$P}|V5huXg;)*NB&Xon`7POq(5S))@7svm;+z=w z+jkvZXG?2gyM(*F%T8>Q_a0m~xV{-$7%CKsjwOoIVfBb$lJLVE?RS%PFRgUk&`>n% ziHe`U_=I{~bwk-hiCeYl(U8y5L8uiQt#VI>yEQ+A-+%8+P{u%Gy0i*@`oQmIi*QC# z^PML7)|=kI<<@?4DQW8CR9fZ2 zs@&>!-)65$&s?1RfKspcgQ3Kg=c>wlnfwsNhEZb!E@bkSkOy**y9Z$6IrsoZIpp&}kF|2M zbjk?oQ-F@}Pxzv~)@AI=tZBmw2H+{@;26!J&)LEhv9|=d1r0=;etct+@%zL*{vh$D ziOEWn^}d;JxtGgKET7Ui@38?3m#FTRmVwTRcj2qeI;ISNuJdvy{f>&7RaCEV33KU( z;@X;FCyPUl676?IjHQgQdOu1#mF`qwJGL^3mum(!-V7cYW=8Vfa^A~6;fI{#{-s@? zYYk}C>#Tx)1hdl5JKS(=tm^jHoU_d7&r6eXyyjF_F7(aDB8JgD5%HjTgN zmSd-QZCVUxXqw9`q`>}jWr;10BCR6o8quThPiUJi+YM`FM|-J1Jip|1H*B^#MYSO9 zA32mh&IMZ^n{NGh7lMnr!MG{GAu$c%+MoQE*v$=#j+XLUmFo+wiTl9@ProGTaVofe z5F;RIl?wOCknoCvl>TVM9iQmH#)(@R@P1kSO(kb?NrKN?V}Eqj#!c6GqTPx*(?c>z@_f|jv|t=c zZ#>y}bjW+&VgT;Ix;Mu+ZG)>1s?QJ^PKFCr2hXtc;4~~|q#+i2f-aK!B9(rYe6ZVH zU;|Zv_O?v=*__aw9jclbn?U1vm$B!UUP;$gcM~j*sS;Rs6FgjOjuCrOEwwEyS6zUV zUz9Q(W2{)1CHxe0e!w@kgI*IO0KTjP)QNzedheb?~G=QGDw2qEAe%}y$G|=Q?OJ~A>aVY7YIlQ=?F-H z5+U%FB&7dUen$9!fcRg>i3kWnYzRpHeT^!x{rUL-e1F#Yb4wf>Oh69o{cPVWi|DVb z$!oKS|0cE}^i?zGEvluTg z2n6B*3Gg_%TJiFUii+|+(c~nf@#>>K9 zU(Ut>kQva2Bp<(^$m4%i`2U>xyUX9I>it$#RQS>FRewA6KdWlHS-8qNIRKryOa47z z|E~P|$$wXT%=`1%f0M0V=CT1gWq$UV{WBHW%M_qs85t94iQ;@f#}nFa}%xIHXP5v?M}b>Y3n zcOJ8+gf~fFkdWkF2xERKEq(RLuD*JVF-a~~m05aTB1j-5WBY#EYhlteEF^jpggUkK zoZz)W)zSLlAl}MjpSAD3e4VR)Rhod1HI?2>#*6#wdUQWY8j8MfHz&BHenOxwSv&ADg_u{DFt$f^$LmjNIL8|NMj( zocAyP^L<{(r644l-CTM!^!%SB26Ra@`c1!d43&#w7d2tQlrw%0ajdY#%$HS7itSINt2ALpWmN(VM503;*Rak_(HEDk~WEm^cc1uL2yuwyut>|v6pH2kBZIjtdiE)&vCSzous)f5s_Z%;ufB8N#uP?o7u7ta+#hO zS>2wh9N;bicOqlOL5@~anWC;M@43!QL$yAs8-La*G%LFzBH^|c(RX55Q*6|r`pACz z-cW&>lIgxU_;@u*A&2ac^<|B{WM}EZmnXNl4Y=t0n`dC?hYnq=7CrGX4d`M{A-nON zsU*_hr`2;k08M>;wjKC4Op;b7>WpSevgDrWY6~JS!H3`EaC`}>JG04R3VvRxn#!tli}tu%UZc>gJ>Ef1Olqd6ti^`Z zV!PKX>l=RfI3{HKsTJL}-vD9X_iK~Yc1eP^(_gLd!|fEBhj}#64#V#hm6q@rT@&!P zYl8&KJEpQ3s}!ce>*!OX#^aiL*R4_Z^~5M9@##xu;+%bbds1idC^gK7jSYeEEpf#B zowCN$STGIr7&!y$4Ts>mKabh@jw58`x9qyX6`7wcRb%f7+b@|8LVoj|7 za<%)Mtjlt~f35@Wiev<(3U8ei)UU^ifnt|}gueEQXUh@X)5VFkHQ5s_MTn{bJITyd zyds)~H|@mw!klB=wjyW+dPdpfO8VFadd@A)%*=A}#8f@Ol=Mw$#jCxxKs|SnvS z1`>79Adkk|H;zOZR6BmK)uvW`vVHr*cUq!Zg||w9-vEz;z?Dw)=|e(C2%n0HdS!S% z4U`Yb*_|SQdicjlT457xE>Ej4HoFiGbHwY~j@N1#2s&9hjGM|#*Z51HO*KwU0gIx~ zwG#9F2XeRx2)EytS%Zf>xtkVE-Q0t75`x%Qz@^d6+ha9W8`GDt+v&+ z7-eJXEIdMN3as?Q$V3oqQB0hxJ&7KPBh!8FUqE}l!`Z^~-;}x7czEw0>gK&_dt+0Q zVpA{CMpha$$E#wp?H`H5E;tM~YSR}KsvU0KQArc@O#CJ!8z632(Os5A0NSG*QKD=k zsf9Vr@bESsR21tsjMG6I%tJ84_1a1;NgHQQ*XMrNj^Ix4AaZ@)SZ}HwKkNp^R95N( zXP?O2jsIBcnFNHWm17sdUsFXonRMH@%O|ypaj}N|3WKD5WMvwsl`2>}OwHe*M%m|J z%RB=ch?`MbmuHF^A*1{w`j6wnO34!P+Uk$f^w`CZvVNMKVl-csr2}6PPqd+EcI0fV zzwNF1cbU)Ci*vKIBGnD61W0OmGhZ?(2h5BQCTSexu_G-QK0Q9&Ft1obCk(8WMoVxY zXR19C=LDqA(KO!K^1N0Fn9EQpEIp!yDm|g^cNH%k3;3vPp^-tqjiRD7*w~i$0rw_r zYlg<7-3+T8a#@Nzi&$3$s0i*rr=}cyGjNAXa$Zw|5G=*K6A& z&(skGN7}z4``rh<&J8TPq1U&6tvcopu|%+0W8Lg*RsDj?PXk_dejh!Uo2s-@+u?U_ zT;JHR9x~QtH&RV~WXW%CWz`+as!-qvJ}0hlS-wAld4BAP;R=2K{=KFed>&HlzJ&=^ zC#j8Q6u;kgU>F@58e@Kc%%=7TlAMs$DJ$-ny+&$i@fHA1{NK&rc|) z@RLI7{~Vr$P@x20gNKa5rrDQi#rkY)eJ(j8zL1|V+@Pi1tdc4eIPqnWu$6??xt^#L zq>uVkN1mML`ssSZ)2>5_odRBJKC|1h1`VMXi`Q_%Ime8u6s+Yf@@E<==T$4fROVN1XQp5d-8auM(pCxi0!;izMph}b|1p>Afw`PJ<8tq} zxlGcWimA4ru2Q(dB+2qqR}Eah7Nc)F@p+XCp$u5Z)e}US+c-qj;`8arjMKR5Q1;W6 zZdCNkeY$OiN4~YEr~AA*t)HI9uw+Z5Dc#^j-7adXSnI>#;Eqg3er3a3_tm!(N^pd0bkFW3Y*5lSk*wFKp@*QeN zv-N91W%p#>}Kcgf0O56Rg6gpU%zcJVxdG^e$aQSDJ8iyg-eIWBm(*M^3jodkS0o z8YOlZhU_YPWvM*l!)|g;hL4ZVbkJmibzIl_Oi8QQ{6(Ky_9e5PJ1*SkTQ}>2aI=hk z)`?-O2gPMuO3t=J7N~Ld(+)2W@Mc5j2)*)`efzXAqB0!XpC2S?mD)pYap;!5MsI=W z>=(r*@w040ucnerRBozVY_{w-7+M$AEj4uQW=-H;ALoAgyxI47HspKCg!DlTawg;O z!c@%QC{^)_6_c)d0SXL14IH{N{Zn1%kPGaS05 z#D`Po6Z2S+uD}86p&DN=>v=Q^1=%N(`8L(Qi0$e6QuAz*u|LP>ks@7N+KMR3&N zp51uyeDB2>S6Bb&MmV%N;EUG}-ys^c4z*K5zjH`ku|ZP@NiAFeRRt z*2}7fnjJS2+OMl`fxO(G+po6QYiT>VTvTp!z$$@kcSu4-gA$h7!vHh?J4?uXjfkX{ zI$%vvo=xzK>KbA^VXxKb2#5g&pRL3m==FJwQ4|s5(hMiN?|ly24%rmF=$&BwF

nq+wPbVT5;}rGEKpa!p&hS2C?nRXwZ+(oMj*Ucw6p~Qry^a ztVpC6w!7m~w!PN|M(eftgY^sMA4M@pXb3((?AzznYm>n?V;aef$SJ*gFMXXxeC6|4 zz`la2G%$#j;s~f0O?KvFz}o4Bl5q@7wI=R;htf^;a}I--7&n|-)R;R<1t;;_c%iE^ z=&=b4d@v>Evxp`o>M>r6x9%`8ZP~t3*WGL9j(&q@Mw7LK|HnA7jlB8iNWKckUW{=y}j{(ClyW$k}YFfN}Nv3XQ|d@*8c5y z`@He>R-DAgz`nuHgRDXk$oUIAt&1!E=1`!ygivzO$Fo#W`gk=Sbk?qv*JEIwH!A_4ah} z5{Iao>3X{fN2^NQagDAIG$d8Xt_$!1kp0)Uv7wUk#PdFyZ}3jZ<oj$+^Cfgt;TAuu92)+(EGsEddQi)eWXO^u4>2Q+ zr4w>s+@U(FFM}Oy@4l^i80hGI*F*InVDV&i zz*G^FxwbeypU&GjD%_SNyZy*cZL&1lqlN~OPh%JGGH52FL6V14*=hfk;@Ro(>y@2o zVoc2#V@X*fCRj~7Rfrkt-Tf-3JIndxzy|7oA_Wl);xh7iS87Kj8lv6c2nsn_DX#@5 zG#D$8Yyc=QX}~YKesVU37zsFCr|x*?U`-0S^7RmWV_Rq|oFBLr?lkQH$v>F7l<$r> zNv^UR5lc3TtBP)}y0t(d70BTswSbYFUk@aJaeuquJ08&(lP zBk7$qB2j`*)|+(19Oz{M&`Gr zm#NUb1`TC?obHA5q&n)1G)}kElQ_@V@=hX3o2HZH4A`BKnG1Bvb`w7ci$XG@EQ}k* zDHBWbeHY9%^x(;dk;R5}J(BOn#`$ud9U;dO0hDP}PN&7c+2?UtixS0s~zxcstR@(l3r{ zVYz3j_AfRg)@7v%Y>&}34i&H3WT2UIKD?5Tn(pHB7^$=Y(6%_UdEl>CA%{UrEvj#< zD?z0iUc)n0>Olxw-e7w=KviU_3p~G!v#y2LIW?9i&N|O|WJA-WR8Ce?)+)0J)f*;l zs*x7p&xJo;);QXASW8)y45Jg0OnhE!XYQn~oqO*uh33b?dY6qFo}*^hrEn*)p?HZ! zG~K};C7PNqOdw<0u4~)0c6#qwmHeuTD)Yrw+Hm)K-@v?}Pq5hMS!nB$yYWzBG$>{6 z8J@AoP16BUnaBRM<@^UZG=ivp;VzYjtDpGxvWzI@Iy$CCAQ=og)Yk3!fL++H<5C%! zE4Hw2HK>%cjy^LGo@Ey8vwE)S0#6oI^5b8SKiR&rah?x%idM7eHXKAZ7^_JjHI+Wf zkglQ{P*svM(>nOsG69>fO|0yMDE~fxa^=+1JngacI=2jXV(Fmq4Cz^~Sau5^;F;aR zwU{2XFr6Lk^A=nrrMMMOZ#UtZc$io1Y(?U%+VQ&{qDcneDaCfMtLR?_vGv`(9fVVh z5)7p#mUKgz!_;XpWlt-8t5edTH=;x`*D;5S<-7~o*w)FT#URmxPGa&X$Ixl>1o5X(}~3bxSnbtw3mjPxSJUe=xEgwqR*T@z+nHt{kqn zE`X+l?lUi-^JvmtW~+_1M%Jg+OOl?u>xW;V=5y$w84o94pLmN|a6V&XU7LsO?LI67 z9Q^gAgLg$VIE-5&T97xX$t*a2=N3ejx5RkPTj6ViL|yMm+E5LixWWRVQ}DSbfulz} zi0tUH)5jK3}R+}FqKgpTWSmTS#qkq~3Akv^tW!tW-(9HF@8S9uH3|LM^; z|MckTHHd$iKnVXAOM$?4&`u%dwXYPLx9uZv`l4p#KvOF~d?b2Mn1SmrP14ipN zGchqSsI6k-aY{PjLj`E5dFy!H<})aMmLjetodum7P>~4u0MAeYgkXPGEkcxmupuw; z0t$_7C-h%Ggbheo);dl|$3>MPxfL!t+eO#?V50m94ZVxvl8pVHHfIPg=r4S>aNB1A zAhhczVAf);`#ee$blMbX_D&n;CdNGSTWkxl=%21ut*lPM?!zUQxeyUB%I=HKi2eCm zeI@AVzzJ6^_`x)rl>5d9z#H$o_-V_BflALL$~h^VuN6N{k1v^@stJ#5cI2vf!Ta7OqsHakvM$+vwEOVpQSqDY&kb-`^W&X{T!|{Rz zcFHut{p050q%fb9I}Ee!xXW8L@n^Tah-VWxbZ$U?d|jYWMozf4K~r;XHsn^*7h3w>EH9QA6?UMp{7j9Xue$m+rJ86U`Za zGlT~}4IzGB+#u?gA>1MQc){6@z~}Ui)>89wKpaQ;1VO9`s1|z zZCLT0LmkHF|aIFmmH0jbBJcC>8QH@bmQVFJ}S}CiT zYA$o*&QDUjIxQcR2{3=Ss{lC+N`j>jXG+RTW`5ULe!v$m@(2V0(Z2uyc0x1-kZxEtzGq7qOax#jXzy($% z|M+wKUby|_mly7rZ79F`gtzQE1yPcD6F=T1t%W|?bZId;4RSjvH4;<8)i|VEU?cKt zO2F7A*QM_lIX8*}@zSg}03<3aZg%uVx?rclxYNd{);Y$0@>5M(pU5nDdAq>8gxC0w znab(;JEOprCOFh0)%MnEFrq9Dq>?)0d=m{(+n74-jc6#|oI%E_hxw^Y%~W`ZgF&2l zY&PjaSX6=?jT1eQ1h{P*Tj;&HY))-op(Mk5!3!L4qBMb^ythR`j+q?7cyDhWRwE`W z$K88YLbIQEIw@=`vCJ>W)!**J2Krrbs>7>7Gm#f5Z#p{#J(DyK18d%E=yV>h!6})S zB80@>;*Uq-vFIl1G(~-w-NiM!0krp-3A)asc>m(EnF-5KQzKl**7wSF0I4v3n|7Pz z5gVw;ucrbjgf860(KTXKLy88ihIsh+_{M7|P#?+M)1t2VBe;c?@HkWgCr?Y?yoCKo z0TleCS(x|f6zj+J5CBlN{|+cAlmZB_?>waH=>8hV#W&Y4JPi<6CxBDrvB$Tho>VKR zNzPq7@xr?B;wT14=`Zh*c`e!HM75Pjq$97J1k5m8b(pUTJ=mfZ_p5_6N>Bo|KN?44 z>VWheiyB&`lcKWxiWGi#X zL2rgMn0(n}G5Hx0hUR6!3{K;X7)019ii8es43j$A$&oZ42Y23BX!H)RvYjyoRfpv- zoVl+!L%D9v!xgfu_$JYUIKva8yaj#F?nG{lTLb6g##Q-kk6)sQzwV0e82igCSfCrR z&B|v>N(K7!^Zf(CSNn5U&@pqb(M{nIeH`Jp`YMHAYW8ysMmlDGMtgDS?1xmWyKqR`?SAcqF>WcC>k(O;Ub_93YT zM{5%p&bT>T-C(~^{*AoiRUnZ@laEm0YYhoBA5Iy{*E^MYi+J|#GYH4sXMVQTd>_l} zH91;K+8ijoxbeGeovKz<6VPd6jk?&C{y6#IE4axi)d1Y%cB^H!u0bj(S3{m6ea$ME zV^%iypd-zRI%9e@E;>XZQmJSr+{Fh@cFCTM`t9}*f}OhRY^tzfnHbxfLnXDs1-9}t zX*R5P4`+zh2XEO?xiu|#)=d)47U`7K5RGFF?WWh6ZgKBid^R()y$R6Sy#TE}8NR2t zE}tulo6N-3w}H>yBapyIK0ot4R`v`tv3R3!x0IHtYDEAcNiU({-st0`U>^WJdxKti zmt^eud8pnB9>FmEMA&QQ)&^}A=f%!-=5j(5jQsK*ZFV+_0oGfD_w5Xxb)vj!5>2&6v*DI1KViCK-wN?1HN8oO2Mh?>>e_ zIUGv+oI`qdjq*z0E2BkUY?4~Hh%-!9(;moE-JmbGJZI3TntcF zcAH9sO_@H^`2yxnG%+@s&CZEU0(5`aP1dGV8U*F-ulp_U-zK3qylmM*73}w5navlK zj?VM}g_ETbB}}=kDYodEfF9uxF@EKwwQ8A<* zMlz5|Pmu51Pjw;$Z$pE=lhq!&ZTKmyemxcW+z%QKKp5y2*N#>07ey3`Nafdm||ePTmebrefmLcm|;pXWVbXj>geI{l`U( zt;8gT^>s=OSBt@@6iFQ?b*p!FYchWXz2q%W*iWo5?^IpyInA4g31^CVD57eMGB3V@ zmg}Y@G2Ty0V)7+kl8`_u9+o&yX^L1k^mOvP`04yIW#}BMY9!4*CLM*@K{HvI^IJA9e-yTveSUI)qW$uWXqM1s^6!`n zkj-}s$mT0`Vv77VFg*5z_#E#})o2l#LW#I_KLJhGwac>tqUCLIy2fB5Kv)x^AuaPC z>iK}!RuY#HM-wic>Xzr$QNZKV!Jq*l($u=cDDl;m?gv(tWSC`oaiQ`jA5$uuV=`+^$uDSnaGwiMNGiVIU1{U%%Ng&A(V8oMDl15wm}- z&yVi$7~_QJP}b)9vQ!+uh2l(6dSSEIP_Dkxknx(QcQ#nqX0GC0leG%e59598w@Wop zFVDDj58yo(xn=~?&W`1$tM-kgEcWEsUu3^+3KuxUG&{`XCp@074zH9j6lfz00ZZW{ zxb*jOMk0=eP3(5`h+{m5&|i<;tY*Ros%EGqRwhjRD-)}A@ngD1tS1nkwLV&Qn+U}u zp4Hdt&R6yXsJDeSK8i`YeY@Z9o2l!M6-l=0orzcXzjA%w2s4B3%|k4g7amqSKqF~c z#cI4iDcPPfZVDYWfFv@#3=L}DL)z|tv>UT0IiwdV->Sfl9UP?QOU7Gle2HGEbfHe? z*k6aUnfM=Cq$dq;GXRmf>%UXVwO@cppNSqeuIR~MtBdDBAP_@QY{Jo<7;4IxE3rND zT4I3LSVgntKCR4`TpuM^-nTTIvMAjR9x({pdxE}_$lIK5R*lP{3h7!+8at>X^QS18 zu1V@ogNdXWRNM2YdHT=lV+QWse~{a`<+UirQ)}c{R~L2QzbphEO6~amy{i)%5kF+! zA%;+Rfl}`Zc!Ey7(W;qoldhFP)HivhKW#$4K!8)XBvxJwn5%X5HSvaM6>2n4D1PPF=#k6)!u6b|KMm6?R#o&Tv=Z0S0k>*5zN_(aVMBI!W`t1?}I!>;K zcRx0zf!yI%%bdlSJk#lqj_T3Ht^SMQ>@4p+y3-=U()R*kqN!q{giZpW`X`=*|r^MKZ z5pnw7&|~$cj#~L2p)rP{Zesn4_B$&jgv5Zu=}DTWln^Vda;8p2zov~Uz;+(wOqbks8td$Z}IJ~v*y<@D)J5OP?58s=cmE2b%~mmvZ6v^#ZB zvC2^2#oXrB%L;f51TJpg7@M!9ljhRvQ1Wjt|EK`Ce^J~<1PZ%M74AE}DYI<(Z)oaYm`**?(Y^LA0Mr*w=vnvU1W}Bc z>iw8`f310DeLRWNpvHz5u>F;~p^`aGUH726Z2pTT`}qwr*b@L8nrcx<3k zJ0=rGg~`8I_F`G%cqgdM#Yc*)Vd1lOQQk;S2J4z(1mx0C<}w4*#w#M5n%I*N0^xbrwCMg;7%pwM!mhor8pJdb4z{u9 zb)@DZx8C(5ZAb<&bh5p-@r|mRm|>cYof&}^ zS0Ub^Q!WNgWay~v_&;*0A)0Yp^Rt5vr;^bXh;jQ~XZV$O zH$s@YQ>*PDrJR#A?|rXaa=kO#BJYDfc$(j^H6Dqb-xL_x4a7kV@ZVzd_C`nG2D0}y z_O;IE!RZU+_>y#6$p-Y5CjoWGuYiATwoUxiD`*ipaPbg(3 z*NI=b_0_4Df?vQ#JEj8T4ppGI>hwgSSyX0rs+pl?B)O*FpZOisR=Sk22oJj~4KU$M zJN=EYvZORdfJHO5ng1NQQQL-!9clcKMHreRA6>62zE4uiaLMlepg`&!b28{+AtZjj zC3Lw{G3M(#r1pS2CcSPL2x0*?ZYb%F;Ks5lH{-US@Ni8rq0J+iI{QAJ`4#q=-= zEiH>QH6H%Kpkxe|Xc(zL_&5#O73-D1IX#@XWTlx!fW5OX>Ns0f2d5zLQJ0f@d+3jR zAz`JnT|1=u?oP7JbYp^Av>gP6E(V7jAaL1g$Z14n*Q1G`QWcmH`! zSCrJ%S%*E)2g3PAAyF>I zTtl9~`!|q_K%fj=rt9%=oyror>VL`}?LnFDaIabHf^%oVw?}`us(@J=js~##fm@k1 z`(Ff}^NUNjMVzIl=NDcGN|d!MF_b-GZ=-fXE1$P560t7>!PF@j6qbH zb->PMfls?QPg#ET!~rHS3}fgAAo0BhTKcIub3yfhmx$f`UhKGp&5{VarWk7S$2|Ue z!(*RqtG%JlX7=&kBu+N!j>u5WgeaS{9)yz~`{c5{d&yut`~>0-q;J)YpA1|%d-X~A z)HfF0Lz1YNz`>5ba+^7|bcSc10G7|dtC9QOeyU<@o)y65k2lUw>?99sL5e+~Dv0kV zN%DC#KSQe7>03Bt*luRMs^G-zYbE?(m%a*yz1S{j*dh<)b5;=zr7nr94;53SwtY`~ zV;D36#EN3empgEfi{D;Cv7o62i5tB?Q+)_6j{>E6KW>U{&AR7UtGQyW0trA54ho5X z84H5IQ5pbeo?ruR{hgw8k2z~I#l&mV;&>U}vb4R)kRuF?A5y5$+{3oV7WCNyX;VyC zhq~_o%P&LD=B14USKU}d&7ieYaLC8K&xoz)q$z5wouz}`qWHp)=0ZYyNpX^};lnL4 zC-n!(09+0dLn3JT-6tP%<~16@Fqut#5!Ca`p(q_OFOZ@=z-h&zwM;OB<>Nx6)i78t znFPJC?Y#^!&-ZbTv#?v&kacB+%h5mrj{Vl?E}{3)NAjPD)Kdz_jBGD7XDu^sdglJv z7{qSenC$MiVp@c)07J68@m#hBE>5kdsdlA5IpL12jOL>d*5UP(^>mIU3TK3>i5k@O z@DX-;b04#YC_6z?BDFHV(?VV>uId`cp;huPG+3u@Jf&zp1Vaz@MO;U%Q%(*iT#PLT z7hRDC)wxL*J8a>Iqp&NygV`S9qOSKGIj~1jBRIhym3*pbBOvn#JOIaA21n3IJnM*r zZcrPJR&9ai^e24tnP9_uesb+eVP>W(b)0?Cqx!@&?$ z$WXyIJTmX8z{2h*68SMR7=g70;;SX-*&%buI2Y>s22&pYy&`w6kce=H&4cxbTi~2zQc4aN>01WRe@aZ=mDm9|F0a&ENrFd~A z3PMLFj$40mh`@At4g-=SMvx^rKYn@O?QB{8h6`UzbF2qhO`3i4LtZIR_i@v+l{jix zY@cA$_N^Bi(+gh)nbxkS#x6H@|F#`!Yl=^cDHflbS&w@JBVD{G-z8Mm00(dSqd(DqE-&$>_ z8Zq8eItR{u9lE4ZE<=i7z2d~shFX_YCGPSmJ3qFn6soDlTpFX1yZ%y8q;a>!=fHy6 zAxBcYo1IP?h-Mz@Ph_(v7U>kSh`OCbnP;TCc}0&UJsve5$@edI-&yTRNT{&rxpy>I z0XVEf#&a(^o}kMy52@C0&s&(F8$&N^lHnC(BjA+sMz`eF1LOT{_0jGJMczKqHD|c8 zLr6WO^9uAn75zz|q3Ljf-7Z;eb#q=gjls;QYorZyT(f(Y9$Ckrj4KY3-BEiWNq(04 zah~(c*rvkc_6H^262=1I$`B_$D`7qU9P zlzwd=@QiF7S|JUCRxkV;>^39>nrhhp8mONJ*Vz6^cxd38hnvcJsEffUwRr2xsS zr>l=fHRPhh;UW5lA8ZYALr{hr_Dr z2Bo9jhqPE0#7{_`>r-vJ`v|ZEC%t|83nIAM=v^9srJbFQOEc@JS_iYVbrR%|giijQM*&!? z*q>R&7p-r<`6Y$`X@hGU0JSEdvj^94vs8t000}eCIaQPhR!XO9$Fz4Y%L%3{_5a|+m)_k9GeHuRt2SwMoe*@4hG`A^Rx{7 ziy!61#g`$7%FpKZGld-&ox$zCNynKxhdZ#hF;X|j@BHrbyOIKlp}HTIf6GdG&PvEY zj2-a7rW(I}Vac`U%5OTGtYzE%4m3^8rurPl=5r7CHTbfhZbjN|G`o$-B6hXcqAP@n zwdiA>Vq&}>#6($#p<7f>GipH}Eh*}`ovf`A96_6Fgcx^4OC07ZrworDbxk*bp|sK9 z0oeX)!1k;Tev}<(hM0I6qnZ(_1s8t;rWOHTwIhpN{m>XHa*E$))>RfD;&A6p?l1Nl z5VD5BBD6nkwFE|PP*CDF5;>gjQ55e;v@S~!D0qM8c!hVRsg3EoO#-H8AVVB>Tgp#4 zI|u%K>P#6rKMXJ|&_j}1h=|^AyzEc!`T5;@$q|qyF9aTUEgE+u$m^ z_;>aHQ;9hOkleTTN@M@$)_%47ks5ewKupP2=BLR2#|Zq7-3vJY@O!wVA@mpS`)w-! zy}JHYlHLG_kdT4c)PHF5XAfT=04p@2Rx9#q<&dXOD|Bn+_Y9|49fWvD zN~R>LQ_{t$S&vKo4Oo=sRy3FEHkMs|&MAP7pe#bIDXPF%E^7oBjv;NP8 zkqZti(?uun`2+uyb-xwg)}-xQY88Fa5tLGHFwp*fv?ce0dt*f{-1F9OX6xBgcvm4q z?>%rHSu8d+)21x2+kR-E8>AFLR%_RCZ>nc@?KAf?PcP>2fGs#c? zb786fd}Eya?}d30+9&(he*plmvs;ozWs2QZs$q;honl$3kM$n57q`*dqWDg;IPbob zdyrW3Eb9WfCW`FB4+ zskQySbO6q*VcC%Pw-vnk{MF(7^4{qwrAD>-6>of0*yg8IL7_ZS03+MI^qcq8t6>sl zg(bjwz3&PXxbKUYu#obM6TtYNGU>6snDG}Z>_t46o8JqKHwXQP23hP`cZ(CF-ZI! zU8~K1D55}jES z?z5Qm@xA%wg4OVZhCHpz=Y{?XcSLV^JQIA_{JQsv9T+`rktc^LuCRr>=vN&F$XO2D zqcYZ?E$o#LID==nPDbD$IfX52{)Y`P#AydHo5fi^zQS?gqNv|VaeQx*O6h|{r7ayU zX4*#akXOg{$`O6~Ehaj2(UF#1o42o}&p+IB~ylfe(o`;Dhw6`xDoW_{{v8MC*RiqPhG(C%h&2=2c~S}S$z(I5vE zX9MXxV7{p$ewrY$rk~p62;E4YOC4zZBwAK;Y`kxHvyah~VQ-`*L=LLPK+~)pnSJ)T ze7q3*xv6s{_KoO@XWXrf|HasMKsB{?X$yjg3J54DND(O_O+b28L8MFXpdcWGBoraE zfQX8Kg7gk5O-h2aBy>1@bMEi{wJF=X!_kwGj~BeH#T?ybWg?(In&?#s-3)n& zRNbL$S#ldw>?AJAxJnaC#K(IkL~UXn=eN?gX$hU!Frn{J@_M76()3Zj{_r?7dcJ(p zQidolS-e$|`T-F;KTMvQBP_XC+W9%)+6=_DFA*K?dWAG~R=@g3SSlz2LgMf+k?=P| zD`1VNWr**I_^|i}C7d6fW!aNw=Ig4vAK00JBE=o?5|Yn+2)FXc21m+ImDamy8LdWuhQ4o_bXBP=70v9Vnp-Q4>V z@T84dg`1pWbIFWVTjdUSAmTX+{Q+?GJ5p0XFKiR{=1vf`$k!KW^tkEd73ek@3`%>j zS!UY?qa4-~+Ew)%daE}cA_h%68?Pr=_SEHP%@cmqUWPh$sHWZRuy;+eui%;Pw?rYo zWGg**ir1eVPPyz?Fjuzulu>zU`DXsmU5uY{6wWFB^3 zqbCOr1T(faITDj_j!-r6e}cRcQNRVsZ7M1J%@=!U-tS3Bl3A@lJn+yhY*Z>3DimV> zO_)r;W@>un)Y8&2d@%Z1ljB@tHTsN0vg2eE5QCq;O^6Su;sMFfp@&X-Ap3PfH~qlY zs3GJDUfnS=CkH8h85gT6V0NM`>erqyf0RwEsu4_?;Rp&4(i zsQGd-ecH;b?yr|5y_*`f_GAfS+Avm7t8bB2Td&<#8C8dw(h{bi>Q^Jfm5(ld%O&=e zaVGc{bz-Q`uzQF2xGQU;IVs{gYT@zYAOz=$8U|Rbe(d74ysG(cy43^9EA5fr4NJ4i zX)0+<@^~Ch&!#e`1&O(J)jO0SYExn@Q|jfG^&4>U80x8Ct93)Z&XpxcEyo~tK?-fe zReyt@axSTY79a*+M5L@+s{IH~@8ObiqNt8Z^dwr3`DnM9@#i6EIsT0RlZJv?m5WpG zx5=*z;frDkLXbDB=gD$SC59i>K)mdjLw)AM?HAdxG8vZ)?%79vA^Uo53My5FrjLMB zoJeT~loc_d+b;}+?=>66?f8&Or4?ow4;SNpmMKvaV9%?#8PLtMiluFIPxPZ%|L{2`bA0^bMmk-&P15 z_oM)YE&e6`PwZ3jI{>CYj}`x`+I&`%zm`61%1=wU0)H{pZ7%-R8+EHRW8aDVu&K+k zSn_Mw8Hh@HnaKC)b#9n>qD+vXl%8?r@nPMiHiT$(L!bSXP6NF)PN*ofP!MKS;qhI? z*vZw>_012aGCjyph*F*QP@%C+ZD;AqL~x2wo^CWrQs3~}&zt&a>!!DI+sj4`B>56& z(}x;n#pT9XH(Y~?OUlY8i3ku!Ep0uyK1mtMkWro98lDEy*UhPFR!fuPKU(`_xQ5n6 zBSkwICN0L5Qm6=c*yIT@p{5gPCz<|?8%$5iLibnXR|*+wFE|H#tQ??X;bfqTB7V6^ zPKs@DgJWoY|JRCM*4rY7l^u_oAW==Hb02$FH}|y6azUroSq!Bh(4EkB$&CFiNC}vB zyUBoGqq&OIY8e#fYh}}5mY0W_Pjnuc+vK=i`0#MhM?u)n&|p|ysjk3I2E-T|h~kdA z`=aYuN$YVwH*n=~0@t_x@F6kFZs^u!q7hH3nk+7(hM*(lK9ZWa7t=||LQLYh#;6>I zYGKn+Y2_o@+~KZ+shvgf=z)@(UWT!`_mpb)U_-MF#VImP-ty=>b zD6529u<$uE2jAla=ck836(le%0k$_B;x!+rv_=$JD7#vH4vJ{%cFDuf)nJK&|9=`G zS#S&%+J>8>!?f7f*$JmR4p?PQHc1ie`zaD3#7+q}0_FCaSB|gx?DM?|rHGVFS_d;v z5Of74d~9NP<0{oEc)&p<%V5BV#E59hB+W2;$3HUf_w5t0R`tZ{})9608zgWzPg{JwBK?&0)>jG^aL$XId z%Ji*WeDQmNkI9;%-L+Obfqu|hbVJdl0Z>PX@rOsYy9|A&X>mQ1PIh_QZitcUql~QX z?pin1wQaqq_+^GO5PYY{n-BxyMXGaG(Gt+{DrJaf^4>;Y_6;SaC5nbz79CtX9pc|; zW~hK{bCsZ9VU|`yxe_~h`G>F>beeJd*8L}qS4;(^D_^Rg$lj*sXG){(zZrw=9>bjYq~d5|zijo3rv*PLGFDQwKFVK``fkf2!MUz#SM71> z(ho#QcWf5vc5hgK4+BO=4oOycROT_ldEj>sDN8d}Y{)NvPUszfb?)sDJ=nHqp?`fE zw2WWQ5DJzEs94-Df}u{#A3v{hJ-nE)7ZyOjz^)8?dkhVSRwyvT*?wG~BZecAmnH)q z1s`;}BPs_oK*4Lh$lR$(&|uBn?PhpS1CHX0R>@#m?2qNcJUkIV# zj??Am%W!9E$=qtv>M?ZQue#c`>dt^}@)9wU^qeeB>gL8H0psydl>OVj0696=?@?SQ zAhd>mqf7vIdMJ039BK0XGWbQu=C%2r%Qmv@MF~c$j6ioO^SR!Ubzza#i3vJ!bVjRd zzj#J327g!~vfOK}1;I-uUy2V>Ov#q@iBt+NW4jPf{iw3MW*TvkfR<{$ zLyA*I%daQ)b^>VK2jmv3dU)=A;FL#3Ew7>Wr1PND`=;RrM=L#uRJgi!O-@*&=etX5 zyFBNQ=gNEwW6V(js$ZQ-Qvrh4zRwm{$htIXtdoMp-W-%LKE#Xm${`wy(y%LoE3p-H zLm_x|b+0CjF*&7Lr++IOJ#aq8qlj=`=r*dLWs%k3$==3fi|bV5y6EU>g>)cralqu% zI+h*a&YumG>cG)mb+SaX$5{ehW9?kiVTPh;b9}{-ZQTChI{;O=lJaS0R?n|wRW?!* z&SW@uvTJbq-wS|`jNwG`LHkh9^Od{{Nw?G%Ry|}Vw^rQjS8@HRAAx4O)uf4`OdF!8 zIrJH0Y2J~z5W30ebH=|qZ~n^o2A==`{f0ODBig^gtdrZEcg1MPab{LAMV*ovDrE!K zqldPLStC%z@KKenMcCn?2iMy1*gP~XLHL>kfI7|^svy-qTv*(w`5 zf#qtCa#9L>BUVTE=UQMrM6rO3w37n!2O%!Uu~fP7p_{@Eja2)Vcjmn8){>x#)PfTj ze*%=}r~&ePe{HPx*A^zgh&uHu$8v&9A3puCM)d|bWlnlFF#d+esBGrj$Dz-U!S3e( zMkFHNmvFmhSN}zCf@yiXm)Up_bZ@LTs9QI}ZpxQ-iaH)(gyaN{M^8$1Z0yG2>hHzv zE9v#~PKjQuo=d#7^{T34e-x}D0#t-t`tP zSV0Y-kjWgx(7!v7vo)Gmj}!D!m#TspLCO>8MIjXtTWg6v}pHiQ>!`Q z5ktu=cjVr;f#dUEIx;M|AcmcYdHW5Yao6BSAesG7TXCs?RF^&T*t~$mWRXyEyUN{C z=lhMRAS6jt>6-jUc~Zvali$g{uhY1puccBR2SHui(@RRoqOhISJxz*UO3%5lI0g`Btf*O0fpJ3)*(DO>}{mog9 zG>!yIIp;_$ieh}kn@FRNvflbZYPhEVe1Ck^P?y|xutL4E)-e-a9$ce?p`I}|sC1H9 zbnC#6@*h;F#C2u)i**ap`w3e2VG2LHcA=p{m^|_~Qh#xw14-v8ZtK>V=(}TE<4Jq2 zTUbQ-uNuFRRlzz*Fw}v%q!yl0Ge6N6dO{TERX?(VBfX>fIpMbI#lxvWzCg&7oD8qn zJDA#(7aa&s$sWP$l6!coN>$g0CzVjX*^3tl&netu7q75269eo_ue9c5Q*k7>n13=L z^Z=ph@k8?4iN9~oPqCi|3z0J0#p_M*DVe2mv4gaJT$A7RHv0*u;~z5BZI6FKr}l_U zAjQC&Go#Y)I3dc9f+r6_sj^)*)e}I8ah4%-cuXUcKk(fpn*tqx320|;wMSE)>FP?D zemCac-2TGBgRjG8`&$C}b>Y*&rP3LrZV(fsg?gY-wKJ_N>H@SQHa1i}^!3+e=@87O zfi#WcyNPMc!i5b*#@P4d+XnIL?F+e{Cw-oH`0a#N(s)j|_wOFa>|?=}Qe;VChi!=k z^>J;ddx1T4@8dHkNid6R{PB(sgOd*pYegDPWSxE(|Hhcha(%q$G@`}&a&dolQf_Te z*XzQ8_%tx3U^aava6!qS;#Y2Mch~uL=g$7gkeQlS*VVRF9BppJEc80_%@|-w8kYw` z8yrhBIa%d-6(0;H>2!56Id|Fy1f03fZXiY0kFiLS&T*&v@Z*y`m;oaTunKja0XNhN zva-h3cN`Dgjmb&JV{=m$BUgmXP)|)Uhl*l`b$W~2;|;~NAMXK{w7Ktd#F{hNV#_QU z)UKz1EDNP2NE06(eNs+0vV?;Mfy4deQ?PeKW^`Wsanv!RG*U9DCcst$bX}<#6o5Q-U)+ zWHVdGI7bewF6o(seYLs2-!~5rmRYHblxB2)qM~1Ph7B%%r^>DWQB(38HG!mZc^Xgn zSIt<3CQR+%e!gfIgXDy`Mn>*8TRmcQjRBfZ$@OWc2;zQt`~LX+Jic3{qz}Q~g z-c0N_eOvlPEAP$Fo@FNQSaCW3<7RHB)UFxq-u2ZZWZDw=AdB&(d$KrvnZDNKDc|6u zYtiZ-C+R}P(uu3t*-ABEMOt~__j6Y5zI`4JCv5EYOW2&UP-r8c5`Niy(};37vHUBi z@E((BVCVfZ$GvAbm;F{2spul}7?gSR^yhjNzJ)pSxg5{ccC)XSqA z(}Py?bE))+N>-vkzVw;RrZld4qM3S+0kcV`3$7Sabo;v|0OjM~<$ERqUFJV(jS=*g zWF_H91BwUJb-Z@SSaYC$5J)=xJ`$dNqN-MBTS{1>*5OnZ?>JK#2OCL9t*zkp(O`l0 z7SJwmPz&37SPdV=!7c9*kXQ1T)ZhSLZs`eTYJE}lXy7M{A!Q9wq=R;l$!I0{3$3R+ z_6lY54pQZFPPnl3A45}n$)Se27Z33P1l5k2fFw$_+^^k=Gk~)=l51lA9v~Np$jGt2`fU= z2t^F_C*~+f>u(ecsebA=4bka=eLours@VO)VQ8feZ9fAXTC4ScH2>bB5b}DL)56vl zoxw9F5s1C6#S}v)@s%RkluP&=a@Qd?a3wkQ70qPeqK|{*yd56hxgu3 zsmS>`l#pfjpJetG!+fs} zBxTn(JHneg>!^)klwAGtQf97|K4C>C!bZB(j7U2ylsL38jc3kdgEQWYhq*pr2^=#T zO0o;_vy#dlIu*k}kZwJ}6X_5?Oza~aDGjF8nq z+bp%pVMvBMqzV-9Uo3Bul9lfI5!+z^BZj>CYl00PSp6`j*PW-LshV9}+8yC?!!YpK zQhN@-DCSL0PR_dY=Trtqtz4MI^{BS%3*fV6NVCuWjt`#zX(e!AEAO=Ank|~j|Ds&Ou8sMcrC#4Gwm_a@nv|BlA~qwWXvi$YjV#{TnxuF~BAZ>HWBVYf&r;%zB0 znEco03bi&-v}#fk9Xq42mFW2N%1?aPo6!ERyiff-h5Kva&wy?tSRlNF=f4Y#fBK7G z3t&`k)9K3nV;TQ|GXG*ofBc@L=;-A6H*WO5OOOBj>tq4|=g;0WW%^%h``4%a*B5FA z0(dnFi!D(T7QQ3%uxnaeBtZDvuZYo3ghoesOvvGMe7xNi(AksdC+c|~h=O+cLb)qA zU>x8(*1P@T3eSq@eL%Xg;26B#=>Pic-_LQDE8_m_qp+=NmrFO>84fysHCp}HQk~3^ zeCi4u5pFYFU}L=trS%YcnQe(nm?ZO&w2wvnWGqNI=4b1nvt3Z~-zN(G@rZ+^z!P4d z%J6Q|W%X)$H!0O?Zyx`o;LbfIx&E(+JHWlSMBi}H5Qi1rul9ZTpY1e%ZAZj?`qjWJ zHMzDkNs8kSjSiun6)ZP4b2}UIU=2-P6!*MN$M8yHMsKH8<73!(O)j=?Qp?F#Mg4P= zF&zEBXMAq6-z}N;)640clB;6=_d6_U1XzeDe2S!?Oq-1jV*gw{;RrQW%R)F-?CQAX zk;r~^#3qI;*Sy(%FZc7bKRCX*U$+;^_V2_l3@bxJ!Oq;YCkv38p7hT?2Tgj9=G4Pt ztN&TB`Okekn|;g&HJyE{mXn5jPuG-%_N1Td6aQxpK(a91(wr_k-IN7{aP-1IPey=kt-gc%$LX{aHmX*Ho zvzo0!XS?6}TwNIyeo?QEb(M_;ZWh$%AC8#2H_F*vpZNSs+kdI*Umx?Y7w?`R39|1uX7W+`9BtZ4wTCSKi|wwf=9vwBXs3L--1Cp25<-FLxka zI)9*K6M96QY9p-o8zCL1!_X=!9Ua^IBzMG~MhKBcMAzi-z#S&<(A<>Go)&TCijw|4 z8rC;&wQk;P)ikHm6~6vn;Oefz+pDKO#R{+q5s#Dab_$W>8fJZ&v$o*5%kW^&;L^{l z{rxX?QuvBW%W{M3ck$JJv-`V2dR`K0-!pBK4NnrZgYZ7z`M*ii&D~aXDwJr($tYkB zLw8T@c1WLmqUpo>P3rRwW*N2Z*+ZDdtuKi!a(D6{qy5v>u6v9Y7C~-!d0#gS7{!^R z>L6g8On2bf;@BLQPbIS}&gDfmV%OR&@-n+eoIu2-Ae^$(!Q1|$J$-ejw)6H4vwNEA zDtKQ9M9vg02-$LbFXSbtQ3A^lzTMEd$8dD`!|zz$@$E~k#AE6VKb4*g(1bEi|KqK1 zxp~LeR5H%N^XNC_)JA;qvYTFs0%B^>u9Hk$pHrop_}H2C{n$hNzKm>LlOsSdbb=_)J3Wfw8DAkJf-Z{SR*Df z*WK2ln~}GsG_qN?j#G^H8zTO7x*0kK$=&&0}=9 zTdju*YM+hq>Qou~afS?HtcGq;6G^mT!Vxv@-W`9BycVl|7TC*wdv%G>?Bq-yPKXDV z6ZJ|fp7&X4*oxGe?KvYZdvmVjboxhXs<6FbnFb^fDp+agoX?8;>cwMq;cU6zCVM(r zk)|G4f--l6y#{Gjs(r!M*Z&(WKS^ZrCQd%vk&QbiCl=AqIJ)zbbtBs4->=~JvLa^q zk3}?SZrMCTmh<^p(AAhGD3bzTw}oNZFL&HQibS+b@5ig#rrdPi{(1Rg=L3e#(-gVe z^Xx{aWIfDUwktqNI_de2I{Ok{Cl7cuH7BEd=GSceUVV)Z$jEffeAsNH=PV}g@9$p& z#s`#^APQf+xRVpdMF%XsUM`}l>YRmzrRhMf+K2b=1pq6XU9N5}Q}n74t->EFE8=B}?c}5SeWtDtrH$l3VyMnb;Y$%S zUN@&D`}cDFM-b;RX!WpCN*OTjvp;HV0(0n4>g3HL2ML_o;v4;do5d%W=JLwFI;3U$ z#Z)jg=aGaVO$qe~i|MB-(z)JXY18b^&tgrb8{4dedkNG^cyE8m;MeBt|p6&zR1MC(`S%&}Q z$AS0TZ~rB$+Lut>uvVt()6`Bi(f4WRvx^VfcIr+M>h9R2#jD5Yb?-g9<4;^RuDA^< z5Vd0CvFZtt@TjCG3$D+2J)IR;0LEyJio1XL`R*(_Y4XBY#9!-LtHbQ)r!4HgIMW}t zC_+}zBVZJboM&kXxFAWV#p8c4+hY--tY=9#!y8U5d-^hm5FicxQ=>j<1J2~gR)=2L zR6Ui-fkBuh(kR|BK4!A(cknqLusacUT6?2K9s~8QMw6HMdh5=e$Al}o z=&jZ$P9c8*D)y@xZ)a$`w!C~;Nqj={d!x=BkJwyMNPj%v6tX#UfZ20%s0yJ^h3IdQK+QU%}BAaPttvP~fbxq7xc7v(0 ztvpscSt!cdArOT_v_Kesm+3ym8`~$ z`}9PjfH$@=m`M(jO{uWqMzvlNep&{$=Xr%gkt|eEdj%62?+ZyQ=sG$qfhTSro~F+l zVrarE?5(r&IKHqQY;&59Y)?Mv^;?3`n)jwtK@@QT*yvV)bGHV;!qPzNY#`Vwgz1!E*o1HYM3)9nZlhzTfF%ISgq zeHJpm?j^tho>QSYkI{K`!R=o1z2K~KuCs7fieduyk&Y&X&hrmj{M+?#(wrnnUL$=I zp>;^)^ZLB{^uWhBW>JWa=n?K6#s)0Upsd1Ppu#_Hc&4HzSXtNemwl|h76)I>&AS0U z%Ld=)>#73Ad-krSvDL7gBDDEzlE|=^`0{}dh`Vw<{N7@>{&Kr-Zfeq#6U4n&MCx|J z-ZMyyN+#I7_|)9?EO9_Q5=`9q|SA zlZ5urEddNeEv00uI@1nU~4#9MV^FR|FenElE zExf^5(+Q*se*k??G=H6a((3RwglFsF3&|@bIV-xXn-8$M2knf62dqQ$F7f#>y2bcn zacg`^QKKv%_#X~$AHS%bpIyK_CwdP^hS*I9ypBb$9zL8w_1YbN*Q@3)xXRKZb%6$0 zo)PUe@AwPq!{NK;cjp9rqoPM19Ox-S>`68KBLLby@#jFoez&w|ey{N-QTSK{zOQgG zc$N-gg#$+n<2L4Yj@bi2gYAc!wX%$<^6JfF4lX)KL+rOvWxGJ;tqX2tv|B9h20ljp zxoP$Uj;OPk9P96lzrESR(}bs=ITBQ|y1*4oXy!j!C15wnfWsB~-d}q%z(!-(Gn1J3 z*w?j~r$SYs)RkQ=Lr}buc2Y+|QR2-QKAqW|<)*pdFN`LeCB0 zUT1-~v|GR^;eDy8;Df_7AM$lltE}NYReVRsL9nHSNgANTobj`XfE$7yCZsedk&<6c-U6234IX zp|;6A-)!i=n9Z#kw|2g!{m+_T!vG*U$r4^HFG%c89w4}1NEM`#-gH1T>OZw!MfE(Y z3>dHqtMp}E@-!isIM=T1zF&1+jTxt8c~E%?ZAv!5%I<5N+=h#J;5-g{e(whIsa-&O z>S-fxohEz|yvo1ggXzlAH6_W0R3G4GANYB3H{_Hxsd4_F!qff>l@zlsu+4R_{1e$d zpoLj?lltG}+9QPwrpYfipI4eL1mu+FLQGTe@SIu+$~$}g;Y$}!pCXJ?$G_wIk_`wP zPGXiwd3^}w-2BVw{>>bk5I~BGw9nZvQA|A9m%SM1AF9ar*Fc(G>$D z#j_?Zp6umzvLcJeJO2YD{F~P|$xjxUcC*ayS+Vm`F%tnh&=pLNyYv>2R4g<=9YWGu zc{maXCZeqfp*=$^mx=&Wpd>9?yjfOym@HSb=+YBkZ~sIX6C{4o}~k38xKFZ31O)Ar{Nt$@k$^%Qg&P>by&4%%u?KB57b&K7~ z?xELEUWvP(ldyIOG7htw_zLLCja%dVztnIpR@2l$(uo+E_lWi^CV%H#-v|9^WEM`nJrRc3uN$3-~OffoI8tS~#S(QVZ`Ku)9^BCxO zkZ&uPKe*xi3`+4?D^F|8ZD6A%Z@;}l2Z?Yw-HAl$&rw%pETAFCTd+-`i)H{&S#!m| z`!fLL{{{z069DO*_mNuBv0<{Pz4bObpt0kA3lJt;u3(c|oxGd%rvn&K^ZD`bV?>GP zUfNa-J!2$1ClHk-acbh-jo$=9W!`&;1sTtqep-z@fJCV9L)N1|QzuXd<6xVzOBMFD z9pc;}-rQ#bfrznqi|&+=Hw%x<)s+xnG;;fhya3Fg)HfvewHh`o1UbRH?t*{&=k@OJ zzuk@87d}5c@}=d~3dJG-uK_b-ci)ka`&-`Y=&#w$d4wQfE+mlN?%j* z;j_o-t%&dBcLJeDqUN>)!9&PLB5ZIn49dVKi1o!R58!e7>RaJ)ae?3KVhqWtr61blfAJc^&ZY zTmKZ9A436sIQ=+WJ5YZu-^)}5nb(Ugib=u>o+A7{9#;{f$Gq%nGyQOK zDbuRrUB~NnS);s}19Ta6H*Si^_QUn#JUN+KDYd?ST}e%gjLa#H8%ppOq1}$ zh*nZP`|o^i@f6)D3GdVFdwaU}c3KdZd`~nlS~dCHhDfKa*Az~~-?|0tg7&LL6W{+? z`iRSCi+hAdW^Mf-yq(4VsZ0?2vqwIiMK6M1jrLzJ42ZZQ&W zpJ3@dn+pD}hy-gvG+JJuA4837H&O7#_PXCz`g+tPZ1{xSANS&k=9bW3T#%&}T2Q0w z#W?-mZ0@=5J*WDI4yX48X<_faI6Jr?YxN&WJ`22*nyY%%yJz!p;Z;ZwMNq;7g#;X2 zzp~-eMKHd&j0s=_a$-M%AO$Z9jZOXfZ1tE9E~HR-_#Uh>$svPZXDTK|jCE%-OYC=e z+OMCGgWBBsBH-#deTGAnf#|R6i!kI~;L0m(oY3@W;c-4tfI8e^>dABYQ6rM_T19@a zx$XgX^htc<{B1Yoh`CG2rM;O$KYzF^sJk**^AwJliOM~)DidiK$INJZ;u_N{Tm%YV ztY(1kZ{9$JM0q+jcWk`GIH>PD2GxLWm(sL3m~InoTbp2*5jJ zJ1pch0l6{P_831pY&3L+Jsz)u2u^P$DMPKIXHr>k1w!4Ua>DS$_x9ZY#Ou=oPvREA zd-i8BNt0?(4u0%%;vtD#3lpE;FLAltt6UdK=JHSfJhtL#yCpv|P#4<{HeNM+t(ttz z4TDxX>7Upcu|O(Qtlw_P#UR4;^-4m!FPh6A4&jD&>q{b*-432o zsBSQ92-?#t&D&D&w5KL3aa1-fznOYCo)PzgWWF^?`H;YOz3bjtGqn%C@z8ssv6}%U z@E_OmnkJy=o(?|ad9wjjgA7i<3#%S}F%Oy0-Erymyh@m~i)!FmA!Y`!%8JjhTo=4F zWG`S{^XB{{HjClRDSw{l9GLm~4gLDj04HnwOTx<;4%NRntv`_b^nl?tXtrvHR);Gx ztAPLV8ttNdT<=A9y-S9@7Y z0z6zdP;g!kfSc+M)Q<7xhJ-fw^ktbJ^;eVx;bYFsUXN%9!s}#r>==2@-1TU9{GqjP z#;@RsS-R zrzV-JA2iksbl7r~9mTgVcLp&ThJ`1$I&AH-eDIm?$p!0POxfUqyvG1YSOk)!Ffr;S%@6s)pAMlza7l7x#90^MFnDC0kS^DrZxX%EblRe(>Da zGTe;5=^5YzA{m&vwjJM3nbf4lj-o~b_}*hq@1k120)Xw`Udrh}Xhue++1x0OYIV4Q zR^Gj3F&&@{?J=;r;ak)BDIP%3Nb?^%_Bmp5!NW?QM>9%ujRbtrsFzc_^jjCCizLFl zDiy!lzF&=W30`F+2tDrUPZ}zIREUva9B>0*9R@MHtlT0d37xq4hGBXDdv`F474co2>xB`bDH_ata`u6J@nTC zeU{ki)L-@37UNHqUSBR>(zd_(y3DD#K2@!vM>tn+KFP@A7oVf1F?3EB?6Jr6@1MR1l}44V==!m$)JtqY7k1pgF*kBydtk^|A@LG z-=8t(FO_Zgm*aNeJJdqB@wFAK(9iQnSHjii5ic6CD`ro{q%M|ICnE~sZ zBGgt)wzAGct6Ei`Ja;pqnPh|GKmN=!KRR@H;Wyu`P^}17vrjmF@PdBJ6irEzwmp%Q}2Q3pdOUFy$KYR~A8|$PIGv7Ccu3a=AbU(xB zGM;8nW#s(T;*3*Th@d@sD8aPT@W^`2DbcSdcTV7C+S+k8*T#65=TF|7eki+#={;d{ zU-lC9H|hy3K$LwysP0m|IeQ+}GD*nUQEw-Cz>Ja7Ai1>PbTFxL1C;dmr>l#`yM>FjKTGnqtSApo8fi64LuDF@Kj49|vr8?O zQrDY?#9C*n-+o~GV5tQ!MyqyJe8r+e`g9hj$g8q&gq&xCPb9jymWs9<#Rj&)NK;$IBAW2cHF z_;zVwJN=wy;~ze|925bkHEArV!4UgjiLAF@f5?arPv2R9hQGQJtt5e2y(syqF?nHE zqOoP8Q1E?4@>+>|ZLky>hi$%XSmw@kxqA7H6L-M5Cxg8Tzncz2cNN!T(Ih)?4Zyf^H}sE8=EnZHh6ALNf`6en!!H1e z`y^cJrzSd6pImVGiH>aE5^Y|Kh1nxjT%D}7{IjPCxLA+ax4azfIp(ie*uQSt`kwD` z&5il8d<7X-#S%B(Y1Nx6CK7udLsCMbsIH?zJd)nn@Sjqi>7Q>|M(B?Z`;~<5R|YA8 zLQWI>p@dJjD6wvcDutR=)`?L8(LqpdT^A++{!#nnf&y1DOUrjH|FWZVI=z;w!6m#4 z=2+DrWHiK>X(H-cz?MJ|HwU4|dCe(QBQdve`TEuY^mQxPG*wnA36ecvTDSGuT-n?G zC=_|8Z^%jJ6UbaIAX*TTegu^h|izNLE|78Mtqs*G$Z zIFfFKQ4zwY)Z`v1a1=*zC5&ld{m#|B9I;@S=!hxVGI!y@%S(oI8&r(Vn_lCoIqihi z8UERJB>R0J%=0nok@Y@bX*f3I5x<<5ljDGNxe%5cUsPLd=(%2cn|%HI!OTYlE!xK1 zgFfZ;p`y;mc)1m?8H7N=-8;{_;muIont;h-t(3jn7m{h*t|T{1Tn8O5ld$?)Kkt65 z+u*^E)1uxzL7NS_))FgN=>`NG5@AP2s+mEcWSsPVj;(Au=686hfQgwnIqG$rX~ z9xHtp{b^?*sfBkt9nk>ZukTw0FpQjlht4fVb_~A0#eYn$PHTCsveTr!VCZwv_JN!% zRL}6bFSSTHgsaONLaMedNai-BXkCGW+=jhdDN@vIVPAJCaeFn)?`MyZ${+MBa)hBtK zml~^uyx6PDMRL{Fnk^B;;&#>S;cv#`DZ1s4Gj<%VH7_x>`C&u;*N^3*ZJjkgKa&0&V6P?Kl3eH zzxwXu;Skd|A;g6iDhXr|6W|a#>|Y(`HaMZ*uza86oy~Tt>E57%VQF}h@8QR(40WQu z3lo?a#d3Erta{Aezja{HO-6WWLdm%)TO$iV2woklTl(Y7B4$d(cd?0rPqTo$Yu*u? zF}&`UYrl2WKg+F9;Oii3=PR{=#WZU== z;5PaWP4}gycePcmV+*O{;48j%9^FmSL7OpZBBjP1_9*2}3!*1wE#m*G=OO=tIZJ!# zs~h(0f7C<)<_t+&vPp!ea=GE~H22I8)TjQ>I zr@h`g_qFc5-oak@!of$1tguDYzOcSQQPByoqr#e?xz$;4$dDiH}^ z^7MN|eZ?2_fjOg|IuEkG8lGl)g}Erkq1kQs_cAPvWhr8NTFr0za@67)qo$6Z-&gmV z+3G8~)ZsuOMfHmwkxU0lz6m8Z7kKg)BaXmrbmWNRr3VzDYrZR6$@e8zM$`eDzBA1s zGOBTT(z^aOcoP@diG%K;_delF!agm$<@@)*96;-dXU{g>3=an?%`#KGXuRaqKdUQ1 z-AVVkZI5B`qZiSwJ4R-_sRF8L>zFTr5f?UCgllzQFHD%{Pfs5K{k z5j+qcE%gjm(>hTT78k8**e&A}kjQ3ZdWD$(P>TlL$xGO=e%Knd8YNDf|2rC+9jJ0- z*d&jteUbBQeB2s$scj+#!MROw*$cN5z}OHVb3hwxkaTPjL*=7ge~xeApGAxL-)o{xeXInRf=PAy~9Fj?CB2nXXnCb?|to=JE-log}B7{D1P5H=Vqka{rY>O{St z@OYZ(bkj+{=td(Z{J_f%#A|?dBM59@2X-QrY6-DbzdHAN9^o2a4n=FMYI~_rM@P*k zWZnU6z>x$zR!M4&n6|~}cGma`iV3$^i8PBh`M)Tx@V_XocCNpsIR_YG9GHSrN?c}RL>eiM@qz)H~Un)?TjNX`<;PLhM(p0V65P;>u~5Ix!O zbO|+Rl4u=M(6eyzfyzWcAG>?Psyo=!lXA#3AlYekh1QSDYtw1aUDblr8Diy^jETXT zkH!v}9gQ#9fD=y=ZZi1Gwzz9SqU({$_SEgsMg|XkyBdkS0Or#_Itv--^cibpt=zBtanJ->C6*%;0b z0DQ}J7rTu(Z$@!NJW65d(NHu#zFEHzXXx6#G6UkjM~Q@F4Axn!;!;x9hK=zAmoYk-y3dw~isGCU`%;+n{ z_2Nl8yWc5Lln7ff-xss*iseQF-|Ip{hU0J8#_aZ~j^=L=9>-$`*H7#@bk>d4FXXfQ z(LrjyU19yJuq!-cKN|m$E1>j&StCbrPX6y6jSR8>pzco*WE{HRl*$S2DZob9gt>?y z<6j@URtj!a^~v?7f!Rly?-WKA8m8^&A{~J0=KA=-1612#@2o+@-onMCgA3+(BfM=- zP;HJwNLke$7BO{SS;dnD0@Zfds|B{`R^!5wl-W8ee%tTkE3+r-heIijTy84Q{ekqs zXYMBrqW-2o^eATNxrW=q?o!jvT{>*0d*hAaDh1e19H;Vu$azfGXtQ?VaajLP6Aem* zTZP+Fa#N=3z(Vh*rLTF4_?J6E@Q#bW)cmraKh*W_AE&Q6rDNWsK58mRTVH_ve~i6% zRFhlxEqp{26a}$>Qk5!QrFRq%=~9#q0@7RPLVySyr3pw8q$9luNK1fFEr9f10|~t* z5eNhlLhgg-{f#^By~p?a#^4V}h9l3Dz1LcMl{x1IF~rfWh@m1J(lpePrCbjVLpCXN zs#@c+KIo5Iw-qNww~jRseCMx`c$TVcI*r~ze1&ZqA{X@^P`XFq?AiUCDovEd$+Acv zb;`gaAN8ND*#@>VpTsuY#9+k#0+Y@S<>gj@8*SoOY!)CR$)C zxj=#HNkFe@w>=ij2yfTC8fsScsVe~@zIB7qUSyN8QjDWiT`%OOnk?1dR$we1Xg@4& z9h#%I=_4}zTI#_dpo_&Bl`hQMBpKoEu|On1PC^#!Y~!q}$uXt*H*m& zx9pjGpLd=Cv4w0I1$gRp=iH|!o1JF8LgF*O<^3{VD)yWvm$)AcYR~F?6IKxG4~WKs zkH%`7sXZBfGEWZJd}#E~=T~pqOD}G&pT_Gy-V*{zR=!F=a?XdW7m|uW%SYVD zS2~{5zUP_mY5^LTh6D6_`ZAADDSLrd-&;hM359aT#pp51z!7wAJ398(wY|KP5&4Zq zznnS?=)(;2ZFBEos{aDF68}Af3%)ii^fSI*9c``~-5|_e+J@l)@CT|ep06`M#I;a5 zSGm!}Sd*KrHS;?s&y6EdEBiNI0)u?_zXkx~invWn z>!4&^o1MVLpC%`+JI~IS)3#=51k(1_B*o37w*D9%z^31yt}^u!m2@*jv3ifyQzNXo zbx`gz&3`-R5X&U9@Cgi|t&OGGOo}!;%?bFERec3g(7Y`1T6XNdsUqH;0Z+CL%9gXLGf>Hd1lw{H`BPPTIlzI(e}v{LSmG1A*hp=+@X`QV6ICG-b{Z?;4* zFSnM-$4@>fI68RNsUW_4k5jJqVJmznUUzcU*^fFc{w)s5N9q0vF!ClkI4>3~gJnd>0ZPDKYTT5j6CdP9x znrf!y?ZGrO2>lU>4L`%2xY8Hd3I~Qas1bVpBGVs*Kt|g^>W`OQK2l9DnNr%Ty9x1? zaxPnshy#nY3okGdFJL zTBV82nY=~ZDTTRkr>DR1h9~20KKekM&%Bd6vovyW4#O7S&oTJaxh7ya zc78Hw02^!Kgxq=jJ~jN{O2dyTm7K{o@>*TDNS2*^sVgqQKKSZot8Qv{>6VZUozrdB zZOa*fP6w}I1(ZhTQ;Qn$)SKP>R%zjqyz|Ak2h8nsq4x5D0~?U2^$Wf_ z26bNd);K+XV?v>Y&{+_QcVTx7%F3=FC+O3Dl0zbIQjA6?HjtMqA}4n z8H>_-g#o?#Wl42oED2^EHf7ZBj|6LUy}#u}Jo%fD7_E@ZRL88&v{}LdHje>iFtsYi zRCcMPrTfeP-8uV&5ZboOn$o6$(TvaBqKbv7Vg)R3M`;N!lsM3rf79@ud#qzdx+v~p z`b0ZZ1D=c@OWBXW%=I}nY^{;!8U$9l_r|)Fzna5|8B8Uu-1T6mwkV#&DYu*RvweDq ztMV3KiJGZj9GOiI&9#HbCe;#?H?-<8nUe@d47d2iPB;~3^VpJ(GJ1LNV%&_!YTYt- zi`p(YH;4A+_%3h}2XsVb+X3s6ZI_)&8}%qvzESh=A=QztLT}x54OArtIYOGQuftvjq-z+j6-l!mE*9vHD}&>?|#)kvr@S3yf;kMT%?h3 z;~lc5z?Y4?IIWb8i`g7LWs=HmLK|IOupV6%!Yz!fjI~)=F%7H<)I*$NKN@K%11^<9 zT)X-z|KO93*I>Bb!~@4*9&Vspq zC>Vv#9;^hYw{0Gc$}d!yyMAkVLHS=YbAc;&OWG}rtaRxVa5ww2V6UNWvzWb&QMe>p zD)<3#Vp=Ej3+)qUXI^biGj8ll&gc1VNgh`6^Yc3%Hw@!8Y~wkkJx25m3^YYr2r@0l zJ5deEqJRJJ1j3us$cfK>@%AM!A(lq2cfa9u~UM zH<|B4DUVTdw^FWVBHhkm(j*fjn>%b`;2qTswyEuNDTa%lYc5+2kKa&{rXIEN-lP&j zbp5kHcR_m@>Fx{i4We!j0QJh=%9eV&ea%Jh1Gx1!9^2RQ4RiP_EvKuMs`QBxb3!7f zV{bHBK|{KpOtR(UJngUhf3f;pKNv)(ezPO%{-A6jd6T#Y{>t1q^%mSg{f8X*FY1B| zCFk$7$pgrN>O@bH1u)iOOHYq9_0j#`(C(N2fp!D7I5{ysoO9wOB4k-3mW-?8OIjaG ziqALXzu}zZgZe~PP#0-EHZ5sXiOm5|l#W$-9Wn!2CAe(bH|5nC=XxKRn9@hH7r&SCCVH;B?8c2_}ByCYRw z6Ld}+F#^D1o%mSE%$Ocq-3P}}nmSM;oXoJ{=G%25aGm(ltZM6Gec&YFKb_`VBq)74 zhk23iWzA#Nvk$Kcc}Q12K3}Oi`+Pxe4$C*csYa*=jvB$wR%_F~!q5Y`|LXE=p<&dB zUBho4Cs=pWCfCM0Vs^WovObOaQBbf@k&KE6dbaoUc)+S!F*r zW@fn8CaDepiXBZsWH*>hZ5erRF(M{#`iN^Xw6(tb#l%D!#D=sJy&19KV8#h@@Udjo z>r$xfLjT{l09ar#=a3!+?DY_q&oT>~?v+Is3LkB$_;ULXh}2MttC6ECDj7q_u9;W- zTDnTPw<+*&@73WsJi;S|lLI52`4-+6JyKawkuMv9cQ9=UjID0`bu8*M7HNGUCC9DC zcT1w_h!^Hv_WJSWcsZ}dtNB}ob8S{{7Zgv9Jks}5QlW&Bc=ktB7?^)&1Dl{(YnWxw zim!aZ%#3MZe3hz3B?TZP!@SRO;iOkKMAv1qve;UgYP3^3!-;sn^oSCs%?ELtR6s1Y zi0dK5t1Ojcnb#Zyg{_Dl4pMFr;rD2PD&rP|x=yK$*AS5TO{X#x*tr{0!sK;l^^0fc zr$@Wyl{s7&W|dI1^LI|`NS_nPh75tskRVJZ;X*(fh^fXEvdZ~zkh=Izvq75qH`zm=it@pEJa$IQ@JxLw~R z>~mZk*HfcDva?N7HN+V&Z>ObujN^5JS@`v(^OSbBk@IKYy^wcA{Y9Ahv1T{jAT#mV zLQRpl;?e&USer;s!nZBu%=F_QDPzlP*+(W#TUB@id8{tmjSjcL)N|hfYSR|oZ?F}H zrGu5hS4hz7Mx(_rDt*;#+HXQeFggR7-nU??@k}?~qA9xPp)xR|;a&Shqh?}tzgJT) zWN#pesi5XVzz zC_Q4(-`HrjU~YA%oWX~G#=coos(^=(nWr=7Y5?uuYxPf3P&IeXJxb?fco1_>GJs3X z4ic4LYoQu)wq>QOEwA4U`czf*T=3FvOi5ld!j5U0m!gh(xUi6~i4YxAT2?mV1Q`q_ z=fUPf2H$0M5iR4Fx_28!7(&g0d)b!#PZp|nD~p{Bct+QBNMaV=--PUM(jzqZ$iBun zFX7UjZ-4Jra)4-_O^QbzZhJN;Ff<4K1&=OAVtPNOPyyfJFeXF+!?__ErUktbQ^S=j zs}&w3!hXQsIW=HiZr?sdV&bGSqu03qAEZup-}-{O3=P73cyOeo&k)O0I= z#t`a=1*{Y7b-m*g;_Sc4Fn@q1S%fRWX%LBv#7`0Il45aE+e$La?ZL`FAoA&}TxnJh zVZjX0BffG92AXsxUK|tlG+y;TAi?Zn{VqKIRDNiFe?f&m2bAcRKK}fnv=r*Jc4o29 zRtEBd{p<8-;Jho&`<^P#1L%KNJ*9w2-?2P}59QL(8`m8w*P7mFSZU|t^U%xPmkl4| z*O(3NRCvL>ouq3k+C?-@u|}p&u0p6OR0rwTb#SbY*Zw{l^87Q;Z^)EF-50p=tE(A7 zT?cO`S?MsIuoPcT^}?hTkNmx3`^f09^RxeYD;3*=B@U^WUzwT-V(W>t7Cm>U&}wQd zflBMR%gmB#-Cp-UD)>Ig3h60UcJs{zHvaI{dK=(yE0gbJ)jNbsr?xgX*E_M~KHQzK z*%ywm)O(?(Iv=^71sGp{Wpu3}+@?)P0WT9)OQUlAMshgM>B+WwGRvW2B~A=pdSsAX zUNP~Y#0`ELt50qc$Dl9Ork>_fV{TLZ?rJGH@a9tZL*h`+$4&mW#w#G^mA&{`s9YK+ zUgWSbCuFoZ?-1mFn7R3AIU89Sw#ggKS}XXl{8v2Y?I8>Wz6GzS;xQ1?HPm$Ywbp5B z=+39*`5f45OcPN-G-T)uaVQ~z{nVH~9(9`eki+RRKIwi@YPI@X$+8P`-~>ae-j?y;2_rTfvtBN*g3LtR?|I5K@Yop{p^4$_$j7@@X%Yf;fChMj?vg^7Py zZcJW3`cZP;93dA5uo!wo;G8vwZ=&H!N4LXHni#=s5NYC^5iSJkD&)tjF1Np-1lrl7 zVRc$AvF#NnJ{22F4AyXN`9>24N=*A)$DPx(r{Dr`A|_HQw>qr*$NHfAePe$Db)isIKGndjfN8*Zs^RxhPXIAw$zn2 zYpK<`A$u(&QVAgchCmV|W-L%ABnwFKIU2@W%|<~a&9N#GwM%c3=~9DL+D_0G_C7ER z|DtR0iag&(=160;A|p$>3NGh$WflzTw%%>He@mI)Y9n6LVV+k42*3HgZGjI9DlS2v zqbjRBa&x?$clR^Xo6FSb2%D+RW6O)9)CftkdHUbf?%|&-tipzS4}Ru--~1Aw=k1Ej zs&KQ4kM3;hER(M+G^{6js44c1Ki_%*S@pzFzy<~@TSS4nV-A=;nQ<|wfVQ&!3CC%a zuA#G$L;TLXKoy@9q8?v<2jt+@MgPY<^0m^*Z&&i3zXra6jTKsH^03fYv9tSBZq-Zi zOBdoO` z{AiHWwphrcxbofBX)UYhsQBVV#9CHxI(ezuW7)9*puT(@o)DTnoOHZJpOBDq-HEU8 z_io zeH_d3kTIJvM*`t@7!Ntguy5I~+>jw728XAHInfKB4+h7Q)Arh!@2oAzCS&O50e)ZQxKB-=a=JH-^rWS(0BZoH#4y|;@CqDZ<8*_j zzl3&vsC>BgW^$SWcI@_(T+l5Ske%P0_mw4{S$1aZlv)5V(|=I|WtWwagM#$FCJaUe z3*Zj6p&XtT0=iF_lQQ}-n*p(lx2;N zG-=fzA^`<&ON8r4Vb(J-{i1^{TJZ`yb!ka2=`g1$fwQY?!I^Q=#z8|Q zyr7e&FnTDzguCX{Q@~m?K!3eqkF_Jq_v`z(7X|oV3(AiK;kvLEI^SPq+b#9qwp}w& z$CWH%O}|3^RJs>N7fxGrGzg>q)xByFbv^f4=hojPC5mU72(jD>g`O^c}vKi z8)1!1jK4)#9*!7oWuN_KXHVFa5?_l&lGB{x7YtXemXlXKxfw%=$_!f&61?q8ul=<< z3VwZePd-gL25yZ0!Zych$KpEjxQlf2;A*t&_IcTXo-aRaPqIEg9aOlgZfov_d)&W> z_*%Xy4r>swZEAyJo(To}4ST|?1fVPOHTyfGnVMA}K^z}+pE&40)suE)0UTT>W`qYK zm4nrYXm=YNhFXBpbt2LdK>M}FMbpb-BfOopSy>9GTb@!}&K!Q}V!`>LSfj)tKm#6A zM0*jzuabei7<9Wn#N*edW2jlX-Ar+OfKu!Ew7k}4&fcOz<>2*(3G34a+W!ZbRO&SU zl2W`mNO!uj>;cD4fd@ya{mz5(dxq)vLbTR z%@L6`xvKhW(a%r}mew3F#*Uz~MmbgET-S3RK2 z;okW!cl*o5gW0a_d660;Xyg#^&6}E}g7`Zi;)`J*{5{b^#l}mFYU>IWw5aXpd$33i zTWV z^KOL$B(hxM+UUo}-<=ko!bra*#qhzPKyo;}R(aW0KsT)8alusR-{_tqar;)^wO!j8>t4n*vC0;cG z?OEeDPHAUDWuH{;u}OL*ZzZvR&aa={+^`j-jH_~=u9CF*StT^9vN!1_3Vl$_8PklN zKXkkn+)$lDFf4Lh`_$qDs)~*?zdA6dP7S1Xwa;CPm``9spLdDuIZq7E?{9Jm3}7GJ z2Cb#?HvefQeXJYxTfb+>Lk-80l`(ULQb-a*RBVa`T8xk7197?K!o&w33cYk$2{Aw?LcpkURZ@@7 zBKXIT?ed<0*0vK8c~}-3K%}*Lb&@9L{QX{W)?8W);DIsDwse@gGH;k^G?m$)VVD{+ z)I8@H?G&Z?%zbu~r8Jy$P`#qS3)GbbF4%V)wkn`m{B0|@D4Srfg}|mY^o_>|hBiis zs~D?zr_`!kvxXn+tX zfh?Ip#UHu%SBtDe&RmFd+#0uv3?=C zhQdn|&UK;7H<)Q)Jy9F0w+xQ=90r`|tEN94l(S3g;CI%}K(0IH1o1xsc$QmP-4!88 zoW>B+roL%op|GvZ$9B^2s%ew=>Vv=}1BKZ_PGCfCb=0G_I-GZTwmw1GU^Nd;zAf zyw!{;E;Eqj*_sXW3YG0?W8q)_u5ba|!6=DPWO3No47LI2&k^?+hAjM%4wW`z-Sj^5 z)5ZEGCTWmo;`Q}DU0MDK)ZO~RO(@s61GdF@7u$nb>@d)Ea-*!!W%0dO_izCWL=hEDKx%XUP~5JCpFZwb$oQCL7uCzRiX8T5Gk57 zb>(5G9;r;K1;%)Wl^bM*!%DA;u2~Ew3D_MFXKiT88XC!ZFXO(H1%FG?OdlQTmxaH{O%HFoS-CH>K=LyB_!PB0f=GZ<~N(Q`>SZIHg#H*cq7Eitz z%O;)40BLxa9k{AWc#Z#@QZtI<^V$5_l>sGjgiX*v{HWY!mQ^p(z8EHqXb!-%j}L5h z6*P4fiFwj&VxYf*kAHm82qQTJcW_^a^2_S(&sR#sqO{%Nl-yxX!JHCVj{Q-HZD2h z(knTP`9>Tep!ad($V8Wc3u9X*eKKs3uC4f;D8xG6_mMASsoY!{l(BQT3=mJW6yAzNF~-MMN!&UE1?Sikpkntfn(HmyVUD&3Q}44(lM4bgB&_#0u!p@{B6|NJf+vNmF^;{JhGHtTs@Zayz< z-iC4wewg-JgYV_U#FNC}8nTeb@}NeeUjRgC`l<5S!xQZl{E2#Bg@|Z!8+(9~%Bof0 zUW>o>>N7S#-%=wUtX`O#pTU8(Mq~gRsO&I%h%2uY zn7Nq$@3965K=0qZUcW}jFaTr==uTw|0{$aga07^9?Y@}|$GVWlR9wWfjU>r8h^IoM z#X3a>Itp?6Ld=yeZDaNI&BdE^5NnRwm4@c#%*xi?tNbvIjzX*6Z}BJb*^r%Q@_jO? zk+WCT=ZpP4ke%+$5B9VJe<9;%EUM8Y{9H_&^zM+c>@1)J!WlMOG4nhJ-v zR;QiQTpSEaz3vFsnMlERZ{S;1>o05D4}$1d3%logQc3>8753G}Jtput>bV%=a|RPD z6KH}8B87u^59SELwQ%wb8#DM6n*YH2Zxk^RPP%y0z!rlP=-liT+;rC4ns&w4C&os zE2PI~H2)eja!oPBy*l9ir?59uQ9*IO$M?b`$K`tsf{>3#=kp&JH1wWq;@e<7+docp zL!K&4a3uVyd3>b#`Nc5Ns7psQ%wvGYIqf#~jlqe+EcI$Izy9%;_U8;xfl{hHtM4{7 za(8(-@ZwbQgMn?w=!zS-c$iT-QLM5lVy7W8?I&@8tChVNEhlJe0w^q1K9o8>D#&`U z+8usgQV|}h@S<%u`(yjsbT^$hbvS+VfSIE74>_$JG%w@Otl$get0~&L(V=ZDBct3Q zo7?BoVr0&jYx{SxALU#3!N!Ty?xDAl<2Vncwm#m971ABO1=F#3mU22)nyr{k*xITM zV`jvE(;<^bBl?W$pnB z8gHh^Y3+MsAIu$mp+*$SM~wQ)4<t+Mj?)N?cS*w@rFzPzT5L7F zOaCGI@^k(<45XzkJ%mi~sy%ts`b6xD%9XYJI#|0<*ye}$K5?5B-T1Uer1GAb=Is^1 zW=llk0}>63+p&5aWs3h`tdQPZVAxsXyRBl6?<$bkJ@hWqtXT8)sG_pF=pI~Jjl{^S z;R=&Xp43-;5~qND-rww69W{?TX1rrI!KeCtPWF`tu8Z+=z6)KN68tjOmSDD*XR{xt z95^aT%c9m|td+8RoOqdQu~o&9oT%y_^?EYTd)ZjU&su=K*NYCaGjcU?-Kp^;_x=H9<3$!GrNK7RdnJHOS>Og=b9 zbw~b?&1qPgW0~fxP}BL;_F(ii8m+%iLTm{c;*s4#szK_*;9ZvDZt_o>n0{s2j=P|! z$8BNAy~U+nQdfEa>kdUIoU>#p^H1T^ zSF;En>#-0qX+liJv38H?Ce~Q!M2nQTEmxI8^1wgDXoFK? z^pysZ8A{UGe*OuE&uk$a-6k|yl=me#YX)lYf%wR)H@AqNZlEe)YfaD?3?7eh@^(7+ zY@p$t{#m~V8{b#vDk<>&qD3F~CPhvp$NSs5Ubzo9mIm!g8%iv`fCTG=n#pY<=_dgN zAGfE_jlvdS{HYQ0H=a{?O^A;cX|1#vk(np#%tMoow0mgK1Eb4Qswu8vN%g#l!v+U& zkka#Wxug9SUuXOD>Lulw>*T&X4+d9E{ zF|P@|y4shsg@>!RQ%^+WMie6Pl;oLK+nQC!OWZ|t3 zzA$J>J32a>At#aIBpGa<0S*{+aQFyW<*FwH2=Zv+4zjw6VcK6NZ}W9c)vD(Nx}MwU8L^A!G;47WhL5^5j_ zoI8y8dG7I$e6wV2!L7-D+{(cY+0Ww%u$*l71LE^frg>y;n%Cus_R@Zb ziYeCv%zO*CcH@9%dY(D9R~tws3jE>)67@+O47GNHzqSq^((n=RT*O)`gVe60Uc3|~ zCg|E5#Xo>bPNm2mT>~fI$#tX+{TRRm=60@I6RTiE@9zNcl=L57OP zKp0nPPj4rr6YF7oA~xPibRjp?Ayvu{OXtbPK|uMSJ!`@OS=idB{e{#TKT%vmtj^Cj zTBxH^XhQ6F0s|rY66Bd#_ZYM9$WI82v;>UXUe#qx~5|iF^1~?b*#ym(jWvaQwC= zl3IN>M6|dAk~X@~o4wUk8~{K$<{9aK`C9$D*EvH*^9BrJKA5c!Fx)@EdQ=s(?VM#y zG{g0GT)8@WE)K?jWarG|EX}D!L`&PDQ|pdN zq?>Etxa54KXjF!h)!w1V)7n%uZ8$$C^W~iMxMXo8I$W zsWj48hluQhfU!0y29pm zZ(v9cHFyReC@gJP+y5Y+HM-I1VSWFAo58kiaAU0a*UX*;TQ=-1Cdlnpu-8TGP78RI z4e2FJAFrx{u}H{M%xXx25C(380N{qhZcDwv$1SiS$2xc7{4?Pt+y*;{X+MWe^iAhM z)dL=28o{4v)k-#=@z8=yI@J)em*l@ezJlLs@`NrOk^FvedOP(`1QO;hjAjiVnb6Ku zpQZ4Z{rbk`zZh!RsmSA%zU;`U6lx4AiT$)_wmWw!n5h8h94=LIKa&=h9OStE@qe@c z^v5lcp3FWA^FZZbK7U|TmEReQb+9O<9;}fJSbB@s_JOjvlzu$n*0{VklB8*s*=|9^ zpvS%}s(Q%C^5=xy0oWI|ad$vq$tPBHONOpV| ziw~y4b_lKLGw{r znwohFfVfZoz*$A^pq~O@imMMouv~nJs}=`T>|^DbqxrhI-dIRPT$)(q08*6L5yo}0 z>jW5Tj@Sat9~vyVve&+dLjnBon0y4s_94i4*n8DCi5R^u!`~6j=ZO zq1e{B`2UP>P8|7yVZCO}T325j6ZDeZNQ*>K_?Tr?H|jlKu-ZkeKLUYhhT)_!;o7 zd=t=mY>gD6*o)6LQ>pp|-d@gnJK`iuH`;q2?A1Gu=onkICcgG4aeDFTSboM5se+UO zv8YFbh4zE8rH@gs`!%~xaI0Q{sFraqIza?^o}a)*vu9wEi(LmY=X~s61OMgXfT8CA zNp)7^-a-)l{LIx3R=L=JiXvWl5lVN)mOcggMuTz7rtQ9j%HV=L5aL;+1?elX1QXt8 zxKbuU+!JbPc3rkMR9K;zczVc&ScDK`QuRg;#3QaVv67&)eR%qig&9 z^MSNi(g>Inn7mBh4d>(?UJjMt^SZ!sRdcMeKp>S$xQK4U4q!UE7iLP>-pp!VdO8{x zsORbRbkIvCozp|$mG1T&Q0veK^Y_HF$Ge&~eX~hDbZkY%z0a_er zj+B_E@ZK-;b#dpG$)4XEBN6OK>)XLj9v*{U-k*;30j5<8Pt;q+1d{`v zw#0Mx@W}R{8*1M~X1-+cTw1rz`)qf7PKUnr#hhPK%5e%Oufw)e<;Ld9LUihL`2a^lA1rBJxQe7&EsC?&@4^^B@{nK28@yuLgDO?YRx!XZ~2Q!q3;S{%}c^H_1(j+`hUcUi+-_fV5cKs_U7{rHEx z+Az7L6`|tVYqLBPpYdQyF7t|3x$u%N%O}X>=lJ!602dNiI05A)!`o7k0ueD;=eGFl7>cOmPTfNP?-q&HD3q`L} zBeE8RUtIoE847&vb_Wn(5yE+W6j*%moD#+#o-(sox3ot|{EbLA`A>o3-HB5{fcIjw%3AalKKg+p;lv4oqPNj#Vr+eLgkQ8D z>wE+)lUdfD6PM6|#)$`LF#5B6c9K+5a9*m{m>48_^y7)VS2XIwU7vsD3=LRC@D*{j%u zpAw_vE%4>aAAaa*#{K;2>-ISfP@_%^_<=Hs`&7awPhnf;H0744Uv!@R>O1y<3hkr2 z`=X7-1G3NLJdX?YES51+kH3@56!KRgLA%I9c;$Mp9LQjW#;^?+bxAhiM^6`vw%s)y zw+;N?4*=@fu1iASKBc(}c!@`(0@qNTA4}K#TFIXiG-^Pj{`WGMon)M4+rj$_>RNj? z-kV4V?->vlD>1NeD-%kj)IkE*Yr99al85(V)JInSlgE*zuAgHDMC9&`N&N|!rX=rhwefgCXmmspZRH;#Q$QG zN&QAP$O*VHp$@|VYU|tR&N+D@-_r5bPpJ4cqcsrN1`L767QsX7|1{nQKCgQV$goX3 zb@{%zu7gMrHM;(5fnqW}EI5HeQZWqBFW5E}>A+lT1K5XEG+u`?4&5I&r~(NX3neyILp-jwjSMHkKq^U7PK)f>K1Czu6 z_Y5?w)#AiNFK?r%UQ*8>$=|+u%Xcd0Ht=55r|B zh@t`P_ysC!-{(q$>{gZ&*>~E;XKea(kNt9}Cr!Ds8opn!lqLpqf*`VAsQkwOUW@+x*sVej9Z=^+rcUPtNMe za=jFqg#--B`^+1&DNn-o?to|-76thkcpC##-OO`Z`+q<(+W}c@jSujUQ9)Hwk&DM0 zuT0<~60}~2z-gku#rZy_y#i^5b5SKUa08r3C1Z$!esVdM%P2L*?JDHUKaj!y_pR=_ zQvFIb^B3Ibv>eLuVc;NPGAy@6QrBHq4ih=mHpE#oFo5P^$hksFA zdHomV?Z1Hk`hWbhRuf2c@>{Oy39p7vzRz*-XfjYqU5PV*%d&-<{lrxzPd?ecvFnTW zo26y<4g=p0&^ns9W|dIHhS|} z3+=}UEUqpyip8_CiNNgrf%+Ld&O1``&!}<4KVkVKkbBG`e``V}rznSjw+1iGskD(=5 zu|I7Xs(omsZ&dCVBu@BSL2Q}!z9?hUyNW1&uYb`lE25M->vck#-m+pN4*TKrXU2x{ zNmgERO+hdLyITiW_KtrK_*xOTz#m0LQw3dq_WcoR;N!1r|N0Jq@qCm!Ly7q*y8rn4{Q-rQWSI@mXC$1|{XmkO zA2N$$!}tOV{UB?6yAX;HQ2Lammhk(%zER*a;*d@$g8^4_l*|Oei<@zCngEyZsr!S zy^Rh)Nje%YeYX;hO{$O1xdUF%8+*GW^cYZb`WHjL^7?ho>&+{>jY;L@KO+s3ZUzED#{=VfBs9w5OxP= z=*1uUo5((>_SBo18D8vCAcwizuE=Xk8HF+T8kaVUru%4x&42e#pdWU81!zJ#iWn?t zD{@z+iB1gq7e|V?{y%2P3W!UqBYhCV_UNXVUF^byAy@wUcA-Y+Aihxv+?b74L79z&!F%>uhMrVln1y>>>}x%>)RCZ+ENbC;P!;J zgeS25yP1WK{0v>oEI@2n@oQ-p+M7SzC@vl?Zx^~uyuZSvON{X|K~3D2%ah~opgVQ8 z8>d&mbk&Y3HeXXU)gW;;->tpUs<6R#-1AkE!vCE7`G51s({S?Q5#W`)lr?x6Gcbnw?>9oyptrP><1(z4s zCq>LVZ#O4XB}M_;TJJ~cPV;!MY`2IB zh#SFvv(M8xq?hrDG_BboMo_st^UC1Kkbc1&JfW_#HSyUxuxPWw*P_7pP8htuU6xGW z-#6>KL&g3Q>N=e`b94q+h+Hh?^XJd|U~PNywO_vcM661{2FOy3o@V5yFin#Ejai;c zb5Iw}A8xl?Nqc$Ku2!X6h4(=5n>c&K-Y$B`-$MU9rbie&>dhGn20E4fG}+gq?*AB3>+%@7+gAy zK7l$)x*jxd&5(hLwE=sp$&nX_^~;pZlW*1KWnCEk1bwB+PT}7foAW<@@_&1ek}U8d zvkRtC{5F{(w=@0A^c`4Tb_v{P&EZ&`gfX=+weQ|toS-%M2t2yk-KOe&)u1Kx1~Nm) zyJfk2`hPL@-f>NCTi56o*@~4WMWrYxs5Fr#9i<5fC@4ir6r}eWDFLy8pdcW<#0Dt6 zCe#F^Nta#{2vUNS1PLS|2}$mQ=bZ1}^KN;+`#(QmJ!`Ew#~5?WxkS4$;XD01@-PYC zIOxOtgp1>kGQ9`;32FLoQHtvAP1V(t=pQ8b{Ov`Sw?Lx!d43-!Jn~m7&^12_$s0zo zXfqTOnbr2v<^fo_ZPZtWjozwv#$oi+blt`|%qil)2fly_uM%2#&45(&Mo{MvK#u;2 z3xIHGq@{3>g6)DI50AveJt<@ zcKG3mq_}TqFZmYWKFP&dw+$-~T^V%!^p>exTDOs}?uEot9MQ#dp^)~iXt5Jqk=0;XZsmf$2GrCo6XfJdKGN!XMt0{ zJ!%S9Ts|@xlx=r>-Xr1T@!zTT4_nkL1mv%Hk|YmW1YaEUUs;|pu@JPI<$*wA!8UXy zVVxDeJ+qbJ^2yCr<@XiUT?3A~`gu6}6SUg4244R1?_|35_Hp<+sU&HA+N7)nBl_in z8b_^Hl+_AVJZ?%muPuPaQ7hNG^X!k`IbE2=80c%_rYcYF6o-adK515O3LAEF21xZ> zZhe>k?W-bH!1?e--KkE!Xdn8c{e#YF8t0+|SlGO@k`}=pnh>}&SJN@H9kQ&JZ`*&) z5QC^usH(5bOkG_)rEsk4ckB%?y8qxo@?>MJYbuwYjUi>fDi2gDN)@}Yz;c6ml|2P! zI+xu@;kCLeDML9i9pc&Z)*?t6z>e(mtEUr=?Fj?~S=i8mxRe-ASz*MB9ow+s9FclS zaQ4*n1{>NiA9(x07VG6!(jnY zcK)M&FV{qm$>v!;Aj1!Ohy0)}3FdZRM&$lT2LK)?TiXt*(vA^?A$!l@MtEN-@62~Sk7^s)Wcr7Ux?#WQ z=r1#BRz1yM=8|KEV14~9HA|2h5pcdAyRBhJ{_7U@*Ip=e=&JWM% z5Dl0V_p>;*V356OHX(GbkVqYpF%y3}+%;73w088WwZ`4B4QalWp0VU@11H~O`8RD; zN`Fc?6dD_iTjIP=t}exYJhtb_7W;j&jdhCB+3!2j!@;rJsa&Voqfq)~AlQRvqW}_v zqb}VzGMW~lpxlzPBQ9RMXr_5Fnj+*4_MGAMI{)%KGcM4fa{!{kQ5RSD$pRr?P&tZm zC)lAN)&#pnedPP z)&er*uA90hQ!c2X8te7P83|TZJwl?qaCP4!Q#BZAZCOv@|0}Z7Z7dA`OO<1WVEQ51 zwlP9zH%SB*7wceSOC4`*_ketk9gz^lM+LN&&Owe$~=&#-oJcFA!|ox)}GSQ*&9I) z3v&}V2EZ!<>m_FV!F)Dq9#ezQq3kFef~#+Q?q*|z()5&I%-j;b=rq=t)3|Rb$Y#p~ z@{qS@e3?v~gq`yxAjDJGy0KkHRSHN3%T=S3xQcu1?cXB|_ds&5u4`#R(*~db4V*JT zMkqRsZ`O^CzqYozku}3WR|xc6;k!F{>Hu_PW@2P%ng+0cbNMbNj&;WtC-b6eU-0uBRH&wrKDb)nQxw+}EZAa5Gg`-QSXRt7wU z?8@%d1Ui0h`hwo1U~byMgvhF0j@=1|>l03C^1nIG*2}SvE?QOcR(s>f?Mbung9f#Z zgkUPzeZwRXmF#zK-0ZrWxL+C>@N`fGs+UKDFG^9ayW^5m()>^M!f0tUJ0?nT7UnS7QbGn>RvB8|$v^a#r zE3cl_Q&(jt9P>cZP^m<3vjzqEfa5z`o!_$W&f2TZ;+y!A}|C8@opQR3l7c7e^UA0-Y}e!Cc#k&Q8t8)Ar9@M`0{t+y!wMoV27 zui=YH3J>$tVdZb<+a|oAw{DI{0|D-j#J}S_AZTBKZTdZKN%jbN{Z2ewX*AZUnuu40p6awJEN}-f`0_S;a%H$aj zN?IjuT6*r`;aAge7>%on`~;pM)rq{Ud=e6SLVxL~~B{3}nCO^qM2YC7CEM@-xS@&Jz(lv@_XW!uj^w zypfKdje8an66B+*b9xJcrSjy8q8&e%rMB}6W;JTM2^>l6;EAkT+du@bENqxJlm$9c z!^`(jneLxpAt)mv7z-=zTmyLcDx$6fM{ZxMIu_M1(BM-d7=?N=IA7S<(qVrV1f7O; zod|uRdd}DAxKadl+3ixW;gK%zO`nEwi2zya`9jmd{;@@^0R(JpaP1VFX$tG9uID4fX0-I#n#Q znhc%HbF7id8?bPJce<;e(57A7L-YD8iXsZsfCh78U3oUodKN?1O*k=T4)Z{l<4@v% z;;Y(I1ma{5%oux~FI@dO4LhIAjTY%YdJ7dnRYwoyU9b8nh9~>F(7#kC9hrRYb;eel z+tu^pG-VAjTBHdKK4io!$_&1;R@oZtVkUIs9ESbO(t5noJXPFQGU&f3Hq$kuHPdOC zi)9SAc9&H@WELAi|Lz(;fTgao$TBU)bqVppF$jdlxHBAA-}}W&DjA#;YfKvgx2Kx= zpp>1~zqX&YOYOY>!vcRrPp0oK>fVdBDW9~~?Wy_Cz?0s8if;G$St{z$mt{8ubN*r> z|6IempJO50dM$m6JE`YevKd6{##J^;xmRr!Nq#^eI^Xtuh2?G^boT3%txGRv)UlPO zw84KG>7=%(acM6NN7R(qL-MWbRz!zxN|P&=A`)%Xa94*?iw5(L^rM?JA+jTW7zLM% zlpN{`4!LAdq-dojGN*BD0%F0S%;RwkRd8;u?{t>0DF9N1s_v#VucxeoB)J0 z{V=iXcNev-c;*fWs~BCf*G!lO7u-;>c%t*0<{i0Os&Z{qUwmP`3I$8E_4PYtV&dDw zqtafIaM2WUK*a!v@34gayO$0=sr2GbhK&c?d8Q6T#yvA=e_uVvSqIPk^0bVq0?k5*-*vExOGK6#?*P^O z9JC?*%ePLLfn9(v?melT@&4+>9>;u^>-)g)qTB^bOK#Be_&~v0sE`X}I{o?c>Sf%3 zU{8f)z-=D&uZ-^{KbM_=3!jFvx07c9rx*xJQJn=FNGg%=0dM3&QQEhLn%hw}rj|vp zqTQomq?4KJ^#1TZHXTlmJQ#LJ)561+P^tm~ zL4lyJ+qC`ETI|xA#WYn^30KAmPX?E%z3A}o`L4E-7K^%4&@R0yadf4~7Y&=5uJa80 zY|kele?WDQgm>mL>bH`j$@#@W5JIY^WX97GshU`?< z+573K(6!=BR`HJA?VmSBO;L-8hh~EhMlP<(hYdu2oP@8Mx#d}Yv3cF4B?vTwjD;cO zeU_vRbRnKuBig}4j}=SJi`z!imcO-oSCVQpxHg>s1Y~;+&W5 z!BDu+S??qJ1dH%f(qta+fGaW;27Q=1Rdpgy!mU7;(JGWiR6Snjl9=UGSW;i%k+b|~ z9`(36hBY%#neqxcP^kAz_3LF;Jm52zqpIO#apPsfAUNhbm7kcguEPCr`p4 zNj*OtkS2QxA!P&Y4|sCn0*pshl=9BJBO~eeVsF#CVK*TLUa8-jLPs;4iG`7U4<;RX zVe9gQp9FblsvNgdo6GWd{Q_nIMCHMX`A)eb&sed=_!6}q2L!~-aOSQGDPF6ca1lH| z2xuDJtQ~aiYVUC1(DUI4!X3}2IiE`1RVEtD5JoJGtnO z9POtPRebJnY6`99u9O|KQ2)Wn4mdyX@co~H-L4WI^qT;`i?Nm!ZuNY z@P@)5Eb!c7iwqrz54BhB5({}Q{$t;68KvM0;+|o&^heL0vDB%gmlmZv;|ubEV%~8` zb@I^r1X-hKburEfj4SY_o<(oUxMCg)8QY+K34WtJw`@e#Ri21)yp9OdAcv#+Y)nlv zpuZe^g!KSO9|%PFRF5q&5FF|1vVK=rHO>`YBb|GXudG^n-DUsZHa(3p#6*i=H)N^< zaTEdz$4gGj-^W_=ulaee1wJOW5^L%kfj6+5u3f(V=TLt}OH1S9_`o{=%fFb|E$Mjw zqoi}^wC=sriH#Sdr9se%D^aQ;Iut+E9&PUD%8+DXt2{(_zXx{|B}q*@tUhny1li0# z6P2sKYMo&)=AK-B4^&5JeOU`}CVbiwiF_#qP^uo$Z=h5fUY%*2r=MQnx1jIurOs#v zvPVB!sft%K2=R5Utetu&u8D8wrDlxdbm-S3%I&zz?+-;Ovi%gUGp^8%c&;9%d1=a8 zr@?Ey9pzmR6e3)-d*NHAA_OJmJnW26sRKEAl6K3BswYb!W>XcOVdj{t2)xzQ9tYrY zvnTg1mS^fT7Se864*yn@KFF?JQ50f<8@~=Mp1AaBB^&~AFpr{1bqbrGT-PW>LvDsB zx>V?Yj6u^%X`zHBl#e0SWbSCZ7wS5>MCg~aLIHOkgRk*?Nr7YRvUy1O>V}M=E?&)Q zXx*mac+sjk^wz}$aZnRg^gTWa@*vEAh`!C2>M4KbI~dq?UehPHr_~k_*Uw6$dK}89 z)8cxb>TDuDX|LXkHM%Xs;JxUniyW{J0&P3{K%XjoHxv3ntgSfEO8A-K@` z_xBJ4wdA9$?4(uB#5;0o%?cgC>>Smb&4o5)j~Kq-e6R|vQU)=*>XzxFY;U5WdQv>} z<*VD1z*|M>{&n)H>Uu9^c7;~}#ceVweZ*QPU`5Lz;EE<&fn&|v6kcMeU&ETsD~S$1m|C>M$%}U+q&#M-J-&k? zK$4-c6ELYe@PNaV`+G?IfOwtuJH<9eK?gZR?j6u%<6`Z8t-C_&(V zKEJFz{B89jsc@4>oMZtLo|MEO5$5QkG-ztf&=~lE&9YmN5#bx5uZ!tFxjAJt88&&a z7vU4`Ih)KI0$KK@%-}jz9IJkc^c33%Ig_jcRPQ^a<;S9R+x(AbG+n|^giJYV6V;iN zM#FJz!%kz};tL7xAGA3`5Q&ZWQ6l�D2Y<-C^XI7JLVP_S8U{-kq(X%Rd1~p@ECN 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�=Kz*+cvH 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 IxmU0M55OdI+W-In literal 0 HcmV?d00001 diff --git a/examples/true_on_policy_vlm/README.md b/examples/true_on_policy_vlm/README.md new file mode 100644 index 0000000000..5cf52bfadb --- /dev/null +++ b/examples/true_on_policy_vlm/README.md @@ -0,0 +1,23 @@ +# True On-Policy between Training and Inference for VLM + +This example demonstrates true on-policy training with Qwen3-VL dense model on FSDP. The core concepts and expected observations are the same as [true_on_policy](../true_on_policy/README.md). + +

+ Training Inference Log Prob Diff +

+ +## Usage + +```bash +SLIME_SCRIPT_NUM_GPUS=8 python examples/true_on_policy_vlm/run_simple.py +``` + +## How it is Implemented + +For the text backbone, please refer to [true_on_policy for the text-only model](../true_on_policy/README.md). + +For the VLM, we only need to ensure that the image encoder behaves as expected. Please refer to [SGLang#14636](https://github.com/sgl-project/sglang/pull/14636). We need to align numeric operation details between the two systems, so that the ViT forward pass matches the behavior in both SGLang and transformers. + +## Notes + +It is expected that the true-on-policy version is slower. \ No newline at end of file diff --git a/examples/true_on_policy_vlm/diff.png b/examples/true_on_policy_vlm/diff.png new file mode 100644 index 0000000000000000000000000000000000000000..ab4d68030f1134c41bf160de80b2e185d67524cf GIT binary patch literal 52949 zcmeFY^;=ubw?2$(ix&4%+@VNuin|7PcXta=3Z-}{Uc6X>Q`{Yj6$$PX3$DR=^PKa& z&UK#8PwyXa_BF{&cJ|)0X3fl6Gxxf8jE0*0Ybvxflqb=1ul$0MMr4Ajc@*~LwGSj!wze&8AmaD$)@DxM9aW6{(awvG zyUv!&b>PIK*FIjScM6C)#1 zH}A@GM|&qCo=p%$v;2DU`Ni;8xWb><*|Uo`2e5zoOv#+4e0f{{GU@$z`Yo@N zG`9~;_uARO{s*sZM$=HsOkb)#)mGEDxH9`M4TzE+weEjRV=@=N{*g%)b7V{MvY6Nq zM)ocg<;oT8AHuu~-^8Pk`oS_1`<1kgW#SDwn~VALA0-b&E=0?aFHW)-`L}f0DRl=P zeV1#)-#tD^Kk{`t|3NQ)wv%;zD_@-GU>EBzeV?JN>HCqlU*`)l_JE=$o|7ac!(==z zO`Rg!?_Igq%foLxe(ST-rNz9XLu3u9c&klJDQMlrW+qN4;>&9^7E9i%hgC=T5zx|0 zjeYy+xlg}FJUKE&sDl2R`d88fS!S$PS_26wvfujsi4qT$v5~fPtUQ7oOvjSMsA+#= zYhLW)F%4sHM-LGbcaN7(4=Mjd<-uf?I0sRN>c{=238wjiV2p>MFNx@cmVx6L)?Cz7 zPO?@W7=cJLEJ=)qI7DabFLPm@h+?`eg?~%+7C$L54x99dDE#9vkbHpk!#PH2t8m0v zfq1bJr$3U1I0kyanJG`%JF;_HOwp*gTN>(f3!-k)3vH0@qC>Q>0q2bg$1xlFgg<9<|Qj)06YD zq3F0fOxuT#8*>^nuW`FW@`ZHhMauln0oF+v|p3So~E> zpGb?Tufx`-ydA)+^(P3Q(NBx5kEKBPeVPcpzG3w}Ym4As?sAU>qIU1~cXxMBaTzaQ zBHRRZ>-8pc{otSoHJn8d0?Onk5rKq^1L(R1(W%5k(7I9d5sXL^vE9+vx@l0tx$#~T zNMdDRbxcM*7^B%nw3y>FBifh~>7#?XiECcZMu=@7*dtYLyt&0UMoI7SaYsMNbv>iJ z3ZLIVj-Y)P8O4o<-2bNbBPAY5Wc=-0DFqaQ=%2I)3dC=v-V7UC^Jqm?NP&_n6{zZH zK1BTZ$Vr>uNnkBj%HwPz<9?YCYCu6P6PcC10GK&`q2RA3(ttZmBt z2(NdSZ~i2GE@K=v*}b0+E=+FHi3XM#BC|UeL*=-2Oz; z!gN4(5IjIRz$(waN~@3)U}#JFG*WJj*^*%_wI(aB*7-41=~;5>r@m%8^VAzU8vz>z z8$)p6r-Z4O=4ibjn}EtkBdfChBO z)7b{dF{B0R0L8i{f{H-YLF>9e*`lcmhv#29hKMexl?lFCzIivgp9(gA_RQcpvi~WY zv!87)JdaQ-Fq-;sRetq05cP@niJ(I-rO=^r1oGEuV!mQdv@k%s-Ym9&-;~Xe&CID~ zjpudvb5>CD+}o$Y?ucpu{VID7jGe-O424)PZE zzV~kMG4V<9wmZ;0q@Fppv{Z3oOw1fI9ue(s?+LE9s~DOhJm8pd`qNejlLN+ec6BOr z=>V&reV$-w?4M{q8GnMHsiMJNc}NHK>Gx$uWxt*zze$)P+ZL1KF7X}<=jkFXkh_ud zkn@UbBx|6!rpP9ZCRL6XB+U~z;kU@T&HkJ5J)2VSfX61|KI^OMsH%F#^We0NhkihX z(j1v?US_gES!S;@*dTfl-HYN<=F;-AV;9C=M(iA`66+Z&5G$^%J*qI;l6IZerLS4B zpu4DhSUF+PQQKIn)@bUuYW*}Ow;pAuZLRI*HJ@gCXeZLwICzsqHI?9!?$k7LQYYqk zYMbX`<^mi+^l|sY6LI$3r&K0A{GiL*XnUk8?<1dJRbbVzjm%V{9jRTboiY>ak+!Wh zR7vgUx?*Q1xF@=IJmEL!l!!}VCfaH9n8$g;iInb`?nG!$7{SDz@keyC82kx5>{EZp zAsA)!b6KlNph^9N`h*vT2BXGRPV`QUrxsikJ|eyGya`Z`unXHmn$(^2Gd(dyHAQcK zKJ&erxL(_NaxNT~nd(0#q`Av@I16dK_r9wOo(buK9bfQWZa+Y7#jcvpNbXP1fWK?E z|GN8nnW6}x4N3L;hN!wWWS<{!grdgQ?ywm z9Rl~JajIi+8AY}I3mFU01tyQ}?cKqgSi64p*ma^8VLDn1o8BCmWf@sZBLXoNj&jZe zRZsJatiM%?+l=Gc-aG@`vOlJOC@HBbttKx?e6YW09a(j7bzpE1ELl*=TTgvXrWvo^gxQ_(3fNv@Hb-1X?0p1UwA9G|r8lGx%sNPEVZ1a* zQ=eO^$aU^I`g&x_qi4(znn{>d&#U}b?65jr|z2olh%pAbZf)*v_%ZIz1)H6i-QZ6Lx3$IbTWH~mtOSV& zNj1x}lgGtY8pEJ6F=xP)>agH7135$8w`}E(bk{rL7u`pfp*qY_0rm%DR`#dzv6hO$ zqixTgi@Z*X7n2=7WHw$s?+S0TmH;A;RBK2)Boyp4Z(qq`cxmtQcWKa5H^AY}?69P= zO=Hur)<(>y!!ktAM#kn6ZS*x*Ah_apRjVnLMu%U~)SwN;x-)@mYuzHytB-h_!^UV0 z$o2d@HjSrWX+oE`ldhKb`)4_uqC5FTw-=vV5%_K-cd^B0KGDY&> zVtk0|qN>R_%Xp4_Z^Ewz|0YUtsJFKr*ud$UXVr==Q9F_AgSdO)zRZi_!N{7nK`C{E zs#BX+;Pio$o#mwWkJl1G&qEtD>UrBgL_F5^f)7!vvE@T8UuM0ho-D1}j2<@gRzt;C zHrJ;7N4B*tZ6-%KatK8d&Cc6Ap^h66n(Ff^lXhyKj!U_%cq73XSKn2FwLo8y)0U2;RjP-?^ZdWPRBbE-#el&u49bDpeFmyRRb)J7dj+F-9zD%tNmRCO%AMJGKjhd0QFWsdd znz=mjJi*NNx}MKUt}1($m;8?W_STrXfcF-=^3y}V)qV2}#iN0pB1sb5v^%4>pSqAp zHK<*95pTVi5PrQuAU#`A$f*#f!6BCMDWQ_tkg$M|dDb)||3P>;unO8-A6G@VaY64U zhtA9(d?`Ro+Q9sSNhk+BGjKgyDQB1Q7q}JQ)s_oIyA_o6VSM_1I>n&@YK@pW?m`&M z{DdxW#&H7QV5r&XE8426BCx{C7zikcO0(X(eh=0T1w?csB3eOzWjaDYkYdp@B+Mj)f2CVGjUqW8 zNTaGUM;Pgg;YJ3xM;);M{Oa;7ewPX;1nhKjsqpWLB#|62*$wJ+#xq6CD)no%r1tk` zYeRa0#fx6M#N)YQ>QW0eZtsH6B2g5={*{99x@FKJ6L!b5-_3$q_?-bXy0{_&1JrrI?Fu|?YEGeq=1@&s% zK3?kct=BKp#IH!v>Je9R|9)uFHv|-%=J+6u4F${?!T%7i7eBunKY>Cz`9Cy7D;eI0 z{w|OXk%0DpB@Fp6BzYm%SF-=EVdE15Dh^H3{^x%SNlS@{MY-9`^X6a5PYT0DdLtAp zSxEA)N7IJ8qcFQiZVzhwtAizx#4$8B&Jbfv|4;D$rS$*P`2P)+|C^lu+h+ZrRr&vC z$HR>Y_1pbxL2wTXGH&tw{qylwkt{<{AwLdoXPN2GR2pkA$8yEw#V%L89Oo()L6i8= z;N!++fl^dzfk#yS#{qoDQmRHh5;JcLwHYkJfECf+zdY#{6CZ$Kh7FFXYL?x1dmy+| zVq!=?2>rH)^l<)+P6NWPZU-qtioNW7&btv&b$eHcOGPi(5(Cr#u`n@ig{KdW-#bIj zq|ia1a71Z0eU6tJpqX}gdJ-@9;H8iz6Np6zj^awa`k;D7*+~mb{2I1D<#;e{15!$5 zb(}YO2D^5i-$x2cgc9Tid_)RRfV(MbU95VYXUvtrha6}_a`j=vd)F0(_+XnzkZz^n z1eWih!4rh5>$wCCr&*H9~GLv(^$0bJgr19tFkm``xuS9GDM(Sbc>X{k6eJ}cOMF?_A=Ztv}BIC2Ifco8MI$lE|iu16=ATFP$2E9Y4(8qVE zySN0y(r_1fQKOYne1;PGvaNo79F_j^{BR0h`sGR`UdR4%&3m*G8ZWp$$MfEKL9*i+ zItmKBh8px|2=Bwio?UyOD&x+&>8;t*iM}}|%-x&FE;S9R)IVGF90iuUG%X5ya80BL z1@s$mb~)G(F!Qd$vel{{#h#A59LJ&jAlcYmP-)zj92|GKBx4}y@<^2r-Qk%mhtlVC zpHH-%mLIw{v*2Hi455SLgRT@F2S>ufNx;>e&vIs9gZii?U{}cX9q{?dtzo&UZQn~G z^q2fIUAQQtWH@~yTeJbT+Qz0lI=D11Kn*>3W3A1r>i2inXg<3M9d*&`xGXWd1l{r_ zO`ROioz6$7lh3AXdKvL}HaNLDK|yJE`Lt7S&qSlb(q{{E2+XH;nC>l6MdNYt1*{@9 zJ@QV&x|QZ#W!Y1eLA~6QUz3>6FC*vL7V^ile1#O|pA&XJ&4cB1sqa#UL`y*l-bm=V zIYW8=N>BF>r-rg1x4bpQsW(JKdgt`jM(_f=jdmW;?i`ku82Pg?T7Gu{fUVHGF@L}vx zhwC*BXsN*|`!=3XBJ>;589L@)7WlF%z>sH5R|tu_^Xd74#(RSsX{gobP^VZaRjUdw zVv2EpX|7C@-WV+;^5dh_Y;}V84GO=-mQ3X-c8A%r*xeN$bgC!uK-mH%K}8hr{C6rF zU_6We*qUAp_cuMLp9h*Taf0T8=;(a#n9=@UQVX6h$deZA)lp^r3Vk^C^I6KYJIuR# z>z?mwuAlA7K$8N5eG!&!n~0*?l3cQwmJj7^;J7_sJ~^Iv&@B|WJIhDMGZyLcAbnY+ ze(Iztnz+OYK!^O^6dB&#nxnE!=NWyqx8%OC**;OKk_ifgi3xigKKZTbTp!M>KMuyw zNGKxSenPqUj)0mVT1jflMv6$vVD)alG!Ljbn$9&JZt+8}+EgrLtwmejXEW@QFgX{v zDeHI*f`EcxuF!U`3Ei0z)f7N+6i8j-L4^Wl8hS9`*cAesdbS{m$c#AOX4+2>b7nMb zbS`LoobU2ph%-4=5^*hNT_J5t-hL1lfv3Q zhjWmLLh-~{`SM6UWB>hRc?bd)752M>R{F?Z!A*$OL9oB@ZgeP|P3pUYEJQ7F@T#0ltVC7MvJ0 zxfbiS3!f|$DIY{-b7x#;4-C9Q`E%ia@As<{=eZBLvb zpP%fkF|X;(S3x+-5@IYHwOx^cd~z0FBy$>pCvT|r77}*owC7r@INPmM~^8hjA=Kj#Pf6sp{3hHX}Rrl2fOe^_qCQfQb zu`c-_?~9J6bsfQV-?n>|NX%`uL%*-WcRvZQCgF|`UTc?>MgRI}ftUZm0Lj4)*XlzQ zS5>q@F;+d9->O$$;8VQdYT310+)bYQV{PDPO265s;i3e<{%yC3&(021@}PYQN14^i zLA`lga9QVdz?DUaxN+oM&?y@k$2>`ngoQ1B4l}Pf+gW15{k3JVh_bM~DbB~I>v`i! zcWh|2Mmty zKSCw~Vjy3*`EEv{Ps>37FqGMh^1P1x>JNR)PRgpcxnx{8o*&9eXrr*VeYKr>iF)29 z+I;V9gPvKj3#QWQD-Xm7qc^8R+yS8vIew69!L=W}^Q4cGA``a6qcWY=BLq*O0&JR@ zheBH|eS!!suO^6ujs(IU%tD?WKH@D|?3obRMz;UBv%NjvCd!>xprygo*ccu%w8%vw z6smt|aU8fHa=gmmiAfg{zVvaNpYnjOpA1Yq3}Qk)9UyFN$KyNB#2n4m78x?~z3a;Z z$_;txpLQDJb$^*-q<|&iZ>R<8K!Ik#1z+b#fb2J`c3eI=-oDOuen?|OeVuO8)jBQT zI^&xESh&oT#P{x(JkhnnszhdQmS2W&a)pMlnDK-Y#Gwj4t}m7iBr7uL7j~J)JzvT* z&wHY44Q6a(YScwaTENl8O&g6+>WPdOhHD@;3-BD1+0;@!IBf3i z@P7k!NcdPX#3K7%Nk-pL5gb@d#;MBSjSt#5QtXdii|sbchz#=1=p0 zbN9l)m#wjWcb9JVceO_0VSt8xFE)^80;lVsBzrh)(EEuqTq6OdfE)l@;leiRws1%I zgfdv*`od7Oibu)q6nlf-G<4F&a6BI7Bp~q^gx#qjCpF#DAKryA z!eDw73Jjq^sj>lf8e2(Vx&iTn2^^;sI{2&?LU$?YfWeQs``uG9c}Ne7*u_5H(@YM_`_Q@%wvH6YTrKbEFg}{#=3GU+Cf|QY zrva0IJ@#WiafL zs?Y7{<$qH1GCo^AAu&TV=+y>o%xj6m zGD)I9*b_`EcPkY}oADa>yeQLAz$x*tzIVTBb!(%o@N|^JI=L2=iQ$ecu^sw!Ea)?k zI{(ggG6IA0OP_1rttthMMn0Pke9wZ_V9RFT(u+Y!CAg#@b~(E}eO|qrO)f4ObW#tr zoF#Hp-?t}+8x~$n%6Stn0Lzne*<|}WR$}+IudD+uh3Ut_q+k2YDes;)R+~g$H}zpq zTKLnt`R;YREZTvr62)1QcZB@k5n#Jp?vX{%2yBC*CZd`I4m3hC2K{;;Mn=J4gIi{<;ymyfT$+l3=H z0-|9o4)WYzqAY$L|2gP5NV9Cip4}XxX;1f0<55Ny^A}nWl;mz&HF%nw5uj_n`Td2Y zf3O^|)yT#je7-n@dCjzqnH}`85(6hzHTZt&0h6Cv@Uce>ceZGbvEoA~=UrET^fMiI z=lRm;?}lYwzDx|{>#AsKb_e8}`p;xP=n~(!720nN;b%|w+@Rp_X{o;o(8=3_swcs$ z{)kEs5XFA#=673D5qp?TQA9HSZc_)t?Nzz`W0$9f5y42scNn{VQoq-TXjF{#%;Fw~ zWFku^8D3O4>y64{M;hJ-?mPXAJvhy+5veH{S6s^*L&o2J5Op}48+4S5Vf$bGVM@O? zDf-YJA;o75(zGeEI)z~JlVQ@k-|is##7oFO6&u9mahp<*O=b(4F@@Y(ME|ZBM`ff? zEUIbQN>*U+j^S`OpF^leuaf>yTU+R1s;swV+BGvVJJ>H2-NSTs6F(}qA#@X&^2Ro8 zgR|}LTb?h+4uz_eQ@Vd_H;fS*M6oIJzKV?(r<;|JLVh`DU+)gZoU;ZdV_piBt`mx2{Q2JVnJVjD@Ra1Ya^Me zC|IIol+X4}5Y?Iyhv6^%Ju08MHrS@)O9%{tq+pHu?aPtf{gw7Zd5X2|yw4jUGzXeP4y{|z3Sht7fq|0qSH7HHTYbwly6xkk%kD>#VgSyZkjojL3;>- zxT4MJyuDQ%+*U-j9WW8v9=D9LYzs7895y#9;55tqigJbrDw>}+IU?QBQR~o}FwSG` zaphyAJZV{^g^#dMnX$zV{d~_p&9(gxj&|$7Mm#idwu!q%40n8H26I~71muB7JJ+He zH=Crw*p^bK%y-EHeR1VVXL0~Ju8USah=-ufWYI%oqsHOv2Z|P9es^-#>(lSjNSaub zc$}`C*8&Dum&YiW>=bRQ0?YfwX6Ry%_Ld`y&8RpP1fMni;%-`?#xY~R6=#vq<&+9K zEm63RTsu=1y1YqN1NXCl=Qg!dK6IFrzILyD5%Pfdnk)@i++CX`Mzcn4B-QSbHd=1Y zCs{Ipp9IWt(K@gxi#0ePMA+V;^A&H%$Z|HYFA5N3Zgn?+sW1BqM{ZpoG}m037osNiIBfnzh)r|EHEKdKBEjBh{wk5H!#^MD zqo7FYe?!mR{fq=k9b5!?hxXF1j9Ahm&{0n)o8Zp#1pPTY6BmMi1h0)iguuSSJ1rKkle`(!BS45`qm$N{we+hkvVg@MU zVQAmxZeaM0stWp7Ny>*8MUqV_&{Dy%goFJv(-wNX;_ma6KNip)DO@KsQp5pt^rDKv zMJTBUHl^(>724Qo$5WIYI_X`U)&@NC#0*i_eeC&axc@6Z1+Ax-)NU+W>hUq=UY0eyH&Wg2#od7AwQ^E#F}Y2H9a7`6 zt5Jt}M9gyTX7g5^vd-iurP;oXA%QQjELmpd@ILm3xZqYk!Dh5*oK4QQ(^PH{_2U_B zWt4t!(`|KSnyuLoTJ}Qr&-D?e#q{eIn(&?l&CKov>{5^Itqy(os1#aO>&_wLJI~sq z>Pm)VFBy9iiQPO~J9>~DzxAS`PaH_jsdYXr!4hxXLNDXQgv`XBO9jmS^v&Fi=BqQ`*|kcvO=oLb-wHo4mjSDlX%y@^!&%~ti1NJzun zsG%1;lTa*-d*YL^_MYH*H8qm=T-9%VO&hhSao*Sm^_zm{0_F<)@ln;R^&BP2is_VZ#DYlSSJ`S*2 zc97gT?t`tV8Qxrvl;&zC;smHfi##`5*|2O*)&2GGftcE2ZSdV zT^hW@#O)d+#@^Fkg6)t*Geu$=e+sfbv#QHn=ewt@uTYmb&k!G?5y9n@*d7VRZ59w8 zRR3eext=(z{71B}1i4;T-yVT8)xFB?{?Uqy6@fx*0ow9ES`1@z|1!0`|MszzKKw!< zUwz%`>vR1!@cKpMw3W#QUxrJ3Q#~#I`pWODK>pq1u!7S!nnj0Z`@{~I@(Kx{=;yk*mzN6=Tbk4+ZG71t_gn5nAv(zF;puK7rO5T%4!&M}^7|eE4yp^Uf z`em>AZ9V9uO~M1%g^bH-SZD1p{S<;L#O(2MSly)vum9j=lwd5T1}=Nh)c%y!x87I_ zpRMN`kz=i^L$@xb)pP~`A#4%~bWL9P{O*MQNUiNCxA_z@XYEteAJX4tzS%2t%dBQf zey;R3bTN#Nt3Fi`#`{Ei zJ#QA{e_qkDVmFZm@HU?`#gq_S4-C@!?&_c2cI#fc) zp~a@yBRjZ}35g|U*H7|(fkUjyk+L89CzuaH7ics)X!`!%!9gjGZ<+C023;Gyu>>|$ zcZ1o*C+Hn#3xw*7TYX-SO=Pv3=z~++|93O`TFYn@O&@H%4L0$+ zb9=jYAoo3<$%v{vq|J9Jzdoko%f+$Z`XPhU@oM9?PI*MZU-1W;GJv9Ks7J;gZ&k@F z4UgWjPadRnLkd(kv^6l#v%Wsv%AP^L(h<%TF>5C83LVr2O6PVPW4dyk0u_zreR{bz zTS5N{8SgI@ju6S4PhnLbbhUYL8YyZvYgW5sZMb4y-*9Z;`r7i--;R2By#$c#tDbC- z9Fso~OGeWa?N3VqE-nT+T-wY9s%A+3CW;{?IO*T`Rg3whtMU#(0Y6mqS1z+QZ};*P z1M@IeqWh>B^gq8krlB~KTIHsI!Gjsl{uFhHrunv5#hb=cafYac>2mG2%nV2R&m62) z=3ngYkDJz2od>_v!1teq4Gycq$y8&a$MlVA7f%p24Jk+^*jXRb2uEnlTM`wERjA6# zjyb>Adjs)dWH&r}G?&b47F?a6Qg%iwP72Ky6UIxYSR376`RM@ew@5>qWK4VcY=T8> z&y9AzkbjoRM5At)J6~y5VF@`*%54oXkJ?YwGgBrVcWXQ-sgqZ!%_>tAIpP7q=%;bN z?Il-t6}Yw><9voR-cv6cH5rtpSu$`{%%P>K3k8KEgwXZVv^y2(+6eFun5xKA`erz; zmNYou!`c=QJMuJkq_2#L1yQWg%DGWi$Z)VIiAtc@_4z0AYu^b#SPKiILK0L*|3nr> zFq$#HdCQ;|#g?UKP{nP(5vr+$Fr=Fl7{c*N(}07|KZ9E&%)Nv6@#R^`uD#vL=S@R3 z1w@_Tte(yA)skAN%nshTm^V2;U5YO;uZf#K5(;TBk|tU)uvTAei?3Kj-)Jp_Ec>{Y z*6c~4zdH`jI}lGZ>oD(@{Y?sNJKq+J{2X-B%IEM&$#|%)b3xvE;A`q_=HHriWL-i& z<;g%yN(^&s8DA7V#RcSn1SSe}idXDm=Dx4wjp@y(l79km8_IeTC35#wS`VbmxdmiT z#EkU4PBYj2B`BL;o&z;{j)ttdl=CM(0|&zvBKz=zfX2Qf1FhrB^T%h+x$xccS(F{Q zvP-Ea9HT_7|bD@UTqL+xgJ&G^(QULZp;g9+}dO z_~dFvU*?;c9yIFARz2L`N+0xJW8n-=>!*2dgkjIR@%GvX5XEY5gq<_JVy&e?zOfnp zYrgO`=j(VV@)<57Vq5s>#d?m9dzWbF^BsxLr%@ruBey44QRDTOxO=dbEYtp+i)SLz7xKQG0tog2H+CN<<7kj^`KH|l3r983MhzL;19SSb`TltI(kU(+vL(y-( zFJ{Z;@=>1Q7VHEXpkmj5XcU1Ci^JmrvFWcGtI@@VsNdpB2n+GVdcbm;(k<`cu&({h zw!o2M#QQ&+%bu|uv&9#b8G!7SUj;MkZKpiBRC4oNwz~NbxOUjD8XO_t$8S#bnpOha z$oYJY-;&yv)7H4K=BUjtZhCO#bX)XV5=v_xE05W42uGHO+^i{kRWbR#t*S@GaW)q= zT3V`XTFum%&md}rejQD*HDB@XeN5PTB4wP+3%<_`)N(fbL+mVtP*432YLk1==Lpbj zIR)Not}=uFY<}R!IX>Qs<^1mUk;vyhb6^s_Ad!xiCty~E$3Ptz+qDo-xGlfn+{9(_ z$s89KtYK8>j%O7pMJ4MwUp1-8Sx#w2LgfsEryS;~^!)03yaRfNH(nVS5<+=4!Vni3^`>pBgw=Tb|hNdU0&->^xlfney6KTyDPSLvf7G_XLM3wKi9$fU% z_vZL(&;E7cfbx+t*(Akmb^6>1gB8kEk_^Jf;kehz(TuAKm&irE@bHf6Hhq?nEs0wN z?dP4M4&jp;_2{;#0H0ig7>*X zk9v{3gFVR(Ns@2iyHFXaWRE0C6_k9>@OW6OpSmeIU&-G~PBMcAg^;Urrtph~Qc}tw z4mUDpfZH619Uu>{`Bpa0$<4$~s0Ed7Ua1`<>@tg0L4pZ5+ zS%X+8D<{M+<2=7#u2>TVu5=Bv%1N!H)!ip{u$U#)Tp48{=&lDk^p6(1{cMRKix!IP zG;-_Gb~ZJg|Ih<9tl@}A=6zN3a_jZ|UeWoRwW5RV`xa4f!G7Jyzw0T%<29UwKw}8`WYS%yi4(sZM^@Ri*_fCAfnOryqm2g(4Jya zR(iPO$CEu(DC-4j1+e`S;szn(u9$I^nD3D{vS3&lpVH&ZgWEFKMZf(QL*k90C>a1--afsF1y_CP5T)Zfh z#GQohB_CPGJJ2=AFjWbp8~=NU^M#0|Z&bHR?{JQ!ytM&T_B)kTYs6sgLMh*V)vzIS zM+;D{#1Ck(&ABj)!%9B&VM}9e2(1KZfjhNQ?>NfvQmHNI=BrK1zs^#cy+hO&V!*@HxLk)TbEKHj)53=Fv;HUbP|Cx-J z@w7(h`21q3Gma}N&A(Qw_jbZ(lo*7%-d^t5a9RNMUKQ}jVcLXqZZL)_KSpQO+gFkc zx)f)LIyF$&o-EY0E?E~D*7C&|Zs^n1Ggy^W=~$IkYVm^sTE|AS8rgoJ;&!yZFS+en z9nX;7pS*g>nQ3SZ;4<6SV9<-Rv3!HG@dDLhG27gsFL&rYD?qk{!!U-nR<&sf1afz$ zLd8kP0G7V3vF%Z5u)JVy@Vxg26ssWv>Q(jN?a(c6-#ZGNMH;$K9i6>U1cHbzx;*0z zL2}>;5T`Its*(iPDARMvZs=pM)*>sQ90Zzk`3d58Erz<)W`ov#sZKwAe5iH3vvfcQ zmJ?||Yo)U4O-0Cv;XktiIG#+4yEW|_Xxsv{Fe$yn{guWayqiHf9VJlT9gNK53UaqW zEOve@N>tr~7WN4!zpUc|(C-W@`@(zw6It`8EP&(9@+U~|=^Cp~n{Hb?V0pV* z8{ioGTSbLaDcq_@(5=kCP3*0s#Njtjv$h#xkm@?yFLRr9{l^D8$NMuQnN($z+d$Q; z%0hlHWT_ZiXKD#@@3))Uoy|=;tusS3&ZUfND1PR!eEK&M=20^Oir>})j z5-?$TRj8deOzTzby+PVa8cxE+_v0P9zgdJ?y22|PM(!Qw-}h(7!L_Z2MO z+V(L2m;zMg;#79vHD9I~Ro2h4IjEtO?Klq1!#C_m34d1@11PF25DuLAm9 zU;utYU#-!>m%?4(d7a@0pI@M5t02ftvy)d!vwQ_yFt0VB*7(B_Dxhtf7?fP*w9)K4 z<$RzaQI!_|qzPHJ)Pw8}kACwsM@hJUSyF8{@p2duBf~df1)1{6t(0>k|7kt70X^@w zrLAy<@%44sX1jt$TtfiIIN4=@dM5Da^{z_dm-}*%VOLCbHsySfe1AyPQMC?SQjuu51jB6%$KL-^(5f%$*5n4{ z)knOkG$~3;cvgcfdzb!vuluEj=V0@)pS1ZaG;|zXs708lS$c45>(p24Iq2W89}T;5 zj;#Dv>pK$6f6{1`%4%5MYAm3Vn429@`bJ2=U;pel+i~s?7lgKaQff#Q*ompjJ;VSE zEkIStCb9J$T=R`H>=gWm1XkNSL1u47a{urnOA4e1!U%M2j{S z}zj2(g#qm>_FcA4=SM7?@_;t7x+Z3Oy zSNm9|M?$v`KRd!Ipl1F0Oarq|iOdzLWe_K^$2sW&*zNbQSPKnFQy>y)#s&6Hr0L(6J77F_)>JJ!AHtSP;$JI%+L+KssR_YQZDh1pi>iCud+;AFH1`e}V# z!^-x#xaefg)2acsD+Z|*Au4f<*|ekKSrU1O2oow5Hc4#Y|CkT*1h$j*o*5Os~j3RGl$kQygi-IIF}*GSywdOR0vxH@%%{C2SN zZjbjB(qE=~C!4!Fv|yAl9dN=*b;;^OUUGgAf-OLI*%hejN1FWz!%$b}D@N{e9U!pa zmjqPlO54(Sy1f^77?y0<%9GG}&~^nhh`3}9>oJD+{jKbo3j*s#n`K~-+*sfBulr;h zemJDjd@!tbY=r*2o>L9>5q?tU|K9rEbv(j=*NM+~S>OC~URI?DSWbkp@Nnt2Hql=D zvY(mc*zS6z9F(fi9 zpfSJIJtN&fHKtLSD6B)BwhY2Afsp z@&Ov4Vj7S&doO(kui58T|j zNu|+G4~O^0x2wy%6nFIzhSrrg6kuX>j6-$^jq(~DdRdlB8~Dzw6EvgG2P|>TyKY*c zKR#M3%v;k_ety)d{J|py_{@>fKV>~nuiOFdW=!q2xX=K*2txe#rcYmw@j~~^f7>_6 zEh${@9yfS=cr{7KUY&8#^!I_N{FGDcG(;4P2ujmPeSb=&u1>+320JyA!k|2qP26e1 zWP1}ATJNK8>VwVmrph_q8$ISSdTR8S@Hp$inN$M`T7OB3zM0(c9=kF4xQB$J-GMPLR*I>Hw3aS&ej>nctl|50q4sm*}c+cPq& z+tc&-W zZnfafA`zS}C%jOB>NFd|HL1%d;~uu8eHjIr z{b>N6Wp}XCh!%OuCm`ZR$zXXt0TwR+JC;&qh03c+#!WbGm=7B^9|EHJVKxYfduJe~ zQZ{y0_b!awOdU{us4q;J50a;qwheQA+gshl9Vx1oBVk~2zP0Fh6{mS?@Y~0&A*Qu_ zk`~hFam668v@)Ja^DoDG>3RaQ>S_=bv85Wbcc7LpZenz{do| zArjuY-S=tv8xVqft_}}So#1)5o+$!M9?6?-=My1UByRH(f=~$s@r|5uj)ve~F2{@Q zbSRGPsPu%QaWp>PvtAWIe%4rErV(YoO!r%YUK^pS!ZcWr$})IEPmzhZ7wrP%g7@y! z-6f$DH0vz)mgms=xUj`>g=$Dq-j)!u`Kzr$X6(r&tlneV05I-`S6KMfUznv*e*ELLts)HR&aIkfzD|MsL_5aWsh zsx;+&T5b)f7;Me*Jpq2(RBv7_+qDO$n<}-`kx~?m>pIP9sfOH;KT-Y?dqx8^J@_gb zNbUI#j{1S4zR7!UxsZHsqMDlw$hb#zYxgsRwa9>B1+Hh}hJ0?VYIRW<6;zYd-`^)~ zGI2HL^(bvg}-=%1)mVc!itj!Nxkia*+pw`w(Hy|woSIFU@w zSk$!pfa%ddfm-T~$_(!BE@*wARXWkWpZ5@so4>N}BKWjH>X}%^j0F~K&BTW5L$9&; zPv)%tY8qB^>qqp^EL()fo%`jM3O zTQ#@OXUknvZ!ZEEv$IZY;4s)qL5qvhosomkN!VjH_b-+k1 z+`M(u>VE4BYm@|+wt3wrfibm8eUqQNv1iw*zlIWv)oObo29|xAeRVe6n@`mE>kOYt z9Z#ELHI~XuYc(99%S5#AMxnOlZWWZD@5ACTDSuyF1$oK(IF}QP3!dsfZp}RBWfu&_ z02ivSRy%4<-=oi)eMd!FdkU>3)|v7ZC7zk`*v7rUq{wrV<49So4TLUqD4|%az_K>| zEur;{?YhhZAB$@ASu$aFunc0H?74WU?G==pTbTcNhy6 z{cqCBfiJw2I?21C7wvJhT|eW$xr8GZwPANsmmA&)tMjk8zQ}yr$FmrChrv94BPP38 z^z0=bEI0mOU50_e`?cNS9L~6`(#~x+_8VUQnr|-0HFc2j{_jUXkpVhnGcJhWJR6sv zGyif*PIyqi>P^n)52q5v#J|}wg~12nbr|s1eo6T+uhFlVZ4SjrN~xwIU%XwRmx5)* zMV)U%k`84|_9PTd8@R8h>H~etHoI{Dz*NXQ8Qm44{m0_vnd1`t+U`@|(G6ozUJE=_ z#}(rKx$B98WXXEX!j}}^3`zuL+*j3JO>nV6ViZ~RqiDXk^{z50(`$k1F^T~c{~vpA z)eu*ZybmY1OA_26!2<&X4;C!A4XzVpfZ#GX1P>0uLvZ)O-Gf`OFu1$B4tXcLzuo=s z2YB!H=3ES%?&|95vQtm>tMR_?_aP#XO)>n zG7B_idS6XUg*p9AuZ1OD5F2v@^&QhzrYU?Pn-)Wq>k|r;On+wQi5S+5fU9WW*3Yw9 zse}TMWKEWRu}mK@b;UyXrzz7;ys9yrMO<~0hi#T>v-t;XHgnW#AdqU`vC#|k4uVa@ z4)JG0Fz9UNp=p;jQ+omZz$?b`mulo|5}X6H!@AnVx{JyB>^wk3pp*@E1t9}9_lE>t z_SLNcJRDY@6AUpedX-@8C;)4Gl-X0;2r@3Ve6YLPzGECX@W_g0k#v8_3giO`*ZS2? zDIz)Q`u;h5wD2+_Ktcy9K|d)2D`KX)ZYWNsCeQk?l>aQXRyb+q5uhJFM?mY7UpqVs z`8G9c%j6nvnBE2hxU46!L@2nSD#KEIzp|y!&-|Uu?v;Txs{jpdI@b#7o$Bw(?}CB`VyX$IUQOE9sy99 zsE#wT0KDN#Sz{n_J8x4LkKqNE+O1hiR8gE_IJ+4<3}vZdk*q+8#`iNQ%lKp2KCe5S zqwF}H6WIycnGjvknVv=qC)XMXtCj)+x_vjJ1oN-S{ly*5a@BV}Ej~eEqvE|d#}sFO zif%)pUY8kfIDw0jZFmF}5lT|LBcwMJASwk4V;}E91&XINJ9kL45y3NSkSf0Ok_b0) z5ZQ|&TM&dG04<1iwh1XTwQIp9_xpap@}3}w{I2W9-Z}U3amg=JfnK}v`^_B&udI-) zT9d`YmBRk&L)5HytqnV&e8w+a;mf;+=vNr8D-h>VD340HL%3KY za%>Mq;Wex%XV^BK7uHY7waepvYC+@Ex)Ju)yV!H}2yP_VlH1P_;TjL|c7vYrExkDz?+m9C z_U)?UBUggI?QR}E@7@ySvI+QRFHG90;<1lqTZ*)XG=_1Y z3ZB~?d9XRTf264z_4mxs2IEi{d|U`7Ku)ADIt8JjeuzC#M28*rfGkcCX*HR;c(Py{ ze&kCw2U_FNJmlki(U&r-7()wN-}c;K_gt;|SM49sRIU}}`*55Z({Em@i2A1N;Im12 zl;fZgeZ(<%H@~M^-W|+*73tqv%BopW(rj?)61Lhx*EV+|!tr3+`kIH}!IFqEJ}L`I zcHQt$GM{kR>krSajaq5~_&QqR$M4V zGT)RmQBrnvL>VRQqPjm^xOX;lTCeW2R`bQt8wV4P(UOktsWll6Fy~XpiRsQCQsD!&u zy-|Ka5l_$SE^fu(-~!0DuKhR}eC+3=)^k@`rsoQUg~K4I`P|>ukSqemyi_A=w=&DM z%%_VNHKE*zbdpY1_NG6doQhQ%^;K-sRQ-AUBReOwQ22OCYm~KGgN|^4yU=9xAi*NR zrW#&GJTZt@fa1S;0mx!N3C!@9nzDu5`^}bIc^F(~Q*AXjaCvA{2HE?-9UPk4RI{vd z!DD%-UAE~C?b1UiH=8ZJHPlQ;vr;&V5yEoyr*=(;~0K z9)Io@KFRt{e?FWA(%UBWb4;R6m$C8PXw1wAUA*0=@xE^bgiTPIbkTpKxHZDr~zOCATk9P!n5HBf5RxbNSKX=D>*493?th3<&zo5%6Buu6CRz^OK>s*iYl#<#9@n4(sOGv+kSS zJkkPDzqSz!pM0T+`B<`YD!*|S>-1@bSvF(VeB!TaD^>hgajCV)mzMA7)6VwWJ^}tz zSbOZEX4GTKBr+!w;QE_gwOU!X6@8X)#s9z!Y%xfqn|dD7S>=1hn(9hX1ULCT8tK49 z#IcIsfrNezJHi5ORO!2t`ZF+}eCfq96bo_dcc%UZfw8dY!q`nbKErlQt{KXPFCSBN z8|SNKRlIbio{eFAzmmqVe%l>;5Q+72T9_*rY@q7jQ&a+Ze?wR{jO#Nk_)SD69*HI8BFmp|bD0X{HUp7MVKJRlrKBd3@4-Y{X&$XGmnBy-Cz{cls$vZTsmKnzfa$7i^}A_XUZP;tc)>JA9OOc-q!bW z6xWXyV^0@Vtsx-o@@wSkP@hjxgB}&%(rW4EGt(!z7`$I-Z8Dv2oAjN~T)Poz;8IQW z(g8*Eq=I0>Ajbma#rBn>9BseQjJ?1!r_iZm<Jl#_k68b(Z^NHe? z!%1j4P0xbDDuAtscUkv3jButJ$}x4(AbCURIwpl4|e3r&cxSIF;V}^Hr(g!~VOg<@feD@`5de zB7>RLPfw}dQjY8x{tQ?IbAA3IBx4>X)zoW#KomUAWcgL`P^$Zr0%vSwqe!SEDi&4K z1)35eMfAO=bV>4`25~JKy*!SjXo_jbs^U(AbZ&`fB2#6pBW~ZYMXiVic&V}zG|8QN z1o*_yN4#wm%b;c2>v3mS7Cmqtq~|S z*W`5rA#Kp`i33nV&jc>_c?5YDzNY`SC6btWUh%sqSdRf2rLI>LV?Ur^6dcY!1+OL$ z=sq0-;@$ZE^;(93tFeivjG_)nwds&aNXTvu882JQQnNWV!~Ty0>GCO~a3O?j%_=mM z8ad|PJlaO~m;Sc@VYw4e(~+m+dUd|0XZVXJ%YZ%aga$PlSVy^jPsZKzoTwOG8a@ak zgH7bU5P(V@&8R5NmI&(1V6bWdXvLg*zBOoz2r5yqOFnDT1*$QQ8kC#pgDlhl)=@M5 zS@?e0<_Dm{qYUtV89I@G3A2b4&Q04P=VI*?Tqg8Sj%>kxs{g~dRUvAWLa3sKu$`Xl zLKqChlh}2AaPx>dcX+aNLVS>3%_&l19#BQG9MgH0U(^jk7H60C3Sh?~_?>#KCjBnP zq!UkD(uObVQ(XrJUGHy--dPYbvVIEN&jAV^jMT-fxSARK+~iVcJll#RDT6;^G5QtS z(12%wy%^kr7(+T$I0}3#9x^RKZVV2qNYf3_65_*Xs9V2MVJE5RRgo*55)0FpAb~DR zCas}8&#kXPw!u_N2vJuMUhgrmzc2(+%t_geD7Do+_i(Oy<1ZPC-Lnt^C(cP&#uS=0ns0|x(0wD(_wk-xw!egj2Oa&rtg*k5XoCY0b=-Lwh`Tc7RYJi z>|&u7KUkM1RW7inOyi|mm32VAcsa|*+VmXW&p!v?=Ee*yfJ4Lc{+*%WZR9=nMDrho zqHg6{iQOgUsg%Hpz6it@w2)D0**~d4Zd1?uP>bvlJ_nPn8;a?%@(wQM``nbT?mcqv zkoxPYohJD`H7lAa>@yRB)ZRL47h??xv#8UEb^nf8GfYD2f1!4h#%S$VKVOi_+liKD zBphfeL$LoNQM&h4iG3d`p#VW2#@m!P74!d^he5IJjq0ap1 z{kG~K$I_pe7nLC0?W##lym;2U(55fX0um$l?_lT*2(_lLDlQ~5z-5(|JGVPF9xlnK zSdyFC+qLbe1K$r;A>KW=s|T6CdC8$c7Ae-zKMO5`K86y$*V-x3SMa=L`9b54TKMVDwKA=LJ#R( z)mo3AONR5u55@#!LaUJC996|go#EM@bHH7Zhr3RT{W331N>yI@ndki0P z#ItzK5@;Uyv#toP=eACBO$h1!LXAkDn2dR{%B`mRQqc_sU{-@_$Cq1i6n?s=F4NrC zQFUh7yyJ-FHQ1TmHb?P9)*(Pn1lT0GzvxTFgWB?&pm3KtOkcx3N6xCsGPsyN4^-X} z(PPD{k=GPTEFr60WVlv8@tCg}`SU5Lwx?hIZ3IPvTXCd$BSC>LLH=LKLr=;xWM{+p z0I*}^`{AK-qk}AEvW6;Tg5^iE`&$sZ_V>7MQ>2yiOjZxdSI8 zVm@uO@99YLq7Sc8vy@sM?bt+vg@#GP`d&0tn0!$}v(?9W2`(YZFz`1`4C;`$glDrl z|H8wKmzg2t7fRT*X@(FNcuPbVOob~80X?CFOCsO~PV;zx{GskKfpC~2m6n)QS~UM5 zo{9D|uM`)K^iKabmL0b~VV?VK9(v4;Yk7R0G4U>E`OWAH6h#SSiOs;L5!b^B|6XiW zrsT^+UA#GpUI^Q!=iASzMjJE`QE26tl6Xf`bKUKQpY0e&X!}5!SgOZu$~K*6S{2m` zujcuZoMnXj7=!vFJkuRzRsj(C?dCb138VG7#hMsj84o8Az-}kIY<#pt=GUx!4BkP= z7IhqFIp5WC{G@)oVQIOKfMNzXvQZ-&8Lf`YCTm8?LN4;D`Y)5f%Y{8sC(XviN)?J= zGMSe0nAS32D1k!#d_5_nve)IrCaSFV>X)JCLR^S$14_J0N-jUj)m(o@dFgB{*VRBb zF1@0oUV@-Yr(z;k_fI;g#RqRB6z)J&-^j-aL`@Df4BycxN2-b@zH^r zZHGUg7)Zx6$I!45hz}FQrAOiIchGuOOz=587vU6GC+(2lN$(I)l-0fR3P;ojX>)3a zD`EDlBu6!yp&_w}%{@4zysq-=%AJhsIbMa4Y&d=XgI%`oTwkQC8Gi~p=u%jrw(5E2 zK3O({l{+jvG+F&CxnGnT7748w@r2dTOQ7PBZm;lp%jDRI2u)9h{DL-hPPVJQ>4_Y< zTBy-7cPoFmAD6>Z_(QHK$l%avht~J#a3D3=84ili$AcOGEXu}2^P1+>Wlnp9 zrr}MWI`Ko@p+aQyg!iTcOnjdY=L-t%AXa`l@Aa~uH1(Xcr)dx)pM&cIp6D4 zZKBB|JYUTh&0(YM{dJmlpG{*P47YRfN2nqPI&*3>Q_y%Mj-K$2JX3UE#i^6ga_p9| zx@v%F%4D0%+RP<5^lo-s9zGNDMnqiKoGDN1w#__WeYg(coKWr=7)5k!V@Vk3(MiR} zD=+E|Wwu_xgn1Dyh{>t!9x0LRa2PZmo_DXBR^5ygdW`c?wkrXbA(o&Fip-OA9n7jr zr5jbeQWu*=~2G6Hjkc4A4!Xu{`|-EBtfY9J(v_MQ%Oi% z!%T|G`7JSlmU14?$|TfXfWcvxs!7=1@DR5YCOf;{`9r?1Roh}grz`J$CDtC#{y)q`76w~iX#_Zi3DbAfP91W@qu zFc<33&c});asrp*(LXRv|2bX!4*#mS48>XzJFn;-vLHPzVkp%qH{@1%d%q_MUvw{~ z{hoLYb(4+AfM2bXf8|{A!a31^N~Q&f5L=*fA-8?3&`hjfkR#rMW>WkFNA}Y-{$5eP zZgiX$SnD4q8oG%=3e`TcaKxoDE9<^UJ6yCCD%9F zzWcTN3Re07Bq_sQ zi2Zz8fHbbBuV5z{_r>t;cP~VpB2cAGSfxS5xjYep=3eeLY{PncP-C22bR(sj#?oEq z$o!|n91W*5TLM;Ri14(1N6^0L*gT8C%X3aKdRo2VpH4~jv$9{(vn#t^ZUt|8+2;*Q z>Mr+C6Q`7mGa0BP%UhV_E$lc3*9IagFtWY`$^VLXCi?%L#*!CpRjaadfL9ohM zg(iQ>SkvN_Nr$Q|3b#vbfi2?$I~qPSKHpd)J2~Sr%$DPcbX@LhPRdMhNupB*$aKry9oV;*8i|ZjANBc6J%^y; zE%H!2Yp$VhB>9P`_%KrPI`*`^$?cKzy?ik<`Gk;oj6kAEXsNIT&#DPKzCQB%9-Y=M zh1D+|S*?VOU$KE=FRIq4LOcCOWwQg`olLEHYVsvupA;vdXEM|a340O0^t#PzdrR>U z-`W`dzzSWkY#$$#qsaQ+Now$gl{kn<CU5)`DQxoJSS zz{MLp3>+OkvUJBXnPAOfl#Yxl@un&TI0_+0YvjIK$oiW&?NU$fz+bIub?Vkuc7jzg z7(kfb*OhyU`SOGQr>L186K11aJ#&##lEhA{!mf)+lwX3zyq|N5CTryn+l8N^U%G$? z6jqt3B#E^*Q3KluPviQI*DQdd5v1_}pAx*He#ZC+l>Gku+T6xaKA4R~JlZd7DkA#B z=x;-(AL@@2rhQn$jHc5hAC`pFZkQ)IQ(UbR6DYa|hFJU#$lg{?=!_^L%83j$?Oz{3 zCC)9%jq{X_hm?gY%E%(t@=z%~05RZNhZ3-C5Sk^TVx=H0q(R;ole%0Nv2#F{Qd?u0gI9cm^bJ62GGGyAFLpP?FZN2{Q&}8P zW`oOuu0GEqf^|01<4x|t-iy9=sx)D=wY|r}me4pKm+$b#`y7kkRhnVeahZU*+pe+~ zLA+uWn(_O3u{};bs`@?OI*lHzBMF5g5QTNqJghpbsTJ!lK3csq`tnh0JTqIC0sgA| zTT$!uUUNB3B^kWz6;Vpvq}BCCNw|@qjKzl2ZWfVTXkSdv;Rjbjt*R!PB&=gb1*8_V z`mf+SF~0%sZe-1pr3`ppqKfbDas$?o-dt~RankPmLcMxBa*}^P;EG0;uZNo-NtRU@ zDsWEiN{;R4u5!K6D4Rql_92OmBpfqHHQ;m30Guz3}oGC(jY3RDH{@Wb)J%9u0po}sSEvr=~nRQwWm7oucw z=@$Yc%k;k16c7$r78@4-)?VpPi)}AswfyX-eA=N@33s5|R7O5$rTA{Mc;ozhGq4cSt;PmKq&t^yaLnhG|2LxI>De;gCo*e?+9 zHNZ!1-RXMh7o@|mfHAvXHSH$lKqT1;O#L(M*Z#=XhJc*w4ZyH&@8{cP6_b8^3j%M( zQZP>S9MO`T(1yzCGZHbp_noM0X>D&PM6P4=W2;==YNcBP8%n;{IYgBO)d4}dB1PW} zS!*bO;B(1(2RINhEdC21`(rb3xa=O+{&DXeT=eJpv;Jak|1C4PP&(&e=3FXSUo~$1 zvh3wJe-csc_x(g~;z4;Gm?eIR+0nyb0J3@6*k*%`6&%%;A2vhHx$d;uJ?+Qdi#6D) ziYUBOZTK`vV?EcHStlYFo9|*;oJsmJyOWT?hVj394iiNodeDSxZLo9x7x>`k-_DPb z(A58KIShP>b6k-uU}Os5JmY#mb_!<{{_Ynk3?V~eqyA_ z{a2@CacPFXZ8l~Eh86yw?!4kiTrUu9mH$Wdzj*RbPIqN+nL^a%%k_9w?ni0<4_c$N zTE~f~_BMWdIH3&7Z5s#OajFNu`6Qp;TJbKB~htq`| z-7PBvyhMO?RQ(Yf_O-bBLVC5)_EynVZY7B;@%!Lkn2I=v01D>!tgXyn$-U;SRCoH_ z6MEaLLxquTzL}+jP#!kMhN!-t^YYgutaCZk^?GctNz+#vHqGUSVY`E8bJ&F z-yPK`-wEsliKZk|&Zr}bci9TQ@sPbhpk$a=P)1CmSfraJC}t}$O`|KIpDO;@K|ELy zA&`o7`oEDv;e_w@pK%eT|C6#NMw1RPI2H~DagR(@E?4QUVaqGYHmnb*yU8Vsy+-Y(HdCrHW z_fH0Usi@*1Ky&W1vy?w5ifI;0$%ck&Q~=NYA*?!U1WY4kUSAiJ@;G#qg99vRL;ju# zfrIil`#YF*c4st2u?$s*;R_6k2HZ3&V|gKPKM$s?#2<$Rssqud{rZC}`l}wq$(#N? zB)~iSRSNf#9&0PS~mPYtfqSpDC5#=);LT7_EJv1 z`1eN_(y75@Ta?niY2_(bvN-EfSJ8a;cw(J&Mlh&AOPd%e^dZ~7Dpz=tsP7p!qnTpJ zU+B_MgX7Xtlut5>@}W>=6{57uEdy3M%xC+G|isH8C;(AxTICP+>I0;z^_%rnt|* z7k1axvma-w&g6w>w|LDrxkQodL~?!R_(Y25WxWL>Ip6f;un*bX3@e7!c>GqP+**;n55lH2KkH0=fA$aL*PVRlF)8e1++b@q-A6_UB=mILvZC_d2y|;Z zpsAFs)C%$9I~uZeCdwXLs<+emsm5kE&o~<1NoAhj39^3Q-;d~_QkfjVlJoE_Y{S%g za{C`RuJiOSOI%-TB-h*1x>!EmL)vjSXmbmV)&leFC)qa{_A!o6pmh#>5Mo1t3XWKm$C6t!u}8Ymjnwri zs{cGo1L26Nm?Q8S;Jz{vkDFb%fp|)!$SyYzYy9xCFFRHyE`4-5CRIcNErFKRk zk2k?>{rBX4jr=>?uv_jDnZ%m9E7Fl$lYgvjyGAdW%oi??p&f=HY;X`ZXIHn%(}mhC zbiuiVFQ|I%=~Ot~c#%_O>@7tGeyzDz@vec}ZQH&1wR6%Dk3RK2!VD|cy-My}6V)-Q zp8FKVciO_vqM=bH-ujaVU}>##hb zu>q27Y)n2JYVJvx&rHnu4`gB2Uuk0omOM`rz&_j_bkSKn7|`HY-Z0urdH-{e&QedN zu~S~rVJ|2U=t!}Kl)L62GM|V+!5B$G<2+8;h0S5N#_-Xvb93gHWL1x2K0%IcR<^;e zH7Fbq8L%yENX~b1J~EI05{uH8S$dTT&%ei~k=uvec5nVbA~Fk>pCeAa;k%bKgu?k( zAAdoA{y_CzCEZ%sn0k(*t|KHl)23ogAHJgoYBhqA|%~q+6 zA9?-s1&4!3qNHeSD8fp7+>$nqQMh$jP%L=*l5W-VGV)-nis3LxOw-F1E^VkK>|5z3 zuY1{Z*c^TF1F;LW2!zk1+(dD>RcP3~g!9xpe4~mf$Ehv*7Xu_n1sVa5s;6VgdMtyX za8aB|3AQjgH}E!muV8g1%n>eiwJ<7KqHF-%%MVAV`qY>efZ9#EM!!^s`e?o};(RQ7 zJ22zbX*Vpf@O23jEws912kJ^tn?8@Em0<3A5m$0zI;+Vl2GZTs5J31DGcpyZcnzQj zxX$*z#6`C?bqO<#Wu?pc9r=DSJA^+fJnSxZd!K0wu!6;_YPb$xVg_xZs7T zlUgW*Dmbd66^jZorzY!rPhqE8+!wHQ;l3=)(Rk%Rjz#)i6q1LZWBD{!7^=F`U+xz2g1$XCaOj#k-%*UzJ}NWMe|E zc~(OM&rID@R+dZ98{B7$n8I1OjfO|Y(INrZI2h>o{XOydM1@8IkM`lAJ&J_C>MDeWkW zeOvB&kSTX8gp1FKc3hMF(;@90jZ3Ycg4%LsGDkbdo3wp4kk{R&-o1}eZTX_WkNx7c zve?~NKFtl)M&S}eq+>|vovrg=QlP%ETKgYGU+gb>s67Hg*|fg-TNZc~$sOtlNhK7;;paDO*r2J6w95$arm=08m~tJCi|JrN7$~+T z0)c8Pm|Ycu(C|>=v%=xbWZL!ZVglbn*1};%ZJMu&I7{B7e=L#rWHygTOo2zed4|+6 zMwC2UIQq(!wL>NFTb97I6T%U>{lZU(M!B z=U_GkUHY_uOLdcTds;A@nPyaB6l*8A@p$A5Ff2HRHG@cF_QIXQ6*qKBVXJ@C)Z@-JnZ`r8cgiAm%ow-@nc_JM=%A74 zx$U2bW{bXePM!DY5dhC>cn^*m*c#A%NH^ z6?lqdIqsRTlWK#+(M|qi2E@7fD*M(!Y67~Hvw*L|hr1MwZk2a$a(lJ2&9may!ub=p z#lHnL1~eu`;D-#)=cU`C^O79>+8h;aRy^|Z9aB?gh&0i99k0Mtl=o?GCoq9!32@T} zGqZLEO=7-ethn}XZKC9^vt97xJ81zJU8?!aWiy0m_S zKhe$Y-J7$e(eTm0)7!P5az+A&8KQ40(kx0&^rtBg-84$x<(g4w8z2HKdRqjJx#oAV z^4pRkt@7`o%5!#+2$F2VL=_j019uAJL4{=f3a{U}(>(7Dl#@{ zD(j#%Se<3hw7!O5G*<@3uqvOw;2q8zKz?%2rE^aK3z$^1wC$XWByy`Yt%(Mn9ymF` zZ#`7<72XqfDlP<+nJD3-@^C`gWji&ccjfID_@)VFRW?v6{oXX|b$*U^t% zP2FGHQ`S`&CEjSWYnUt|Ya=Ree;$J+_jpp_hi()YB=(FumYdu)xmL)9AblRTBM~yak zxlGW3C=B$2q=LhDUy<_0842@WUIs?&k^2sbKevZjp?E-RJWdZuv~*o!k?2{smV6}K zeRLF1&l^{{amew{3H!@J(p>phB<73B_XvJi zHK$mP02$17b6*T)>W}*xf3g$!NtO51dj4WlPZWUhZRNww!3^~yf-)FvuP@H10C9Vp zBYa!(Y4JVLy8Xk_m-B4oV6uL1@_bJG#kP4T(K^rr1zyJ7rP`vh=sMeQbi-1}sM}0= zjLlHQ`P>*shunC(G4=Rg6Yv@FiG0vUxV>2v_w(iV;pE7rUvY9`_;K*nU>|`+mt5Z_ zTHnYgQ%060_HV@u9kMNl7%!#UkCOEZ1eBT#c(V-Z2|4-HW-^C)j-A{S%Ug|{4^XxS z-l#Mj=eQH+n4D}6|4daNX2hkAz-&Bumxg`NRS@^IXg7SF;Sle??OGVM_b&Sg27)r3BbB#PI*Aeuyzw+6-EXF{A<#j*ZRN%2F>D+q+ z00CsIWwcdqJh|=5clXY*@l1xWFl@oX|FhB6Y5~6ADse9s@GD!9^To^B^yanPO|n|{ z;LR0V1vOE9KBktZ^YY`vR=V+~PbL?u9+=N>gh9uf`odgyLp!-v!xAf%jtPV1J6YqY z6x1Hq_t(8@#QeBDOKs6BO-0xbZRwmitwYB**I^8)qti?d$aXO^k{28)<`7N{P zK-7?$ZC&I+kasKQoMF4qe!fJGjV2mGfj!B0L3a`yi=HMn)FXspTxyb9$*_FfLiM>*v~w2&DLzWX7;y>+M;jE_ z7QWnkZwa4!ic{t=UX>V9`|7(?AHi+05V9zs>lX}j%3*ssuRw_mp4dv^3Z`3aCz)&m zFWQTjh{~pTOHuWWeQxHKj;l!5`qi%bYEPC79W|QSsvxZNJr*TIcD6LTg)^R6m<%%C zxxcd&2r#N4-!sCnBRgbOBpMslXZ3>^%w>3OO%df(D>3Y!`Ua~#1c$%BEj}o^(3@Dl z@YJfd>i0cp&T+KxkVEABPA`1j;AR&b;eic%$Uoy$;*(gk6X5JG!3MGjuOf~k1_}Ka zj0&@X!E$A|HxS$r)QUpgvR{1^>lMs@)?$wRjq|1KD_P+fyNsN#V*3JzkMwp8@YU}J zh3^xv?>Jt88_W|}aQqtZhA+^oRQD6N5CJ*;YCHJQ-rtLJM7W53DEx-nfRe|Rk0H%a zH$gb<9U^fc$teyyXLZQ4-i0tR!~+PPX|PnL29ayu^AiU7Sj}y5JEk(M2h|)gtsfiE z`B@kf$5(ob&L8#LGI1P0U6aPQIPpE454y?=70m}OBQ3DT9}sz~V3p1%;;hO{a6`%~(0F-+m=H$gIrZ!4b7%5!au7U=?k&R-1OD+a)=gYLb7bL? z3t_{7ldc_q`T4!DroQ9dH}kpQP<@(#D39NhTO)Y=LW;8CHy^V;y>#e6<-lzhGoXLd zVF+==cS+iO-NJ)KId^tJ)!d3j$($t;5T^XKP11&v6VuBK1xflx>AP%6RPea9m=&(Y@=;rN4`l2`n zA~rB?qPm|lbc}~^SYXLu#61_g92EkukAR#k@yP;4S{18=vQ0{NSZgUIxT(4|ADB() z61om_6|TJJkmOm#f;)rE|K?|+zrdHp%e>ugO+R;}4IjA0BZYP}kIid)5DOfJ*ad#Q zkX~!gi;XFoEx7umoQ6q1KJ*x}D_51ezgj z!`IriS-D?|nY+~~ox5)I1I@EL@%|*QaC&nASSo5ttv^hW3Uc*`kC^(U*#>qE5w_`P=<&%Q+l#FzuT{D@ zfXd&S4zrL5p}eRiPnm7P_?0=W>jJ*tVo|#pgMvf?w4}5o#C3=0&DE0Dzcs%~l#)<` za%g7$7OhX3*AjnAj}?xj1&oz`9f0+_nckcwjhVib9urd{C>8}#_WujhjV^?5WH9Zv zZ9Mm8Ikn08*n14lAhzrQ&Y{nTcqjareXZqLTMp{h|8eyK1uvgi^RkohRa#SfM zM`teu67)25kH!1ebm#Nc{7q=P0bHofit#n}N8Y;W4ZZLAm;+?s9vYh3@H5oQQuk zq;p`F&_Mgg1c*mb5YkDRDD&_vWkTc+)AdM)cgkOrL`i-pWE@%R_|^Uu3_^i~EEdGt z|G5g_C;uJ~CJtR98nC)7st1BGv}iOw7GRaI+re@V>m-2cZV#Lrroh?nOPBJ{su|9@aY5lVF63e7j$1vfdF zZBZ*#F|{$PB=)njnJ4hq#{i_ccGKj;`8HYW*%Fq~G~UFZW>;Sau~0m!q$6R3|8LKe zXA!kOndc~JwOG`J@7ouXh=L~uoMZaW{vRQ=qvJ8rj(itUiKZ6OvmqoQVPXg={FobZ z6_K2H-HrKn3fxXVH}`~N&QtL9eHskj);z%08-UUw zzv1I!v~0?>$Ds7xueSetF#ajL`l#Nxln>R_TgAmZZ&+F7)hkF}4-Q6|A7~3N60EXQ z2n%Ui&y=Z^D1p@C6g{n*%}&PSo{Js4q2jb*)7`#Wyo)gZ^MvdK=S5&fBAf%SYkW5> zQhDsFfaT;&$yXNj`q^Dj%$!@FPz%HW)dfGL9+!mf}0rNN2YB#KJy=jBhdPKCo2WPwN!<0kt z_KjP0x7*oM-)(vDD=vCZ)%6ZXD2jV{pF6MrP5psGxj!WN5qw0>31@Quu z|M1xrsU0=iv_E>#m{FN}^O@TP%Fn-I2 zb5F@tW=@ZN`hTdfzmJ5%FZTXDskBd=H_ypnt)W1dt#jW>S%JG%Hxv=HQ0%FL%pD zDMXtl+a|BW0Vv%2e9v0WxY+>h^5E?f=iX+8pY^<=<5TCKor}$n z`ERkR+Vl!!YM5+JXv72pW6$VY{v})p&FJuV;<^LA)T!^2`LYchlO6WsfD}}F_Cy2- zYS@A2exf@vAmLKrbV(xh^e4}8zKwmGhda#TfX{ndnfe4#>MWeSIM+!==%~C#o(gG8 zeK>3O8cMwB%FFX~+WIxDI3RaUoVX{*!*ft8YOJI4s@BkK6F*aC+xGAWq!0OD8X7^7 zN|s(-$?`DP*`fZbLj~GZNGj=azarL&DPw4;=npkaunWD*2ajDy>O=MD&(poh!^47a zkPY7K($QiK;~@l-Q!uxVMuX0M)lE1$9!?ozT5j$Hd<_&+tT=2JY7>B~$*MY1XYv+#t5qNbJ>ls!!Yh^y7VyDjD-*f|P zJiz8`oLoU-Y{sFmz;u|k{r$nTOus`;UFoZ(UAL56%;F-$`M@nxetQ#Wl`7W`Yr*Df z{;Jw!LfyHyv|>A4duc005cS|@gPLc7D!JXq^J67-GK$Z3Z}QF{iGKUHVRQr5WS2eC z+T%YSFNK`cCPhEUet4ncY$pc0*1OKYX>ZMRX)0=Kd8&+2 zay$=N^c&xW9%)zHH?Yh5=?kUVhNg^LiXbK@fA?{kRf+1~OnHtnq}18axu!UsaobRA zaV#y_G_z>NdCBEC`EGFVPMO-r`TFp@%p0GW5Z2M94vM!YnxM#{_}4; z0RNwsoZD@`sSH0k$k9`ujo5FIL{( z3BsdUK?-$ljn7P7Gospm^0IT@QF2GiA00lezsQ(MZvVXPRrbx;fLCh1R%k_^y?^vI z?v4?S>}YEg`f;1#r<~j+*WstLY{Z3G{T62Cv1A}Y$6|vM$>n0BHs5*8`|IQ5x7YC0 z&NX2!)PHMW6!urAybj*gPEmQBx{QWGuCZOo>8;OK5URDesTsK1#zUD#wf(M4b9+cL zeUz#f+5U8AX)0H(=iX`f>p>pkPFIfnnxhZSb*0f%^Fz=sCeF5lkq1)y3LC^-b4qS5 zy%Z9TNJGv%M#MWVmG7Lv=N5xX(|R9PRdWjn{=MB_q>I^qNN-qh z^!rd!`GR>*->6glo#~%~H5Lgs+RXPekzWr--*3HfXdB*Tc!$6`PfW`R+>g-JNFH`6?i+*z$e_}jen-tR3#=Q zST6xi_ix1rM0swE9E$AlnseNs+&a!?p?&xVlIH8UxHzZfrqMTBC0)IR;vTBbBLn@O zJm-#}2fl41GUT@2;~E~1_dbJ8FUfzm6sihh$G?Q`9|6=y@y4fI_TSzi`PkRaUTn{Su0ILq{GpNY zW2*4mw-@<&3+qJ0M5!%b!5?j%n}M#*TP0H-hvR~@p`%t>xFbq`TBoX%cbvga6iEH4 z(`Ls1@yLjz#osyrUlDY)Gx_&$>Rw0u)z5pH5jD@Ap$N%INdW)B1e2P-KA!OZe7yfT zy8rX`G5#0w{8bYFUwdB}6;=24EeI0Q5{i^k0s@L6gY&yKmvQ}6y(8i7Fil0dP1i&+PLO-CGDKuTvfm(@7pVE?=KWhK8S$}PNL#*UOfDuv>9;0KcH?70rSA~aR%tC^{$I*8r4WAN$8vy!DwmvoM7hXe-;ck|bqLu6u) z_X9VpCd6&WN@JM-jHl<1pKOe_8ZZgSFo=GB2VI0~Em?2Sv(HOxcnMtePn8Q!pdCa9 zsVJjpT)r{?f`~)ZrGPz^oSZ~2$z9w^S<`yBWbA^sd$ei4$A$xCX`vgIC1J0QW`3Z$ zgly3>efDGE*K{FU%&=ye8o!tM)JV$GC|`lg+B)vdigNcia!&a?GwpC|m!Nv17aqUM zCW54M(5ujl_wQS3xYT0ZJv@J+)x+a2V+4Y#k|g|0Q~X?B#_(tvruaDI0wg_9A#@jU-JoUOs^ zI4V(}m?tMvjK3Rx7$L>T9iR1u8%US*GeQsM#{HeIIeznY-BEmX`{1i6PtH>X-Bu~H z*H>+AZP)ur!U+ST)pheDg~xK^C3@J6@{Dd_#oBDleAvxUySljTa?{UdBli!t_xUt4 z6fN+B!f6D57wc3|wc3K(0_USUUb7>Vxrg)tXEw=q&bZA8Mw&=1N4i+bD{k4$}Ln+w!sMOhw_-*?%3=hzg!5t z4q}pe@0z95{7t72f8wz^AT*K6139}tGc6I561~@b5-{gSwLC~y zvc!Y-1aYXqYKe)lv>!*G0>4^jTkeo$>6MlK@LMrCtmrj~suHp}e9)U#8H&*uZ5%q9 zpEYaMGs}<0!+3C)jF=`7GaY&gEE=Za62=5RXuzG@e-Wf?5#`c@Ot01xcO^C+=2#*u z8&RoNqfd_%`vsV%W-fZ4@u?uRd-MY^8ZB4oE@N`8Q9FovZztWx{3C@!7>22Ta~RMne=ziTS%s;#1h)*;9D3Kiw?_DEi;@53uK?Y9P(>p72>ie0j*4Z>BgG0BS z7OSGRcJxPA+DASgB}drxzH{@G84W$LhDuU_r$2Xi?wncjdz`7Z9$avlRvUk!9I^SP2hsPU$Z&9Y5G!59<~xCr=r&~!#~_RoV1Uo(~FATiejhnL`T#ii<(1zr&4KlxHEB5=Q$VQ%W*pS;H8! zpJY-)cC=Fdpm#RArcu6pV;irlP)-ZI{OT2%Jt{mVhBje!s-7lG{%wn$%g@N{T#VPs zBt=l!nT6ktPh1{LwSywkNaU1b-Y?4ki7Ex8|R+^f`f zWf@YJ3dvLm#pqaX!ex7n8Rc@_<}KqtbfSjJ>^TE)L=;sEJUe@&h!D7J;i-u$3vw7n?7Hte|=_u0d)xoJYy=OJ6Fkm?9^uu79Vv9b60 z5%Cgx<%(N+&G&`9cghw-l$&Wdtu{ZTrKC9*{k#mdLe@*3cr#=KK`$Mw*dMzacE#Dq z!lT+t%}t675RB&J^DXP9rGwKf2%PlD?!fzHpJK;u%`=ph&9lRp_DMcn6g`AD);CaD z@bdX;a3xQdO(996DC5`Q~efX@Cc0mXqf5WhX0+4UozdlQ}ORq{F^KO z66O9)o4*QfJ(BYzOx)_paR)>cNksM}cXGe~yR%MvHiIW^wtz?6~)_8yB*AnYLOu$6W6s!>5Y~TG*Y2wQ> z>n6v847KFM!j;*8Lg*T){c!rE{PbLytRd|4J(%NjCJA2|+$c2pSak`@-XaW%Yh9aE z5?Vyv>B?1-ZPguXdo4K$7xO#>=Z7!#cD*yO`xc|u}^{QF9VOLkz^h5!BhO)bL zx+7STTU4+AUXkO80WRDW+&KvgtJnV{SV*wd)RU3rtOBZ}DMX~F(ePHfc8=t(jNwh^ z%iu&_EK`nN9BSw8ErVDC%=8<#^61(~73tBiU*&p);PLSGwpn95M-OT-&etDF zkDW>q+lX&Mv0|G(U1!gLm5e7hdUQP5W<7_L*>zq2nr?~TUbI}HTKJ&XZhm+cHt*}v z2z*=@t4%BJNFFY#%)<|ab&n`k;A;8jM3d-e_J3EpPPG3wU|8{g07Fim-Hgi3mW!H2 z^1@!LhzYzP$C2t*%tGRZ}AjFq$@%G{H;x~E%ASl#(y)qL+ z3!owe)@;*+1n&8zMz;LOg(SF9yK(h`X1_zGqGahqrb6enYmb*Tvqn+fNi$ z>2f6Xwr(klcrZ+Hd5Camha4q`Xe9Sbs{2;FT|~F3|LPXchQM8FZoe2j*~g1Gr5XO6 zaQCIIJ5JRFHvY}{!Z(-u93`w{NU67UUK5ulLA=#cyj=>lb*h68ccflyE{<_4 zCv+jFvKm>7MZA574uo(y7ETg56HW*5>~`xl7goNPh`$N1I${w%lIJ{pb7keL04`~hk9}dNZvo(Yz*pQeyM^^wC)$IA8T0lbD3Q_4ICivQ$}zu zT#$YRW#yOmo~&C0Up4G0Qun;&XFp@Cq^wrTwc8ziFg-0Z-lPJz`weuaV*S$*mcUqE z_+Z+mtK3pz-p|b$?P>h+QTbdaa(}j6^aD%%&0(w#29mE9KzmwQQD z(2fi@c_&|CH-?HO!}!_GjZ8&nY7e|-#|fyUnnI?AmXjeR8+OlXBlXsMExD(Lw=N>Bf@y?cJsS2Y6y#pG?-vqKEa_e0 zTCrCRG|9`2%r<8gRaG}!oN`M&=Lh<1-b4fYm>R~_>30m59W!;C@sc2$Gv?W4ElNQZ zg@n408fh|JpDf@PT)q8L72a+ZuzrwW9qvgEFLg9*8ApiBtER|#vX~XPmdxGH+GN*; zWzm=zY_*-g0vOMarVB^IMV>X^Q;Iq^#0QiWJQ%FaYc2*XQS3g(S7=fayYwp?O9OJ@ zHgw<&gMe|&&ewEJolqLO`Tn(GNqKB@N4UC977ai3wtP*h?fiTnbF}MyYh*EFId9EX zg0THAO&_&iqd;hoo&R+#Q!QAzgUldr{dqK`2SM+3(S*-$v@9PzE=jHGp_He4K+&wYNXCT)JPQFixBmQ zB?-T%KK?fKY6b-uw{kbAA00kM+|;H1Ju6tG-ef3X1-eQ-LL&MkB4e%sBAKgx`Lk-G zuvJ?kPW~ zWWK7(C`{aGurYIU3^jHoHP@6KeH(K45(nK!OPR&-cE(Pnb+WI|oTVMl1}tAFI0XJT zE!b30+sNzSlP9A9zM6OAVO#WrhRf3|9zm0?@wC02`+hp(AMRK2A|_qeT%orS>_m!b zqJg#4q;lXtYYNv24CP-+S zOyBkGBS)Rar9+o|b@D28Pp%`^Hu3qMg1nv_Bco%%MQUl+AnfZ`aFF zCQ?dkKO2zXOvb*w5P5m9u2;kFYuxQ*P**Je zBEJjdug&=zeKtKrqmU_G+s@pAS;#1#l*2G5tAK$;s2Wl#pvq@+Z8jU-Bp<9j@fJZ! z!yx!xKe=zq(|2)V5BW5EEeeBmnfY#z6L!dg)32JV;8d47jDYj*?&loKpJRq;87R_6 z;)-)r_cIi!%k@0`^N~*js|Lo3OornM;f>+%0>UZIi*L>u!UjewR?g3XLm2i*G3vlE z5XX7aF)*b+UR544)d<;pDyfM)-56?z|;ebBmZyLEO` zctl)@#KTis@R*yh#lV}n)msMkRw50Ba{w?t8mxIibe0MCI$P)6bo=n05#G%H?pfWM zSL7GV^gS&AM%8Ae`S{&vl~re@I9ud<(aMkVjde5wmjT{HmelP>gv3=^evx8d4Ld%JHdH%5t$mDvl~Pt}{FICIOsHE_4QxiPCRyN_A16Wqr3;Jt4Y z)@$|XH|3WjWhi~@x7{FuacVDnce;0SQb8r{+WG2uaB}7aiX#rFDB1V?S7fNhb6c1n?h0I>O6}4+CJkHI{(V0_};kVziT;Q9` zO4Hk9H?XfZ5S;w>W5MfQ%VA0tYQYI&IJ0qP>t}EOLw(OMl>1%&qmA+dVIVi0r9LS) zxL%Fuu5~%8@-%?+6-u~d!@etGCwF|iZ*_WdikCX);dFk?dA&IZdGfKgGuM{=!sA&s z^xAgISc+c*?B0T3iq{udVDl)-Z~4Fg61FvpzxAT$GzO(eh!!{)=sBvotpoYu-cAbO z!>eV_$iXO`@ea?srW&)hJs+z{P0ENW;j_ySA#4Dr&|PwV2kZ@!ZOD?y@FgU6t6x90 zZPZl5k4BWNd}qP$;1b)-t0rq%`;|v;x1L00cC7FP=_p{! zH{w4ueo!;;R7Kf!-u>+EFk61kf;ClV{3B~7uh#qGUc`uR_`$~hvyiB_xa7_GUfHcX zyGs-*A6IN^Y!0wSR=WzR%6pIVtTc|Qw`cJ80Py=@`;UTLjK0ZnyyHM>#&?yqlesvKIT4llqZ(g6qaN=95%9E7u3o`$#lKI zCA$dg;3e(B)z7YAT?Xci!JyJTmV=YKmESHSH^+~ahcBl#O`$DuA9qjqoHyh`mVA0k zbCk)re%hCB;&kHsto*IbViD9*+rt#xuUt8B1F=TfCnw8ER$er=>!EFsK#%h>$?KD&TAtmQl6ip|RaZ93v^uzDB>Z~YW+ExPP(D6Ub@k);I^d-?4k3> z1&HBDm8cJgya#m5$wRuv`D?PKS(}}cV1CUmDzW%lUm}UI`hcfysFOz?W0xK}Ix>6N zbuO6Fve$>XvojXym_x6LGByx%xjdMdW{hr~IQSIHEV^0Vnr-3kvD$T`d_@Z|O@n(y z!fRt!bjG~HX!hJ_zos4s3pjV}WUxp-7hg};NzFMVxCmM4^o#8;GGE{Xp@&_77Whot zxK4Z_JkV6mG0V=MA8KZV&$AxEdOK?ioa!HfuTRDu&So~MWF(dk`zdLK3(NXHprn}$TbWfq0yD71yKsuw1?U+Y$(^VpB5JIGDl79+(SuZi?r$7|v}4aDXqS+L%X zcNnB$$=usU;4R7|*mP?JR*AfBH*#_0cdsHEz-$yfckFG1lH-);6<*TNgc}yQD&&}b z6tvm4hmdOfe7SGG?FfmA&YE5t+{hCXlP6Ypkp&%a=>N@@Isjt+*7!TZL zCN~jTS%@JpQ}%d)H4_pNni^O;_pXgs4>gxyF|sEr0o|;~Ds!LjX-|~Bi&jQ)li&8< zuJm{$Y7#&|v653?2ZAf$QK0z4Mb(e?$phpwAh{mFlMUqCbg8ra_^KoIGIR$fy8W_t;ygchd)g@k zdyodx%xj>PUpG`slEuSUph#P=;?$Wq>aJU)I&%w1Hz zMJ~4Fo7i?r%(wV2gL=Rz2?uW<7|~*==obTEaxAI_EGB4cTb_xU5h2*;WA7nQlQvt@ zmpij<;FXb`CP#g2%!JiG^*K`PRT5^bdu6aO^%}F|W*Zz~w1;huwgD#}#~UI_Dyi9^ zQ=t+%f&hmI7<`Nq0lieZWMVi$>)@bI*!g0m{I-wsRCC_-9({p=3cZi;fdj4VIoHL< z{cN^2YXZe36YHfDofE*pukkptNsm3;uGL zEztMX`ij6%OpqVLCxis=(l`2-jujJmU2qe*?gKV5z~w2Ez*t8Rb<6i^b49AWXUmSQiMdK)=KM(iTU`%s>_U{$W+_gj>PAWJ#k34<@J9 z*3uiM^g9VCQXh`Xu@HmDcq%zc5`+dTh3R?P7e?#Z9Pk=VQaPPSp?Wjz*c%*PEmeKo zAA0ORX=B8`k7uT7i=L$tCDj<;nLQiLsoHjC7ud&?0u#eVy*twxb9WzB{ctgoO1*HY zD%|Bka_vMQ?`$O#9)9EWBbVHBpc`&&F`LKu+|@>0Ybs_%6s^F=!z`?@Z=x(R|9T{A zAY2-CJOU2r+&|r7#^+(+gIYPdDrUk+I5wy4ps|61X;$Pa#m+s4zkNw=_ze=|LVB;1 zfmW&Wlm$(9>?3LqUR{U`Dlx5k=+{{suv== zWyL7|Qoxv~u3(!Sh}v6tsIPGY$A?X_E%Lv4x$qhnaW47a6KeE5t~j%w-rFJ>@GHM4 zAObaB-WB`paXf|R3}UoQo+UT+Z>~L$kw5$u^MzHCzr0vcz<3x7jE9s1D^q8_1V?{P zy7;#cM@$JqkEN_ArDS!mMmI9L6tPi7ekYu}nNoh%D49-iXtRLBcfV98Lu0T-({vT4o0#?(@=Tdz1FNe@?E#4^j!c1|l zrH7bHdYqW6{;?K_Ag!*R=6mB)+xgQyXeq_CcF*jQ3sD8zCc$>yArco8EDGAL|M|wQ zkpv6vZY3OxmKWe-8a$dAFFYmy>!2EU)rfOxxFqV%!Jhcz>x2^55$vzYhE>7KaPNv1 zJ0G}OSA6ltrHI5tu3$Upg{swJ1c{5?&YyAL5n7>77^2E+ek`ql?S{%>EE1QFF+ZnD zOhjk;bHfey9Ww&88ZM|P|M%S@VA?)5Ngani7)KMJcOzpd_U?hcNP(d&xlu3Im>;Ii zdq5m(ntfL=Hf%NOQZz|;<3N;Nwjbr1_g8$pfQXL;>Y_bO6eU-0S* zj)20MyiXO3=U#{w+RVRpLhy@yH@L&@pFJB4Y)~rE{runvFoM9Om~*DjPa!6SK8p5G zgGgr2P1+O!UB@FD(!#(Ph?&BS^+&lmp-=2TIvIi-Wtapz1P%F7o4%n3nlF83O3f)m zK<$K|>MG;kVSW6*y7GK<>t|UYYfGdNbyaFUX)ctm{p*f?(dFPm;sh{$tC%F>la1_y zxjDRCDgR5r0DIdbK=ziAZw~$?mxEURS2TEG|L**S3$Amk`L3(+^_o}SMfBtuseqlz z0@QV5UswoSIiYikuad;vbQy1b;FAlXC4mW`+Q57J2_HeWmGbp#y6gD3g%}{iVtM2K zb_d)+e-l0*^PE|aEh6o(DirW|vI-BT2MQ)ZEf@prg9;#KNny88b)X$$gtX?mQgEnB z#FuAhl`OZ$>c7W9Kb;|AN+|ImE<+-b&HK+ga#_io8BBZhQ;5~G6NdnK=i}@PkQ(4{Xhm~?E_Gn2}E2|7p z{lo)yt7~*>w^?{D&76|}UwlfyxKhSf%>C<%19exmi3;#0jQLA#x{%}UuL)(~1I=a~ zw>hXwEMQO=xDP(Uhc`xIQVEYerUK zGIHMu;|70p*0uB_UB^+!;YY_zG#1SZg*xIi)-E&P;~1*uZ;Zyf&7%Kc8Tb>0X5Hq@Ou-<3q6tZ;T>(4;Vch@ebQLZW;$tM{}e$g*Njd`fa-w5~Qu?sou ziatrC|Dp3}LeXr7Zm6B4%|2}D%6w?G8sRppD2FpTh5MM^?8K69RfgJk$kx5A#|KuD9I5px z&dylAX5bw0%Kr0K3;ca!?2i5NV-tV-BO%;ptCj97%ki8;%zVR!0i<`|!bgEjLDbEq(mF z59z>S1O-c4=5g?0a=tJ4bdULtF(zYx3{H9;$q5AI_m$VR5^p-O)vr`C zNmzK6$@q=lz1E9@TD6B~O;;B33viwT&a;fgoICR|{>wMA_Mle{whMF~EFRSNG}+SK z26q9W%?;FG?n9rAdG0Bcm=lmo11Er%!%V(5S%|KE?s@!Oat5^c~?E@cltO-no?6&CQ!xxi}~H zg|0jMdn&HvGp}P#yIooR<-I?^DQ0dv-d-W47yUBN$N_yK5Y&->Pt$KuMI+k$!1{}& zW~Ki1RD9UY(0Fduc;J*aDEr~_cpV>M{O5$Yk$fL6qU!*sTLaK3yf(ycsbDB81FH$P z?=TAR;3n9dvz0pX(b(+B2nye4r1B|0ldM5G=JxIDw=9LM(daW<3r$t^%c}_Dzxv-X zrb&aZZ7=Qu1GV6>8|HRd?;`1Ag_az{o3Ry6tme)$-1wKMn*_kC`#dlqnt&Rd6_k>+ z)^5BoI9-4pi=MxVHV(M6I>6+L2eI0j>bH5BvbI|gq@ZLCJ_Tg@>5Qxzb04>l+YFO^ zSM$2v-XtiRFv97+!B}@OTsY5UcWc&4_`6Xf@<=QuuL#z zOdI?lfoe;r5jFq92jBKOd&n;F_`nLHhGfloaEC4C&l}LNa}zL+5<3C*-GjK_{Gq0Un+)3kyUrhJ zA?Z`0uawQ_#GUD*o_mw9o~J?blnma1^bigdOT1*Z!-eDBI7Cu-nG|}6#pB%c$@D@y zeC1Dzg=J`aSEe3id8zm8)esl*ht2ivt+aspkMZpJp&So zY|MHVzno6gokJej%j(<`M=;An&(1Pr$Q5yE-Yoo3VxlgoU7~D_zHa=6g;dv-2l`JZ zM&iwEL57})PdJ9#E69SOQKY32n(L3uT~0gTw;E9?F)OR2q(lcfx-%j!jC@5(kE?k` zX5Rt!I;7Dz@j~Ye zC!oi99j-$tmdcVMc%MAd=!3?k)C9EvruK&fuSlSdjOp(+sPIsAY}XvBFXKTbrV1vN zTus|Nbxc(&>5(bdI+)#y3_qPI>as{BK|J*Zt=%)0>-igEf?|^G9;iAkhE{zXPt>Q! z^*q21C%2nj14uv6wtl1J#J-tpmjGf)yGMTF$}ierReVp5?mtn*)&>HSBv45BL=8)< z1#0=%w{DyL0*Bz1{sI;M-rO%x@So2d9>Q`Kl?qt3yTGjJ@J{mNWJ|w2b#|_nn)(tr z%|>>?NPcm|lWp?Lvk=V+T@N0u_wIOy7$4yi&yWhLIo^}ieeAiV<)h~Tp4(DoISvk% zHbq5IE>2}ytb_ZyEcArIiGb?LYy9I4n{Ko1D(>!b$6NchIN5&anr!aN7?Qz1(mMryl;qUzqGZgU{ukWAL}LH| literal 0 HcmV?d00001 diff --git a/examples/true_on_policy_vlm/run_simple.py b/examples/true_on_policy_vlm/run_simple.py new file mode 100644 index 0000000000..9d866c8361 --- /dev/null +++ b/examples/true_on_policy_vlm/run_simple.py @@ -0,0 +1,137 @@ +import os + +import slime.utils.misc as U +from slime.utils.external_utils.command_utils import execute_train, get_default_wandb_args + +MODEL_NAME = os.environ.get("SLIME_SCRIPT_MODEL_NAME", "Qwen3-VL-2B-Instruct") +assert MODEL_NAME in {"Qwen2.5-VL-3B-Instruct", "Qwen3-VL-2B-Instruct", "Qwen3-VL-4B-Instruct", "Qwen3-VL-8B-Instruct"} + +NUM_GPUS = int(os.environ.get("SLIME_SCRIPT_NUM_GPUS", "1")) +EXTERNAL_RAY = int(os.environ.get("SLIME_SCRIPT_EXTERNAL_RAY", "0")) + + +def prepare(): + U.exec_command("mkdir -p /root/models /root/datasets") + U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + dataset_name = "chenhegu/geo3k_imgurl" + _, partial_name = dataset_name.split("/") + U.exec_command(f"hf download --repo-type dataset {dataset_name} --local-dir /root/datasets/{partial_name}") + + +def execute(): + ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME} " + + rollout_args = ( + "--prompt-data /root/datasets/geo3k_imgurl/train.parquet " + "--input-key problem " + "--label-key answer " + '--multimodal-keys \'{"image": "images"}\' ' + "--apply-chat-template " + "--rollout-shuffle " + "--rm-type math " + "--num-rollout 3000 " + "--rollout-batch-size 64 " + "--n-samples-per-prompt 8 " + "--rollout-max-response-len 4096 " + "--rollout-temperature 1 " + "--global-batch-size 512 " + ) + + eval_args = ( + "--eval-interval 20 " + "--eval-prompt-data geo3k /root/datasets/geo3k_imgurl/test.parquet " + "--n-samples-per-eval-prompt 1 " + "--eval-max-response-len 4096 " + "--eval-top-k 1 " + ) + + grpo_args = ( + "--advantage-estimator grpo " + # "--use-kl-loss " + "--kl-loss-coef 0.00 " + "--kl-loss-type low_var_kl " + "--kl-coef 0.00 " + "--entropy-coef 0.00 " + "--eps-clip 0.2 " + "--eps-clip-high 0.28 " + ) + + optimizer_args = ( + "--optimizer adam " + "--lr 1e-6 " + "--lr-decay-style constant " + "--weight-decay 0.1 " + "--adam-beta1 0.9 " + "--adam-beta2 0.98 " + ) + + sglang_args = ( + "--rollout-num-gpus-per-engine 1 " + "--sglang-mem-fraction-static 0.6 " + f"--sglang-cuda-graph-bs {' '.join(map(str, [1, 2, 4, 8] + list(range(16, 257, 8))))} " + ) + + fsdp_args = ( + # Set to true for FULL_STATE_DICT mode, false for SHARDED_STATE_DICT mode (default) + # "--fsdp-full-params " # Uncomment this line to enable full params mode + # Set the bucket size for weight update + "--update-weight-buffer-size 536870912 " # 512MB + "--train-backend fsdp " + "--gradient-checkpointing " + "--sglang-attention-backend fa3 " + "--attn-implementation flash_attention_3 " + ) + + ci_args = "--ci-test " "--ci-disable-kl-checker " + + misc_args = "--actor-num-nodes 1 " f"--actor-num-gpus-per-node {NUM_GPUS} " "--colocate " + + # misc_args += ( + # "--use-dynamic-batch-size " + # # TODO pick a good value + # "--max-tokens-per-gpu 2048 " + # ) + + true_on_policy_args = ( + "--sglang-enable-deterministic-inference " + "--sglang-rl-on-policy-target fsdp " + "--deterministic-mode " + "--true-on-policy-mode " + ) + true_on_policy_envs = { + # TODO note: "Ring" in original RL PR, "allreduce:tree" in SGLang + # "NCCL_ALGO": "Ring", + "NCCL_ALGO": "allreduce:tree", + "NVTE_ALLOW_NONDETERMINISTIC_ALGO": "0", + "CUBLAS_WORKSPACE_CONFIG": ":4096:8", + "SGLANG_VLM_CACHE_SIZE_MB": "0", + } + + train_args = ( + f"{ckpt_args} " + f"{rollout_args} " + f"{optimizer_args} " + f"{grpo_args} " + f"{sglang_args} " + f"{fsdp_args} " + f"{ci_args} " + f"{eval_args} " + f"{misc_args} " + f"{get_default_wandb_args(__file__)} " + f"{true_on_policy_args} " + ) + + # Submit Ray job + execute_train( + train_args=train_args, + num_gpus_per_node=NUM_GPUS, + megatron_model_type=None, + extra_env_vars={ + **true_on_policy_envs, + }, + ) + + +if __name__ == "__main__": + prepare() + execute() diff --git a/goal_plan.md b/goal_plan.md deleted file mode 100644 index f7b8827c8b..0000000000 --- a/goal_plan.md +++ /dev/null @@ -1,33 +0,0 @@ -### 阶段一:打通Qwen2.5-0.5B GRPO 8卡同步/异步训练(train.py和train_async.py),GSM8K 数据集,loss/reward 收敛与 SGLang backend 基本一致,且满足确定性计算,多次重复运行Loss曲线完全一致。 - -First Design and RFC by 03/06 - -#### 初步方案: -- 对标SGLang,Slime 在 Ray 内管理 vLLM 的完整生命周期,包括进程拉起、权重同步、推理暂停/恢复 -- 暂不使用Router,SGLang Model Gateway仅只支持SGLang Worker,SlimeRouter仅在 R3 / radix-tree caching 时需要,Qwen2.5-0.5B 非 MoE 且用 token-in/token-out -- 单vLLM实例,无router,通过vLLMClient 直连本地 vLLM 进程端口 -- 先支持训推不共卡(non-colocate),权重同步采用NCCL broadcast,对标SGLang update_weights_from_distributed (默认) -- 再支持和验证colocate,权重同步采用GPU IPC(vLLM update_weights_from_ipc, update_weights_from_tensor),对标SGLang update_weights_from_tensor,以验证Reproductivity。**IPC 依赖vllm 0.17** - -#### 风险: -- slime, sglang版本依赖,和vllm 0.16的版本依赖冲突(numpy, torch, transformers, etc) -- slime代码较挫,可靠性差,强依赖preset docker -- 算力 - - -#### Reference - -https://thudm.github.io/slime/advanced/reproducibility.html - - -### 阶段二:接入vllm-project/router,支持多实例vLLM - -- vllm router forked from SGLang Model Gateway - -### 阶段三:多节点大规模验证,MoE模型,optional:验证MTP Speculative Decoding,FP8 rollout 等高级特性 - -- Model: Qwen/Qwen3-30B-A3B or GLM4.7 -- Parallel: 16卡 or 128卡, Train mixed EP+FSDP, Rollout EP+DP -- Verify more features: - - Bf16 train, FP8 rollout - - MTP Speculative Decoding diff --git a/rfc-rollout-backend-separation-plan.md b/rfc-rollout-backend-separation-plan.md deleted file mode 100644 index ef715c2a6d..0000000000 --- a/rfc-rollout-backend-separation-plan.md +++ /dev/null @@ -1,271 +0,0 @@ -# RFC: Rollout Separation Plan (EngineGroup Generalization + Executor Cleanup) - -## 1. Summary - -This RFC proposes backend separation with minimal churn in runtime orchestration. - -Scope is four items: - -1. Refactor [slime/ray/rollout.py](slime/ray/rollout.py) by generalizing `EngineGroup.start_engines()` and abstracting engine/server creation (no new runtime manager class hierarchy). -2. Refactor [slime/rollout/sglang_rollout.py](slime/rollout/sglang_rollout.py) in-place: extract the one SGLang-specific code path (RadixTree) into a strategy hook, rename SGLang-prefixed args to generic names. No class hierarchy, no new files. -3. Refactor [slime/utils/arguments.py](slime/utils/arguments.py) into shared args + backend arg groups/finalizers. -4. Decouple [slime/backends/fsdp_utils/update_weight_utils.py](slime/backends/fsdp_utils/update_weight_utils.py) from SGLang internals so FSDP weight sync works with both SGLang and vLLM engines. - -## 2. Already Done (Reuse, Do Not Rewrite) - -- Unified rollout contracts in [slime/rollout/base_types.py](slime/rollout/base_types.py). -- Backend client abstraction in [slime/rollout/backends/base_client.py](slime/rollout/backends/base_client.py). -- Backend adapters in [slime/rollout/backends/sglang_client.py](slime/rollout/backends/sglang_client.py) and [slime/rollout/backends/vllm_client.py](slime/rollout/backends/vllm_client.py). -- Managed vLLM engine actor in [slime/backends/vllm_utils/vllm_engine.py](slime/backends/vllm_utils/vllm_engine.py). -- vLLM translation sidecar in [slime/backends/vllm_utils/vllm_translation_sidecar.py](slime/backends/vllm_utils/vllm_translation_sidecar.py). - -## 3. Problem - -- [slime/ray/rollout.py](slime/ray/rollout.py) mixes shared and backend-specific engine creation paths. -- [slime/rollout/sglang_rollout.py](slime/rollout/sglang_rollout.py) is ~95% backend-agnostic but has one inlined SGLang-specific code path (RadixTree, ~14 lines) and uses SGLang-prefixed arg names for generic rollout concepts. -- [slime/utils/arguments.py](slime/utils/arguments.py) still has SGLang alias behavior in vLLM path. -- [slime/backends/fsdp_utils/update_weight_utils.py](slime/backends/fsdp_utils/update_weight_utils.py) hard-imports SGLang internals (`FlattenedTensorBucket`, `MultiprocessingSerializer`, `monkey_patch_torch_reductions`) and calls SGLang-specific engine RPC names (`update_weights_from_tensor`, `update_weights_from_distributed`), making FSDP weight sync unusable with vLLM engines. - -## 4. Goals and Non-Goals - -### Goals - -- Keep runtime refactor minimal and localized to `EngineGroup` + creation abstraction. -- Isolate the one SGLang-specific executor code path behind a strategy hook; keep functions as functions. -- Rename SGLang-prefixed arg names to generic rollout names to eliminate naming coupling. -- Reduce backend leakage in argument finalization. -- Preserve current external behavior, call sites, and import paths. - -### Non-Goals - -- No rewrite of `SGLangEngine` or `VLLMEngine` internals. -- No algorithmic changes to GRPO/PPO. -- No mandatory feature parity for unsupported backend capabilities. - -## 5. Design - -### 5.1 Runtime: Generalize `EngineGroup` (No New Runtime Manager Classes) - -Keep [slime/ray/rollout.py](slime/ray/rollout.py) as the orchestration entry file. - -Refactor focus: - -1. Generalize `EngineGroup.start_engines()` to call backend-aware creation hooks. -2. Abstract engine creation and rollout-server assembly helpers. -3. Keep existing startup function API (`start_rollout_servers`) and return shape. - -Proposed helper abstraction points: - -- `create_engine_actor_cls(args, worker_type)` - - returns `ray.remote(SGLangEngine)` or `ray.remote(VLLMEngine)`. -- `create_engine_remote(args, actor_cls, scheduling_strategy, ...)` - - encapsulates `.options(...).remote(...)` with backend-specific init kwargs. -- `build_rollout_server(...)` - - standardizes `RolloutServer` construction from engine groups. - -`EngineGroup` and `RolloutServer` remain the main shared dataclasses. - -### 5.2 Executor: Isolate Backend Logic In-Place (No Class Hierarchy) - -#### Current state analysis - -[slime/rollout/sglang_rollout.py](slime/rollout/sglang_rollout.py) (577 lines) is **already ~95% backend-agnostic**: - -| Function / Class | Lines | Backend-specific? | Notes | -|---|---|---|---| -| `_get_backend_client()` | 6 | Factory only | Delegates to existing `RolloutBackendClient` subclasses | -| `_apply_backend_response()` | 20 | No | Uses `RolloutBackendResponse` contract | -| `GenerateState` | 37 | **Naming only** | References `sglang_server_concurrency`, `sglang_dp_size`, `sglang_enable_deterministic_inference` — all are generic rollout concepts with SGLang-prefixed names | -| `generate()` | 58 | **14 lines** | RadixTree middleware path (L170-183) is 100% SGLang-specific; the else branch (L185-195) already uses `RolloutBackendClient` | -| `generate_and_rm()` | 60 | No | Shared orchestration (semaphore, custom func, reward) | -| `generate_and_rm_group()` | 37 | No | Group parallelism + deterministic seeds | -| `abort()` | 38 | No | Already uses `backend.abort()` | -| `generate_rollout_async()` | 71 | No | Main loop, filtering, metrics | -| `eval_rollout()` / `eval_rollout_single_dataset()` | 118 | **Naming only** | `sglang_enable_deterministic_inference` reference | -| `generate_rollout()` | 41 | No | Sync entry point | - -**Conclusion**: the actual backend logic that needs isolation is **one code path** (~14 lines) inside `generate()`. Everything else is either already abstracted through `RolloutBackendClient` or is a naming-only coupling (SGLang-prefixed arg names for generic concepts). - -#### Approach - -1. **Extract the RadixTree path into a strategy hook** that `generate()` calls conditionally. -2. **Rename SGLang-prefixed args** to generic names (coordinated with Phase 3 args refactor). -3. **Keep functions as functions** — they compose well and callers (`train.py`, OPD, multi-agent) import them directly. - -#### Concrete changes - -**Step 1 — Extract RadixTree strategy from `generate()`** - -Current `generate()` has an `if use_radix: ... else: backend.generate(...)` branch. -Refactor into: - -```python -# slime/rollout/sglang_rollout.py — generate() simplified - -async def generate(args, sample, sampling_params): - ... - input_ids = ... # shared prompt encoding (unchanged) - - strategy = _get_generate_strategy(args) - resp = await strategy(args, sample, input_ids, sampling_params) - _apply_backend_response(sample, resp, args) - return sample -``` - -Two strategies: - -```python -# Still in sglang_rollout.py (no new file needed) - -def _get_generate_strategy(args): - """Return the generate coroutine to use.""" - if _is_radix_tree_enabled(args): - return _generate_radix_tree # SGLang-only path - return _generate_via_backend_client # Generic path (SGLang or vLLM) - -def _is_radix_tree_enabled(args) -> bool: - return ( - args.use_slime_router - and "RadixTreeMiddleware" in getattr(args, "slime_router_middleware_paths", []) - ) - -async def _generate_radix_tree(args, sample, input_ids, sampling_params) -> RolloutBackendResponse: - """SGLang RadixTree middleware path — returns normalized response.""" - from slime.router.middleware_hub.radix_tree_middleware import postprocess_sample_with_radix_tree - url = f"http://{args.rollout_router_ip}:{args.rollout_router_port}/generate" - payload = { ... } # existing payload construction - output = await post(url, payload, headers=headers) - sample = await postprocess_sample_with_radix_tree(args, sample, output) - return _extract_response_from_sample(sample) # normalize to RolloutBackendResponse - -async def _generate_via_backend_client(args, sample, input_ids, sampling_params) -> RolloutBackendResponse: - """Generic backend client path — works for SGLang and vLLM.""" - backend = _get_backend_client(args) - base_url = f"http://{args.rollout_router_ip}:{args.rollout_router_port}" - req = RolloutBackendRequest(...) - return await backend.generate(req, base_url, headers=headers) -``` - -**Step 2 — Rename SGLang-prefixed args to generic names** - -| Current name | New name | Reason | -|---|---|---| -| `sglang_server_concurrency` | `rollout_concurrency` | Controls request parallelism for any backend | -| `sglang_dp_size` | `rollout_dp_size` | Data-parallel sharding, not SGLang-specific | -| `sglang_router_ip` / `sglang_router_port` | `rollout_router_ip` / `rollout_router_port` | Router endpoint, backend-agnostic | -| `sglang_router_policy` | `rollout_router_policy` | Routing strategy | -| `sglang_enable_deterministic_inference` | `rollout_deterministic_inference` | Seed-based determinism | -| `vllm_base_url` | (remove) | Folded into `rollout_router_ip:port`, no special case | - -Legacy aliases kept in [slime/utils/arguments.py](slime/utils/arguments.py) for one release cycle (coordinated with Phase 3). - -**Step 3 — No new files** - -The file stays as [slime/rollout/sglang_rollout.py](slime/rollout/sglang_rollout.py) during this phase. -Optionally rename to `slime/rollout/rollout.py` in Phase 4 cleanup, since the file is backend-agnostic after the refactor. - -### 5.3 Arguments/Config Refactor - -In [slime/utils/arguments.py](slime/utils/arguments.py), split into: - -1. Shared rollout args. -2. SGLang backend args/validation. -3. vLLM backend args/validation. - -Add backend finalizers: - -- `finalize_sglang_args(args)` -- `finalize_vllm_args(args)` - -Move SGLang alias fallback out of shared finalize flow. - -### 5.4 Weight Sync: Decouple FSDP `update_weight_utils.py` from SGLang Internals - -#### Current state analysis - -[slime/backends/fsdp_utils/update_weight_utils.py](slime/backends/fsdp_utils/update_weight_utils.py) (287 lines) has two concrete classes: - -| Class | Weight-push method | SGLang coupling | -|---|---|---| -| `UpdateWeightFromTensor` | IPC via Gloo gather → `engine.update_weights_from_tensor.remote()` | Imports `FlattenedTensorBucket`, `MultiprocessingSerializer`, `monkey_patch_torch_reductions` directly from `sglang.srt.*` | -| `UpdateWeightFromDistributed` | NCCL broadcast → `engine.update_weights_from_distributed.remote()` | Calls `engine.init_weights_update_group.remote()` — SGLang engine API | - -The abstract base `UpdateWeight` itself is clean (only PyTorch + Ray). - -The Megatron side already solved this: [slime/backends/megatron_utils/sglang.py](slime/backends/megatron_utils/sglang.py) centralizes all SGLang imports into one shim. The FSDP side duplicates these imports inline. - -#### Coupling points - -1. **SGLang utility imports (L13-26)** — `monkey_patch_torch_reductions`, `MultiprocessingSerializer`, `FlattenedTensorBucket` are imported directly from `sglang.srt.*` with try/except version fallbacks. -2. **`UpdateWeightFromTensor.update_bucket_weights()`** — uses `FlattenedTensorBucket` to flatten tensors, `MultiprocessingSerializer` to serialize, then calls `engine.update_weights_from_tensor.remote()`. -3. **`UpdateWeightFromDistributed.connect_rollout_engines()`** — calls `engine.init_weights_update_group.remote()` which is an SGLang engine method. -4. **`UpdateWeightFromDistributed.update_bucket_weights()`** — calls `engine.update_weights_from_distributed.remote()` which is an SGLang engine method. - -All four points assume the engine actor exposes SGLang's RPC interface. vLLM engines expose different method names. - -#### Approach - -**Step 1 — Centralize SGLang imports via a shim (same pattern as Megatron)** - -Reuse or mirror the existing [slime/backends/megatron_utils/sglang.py](slime/backends/megatron_utils/sglang.py) pattern: - -```python -# slime/backends/fsdp_utils/sglang_compat.py (new, ~15 lines) -try: - from sglang.srt.utils.patch_torch import monkey_patch_torch_reductions -except ImportError: - from sglang.srt.patch_torch import monkey_patch_torch_reductions - -from sglang.srt.utils import MultiprocessingSerializer - -try: - from sglang.srt.weight_sync.tensor_bucket import FlattenedTensorBucket -except ImportError: - from sglang.srt.model_executor.model_runner import FlattenedTensorBucket -``` - -Then `update_weight_utils.py` imports from `sglang_compat` — one import line instead of five, and only loaded when SGLang is the active backend. - -**Step 2 — Abstract engine RPC calls behind a protocol** - -The engine actors (`SGLangEngine`, `VLLMEngine`) already expose weight-sync methods but with different names/signatures. Introduce a lightweight protocol or adapter: - -```python -# In update_weight_utils.py or a small helper - -def _call_engine_update_tensor(engine, backend: str, **kwargs): - """Dispatch IPC weight update to the correct engine method.""" - if backend == "vllm": - return engine.update_weights_from_tensor.remote(**kwargs) # vLLM uses same name via NcclBridge - return engine.update_weights_from_tensor.remote(**kwargs) # SGLang native - -def _call_engine_update_distributed(engine, backend: str, **kwargs): - if backend == "vllm": - return engine.update_weights_from_distributed.remote(**kwargs) - return engine.update_weights_from_distributed.remote(**kwargs) - -def _call_engine_init_weight_group(engine, backend: str, **kwargs): - if backend == "vllm": - return engine.init_weights_update_group.remote(**kwargs) - return engine.init_weights_update_group.remote(**kwargs) -``` - -> Note: Currently `VLLMEngine` already mirrors these method names (it wraps them via `NcclBridge`), so the dispatch functions may initially be identical. The value is making the indirection explicit so future method-name divergence is handled in one place. - -**Step 3 — Lazy-import SGLang utilities only when backend is SGLang** - -Move the `FlattenedTensorBucket` / `MultiprocessingSerializer` imports inside `UpdateWeightFromTensor.update_bucket_weights()` behind a lazy import, so the module can be loaded in a vLLM-only environment without SGLang installed. - -#### What changes - -| File | Change | -|---|---| -| `slime/backends/fsdp_utils/sglang_compat.py` | New shim file (~15 lines) centralizing SGLang imports | -| `slime/backends/fsdp_utils/update_weight_utils.py` | Replace 5 inline SGLang imports with one `from .sglang_compat import ...`; add backend-aware engine dispatch helpers | - -#### What does NOT change - -- `UpdateWeight` abstract base class — already clean. -- `UpdateWeightFromDistributed` NCCL logic — the broadcast itself is pure PyTorch; only the engine RPC dispatch gets a thin wrapper. -- Megatron-side weight sync — already has its own shim, not touched. - diff --git a/rfc-vllm-rollout-backend-en.md b/rfc-vllm-rollout-backend-en.md deleted file mode 100644 index dad61a0731..0000000000 --- a/rfc-vllm-rollout-backend-en.md +++ /dev/null @@ -1,401 +0,0 @@ -# RFC: Supporting vLLM as a Rollout Backend in Slime - -- **Author**: \ -- **Status**: Phase 1 Done -- **Audience**: Slime rollout/runtime maintainers, RL training maintainers -- **Last Updated**: 2026-03-03 - -## 1. Summary - -This RFC proposes adding **vLLM** as a first-class rollout backend in Slime while keeping the existing SGLang behavior unchanged and the GRPO training pipeline unaffected. - -Core design principles: - -1. Define backend-agnostic rollout request/response contracts (`RolloutBackendRequest`/`RolloutBackendResponse`). -2. Isolate protocol differences through backend adapters (`SGLangClient`, `VLLMClient`). -3. Apply explicit capability gating for non-equivalent features (abort, routed experts, prompt logprobs). -4. Managed mode -- Slime manages the vLLM process lifecycle within Ray, on par with the SGLang path. -5. Weight synchronization leverages vLLM's native weight transfer API, automatically selecting the backend based on deployment mode: - - **Colocate mode**: CUDA IPC (`IPCWeightTransferEngine`) -- zero-copy via shared GPU memory. - - **Non-colocate mode**: NCCL broadcast (`NCCLWeightTransferEngine`) -- direct GPU transfer. - -**Current status**: Phase 1 is complete and verified. GRPO training runs successfully with Qwen2.5-0.5B + GSM8K on 4 GPUs in colocate mode. - -## 2. Motivation - -Slime currently assumes SGLang behavior in multiple places: - -- Rollout generation response format (`meta_info.finish_reason.type`, `output_token_logprobs`, optional `routed_experts`) -- Router control-plane interactions (`/workers`, `/list_workers`, `/abort_request`) -- Ray-based rollout server startup flow - -Supporting vLLM is therefore not just "swapping a URL" -- it requires compatibility layers on both the data plane and control plane. - -## 3. Goals and Non-Goals - -### Goals - -- Add `--rollout-backend {sglang,vllm}` -- Keep SGLang as the default, unchanged -- Keep the training-side interface stable -- Support GRPO rollout with explicit compatibility semantics and observability -- **Support colocate mode** (training and inference share GPUs, weight sync via CUDA IPC) - -### Non-Goals (Current Phase) - -- Full feature parity with all SGLang capabilities -- R3 routing replay on vLLM -- Multi-instance vLLM + router load balancing - -## 4. Architecture and Interface Changes - -### 4.1 Architecture Changes - -#### End-to-End Architecture Diagram - -```text - +--------------------+ - | TrainerLoop | - +---------+----------+ - | - +---------------------+---------------------+ - | (generate) (update_weights) - v v - +--------------------+ +------------------------------------+ - | RolloutFunction | | weight updater (auto-selected) | - | (sglang_rollout) | | colocate → UpdateWeightFromTensor | - +---------+----------+ | otherwise → ...FromDistributed | - | +---------------+--------------------+ - v | - +-------------------------------+ | - | RolloutBackendRequest | | - +---------------+---------------+ | - | v - v +----------------------------+ - +--------------------------+ | VLLMEngine (Ray actor) | - | RolloutBackendClient | | weight transfer backend: | - +------------+-------------+ | colocate → IPC | - | | otherwise → NCCL | - +-------------+-------------+ +-------------+--------------+ - | | | - v v v -+------------+ +-----------+ +---------------+ -| SGLang | | VLLM | | vLLM server | -| Client | | Client | | /update_weights| -+-----+------+ +-----+-----+ | /pause /resume | - | | | /sleep /wake_up| - v v +---------------+ - +-----------+ +-------------+ - | SGLang | | vLLM server | - | Router | | /v1/compl. | - +-----------+ +-------------+ - \ / - \ / - v v - +-----------------------------------+ - | RolloutBackendResponse | - | (text, token_ids, token_logprobs, | - | finish_reason, backend_raw) | - +----------------+------------------+ - | - v - +-----------------------------------+ - | SampleUpdate + Training Pipeline | - | (backend-agnostic consumption) | - +-----------------------------------+ -``` - -#### Component Responsibility Comparison - -| Component | Before RFC | After RFC | -|---|---|---| -| `RolloutFunction` | Generic rollout + SGLang protocol details | Generic rollout orchestration only | -| Backend protocol layer | Implicit in rollout logic | Explicit `RolloutBackendClient` adapter | -| `SGLangClient` | Did not exist (logic scattered) | Owns all SGLang request/response/control-plane details | -| `VLLMClient` | Did not exist | Owns vLLM `/v1/completions` request/response mapping | -| Training/sample pipeline | Indirectly consumed SGLang-format fields | Consumes unified contract fields, backend-agnostic | -| Weight sync | SGLang IPC or NCCL only | Auto-adapts: SGLang IPC / vLLM IPC / vLLM NCCL | - -#### Control-Plane Behavior Split - -| Control-plane behavior | SGLang path | vLLM path | -|---|---|---| -| Worker registration/discovery API | Supported | Not needed | -| Worker-level abort | Supported (`/abort_request`) | Degraded to timeout/cancel strategy | -| Routed experts replay | Supported | Explicitly unsupported (capability-gated) | -| Health check | Existing SGLang/SlimeRouter | `GET /health` direct connection | -| Memory management (sleep/wake) | `release/resume_memory_occupation` | `POST /sleep` / `POST /wake_up` | - -#### A) Rollout Backend Abstraction Layer - -- `RolloutBackendClient` (`slime/rollout/backends/base_client.py`): defines `generate()` + `capabilities` abstract interface -- `BackendCapabilities` dataclass: declares `supports_abort`, `supports_routed_experts`, `supports_prompt_logprobs` -- `SGLangClient` (extracted from existing code), `VLLMClient` (new) - -**Impact**: Rollout logic calls a unified interface and no longer directly embeds SGLang HTTP semantics. - -#### B) Rollout Execution Path - -- `sglang_rollout.generate` constructs `RolloutBackendRequest` and consumes `RolloutBackendResponse` -- Selects `SGLangClient` or `VLLMClient` based on `--rollout-backend` -- `VLLMClient` calls vLLM's OpenAI-compatible `/v1/completions` endpoint - -**Impact**: Training-side logic remains stable; backend details are encapsulated in adapters. - -#### C) RolloutManager Startup Path - -- Existing path (SGLang): unchanged -- vLLM path: `_start_vllm_rollout_servers()` creates a `VLLMEngine` Ray actor that starts and manages a local vLLM server process - -**Impact**: vLLM gets the same lifecycle management as SGLang. - -#### D) Weight Synchronization - -Weight synchronization supports two modes, automatically selected based on deployment: - -**Selection logic** (`actor.py`): -```python -update_weight_cls = UpdateWeightFromTensor if args.colocate else UpdateWeightFromDistributed -``` -Identical to the SGLang selection logic -- backend-agnostic. - -##### D.1) Colocate Mode: CUDA IPC - -The vLLM server starts with `--weight-transfer-config '{"backend": "ipc"}'`. - -Call chain: -```text -UpdateWeightFromTensor.update_weights() - → engine.pause_generation.remote() # VLLMEngine → POST /pause?mode=abort - → _send_to_colocated_vllm_engine() - → each training rank: - reduce_tensor(tensor) # create CUDA IPC handle - {gpu_uuid: ipc_handle} # keyed by physical GPU UUID - → dist.gather_object (Gloo) # collect handles from all TP ranks - → pickle + base64 encode - → engine.update_weights_from_tensor.remote() - → VLLMEngine → POST /update_weights - { "update_info": { - "names": [...], - "dtype_names": [...], - "shapes": [...], - "ipc_handles_pickled": "base64..." - }} - → vLLM IPCWeightTransferEngine.receive_weights() - → each TP worker looks up its IPC handle by GPU UUID - → func(*args) reconstructs tensor → load_weights() - → engine.continue_generation.remote() # VLLMEngine → POST /resume -``` - -Key points: -- The training process and vLLM workers share the same physical GPU; CUDA IPC enables zero-copy weight transfer -- For TP>1, IPC handles from all training ranks are merged via Gloo gather; each parameter contains a mapping of all GPU UUIDs -- The training side must keep tensor references alive until `ray.get()` returns (vLLM has finished reading) - -##### D.2) Non-Colocate Mode: NCCL Broadcast - -The vLLM server starts with `--weight-transfer-config '{"backend": "nccl"}'`. - -Call chain: -```text -UpdateWeightFromDistributed.update_weights() - → engine.init_weights_update_group.remote() # VLLMEngine → POST /init_weight_transfer_engine - → vLLM NCCLWeightTransferEngine initializes StatelessProcessGroup + PyNcclCommunicator - → training side: NCCLWeightTransferEngine.trainer_init() - → establishes a matching NCCL communicator with vLLM - → PyNcclCommunicator.broadcast(tensor, src=0) # direct GPU transfer to vLLM workers - → engine.update_weights_from_distributed.remote() - → VLLMEngine → POST /update_weights - { "update_info": { "names": [...], "dtype_names": [...], "shapes": [...] }} - → vLLM NCCLWeightTransferEngine.receive_weights() -``` - -Key points: -- The training side uses vLLM's `NCCLWeightTransferEngine.trainer_init()` to initialize NCCL, compatible with vLLM's internal `StatelessProcessGroup` + `PyNcclCommunicator` -- Cannot use `torch.distributed.init_process_group` (incompatible with vLLM) - -#### VLLMEngine Endpoint Mapping - -`VLLMEngine` exposes method signatures compatible with `SGLangEngine`. Internal HTTP endpoint mapping: - -| Method | VLLMEngine internal HTTP call | -|---|---| -| `pause_generation()` | `POST /pause?mode=abort` | -| `flush_cache()` | no-op | -| `continue_generation()` | `POST /resume` | -| `init_weights_update_group(...)` | `POST /init_weight_transfer_engine` | -| `update_weights_from_distributed(...)` | `POST /update_weights` (NCCL mode) | -| `update_weights_from_tensor(...)` | `POST /update_weights` (IPC mode) | -| `release_memory_occupation()` | `POST /sleep?level=1&mode=abort` | -| `resume_memory_occupation()` | `POST /wake_up` | -| `health_generate()` | `GET /health` | -| `shutdown()` | `process.terminate()` | - -**Impact**: Training-side code (`UpdateWeightFromTensor`, `UpdateWeightFromDistributed`, actor code) uses a unified interface, unaware of the specific backend. - -#### E) Router Decision - -vLLM does not use a router in the current phase: -- Single vLLM instance; `VLLMClient` connects directly to the local vLLM server port -- SGLang Model Gateway only supports SGLang workers, not applicable -- SlimeRouter is only needed for R3 / radix-tree caching scenarios - -### 4.2 Interface Changes - -#### A) New CLI Arguments - -- `--rollout-backend {sglang,vllm}` -- select rollout backend -- `--vllm-base-url` -- manually specify vLLM server address (not needed when auto-managed) -- `--vllm-model` -- model path for vLLM to load (defaults to `--hf-checkpoint`) -- `--vllm-max-retries` -- max retries for generation requests -- `--vllm-enforce-eager` -- disable CUDA graph (default True) - -#### B) New Internal Unified Interface - -Added to `slime/rollout/base_types.py`: - -- `RolloutBackendRequest`: input_ids, sampling_params, return_logprob, return_routed_experts, image_data, session_id -- `RolloutBackendResponse`: text, output_token_ids, output_token_logprobs, finish_reason (`stop|length|abort`), prompt_tokens, completion_tokens, backend_raw, routed_experts - -#### C) Capability Gating - -`BackendCapabilities` dataclass declares capabilities per backend: - -| Capability | SGLangClient | VLLMClient | -|---|---|---| -| `supports_abort` | True | False | -| `supports_routed_experts` | True | False | -| `supports_prompt_logprobs` | True | False | - -Unsupported features are explicitly gated, logged, or fail fast at call time. - -## 5. File-Level Change List - -### New Files - -| File | Description | -|---|---| -| `slime/rollout/backends/base_client.py` | `RolloutBackendClient` abstract interface + `BackendCapabilities` | -| `slime/rollout/backends/sglang_client.py` | SGLang rollout client (extracted from existing code) | -| `slime/rollout/backends/vllm_client.py` | vLLM rollout client (`/v1/completions` adapter) | -| `slime/rollout/backends/__init__.py` | Adapter exports | -| `slime/backends/vllm_utils/vllm_engine.py` | `VLLMEngine` Ray actor (process management + weight sync) | -| `run-qwen2.5-0.5B-vllm.sh` | vLLM validation script (Qwen2.5-0.5B + GSM8K + colocate) | - -### Modified Files - -| File | Description | -|---|---| -| `slime/rollout/base_types.py` | Added `RolloutBackendRequest` / `RolloutBackendResponse` | -| `slime/rollout/sglang_rollout.py` | Uses backend adapter instead of hard-coded SGLang protocol | -| `slime/utils/arguments.py` | Added `--rollout-backend`, vLLM arguments; sets sglang alias defaults for vLLM | -| `slime/ray/rollout.py` | `_start_vllm_rollout_servers()` to start VLLMEngine | -| `slime/backends/megatron_utils/actor.py` | Weight updater selection: `colocate → UpdateWeightFromTensor` (backend-agnostic) | -| `slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py` | Added `_send_to_colocated_vllm_engine()` (CUDA IPC path) | -| `slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py` | vLLM NCCL compatibility: `NCCLWeightTransferEngine.trainer_init()` + `PyNcclCommunicator.broadcast()` | - -### Unchanged Files - -| File | Description | -|---|---| -| `train.py` | Training loop is backend-agnostic | -| SGLang-related files | SGLang path is completely unaffected | - -### Not Used (Differences from Initial RFC Draft) - -- **No `worker_extension.py`**: vLLM's native weight transfer API fully meets requirements; no custom WorkerExtension needed -- **No `collective_rpc`**: Uses vLLM's `/init_weight_transfer_engine` and `/update_weights` endpoints - -## 6. Capability Compatibility Matrix - -| Capability | SGLang | vLLM | Handling | -|---|---|---|---| -| Token-level response logprobs | Supported | Supported (`choice.logprobs.token_logprobs`) | Adapter normalization | -| Output token IDs | `meta_info` | `choice.token_ids` | Adapter normalization | -| Finish reason | `stop\|length\|abort` | `stop\|length` + others | Canonical mapping | -| Worker-level abort | Supported | Not supported | Timeout/cancel degradation | -| Prompt logprobs (OPD) | Supported | Partial | Capability-gated | -| Routed experts (R3) | Supported | Not supported | Explicit gate | -| Colocate (GPU sharing) | Supported (FlattenedTensorBucket IPC) | Supported (CUDA IPC handles) | Native IPC per backend | -| Memory management | `release/resume_memory_occupation` | `POST /sleep` / `POST /wake_up` | Unified interface | -| `include_stop_str_in_output` | `no_stop_trim` | `include_stop_str_in_output` | Parameter mapping | - -## 7. Phased Plan - -### Phase 1: Managed vLLM GRPO Training ✅ Done - -**Goal**: Qwen2.5-0.5B GRPO training on 4 GPUs in colocate mode with GSM8K dataset, running successfully. - -Completed deliverables: -- `VLLMEngine` Ray actor: process lifecycle management, `/pause`/`/resume`/`/sleep`/`/wake_up` -- `VLLMClient` rollout adapter: `/v1/completions` request mapping, logprob/finish_reason/token_ids normalization -- `RolloutBackendRequest`/`Response` unified contract -- `SGLangClient` extraction -- `_start_vllm_rollout_servers` startup path -- Argument parsing branching (`--rollout-backend vllm`, sglang alias defaults) -- **Colocate mode**: CUDA IPC weight transfer (`_send_to_colocated_vllm_engine` → `IPCWeightTransferEngine`) -- **Non-colocate mode**: NCCL weight transfer (`NCCLWeightTransferEngine.trainer_init()` → `PyNcclCommunicator.broadcast()`) -- Validation script: `run-qwen2.5-0.5B-vllm.sh` - -Technical decisions: -- No router (single vLLM instance, direct connection) -- Colocate weight sync: CUDA IPC (training and vLLM share GPU memory, zero-copy) -- Non-colocate weight sync: vLLM native NCCL (`StatelessProcessGroup` + `PyNcclCommunicator`) -- Rollout function: reuses `sglang_rollout.py` (backend-agnostic orchestration) -- Training-side weight updater selection is identical to SGLang (`colocate → UpdateWeightFromTensor`) - -Acceptance results: -- ✅ Qwen2.5-0.5B + GSM8K + 4 GPU colocate training runs successfully -- ✅ Weight sync correctness: rollout outputs change with each training update -- ✅ Existing SGLang path unaffected - -### Phase 2: Multi-Instance vLLM + Async Training - -**Goal**: Support multi-instance vLLM rollout with [vllm-project/router](https://github.com/vllm-project/router) for load balancing, and verify async training (`train_async.py`) on larger models. - -Key deliverables: -- Integrate [vllm-project/router](https://github.com/vllm-project/router) as the vLLM-side load balancer -- `start_rollout_servers` launches N `VLLMEngine` actors + one vllm-router process -- `VLLMClient` generation requests routed through vllm-router instead of direct connection -- Verify async training (`train_async.py`) correctness with the vLLM backend - -Acceptance criteria: -- Multi-instance (e.g., 2-4 vLLM workers) rollout stable over 20+ rollout steps -- Async training (`train_async.py`) with no hangs or weight sync race conditions -- Throughput improvement compared to single-instance baseline -- Larger model verification (e.g., Qwen3-4B, TP=2) - -### Phase 3 (Future): Advanced Features - -- Abort/cancel strategy refinement -- Prompt logprob support (OPD scenarios) -- Deterministic computation verification -- Performance benchmarks (vLLM vs SGLang throughput comparison) - -## 8. Validation Strategy - -### Completed (Phase 1) - -- ✅ End-to-end GRPO training: `run-qwen2.5-0.5B-vllm.sh` (Qwen2.5-0.5B, GSM8K, 4 GPUs, colocate) -- ✅ Weight sync correctness verification -- ✅ SGLang path non-regression - -### Remaining - -- Unit tests: finish reason normalization, token/logprob alignment, capability-gated behavior -- Integration tests: SGLang vs vLLM response schema comparison -- Stress tests: higher concurrency / latency pressure - -## 9. Key Implementation Challenges and Solutions - -### 9.1 vLLM NCCL Incompatibility - -**Problem**: vLLM internally uses `StatelessProcessGroup` + `PyNcclCommunicator` for NCCL communication, which is incompatible with `torch.distributed.init_process_group`. - -**Solution**: The training side uses `NCCLWeightTransferEngine.trainer_init()` to initialize NCCL, ensuring a matching communicator is established with the vLLM side. - -### 9.2 vLLM Logprobs Format Differences - -**Problem**: vLLM's `/v1/completions` logprobs format (`choice.token_ids`, `choice.logprobs.token_logprobs`) differs from SGLang's. - -**Solution**: `VLLMClient` performs explicit mapping, converting vLLM's format into the unified `RolloutBackendResponse` format. diff --git a/rfc-vllm-rollout-backend.md b/rfc-vllm-rollout-backend.md deleted file mode 100644 index fc8e569793..0000000000 --- a/rfc-vllm-rollout-backend.md +++ /dev/null @@ -1,436 +0,0 @@ -# RFC: 在 Slime 中支持 vLLM 作为 Rollout Backend - -## 1. 概要 - -本 RFC 提议在 Slime 中增加 **vLLM** 作为一等 rollout backend,同时保持现有 SGLang 行为不变,不影响 GRPO 训练流程。 - -核心设计思路: - -1. 定义 backend 无关的 rollout 请求/响应契约(`RolloutBackendRequest`/`RolloutBackendResponse`)。 -2. 通过 backend adapter(`SGLangClient`、`VLLMClient`)隔离协议差异。 -3. 对不等价能力(abort、routed experts、prompt logprobs)做显式 capability gating。 -4. Managed 模式 —— Slime 在 Ray 内管理 vLLM 进程生命周期,与 SGLang 路径同等级别。 -5. 权重同步利用 vLLM 原生 weight transfer API,根据部署模式自动选择后端: - - **Colocate 模式**:CUDA IPC(`IPCWeightTransferEngine`),GPU 共享内存零拷贝。 - - **Non-colocate 模式**:NCCL broadcast(`NCCLWeightTransferEngine`),GPU 直传。 - -**当前状态**:Phase 1 已完成并验证通过。Qwen2.5-0.5B + GSM8K + 4 GPU colocate 模式下 GRPO 训练正常运行。 - -## 2. 为什么需要这个 - -Slime 当前在多处假设 SGLang 行为: - -- rollout 生成响应格式(`meta_info.finish_reason.type`、`output_token_logprobs`、可选 `routed_experts`) -- router 控制面交互(`/workers`、`/list_workers`、`/abort_request`) -- Ray 内 rollout server 启动流程 - -因此支持 vLLM 不是"换个 URL",而是需要在数据面和控制面做兼容层。 - -## 3. 目标与非目标 - -### 目标 - -- 新增 `--rollout-backend {sglang,vllm}` -- SGLang 路径默认不变 -- 训练侧接口保持稳定 -- 支持 GRPO rollout,具有显式兼容性语义和可观测性 -- **支持 colocate 模式**(训练与推理共享 GPU,通过 CUDA IPC 同步权重) - -### 非目标(当前阶段) - -- 所有 SGLang 特性的完全对等 -- vLLM 上的 R3 路由回放 -- 多 vLLM 实例 + router 负载均衡 - -## 4. 架构和接口改动 - -### 4.1 架构改动 - -#### 端到端架构图 - -```text - +--------------------+ - | TrainerLoop | - +---------+----------+ - | - +---------------------+---------------------+ - | (generate) (update_weights) - v v - +--------------------+ +------------------------------------+ - | RolloutFunction | | weight updater (自动选择) | - | (sglang_rollout) | | colocate → UpdateWeightFromTensor | - +---------+----------+ | otherwise → ...FromDistributed | - | +---------------+--------------------+ - v | - +-------------------------------+ | - | RolloutBackendRequest | | - +---------------+---------------+ | - | v - v +----------------------------+ - +--------------------------+ | VLLMEngine (Ray actor) | - | RolloutBackendClient | | weight transfer backend: | - +------------+-------------+ | colocate → IPC | - | | otherwise → NCCL | - +-------------+-------------+ +-------------+--------------+ - | | | - v v v -+------------+ +-----------+ +---------------+ -| SGLang | | VLLM | | vLLM server | -| Client | | Client | | /update_weights| -+-----+------+ +-----+-----+ | /pause /resume | - | | | /sleep /wake_up| - v v +---------------+ - +-----------+ +-------------+ - | SGLang | | vLLM server | - | Router | | /v1/compl. | - +-----------+ +-------------+ - \ / - \ / - v v - +-----------------------------------+ - | RolloutBackendResponse | - | (text, token_ids, token_logprobs, | - | finish_reason, backend_raw) | - +----------------+------------------+ - | - v - +-----------------------------------+ - | SampleUpdate + Training Pipeline | - | (backend 无关消费) | - +-----------------------------------+ -``` - -#### 组件职责对照 - -| 组件 | RFC 前 | RFC 后 | -|---|---|---| -| `RolloutFunction` | 包含通用 rollout + SGLang 协议细节 | 只包含通用 rollout 编排 | -| Backend 协议层 | 隐含在 rollout 逻辑里 | 显式的 `RolloutBackendClient` adapter | -| `SGLangClient` | 不存在(逻辑分散) | 拥有 SGLang 请求/响应/控制面的全部细节 | -| `VLLMClient` | 不存在 | 拥有 vLLM `/v1/completions` 请求/响应映射 | -| 训练/sample 管线 | 间接消费 SGLang 格式字段 | 消费统一契约字段,backend 无关 | -| 权重同步 | 仅 SGLang IPC 或 NCCL | 自动适配:SGLang IPC / vLLM IPC / vLLM NCCL | - -#### 控制面行为拆分 - -| 控制面行为 | SGLang 路径 | vLLM 路径 | -|---|---|---| -| Worker 注册/发现 API | 支持 | 不需要 | -| Worker 级 abort | 支持(`/abort_request`) | 降级为超时/取消策略 | -| Routed experts 回放 | 支持 | 显式不支持(capability-gated) | -| 健康检查 | 现有 SGLang/SlimeRouter | `GET /health` 直连 | -| 内存管理 (sleep/wake) | `release/resume_memory_occupation` | `POST /sleep` / `POST /wake_up` | - -#### A) Rollout backend 抽象层 - -- `RolloutBackendClient`(`slime/rollout/backends/base_client.py`):定义 `generate()` + `capabilities` 抽象接口 -- `BackendCapabilities` dataclass:声明 `supports_abort`、`supports_routed_experts`、`supports_prompt_logprobs` -- `SGLangClient`(从现有代码提取)、`VLLMClient`(新建) - -**影响**:rollout 逻辑调用统一接口,不再直接嵌入 SGLang HTTP 语义。 - -#### B) Rollout 执行路径 - -- `sglang_rollout.generate` 构造 `RolloutBackendRequest`,消费 `RolloutBackendResponse` -- 根据 `--rollout-backend` 选择 `SGLangClient` 或 `VLLMClient` -- `VLLMClient` 调用 vLLM OpenAI-compatible `/v1/completions` 端点 - -**影响**:训练侧逻辑保持稳定,backend 细节移入 adapter。 - -#### C) RolloutManager 启动路径 - -- 现有路径(SGLang):保持不变 -- vLLM 路径:`_start_vllm_rollout_servers()` 创建 `VLLMEngine` Ray actor,启动管理本地 vLLM server 进程 - -**影响**:vLLM 获得与 SGLang 相同的生命周期管理。 - -#### D) 权重同步 - -权重同步支持两种模式,根据部署方式自动选择: - -**模式选择逻辑**(`actor.py`): -```python -update_weight_cls = UpdateWeightFromTensor if args.colocate else UpdateWeightFromDistributed -``` -与 SGLang 使用完全相同的选择逻辑,backend 无关。 - -##### D.1) Colocate 模式:CUDA IPC - -vLLM server 启动时配置 `--weight-transfer-config '{"backend": "ipc"}'`。 - -调用链: -```text -UpdateWeightFromTensor.update_weights() - → engine.pause_generation.remote() # VLLMEngine → POST /pause?mode=abort - → _send_to_colocated_vllm_engine() - → 每个训练 rank: - reduce_tensor(tensor) # 创建 CUDA IPC handle - {gpu_uuid: ipc_handle} # 以物理 GPU UUID 为 key - → dist.gather_object (Gloo) # 收集所有 TP rank 的 handles - → pickle + base64 编码 - → engine.update_weights_from_tensor.remote() - → VLLMEngine → POST /update_weights - { "update_info": { - "names": [...], - "dtype_names": [...], - "shapes": [...], - "ipc_handles_pickled": "base64..." - }} - → vLLM IPCWeightTransferEngine.receive_weights() - → 每个 TP worker 根据自己的 GPU UUID 查找 IPC handle - → func(*args) 重建 tensor → load_weights() - → engine.continue_generation.remote() # VLLMEngine → POST /resume -``` - -关键点: -- 训练进程和 vLLM worker 共享同一物理 GPU,CUDA IPC 实现零拷贝权重传输 -- TP>1 时,各 training rank 的 IPC handles 通过 Gloo gather 合并,每个参数包含所有 GPU UUID 的映射 -- 训练侧必须保持 tensor 引用直到 `ray.get()` 返回(vLLM 读取完毕) - -##### D.2) Non-colocate 模式:NCCL broadcast - -vLLM server 启动时配置 `--weight-transfer-config '{"backend": "nccl"}'`。 - -调用链: -```text -UpdateWeightFromDistributed.update_weights() - → engine.init_weights_update_group.remote() # VLLMEngine → POST /init_weight_transfer_engine - → vLLM NCCLWeightTransferEngine 初始化 StatelessProcessGroup + PyNcclCommunicator - → 训练侧: NCCLWeightTransferEngine.trainer_init() - → 与 vLLM 建立匹配的 NCCL 通信组 - → PyNcclCommunicator.broadcast(tensor, src=0) # GPU 直传到 vLLM worker - → engine.update_weights_from_distributed.remote() - → VLLMEngine → POST /update_weights - { "update_info": { "names": [...], "dtype_names": [...], "shapes": [...] }} - → vLLM NCCLWeightTransferEngine.receive_weights() -``` - -关键点: -- 训练侧使用 vLLM 的 `NCCLWeightTransferEngine.trainer_init()` 初始化 NCCL,与 vLLM 内部的 `StatelessProcessGroup` + `PyNcclCommunicator` 兼容 -- 不能使用 `torch.distributed.init_process_group`(vLLM 不兼容) - -#### VLLMEngine 端点映射 - -`VLLMEngine` 暴露与 `SGLangEngine` 兼容的方法签名。内部 HTTP 端点映射: - -| 方法 | VLLMEngine 内部 HTTP 调用 | -|---|---| -| `pause_generation()` | `POST /pause?mode=abort` | -| `flush_cache()` | no-op | -| `continue_generation()` | `POST /resume` | -| `init_weights_update_group(...)` | `POST /init_weight_transfer_engine` | -| `update_weights_from_distributed(...)` | `POST /update_weights` (NCCL 模式) | -| `update_weights_from_tensor(...)` | `POST /update_weights` (IPC 模式) | -| `release_memory_occupation()` | `POST /sleep?level=1&mode=abort` | -| `resume_memory_occupation()` | `POST /wake_up` | -| `health_generate()` | `GET /health` | -| `shutdown()` | `process.terminate()` | - -**影响**:训练侧代码(`UpdateWeightFromTensor`、`UpdateWeightFromDistributed`、actor 代码)使用统一接口,不感知具体 backend。 - -#### E) Router 决策 - -vLLM 当前阶段不使用 router: -- 单 vLLM 实例,`VLLMClient` 直连本地 vLLM server 端口 -- SGLang Model Gateway 只支持 SGLang worker,不适用 -- SlimeRouter 仅在 R3 / radix-tree caching 时需要 - -### 4.2 接口改动 - -#### A) 新增 CLI 接口 - -- `--rollout-backend {sglang,vllm}` —— 选择 rollout backend -- `--vllm-base-url` —— 手动指定 vLLM server 地址(自动管理时无需设置) -- `--vllm-model` —— vLLM 加载的模型路径(默认同 `--hf-checkpoint`) -- `--vllm-max-retries` —— 生成请求最大重试次数 -- `--vllm-enforce-eager` —— 是否禁用 CUDA graph(默认 True) - -#### B) 新增内部统一接口 - -`slime/rollout/base_types.py` 中新增: - -- `RolloutBackendRequest`:input_ids、sampling_params、return_logprob、return_routed_experts、image_data、session_id -- `RolloutBackendResponse`:text、output_token_ids、output_token_logprobs、finish_reason(`stop|length|abort`)、prompt_tokens、completion_tokens、backend_raw、routed_experts - -#### C) 能力门控 - -`BackendCapabilities` dataclass 声明各 backend 支持的能力: - -| 能力 | SGLangClient | VLLMClient | -|---|---|---| -| `supports_abort` | True | False | -| `supports_routed_experts` | True | False | -| `supports_prompt_logprobs` | True | False | - -不支持的特性在调用时显式 gate、记录日志、或 fail fast。 - -## 5. 文件级改动清单 - -### 新增文件 - -| 文件 | 说明 | -|---|---| -| `slime/rollout/backends/base_client.py` | `RolloutBackendClient` 抽象接口 + `BackendCapabilities` | -| `slime/rollout/backends/sglang_client.py` | SGLang rollout client(从现有代码提取) | -| `slime/rollout/backends/vllm_client.py` | vLLM rollout client(`/v1/completions` 适配) | -| `slime/rollout/backends/__init__.py` | adapter 导出 | -| `slime/backends/vllm_utils/vllm_engine.py` | `VLLMEngine` Ray actor(进程管理 + 权重同步) | -| `run-qwen2.5-0.5B-vllm.sh` | vLLM 验证脚本(Qwen2.5-0.5B + GSM8K + colocate) | - -### 修改文件 - -| 文件 | 说明 | -|---|---| -| `slime/rollout/base_types.py` | 新增 `RolloutBackendRequest` / `RolloutBackendResponse` | -| `slime/rollout/sglang_rollout.py` | 使用 backend adapter 代替硬编码 SGLang 协议 | -| `slime/utils/arguments.py` | 新增 `--rollout-backend`、vLLM 参数;vLLM 时设置 sglang 别名默认值 | -| `slime/ray/rollout.py` | `_start_vllm_rollout_servers()` 启动 VLLMEngine | -| `slime/backends/megatron_utils/actor.py` | 权重更新器选择:`colocate → UpdateWeightFromTensor`(backend 无关) | -| `slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py` | 新增 `_send_to_colocated_vllm_engine()`(CUDA IPC 路径) | -| `slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py` | vLLM NCCL 兼容:`NCCLWeightTransferEngine.trainer_init()` + `PyNcclCommunicator.broadcast()` | - -### 不变文件 - -| 文件 | 说明 | -|---|---| -| `train.py` | 训练循环不感知 backend | -| SGLang 相关文件 | SGLang 路径完全不受影响 | - -### 未使用(与 RFC 初稿的差异) - -- **无 `worker_extension.py`**:vLLM 原生 weight transfer API 完全满足需求,无需自定义 WorkerExtension -- **无 `collective_rpc`**:使用 vLLM 的 `/init_weight_transfer_engine` 和 `/update_weights` 端点 - -## 6. 能力兼容矩阵 - -| 能力 | SGLang | vLLM | 处理方式 | -|---|---|---|---| -| Token 级响应 logprobs | 支持 | 支持(`choice.logprobs.token_logprobs`) | adapter 归一化 | -| Output token IDs | `meta_info` | `choice.token_ids` | adapter 归一化 | -| Finish reason | `stop\|length\|abort` | `stop\|length` + 其他 | canonical 映射 | -| Worker 级 abort | 支持 | 不支持 | 超时/取消降级 | -| Prompt logprobs(OPD) | 支持 | 部分 | capability-gated | -| Routed experts(R3) | 支持 | 不支持 | 显式 gate | -| Colocate(GPU 共享) | 支持(FlattenedTensorBucket IPC) | 支持(CUDA IPC handles) | 各自原生 IPC | -| 内存管理 | `release/resume_memory_occupation` | `POST /sleep` / `POST /wake_up` | 接口统一 | -| `include_stop_str_in_output` | `no_stop_trim` | `include_stop_str_in_output` | 参数映射 | - -## 7. 分阶段计划 - -### 第一阶段:Managed vLLM GRPO 训练 ✅ Done - -**目标**:Qwen2.5-0.5B GRPO 4 卡 colocate 训练,GSM8K 数据集,训练正常运行。 - -已完成交付物: -- `VLLMEngine` Ray actor:进程生命周期管理、`/pause`/`/resume`/`/sleep`/`/wake_up` -- `VLLMClient` rollout adapter:`/v1/completions` 请求映射、logprob/finish_reason/token_ids 归一化 -- `RolloutBackendRequest`/`Response` 统一契约 -- `SGLangClient` 提取 -- `_start_vllm_rollout_servers` 启动路径 -- 参数解析分流(`--rollout-backend vllm`,sglang 别名默认值) -- **Colocate 模式**:CUDA IPC 权重传输(`_send_to_colocated_vllm_engine` → `IPCWeightTransferEngine`) -- **Non-colocate 模式**:NCCL 权重传输(`NCCLWeightTransferEngine.trainer_init()` → `PyNcclCommunicator.broadcast()`) -- 验证脚本:`run-qwen2.5-0.5B-vllm.sh` - -技术决策: -- 不使用 router(单 vLLM 实例,直连) -- Colocate 权重同步:CUDA IPC(训练和 vLLM 共享 GPU 内存,零拷贝) -- Non-colocate 权重同步:vLLM 原生 NCCL(`StatelessProcessGroup` + `PyNcclCommunicator`) -- Rollout 函数:复用 `sglang_rollout.py`(backend 无关编排) -- 训练侧权重更新器选择与 SGLang 一致(`colocate → UpdateWeightFromTensor`) - -验收结果: -- ✅ Qwen2.5-0.5B + GSM8K + 4 GPU colocate 训练运行通过 -- ✅ 权重同步正确性:每轮 rollout 输出随训练更新变化 -- ✅ 现有 SGLang 路径不受影响 - -### 第二阶段:多 vLLM 实例 + 异步训推 - -**目标**:支持多 vLLM 实例 rollout,使用 [vllm-project/router](https://github.com/vllm-project/router) 做负载均衡,以异步训推(`train_async.py`)在更大模型上验证。 - -关键交付物: -- 集成 [vllm-project/router](https://github.com/vllm-project/router) 作为 vLLM 侧负载均衡器 -- `start_rollout_servers` 拉起 N 个 `VLLMEngine` actor + 一个 vllm-router 进程 -- `VLLMClient` 生成请求从直连改为走 vllm-router -- 验证异步训推(`train_async.py`)在 vLLM backend 下的正确性 - -验收标准: -- 多实例(如 2-4 个 vLLM worker)rollout 在 20+ rollout step 下稳定 -- 异步训推(`train_async.py`)无 hang、无权重同步竞态 -- 相比单实例基线有吞吐提升 -- 更大模型验证(如 Qwen3-4B,TP=2) - -### 第三阶段(未来):高级特性 - -- Abort/cancel 策略完善 -- Prompt logprob 支持(OPD 场景) -- 确定性计算验证 -- 性能基准测试(vLLM vs SGLang 吞吐量对比) - -## 8. 验证策略 - -### 已完成(Phase 1) - -- ✅ 端到端 GRPO 训练:`run-qwen2.5-0.5B-vllm.sh`(Qwen2.5-0.5B, GSM8K, 4 GPU, colocate) -- ✅ 权重同步正确性验证 -- ✅ SGLang 路径非回归 - -### 待完成 - -- 单元测试:finish reason 归一化、token/logprob 对齐、capability-gated 行为 -- 集成测试:SGLang vs vLLM 响应 schema 对比 -- 压测:更高并发 / 延迟压力 - -## 9. 实现中遇到的关键问题及解决 - -### 9.1 vLLM NCCL 不兼容 - -**问题**:vLLM 内部使用 `StatelessProcessGroup` + `PyNcclCommunicator` 管理 NCCL 通信,与 `torch.distributed.init_process_group` 不兼容。 - -**解决**:训练侧使用 `NCCLWeightTransferEngine.trainer_init()` 初始化 NCCL,确保与 vLLM 端建立匹配的通信组。 - -### 9.2 vLLM logprobs 格式差异 - -**问题**:vLLM `/v1/completions` 的 logprobs 格式(`choice.token_ids`、`choice.logprobs.token_logprobs`)与 SGLang 不同。 - -**解决**:`VLLMClient` 中做显式映射,将 vLLM 格式转换为 `RolloutBackendResponse` 统一格式。对于缺失 `token_ids` 的情况,回退到 tokenizer。 - -### 9.3 Colocate 模式下的 IPC 格式差异 - -**问题**:SGLang 使用 `FlattenedTensorBucket` + `MultiprocessingSerializer` 做 IPC,vLLM 使用独立的 CUDA IPC handles(`reduce_tensor`)。两者格式不兼容。 - -**解决**:新增 `_send_to_colocated_vllm_engine()` 函数,直接使用 `torch.multiprocessing.reductions.reduce_tensor` 创建 CUDA IPC handles,以 GPU UUID 为 key。TP>1 时通过 Gloo gather 合并各 rank 的 handles,然后 pickle + base64 编码后通过 `VLLMEngine` 转发到 vLLM 的 `/update_weights` 端点。 - -### 9.4 缺失的 sglang 参数别名 - -**问题**:vLLM backend 跳过 `sglang_validate_args()`,导致 `sglang_dp_size` 等别名未设置,后续代码 `AttributeError`。 - -**解决**:在 `arguments.py` 中为 vLLM backend 添加条件分支,设置 `sglang_dp_size`、`sglang_pp_size`、`sglang_ep_size`、`sglang_tp_size` 等默认值。 - -## 10. 风险与缓解 - -- **Logprob 语义不匹配**:严格 adapter 检查 + 归一化 + 测试 -- **Abort 不匹配**:能力模型 + 超时/取消降级 + 显式日志 -- **训练漂移**:强制 A/B 对照运行,固定 seed 和配置 -- **IPC handle 生命周期**:训练侧通过 `kept_alive` 列表 + `ray.get()` 阻塞确保 tensor 在 vLLM 读取完成前不被回收 - -## 11. 向 Slime 维护者提出的开放问题 - -1. 是否需要在 Phase 2 中将 vLLM 多实例 + router 作为默认部署模式? -2. 声称支持 GRPO 所需的最低 logprob 保真度是什么? -3. 是否应在完全对等前阻止 vLLM 的 OPD prompt-logprob 路径? -4. 推荐为默认 backend 之前需要满足什么质量门槛? -5. vLLM colocate IPC 路径是否需要支持混合模式(部分 colocate + 部分 distributed)? - -## 12. 请求决策 - -Phase 1 已实现并验证: - -- ✅ Contract-first adapter 架构 -- ✅ Managed vLLM 模式(与 SGLang 同等生命周期管理) -- ✅ 双模式权重同步(colocate: CUDA IPC / non-colocate: NCCL) -- ✅ 显式 capability-gated 行为 -- ✅ 严格 SGLang 非回归 - -请批准进入 Phase 2:多 vLLM 实例 + router + 异步训推。 - diff --git a/run-qwen2.5-0.5B-reproducibility-noncolocate.sh b/run-qwen2.5-0.5B-reproducibility-noncolocate.sh deleted file mode 100644 index 5499949340..0000000000 --- a/run-qwen2.5-0.5B-reproducibility-noncolocate.sh +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/bash -# Non-colocate version of run-qwen2.5-0.5B-reproducibility.sh -# 2 GPUs: 1 for training, 1 for SGLang rollout - -# for rerun the task -pkill -9 sglang -sleep 3 -ray stop --force -pkill -9 ray -pkill -9 python -sleep 3 -pkill -9 ray -pkill -9 python - -set -ex - -export PYTHONBUFFERED=16 - -SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" -source "${SCRIPT_DIR}/scripts/models/qwen2.5-0.5B.sh" - -CKPT_ARGS=( - --hf-checkpoint /root/Qwen2.5-0.5B-Instruct/ - --ref-load /root/Qwen2.5-0.5B-Instruct_torch_dist/ -) - -ROLLOUT_ARGS=( - --prompt-data /root/gsm8k/train.parquet - --input-key messages - --label-key label - --apply-chat-template - --rollout-shuffle - --rm-type math - --num-rollout 100 - --rollout-batch-size 32 - --n-samples-per-prompt 8 - --rollout-max-response-len 1024 - --rollout-temperature 1 - - --global-batch-size 256 -) - -EVAL_ARGS=( - --eval-interval 20 - --eval-prompt-data gsm8k /root/gsm8k/test.parquet - --n-samples-per-eval-prompt 1 - --eval-max-response-len 1024 - --eval-top-k 1 -) - -PERF_ARGS=( - --tensor-model-parallel-size 1 - --sequence-parallel - --pipeline-model-parallel-size 1 - --context-parallel-size 1 - --expert-model-parallel-size 1 - --expert-tensor-parallel-size 1 - - --use-dynamic-batch-size - --max-tokens-per-gpu 9216 -) - -GRPO_ARGS=( - --advantage-estimator grpo - --use-kl-loss - --kl-loss-coef 0.00 - --kl-loss-type low_var_kl - --kl-coef 0.00 - --entropy-coef 0.00 - --eps-clip 0.2 - --eps-clip-high 0.28 -) - -OPTIMIZER_ARGS=( - --optimizer adam - --lr 1e-6 - --lr-decay-style constant - --weight-decay 0.1 - --adam-beta1 0.9 - --adam-beta2 0.98 -) - -WANDB_ARGS=( - --use-wandb - --wandb-host https://wandb.ai/ - --wandb-entity samithuang - --wandb-project slime-rl - --wandb-group qwen2.5-0.5B-gsm8k-noncolocate -) - -SGLANG_ARGS=( - --rollout-num-gpus-per-engine 1 - --sglang-mem-fraction-static 0.7 - - --sglang-enable-deterministic-inference - --sglang-attention-backend flashinfer - - --deterministic-mode -) - -MISC_ARGS=( - --attention-dropout 0.0 - --hidden-dropout 0.0 - --accumulate-allreduce-grads-in-fp32 - --attention-softmax-in-fp32 - --attention-backend flash -) - -ray start --head --node-ip-address 127.0.0.1 --num-gpus 2 --disable-usage-stats - -ray job submit --address="http://127.0.0.1:8265" \ - --runtime-env-json='{ - "env_vars": { - "PYTHONPATH": "/root/Megatron-LM", - "CUDA_DEVICE_MAX_CONNECTIONS": "1", - "NCCL_ALGO": "Ring", - "NVTE_ALLOW_NONDETERMINISTIC_ALGO": "0", - "CUBLAS_WORKSPACE_CONFIG": ":4096:8" - } - }' \ - -- python3 train.py \ - --actor-num-nodes 1 \ - --actor-num-gpus-per-node 1 \ - --num-gpus-per-node 2 \ - --rollout-num-gpus 1 \ - --calculate-per-token-loss \ - --use-slime-router \ - ${MODEL_ARGS[@]} \ - ${CKPT_ARGS[@]} \ - ${ROLLOUT_ARGS[@]} \ - ${OPTIMIZER_ARGS[@]} \ - ${GRPO_ARGS[@]} \ - ${WANDB_ARGS[@]} \ - ${PERF_ARGS[@]} \ - ${EVAL_ARGS[@]} \ - ${SGLANG_ARGS[@]} \ - ${MISC_ARGS[@]} diff --git a/run-qwen2.5-0.5B-vllm.sh b/run-qwen2.5-0.5B-vllm.sh deleted file mode 100644 index 397fac1c58..0000000000 --- a/run-qwen2.5-0.5B-vllm.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/bash -# vLLM rollout backend validation script (Phase 1) -# Based on run-qwen2.5-0.5B-reproducibility.sh - -# for rerun the task -pkill -9 vllm -pkill -9 sglang -sleep 3 -ray stop --force -pkill -9 ray -pkill -9 python -sleep 3 -pkill -9 ray -pkill -9 python - - -set -ex - -export PYTHONBUFFERED=16 - -SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" -source "${SCRIPT_DIR}/scripts/models/qwen2.5-0.5B.sh" - -CKPT_ARGS=( - --hf-checkpoint /root/Qwen2.5-0.5B-Instruct/ - --ref-load /root/Qwen2.5-0.5B-Instruct_torch_dist/ -) - -# num-rollout:100 -ROLLOUT_ARGS=( - --prompt-data /root/gsm8k/train.parquet - --input-key messages - --label-key label - --apply-chat-template - --rollout-shuffle - --rm-type math - --num-rollout 500 - --rollout-batch-size 32 - --n-samples-per-prompt 8 - --rollout-max-response-len 1024 - --rollout-temperature 1 - - --global-batch-size 256 -) - -EVAL_ARGS=( - --eval-interval 20 - --eval-prompt-data gsm8k /root/gsm8k/test.parquet - --n-samples-per-eval-prompt 1 - --eval-max-response-len 1024 - --eval-top-k 1 -) - -PERF_ARGS=( - --tensor-model-parallel-size 1 - --sequence-parallel - --pipeline-model-parallel-size 1 - --context-parallel-size 1 - --expert-model-parallel-size 1 - --expert-tensor-parallel-size 1 - - --use-dynamic-batch-size - --max-tokens-per-gpu 9216 -) - -GRPO_ARGS=( - --advantage-estimator grpo - --use-kl-loss - --kl-loss-coef 0.00 - --kl-loss-type low_var_kl - --kl-coef 0.00 - --entropy-coef 0.00 - --eps-clip 0.2 - --eps-clip-high 0.28 -) - -OPTIMIZER_ARGS=( - --optimizer adam - --lr 1e-6 - --lr-decay-style constant - --weight-decay 0.1 - --adam-beta1 0.9 - --adam-beta2 0.98 -) - -WANDB_ARGS=( - # --use-wandb - # --wandb-host https://wandb.ai/ - # --wandb-entity samithuang - # --wandb-project slime-rl - # --wandb-group qwen2.5-0.5B-gsm8k-vllm -) - -VLLM_ARGS=( - --rollout-backend vllm - --rollout-num-gpus-per-engine 1 - --rollout-server-concurrency 512 - --use-slime-router - --vllm-gpu-memory-utilization 0.2 - --slime-router-middleware-paths slime.router.middleware_hub.radix_tree_middleware.RadixTreeMiddleware - # Uncomment below to enable colocate mode (IPC weight transfer, same GPU) - --colocate -) - -MISC_ARGS=( - --attention-dropout 0.0 - --hidden-dropout 0.0 - --accumulate-allreduce-grads-in-fp32 - --attention-softmax-in-fp32 - --attention-backend flash - --deterministic-mode -) - -ray start --head --node-ip-address 127.0.0.1 --num-gpus 2 --disable-usage-stats - -ray job submit --address="http://127.0.0.1:8265" \ - --runtime-env-json='{ - "env_vars": { - "PYTHONPATH": "/root/Megatron-LM", - "CUDA_DEVICE_MAX_CONNECTIONS": "1", - "NCCL_ALGO": "Ring", - "NCCL_IB_DISABLE": "1", - "NCCL_P2P_DISABLE": "1", - "NCCL_SHM_DISABLE": "1", - "NCCL_NET_GDR_LEVEL": "0", - "NCCL_DEBUG": "INFO", - "NVTE_ALLOW_NONDETERMINISTIC_ALGO": "0", - "CUBLAS_WORKSPACE_CONFIG": ":4096:8" - } - }' \ - -- python3 train.py \ - --actor-num-nodes 1 \ - --actor-num-gpus-per-node 1 \ - --num-gpus-per-node 2 \ - --rollout-num-gpus 1 \ - --calculate-per-token-loss \ - ${MODEL_ARGS[@]} \ - ${CKPT_ARGS[@]} \ - ${ROLLOUT_ARGS[@]} \ - ${OPTIMIZER_ARGS[@]} \ - ${GRPO_ARGS[@]} \ - ${WANDB_ARGS[@]} \ - ${PERF_ARGS[@]} \ - ${EVAL_ARGS[@]} \ - ${VLLM_ARGS[@]} \ - ${MISC_ARGS[@]} diff --git a/scripts/low_precision/run-kimi-k2-Thinking-int4.sh b/scripts/low_precision/run-kimi-k2-Thinking-int4.sh index 16bc65eaee..c41ea3df82 100644 --- a/scripts/low_precision/run-kimi-k2-Thinking-int4.sh +++ b/scripts/low_precision/run-kimi-k2-Thinking-int4.sh @@ -134,7 +134,7 @@ SGLANG_ARGS=( #--sglang-deepep-mode auto # make every dp rank has 128 concurrency - --rollout-server-concurrency 1024 + --sglang-server-concurrency 1024 --use-slime-router ) diff --git a/scripts/low_precision/run-qwen3-235B-A22B-int4.sh b/scripts/low_precision/run-qwen3-235B-A22B-int4.sh index b5ddc7587c..597838f697 100644 --- a/scripts/low_precision/run-qwen3-235B-A22B-int4.sh +++ b/scripts/low_precision/run-qwen3-235B-A22B-int4.sh @@ -119,6 +119,7 @@ SGLANG_ARGS=( # --sglang-dp-size 4 --sglang-ep-size 8 --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 256) + --use-slime-router ) diff --git a/scripts/low_precision/run-qwen3-30B-A3B-int4.sh b/scripts/low_precision/run-qwen3-30B-A3B-int4.sh index b591047e10..01b4242866 100644 --- a/scripts/low_precision/run-qwen3-30B-A3B-int4.sh +++ b/scripts/low_precision/run-qwen3-30B-A3B-int4.sh @@ -114,6 +114,7 @@ SGLANG_ARGS=( --rollout-num-gpus-per-engine 1 --sglang-mem-fraction-static 0.7 --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 256) + --use-slime-router ) MISC_ARGS=( diff --git a/scripts/low_precision/run-qwen3-30b-a3b-fp8.sh b/scripts/low_precision/run-qwen3-30b-a3b-fp8.sh index 766e0dcc62..fbda2572d2 100644 --- a/scripts/low_precision/run-qwen3-30b-a3b-fp8.sh +++ b/scripts/low_precision/run-qwen3-30b-a3b-fp8.sh @@ -127,6 +127,7 @@ SGLANG_ARGS=( --sglang-mem-fraction-static 0.6 --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 256) --sglang-expert-parallel-size 8 + --use-slime-router # --use-rollout-routing-replay ) diff --git a/scripts/models/deepseek-v3.sh b/scripts/models/deepseek-v3.sh index 8c50d2c940..7efe0e99df 100644 --- a/scripts/models/deepseek-v3.sh +++ b/scripts/models/deepseek-v3.sh @@ -43,7 +43,7 @@ MODEL_ARGS=( # moe --num-experts 256 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --moe-ffn-hidden-size 2048 --moe-router-topk 8 --moe-shared-expert-intermediate-size 2048 diff --git a/scripts/models/kimi-k2-thinking.sh b/scripts/models/kimi-k2-thinking.sh index b7fceda591..51fe4fe37a 100644 --- a/scripts/models/kimi-k2-thinking.sh +++ b/scripts/models/kimi-k2-thinking.sh @@ -43,7 +43,7 @@ MODEL_ARGS=( # moe --num-experts 384 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --moe-ffn-hidden-size 2048 --moe-router-topk 8 --moe-shared-expert-intermediate-size 2048 diff --git a/scripts/models/kimi-k2.sh b/scripts/models/kimi-k2.sh index eafb7acadd..d9fb1564e3 100644 --- a/scripts/models/kimi-k2.sh +++ b/scripts/models/kimi-k2.sh @@ -43,7 +43,7 @@ MODEL_ARGS=( # moe --num-experts 384 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --moe-ffn-hidden-size 2048 --moe-router-topk 8 --moe-shared-expert-intermediate-size 2048 diff --git a/scripts/models/moonlight.sh b/scripts/models/moonlight.sh index bcce99892a..e1e4596f64 100644 --- a/scripts/models/moonlight.sh +++ b/scripts/models/moonlight.sh @@ -48,7 +48,7 @@ MODEL_ARGS=( # moe --num-experts 64 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --moe-ffn-hidden-size $MOE_FFN_HIDDEN --moe-router-topk 6 --moe-shared-expert-intermediate-size $MOE_SHARED_EXPERT_INTERMEDIATE_SIZE diff --git a/scripts/models/qwen3-235B-A22B.sh b/scripts/models/qwen3-235B-A22B.sh index 1f66355265..32a98679f7 100644 --- a/scripts/models/qwen3-235B-A22B.sh +++ b/scripts/models/qwen3-235B-A22B.sh @@ -39,7 +39,7 @@ MODEL_ARGS=( --moe-router-score-function softmax --moe-token-dispatcher-type alltoall --moe-router-topk 8 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --num-experts 128 --moe-grouped-gemm --moe-token-drop-policy probs diff --git a/scripts/models/qwen3-30B-A3B.sh b/scripts/models/qwen3-30B-A3B.sh index dfab8682ab..624623d8fe 100644 --- a/scripts/models/qwen3-30B-A3B.sh +++ b/scripts/models/qwen3-30B-A3B.sh @@ -39,7 +39,7 @@ MODEL_ARGS=( --moe-router-score-function softmax --moe-token-dispatcher-type alltoall --moe-router-topk 8 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --num-experts 128 --moe-grouped-gemm --moe-token-drop-policy probs diff --git a/scripts/models/qwen3-next-80B-A3B.sh b/scripts/models/qwen3-next-80B-A3B.sh index 74e4e02ed8..52650f2cf8 100644 --- a/scripts/models/qwen3-next-80B-A3B.sh +++ b/scripts/models/qwen3-next-80B-A3B.sh @@ -44,7 +44,7 @@ MODEL_ARGS=( --moe-router-score-function softmax --moe-token-dispatcher-type alltoall --moe-router-topk 10 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --num-experts 512 --moe-grouped-gemm --moe-token-drop-policy probs diff --git a/scripts/models/qwen3.5-0.8B.sh b/scripts/models/qwen3.5-0.8B.sh deleted file mode 100644 index c235c4c1f6..0000000000 --- a/scripts/models/qwen3.5-0.8B.sh +++ /dev/null @@ -1,28 +0,0 @@ -MODEL_ARGS=( - --spec "slime_plugins.models.qwen3_5" "get_qwen3_5_spec" - - --disable-bias-linear - --qk-layernorm - --group-query-attention - --num-attention-heads 8 - --num-query-groups 2 - --kv-channels 256 - --num-layers 24 - --hidden-size 1024 - --ffn-hidden-size 3584 - --use-gated-attention - - --normalization RMSNorm - --apply-layernorm-1p - --position-embedding-type rope - --norm-epsilon 1e-6 - --rotary-percent 0.25 - --swiglu - --vocab-size 248320 - - --rotary-base 10000000 - - # qwen3.5 specific - --attention-output-gate -) - diff --git a/scripts/models/qwen3.5-35B-A3B.sh b/scripts/models/qwen3.5-35B-A3B.sh index c3cb7219bb..e96fab0b11 100644 --- a/scripts/models/qwen3.5-35B-A3B.sh +++ b/scripts/models/qwen3.5-35B-A3B.sh @@ -44,7 +44,7 @@ MODEL_ARGS=( --moe-router-score-function softmax --moe-token-dispatcher-type alltoall --moe-router-topk 8 - --moe-layer-freq "$MOE_LAYER_FREQ" + --moe-layer-freq $MOE_LAYER_FREQ --num-experts 256 --moe-grouped-gemm --moe-token-drop-policy probs diff --git a/scripts/models/qwen3.5-4B.sh b/scripts/models/qwen3.5-4B.sh deleted file mode 100644 index 18bea47c9c..0000000000 --- a/scripts/models/qwen3.5-4B.sh +++ /dev/null @@ -1,27 +0,0 @@ -MODEL_ARGS=( - --spec "slime_plugins.models.qwen3_5" "get_qwen3_5_spec" - - --disable-bias-linear - --qk-layernorm - --group-query-attention - --num-attention-heads 16 - --num-query-groups 4 - --kv-channels 256 - --num-layers 32 - --hidden-size 2560 - --ffn-hidden-size 9216 - --use-gated-attention - - --normalization RMSNorm - --apply-layernorm-1p - --position-embedding-type rope - --norm-epsilon 1e-6 - --rotary-percent 0.25 - --swiglu - --vocab-size 248320 - - --rotary-base 10000000 - - # qwen3.5 specific - --attention-output-gate -) diff --git a/scripts/run-deepseek-r1.sh b/scripts/run-deepseek-r1.sh index 8eb6775412..c307d110ec 100644 --- a/scripts/run-deepseek-r1.sh +++ b/scripts/run-deepseek-r1.sh @@ -121,18 +121,12 @@ SGLANG_ARGS=( --sglang-moe-dense-tp-size 1 --sglang-enable-dp-lm-head - # enable deepep for sglang - --sglang-moe-a2a-backend deepep - --sglang-deepep-mode auto + # enable deepep for sglang + --sglang-moe-a2a-backend deepep + --sglang-deepep-mode auto # make every dp rank has 128 concurrency - --rollout-server-concurrency 1024 - # mtp - --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 - --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 - + --sglang-server-concurrency 1024 ) MISC_ARGS=( diff --git a/scripts/run-glm4.7-355B-A32B.sh b/scripts/run-glm4.5-355B-A32B.sh similarity index 60% rename from scripts/run-glm4.7-355B-A32B.sh rename to scripts/run-glm4.5-355B-A32B.sh index aea94f4b6d..04b603fc24 100644 --- a/scripts/run-glm4.7-355B-A32B.sh +++ b/scripts/run-glm4.5-355B-A32B.sh @@ -15,8 +15,6 @@ set -ex # will prevent ray from buffering stdout/stderr export PYTHONBUFFERED=16 -unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY - NVLINK_COUNT=$(nvidia-smi topo -m 2>/dev/null | grep -o 'NV[0-9][0-9]*' | wc -l) if [ "$NVLINK_COUNT" -gt 0 ]; then HAS_NVLINK=1 @@ -29,8 +27,8 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "${SCRIPT_DIR}/models/glm4.5-355B-A32B.sh" CKPT_ARGS=( - --hf-checkpoint $BASE_DIR/GLM-4.7-355B-A32B - --ref-load $BASE_DIR/GLM-4.7-355B-A32B_torch_dist/ + --hf-checkpoint $BASE_DIR/GLM-4.5-355B-A32B + --ref-load $BASE_DIR/GLM-4.5-355B-A32B_torch_dist/ ) ROLLOUT_ARGS=( @@ -107,7 +105,7 @@ OPTIMIZER_ARGS=( WANDB_ARGS=( # --use-wandb # --wandb-project slime-dev - # --wandb-group glm4.7-355B + # --wandb-group qwen3-235B-sft ) SGLANG_ARGS=( @@ -121,9 +119,9 @@ SGLANG_ARGS=( # mtp --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 + --sglang-speculative-num-steps 2 --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 + --sglang-speculative-num-draft-tokens 3 ) @@ -141,54 +139,56 @@ MISC_ARGS=( --moe-enable-deepep ) -ACTOR_NUM_NODES=${ACTOR_NUM_NODES:-8} -ACTOR_NUM_GPUS_PER_NODE=${ACTOR_NUM_GPUS_PER_NODE:-8} -SOCKET_IFNAME=${SOCKET_IFNAME:-eth0} - -MASTER_ADDR=${MASTER_ADDR:-} -if [ -z "${MASTER_ADDR}" ]; then - echo "MASTER_ADDR is not set. Please set it to the master node address." - exit 1 -fi - -# launch the master node of ray +# launch the master node of ray in container +export MASTER_ADDR=${MLP_WORKER_0_HOST} export no_proxy="127.0.0.1,${MASTER_ADDR}" -ray start --head --node-ip-address "${MASTER_ADDR}" --num-gpus "${ACTOR_NUM_GPUS_PER_NODE}" --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 - -HOSTFILE=${HOSTFILE:-} -if [ -n "${HOSTFILE}" ]; then - for WORKER_IP in $(awk '{print $1}' "${HOSTFILE}"); do - if [[ "${WORKER_IP}" == "${MASTER_ADDR}" ]]; then - continue - fi - echo "Starting Ray worker on ${WORKER_IP}" - ssh root@"${WORKER_IP}" \ - "pkill -9 sglang ; ray stop --force ; pkill -9 python ; ray start --address=${MASTER_ADDR}:6379 --num-gpus ${ACTOR_NUM_GPUS_PER_NODE} --node-ip-address ${WORKER_IP} --disable-usage-stats" & - done - wait -fi - -RUNTIME_ENV_JSON=$(cat </dev/null | grep -o 'NV[0-9][0-9]*' | wc -l) +if [ "$NVLINK_COUNT" -gt 0 ]; then + HAS_NVLINK=1 +else + HAS_NVLINK=0 +fi +echo "HAS_NVLINK: $HAS_NVLINK (detected $NVLINK_COUNT NVLink references)" + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" +source "${SCRIPT_DIR}/models/glm4.7-30B-A3B.sh" + +CKPT_ARGS=( + --hf-checkpoint /root/GLM-4.7-Flash + --ref-load /root/GLM-4.7-Flash_torch_dist + --load /root/GLM-4.7-Flash_slime/ + --save /root/GLM-4.7-Flash_slime/ + --save-interval 20 +) + +ROLLOUT_ARGS=( + --prompt-data /root/dapo-math-17k/dapo-math-17k.jsonl + --input-key prompt + --label-key label + --apply-chat-template + --rollout-shuffle + --rm-type deepscaler + --num-rollout 3000 + --rollout-batch-size 32 + --n-samples-per-prompt 8 + --rollout-max-response-len 8192 + --rollout-temperature 1 + + --global-batch-size 256 + --balance-data +) + +EVAL_ARGS=( + --eval-interval 20 + --eval-prompt-data aime /root/aime-2024/aime-2024.jsonl + --n-samples-per-eval-prompt 16 + --eval-max-response-len 16384 + --eval-top-p 1 +) + +PERF_ARGS=( + --tensor-model-parallel-size 1 + --pipeline-model-parallel-size 1 + --context-parallel-size 1 + --expert-model-parallel-size 8 + --expert-tensor-parallel-size 1 + + --recompute-granularity full + --recompute-method uniform + --recompute-num-layers 1 + + --use-dynamic-batch-size + --max-tokens-per-gpu 8192 +) + +GRPO_ARGS=( + --advantage-estimator grpo + --use-kl-loss + --kl-loss-coef 0.00 + --kl-loss-type low_var_kl + --entropy-coef 0.00 + --eps-clip 0.2 + --eps-clip-high 0.28 +) + +OPTIMIZER_ARGS=( + --optimizer adam + --lr 1e-6 + --lr-decay-style constant + --weight-decay 0.1 + --adam-beta1 0.9 + --adam-beta2 0.98 + + --optimizer-cpu-offload + --overlap-cpu-optimizer-d2h-h2d + --use-precision-aware-optimizer +) + +WANDB_ARGS=( + #--use-wandb + # --wandb-project slime-dev + # --wandb-group glm4.7-flash +) + +SGLANG_ARGS=( + --rollout-num-gpus-per-engine 8 + --sglang-mem-fraction-static 0.7 + --sglang-enable-dp-attention + --sglang-dp-size 8 + --sglang-enable-dp-lm-head + --sglang-moe-dense-tp-size 1 + + # MTP speculative decoding (EAGLE) — speeds up inference + # Uncomment the following lines to enable: + # --sglang-speculative-algorithm EAGLE + # --sglang-speculative-num-steps 2 + # --sglang-speculative-eagle-topk 1 + # --sglang-speculative-num-draft-tokens 3 + + --sglang-cuda-graph-max-bs 16 + --sglang-max-running-requests 64 +) + +MISC_ARGS=( + # default dropout in megatron is 0.1 + --attention-dropout 0.0 + --hidden-dropout 0.0 + # should be good for model performance + --accumulate-allreduce-grads-in-fp32 + --attention-softmax-in-fp32 + # need to comment this when using model with MLA + --attention-backend flash + + --moe-token-dispatcher-type alltoall +) + +# MTP training — uncomment to enable MTP layer training +# Requires --mtp-num-layers in MODEL_ARGS (add to glm4.7-30B-A3B.sh or override below) +# MODEL_ARGS+=(--mtp-num-layers 1) +SPEC_ARGS=( + # --enable-mtp-training + # --mtp-loss-scaling-factor 0.2 +) + +# launch the master node of ray in container +export MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} +ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus 8 --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 + +# Build the runtime environment JSON with proper variable substitution +RUNTIME_ENV_JSON="{ + \"env_vars\": { + \"PYTHONPATH\": \"/root/Megatron-LM/\", + \"CUDA_DEVICE_MAX_CONNECTIONS\": \"1\", + \"NCCL_NVLS_ENABLE\": \"${HAS_NVLINK}\" + } +}" + +ray job submit --address="http://127.0.0.1:8265" \ + --runtime-env-json="${RUNTIME_ENV_JSON}" \ + -- python3 train.py \ + --actor-num-nodes 1 \ + --actor-num-gpus-per-node 8 \ + --colocate \ + ${MODEL_ARGS[@]} \ + ${CKPT_ARGS[@]} \ + ${ROLLOUT_ARGS[@]} \ + ${OPTIMIZER_ARGS[@]} \ + ${GRPO_ARGS[@]} \ + ${WANDB_ARGS[@]} \ + ${PERF_ARGS[@]} \ + ${EVAL_ARGS[@]} \ + ${SGLANG_ARGS[@]} \ + ${MISC_ARGS[@]} \ + ${SPEC_ARGS[@]} diff --git a/scripts/run-glm4.7-30B-A3B.sh b/scripts/run-glm4.7-30B-A3B.sh index 1b52b25460..11f4f20648 100644 --- a/scripts/run-glm4.7-30B-A3B.sh +++ b/scripts/run-glm4.7-30B-A3B.sh @@ -15,8 +15,6 @@ set -ex # will prevent ray from buffering stdout/stderr export PYTHONBUFFERED=16 -unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY - NVLINK_COUNT=$(nvidia-smi topo -m 2>/dev/null | grep -o 'NV[0-9][0-9]*' | wc -l) if [ "$NVLINK_COUNT" -gt 0 ]; then HAS_NVLINK=1 @@ -44,6 +42,7 @@ ROLLOUT_ARGS=( --num-rollout 3000 --rollout-batch-size 128 + #--over-sampling-batch-size 256 --n-samples-per-prompt 8 --rollout-max-response-len 32768 --rollout-temperature 1.0 @@ -56,13 +55,13 @@ EVAL_ARGS=( --eval-interval 20 --eval-prompt-data aime24 $BASE_DIR/rl_data/aime-2024.jsonl --n-samples-per-eval-prompt 2 - --eval-max-response-len 32768 - --eval-temperature 1.0 + --eval-max-response-len 16384 + --eval-temperature 0.6 --eval-top-p 0.95 ) PERF_ARGS=( - --tensor-model-parallel-size 2 + --tensor-model-parallel-size 4 --sequence-parallel --pipeline-model-parallel-size 2 --context-parallel-size 2 @@ -78,12 +77,6 @@ PERF_ARGS=( --max-tokens-per-gpu 32768 ) -MTP_ARGS=( - --mtp-num-layers 1 - --enable-mtp-training - --mtp-loss-scaling-factor 0.2 -) - GRPO_ARGS=( --advantage-estimator grpo --use-kl-loss @@ -122,9 +115,9 @@ SGLANG_ARGS=( # mtp --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 + --sglang-speculative-num-steps 2 --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 + --sglang-speculative-num-draft-tokens 3 --sglang-cuda-graph-max-bs 64 @@ -146,24 +139,56 @@ MISC_ARGS=( ) # launch the master node of ray in container -export MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} -ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus 8 --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 - -# Build the runtime environment JSON with proper variable substitution -RUNTIME_ENV_JSON="{ - \"env_vars\": { - \"PYTHONPATH\": \"/root/Megatron-LM/\", - \"CUDA_DEVICE_MAX_CONNECTIONS\": \"1\", - \"NCCL_NVLS_ENABLE\": \"${HAS_NVLINK}\" - } -}" +export MASTER_ADDR=${MLP_WORKER_0_HOST} +export no_proxy="127.0.0.1,${MASTER_ADDR}" +ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus 8 --disable-usage-stats + +for WORKER_IP in $(awk '{print $1}' /root/mpi_rack_hostfile); do + if [[ "$WORKER_IP" == "$MLP_WORKER_0_HOST" ]]; then + continue + fi + echo "Starting Ray worker on ${WORKER_IP}" + ssh root@"${WORKER_IP}" \ + "pkill -9 sglang ; ray stop --force ; pkill -9 python ; ray start --address=${MASTER_ADDR}:6379 --num-gpus 8 --node-ip-address ${WORKER_IP} --disable-usage-stats" & +done +wait ray job submit --address="http://127.0.0.1:8265" \ - --runtime-env-json="${RUNTIME_ENV_JSON}" \ + --runtime-env-json='{ + "env_vars": { + "no_proxy": "localhost,127.0.0.1,0.0.0.0,${MASTER_ADDR}", + "GLOO_SOCKET_IFNAME": "${MLP_SOCKET_IFNAME}", + "TP_SOCKET_IFNAME": "${MLP_SOCKET_IFNAME}", + "MASTER_ADDR": "${MLP_WORKER_0_HOST}", + "PYTHONPATH": "/root/Megatron-LM/", + "NCCL_CUMEM_ENABLE": "0", + "CUDA_DEVICE_MAX_CONNECTIONS": "1", + "NVTE_BWD_LAYERNORM_SM_MARGIN": "20", + "NCCL_IB_TC": "160", + "NCCL_PXN_DISABLE": "0", + "NCCL_IB_GID_INDEX": "3", + "NCCL_NET_GDR_LEVEL": "4", + "NCCL_IB_RETRY_CNT": "7", + "NCCL_IB_TIMEOUT": "32", + "NCCL_IB_QPS_PER_CONNECTION": "8", + "NCCL_P2P_LEVEL": "NVL", + "TORCH_NCCL_AVOID_RECORD_STREAMS": "1", + "NCCL_NVLS_ENABLE": "0", + "NCCL_MIN_CTAS": "4", + "OMPI_MCA_pml": "ob1", + "OMPI_MCA_btl": "^openib", + "OMPI_MCA_routed": "direct", + "OMPI_MCA_routed_radix": "1024", + "OMPI_MCA_plm_rsh_no_tree_spawn": "1", + "OMPI_MCA_oob_tcp_if_include": "${MLP_SOCKET_IFNAME}", + "OMPI_MCA_btl_tcp_if_include": "${MLP_SOCKET_IFNAME}" + } + }' \ -- python3 train.py \ - --actor-num-nodes 1 \ + --actor-num-nodes 2 \ --actor-num-gpus-per-node 8 \ --colocate \ + --save-debug-rollout-data "data.pt" \ ${MODEL_ARGS[@]} \ ${CKPT_ARGS[@]} \ ${ROLLOUT_ARGS[@]} \ @@ -173,5 +198,4 @@ ray job submit --address="http://127.0.0.1:8265" \ ${PERF_ARGS[@]} \ ${EVAL_ARGS[@]} \ ${SGLANG_ARGS[@]} \ - ${MISC_ARGS[@]} \ - ${MTP_ARGS[@]} + ${MISC_ARGS[@]} diff --git a/scripts/run-kimi-k2-Instruct.sh b/scripts/run-kimi-k2-Instruct.sh index 0c9fc2c3d4..3a591b923a 100644 --- a/scripts/run-kimi-k2-Instruct.sh +++ b/scripts/run-kimi-k2-Instruct.sh @@ -132,7 +132,7 @@ SGLANG_ARGS=( # --sglang-deepep-mode auto # make every dp rank has 128 concurrency - --rollout-server-concurrency 1024 + --sglang-server-concurrency 1024 ) diff --git a/scripts/run-kimi-k2-Thinking.sh b/scripts/run-kimi-k2-Thinking.sh index 533019d697..25cc3c475f 100644 --- a/scripts/run-kimi-k2-Thinking.sh +++ b/scripts/run-kimi-k2-Thinking.sh @@ -134,7 +134,7 @@ SGLANG_ARGS=( # --sglang-deepep-mode auto # make every dp rank has 128 concurrency - --rollout-server-concurrency 1024 + --sglang-server-concurrency 1024 ) diff --git a/scripts/run-qwen2.5-0.5B-gb10-smoke.sh b/scripts/run-qwen2.5-0.5B-gb10-smoke.sh deleted file mode 100755 index 294c6836fc..0000000000 --- a/scripts/run-qwen2.5-0.5B-gb10-smoke.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/bash -# Minimal GRPO smoke test for slime on NVIDIA DGX Spark (GB10, single GPU). -# Goal: exercise the full rollout → reward → policy-update loop for one tiny -# step and exit cleanly. Used only to validate the GB10 port; not a training -# recipe. -# -# Prerequisites: -# - /root/Qwen2.5-0.5B-Instruct (HF checkpoint) -# - /root/Qwen2.5-0.5B-Instruct_torch_dist (from tools/convert_hf_to_torch_dist.py) -# - /root/dapo-math-17k/dapo-math-17k.jsonl - -set -ex - -# clean any leftover ray/sglang -pkill -9 sglang 2>/dev/null || true -ray stop --force 2>/dev/null || true -pkill -9 ray python 2>/dev/null || true -sleep 2 - -export PYTHONBUFFERED=1 - -SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" -source "${SCRIPT_DIR}/models/qwen2.5-0.5B.sh" - -CKPT_ARGS=( - --hf-checkpoint /root/Qwen2.5-0.5B-Instruct/ - --ref-load /root/Qwen2.5-0.5B-Instruct_torch_dist/ - --save /tmp/slime_smoke_save/ - --save-interval 9999 -) - -ROLLOUT_ARGS=( - --prompt-data /root/dapo-math-17k/dapo-math-17k.jsonl - --input-key prompt - --label-key label - --apply-chat-template - --rollout-shuffle - --rm-type deepscaler - - --num-rollout 1 - --rollout-batch-size 2 - --n-samples-per-prompt 2 - --num-steps-per-rollout 1 - --global-batch-size 4 - - --rollout-max-response-len 256 - --rollout-temperature 1 -) - -PERF_ARGS=( - --tensor-model-parallel-size 1 - --pipeline-model-parallel-size 1 - --context-parallel-size 1 - --expert-model-parallel-size 1 - --expert-tensor-parallel-size 1 - - --use-dynamic-batch-size - --max-tokens-per-gpu 2048 -) - -GRPO_ARGS=( - --advantage-estimator grpo - --use-kl-loss - --kl-loss-coef 0.00 - --kl-loss-type low_var_kl - --entropy-coef 0.00 - --eps-clip 0.2 - --eps-clip-high 0.28 -) - -OPTIMIZER_ARGS=( - --optimizer adam - --lr 1e-6 - --lr-decay-style constant - --weight-decay 0.1 - --adam-beta1 0.9 - --adam-beta2 0.98 -) - -SGLANG_ARGS=( - --rollout-num-gpus-per-engine 1 - --sglang-mem-fraction-static 0.4 -) - -MISC_ARGS=( - --attention-dropout 0.0 - --hidden-dropout 0.0 - --accumulate-allreduce-grads-in-fp32 - --attention-softmax-in-fp32 - --attention-backend flash -) - -ray start --head --node-ip-address 127.0.0.1 --num-gpus 1 --disable-usage-stats - -ray job submit --address="http://127.0.0.1:8265" \ - --runtime-env-json='{ - "env_vars": { - "PYTHONPATH": "/root/src/Megatron-LM", - "CUDA_DEVICE_MAX_CONNECTIONS": "1" - } - }' \ - -- python3 train.py \ - --actor-num-nodes 1 \ - --actor-num-gpus-per-node 1 \ - --colocate \ - "${MODEL_ARGS[@]}" \ - "${CKPT_ARGS[@]}" \ - "${ROLLOUT_ARGS[@]}" \ - "${OPTIMIZER_ARGS[@]}" \ - "${GRPO_ARGS[@]}" \ - "${PERF_ARGS[@]}" \ - "${SGLANG_ARGS[@]}" \ - "${MISC_ARGS[@]}" diff --git a/scripts/run-qwen2.5-0.5B-reproducibility.sh b/scripts/run-qwen2.5-0.5B-reproducibility.sh index d1d2d3bf1c..695a282d74 100644 --- a/scripts/run-qwen2.5-0.5B-reproducibility.sh +++ b/scripts/run-qwen2.5-0.5B-reproducibility.sh @@ -126,6 +126,7 @@ ray job submit --address="http://127.0.0.1:8265" \ --actor-num-gpus-per-node 8 \ --colocate \ --calculate-per-token-loss \ + --use-slime-router \ ${MODEL_ARGS[@]} \ ${CKPT_ARGS[@]} \ ${ROLLOUT_ARGS[@]} \ diff --git a/scripts/run-qwen3-235B-A22B.sh b/scripts/run-qwen3-235B-A22B.sh index 28ef17a221..c9958c629a 100644 --- a/scripts/run-qwen3-235B-A22B.sh +++ b/scripts/run-qwen3-235B-A22B.sh @@ -161,7 +161,7 @@ RUNTIME_ENV_JSON="{ \"env_vars\": { \"PYTHONPATH\": \"/root/Megatron-LM/\", \"CUDA_DEVICE_MAX_CONNECTIONS\": \"1\", - \"NCCL_NVLS_ENABLE\": \"${HAS_NVLINK}\", + \"NCCL_NVLS_ENABLE\": \"${HAS_NVLINK}\" \"no_proxy\": \"${no_proxy}\", \"MASTER_ADDR\": \"${MASTER_ADDR}\" } diff --git a/scripts/run-qwen3-4B-fsdp.sh b/scripts/run-qwen3-4B-fsdp.sh new file mode 100644 index 0000000000..71e48e21a7 --- /dev/null +++ b/scripts/run-qwen3-4B-fsdp.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +# for rerun the task +pkill -9 sglang +sleep 3 +ray stop --force +pkill -9 ray +pkill -9 python +sleep 3 +pkill -9 ray +pkill -9 python + + + + +set -ex + +# will prevent ray from buffering stdout/stderr +export PYTHONBUFFERED=16 +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 +NVLINK_COUNT=$(nvidia-smi | grep -o "NVLink" | wc -l) +if [ "$NVLINK_COUNT" -gt 0 ]; then + HAS_NVLINK=1 +else + HAS_NVLINK=0 +fi +echo "HAS_NVLINK: $HAS_NVLINK (detected $NVLINK_COUNT NVLink references)" + + + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +RUN_ID=${RUN_ID:-"run_$(date +%Y%m%d_%H%M%S)"} +LOAD_SAVE_PATH="/root/shared_data/${RUN_ID}/checkpoints" + +CKPT_ARGS=( + --hf-checkpoint /root/Qwen3-4B + --load /root/Qwen3-4B + --ref-load /root/Qwen3-4B +) + +ROLLOUT_ARGS=( + --prompt-data /root/dapo-math-17k/dapo-math-17k.jsonl + --input-key prompt + --label-key label + --apply-chat-template + --rollout-shuffle + --balance-data + --rm-type deepscaler + --num-rollout 100 + --rollout-batch-size 8 + --n-samples-per-prompt 8 + --rollout-max-response-len 4096 + --rollout-temperature 1 + --global-batch-size 64 +) + +GRPO_ARGS=( + --use-kl-loss + --advantage-estimator grpo + --kl-loss-coef 0.00 + --kl-loss-type low_var_kl + --kl-coef 0.00 + --entropy-coef 0.00 + --eps-clip 0.2 + --eps-clip-high 0.28 +) + +OPTIMIZER_ARGS=( + --optimizer adam + --lr 1e-6 + --lr-decay-style constant + --weight-decay 0.1 + --adam-beta1 0.9 + --adam-beta2 0.98 +) + +if [ -z "${WANDB_API_KEY}" ]; then + WANDB_ARGS=() +else + WANDB_ARGS=( + --use-wandb + --wandb-project slime-dev-mcore-fsdp + --wandb-group qwen3-4B-fsdp-1130-ref + --wandb-key "${WANDB_API_KEY}" + ) +fi + +SGLANG_ARGS=( + --rollout-num-gpus-per-engine 1 + --sglang-mem-fraction-static 0.75 + --sglang-decode-log-interval 1000 + --sglang-chunked-prefill-size 4096 + --sglang-attention-backend fa3 +) + +TRAIN_BACKEND_ARGS=( + --train-backend fsdp + --update-weight-buffer-size 536870912 + --gradient-checkpointing + --attn-implementation flash_attention_3 + --train-env-vars '{"PYTORCH_CUDA_ALLOC_CONF":"expandable_segments:True"}' +) + +PERF_ARGS=( + --use-dynamic-batch-size + --max-tokens-per-gpu 9216 +) + +MISC_ARGS=( + --actor-num-nodes 1 + --actor-num-gpus-per-node 8 + --colocate + --use-fault-tolerance + --dump-details /root/shared_data/qwen3-4B-fsdp-1116-noref/dump_details + # --fsdp-cpu-offload +) + +# launch the master node of ray in container - 8 GPUs for training +export MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} +ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus 8 --disable-usage-stats + + +RUNTIME_ENV_JSON="{ + \"env_vars\": { + \"PYTHONPATH\": \"/root/Megatron-LM/:${SCRIPT_DIR}\", + \"CUDA_DEVICE_MAX_CONNECTIONS\": \"1\" + } +}" + + +ray job submit --address="http://127.0.0.1:8265" \ + --runtime-env-json="${RUNTIME_ENV_JSON}" \ + -- python3 train.py \ + "${CKPT_ARGS[@]}" \ + "${ROLLOUT_ARGS[@]}" \ + "${OPTIMIZER_ARGS[@]}" \ + "${GRPO_ARGS[@]}" \ + "${WANDB_ARGS[@]}" \ + "${SGLANG_ARGS[@]}" \ + "${TRAIN_BACKEND_ARGS[@]}" \ + "${PERF_ARGS[@]}" \ + "${MISC_ARGS[@]}" + + + diff --git a/scripts/run-qwen3-4B.sh b/scripts/run-qwen3-4B.sh index 17023da848..ebfe216033 100644 --- a/scripts/run-qwen3-4B.sh +++ b/scripts/run-qwen3-4B.sh @@ -23,17 +23,6 @@ else fi echo "HAS_NVLINK: $HAS_NVLINK (detected $NVLINK_COUNT NVLink references)" -if command -v nvidia-smi >/dev/null 2>&1; then - DETECTED_GPUS=$(nvidia-smi -L 2>/dev/null | wc -l | tr -d ' ') -else - DETECTED_GPUS=0 -fi -NUM_GPUS=${NUM_GPUS:-${DETECTED_GPUS}} -if [ -z "$NUM_GPUS" ] || [ "$NUM_GPUS" -le 0 ]; then - NUM_GPUS=8 -fi -echo "NUM_GPUS: $NUM_GPUS" - SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "${SCRIPT_DIR}/models/qwen3-4B.sh" @@ -132,7 +121,7 @@ MISC_ARGS=( # launch the master node of ray in container export MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} -ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus ${NUM_GPUS} --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 +ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus 8 --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 # Build the runtime environment JSON with proper variable substitution RUNTIME_ENV_JSON="{ @@ -147,7 +136,7 @@ ray job submit --address="http://127.0.0.1:8265" \ --runtime-env-json="${RUNTIME_ENV_JSON}" \ -- python3 train.py \ --actor-num-nodes 1 \ - --actor-num-gpus-per-node ${NUM_GPUS} \ + --actor-num-gpus-per-node 8 \ --colocate \ ${MODEL_ARGS[@]} \ ${CKPT_ARGS[@]} \ @@ -158,4 +147,4 @@ ray job submit --address="http://127.0.0.1:8265" \ ${PERF_ARGS[@]} \ ${EVAL_ARGS[@]} \ ${SGLANG_ARGS[@]} \ - ${MISC_ARGS[@]} + ${MISC_ARGS[@]} \ No newline at end of file diff --git a/scripts/run-qwen3-next-80B-A3B.sh b/scripts/run-qwen3-next-80B-A3B.sh index 1b445c534d..8f09158203 100644 --- a/scripts/run-qwen3-next-80B-A3B.sh +++ b/scripts/run-qwen3-next-80B-A3B.sh @@ -12,12 +12,12 @@ pkill -9 python set -ex -if [ -z "${BASE_FOLDER:-}" ]; then +# if base folder not set raise error +if [ -z "${BASE_FOLDER}" ]; then echo "BASE_FOLDER is not set. Please set it to the base directory of your checkpoints." exit 1 fi -MASTER_ADDR=${MASTER_ADDR:-} if [ -z "${MASTER_ADDR}" ]; then echo "MASTER_ADDR is not set. Please set it to the master node address." exit 1 @@ -26,14 +26,6 @@ fi # will prevent ray from buffering stdout/stderr export PYTHONBUFFERED=16 -# unset proxy to avoid distributed startup issues -unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY - -ACTOR_NUM_NODES=${ACTOR_NUM_NODES:-4} -ACTOR_NUM_GPUS_PER_NODE=${ACTOR_NUM_GPUS_PER_NODE:-8} -CP_SIZE=${CP_SIZE:-4} -SOCKET_IFNAME=${SOCKET_IFNAME:-eth0} - NVLINK_COUNT=$(nvidia-smi topo -m 2>/dev/null | grep -o 'NV[0-9][0-9]*' | wc -l) if [ "$NVLINK_COUNT" -gt 0 ]; then HAS_NVLINK=1 @@ -46,34 +38,35 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "${SCRIPT_DIR}/models/qwen3-next-80B-A3B.sh" CKPT_ARGS=( - --hf-checkpoint "${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking" - --ref-load "${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_torch_dist" - --load "${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_slime/" - --save "${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_slime/" + --hf-checkpoint ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking + --ref-load ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_torch_dist + --load ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_slime/ + --save ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_slime/ --save-interval 20 ) ROLLOUT_ARGS=( - --prompt-data "${BASE_FOLDER}/dapo-math-17k/dapo-math-17k.jsonl" + --prompt-data ${BASE_FOLDER}/dapo-math-17k/dapo-math-17k.jsonl --input-key prompt --label-key label --apply-chat-template --rollout-shuffle --rm-type deepscaler --num-rollout 3000 - --rollout-batch-size 8 + --rollout-batch-size 32 --n-samples-per-prompt 8 - --rollout-max-response-len 32768 + --rollout-max-response-len 8192 --rollout-temperature 1 - --global-batch-size 64 + + --global-batch-size 256 --balance-data ) EVAL_ARGS=( --eval-interval 20 - --eval-prompt-data aime "${BASE_FOLDER}/aime-2024/aime-2024.jsonl" - --n-samples-per-eval-prompt 8 - --eval-max-response-len 32768 + --eval-prompt-data aime ${BASE_FOLDER}/aime-2024/aime-2024.jsonl + --n-samples-per-eval-prompt 16 + --eval-max-response-len 16384 --eval-top-p 1 ) @@ -81,8 +74,7 @@ PERF_ARGS=( --tensor-model-parallel-size 2 --sequence-parallel --pipeline-model-parallel-size 4 - --decoder-last-pipeline-num-layers 9 - --context-parallel-size "${CP_SIZE}" + --context-parallel-size 2 --expert-model-parallel-size 8 --expert-tensor-parallel-size 1 @@ -90,12 +82,14 @@ PERF_ARGS=( --recompute-method uniform --recompute-num-layers 1 + # --micro-batch-size 1 --use-dynamic-batch-size --max-tokens-per-gpu 8192 ) GRPO_ARGS=( --advantage-estimator gspo + #--use-kl-loss --kl-loss-coef 0.00 --kl-loss-type low_var_kl --kl-coef 0.00 @@ -117,9 +111,9 @@ OPTIMIZER_ARGS=( ) WANDB_ARGS=( - # --use-wandb + #--use-wandb # --wandb-project slime-dev - # --wandb-group qwen3-next-80B-A3B-32k + # --wandb-group qwen3-next-80B-A3B-test # --wandb-key ${WANDB_KEY} ) @@ -127,71 +121,76 @@ SGLANG_ARGS=( --rollout-num-gpus-per-engine 8 --sglang-mem-fraction-static 0.8 --sglang-ep-size 8 + --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 128) # mtp --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 + --sglang-speculative-num-steps 2 --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 + --sglang-speculative-num-draft-tokens 3 - --sglang-max-running-requests 256 + --sglang-max-running-requests 512 ) MISC_ARGS=( + # default dropout in megatron is 0.1 --attention-dropout 0.0 --hidden-dropout 0.0 + # should be good for model performance --accumulate-allreduce-grads-in-fp32 --attention-softmax-in-fp32 + # need to comment this when using model with MLA --attention-backend flash + --moe-token-dispatcher-type flex --moe-enable-deepep ) -export no_proxy="127.0.0.1,${MASTER_ADDR}" -ray start --head --node-ip-address "${MASTER_ADDR}" --num-gpus "${ACTOR_NUM_GPUS_PER_NODE}" --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 - -HOSTFILE=${HOSTFILE:-} -if [ -n "${HOSTFILE}" ]; then - for WORKER_IP in $(awk '{print $1}' "${HOSTFILE}"); do - if [[ "${WORKER_IP}" == "${MASTER_ADDR}" ]]; then - continue - fi - echo "Starting Ray worker on ${WORKER_IP}" - ssh root@"${WORKER_IP}" \ - "pkill -9 sglang ; ray stop --force ; pkill -9 python ; ray start --address=${MASTER_ADDR}:6379 --num-gpus ${ACTOR_NUM_GPUS_PER_NODE} --node-ip-address ${WORKER_IP} --disable-usage-stats" & - done - wait -fi +SPEC_ARGS={ + # --mtp-num-layers 1 + # --enable-mtp-training + # --mtp-loss-scaling-factor 0.2 +} -RUNTIME_ENV_JSON=$(cat </dev/null | grep -o 'NV[0-9][0-9]*' | wc -l) if [ "$NVLINK_COUNT" -gt 0 ]; then HAS_NVLINK=1 @@ -46,43 +30,43 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "${SCRIPT_DIR}/models/qwen3.5-27B.sh" CKPT_ARGS=( - --hf-checkpoint "${BASE_FOLDER}/Qwen3.5-27B" - --ref-load "${BASE_FOLDER}/Qwen3.5-27B_torch_dist/" - --load "${BASE_FOLDER}/Qwen3.5-27B_slime/" - --save "${BASE_FOLDER}/Qwen3.5-27B_slime/" + --hf-checkpoint /root/Qwen3.5-27B + --ref-load /root/Qwen3.5-27B_torch_dist/ + --load /root/Qwen3.5-27B_slime + --save /root/Qwen3.5-27B_slime --save-interval 20 ) ROLLOUT_ARGS=( - --prompt-data "${BASE_FOLDER}/dapo-math-17k/dapo-math-17k.jsonl" + --prompt-data /root/dapo-math-17k/dapo-math-17k.jsonl --input-key prompt --label-key label --apply-chat-template --rollout-shuffle --rm-type deepscaler --num-rollout 3000 - --rollout-batch-size 8 + --rollout-batch-size 32 --n-samples-per-prompt 8 - --rollout-max-response-len 32768 - --rollout-temperature 1.0 - --global-batch-size 64 + --rollout-max-response-len 8192 + --rollout-temperature 1 + + --global-batch-size 256 --balance-data ) EVAL_ARGS=( --eval-interval 20 - --eval-prompt-data aime "${BASE_FOLDER}/aime-2024/aime-2024.jsonl" - --n-samples-per-eval-prompt 8 - --eval-max-response-len 32768 + --eval-prompt-data aime /root/aime-2024/aime-2024.jsonl + --n-samples-per-eval-prompt 16 + --eval-max-response-len 16384 --eval-top-p 1 ) PERF_ARGS=( --tensor-model-parallel-size 4 --sequence-parallel - --pipeline-model-parallel-size 2 - --decoder-last-pipeline-num-layers 30 - --context-parallel-size "${CP_SIZE}" + --pipeline-model-parallel-size 1 + --context-parallel-size 1 --expert-model-parallel-size 1 --expert-tensor-parallel-size 1 @@ -90,18 +74,19 @@ PERF_ARGS=( --recompute-method uniform --recompute-num-layers 1 + # --micro-batch-size 1 --use-dynamic-batch-size - --calculate-per-token-loss - --max-tokens-per-gpu 8192 + --max-tokens-per-gpu 20480 ) GRPO_ARGS=( --advantage-estimator grpo + --use-kl-loss --kl-loss-coef 0.00 --kl-loss-type low_var_kl - --kl-coef 0.00 --entropy-coef 0.00 --eps-clip 0.2 + --eps-clip-high 0.28 ) OPTIMIZER_ARGS=( @@ -111,79 +96,64 @@ OPTIMIZER_ARGS=( --weight-decay 0.1 --adam-beta1 0.9 --adam-beta2 0.98 + --optimizer-cpu-offload --overlap-cpu-optimizer-d2h-h2d --use-precision-aware-optimizer ) WANDB_ARGS=( - # --use-wandb + #--use-wandb # --wandb-project slime-dev - # --wandb-group qwen3.5-27B-32k + # --wandb-group qwen3.5-27B-test # --wandb-key ${WANDB_KEY} ) SGLANG_ARGS=( - --rollout-num-gpus-per-engine 2 - --sglang-mem-fraction-static 0.75 - --sglang-speculative-algorithm EAGLE - --sglang-speculative-num-steps 3 - --sglang-speculative-eagle-topk 1 - --sglang-speculative-num-draft-tokens 4 + --rollout-num-gpus-per-engine 8 + --sglang-mem-fraction-static 0.7 + --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 256) ) MISC_ARGS=( + # default dropout in megatron is 0.1 --attention-dropout 0.0 --hidden-dropout 0.0 + # should be good for model performance --accumulate-allreduce-grads-in-fp32 --attention-softmax-in-fp32 + # need to comment this when using model with MLA --attention-backend flash ) +# launch the master node of ray in container +export MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} export no_proxy="127.0.0.1,${MASTER_ADDR}" -ray start --head --node-ip-address "${MASTER_ADDR}" --num-gpus "${ACTOR_NUM_GPUS_PER_NODE}" --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 - -HOSTFILE=${HOSTFILE:-} -if [ -n "${HOSTFILE}" ]; then - for WORKER_IP in $(awk '{print $1}' "${HOSTFILE}"); do - if [[ "${WORKER_IP}" == "${MASTER_ADDR}" ]]; then - continue - fi - echo "Starting Ray worker on ${WORKER_IP}" - ssh root@"${WORKER_IP}" \ - "pkill -9 sglang ; ray stop --force ; pkill -9 python ; ray start --address=${MASTER_ADDR}:6379 --num-gpus ${ACTOR_NUM_GPUS_PER_NODE} --node-ip-address ${WORKER_IP} --disable-usage-stats" & - done - wait -fi - -RUNTIME_ENV_JSON=$(cat </dev/null | grep -o 'NV[0-9][0-9]*' | wc -l) if [ "$NVLINK_COUNT" -gt 0 ]; then HAS_NVLINK=1 @@ -39,31 +30,40 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" source "${SCRIPT_DIR}/models/qwen3.5-35B-A3B.sh" CKPT_ARGS=( - --hf-checkpoint ${BASE_FOLDER}/Qwen3.5-35B-A3B - --ref-load ${BASE_FOLDER}/Qwen3.5-35B-A3B_torch_dist - --load ${BASE_FOLDER}/Qwen3.5-35B-A3B_slime/ - --save ${BASE_FOLDER}/Qwen3.5-35B-A3B_slime/ + --hf-checkpoint /root/Qwen3.5-35B-A3B + --ref-load /root/Qwen3.5-35B-A3B_torch_dist + --load /root/Qwen3.5-35B-A3B_slime/ + --save /root/Qwen3.5-35B-A3B_slime/ --save-interval 20 ) -SFT_ARGS=( - --rollout-function-path slime.rollout.sft_rollout.generate_rollout - --prompt-data ${BASE_FOLDER}/openhermes2_5.parquet - --input-key messages +ROLLOUT_ARGS=( + --prompt-data /root/dapo-math-17k/dapo-math-17k.jsonl + --input-key prompt + --label-key label + --apply-chat-template --rollout-shuffle - --num-epoch 3 - --rollout-batch-size 128 - --global-batch-size 128 - - --loss-type sft_loss - --loss-mask-type qwen3_5 - --calculate-per-token-loss - --disable-compute-advantages-and-returns - --debug-train-only + --rm-type deepscaler + --num-rollout 3000 + --rollout-batch-size 32 + --n-samples-per-prompt 8 + --rollout-max-response-len 8192 + --rollout-temperature 1 + + --global-batch-size 256 + --balance-data +) + +EVAL_ARGS=( + --eval-interval 20 + --eval-prompt-data aime /root/aime-2024/aime-2024.jsonl + --n-samples-per-eval-prompt 16 + --eval-max-response-len 16384 + --eval-top-p 1 ) PERF_ARGS=( - --tensor-model-parallel-size 2 + --tensor-model-parallel-size 4 --sequence-parallel --pipeline-model-parallel-size 1 --context-parallel-size 1 @@ -76,29 +76,53 @@ PERF_ARGS=( # --micro-batch-size 1 --use-dynamic-batch-size - --max-tokens-per-gpu 8192 + --max-tokens-per-gpu 20480 +) + +GRPO_ARGS=( + --advantage-estimator grpo + --use-kl-loss + --kl-loss-coef 0.00 + --kl-loss-type low_var_kl + --entropy-coef 0.00 + --eps-clip 0.2 + --eps-clip-high 0.28 ) OPTIMIZER_ARGS=( --optimizer adam - --lr 1e-5 - --lr-decay-style cosine - --min-lr 1e-6 - --lr-warmup-fraction 0.1 + --lr 1e-6 + --lr-decay-style constant --weight-decay 0.1 --adam-beta1 0.9 --adam-beta2 0.98 - - --use-distributed-optimizer + --optimizer-cpu-offload --overlap-cpu-optimizer-d2h-h2d --use-precision-aware-optimizer ) WANDB_ARGS=( - # --use-wandb + #--use-wandb # --wandb-project slime-dev - # --wandb-group qwen3.5-35B-sft + # --wandb-group qwen3.5-35B-A3B-test + # --wandb-key ${WANDB_KEY} +) + +SGLANG_ARGS=( + --rollout-num-gpus-per-engine 8 + --sglang-mem-fraction-static 0.7 + --sglang-ep-size 8 + + --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 256) + + # mtp + --sglang-speculative-algorithm EAGLE + --sglang-speculative-num-steps 2 + --sglang-speculative-eagle-topk 1 + --sglang-speculative-num-draft-tokens 3 + + --sglang-max-running-requests 512 ) MISC_ARGS=( @@ -112,28 +136,12 @@ MISC_ARGS=( --attention-backend flash --moe-token-dispatcher-type flex - --moe-enable-deepep -) - -SPEC_ARGS=( -# --mtp-num-layers 1 -# --enable-mtp-training -# --mtp-loss-scaling-factor 0.1 ) # launch the master node of ray in container +export MASTER_ADDR=${MASTER_ADDR:-"127.0.0.1"} export no_proxy="127.0.0.1,${MASTER_ADDR}" ray start --head --node-ip-address ${MASTER_ADDR} --num-gpus 8 --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265 -for WORKER_IP in $(awk '{print $1}' /root/mpi_rack_hostfile); do - if [[ "$WORKER_IP" == "$MLP_WORKER_0_HOST" ]]; then - continue - fi - echo "Starting Ray worker on ${WORKER_IP}" - ssh root@"${WORKER_IP}" \ - "pkill -9 sglang ; ray stop --force ; pkill -9 python ; ray start --address=${MASTER_ADDR}:6379 --num-gpus 8 --node-ip-address ${WORKER_IP} --disable-usage-stats --dashboard-host=0.0.0.0 --dashboard-port=8265" & -done -wait - # Build the runtime environment JSON with proper variable substitution RUNTIME_ENV_JSON="{ @@ -141,23 +149,23 @@ RUNTIME_ENV_JSON="{ \"PYTHONPATH\": \"/root/Megatron-LM/\", \"CUDA_DEVICE_MAX_CONNECTIONS\": \"1\", \"NCCL_NVLS_ENABLE\": \"${HAS_NVLINK}\", - \"no_proxy\": \"${no_proxy}\", - \"MASTER_ADDR\": \"${MASTER_ADDR}\", - \"PYTORCH_CUDA_ALLOC_CONF\": \"expandable_segments:True\" + \"no_proxy\": \"${no_proxy}\" } }" ray job submit --address="http://127.0.0.1:8265" \ --runtime-env-json="${RUNTIME_ENV_JSON}" \ - -- python3 train_async.py \ + -- python3 train.py \ --actor-num-nodes 1 \ --actor-num-gpus-per-node 8 \ + --colocate \ ${MODEL_ARGS[@]} \ ${CKPT_ARGS[@]} \ - ${SFT_ARGS[@]} \ + ${ROLLOUT_ARGS[@]} \ ${OPTIMIZER_ARGS[@]} \ + ${GRPO_ARGS[@]} \ ${WANDB_ARGS[@]} \ ${PERF_ARGS[@]} \ ${EVAL_ARGS[@]} \ - ${MISC_ARGS[@]} \ - ${SPEC_ARGS[@]} + ${SGLANG_ARGS[@]} \ + ${MISC_ARGS[@]} diff --git a/setup.py b/setup.py index c424a3a33d..91df81c5e4 100644 --- a/setup.py +++ b/setup.py @@ -32,11 +32,15 @@ def get_tag(self): setup( author="slime Team", name="slime", - version="0.2.4", + version="0.2.2", packages=find_packages(include=["slime*", "slime_plugins*"]), include_package_data=True, install_requires=_fetch_requirements("requirements.txt"), - extras_require={}, + extras_require={ + "fsdp": [ + "torch>=2.0", + ] + }, python_requires=">=3.10", classifiers=[ "Programming Language :: Python :: 3.10", diff --git a/setup_for_vllm.md b/setup_for_vllm.md deleted file mode 100644 index ccdc8fd593..0000000000 --- a/setup_for_vllm.md +++ /dev/null @@ -1,21 +0,0 @@ -``` -docker pull slimerl/slime:latest -``` - -``` -docker run -itd --gpus all --ipc=host --shm-size=128g --net=host --privileged=true --restart=always \ ---ulimit memlock=-1 --ulimit stack=67108864 \ ---ulimit nofile=65536:65536 \ ---name DNAME \ --it slimerl/slime:latest /bin/bash \ - -``` -docker exec -it --user root DNAME bash -``` - -``` -pip install vllm=0.16 - -# for compatibility -pip install numpy==1.26.4 -``` diff --git a/slime/backends/fsdp_utils/__init__.py b/slime/backends/fsdp_utils/__init__.py new file mode 100644 index 0000000000..ba17c4725f --- /dev/null +++ b/slime/backends/fsdp_utils/__init__.py @@ -0,0 +1,8 @@ +import logging + +from .actor import FSDPTrainRayActor +from .arguments import fsdp_parse_args + +__all__ = ["fsdp_parse_args", "FSDPTrainRayActor"] + +logging.getLogger().setLevel(logging.WARNING) diff --git a/slime/backends/fsdp_utils/actor.py b/slime/backends/fsdp_utils/actor.py new file mode 100644 index 0000000000..5d9ff32a2f --- /dev/null +++ b/slime/backends/fsdp_utils/actor.py @@ -0,0 +1,993 @@ +import logging +import os +import random +from argparse import Namespace +from itertools import accumulate + +import ray +import torch +import torch.distributed as dist +from tqdm import tqdm +from transformers import AutoConfig + +from slime.ray.train_actor import TrainRayActor +from slime.utils import logging_utils, train_dump_utils, train_metric_utils +from slime.utils.data import get_minimum_num_micro_batch_size, process_rollout_data +from slime.utils.distributed_utils import get_gloo_group +from slime.utils.logging_utils import init_tracking +from slime.utils.memory_utils import clear_memory, print_memory +from slime.utils.metric_utils import compute_rollout_step +from slime.utils.misc import Box +from slime.utils.ppo_utils import compute_approx_kl, compute_gspo_kl, compute_opsm_mask, compute_policy_loss +from slime.utils.processing_utils import load_processor, load_tokenizer +from slime.utils.profile_utils import TrainProfiler +from slime.utils.timer import Timer, inverse_timer, timer, with_defer + +from . import checkpoint +from .data_packing import pack_sequences, unpack_sequences +from .lr_scheduler import get_lr_scheduler +from .update_weight_utils import UpdateWeightFromDistributed, UpdateWeightFromTensor + +logger = logging.getLogger(__name__) + + +class FSDPTrainRayActor(TrainRayActor): + """Simplified TrainRayActor for pure HF+FSDP training. + + Responsibilities: + * Initialize model/tokenizer on rank0 sequentially to avoid race on cache + * Wrap model with FSDP + * Provide minimal train / save / update_weights hooks compatible with existing RayTrainGroup + + Weight update strategy: + * Rank0 gathers state_dict (full) and broadcasts tensor-by-tensor. + * For small models this is fine; for larger models consider sharded state_dict type. + """ + + @with_defer(lambda: Timer().start("train_wait")) + def init(self, args: Namespace, role: str, with_ref: bool = False, with_opd_teacher: bool = False) -> int: # type: ignore[override] + if with_opd_teacher: + raise NotImplementedError( + "On-policy distillation (OPD) with Megatron teacher is not supported in FSDP backend. " + "Please use the Megatron backend for OPD, or use --opd-type=sglang with an external teacher server." + ) + super().init(args, role, with_ref, with_opd_teacher) + + # Setup device mesh for data parallelism + self._setup_device_mesh() + torch.manual_seed(args.seed) + + self.train_parallel_config = { + "dp_size": self.dp_size, + } + + if self.args.debug_rollout_only: + return 0 + + self.fsdp_cpu_offload = getattr(self.args, "fsdp_cpu_offload", False) + # Offload train and fsdp cpu offload cannot be used together, fsdp_cpu_offload is more aggressive + if self.args.offload_train and self.fsdp_cpu_offload: + self.args.offload_train = False + + self._enable_true_on_policy_optimizations(args) + if dist.get_rank() == 0: + init_tracking(args, primary=False) + + if getattr(self.args, "start_rollout_id", None) is None: + self.args.start_rollout_id = 0 + + self.prof = TrainProfiler(args) + + for i in range(dist.get_world_size()): + if i == dist.get_rank(): + self.hf_config = AutoConfig.from_pretrained(self.args.hf_checkpoint, trust_remote_code=True) + self.tokenizer = load_tokenizer(self.args.hf_checkpoint, trust_remote_code=True) + # Vision models have `vision_config` in the config + if hasattr(self.hf_config, "vision_config"): + self.processor = load_processor(self.args.hf_checkpoint, trust_remote_code=True) + dist.barrier(group=get_gloo_group()) + + init_context = self._get_init_weight_context_manager() + + with init_context(): + model = self.get_model_cls().from_pretrained( + self.args.hf_checkpoint, + trust_remote_code=True, + attn_implementation=self.args.attn_implementation, + ) + + model.train() + + full_state = model.state_dict() + + model = apply_fsdp2(model, mesh=self.dp_mesh, cpu_offload=self.fsdp_cpu_offload, args=self.args) + + model = self._fsdp2_load_full_state_dict( + model, full_state, self.dp_mesh, cpu_offload=True if self.fsdp_cpu_offload else None + ) + + self.model = model + + if args.gradient_checkpointing: + self.model.gradient_checkpointing_enable() + + if args.optimizer == "adam": + self.optimizer = torch.optim.AdamW( + self.model.parameters(), + lr=args.lr, + betas=(args.adam_beta1, args.adam_beta2), + eps=args.adam_eps, + weight_decay=args.weight_decay, + ) + else: + raise ValueError(f"Unsupported optimizer: {args.optimizer}. Supported options: 'adam'") + + # Initialize LR scheduler + self.lr_scheduler = get_lr_scheduler(args, self.optimizer) + + self.global_step = 0 + self.micro_step = 0 + + checkpoint_payload = checkpoint.load(self) + + # Create separate ref model if needed (kept in CPU until needed) + self.ref_model = None + if with_ref: + self.ref_model = self._create_ref_model(args.ref_load) + + self.weight_updater = ( + UpdateWeightFromTensor(self.args, self.model) + if self.args.colocate + else UpdateWeightFromDistributed(self.args, self.model) + ) + + checkpoint.finalize_load(self, checkpoint_payload) + + # Initialize data packing parameters + self.max_tokens_per_gpu = args.max_tokens_per_gpu # From main arguments + + if self.args.offload_train: + self.sleep() + + self.prof.on_init_end() + + return int(getattr(self.args, "start_rollout_id", 0)) + + def get_model_cls(self): + # Vision models have `vision_config` in the config + if hasattr(self.hf_config, "vision_config"): + from transformers import AutoModelForImageTextToText + + return AutoModelForImageTextToText + else: + from transformers import AutoModelForCausalLM + + return AutoModelForCausalLM + + def _enable_true_on_policy_optimizations(self, args): + if args.true_on_policy_mode: + from sglang.srt.batch_invariant_ops import enable_batch_invariant_mode + + from .models.qwen3_moe import apply_true_on_policy_patch_for_qwen3_moe + + logger.info("FSDPTrainRayActor call enable_batch_invariant_mode for true-on-policy") + enable_batch_invariant_mode( + # In Qwen3, rope `inv_freq_expanded.float() @ position_ids_expanded.float()` uses bmm + # and disabling it will make it aligned + enable_bmm=False, + ) + + apply_true_on_policy_patch_for_qwen3_moe() + else: + from .models.qwen3_moe_hf import apply_fsdp_moe_patch + + apply_fsdp_moe_patch() + + def _setup_device_mesh(self) -> None: + """Setup device mesh for data parallelism.""" + from torch.distributed.device_mesh import init_device_mesh + + world_size = dist.get_world_size() + rank = dist.get_rank() + + # Pure data parallelism + self.dp_size = world_size + self.dp_rank = rank + + # Create 1D device mesh for data parallelism + self.mesh = init_device_mesh("cuda", mesh_shape=(self.dp_size,), mesh_dim_names=("dp",)) + self.dp_group = self.mesh.get_group("dp") + self.dp_mesh = self.mesh + + logger.info(f"[Rank {rank}] Device mesh (1D): world_size={world_size}, dp_size={self.dp_size}") + + def _get_init_weight_context_manager(self): + """Get context manager for model initialization. + + Returns a callable that creates a context manager. + Uses meta device (no memory allocation) for non-rank-0 processes, + UNLESS tie_word_embeddings=True (which causes hangs with meta tensors). + + Ref: verl/utils/fsdp_utils.py::get_init_weight_context_manager + NOTE: tie_word_embedding causes meta_tensor init to hang + """ + from accelerate import init_empty_weights + + # Check if model uses tied word embeddings (which doesn't work with meta tensors) + use_meta_tensor = not self.hf_config.tie_word_embeddings + + def cpu_init_weights(): + return torch.device("cpu") + + if use_meta_tensor: + # Rank 0: CPU, others: meta device (memory efficient for large models) + return init_empty_weights if dist.get_rank() != 0 else cpu_init_weights + else: + logger.info(f"[Rank {dist.get_rank()}] tie_word_embeddings=True, loading full model to CPU on all ranks") + return cpu_init_weights + + def _fsdp2_load_full_state_dict(self, model, full_state, device_mesh, cpu_offload): + """Load full state dict into FSDP2 model with efficient broadcast from rank 0. + + This function loads weights from rank 0 and broadcasts to all other ranks, + avoiding the need for each rank to load the full model from disk. + + Args: + model: FSDP2-wrapped model + full_state: State dict (only rank 0 has real weights, others have empty dict) + device_mesh: Device mesh for FSDP + cpu_offload: If not None, enables StateDictOptions cpu_offload + + Ref:verl/utils/fsdp_utils.py::fsdp2_load_full_state_dict + """ + from torch.distributed.checkpoint.state_dict import StateDictOptions, set_model_state_dict + + # Rank 0: move with weights, others: allocate empty tensors on device + if dist.get_rank() == 0: + model = model.to(device=torch.cuda.current_device(), non_blocking=True) + else: + # to_empty creates tensors on device without initializing memory + model = model.to_empty(device=torch.cuda.current_device()) + + is_cpu_offload = cpu_offload is not None + options = StateDictOptions(full_state_dict=True, cpu_offload=is_cpu_offload, broadcast_from_rank0=True) + + set_model_state_dict(model, full_state, options=options) + + # set_model_state_dict will not broadcast buffers, so we need to broadcast them manually. + for _name, buf in model.named_buffers(): + dist.broadcast(buf, src=0) + + if is_cpu_offload: + model.to("cpu", non_blocking=True) + for buf in model.buffers(): + buf.data = buf.data.to(torch.cuda.current_device()) + + return model + + @timer + def sleep(self) -> None: + """Pause CUDA memory for all tracked tensors.""" + if not self.args.offload_train: + return + + print_memory("before offload model") + + self.model.cpu() + move_torch_optimizer(self.optimizer, "cpu") + clear_memory() + dist.barrier(group=get_gloo_group()) + print_memory("after offload model") + + @timer + def wake_up(self) -> None: + """Resume CUDA memory for all tracked tensors.""" + if not self.args.offload_train: + return + + self.model.cuda() + move_torch_optimizer(self.optimizer, "cuda") + dist.barrier(group=get_gloo_group()) + print_memory("after wake_up model") + + def save_model(self, rollout_id: int, force_sync: bool = False) -> None: + """Delegate checkpoint saving to the shared checkpoint utilities.""" + if self.args.debug_rollout_only or self.args.save is None: + return + + assert not self.args.async_save, "FSDPTrainRayActor does not support async_save yet." + checkpoint.save(self, rollout_id) + + def _compute_log_prob( + self, + model_tag: str, + packed_batches: list[dict[str, torch.Tensor]], + store_prefix: str = "", + ) -> dict[str, list[torch.Tensor]]: + """Compute token log-probabilities for a list of packed batches. + + Parameters: + model_tag: Which parameters to use, e.g. "actor" or "ref". + packed_batches: A list of packed batch dictionaries produced by + `pack_sequences`, each containing at least `tokens` and + `position_ids`; may also include multimodal keys like `pixel_values`. + store_prefix: Prefix to use for keys in outputs (e.g., "ref_"). + + Returns: + A lightweight dictionary keyed by f"{store_prefix}log_probs". The + actual per-sequence results are written in-place into each element of + `packed_batches` under the same key and can be read back by callers. + + Note: + Uses separate ref model when model_tag == "ref". The ref model is + loaded from CPU to GPU on-demand and offloaded back after use. + """ + # Select which model to use + if model_tag == "ref" and self.ref_model is not None: + if not self.fsdp_cpu_offload: + self.model.cpu() + torch.cuda.empty_cache() + dist.barrier(group=get_gloo_group()) + + active_model = self.ref_model + active_model.eval() + else: + active_model = self.model + + try: + rollout_data = {f"{store_prefix}log_probs": []} + with timer(f"{store_prefix}log_probs"), torch.no_grad(): + for batch in self.prof.iterate_train_log_probs( + tqdm(packed_batches, desc=f"{store_prefix}log_probs", disable=dist.get_rank() != 0) + ): + model_args = self._get_model_inputs_args(batch) + logits = active_model(**model_args).logits.squeeze(0).float() + log_probs_result, entropy_result = get_logprob_and_entropy( + logits=logits, + target_tokens=batch["tokens"], + allow_compile=not self.args.true_on_policy_mode, + temperature=self.args.rollout_temperature, + ) + batch[f"{store_prefix}log_probs"] = log_probs_result + if store_prefix == "": + batch["entropy"] = entropy_result + return rollout_data + + finally: + # Restore actor model if it was offloaded + if model_tag == "ref" and self.ref_model is not None: + torch.cuda.empty_cache() + dist.barrier(group=get_gloo_group()) + + if not self.fsdp_cpu_offload: + self.model.cuda() + dist.barrier(group=get_gloo_group()) + + def _packed_data( + self, rollout_data: dict[str, list[torch.Tensor]] + ) -> tuple[list[dict[str, torch.Tensor]], list[int]]: + """Pack variable-length sequences for efficient processing. + + Parameters: + rollout_data: Dictionary of lists containing sequence-level tensors + such as `tokens`, `loss_masks`, `rewards`, `response_lengths`, + `advantages`, `returns`, and optional `rollout_log_probs`. + + Returns: + A pair `(packed_batches, grad_accum)` where `packed_batches` is a list + of packed batch dictionaries and `grad_accum` lists the micro-batch + indices at which to perform optimizer steps. + """ + # Pack sequences efficiently + tokens = rollout_data["tokens"] + + packed_batches = [] + mbs_size_list = [] + local_batch_size = self.args.global_batch_size // self.dp_size + assert ( + self.args.global_batch_size % self.dp_size == 0 + ), f"global_batch_size {self.args.global_batch_size} is not divisible by dp_world_size {self.dp_size}" + # Use global_batch_size for splitting when max_tokens_per_gpu is enabled + if self.args.use_dynamic_batch_size: + max_tokens = self.args.max_tokens_per_gpu + + for i in range(0, len(tokens), local_batch_size): + mbs_size_list.append( + get_minimum_num_micro_batch_size( + [len(t) for t in rollout_data["tokens"][i : i + local_batch_size]], + max_tokens, + ) + ) + num_microbatches = torch.tensor(mbs_size_list, dtype=torch.int, device=torch.cuda.current_device()) + dist.all_reduce(num_microbatches, op=dist.ReduceOp.MAX, group=self.dp_group) + num_microbatches = num_microbatches.tolist() + else: + num_microbatches = [self.args.global_batch_size // (self.args.micro_batch_size * self.dp_size)] * ( + len(tokens) // local_batch_size + ) + + start = 0 + for mbs_size in num_microbatches: + end = start + local_batch_size + packed_batches.extend( + pack_sequences( + rollout_data["tokens"][start:end], + rollout_data["loss_masks"][start:end], + rollout_data["rewards"][start:end], + rollout_data["raw_reward"][start:end], + rollout_data["response_lengths"][start:end], + rollout_data["advantages"][start:end], + rollout_data["returns"][start:end], + rollout_log_probs=( + rollout_data["rollout_log_probs"][start:end] if "rollout_log_probs" in rollout_data else None + ), + multimodal_train_inputs=( + rollout_data["multimodal_train_inputs"][start:end] + if "multimodal_train_inputs" in rollout_data + else None + ), + num_packs=mbs_size, + ) + ) + start = end + grad_accum = list(accumulate(num_microbatches)) + + return packed_batches, grad_accum + + def train(self, rollout_id: int, rollout_data_ref: Box) -> None: + """Run one training update over a rollout batch. + + Parameters: + rollout_id: Monotonic id for logging. + rollout_data_ref: A Box handle wrapping a Ray object reference to a + dictionary with rollout tensors and metadata (e.g., `tokens`, + `loss_masks`, `rewards`, `response_lengths`, optional + `rollout_log_probs`, etc.). It will be fetched and partitioned + by `process_rollout_data` based on data-parallel rank/size. + """ + if self.args.offload_train: + self.wake_up() + + with inverse_timer("train_wait"), timer("train"): + rollout_data = process_rollout_data(self.args, rollout_data_ref, self.dp_rank, self.dp_size) + if self.args.debug_rollout_only: + return + self._train_core(rollout_id=rollout_id, rollout_data=rollout_data) + + train_metric_utils.log_perf_data_raw( + rollout_id=rollout_id, + args=self.args, + is_primary_rank=dist.get_rank() == 0, + compute_total_fwd_flops=None, + ) + + def _log_rollout_data(self, rollout_id: int, rollout_data, packed_batches): + log_dict = {} + if "raw_reward" in rollout_data and dist.get_rank() == 0: + raw_reward_list = rollout_data["raw_reward"] + if raw_reward_list: + log_dict["rollout/raw_reward"] = sum(raw_reward_list) / len(raw_reward_list) + + for metric_key in ["log_probs", "rollout_log_probs", "ref_log_probs", "advantages", "returns"]: + if metric_key not in packed_batches[0]: + continue + val = torch.tensor([0.0], device=torch.cuda.current_device()) + for _mbs_id, batches in enumerate(packed_batches): + unpacked_batches = unpack_sequences(batches) + for unpacked_batch in unpacked_batches: + if isinstance(unpacked_batch[metric_key], torch.Tensor): + loss_masks_tensor = unpacked_batch["loss_masks"].to(device=torch.cuda.current_device()) + metric_tensor = unpacked_batch[metric_key].to(device=torch.cuda.current_device()) + val += (metric_tensor * loss_masks_tensor).sum() / loss_masks_tensor.sum().clamp_min(1) + else: + val += unpacked_batch[metric_key] + dist.all_reduce(val, op=dist.ReduceOp.SUM, group=self.dp_group) + log_dict[f"rollout/{metric_key}"] = ( + val / (self.args.n_samples_per_prompt * self.args.rollout_batch_size) + ).item() + if dist.get_rank() == 0: + logger.info(f"rollout {rollout_id}: {log_dict}") + log_dict["rollout/step"] = compute_rollout_step(self.args, rollout_id) + logging_utils.log(self.args, log_dict, step_key="rollout/step") + + if self.args.ci_test and self.args.true_on_policy_mode: + assert log_dict["rollout/log_probs"] == log_dict["rollout/rollout_log_probs"], ( + f"CI check failed: true_on_policy_mode is enabled, but log_probs " + f"({log_dict['rollout/log_probs']}) != rollout_log_probs " + f"({log_dict['rollout/rollout_log_probs']})" + ) + + def _train_core(self, rollout_id: int, rollout_data) -> None: + if self.args.advantage_estimator in ["grpo", "gspo"]: + rollout_data["advantages"] = rollout_data["returns"] = [ + torch.tensor([rollout_data["rewards"][i]] * rollout_data["response_lengths"][i]) + for i in range(len(rollout_data["rewards"])) + ] + else: + raise NotImplementedError(f"Unsupported advantage_estimator {self.args.advantage_estimator}") + + packed_batches, grad_accum = self._packed_data(rollout_data) + + assert ( + len(grad_accum) > 0 + ), f"Invalid grad_accum {grad_accum} for micro_batch_size {self.args.micro_batch_size} and global_batch_size {self.args.global_batch_size}" + + if self.ref_model is not None: + self._compute_log_prob("ref", packed_batches, store_prefix="ref_") + + self._compute_log_prob("actor", packed_batches) + self._log_rollout_data(rollout_id, rollout_data, packed_batches) + + with timer("actor_train"): + reported_accum: dict[str, list[torch.Tensor]] = {} + self.optimizer.zero_grad(set_to_none=True) + for mbs_id, packed_batch in self.prof.iterate_train_actor( + enumerate(tqdm(packed_batches, desc="actor_train", disable=dist.get_rank() != 0)) + ): + self._train_step( + packed_batch=packed_batch, + reported_accum=reported_accum, + mbs_id=mbs_id, + grad_accum=grad_accum, + ) + + self.prof.step(rollout_id=rollout_id) + + train_dump_utils.save_debug_train_data(self.args, rollout_id=rollout_id, rollout_data=rollout_data) + + # Update ref model if needed (copy actor weights to ref) + if ( + self.args.ref_update_interval is not None + and (rollout_id + 1) % self.args.ref_update_interval == 0 + and self.ref_model is not None + ): + if dist.get_rank() == 0: + logger.info(f"Updating ref model at rollout_id {rollout_id}") + # Copy actor model state to ref model + actor_state = self.model.state_dict() + self.ref_model.load_state_dict(actor_state) + self.ref_model.cpu() + + def _train_step(self, packed_batch, reported_accum, mbs_id, grad_accum): + # Prepare model inputs + model_args = self._get_model_inputs_args(packed_batch) + logits = self.model(**model_args).logits.squeeze(0).float() + + # Compute log probs and entropy + log_probs, entropy_result = get_logprob_and_entropy( + logits=logits, + target_tokens=packed_batch["tokens"], + allow_compile=not self.args.true_on_policy_mode, + temperature=self.args.rollout_temperature, + ) + packed_batch["cur_log_probs"] = log_probs + packed_batch["entropy"] = entropy_result + + unpacked_batches = unpack_sequences(packed_batch) + + old_log_prob_key = "rollout_log_probs" if self.args.use_rollout_logprobs else "log_probs" + missing_old_log_probs = [ + idx + for idx, batch in enumerate(unpacked_batches) + if old_log_prob_key not in batch or not isinstance(batch[old_log_prob_key], torch.Tensor) + ] + if missing_old_log_probs: + raise KeyError( + f"{old_log_prob_key} must be provided as torch.Tensor for all microbatches when " + f"use_rollout_logprobs is set to {self.args.use_rollout_logprobs}. Missing in batches: {missing_old_log_probs}" + ) + old_log_probs = torch.cat([batch[old_log_prob_key] for batch in unpacked_batches], dim=0) + log_probs = torch.cat([batch["cur_log_probs"] for batch in unpacked_batches], dim=0) + advantages = torch.cat([batch["advantages"] for batch in unpacked_batches], dim=0) + loss_masks = [batch["loss_masks"].to(device=log_probs.device) for batch in unpacked_batches] + response_lengths = [batch["response_lengths"] for batch in unpacked_batches] + + advantages = advantages.to(device=log_probs.device) + old_log_probs = old_log_probs.to(device=log_probs.device) + ppo_kl = old_log_probs - log_probs + + if self.args.use_opsm: + opsm_mask, opsm_clipfrac = compute_opsm_mask( + args=self.args, + full_log_probs=[batch["cur_log_probs"] for batch in unpacked_batches], + full_old_log_probs=[batch[old_log_prob_key] for batch in unpacked_batches], + advantages=[batch["advantages"] for batch in unpacked_batches], + loss_masks=loss_masks, + ) + + if self.args.advantage_estimator == "gspo": + ppo_kl = compute_gspo_kl( + full_log_probs=[batch["cur_log_probs"] for batch in unpacked_batches], + full_old_log_probs=[batch[old_log_prob_key] for batch in unpacked_batches], + local_log_probs=[batch["cur_log_probs"] for batch in unpacked_batches], + loss_masks=loss_masks, + ) + + pg_loss, pg_clipfrac = compute_policy_loss(ppo_kl, advantages, self.args.eps_clip, self.args.eps_clip_high) + + if self.args.use_opsm: + pg_loss = pg_loss * opsm_mask + + def _has_rollout_log_probs(batch) -> bool: + rollout_tensor = batch.get("rollout_log_probs") + return isinstance(rollout_tensor, torch.Tensor) and rollout_tensor.numel() > 0 + + has_rollout_log_probs = all(_has_rollout_log_probs(batch) for batch in unpacked_batches) + rollout_log_probs = ( + torch.cat([batch["rollout_log_probs"] for batch in unpacked_batches], dim=0) + if has_rollout_log_probs + else None + ) + + if self.args.calculate_per_token_loss: + pg_loss = sum_of_token(pg_loss, response_lengths, loss_masks) + pg_clipfrac = sum_of_token(pg_clipfrac, response_lengths, loss_masks) + ppo_kl = sum_of_token(ppo_kl.abs(), response_lengths, loss_masks) + else: + pg_loss = sum_of_sample_mean(pg_loss, response_lengths, loss_masks) + pg_clipfrac = sum_of_sample_mean(pg_clipfrac, response_lengths, loss_masks) + ppo_kl = sum_of_sample_mean(ppo_kl.abs(), response_lengths, loss_masks) + + # Only compare rollout vs. train log probs when they originate from different stages. + train_rollout_logprob_abs_diff = None + if not self.args.use_rollout_logprobs and rollout_log_probs is not None: + train_rollout_logprob_abs_diff = (old_log_probs - rollout_log_probs).abs() + train_rollout_logprob_abs_diff = sum_of_sample_mean( + train_rollout_logprob_abs_diff, response_lengths, loss_masks + ).detach() + + entropy = torch.cat([batch["entropy"] for batch in unpacked_batches], dim=0) + entropy_loss = sum_of_sample_mean(entropy, response_lengths, loss_masks) + + loss = pg_loss - self.args.entropy_coef * entropy_loss + + if self.args.use_kl_loss: + ref_log_probs = torch.cat([batch["ref_log_probs"] for batch in unpacked_batches], dim=0) + importance_ratio = None + if self.args.use_unbiased_kl: + importance_ratio = torch.exp(log_probs - old_log_probs) + kl = compute_approx_kl( + log_probs, + ref_log_probs, + kl_loss_type=self.args.kl_loss_type, + importance_ratio=importance_ratio, + ) + kl_loss = sum_of_sample_mean(kl, response_lengths, loss_masks) + + loss = loss + self.args.kl_loss_coef * kl_loss + + reported = { + "loss": loss.detach(), + "pg_loss": pg_loss.detach(), + "pg_clipfrac": pg_clipfrac.detach(), + "ppo_kl": ppo_kl.detach(), + "entropy_loss": entropy_loss.detach(), + } + + if train_rollout_logprob_abs_diff is not None: + reported["train_rollout_logprob_abs_diff"] = train_rollout_logprob_abs_diff + + if self.args.use_kl_loss: + reported["kl_loss"] = kl_loss.detach() + + if self.args.use_opsm: + reported["opsm_clipfrac"] = opsm_clipfrac + + # Scale loss for gradient accumulation + loss = loss * self.dp_size / self.args.global_batch_size + loss.backward() + + # Accumulate reported metrics (store tensors for later mean) + for k, v in reported.items(): + reported_accum.setdefault(k, []).append(v) + + if (mbs_id + 1) in grad_accum: + # TODO: check if the grad norm is global grad norm. + grad_norm = torch.nn.utils.clip_grad_norm_(self.model.parameters(), self.args.clip_grad) + # the grad norm used to be of DTensor + grad_norm = float(grad_norm) + + self.optimizer.step() + # Update learning rate + self.lr_scheduler.step() + self.optimizer.zero_grad(set_to_none=True) + # Aggregate logs + aggregated = {k: torch.stack(v).sum().item() for k, v in reported_accum.items()} + # TODO: change this, this is slow. + reduced_aggregated = [None] * self.dp_size + dist.all_gather_object(reduced_aggregated, aggregated, group=self.dp_group) + aggregated = {} + for k in reported_accum.keys(): + aggregated[k] = sum([r[k] for r in reduced_aggregated]) / (self.args.global_batch_size) + reported_accum.clear() + if dist.get_rank() == 0: + log_dict = { + f"train/{k}": (val.item() if torch.is_tensor(val) else val) for k, val in aggregated.items() + } + log_dict["train/grad_norm"] = grad_norm + + # Log learning rate per parameter group; use scheduler's last computed LRs + lr_values = self.lr_scheduler.get_last_lr() + for gid, _group in enumerate(self.optimizer.param_groups): + log_dict[f"train/lr-pg_{gid}"] = lr_values[gid] + + kl_info = "" + if self.args.use_kl_loss and "kl_loss" in aggregated: + kl_info = f", kl_loss: {aggregated['kl_loss']:.4f}, kl_penalty: {aggregated['kl_loss'] * self.args.kl_loss_coef:.4f}" + logger.info(kl_info) + logger.info(f"step {self.global_step}: {log_dict}") + + log_dict["train/step"] = self.global_step + logging_utils.log(self.args, log_dict, step_key="train/step") + self.global_step += 1 + + @timer + def update_weights(self) -> None: # type: ignore[override] + """Synchronize actor weights to rollout engines. + + Handles both colocated and distributed update modes. In offload mode, + wakes up parameters as needed to perform the update. + """ + if self.args.debug_train_only or self.args.debug_rollout_only: + return + + rollout_engines, rollout_engine_lock, num_new_engines, engine_gpu_counts, engine_gpu_offsets = ray.get( + self.rollout_manager.get_rollout_engines_and_lock.remote() + ) + if num_new_engines > 0: + self.weight_updater.connect_rollout_engines( + rollout_engines, + rollout_engine_lock, + engine_gpu_counts=engine_gpu_counts, + engine_gpu_offsets=engine_gpu_offsets, + ) + dist.barrier(group=get_gloo_group()) + if dist.get_rank() == 0: + ray.get(self.rollout_manager.clear_num_new_engines.remote()) + + self.weight_updater.update_weights() + + if self.args.ci_test and len(rollout_engines) > 0: + engine = random.choice(rollout_engines) + engine_version = ray.get(engine.get_weight_version.remote()) + if str(engine_version) != str(self.weight_updater.weight_version): + raise RuntimeError( + f"Weight version mismatch! Engine: {engine_version}, Updater: {self.weight_updater.weight_version}" + ) + + clear_memory() + + def _create_ref_model(self, ref_load_path: str | None): + """Create and initialize a separate reference model with FSDP2 CPUOffloadPolicy. + + Parameters: + ref_load_path: Path to a directory containing a HF checkpoint. If + None, a ValueError is raised. + + Returns: + FSDP2-wrapped ref model with CPU offload enabled + + Note: + Creates a separate FSDP2 model instance for the reference model. + ALWAYS uses CPUOffloadPolicy for the reference model to save memory, + regardless of the actor model's CPU offload setting. + """ + if ref_load_path is None: + raise ValueError("ref_load_path must be provided when loading reference model") + + if os.path.isdir(ref_load_path): + logger.info(f"[Rank {dist.get_rank()}] Creating separate ref model from {ref_load_path}") + + init_context = self._get_init_weight_context_manager() + + with init_context(): + ref_model = self.get_model_cls().from_pretrained( + ref_load_path, + trust_remote_code=True, + attn_implementation=self.args.attn_implementation, + ) + + full_state = ref_model.state_dict() + + # Always use CPUOffloadPolicy for reference, let FSDP2 handle the offload. It is faster than model.cpu(). + ref_model = apply_fsdp2(ref_model, mesh=self.dp_mesh, cpu_offload=True, args=self.args) + ref_model = self._fsdp2_load_full_state_dict(ref_model, full_state, self.dp_mesh, cpu_offload=True) + + logger.info(f"[Rank {dist.get_rank()}] Reference model created with FSDP2 CPUOffloadPolicy") + return ref_model + else: + raise NotImplementedError(f"Loading from checkpoint file {ref_load_path} not yet implemented") + + def _get_model_inputs_args(self, packed_sequence: dict) -> dict: + input_ids = packed_sequence["tokens"].unsqueeze(0) + position_ids = packed_sequence["position_ids"].unsqueeze(0) + + model_args = { + "input_ids": input_ids, + "position_ids": position_ids, + "attention_mask": None, + } + if packed_sequence.get("multimodal_train_inputs"): + model_args.update(packed_sequence["multimodal_train_inputs"]) + return model_args + + +def selective_log_softmax_raw(logits: torch.Tensor, input_ids: torch.Tensor) -> torch.Tensor: + """Fused version of the common `log_softmax -> gather` operation. + + The fused version of this operation avoids the (potentially large) memory overhead + of allocating a new tensor to store the full logprobs. + + Parameters: + logits: Tensor of shape [..., V] containing model logits. + input_ids: Tensor of shape [...] of token indices whose log-probabilities are gathered. + + Returns: + Tensor of shape [...] containing the log-probabilities corresponding to `input_ids`. + """ + logprobs = logits.log_softmax(dim=-1) + return torch.gather(logprobs, dim=-1, index=input_ids.unsqueeze(-1)).squeeze(-1) + + +selective_log_softmax_compiled = torch.compile(dynamic=True)(selective_log_softmax_raw) + + +def gather_log_probs_packed( + shifted_logits: torch.Tensor, + input_ids: torch.Tensor, + allow_compile: bool, + cu_seqlens: torch.Tensor | float | None = None, + temperature: torch.Tensor | None = None, +) -> torch.Tensor: + """Gather next-token log probabilities for packed sequences. + + Parameters: + logits: Model logits of shape [B, T, V] or [T, V]. + input_ids: Token ids of shape [B, T] or [T]. + cu_seqlens: Optional cumulative sequence lengths (unused here). Present + for API compatibility with callers. + + Returns: + A tensor of shape [T-1] (or [B, T-1]) with log-probabilities of targets. + """ + # Handle batch dimension - logits should be [batch_size, seq_len, vocab_size] + if shifted_logits.dim() == 3: + # Remove batch dimension for packed sequences + shifted_logits = shifted_logits.squeeze(0) + input_ids = input_ids.squeeze(0) + + if temperature is not None: + shifted_logits = shifted_logits.div(temperature) + + targets = input_ids[1:].to(device=shifted_logits.device) + + # Gather log probs for targets + selective_log_softmax = selective_log_softmax_compiled if allow_compile else selective_log_softmax_raw + return selective_log_softmax(shifted_logits, targets) + + +def get_logprob_and_entropy( + logits: torch.Tensor, + target_tokens: torch.Tensor, + allow_compile: bool, + temperature: float | None = None, +) -> tuple[torch.Tensor, torch.Tensor]: + """Compute log probabilities and entropy. + + Parameters: + logits: Model output logits with shape [seq_len, vocab_size] + target_tokens: Target tokens with shape [seq_len] + allow_compile: Whether to allow compilation + temperature: Temperature parameter (optional) + + Returns: + log_probs: Log probabilities with shape [seq_len - 1] + entropy: Entropy with shape [seq_len - 1] + """ + shifted_logits = logits[:-1, :] + log_probs = gather_log_probs_packed( + shifted_logits, target_tokens, allow_compile=allow_compile, temperature=temperature + ) + log_probs_full = torch.log_softmax(shifted_logits, dim=-1) + probs = torch.softmax(shifted_logits, dim=-1) + entropy = -(probs * log_probs_full).sum(dim=-1) + return log_probs, entropy + + +def sum_of_sample_mean(x: torch.Tensor, response_lengths: list[int], loss_masks: list[torch.Tensor]) -> torch.Tensor: + """Compute sum of per-sample means across variable-length responses. + + Parameters: + x: Flat tensor containing concatenated per-token values across samples. + response_lengths: Lengths of each sample's response segment in `x`. + loss_masks: Per-sample masks aligned with `response_lengths`. + + Returns: + A scalar tensor equal to the sum over samples of the mean value within + each sample's response segment. + """ + return sum( + [ + (x_i * loss_mask_i).sum() / torch.clamp_min(loss_mask_i.sum(), 1) + for x_i, loss_mask_i in zip(x.split(response_lengths, dim=0), loss_masks, strict=False) + ] + ) + + +@torch.no_grad() +def move_torch_optimizer(optimizer, device): + """ref: https://github.com/volcengine/verl/blob/main/verl/utils/fsdp_utils.py""" + if not optimizer.state: + return + + for param_group in optimizer.param_groups: + for param in param_group["params"]: + state = optimizer.state[param] + for key, value in state.items(): + if isinstance(value, torch.Tensor): + state[key] = value.to(device, non_blocking=True) + + torch.cuda.synchronize() + + +def apply_fsdp2(model, mesh=None, cpu_offload=False, args=None): + """Apply FSDP v2 to the model. + + Args: + model: The model to wrap with FSDP + mesh: Optional DeviceMesh for FSDP. If None, uses all ranks. + cpu_offload: If True, offload parameters, gradients, and optimizer states + to CPU. The optimizer step will run on CPU. (Default: False) + args: Arguments containing precision settings (fp16/bf16) + + Ref: https://github.com/volcengine/verl/blob/main/verl/utils/fsdp_utils.py + """ + from torch.distributed.fsdp import CPUOffloadPolicy, MixedPrecisionPolicy, fully_shard + + offload_policy = CPUOffloadPolicy() if cpu_offload else None + + layer_cls_to_wrap = model._no_split_modules + assert len(layer_cls_to_wrap) > 0 and layer_cls_to_wrap[0] is not None + + modules = [ + module + for name, module in model.named_modules() + if module.__class__.__name__ in layer_cls_to_wrap + or (isinstance(module, torch.nn.Embedding) and not model.config.tie_word_embeddings) + ] + + # Determine precision policy based on args + param_dtype = torch.bfloat16 # Default to bf16 as before + reduce_dtype = torch.float32 + + if args.fp16: + param_dtype = torch.float16 + + logger.info(f"FSDP MixedPrecision Policy: param_dtype={param_dtype}, reduce_dtype={reduce_dtype}") + + fsdp_kwargs = { + "mp_policy": MixedPrecisionPolicy( + param_dtype=param_dtype, + reduce_dtype=reduce_dtype, + ), + "offload_policy": offload_policy, + "mesh": mesh, + } + + # Apply FSDP to each module (offload_policy=None is equivalent to not passing it) + for module in modules: + fully_shard(module, **fsdp_kwargs) + + # Apply FSDP to the top-level model + fully_shard(model, **fsdp_kwargs) + + return model + + +def sum_of_token(x: torch.Tensor, response_lengths: list[int], loss_masks: list[torch.Tensor]) -> torch.Tensor: + return sum( + [ + (x_i * loss_mask_i).sum() + for x_i, loss_mask_i in zip(x.split(response_lengths, dim=0), loss_masks, strict=False) + ] + ) diff --git a/slime/backends/fsdp_utils/arguments.py b/slime/backends/fsdp_utils/arguments.py new file mode 100644 index 0000000000..fcb83b9726 --- /dev/null +++ b/slime/backends/fsdp_utils/arguments.py @@ -0,0 +1,101 @@ +import argparse +import dataclasses +from dataclasses import dataclass + +import yaml + + +@dataclass +class FSDPArgs: + # Optim + optimizer: str = "adam" # Optimizer type: "adam" (AdamW) + lr: float = 2e-5 + lr_warmup_init: float = 0.0 + min_lr: float = 0.0 + lr_decay_style: str = "constant" + lr_decay_iters: int | None = None + lr_warmup_iters: int = 0 + lr_warmup_fraction: float | None = None + lr_wsd_decay_iters: int | None = None + lr_wsd_decay_style: str | None = None + use_checkpoint_lr_scheduler: bool = True + override_lr_scheduler: bool = False + weight_decay: float = 0.0 + adam_beta1: float = 0.9 + adam_beta2: float = 0.95 + adam_eps: float = 1e-8 + warmup_ratio: float = 0.03 + + attn_implementation: str = "flash_attention_2" + + # Logging + wandb_project: str = "slime-fsdp" + wandb_run_name: str | None = None + + # Precision + gradient_checkpointing: bool = False + fp16: bool = False + + # FSDP configuration + fsdp_state_dict_cpu_offload: bool = True # If True, offload full state dict to CPU during collection. + fsdp_cpu_offload: bool = ( + False # If True, offload parameters, gradients, and optimizer states to CPU (optimizer runs on CPU) + ) + fsdp_cpu_backend: str | None = ( + "gloo" # CPU backend for FSDP CPU offload (e.g., "gloo"). Set to None to disable hybrid backend. + ) + + deterministic_mode: bool = False # This name must be the same as Megatron's + + # Profile + record_memory_history: bool = False + memory_snapshot_path: str = "snapshot.pickle" + use_pytorch_profiler: bool = False + profile_step_start: int = 10 + profile_step_end: int = 12 + tensorboard_dir: str | None = None + + # YAML bookkeeping + config: str | None = None + + +def _parse_fsdp_cli(extra_args_provider=None, ignore_unknown_args=False): + parser = argparse.ArgumentParser("FSDP SFT Training (slime)") + parser.add_argument("--config", type=str, default=None, help="YAML config path") + for f in dataclasses.fields(FSDPArgs): + if f.name == "config": + continue + + # Handle union types like int | None, str | None, etc. + if hasattr(f.type, "__args__"): # Check if it's a Union type + # For T | None, use T as the type + non_none_types = [t for t in f.type.__args__ if t is not type(None)] + arg_type = non_none_types[0] if non_none_types else str + else: + arg_type = f.type + + if arg_type is bool: + parser.add_argument(f"--{f.name.replace('_', '-')}", action="store_true") + else: + parser.add_argument(f"--{f.name.replace('_', '-')}", type=arg_type, default=f.default) + + if extra_args_provider is not None: + parser = extra_args_provider(parser) + if ignore_unknown_args: + args, _ = parser.parse_known_args() + else: + args = parser.parse_args() + return args + + +def fsdp_parse_args(extra_args_provider=None, ignore_unknown_args=False): + args = _parse_fsdp_cli(extra_args_provider, ignore_unknown_args=ignore_unknown_args) + if args.config: + with open(args.config) as f: + data = yaml.safe_load(f) or {} + for k, v in data.items(): + if not hasattr(args, k): + setattr(args, k, v) + args.rank = 0 # Primary process rank for wandb initialization + args.world_size = args.actor_num_nodes * args.actor_num_gpus_per_node + return args diff --git a/slime/backends/fsdp_utils/checkpoint.py b/slime/backends/fsdp_utils/checkpoint.py new file mode 100644 index 0000000000..6daf7f982c --- /dev/null +++ b/slime/backends/fsdp_utils/checkpoint.py @@ -0,0 +1,250 @@ +from __future__ import annotations + +import json +import logging +import time +from pathlib import Path +from typing import Any + +import torch +import torch.distributed as dist +import torch.distributed.checkpoint as dcp +from torch.distributed.checkpoint.state_dict import get_state_dict, set_state_dict +from torch.distributed.checkpoint.stateful import Stateful + +logger = logging.getLogger(__name__) + + +class ModelState(Stateful): + """Wrapper for model state only.""" + + def __init__(self, model): + self.model = model + + def state_dict(self): + model_state_dict, _ = get_state_dict(self.model, optimizers=[]) + return {"model": model_state_dict} + + def load_state_dict(self, state_dict): + set_state_dict(self.model, optimizers=[], model_state_dict=state_dict["model"], optim_state_dict=None) + + +class OptimizerState(Stateful): + """Wrapper for optimizer state only.""" + + def __init__(self, model, optimizer): + self.model = model + self.optimizer = optimizer + + def state_dict(self): + _, optimizer_state_dict = get_state_dict(self.model, optimizers=self.optimizer) + return {"optim": optimizer_state_dict} + + def load_state_dict(self, state_dict): + set_state_dict( + self.model, optimizers=self.optimizer, model_state_dict=None, optim_state_dict=state_dict["optim"] + ) + + +class LRSchedulerState(Stateful): + """Wrapper for LR scheduler state only.""" + + def __init__(self, lr_scheduler): + self.lr_scheduler = lr_scheduler + + def state_dict(self): + return {"lr_scheduler": self.lr_scheduler.state_dict()} + + def load_state_dict(self, state_dict): + self.lr_scheduler.load_state_dict(state_dict["lr_scheduler"]) + + +def _read_checkpoint_metadata(path: Path) -> dict[str, Any]: + if not path.exists(): + return {} + try: + return json.loads(path.read_text()) + except json.JSONDecodeError: + logger.warning(f"Failed to parse checkpoint metadata at {path}") + return {} + + +def _write_checkpoint_metadata(path: Path, metadata: dict[str, Any]) -> None: + tmp_path = path.with_suffix(path.suffix + ".tmp") + tmp_path.write_text(json.dumps(metadata, indent=2, sort_keys=True)) + tmp_path.replace(path) + + +def load(actor: Any) -> dict[str, Any] | None: + """Load checkpoint from disk. + + Loads model weights and optionally optimizer state from separate directories. + This allows loading weights without optimizer or deleting optimizer before loading. + """ + load_root = getattr(actor.args, "load", None) + if load_root is None: + return None + + root_path = Path(load_root).expanduser() + if not root_path.exists(): + logger.info(f"[FSDP] Checkpoint directory {root_path} not found; skipping load.") + return None + + target_step = getattr(actor.args, "ckpt_step", None) + if target_step is None: + tracker_file = root_path / "latest_checkpointed_iteration.txt" + if not tracker_file.exists(): + logger.info(f"[FSDP] No tracker file at {tracker_file}; skipping load.") + return None + tracker_text = tracker_file.read_text().strip() + target_step = int(tracker_text) + + checkpoint_dir = root_path / f"iter_{target_step:07d}" + model_dir = checkpoint_dir / "model" + optimizer_dir = checkpoint_dir / "optimizer" + lr_scheduler_dir = checkpoint_dir / "lr_scheduler" + + if not model_dir.exists(): + logger.info(f"[FSDP] Model checkpoint {model_dir} not found; skipping load.") + return None + + # Load model weights (always) + model_state = ModelState(actor.model) + state_dict = {"model_state": model_state} + + try: + dcp.load(state_dict=state_dict, checkpoint_id=str(model_dir)) + logger.info(f"[FSDP] Loaded model from {model_dir}") + except Exception as e: + logger.error(f"[FSDP] Failed to load model from {model_dir}: {e}") + return None + + # Load optimizer state (optional) + load_optimizer = not getattr(actor.args, "no_load_optim", False) and hasattr(actor, "optimizer") + if load_optimizer and optimizer_dir.exists(): + optimizer_state = OptimizerState(actor.model, actor.optimizer) + optim_state_dict = {"optim_state": optimizer_state} + try: + dcp.load(state_dict=optim_state_dict, checkpoint_id=str(optimizer_dir)) + logger.info(f"[FSDP] Loaded optimizer from {optimizer_dir}") + except Exception as e: + logger.warning(f"[FSDP] Failed to load optimizer from {optimizer_dir}: {e}") + elif load_optimizer: + logger.info(f"[FSDP] Optimizer checkpoint not found at {optimizer_dir}, skipping optimizer load.") + + # Load LR scheduler state (optional) + load_lr_scheduler = hasattr(actor, "lr_scheduler") and lr_scheduler_dir.exists() + if load_lr_scheduler: + lr_scheduler_state = LRSchedulerState(actor.lr_scheduler) + lr_scheduler_state_dict = {"lr_scheduler_state": lr_scheduler_state} + try: + dcp.load(state_dict=lr_scheduler_state_dict, checkpoint_id=str(lr_scheduler_dir)) + logger.info(f"[FSDP] Loaded LR scheduler from {lr_scheduler_dir}") + except Exception as e: + logger.warning(f"[FSDP] Failed to load LR scheduler from {lr_scheduler_dir}: {e}") + elif hasattr(actor, "lr_scheduler"): + logger.info(f"[FSDP] LR scheduler checkpoint not found at {lr_scheduler_dir}, skipping LR scheduler load.") + + rng_state = None + rng_path = checkpoint_dir / "rng.pt" + if rng_path.exists(): + rng_state = torch.load(rng_path, map_location="cpu") + + metadata = _read_checkpoint_metadata(checkpoint_dir / "meta.json") + + return { + "rng": rng_state, + "metadata": metadata, + "iteration": target_step, + } + + +def finalize_load(actor: Any, checkpoint_payload: dict[str, Any] | None) -> None: + if checkpoint_payload is None: + dist.barrier() + return + + if checkpoint_payload.get("rng") is not None and not getattr(actor.args, "no_load_rng", False): + rng_state = checkpoint_payload["rng"] + if "torch" in rng_state: + torch.set_rng_state(rng_state["torch"]) + if torch.cuda.is_available() and "cuda" in rng_state: + torch.cuda.set_rng_state_all(rng_state["cuda"]) + + metadata = checkpoint_payload.get("metadata") or {} + iteration = checkpoint_payload.get("iteration") + if metadata: + actor.global_step = int(metadata.get("global_step", actor.global_step)) + actor.micro_step = int(metadata.get("micro_step", actor.micro_step)) + next_rollout = metadata.get("next_rollout_id") + if next_rollout is not None: + actor.args.start_rollout_id = next_rollout + elif iteration is not None: + if getattr(actor.args, "start_rollout_id", None) is None: + actor.args.start_rollout_id = iteration + + torch.cuda.synchronize() + dist.barrier() + + +def save(actor: Any, iteration: int) -> None: + """Save checkpoint to disk. + + Saves model weights and optimizer state to separate directories. + This allows loading weights without optimizer or deleting optimizer before loading. + """ + torch.cuda.synchronize() + + base_dir = Path(actor.args.save).expanduser() + step_id = iteration + 1 + checkpoint_dir = base_dir / f"iter_{step_id:07d}" + model_dir = checkpoint_dir / "model" + optimizer_dir = checkpoint_dir / "optimizer" + lr_scheduler_dir = checkpoint_dir / "lr_scheduler" + + if dist.get_rank() == 0: + checkpoint_dir.mkdir(parents=True, exist_ok=True) + model_dir.mkdir(parents=True, exist_ok=True) + optimizer_dir.mkdir(parents=True, exist_ok=True) + lr_scheduler_dir.mkdir(parents=True, exist_ok=True) + dist.barrier() + + # Save model weights + model_state = ModelState(actor.model) + state_dict = {"model_state": model_state} + dcp.save(state_dict, checkpoint_id=str(model_dir)) + + # Save optimizer state (skip if --no-save-optim is set) + save_optimizer_state = not getattr(actor.args, "no_save_optim", False) + if save_optimizer_state and hasattr(actor, "optimizer") and actor.optimizer is not None: + optimizer_state = OptimizerState(actor.model, actor.optimizer) + optim_state_dict = {"optim_state": optimizer_state} + dcp.save(optim_state_dict, checkpoint_id=str(optimizer_dir)) + + # Save LR scheduler state (skip if --no-save-optim is set) + if save_optimizer_state and hasattr(actor, "lr_scheduler") and actor.lr_scheduler is not None: + lr_scheduler_state = LRSchedulerState(actor.lr_scheduler) + lr_scheduler_state_dict = {"lr_scheduler_state": lr_scheduler_state} + dcp.save(lr_scheduler_state_dict, checkpoint_id=str(lr_scheduler_dir)) + + if dist.get_rank() == 0: + rng_state = {"torch": torch.get_rng_state()} + rng_state["cuda"] = torch.cuda.get_rng_state_all() + torch.save(rng_state, checkpoint_dir / "rng.pt") + + metadata = { + "iteration": step_id, + "rollout_id": iteration, + "next_rollout_id": iteration + 1, + "global_step": actor.global_step, + "micro_step": actor.micro_step, + "world_size": dist.get_world_size(), + "timestamp": time.time(), + } + _write_checkpoint_metadata(checkpoint_dir / "meta.json", metadata) + + tracker_file = base_dir / "latest_checkpointed_iteration.txt" + tracker_file.write_text(str(step_id)) + logger.info(f"[FSDP] Saved checkpoint to {checkpoint_dir}") + + dist.barrier() diff --git a/slime/backends/fsdp_utils/data_packing.py b/slime/backends/fsdp_utils/data_packing.py new file mode 100644 index 0000000000..180e5d71b8 --- /dev/null +++ b/slime/backends/fsdp_utils/data_packing.py @@ -0,0 +1,196 @@ +"""Data packing utilities for FSDP backend to reduce padding overhead.""" + +import math + +import torch + +from slime.utils.seqlen_balancing import get_seqlen_balanced_partitions + + +def pack_sequences( + tokens: list[list[int]], + loss_masks: list[list[int]], + rewards: list[float], + raw_rewards: list, + response_lengths: list[int], + advantages: list[float], + returns: list[float], + rollout_log_probs: list[list[float]] | None = None, + multimodal_train_inputs: list[dict] | None = None, + max_tokens_per_gpu: int | None = None, + num_packs: int | None = None, +) -> list[dict]: + """ + Pack sequences into dense batches with cumulative sequence lengths. + + Args: + tokens: List of token sequences + loss_masks: List of loss masks + rewards: List of rewards per sequence + raw_rewards: List of raw rewards per sequence + response_lengths: List of response lengths per sequence + advantages: List of advantages per sequence + returns: List of returns per sequence + rollout_log_probs: List of rollout log probabilities per sequence + multimodal_train_inputs: List of dict of multimodal tensors for training per sequence + max_tokens_per_gpu: Maximum tokens per GPU pack + num_packs: Explicit number of packs to create + + Returns: + List of packed batches with tokens, masks, cu_seqlens, rewards, raw_rewards, response_lengths, advantages, returns + """ + if not tokens: + return [] + + seq_lengths = [len(t) for t in tokens] + + # Determine number of packs and use balanced partitioning + if num_packs: + k_partitions = num_packs + elif max_tokens_per_gpu: + total_tokens = sum(seq_lengths) + k_partitions = max(1, math.ceil(total_tokens / max_tokens_per_gpu)) + else: + k_partitions = 1 + + # Use balanced partitioning for optimal load distribution + partitions = get_seqlen_balanced_partitions( + seq_lengths, k_partitions=k_partitions, equal_size=False # Allow variable sizes for better balance + ) + + # Pack each partition + result = [] + for indices in partitions: + # Build cumulative sequence lengths + cu_seqlens = [0] + flat_tokens = [] + flat_masks = [] + flat_positionids = [] + flat_advantages = [] + flat_returns = [] + flat_rollout_log_probs = [] + + for i in indices: + seq_tokens = tokens[i] + seq_mask = loss_masks[i] + seq_positionids = list(range(len(seq_tokens))) + + flat_tokens.extend(seq_tokens) + flat_positionids.extend(seq_positionids) + flat_masks.extend(seq_mask) + flat_advantages.extend(advantages[i]) + flat_returns.extend(returns[i]) + if rollout_log_probs: + flat_rollout_log_probs.extend(rollout_log_probs[i]) + cu_seqlens.append(cu_seqlens[-1] + len(seq_tokens)) + + packed_batch = { + "tokens": torch.tensor(flat_tokens, dtype=torch.long), + "loss_masks": torch.tensor(flat_masks, dtype=torch.int), + "position_ids": torch.tensor(flat_positionids, dtype=torch.int), + "cu_seqlens": torch.tensor(cu_seqlens, dtype=torch.int32), + "rewards": torch.tensor([rewards[i] for i in indices], dtype=torch.float32), + "raw_reward": [raw_rewards[i] for i in indices], + "response_lengths": [response_lengths[i] for i in indices], + "advantages": torch.tensor(flat_advantages, dtype=torch.float32), + "returns": torch.tensor(flat_returns, dtype=torch.float32), + "rollout_log_probs": torch.tensor( + flat_rollout_log_probs, dtype=torch.float32, device=torch.cuda.current_device() + ), + } + + # Collect and add multimodal training tensors for this partition + if multimodal_train_inputs: + multimodal_data = {} # key -> concatenated tensor + multimodal_num_items = {} # key -> list of item counts per sequence + for i in indices: + if multimodal_train_inputs[i] is None: + continue + for key, mm_tensor in multimodal_train_inputs[i].items(): + if key not in multimodal_data: + multimodal_data[key] = mm_tensor + multimodal_num_items[key] = [mm_tensor.size(0)] + else: + multimodal_data[key] = torch.cat([multimodal_data[key], mm_tensor], dim=0) + multimodal_num_items[key].append(mm_tensor.size(0)) + packed_batch["multimodal_train_inputs"] = multimodal_data + packed_batch["multimodal_num_items"] = multimodal_num_items + + result.append(packed_batch) + + return result + + +def unpack_sequences(packed_batch: dict) -> list[dict]: + """ + Unpack sequences from a packed batch. + + Args: + packed_batch: Packed batch + + Returns: + List of unpacked batches + """ + + cu_seqlens = packed_batch["cu_seqlens"] + num_sequences = len(cu_seqlens) - 1 + response_lengths = packed_batch["response_lengths"] + multimodal_num_items = packed_batch.get("multimodal_num_items", {}) + + instances = [] + + # Calculate pad_length by counting trailing zeros + tokens = packed_batch["tokens"] + nonzero_indices = (tokens != 0).nonzero(as_tuple=True)[0] + if len(nonzero_indices) > 0: + # Last non-zero index, pad_length is everything after it + pad_length = len(tokens) - nonzero_indices[-1].item() - 1 + else: + pad_length = 0 # No padding if no non-zero tokens (or all zeros) + for i in range(num_sequences): + start_idx = cu_seqlens[i].item() + end_idx = cu_seqlens[i + 1].item() + instance = {} + + # Copy any additional attributes that might exist in the packed batch + for key, value in packed_batch.items(): + if key not in instance: + # Skip multimodal_num_items - it's metadata + if key == "multimodal_num_items": + continue + # Handle multimodal_train_inputs dict: split each tensor using multimodal_num_items + elif key == "multimodal_train_inputs" and isinstance(value, dict): + instance[key] = {} + for mm_key, mm_tensor in value.items(): + if mm_key in multimodal_num_items: + num_items_list = multimodal_num_items[mm_key] + start_mm_idx = sum(num_items_list[:i]) + end_mm_idx = start_mm_idx + num_items_list[i] + if num_items_list[i] > 0: + instance[key][mm_key] = mm_tensor[start_mm_idx:end_mm_idx] + # For tensor attributes, we need to slice them appropriately + elif isinstance(value, torch.Tensor): + if key in ["log_probs", "ref_log_probs", "cur_log_probs", "entropy"]: + # These are computed from logits[:-1] so they have length seq_len-1 + instance[key] = value[ + end_idx - 1 - response_lengths[i] - pad_length : end_idx - 1 - pad_length + ] + elif key == "rollout_log_probs": + # rollout_log_probs is packed based on response_lengths, so slice differently + instance[key] = value[sum(response_lengths[:i]) : sum(response_lengths[: i + 1])] + elif key in ["tokens", "position_ids"]: + # For other tensor attributes, try to slice them + if len(value) > start_idx: + instance[key] = value[start_idx:end_idx] + else: + raise ValueError(f"Attribute {key} is not found in the packed batch") + elif key in ["loss_masks", "advantages", "returns"]: + instance[key] = value[sum(response_lengths[:i]) : sum(response_lengths[: i + 1])] + elif isinstance(value, list): + instance[key] = value[i] + else: + raise ValueError(f"Attribute {key} is not found in the packed batch") + + instances.append(instance) + + return instances diff --git a/slime/backends/fsdp_utils/kernels/__init__.py b/slime/backends/fsdp_utils/kernels/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/slime/backends/fsdp_utils/kernels/fused_experts.py b/slime/backends/fsdp_utils/kernels/fused_experts.py new file mode 100644 index 0000000000..d1c02aae8a --- /dev/null +++ b/slime/backends/fsdp_utils/kernels/fused_experts.py @@ -0,0 +1,381 @@ +from __future__ import annotations + +import torch +import triton.language as tl +from sglang.srt.layers.moe.fused_moe_triton.fused_moe import ( + invoke_fused_moe_kernel, + moe_align_block_size, + moe_sum_reduce, + silu_and_mul, +) + +from .fused_moe_triton_backward_kernels import invoke_fused_moe_backward_kernel + + +class GateUpProjFunction(torch.autograd.Function): + @staticmethod + def forward( + ctx, + hidden_states: torch.Tensor, + w1: torch.Tensor, + topk_weights: torch.Tensor, + topk_ids: torch.Tensor, + ): + num_tokens, _ = hidden_states.shape + E, N, _ = w1.shape + # We execute the fused_moe kernel in chunks to circumvent this issue: + # https://github.com/vllm-project/vllm/issues/5938 + CHUNK_SIZE = 64 * 1024 + + # default deterministic config + config = { + "BLOCK_SIZE_M": 64, + "BLOCK_SIZE_N": 64, + "BLOCK_SIZE_K": 32, + "GROUP_SIZE_M": 8, + } + + topk = topk_ids.shape[1] + + intermediate_cache1 = torch.empty( + (num_tokens * topk, N), + device=hidden_states.device, + dtype=hidden_states.dtype, + ) + + for chunk in range((num_tokens // CHUNK_SIZE) + 1): + begin_chunk_idx, end_chunk_idx = ( + chunk * CHUNK_SIZE, + min((chunk + 1) * CHUNK_SIZE, num_tokens), + ) + curr_hidden_states = hidden_states[begin_chunk_idx:end_chunk_idx] + cur_intermediate_cache1 = intermediate_cache1[begin_chunk_idx * topk : end_chunk_idx * topk] + + curr_topk_ids = topk_ids[begin_chunk_idx:end_chunk_idx] + curr_topk_weights = topk_weights[begin_chunk_idx:end_chunk_idx] + + sorted_token_ids, expert_ids, num_tokens_post_padded = moe_align_block_size( + curr_topk_ids, config["BLOCK_SIZE_M"], E + ) + + invoke_fused_moe_kernel( + curr_hidden_states, + w1, + None, + cur_intermediate_cache1, + None, + None, + None, + curr_topk_weights, + curr_topk_ids, + sorted_token_ids, + expert_ids, + num_tokens_post_padded, + False, + topk_ids.shape[1], + config, + compute_type=tl.bfloat16, + use_fp8_w8a8=False, + use_int8_w8a8=False, + use_int8_w8a16=False, + use_int4_w4a16=False, + per_channel_quant=False, + block_shape=None, + c_sorted=False, + filter_expert=True, + ) + + ctx.save_for_backward(hidden_states, w1, topk_weights, topk_ids) + ctx.config = config + ctx.num_tokens = num_tokens + ctx.topk = topk + + return intermediate_cache1 + + @staticmethod + def backward(ctx, grad_output): + """ + Backward pass for GateUpProjFunction using Triton kernels. + + Args: + grad_output: shape (num_tokens * topk, N) + + Returns: + (grad_hidden_states, grad_w1, grad_topk_weights, None) + """ + + hidden_states, w1, topk_weights, topk_ids = ctx.saved_tensors + config = ctx.config + num_tokens = ctx.num_tokens + topk = ctx.topk + + E, N, D_in = w1.shape + CHUNK_SIZE = 64 * 1024 + + # Initialize gradient tensors + grad_hidden_states = torch.zeros_like(hidden_states) + grad_w1 = torch.zeros_like(w1) + # GateUpProj stage doesn't need topk_weights gradient + grad_topk_weights = torch.zeros_like(topk_weights) + + # Process in chunks to match forward pass + for chunk in range((num_tokens // CHUNK_SIZE) + 1): + begin_chunk_idx, end_chunk_idx = ( + chunk * CHUNK_SIZE, + min((chunk + 1) * CHUNK_SIZE, num_tokens), + ) + + curr_num_tokens = end_chunk_idx - begin_chunk_idx + if curr_num_tokens == 0: + continue + + curr_hidden_states = hidden_states[begin_chunk_idx:end_chunk_idx] + curr_topk_ids = topk_ids[begin_chunk_idx:end_chunk_idx] + curr_topk_weights = topk_weights[begin_chunk_idx:end_chunk_idx] + curr_grad_output = grad_output[begin_chunk_idx * topk : end_chunk_idx * topk] + + # Get aligned metadata + sorted_token_ids, expert_ids, num_tokens_post_padded = moe_align_block_size( + curr_topk_ids, config["BLOCK_SIZE_M"], E + ) + + # Prepare gradient buffer for this chunk + curr_grad_hidden_states = torch.zeros_like(curr_hidden_states) + curr_grad_w1 = torch.zeros_like(w1) + + # Call Triton backward kernel with MUL_ROUTED_WEIGHT=False + # Use chunk of hidden_states to match sorted_token_ids indices + invoke_fused_moe_backward_kernel( + grad_output=curr_grad_output, + input=curr_hidden_states, # Use chunk of hidden_states to match sorted_token_ids + weight=w1, + grad_input=curr_grad_hidden_states, + grad_weight=curr_grad_w1, + grad_topk_weights=None, # Not needed for GateUpProj + topk_weights=curr_topk_weights, + topk_ids=curr_topk_ids, + sorted_token_ids=sorted_token_ids, + expert_ids=expert_ids, + num_tokens_post_padded=num_tokens_post_padded, + mul_routed_weight=False, + top_k=topk, + config=config, + compute_type=tl.bfloat16, + ) + + # Accumulate gradients + grad_hidden_states[begin_chunk_idx:end_chunk_idx] += curr_grad_hidden_states + grad_w1 += curr_grad_w1 + + return grad_hidden_states, grad_w1, grad_topk_weights, None + + +class SiluAndMulFunction(torch.autograd.Function): + @staticmethod + def forward(ctx, intermediate_cache1: torch.Tensor): + num_tokens, N = intermediate_cache1.shape + intermediate_cache2 = torch.empty( + (num_tokens, N // 2), + device=intermediate_cache1.device, + dtype=intermediate_cache1.dtype, + ) + silu_and_mul(intermediate_cache1.view(-1, N), intermediate_cache2) + + ctx.save_for_backward(intermediate_cache1) + return intermediate_cache2 + + @staticmethod + def backward(ctx, grad_output): + (intermediate_cache1,) = ctx.saved_tensors + N = intermediate_cache1.shape[-1] + x1, x2 = intermediate_cache1.view(-1, N).chunk(2, dim=-1) + silu_x1 = torch.nn.functional.silu(x1) + + sig = torch.sigmoid(x1) + dsilu_dx1 = sig + x1 * sig * (1 - sig) + grad_x1 = grad_output * x2 * dsilu_dx1 + grad_x2 = grad_output * silu_x1 + grad_input = torch.cat([grad_x1, grad_x2], dim=-1) + + return grad_input.view_as(intermediate_cache1) + + +class DownProjFunction(torch.autograd.Function): + @staticmethod + def forward( + ctx, + intermediate_cache2: torch.Tensor, + w2: torch.Tensor, + topk_weights: torch.Tensor, + topk_ids: torch.Tensor, + ): + num_tokens, _ = intermediate_cache2.shape + topk = topk_ids.shape[1] + num_tokens //= topk + E, _, _ = w2.shape + # We execute the fused_moe kernel in chunks to circumvent this issue: + # https://github.com/vllm-project/vllm/issues/5938 + CHUNK_SIZE = 64 * 1024 + + # default deterministic config + config = { + "BLOCK_SIZE_M": 64, + "BLOCK_SIZE_N": 64, + "BLOCK_SIZE_K": 32, + "GROUP_SIZE_M": 8, + } + + intermediate_cache3 = torch.empty( + (num_tokens, topk, w2.shape[1]), + device=intermediate_cache2.device, + dtype=intermediate_cache2.dtype, + ) + + for chunk in range((num_tokens // CHUNK_SIZE) + 1): + begin_chunk_idx, end_chunk_idx = ( + chunk * CHUNK_SIZE, + min((chunk + 1) * CHUNK_SIZE, num_tokens), + ) + cur_intermediate_cache2 = intermediate_cache2[begin_chunk_idx * topk : end_chunk_idx * topk] + cur_intermediate_cache3 = intermediate_cache3[begin_chunk_idx:end_chunk_idx] + + curr_topk_ids = topk_ids[begin_chunk_idx:end_chunk_idx] + curr_topk_weights = topk_weights[begin_chunk_idx:end_chunk_idx] + + sorted_token_ids, expert_ids, num_tokens_post_padded = moe_align_block_size( + curr_topk_ids, config["BLOCK_SIZE_M"], E + ) + invoke_fused_moe_kernel( + cur_intermediate_cache2, + w2, + None, + cur_intermediate_cache3, + None, + None, + None, + curr_topk_weights, + curr_topk_ids, + sorted_token_ids, + expert_ids, + num_tokens_post_padded, + True, + 1, + config, + compute_type=tl.bfloat16, + use_fp8_w8a8=False, + use_int8_w8a8=False, + use_int8_w8a16=False, + use_int4_w4a16=False, + per_channel_quant=False, + block_shape=None, + a_use_tma=False, + b_use_tma=False, + ) + + ctx.save_for_backward(intermediate_cache2, w2, topk_weights, topk_ids) + ctx.config = config + ctx.num_tokens = num_tokens + ctx.topk = topk + + return intermediate_cache3 + + @staticmethod + def backward(ctx, grad_output): + """ + Backward pass for DownProjFunction using Triton kernels. + + Args: + grad_output: shape (num_tokens, topk, hidden_size) + + Returns: + (grad_intermediate_cache2, grad_w2, grad_topk_weights, None) + """ + intermediate_cache2, w2, topk_weights, topk_ids = ctx.saved_tensors + config = ctx.config + num_tokens = ctx.num_tokens + topk = ctx.topk + + E, hidden_size, intermediate_size = w2.shape + CHUNK_SIZE = 64 * 1024 + + # Initialize gradient tensors + grad_intermediate_cache2 = torch.zeros_like(intermediate_cache2) + grad_w2 = torch.zeros_like(w2) + grad_topk_weights = torch.zeros_like(topk_weights) + + # Process in chunks to match forward pass + for chunk in range((num_tokens // CHUNK_SIZE) + 1): + begin_chunk_idx, end_chunk_idx = ( + chunk * CHUNK_SIZE, + min((chunk + 1) * CHUNK_SIZE, num_tokens), + ) + + curr_num_tokens = end_chunk_idx - begin_chunk_idx + if curr_num_tokens == 0: + continue + + curr_intermediate_cache2 = intermediate_cache2[begin_chunk_idx * topk : end_chunk_idx * topk] + curr_topk_ids = topk_ids[begin_chunk_idx:end_chunk_idx] + curr_topk_weights = topk_weights[begin_chunk_idx:end_chunk_idx] + curr_grad_output = grad_output[begin_chunk_idx:end_chunk_idx] + + # Get aligned metadata + sorted_token_ids, expert_ids, num_tokens_post_padded = moe_align_block_size( + curr_topk_ids, config["BLOCK_SIZE_M"], E + ) + + # Prepare gradient buffers for this chunk + curr_grad_intermediate_cache2 = torch.zeros_like(curr_intermediate_cache2) + curr_grad_w2 = torch.zeros_like(w2) + curr_grad_topk_weights = torch.zeros_like(curr_topk_weights) + + # Call Triton backward kernel with MUL_ROUTED_WEIGHT=True + # Note: Use top_k=1 to match forward pass indexing + invoke_fused_moe_backward_kernel( + grad_output=curr_grad_output, + input=curr_intermediate_cache2, + weight=w2, + grad_input=curr_grad_intermediate_cache2, + grad_weight=curr_grad_w2, + grad_topk_weights=curr_grad_topk_weights, + topk_weights=curr_topk_weights, + topk_ids=curr_topk_ids, + sorted_token_ids=sorted_token_ids, + expert_ids=expert_ids, + num_tokens_post_padded=num_tokens_post_padded, + mul_routed_weight=True, + top_k=1, + config=config, + compute_type=tl.bfloat16, + ) + + # Accumulate gradients + grad_intermediate_cache2[begin_chunk_idx * topk : end_chunk_idx * topk] = curr_grad_intermediate_cache2 + grad_w2 += curr_grad_w2 + grad_topk_weights[begin_chunk_idx:end_chunk_idx] = curr_grad_topk_weights + + return grad_intermediate_cache2, grad_w2, grad_topk_weights, None + + +class MoeSumReduceFunction(torch.autograd.Function): + @staticmethod + def forward( + ctx, + intermediate_cache3: torch.Tensor, + hidden_states_shape, + ): + out_hidden_states = torch.empty( + hidden_states_shape, device=intermediate_cache3.device, dtype=intermediate_cache3.dtype + ) + moe_sum_reduce( + intermediate_cache3, + out_hidden_states, + 1.0, + ) + ctx.save_for_backward(intermediate_cache3) + return out_hidden_states + + @staticmethod + def backward(ctx, grad_output): + (intermediate_cache3,) = ctx.saved_tensors + return grad_output.unsqueeze(1).expand_as(intermediate_cache3), None diff --git a/slime/backends/fsdp_utils/kernels/fused_moe_triton_backward_kernels.py b/slime/backends/fsdp_utils/kernels/fused_moe_triton_backward_kernels.py new file mode 100644 index 0000000000..3333478491 --- /dev/null +++ b/slime/backends/fsdp_utils/kernels/fused_moe_triton_backward_kernels.py @@ -0,0 +1,540 @@ +from __future__ import annotations + +from typing import Any + +import torch +import triton +import triton.language as tl + + +@triton.jit +def fused_moe_backward_input_kernel( + # Pointers to matrices + grad_output_ptr, + weight_ptr, + grad_input_ptr, + grad_topk_weights_ptr, + topk_weights_ptr, + sorted_token_ids_ptr, + expert_ids_ptr, + num_tokens_post_padded_ptr, + # Matrix dimensions + N, + K, + EM, + num_valid_tokens, + # Strides + stride_gom, + stride_gon, + stride_we, + stride_wn, + stride_wk, + stride_gim, + stride_gik, + # Meta-parameters + BLOCK_SIZE_M: tl.constexpr, + BLOCK_SIZE_N: tl.constexpr, + BLOCK_SIZE_K: tl.constexpr, + GROUP_SIZE_M: tl.constexpr, + MUL_ROUTED_WEIGHT: tl.constexpr, + top_k: tl.constexpr, + compute_type: tl.constexpr, +): + """ + Backward kernel for computing grad_input. + + Forward: output = input @ weight.T (optionally multiplied by topk_weights) + Backward: grad_input = grad_output @ weight (optionally multiplied by topk_weights) + + This kernel computes: grad_input[token] = sum_over_N(grad_output[token, n] * weight[expert, n, :]) + If MUL_ROUTED_WEIGHT: grad_input[token] *= topk_weights[token] + + Parallelization: Similar to forward, parallel over M and N dimensions, loop over K. + """ + # Map program ids to blocks (parallel over M and N, similar to forward) + pid = tl.program_id(axis=0) + num_pid_m = tl.cdiv(EM, BLOCK_SIZE_M) + num_pid_n = tl.cdiv(N, BLOCK_SIZE_N) + num_pid_in_group = GROUP_SIZE_M * num_pid_n + group_id = pid // num_pid_in_group + first_pid_m = group_id * GROUP_SIZE_M + group_size_m = min(num_pid_m - first_pid_m, GROUP_SIZE_M) + pid_m = first_pid_m + ((pid % num_pid_in_group) % group_size_m) + pid_n = (pid % num_pid_in_group) // group_size_m + + # Check bounds + num_tokens_post_padded = tl.load(num_tokens_post_padded_ptr) + + # Only process if this block is valid + if pid_m * BLOCK_SIZE_M < num_tokens_post_padded: + # Load token information + offs_token_id = pid_m * BLOCK_SIZE_M + tl.arange(0, BLOCK_SIZE_M).to(tl.int64) + offs_token = tl.load(sorted_token_ids_ptr + offs_token_id) + offs_token = offs_token.to(tl.int64) + token_mask = offs_token < num_valid_tokens + + # Get expert ID for this block + off_experts = tl.load(expert_ids_ptr + pid_m).to(tl.int64) + + # Only process if expert is valid + if off_experts != -1: + # Initialize offsets for N dimension (current block) + offs_n = pid_n * BLOCK_SIZE_N + tl.arange(0, BLOCK_SIZE_N).to(tl.int64) + offs_k = tl.arange(0, BLOCK_SIZE_K) + + # Load grad_output block: shape (BLOCK_SIZE_M, BLOCK_SIZE_N) + grad_output_ptrs = grad_output_ptr + (offs_token[:, None] * stride_gom + offs_n[None, :] * stride_gon) + grad_out = tl.load( + grad_output_ptrs, + mask=token_mask[:, None] & (offs_n[None, :] < N), + other=0.0, + ) + + # Apply topk_weights to grad_output if needed + if MUL_ROUTED_WEIGHT: + moe_weight = tl.load(topk_weights_ptr + offs_token, mask=token_mask, other=0) + grad_out = grad_out * moe_weight[:, None] + + # Iterate over K dimension + for k in range(0, tl.cdiv(K, BLOCK_SIZE_K)): + # Current K offsets + curr_offs_k = k * BLOCK_SIZE_K + offs_k + + # Load weight block: shape (BLOCK_SIZE_N, BLOCK_SIZE_K) + # weight: shape (E, N, K) + weight_ptrs = ( + weight_ptr + + off_experts * stride_we + + offs_n[:, None] * stride_wn + + curr_offs_k[None, :] * stride_wk + ) + w = tl.load( + weight_ptrs, + mask=(offs_n[:, None] < N) & (curr_offs_k[None, :] < K), + other=0.0, + ) + + # Compute contribution: grad_out @ weight + # grad_out: (BLOCK_SIZE_M, BLOCK_SIZE_N) + # w: (BLOCK_SIZE_N, BLOCK_SIZE_K) + # result: (BLOCK_SIZE_M, BLOCK_SIZE_K) + contribution = tl.dot(grad_out, w) + + # Atomic add to grad_input because different N blocks contribute to same K + grad_input_ptrs = grad_input_ptr + ( + (offs_token[:, None] // top_k) * stride_gim + curr_offs_k[None, :] * stride_gik + ) + grad_input_mask = token_mask[:, None] & (curr_offs_k[None, :] < K) + tl.atomic_add(grad_input_ptrs, contribution.to(compute_type), mask=grad_input_mask) + + +@triton.jit +def fused_moe_backward_weight_kernel( + # Pointers to matrices + grad_output_ptr, + input_ptr, + grad_weight_ptr, + topk_weights_ptr, + sorted_token_ids_ptr, + expert_ids_ptr, + num_tokens_post_padded_ptr, + # Matrix dimensions + N, + K, + EM, + num_valid_tokens, + # Strides + stride_gom, + stride_gon, + stride_im, + stride_ik, + stride_gwe, + stride_gwn, + stride_gwk, + # Meta-parameters + BLOCK_SIZE_M: tl.constexpr, + BLOCK_SIZE_N: tl.constexpr, + BLOCK_SIZE_K: tl.constexpr, + GROUP_SIZE_M: tl.constexpr, + MUL_ROUTED_WEIGHT: tl.constexpr, + top_k: tl.constexpr, + compute_type: tl.constexpr, +): + """ + Backward kernel for computing grad_weight. + + Forward: output = input @ weight.T (optionally multiplied by topk_weights) + Backward: grad_weight = input.T @ grad_output (optionally multiplied by topk_weights) + + This kernel computes: grad_weight[expert, n, k] = sum_over_tokens(input[token, k] * grad_output[token, n]) + If MUL_ROUTED_WEIGHT: the accumulation is weighted by topk_weights[token] + + Parallelization: Parallel over M and N dimensions with grouping, loop over K. + """ + # Map program ids to blocks (parallel over M and N with grouping, similar to forward and backward_input) + pid = tl.program_id(axis=0) + num_pid_m = tl.cdiv(EM, BLOCK_SIZE_M) + num_pid_n = tl.cdiv(N, BLOCK_SIZE_N) + num_pid_in_group = GROUP_SIZE_M * num_pid_n + group_id = pid // num_pid_in_group + first_pid_m = group_id * GROUP_SIZE_M + group_size_m = min(num_pid_m - first_pid_m, GROUP_SIZE_M) + pid_m = first_pid_m + ((pid % num_pid_in_group) % group_size_m) + pid_n = (pid % num_pid_in_group) // group_size_m + + # Check bounds + num_tokens_post_padded = tl.load(num_tokens_post_padded_ptr) + + # Only process if this block is valid + if pid_m * BLOCK_SIZE_M >= num_tokens_post_padded: + return + + # Get expert ID for this M block + expert_id = tl.load(expert_ids_ptr + pid_m).to(tl.int64) + + # Only process if expert is valid + if expert_id == -1: + return + + # Load token information for this M block + offs_m = tl.arange(0, BLOCK_SIZE_M) + offs_token_id = pid_m * BLOCK_SIZE_M + offs_m.to(tl.int64) + offs_token = tl.load( + sorted_token_ids_ptr + offs_token_id, mask=offs_token_id < num_tokens_post_padded, other=num_valid_tokens + ) + offs_token = offs_token.to(tl.int64) + token_mask = (offs_token_id < num_tokens_post_padded) & (offs_token < num_valid_tokens) + + # Clamp offs_token to valid range + offs_token_clamped = tl.where(token_mask, offs_token, 0) + + # Determine input token indices based on MUL_ROUTED_WEIGHT + if MUL_ROUTED_WEIGHT: + input_token_idx = offs_token_clamped + input_mask = token_mask + else: + input_token_idx = offs_token_clamped // top_k + num_input_tokens = num_valid_tokens // top_k + input_mask = token_mask & (input_token_idx < num_input_tokens) + + # Load topk_weights if needed + if MUL_ROUTED_WEIGHT: + moe_weight = tl.load(topk_weights_ptr + offs_token_clamped, mask=token_mask, other=0.0) + + # Current N offset for this program + offs_n = pid_n * BLOCK_SIZE_N + tl.arange(0, BLOCK_SIZE_N).to(tl.int64) + + # Load grad_output for this N block: shape (M, BLOCK_SIZE_N) + # grad_output is always indexed by sorted_token_ids (offs_token_clamped) + # because it has shape (num_tokens * topk, N) + grad_output_ptrs = grad_output_ptr + (offs_token_clamped[:, None] * stride_gom + offs_n[None, :] * stride_gon) + grad_out = tl.load( + grad_output_ptrs, + mask=token_mask[:, None] & (offs_n[None, :] < N), + other=0.0, + ) + + # Apply topk_weights if needed + if MUL_ROUTED_WEIGHT: + grad_out = grad_out * moe_weight[:, None] + + # Zero out padding tokens + token_mask_col = token_mask[:, None] + grad_out = grad_out * token_mask_col + + # Iterate over K blocks and accumulate + for k_block in range(tl.cdiv(K, BLOCK_SIZE_K)): + offs_k = k_block * BLOCK_SIZE_K + tl.arange(0, BLOCK_SIZE_K).to(tl.int64) + + # Load input for this K block + input_ptrs = input_ptr + (input_token_idx[:, None] * stride_im + offs_k[None, :] * stride_ik) + inp = tl.load( + input_ptrs, + mask=input_mask[:, None] & (offs_k[None, :] < K), + other=0.0, + ) + + # Zero out padding tokens - use input_mask for input, token_mask for grad_output + input_mask_col = input_mask[:, None] + inp = inp * input_mask_col + + # Compute grad_weight contribution: grad_out.T @ inp + grad_w_contribution = tl.dot(grad_out.T, inp) + + # Write back using atomic add + grad_weight_ptrs = ( + grad_weight_ptr + expert_id * stride_gwe + offs_n[:, None] * stride_gwn + offs_k[None, :] * stride_gwk + ) + grad_weight_mask = (offs_n[:, None] < N) & (offs_k[None, :] < K) + tl.atomic_add(grad_weight_ptrs, grad_w_contribution.to(compute_type), mask=grad_weight_mask) + + +@triton.jit +def fused_moe_backward_topk_weights_kernel( + # Pointers to matrices + grad_output_ptr, + input_ptr, + weight_ptr, + grad_topk_weights_ptr, + sorted_token_ids_ptr, + expert_ids_ptr, + num_tokens_post_padded_ptr, + # Matrix dimensions + N, + K, + EM, + num_valid_tokens, + # Strides + stride_gom, + stride_gon, + stride_im, + stride_ik, + stride_we, + stride_wn, + stride_wk, + # Meta-parameters + BLOCK_SIZE_M: tl.constexpr, + BLOCK_SIZE_N: tl.constexpr, + BLOCK_SIZE_K: tl.constexpr, + top_k: tl.constexpr, + compute_type: tl.constexpr, +): + """ + Backward kernel for computing grad_topk_weights. + + Forward: output = topk_weights * (input @ weight.T) + Backward: grad_topk_weights = sum(grad_output * (input @ weight.T)) + + This kernel computes the gradient of topk_weights by computing the dot product + of grad_output with the forward output before weight multiplication. + """ + # Map program id to token block + pid = tl.program_id(axis=0) + + # Check bounds + num_tokens_post_padded = tl.load(num_tokens_post_padded_ptr) + + # Only process if this block is valid + if pid * BLOCK_SIZE_M < num_tokens_post_padded: + # Load token information + offs_token_id = pid * BLOCK_SIZE_M + tl.arange(0, BLOCK_SIZE_M).to(tl.int64) + offs_token = tl.load( + sorted_token_ids_ptr + offs_token_id, mask=offs_token_id < num_tokens_post_padded, other=num_valid_tokens + ) + offs_token = offs_token.to(tl.int64) + token_mask = (offs_token_id < num_tokens_post_padded) & (offs_token < num_valid_tokens) + + # Clamp offs_token to valid range for safe pointer arithmetic + offs_token_clamped = tl.where(token_mask, offs_token, 0) + + # Get expert ID for this block + off_experts = tl.load(expert_ids_ptr + pid).to(tl.int64) + + # Only process if expert is valid + if off_experts != -1: + # Initialize offsets + offs_n = tl.arange(0, BLOCK_SIZE_N) + offs_k = tl.arange(0, BLOCK_SIZE_K) + + # Accumulator for grad_topk_weights + accumulator = tl.zeros((BLOCK_SIZE_M,), dtype=tl.float32) + + # Iterate over N and K dimensions to compute forward output and gradient + for n in range(0, tl.cdiv(N, BLOCK_SIZE_N)): + # Current N offset + curr_offs_n = n * BLOCK_SIZE_N + offs_n + + # Load grad_output block: (M, N) + grad_output_ptrs = grad_output_ptr + ( + offs_token_clamped[:, None] * stride_gom + curr_offs_n[None, :] * stride_gon + ) + grad_out = tl.load( + grad_output_ptrs, + mask=token_mask[:, None] & (curr_offs_n[None, :] < N), + other=0.0, + ) + + # Compute forward output for this N block: input @ weight[:, n, :].T + forward_output_n = tl.zeros((BLOCK_SIZE_M, BLOCK_SIZE_N), dtype=tl.float32) + + for k in range(0, tl.cdiv(K, BLOCK_SIZE_K)): + # Current K offset + curr_offs_k = k * BLOCK_SIZE_K + offs_k + + # Load input block: (M, K) + input_ptrs = input_ptr + ( + (offs_token_clamped[:, None] // top_k) * stride_im + curr_offs_k[None, :] * stride_ik + ) + inp = tl.load( + input_ptrs, + mask=token_mask[:, None] & (curr_offs_k[None, :] < K), + other=0.0, + ) + + # Load weight block: (N, K) + weight_ptrs = ( + weight_ptr + + off_experts * stride_we + + curr_offs_n[:, None] * stride_wn + + curr_offs_k[None, :] * stride_wk + ) + w = tl.load( + weight_ptrs, + mask=(curr_offs_n[:, None] < N) & (curr_offs_k[None, :] < K), + other=0.0, + ) + + # Accumulate forward output: input @ weight.T + # inp: (M, K), w.T: (K, N) -> (M, N) + forward_output_n += tl.dot(inp, w.T) + + # Compute contribution to grad_topk_weights: sum(grad_out * forward_output) + # Sum over N dimension + accumulator += tl.sum(grad_out * forward_output_n, axis=1) + + # Write back grad_topk_weights using atomic add with clamped token indices + tl.atomic_add(grad_topk_weights_ptr + offs_token_clamped, accumulator.to(compute_type), mask=token_mask) + + +def invoke_fused_moe_backward_kernel( + grad_output: torch.Tensor, + input: torch.Tensor, + weight: torch.Tensor, + grad_input: torch.Tensor, + grad_weight: torch.Tensor, + grad_topk_weights: torch.Tensor | None, + topk_weights: torch.Tensor, + topk_ids: torch.Tensor, + sorted_token_ids: torch.Tensor, + expert_ids: torch.Tensor, + num_tokens_post_padded: torch.Tensor, + mul_routed_weight: bool, + top_k: int, + config: dict[str, Any], + compute_type: tl.dtype, +) -> None: + """ + Invoke the fused MOE backward kernels to compute gradients. + + Args: + grad_output: Gradient of output, shape (num_tokens * topk, N) or (num_tokens, topk, N) + input: Input tensor, shape (num_tokens, K) + weight: Weight tensor, shape (E, N, K) + grad_input: Output gradient for input, shape (num_tokens, K) + grad_weight: Output gradient for weight, shape (E, N, K) + grad_topk_weights: Output gradient for topk_weights, shape (num_tokens, topk) or None + topk_weights: Top-K routing weights, shape (num_tokens, topk) + topk_ids: Top-K expert IDs, shape (num_tokens, topk) + sorted_token_ids: Sorted token IDs + expert_ids: Expert IDs for each block + num_tokens_post_padded: Number of tokens after padding + mul_routed_weight: Whether to multiply by routing weights + top_k: Number of experts per token + config: Kernel configuration + compute_type: Computation data type + """ + assert topk_weights.stride(1) == 1 + assert sorted_token_ids.stride(0) == 1 + + # Flatten grad_output if needed + # Before: (num_tokens, topk, hidden_size) + # After: (num_tokens * topk, hidden_size) + if grad_output.ndim == 3: + grad_output = grad_output.reshape(-1, grad_output.shape[-1]) + + E, N, K = weight.shape + + # ===================== Compute grad_input ===================== + def grid_input(META): + return (triton.cdiv(sorted_token_ids.shape[0], META["BLOCK_SIZE_M"]) * triton.cdiv(N, META["BLOCK_SIZE_N"]),) + + fused_moe_backward_input_kernel[grid_input]( + grad_output, + weight, + grad_input, + grad_topk_weights if grad_topk_weights is not None else grad_input, # dummy pointer + topk_weights, + sorted_token_ids, + expert_ids, + num_tokens_post_padded, + N, + K, + sorted_token_ids.shape[0], + grad_output.shape[0], + grad_output.stride(0), + grad_output.stride(1), + weight.stride(0), + weight.stride(1), + weight.stride(2), + grad_input.stride(0), + grad_input.stride(1), + MUL_ROUTED_WEIGHT=mul_routed_weight, + top_k=top_k, + compute_type=compute_type, + **config, + ) + + # ===================== Compute grad_weight ===================== + # Initialize grad_weight to zero + grad_weight.zero_() + + # Use same grid configuration as forward kernel: encode both M and N dimensions + def grid_weight(META): + return (triton.cdiv(sorted_token_ids.shape[0], META["BLOCK_SIZE_M"]) * triton.cdiv(N, META["BLOCK_SIZE_N"]),) + + fused_moe_backward_weight_kernel[grid_weight]( + grad_output, + input, + grad_weight, + topk_weights, + sorted_token_ids, + expert_ids, + num_tokens_post_padded, + N, + K, + sorted_token_ids.shape[0], + grad_output.shape[0], + grad_output.stride(0), + grad_output.stride(1), + input.stride(0), + input.stride(1), + grad_weight.stride(0), + grad_weight.stride(1), + grad_weight.stride(2), + MUL_ROUTED_WEIGHT=mul_routed_weight, + top_k=top_k, + compute_type=compute_type, + **config, + ) + + # ===================== Compute grad_topk_weights (if needed) ===================== + if mul_routed_weight and grad_topk_weights is not None: + + def grid_topk(META): + return (triton.cdiv(sorted_token_ids.shape[0], META["BLOCK_SIZE_M"]),) + + fused_moe_backward_topk_weights_kernel[grid_topk]( + grad_output, + input, + weight, + grad_topk_weights.view(-1), + sorted_token_ids, + expert_ids, + num_tokens_post_padded, + N, + K, + sorted_token_ids.shape[0], + grad_output.shape[0], + grad_output.stride(0), + grad_output.stride(1), + input.stride(0), + input.stride(1), + weight.stride(0), + weight.stride(1), + weight.stride(2), + top_k=top_k, + compute_type=compute_type, + BLOCK_SIZE_M=config["BLOCK_SIZE_M"], + BLOCK_SIZE_N=config["BLOCK_SIZE_N"], + BLOCK_SIZE_K=config["BLOCK_SIZE_K"], + ) diff --git a/slime/backends/fsdp_utils/lr_scheduler.py b/slime/backends/fsdp_utils/lr_scheduler.py new file mode 100644 index 0000000000..9bbe1efd16 --- /dev/null +++ b/slime/backends/fsdp_utils/lr_scheduler.py @@ -0,0 +1,195 @@ +# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. + +"""Learning rate scheduler for FSDP training.""" + +import logging +import math + +import torch +from torch.optim.lr_scheduler import LRScheduler +from typing_extensions import override + +logger = logging.getLogger(__name__) + + +class FSDPLRScheduler(LRScheduler): + """Learning rate scheduler for FSDP training. + + Args: + optimizer (torch.optim.Optimizer): The optimizer to be used. + init_lr (float): Initial learning rate. + max_lr (float): Maximum learning rate. + min_lr (float): Minimum learning rate. + lr_warmup_steps (int): Number of warmup steps. + lr_decay_steps (int): Number of decay steps. + lr_decay_style (str): Decay style for learning rate. + use_checkpoint_lr_scheduler (bool, optional): Whether to use the checkpoint values + for the lr scheduler. + override_lr_scheduler (bool, optional): Whether to override the lr scheduler values + with the class values. + wsd_decay_steps (int, optional): Number of weight decay decay steps. + lr_wsd_decay_style (str, optional): Decay style for learning rate during weight decay decay + steps. + last_epoch (int, optional): The index of last epoch. Default: -1. + """ + + def __init__( + self, + optimizer: torch.optim.Optimizer, + init_lr: float, + max_lr: float, + min_lr: float, + lr_warmup_steps: int, + lr_decay_steps: int, + lr_decay_style: str, + use_checkpoint_lr_scheduler: bool | None = True, + override_lr_scheduler: bool | None = False, + wsd_decay_steps: int | None = None, + lr_wsd_decay_style: str | None = None, + last_epoch: int = -1, + ) -> None: + # Store our custom parameters + self.init_lr = init_lr + self.max_lr = float(max_lr) + self.min_lr = min_lr + assert self.min_lr >= 0.0 + assert self.max_lr >= self.min_lr + assert self.init_lr <= self.max_lr + + self.lr_warmup_steps = lr_warmup_steps + self.lr_decay_steps = lr_decay_steps + self.wsd_decay_steps = wsd_decay_steps + self.lr_wsd_decay_style = lr_wsd_decay_style + + assert self.lr_decay_steps > 0 + assert self.lr_warmup_steps < self.lr_decay_steps + + self.lr_decay_style = lr_decay_style + if self.lr_decay_style == "WSD": + assert self.wsd_decay_steps is not None + + self.override_lr_scheduler = override_lr_scheduler + self.use_checkpoint_lr_scheduler = use_checkpoint_lr_scheduler + + if self.override_lr_scheduler: + assert not self.use_checkpoint_lr_scheduler, "both override and use-checkpoint are set." + + # Initialize parent class + super().__init__(optimizer, last_epoch) + + logger.info(f"> learning rate decay style: {self.lr_decay_style}") + + def _get_lr_for_group(self, param_group: dict) -> float: + """Compute learning rate for a specific parameter group. + + Args: + param_group (dict): parameter group from the optimizer. + + Returns: + float: learning rate for this parameter group. + """ + max_lr = param_group.get("max_lr", self.max_lr) + min_lr = param_group.get("min_lr", self.min_lr) + + # Use linear warmup for the initial part. + if self.lr_warmup_steps > 0 and self.last_epoch <= self.lr_warmup_steps: + return self.init_lr + ((max_lr - self.init_lr) * float(self.last_epoch) / float(self.lr_warmup_steps)) + + # If the learning rate is constant, just return the initial value. + if self.lr_decay_style == "constant": + return max_lr + + # For any steps larger than `self.lr_decay_steps`, use `min_lr`. + if self.last_epoch > self.lr_decay_steps: + return min_lr + + # If we are done with the warmup period, use the decay style. + if self.lr_decay_style == "inverse-square-root": + warmup_steps = max(self.lr_warmup_steps, 1) + num_steps = max(self.last_epoch, 1) + lr = max_lr * warmup_steps**0.5 / (num_steps**0.5) + return max(min_lr, lr) + + num_steps_ = self.last_epoch - self.lr_warmup_steps + decay_steps_ = self.lr_decay_steps - self.lr_warmup_steps + decay_ratio = float(num_steps_) / float(decay_steps_) + assert decay_ratio >= 0.0 + assert decay_ratio <= 1.0 + + delta_lr = max_lr - min_lr + coeff = None + + if self.lr_decay_style == "linear": + coeff = 1.0 - decay_ratio + elif self.lr_decay_style == "cosine": + coeff = 0.5 * (math.cos(math.pi * decay_ratio) + 1.0) + elif self.lr_decay_style == "WSD": + wsd_anneal_start_ = self.lr_decay_steps - self.wsd_decay_steps + if self.last_epoch <= wsd_anneal_start_: + coeff = 1.0 + else: + wsd_steps = self.last_epoch - wsd_anneal_start_ + wsd_decay_ratio = float(wsd_steps) / float(self.wsd_decay_steps) + if self.lr_wsd_decay_style == "linear": + coeff = 1.0 - wsd_decay_ratio + elif self.lr_wsd_decay_style == "cosine": + coeff = 0.5 * (math.cos(math.pi * wsd_decay_ratio) + 1.0) + elif self.lr_wsd_decay_style == "exponential": + coeff = (2.0 * math.pow(0.5, wsd_decay_ratio)) - 1.0 + elif self.lr_wsd_decay_style == "minus_sqrt": + coeff = 1.0 - math.sqrt(wsd_decay_ratio) + else: + raise Exception(f"{self.lr_decay_style} decay style is not supported.") + + assert coeff is not None + return min_lr + coeff * delta_lr + + @override + def get_lr(self) -> list[float]: + """Compute the learning rates for each parameter group. + + Returns: + list[float]: A list of learning rates, one for each parameter group. + """ + return [self._get_lr_for_group(group) for group in self.optimizer.param_groups] + + +def get_lr_scheduler(args, optimizer: torch.optim.Optimizer) -> FSDPLRScheduler: + """Create and configure the learning-rate scheduler. + + This configures iteration-based schedules derived from the global batch size + and run-time arguments. + + Args: + args: Training/runtime arguments (namespace). + optimizer (torch.optim.Optimizer): Optimizer bound to the model. + + Returns: + FSDPLRScheduler: Initialized scheduler bound to ``optimizer``. + """ + args.train_iters = args.num_rollout * args.rollout_batch_size * args.n_samples_per_prompt // args.global_batch_size + if args.lr_decay_iters is None: + args.lr_decay_iters = args.train_iters + lr_decay_steps = args.lr_decay_iters + wsd_decay_steps = None + if args.lr_wsd_decay_iters is not None: + wsd_decay_steps = args.lr_wsd_decay_iters + if args.lr_warmup_fraction is not None: + lr_warmup_steps = args.lr_warmup_fraction * lr_decay_steps + else: + lr_warmup_steps = args.lr_warmup_iters + lr_scheduler = FSDPLRScheduler( + optimizer, + init_lr=args.lr_warmup_init, + max_lr=args.lr, + min_lr=args.min_lr, + lr_warmup_steps=lr_warmup_steps, + lr_decay_steps=lr_decay_steps, + lr_decay_style=args.lr_decay_style, + use_checkpoint_lr_scheduler=args.use_checkpoint_lr_scheduler, + override_lr_scheduler=args.override_lr_scheduler, + wsd_decay_steps=wsd_decay_steps, + lr_wsd_decay_style=args.lr_wsd_decay_style, + ) + + return lr_scheduler diff --git a/slime/backends/fsdp_utils/models/__init__.py b/slime/backends/fsdp_utils/models/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/slime/backends/fsdp_utils/models/qwen3_moe.py b/slime/backends/fsdp_utils/models/qwen3_moe.py new file mode 100644 index 0000000000..2933f62a39 --- /dev/null +++ b/slime/backends/fsdp_utils/models/qwen3_moe.py @@ -0,0 +1,125 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from transformers.models.qwen3_moe.modeling_qwen3_moe import Qwen3MoeMLP + +from slime.backends.fsdp_utils.kernels.fused_experts import ( + DownProjFunction, + GateUpProjFunction, + MoeSumReduceFunction, + SiluAndMulFunction, +) + + +def fused_experts_impl( + hidden_states: torch.Tensor, + w1: torch.Tensor, + w2: torch.Tensor, + topk_weights: torch.Tensor, + topk_ids: torch.Tensor, +): + assert hidden_states.shape[1] == w1.shape[2], "Hidden size mismatch" + assert topk_weights.shape == topk_ids.shape, "topk shape mismatch" + assert hidden_states.is_contiguous(), "Hidden_states must be contiguous" + assert w1.is_contiguous(), "Expert weights1 must be contiguous" + assert w2.is_contiguous(), "Expert weights2 must be contiguous" + assert hidden_states.dtype in [torch.bfloat16] + + intermediate_cache1 = GateUpProjFunction.apply( + hidden_states, + w1, + topk_weights, + topk_ids, + ) + intermediate_cache2 = SiluAndMulFunction.apply(intermediate_cache1) + intermediate_cache3 = DownProjFunction.apply( + intermediate_cache2, + w2, + topk_weights, + topk_ids, + ) + output_hidden_states = MoeSumReduceFunction.apply( + intermediate_cache3, + hidden_states.shape, + ) + return output_hidden_states + + +class StandardDispatcher: + def __init__(self, num_experts: int, num_local_experts: int): + self.moe_ep_size = 1 + self.num_experts = num_experts + self.num_local_experts = num_local_experts + self.moe_ep_rank = 0 + self.local_expert_mapping = None + + if self.moe_ep_size > 1: + self.local_expert_mapping = torch.full((self.num_experts,), -1, dtype=torch.int32, device="cuda") + self.local_expert_mapping[ + self.moe_ep_rank * self.num_local_experts : (self.moe_ep_rank + 1) * self.num_local_experts + ] = torch.arange(0, self.num_local_experts, dtype=torch.int32, device="cuda") + + def dispatch(self, topk_ids) -> torch.Tensor: + if self.local_expert_mapping is not None: + return self.local_expert_mapping[topk_ids] + return topk_ids + + +class Qwen3MoeSparseMoeBlock(nn.Module): + dispatcher = None + runner = None + + def __init__(self, config): + super().__init__() + self.num_experts = config.num_experts + self.top_k = config.num_experts_per_tok + self.norm_topk_prob = config.norm_topk_prob + + # gating + self.gate = nn.Linear(config.hidden_size, config.num_experts, bias=False) + + self.experts = nn.ModuleList( + [Qwen3MoeMLP(config, intermediate_size=config.moe_intermediate_size) for _ in range(self.num_experts)] + ) + + if Qwen3MoeSparseMoeBlock.dispatcher is None: + Qwen3MoeSparseMoeBlock.dispatcher = StandardDispatcher( + num_experts=config.num_experts, num_local_experts=config.num_experts + ) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + batch_size, sequence_length, hidden_dim = hidden_states.shape + hidden_states = hidden_states.view(-1, hidden_dim) + # router_logits: (batch * sequence_length, n_experts) + router_logits = self.gate(hidden_states) + + routing_weights = F.softmax(router_logits, dim=1, dtype=torch.float) + routing_weights, selected_experts = torch.topk(routing_weights, self.top_k, dim=-1) + + if self.norm_topk_prob: # only diff with mixtral sparse moe block! + routing_weights /= routing_weights.sum(dim=-1, keepdim=True) + # we cast back to the input dtype + routing_weights = routing_weights.to(hidden_states.dtype) + + selected_experts = Qwen3MoeSparseMoeBlock.dispatcher.dispatch(selected_experts) + + w13_weight = torch.stack( + [torch.cat([layer.gate_proj.weight, layer.up_proj.weight], dim=0) for layer in self.experts] + ) + w2_weight = torch.stack([layer.down_proj.weight for layer in self.experts], dim=0) + + final_hidden_states = fused_experts_impl( + hidden_states.to(torch.bfloat16), + w13_weight, + w2_weight, + routing_weights, + selected_experts, + ) + + return final_hidden_states, router_logits + + +def apply_true_on_policy_patch_for_qwen3_moe(): + from transformers.models.qwen3_moe import modeling_qwen3_moe + + modeling_qwen3_moe.Qwen3MoeSparseMoeBlock = Qwen3MoeSparseMoeBlock diff --git a/slime/backends/fsdp_utils/models/qwen3_moe_hf.py b/slime/backends/fsdp_utils/models/qwen3_moe_hf.py new file mode 100644 index 0000000000..75c2286f19 --- /dev/null +++ b/slime/backends/fsdp_utils/models/qwen3_moe_hf.py @@ -0,0 +1,43 @@ +import torch +import torch.nn.functional as F + + +def apply_fsdp_moe_patch(): + + from transformers.models.qwen3_moe import modeling_qwen3_moe + + def _forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + batch_size, sequence_length, hidden_dim = hidden_states.shape + hidden_states = hidden_states.view(-1, hidden_dim) + router_logits = self.gate(hidden_states) + + routing_weights = F.softmax(router_logits, dim=1, dtype=torch.float) + routing_weights, selected_experts = torch.topk(routing_weights, self.top_k, dim=-1) + if self.norm_topk_prob: + routing_weights /= routing_weights.sum(dim=-1, keepdim=True) + routing_weights = routing_weights.to(hidden_states.dtype) + + final_hidden_states = torch.zeros( + (batch_size * sequence_length, hidden_dim), dtype=hidden_states.dtype, device=hidden_states.device + ) + + expert_mask = torch.nn.functional.one_hot(selected_experts, num_classes=self.num_experts).permute(2, 1, 0) + + # Loop over all experts + for expert_idx in range(self.num_experts): + expert_layer = self.experts[expert_idx] + idx, top_x = torch.where(expert_mask[expert_idx]) + + if top_x.numel() > 0: + current_state = hidden_states[None, top_x].reshape(-1, hidden_dim) + current_hidden_states = expert_layer(current_state) * routing_weights[top_x, idx, None] + final_hidden_states.index_add_(0, top_x, current_hidden_states.to(hidden_states.dtype)) + else: + # force experts to participate in computation graph + dummy_output = expert_layer(hidden_states[:1]) * 0.0 + final_hidden_states[:1] = final_hidden_states[:1] + dummy_output + + final_hidden_states = final_hidden_states.reshape(batch_size, sequence_length, hidden_dim) + return final_hidden_states, router_logits + + modeling_qwen3_moe.Qwen3MoeSparseMoeBlock.forward = _forward diff --git a/slime/backends/fsdp_utils/update_weight_utils.py b/slime/backends/fsdp_utils/update_weight_utils.py new file mode 100644 index 0000000000..75e217beb9 --- /dev/null +++ b/slime/backends/fsdp_utils/update_weight_utils.py @@ -0,0 +1,286 @@ +import abc +import logging +import socket +from argparse import Namespace +from collections.abc import Sequence + +import ray +import torch +import torch.distributed as dist +from ray.actor import ActorHandle +from torch.distributed.tensor import DTensor, Replicate + +try: + from sglang.srt.utils.patch_torch import monkey_patch_torch_reductions # type: ignore[import] +except ImportError: + from sglang.srt.patch_torch import monkey_patch_torch_reductions # type: ignore[import] + +from sglang.srt.utils import MultiprocessingSerializer + +from slime.utils.distributed_utils import init_process_group + + +try: + from sglang.srt.weight_sync.tensor_bucket import FlattenedTensorBucket # type: ignore[import] +except ImportError: + from sglang.srt.model_executor.model_runner import FlattenedTensorBucket # type: ignore[import] + + +logger = logging.getLogger(__name__) + + +class UpdateWeight(abc.ABC): + def __init__(self, args: Namespace, model: torch.nn.Module) -> None: + self.args = args + self.model = model + self.weight_version = 0 + + @abc.abstractmethod + def connect_rollout_engines( + self, + rollout_engines: Sequence[ActorHandle], + rollout_engine_lock: ActorHandle | None, + engine_gpu_counts: Sequence[int] | None = None, + engine_gpu_offsets: Sequence[int] | None = None, + ) -> None: + pass + + def update_weights(self) -> None: + self.weight_version += 1 + bucket = [] + bucket_size = 0 + for name, param in self.model.state_dict().items(): + param_size = param.numel() * param.element_size() + if bucket and bucket_size + param_size >= self.args.update_weight_buffer_size: + self.wait_and_update_bucket_weights(bucket) + del bucket + bucket = [] + bucket_size = 0 + + param = param.cuda() + if isinstance(param, DTensor): + # async version of param.full_tensor + param = param.redistribute( + placements=[Replicate()] * param.device_mesh.ndim, + async_op=True, + ).to_local() + bucket.append((name, param)) + bucket_size += param_size + + if bucket: + self.wait_and_update_bucket_weights(bucket) + del bucket + bucket = [] + bucket_size = 0 + + def wait_and_update_bucket_weights(self, bucket): + bucket = [(name, param.wait()) if hasattr(param, "wait") else (name, param) for name, param in bucket] + self.update_bucket_weights(bucket, weight_version=self.weight_version) + + @abc.abstractmethod + def update_bucket_weights(self, named_tensors, weight_version=None) -> None: + pass + + +class UpdateWeightFromTensor(UpdateWeight): + """Push model weights to rollout engines using tensors. + + Streams parameters in size-bounded buckets; optionally groups tensors by dtype + and flattens per dtype, gathers per-rank blobs to the source, and issues one + RPC per dtype per bucket (or one per bucket if not flattened). + """ + + def connect_rollout_engines( + self, + rollout_engines: Sequence[ActorHandle], + rollout_engine_lock: ActorHandle | None, + engine_gpu_counts: Sequence[int] | None = None, + engine_gpu_offsets: Sequence[int] | None = None, + ) -> None: + """Attach rollout engines and create per-engine IPC (Gloo) groups. + + Sets the gather source rank, engine handle, and `tp_rank` within the + engine's local group. + """ + self.rollout_engines = rollout_engines + + if engine_gpu_counts is None: + engine_gpu_counts = [self.args.rollout_num_gpus_per_engine] * len(rollout_engines) + if engine_gpu_offsets is None: + # Fallback: assume engines are densely packed (no placeholder gaps). + engine_gpu_offsets = [] + offset = 0 + for c in engine_gpu_counts: + engine_gpu_offsets.append(offset) + offset += c + + for i, engine in enumerate(self.rollout_engines): + start_rank = engine_gpu_offsets[i] + end_rank = start_rank + engine_gpu_counts[i] + group_ranks = list(range(start_rank, end_rank)) + new_group = dist.new_group( + ranks=group_ranks, + backend="gloo", + ) + if dist.get_rank() in group_ranks: + self._ipc_gather_src = start_rank + self._ipc_gather_group = new_group + self._ipc_engine = engine + # Calculate TP rank within this SGLang engine group + self.tp_rank = dist.get_rank() - start_rank + + def update_bucket_weights(self, named_tensors, weight_version=None) -> None: + # Placeholder ranks (GPU slots reserved but no engine) have no gather group. + # gather_object is only collective among group members, so we skip entirely. + if self._ipc_gather_group is None: + return + + monkey_patch_torch_reductions() + # Use flattened bucket approach similar to Megatron + logger.info("Using flattened tensor bucket") + # Group tensors by dtype (same as Megatron) + named_tensors_by_dtypes = {} + for name, tensor in named_tensors: + dtype = tensor.dtype + if dtype not in named_tensors_by_dtypes: + named_tensors_by_dtypes[dtype] = [] + named_tensors_by_dtypes[dtype].append((name, tensor)) + + # Create flattened bucket for each dtype group + serialized_tensors = [] + for _dtype, named_tensors in named_tensors_by_dtypes.items(): + flattened_tensor_bucket = FlattenedTensorBucket(named_tensors=named_tensors) + metadata = flattened_tensor_bucket.get_metadata() + flattened_tensor_data = { + "flattened_tensor": flattened_tensor_bucket.get_flattened_tensor(), + "metadata": metadata, + } + serialized_tensors.append(MultiprocessingSerializer.serialize(flattened_tensor_data, output_str=True)) + + if self._ipc_gather_src == dist.get_rank(): + # On rank 0, prepare a list to hold the gathered batches from all ranks. + gathered_serialized_batches = [None for _ in range(dist.get_world_size(self._ipc_gather_group))] + else: + gathered_serialized_batches = None + + # Gather the serialized batches from all ranks to rank 0. + dist.gather_object( + obj=serialized_tensors, + object_gather_list=gathered_serialized_batches, + dst=self._ipc_gather_src, + group=self._ipc_gather_group, + ) + + if dist.get_rank() == self._ipc_gather_src: + # Handle flattened bucket format (same as Megatron approach) + # Each rank may have multiple dtype buckets + # TODO: here we assume all ranks have the same number of dtypes + num_dtypes = len(gathered_serialized_batches[0]) + assert num_dtypes > 0 + for i in range(num_dtypes): + kwargs = { + "serialized_named_tensors": [tensors[i] for tensors in gathered_serialized_batches], + "load_format": "flattened_bucket", + "flush_cache": False, + "weight_version": str(weight_version), + } + ref = self._ipc_engine.update_weights_from_tensor.remote(**kwargs) + ray.get(ref) + + if dist.get_rank() == self._ipc_gather_src: + ref = self._ipc_engine.flush_cache.remote() + ray.get(ref) + + +class UpdateWeightFromDistributed(UpdateWeight): + """Broadcast weights via a temporary NCCL group to rollout engines.""" + + def connect_rollout_engines( + self, + rollout_engines: Sequence[ActorHandle], + rollout_engine_lock: ActorHandle | None, + engine_gpu_counts: Sequence[int] | None = None, + engine_gpu_offsets: Sequence[int] | None = None, + ) -> None: + """On rank 0, initialize a temporary NCCL group for parameter broadcast.""" + self.rollout_engines = rollout_engines + self.rollout_engine_lock = rollout_engine_lock + + # For TP: + # 1. AllGather parameters to rank 0 + # 2. Broadcast parameters from rank 0 to all sglang engines + self._is_src_rank = dist.get_rank() == 0 + + if engine_gpu_counts is None: + engine_gpu_counts = [self.args.rollout_num_gpus_per_engine] * len(rollout_engines) + + if self._is_src_rank: + self._group_name = "slime" + master_address = ray._private.services.get_node_ip_address() + with socket.socket() as sock: + sock.bind(("", 0)) + master_port = sock.getsockname()[1] + world_size = sum(engine_gpu_counts) + 1 + + # Compute cumulative rank offsets. + cumulative = [0] + for c in engine_gpu_counts: + cumulative.append(cumulative[-1] + c) + + refs = [ + engine.init_weights_update_group.remote( + master_address, + master_port, + cumulative[i] + 1, + world_size, + self._group_name, + backend="nccl", + ) + for i, engine in enumerate(self.rollout_engines) + ] + self._model_update_groups = init_process_group( + backend="nccl", + init_method=f"tcp://{master_address}:{master_port}", + world_size=world_size, + rank=0, + group_name=self._group_name, + ) + ray.get(refs) + + def update_bucket_weights(self, named_tensors, weight_version=None) -> None: + """Send names/dtypes/shapes metadata to engines, then broadcast tensors. + + Ensures tensors are contiguous; when `world_size == 1`, converts DTensors + to full tensors prior to `dist.broadcast`. + """ + if not self._is_src_rank or not named_tensors: + return + + refs = [ + engine.update_weights_from_distributed.remote( + names=[name for name, _ in named_tensors], + dtypes=[param.dtype for _, param in named_tensors], + shapes=[param.shape for _, param in named_tensors], + group_name=self._group_name, + weight_version=str(weight_version), + ) + for engine in self.rollout_engines + ] + + handles = [] + # Broadcast parameters one by one with memory management + for _name, param in named_tensors: + torch.cuda.empty_cache() + # Ensure tensor is contiguous and on the right device + param_data = param.data.contiguous() + + # avoid `DTensor._op_dispatcher.dispatch` has `assert compute_mesh is not None` error + if dist.get_world_size() == 1 and isinstance(param_data, DTensor): + param_data = param_data.full_tensor() + + # Synchronous broadcast to avoid memory buildup + handles.append(dist.broadcast(param_data, 0, group=self._model_update_groups, async_op=True)) + + for handle in handles: + handle.wait() + ray.get(refs) diff --git a/slime/backends/megatron_utils/__init__.py b/slime/backends/megatron_utils/__init__.py index b1936ae692..a4666fbeb9 100644 --- a/slime/backends/megatron_utils/__init__.py +++ b/slime/backends/megatron_utils/__init__.py @@ -40,5 +40,3 @@ def _patched_forward(self, *args, packed_seq_params=None, **kwargs): pass logging.getLogger("megatron").setLevel(logging.WARNING) - -from . import megatron_patch # noqa: F401, E402 diff --git a/slime/backends/megatron_utils/actor.py b/slime/backends/megatron_utils/actor.py index 721a30c679..0091d0e9c3 100644 --- a/slime/backends/megatron_utils/actor.py +++ b/slime/backends/megatron_utils/actor.py @@ -1,10 +1,10 @@ import logging import os import random +import socket from argparse import Namespace from contextlib import nullcontext -import numpy as np import ray import torch import torch.distributed as dist @@ -13,19 +13,10 @@ from torch_memory_saver import torch_memory_saver from transformers import AutoConfig, AutoTokenizer -# torch_memory_saver is only used when the rollout backend is sglang (the -# default). For the vLLM rollout backend we intentionally avoid importing it -# (the preload .so is not loaded), so we resolve it lazily and tolerate the -# import being unavailable. -try: # pragma: no cover - import guard - from torch_memory_saver import torch_memory_saver # type: ignore -except Exception: # noqa: BLE001 - missing native lib should not crash import - torch_memory_saver = None # type: ignore[assignment] - from slime.ray.train_actor import TrainRayActor from slime.utils import train_dump_utils from slime.utils.data import process_rollout_data -from slime.utils.distributed_utils import get_gloo_group +from slime.utils.distributed_utils import get_gloo_group, init_process_group from slime.utils.logging_utils import init_tracking from slime.utils.memory_utils import clear_memory, print_memory from slime.utils.misc import Box @@ -38,14 +29,13 @@ from ...utils.tensor_backper import TensorBackuper from .checkpoint import load_checkpoint from .cp_utils import slice_log_prob_with_cp, slice_with_cp -from .data import DataIterator, get_data_iterator, log_perf_data, log_rollout_data +from .data import DataIterator, get_data_iterator, log_perf_data, log_rollout_data, sync_actor_critic_data from .initialize import init, is_megatron_main_rank from .loss import compute_advantages_and_returns, get_log_probs_and_entropy, get_values from .model import forward_only, initialize_model_and_optimizer, save, train from .update_weight.common import named_params_and_buffers from .update_weight.update_weight_from_distributed import UpdateWeightFromDistributed from .update_weight.update_weight_from_tensor import UpdateWeightFromTensor -from .update_weight.update_weight_from_tensor_vllm import UpdateVLLMWeightFromTensor logging.getLogger("megatron").setLevel(logging.WARNING) @@ -61,13 +51,13 @@ def init( with_ref: bool = False, with_opd_teacher: bool = False, ) -> int | None: - if args.debug_rollout_only: - self.args = args - return 0 - monkey_patch_torch_dist() + super().init(args, role, with_ref, with_opd_teacher) + if args.debug_rollout_only: + return 0 + init(args) if is_megatron_main_rank(): @@ -88,17 +78,17 @@ def init( dist.barrier(group=get_gloo_group()) if args.offload_train: - if self._uses_torch_memory_saver(): - if (x := args.train_memory_margin_bytes) > 0: - logger.info(f"Set torch_memory_saver.memory_margin_bytes to {x}") - torch_memory_saver.memory_margin_bytes = x - else: - logger.info( - "offload_train enabled with rollout_backend=vllm: using CPU offload " - "instead of torch_memory_saver." - ) + if (x := args.train_memory_margin_bytes) > 0: + logger.info(f"Set torch_memory_saver.memory_margin_bytes to {x}") + torch_memory_saver.memory_margin_bytes = x + + if role == "critic": + self.args.load = self.args.critic_load + self.args.save = self.args.critic_save + self.args.lr = self.args.critic_lr + self.args.lr_warmup_iters = self.args.critic_lr_warmup_iters - self.model, self.optimizer, self.opt_param_scheduler, loaded_rollout_id = initialize_model_and_optimizer( + (self.model, self.optimizer, self.opt_param_scheduler, loaded_rollout_id) = initialize_model_and_optimizer( args, role ) @@ -141,14 +131,7 @@ def init( hf_vocab = getattr(self.hf_config, "vocab_size", None) self.args.vocab_size = hf_vocab if hf_vocab is not None else self.tokenizer.vocab_size - use_vllm_colocate = self.args.colocate and getattr(self.args, "rollout_backend", "sglang") == "vllm" - use_tensor_update = self.args.colocate and getattr(self.args, "rollout_backend", "sglang") != "vllm" - if use_vllm_colocate: - update_weight_cls = UpdateVLLMWeightFromTensor - elif use_tensor_update: - update_weight_cls = UpdateWeightFromTensor - else: - update_weight_cls = UpdateWeightFromDistributed + update_weight_cls = UpdateWeightFromTensor if self.args.colocate else UpdateWeightFromDistributed self.weight_updater = update_weight_cls( self.args, self.model, @@ -177,150 +160,15 @@ def init( return start_rollout_id - def _uses_torch_memory_saver(self) -> bool: - """Whether GPU memory should be released via torch_memory_saver. - - torch_memory_saver relies on an LD_PRELOAD-injected allocator hook that - is only set up for the sglang rollout backend (see ``RayTrainGroup``). - For the vLLM rollout backend we fall back to an explicit CPU-offload - path that moves model parameters and optimizer state to CPU. - """ - if not self.args.offload_train: - return False - if torch_memory_saver is None: - return False - return getattr(self.args, "rollout_backend", "sglang") != "vllm" - - @torch.no_grad() - def _move_optimizer_state_to_device(self, device: str | torch.device) -> None: - """Move all tensor entries in optimizer state to ``device``. - - Handles three layouts we see in practice: - * ``ChainedOptimizer`` used when there are multiple model chunks - (virtual pipeline) -- we must recurse into ``chained_optimizers`` - because the outer object's ``.state`` is empty. - * Megatron ``DistributedOptimizer`` whose ``state`` is a ``ProxyDict`` - that yields ``(key, tensor)`` directly (no ``.get``). - * Stock torch optimizer with ``dict[param, state_dict]`` layout. - """ - if self.optimizer is None: - return - - def _walk(opt) -> None: - # ChainedOptimizer (Megatron VP): dispatch to inner optimizers. - inner = getattr(opt, "chained_optimizers", None) - if inner: - for sub in inner: - _walk(sub) - return - - state = getattr(opt, "state", None) - if not state: - return - for key, value in list(state.items()): - if isinstance(value, torch.Tensor): - state[key] = value.to(device, non_blocking=True) - elif isinstance(value, dict): - for sub_key, sub_value in value.items(): - if isinstance(sub_value, torch.Tensor): - value[sub_key] = sub_value.to(device, non_blocking=True) - - _walk(self.optimizer) - torch.cuda.synchronize() - - @torch.no_grad() - def _move_module_tensors_to_device(self, device: str | torch.device) -> None: - """Move params/grads/buffers to ``device`` in-place. - - ``nn.Module.to()`` replaces ``nn.Parameter`` objects whenever the - device actually changes, which silently breaks any external references - the optimizer (or our ``weights_backuper``) still holds to the old - tensors -- gradients then accumulate on GPU tensors that the optimizer - no longer knows about, so ``optimizer.step()`` becomes a no-op on the - live parameters. Mutating ``p.data`` (and ``p.grad.data``) in place - keeps the ``Parameter`` identity intact, so every consumer continues - to see the moved storage. - - Additional Megatron specifics handled here: - * ``p.main_grad`` (used with gradient-accumulation fusion / DDP) is - moved alongside ``p.grad``; the optimizer reads from - ``main_grad`` when present. - * Megatron ``DistributedDataParallel`` stores parameters/grads in a - few big contiguous ``ParamAndGradBuffer`` tensors; individual - ``p.data`` / ``p.main_grad`` are views into them. Moving only the - views leaves the big buckets allocated on GPU and leaves the - views pointing at stale storage, so we also migrate each - buffer's underlying ``param_data`` / ``grad_data`` in place. - """ - if self.model is None: - return - - def _move_tensor_attr(owner, attr: str) -> None: - t = getattr(owner, attr, None) - if isinstance(t, torch.Tensor): - t.data = t.data.to(device, non_blocking=True) - - for module in self.model: - # 1) Move DDP bucket buffers first so subsequent param views land - # on the new device's storage without orphaning the buckets. - for bucket_attr in ("buffers", "expert_parallel_buffers"): - bucket_list = getattr(module, bucket_attr, None) - # ``buffers`` on nn.Module is a *method*; only treat it as our - # target when it is the Megatron list of ParamAndGradBuffer. - if isinstance(bucket_list, (list, tuple)): - for buf in bucket_list: - for t_attr in ("param_data", "grad_data"): - _move_tensor_attr(buf, t_attr) - - # 2) Move parameter / grad views in place (Parameter identity - # preserved so optimizer + weights_backuper stay consistent). - for p in module.parameters(recurse=True): - p.data = p.data.to(device, non_blocking=True) - if p.grad is not None: - p.grad.data = p.grad.data.to(device, non_blocking=True) - _move_tensor_attr(p, "main_grad") - - # 3) Registered buffers (e.g. RoPE caches, norm running stats). - # Use the unbound ``nn.Module.buffers`` because Megatron's DDP - # shadows the method with a ``list`` of ParamAndGradBuffer. - for b in torch.nn.Module.buffers(module, recurse=True): - b.data = b.data.to(device, non_blocking=True) - - def _cpu_offload_sleep(self) -> None: - """CPU-offload alternative to ``torch_memory_saver.pause()`` for vLLM.""" - self._move_module_tensors_to_device("cpu") - if getattr(self, "optimizer", None) is not None: - self._move_optimizer_state_to_device("cpu") - torch.cuda.synchronize() - - def _cpu_offload_wake_up(self) -> None: - """CPU-offload counterpart to ``_cpu_offload_sleep``.""" - device = torch.cuda.current_device() - self._move_module_tensors_to_device(device) - if getattr(self, "optimizer", None) is not None: - self._move_optimizer_state_to_device(device) - torch.cuda.synchronize() - @timer def sleep(self) -> None: assert self.args.offload_train clear_memory(clear_host_memory=True) print_memory("before offload model") - if ( - self.role == "actor" - and self.args.use_critic - and not self.args.colocate - and hasattr(self.weight_updater, "disconnect_rollout_engines") - ): - self.weight_updater.disconnect_rollout_engines() destroy_process_groups() - if self._uses_torch_memory_saver(): - torch_memory_saver.pause() - else: - self._cpu_offload_sleep() - clear_memory() + torch_memory_saver.pause() print_memory("after offload model") @@ -329,10 +177,7 @@ def wake_up(self) -> None: assert self.args.offload_train print_memory("before wake_up model") - if self._uses_torch_memory_saver(): - torch_memory_saver.resume() - else: - self._cpu_offload_wake_up() + torch_memory_saver.resume() clear_memory() reload_process_groups() @@ -359,14 +204,7 @@ def _get_rollout_data(self, rollout_data_ref: Box) -> RolloutBatch: # Move multimodal training tensors to GPU in advance rollout_data["multimodal_train_inputs"] = [ ( - { - key: ( - torch.from_numpy(v.copy()).to(device=torch.cuda.current_device()) - if isinstance(v, np.ndarray) - else v.to(device=torch.cuda.current_device()) - ) - for key, v in mm_dict.items() - } + {key: tensor.to(device=torch.cuda.current_device()) for key, tensor in mm_dict.items()} if mm_dict is not None else None ) @@ -514,9 +352,9 @@ def compute_log_prob( store_prefix=store_prefix, ) - def train(self, rollout_id: int, rollout_data_ref: Box, external_data=None): + def train(self, rollout_id: int, rollout_data_ref: Box) -> None: if self.args.debug_rollout_only: - return None + return if self.args.offload_train: self.wake_up() @@ -525,22 +363,25 @@ def train(self, rollout_id: int, rollout_data_ref: Box, external_data=None): rollout_data = self._get_rollout_data(rollout_data_ref) if self.role == "critic": - result = self.train_critic(rollout_id, rollout_data) + return self.train_critic(rollout_id, rollout_data) else: - self.train_actor(rollout_id, rollout_data, external_data=external_data) - result = None - - if self.args.offload_train: - self.sleep() + return self.train_actor(rollout_id, rollout_data) - return result - - def train_critic(self, rollout_id: int, rollout_data: RolloutBatch): - """Train critic and return CPU values (used as old-values for the next actor train).""" + def train_critic(self, rollout_id: int, rollout_data: RolloutBatch) -> None: + # Create data iterator for log_probs and train. data_iterator, num_microbatches = get_data_iterator(self.args, self.model, rollout_data) + rollout_data.update( + forward_only( + get_values, + self.args, + self.model, + data_iterator, + num_microbatches, + ) + ) - # Compute current critic values (used as old_values for value loss and for actor advantages). - rollout_data.update(forward_only(get_values, self.args, self.model, data_iterator, num_microbatches)) + if rollout_id >= self.args.num_critic_only_steps and not self.args.critic_train_only: + sync_actor_critic_data(self.args, rollout_data, self._actor_critic_groups) compute_advantages_and_returns(self.args, rollout_data) @@ -554,13 +395,7 @@ def train_critic(self, rollout_id: int, rollout_data: RolloutBatch): num_microbatches, ) - if mpu.is_pipeline_last_stage() and "values" in rollout_data: - from slime.backends.megatron_utils.data import tensors_to_cpu - - return {"values": tensors_to_cpu(rollout_data["values"])} - return {} - - def train_actor(self, rollout_id: int, rollout_data: RolloutBatch, external_data=None) -> None: + def train_actor(self, rollout_id: int, rollout_data: RolloutBatch) -> None: # Create data iterator for log_probs and train. data_iterator, num_microbatches = get_data_iterator(self.args, self.model, rollout_data) @@ -595,21 +430,7 @@ def train_actor(self, rollout_id: int, rollout_data: RolloutBatch, external_data ) self._switch_model("old_actor" if self.args.keep_old_actor else "actor") - can_reuse_log_probs_in_loss = ( - len(num_microbatches) == 1 - and self.args.loss_type == "policy_loss" - and self.args.kl_coef == 0 - and not self.args.use_rollout_logprobs - and not self.args.get_mismatch_metrics - and not self.args.use_critic - and not self.args.keep_old_actor - and not self.args.use_opd - and not self.args.use_routing_replay - and self.args.advantage_estimator != "gspo" - ) - if ( - not self.args.use_rollout_logprobs or self.args.get_mismatch_metrics - ) and not can_reuse_log_probs_in_loss: + if not self.args.use_rollout_logprobs or self.args.get_mismatch_metrics: if self.args.use_routing_replay: if self.args.use_rollout_routing_replay: os.environ["ROUTING_REPLAY_STAGE"] = "replay_forward" @@ -626,12 +447,11 @@ def train_actor(self, rollout_id: int, rollout_data: RolloutBatch, external_data RoutingReplay.clear_all_forward() if self.args.use_critic: - if external_data is not None and mpu.is_pipeline_last_stage(): - values = external_data.get("values") - if values is not None: - from slime.backends.megatron_utils.data import tensors_to_gpu - - rollout_data["values"] = tensors_to_gpu(values) + sync_actor_critic_data( + self.args, + rollout_data, + self._actor_critic_groups, + ) if self._active_model_tag != "actor": self._switch_model("actor") @@ -640,7 +460,7 @@ def train_actor(self, rollout_id: int, rollout_data: RolloutBatch, external_data compute_advantages_and_returns(self.args, rollout_data) if self.rollout_data_postprocess is not None: - self.rollout_data_postprocess(self.args, rollout_id, rollout_data) + self.rollout_data_postprocess(self.args) log_rollout_data( rollout_id, @@ -691,7 +511,7 @@ def save_model(self, rollout_id: int, force_sync: bool = False) -> None: # torch dist may trigger nccl communication during saving. if self.args.offload_train: - self.wake_up() + reload_process_groups() if self.args.async_save: from megatron.training.async_utils import maybe_finalize_async_save @@ -709,7 +529,7 @@ def save_model(self, rollout_id: int, force_sync: bool = False) -> None: save_hf_model(self.args, rollout_id, self.model) if self.args.offload_train: - self.sleep() + destroy_process_groups() @timer def update_weights(self) -> None: @@ -718,21 +538,17 @@ def update_weights(self) -> None: if self.args.use_fault_tolerance: if dist.get_rank() == 0: - ray.get(self.rollout_manager.recover_updatable_engines.remote()) + ray.get(self.rollout_manager.recover_rollout_engines.remote()) dist.barrier(group=get_gloo_group()) rollout_engines, rollout_engine_lock, num_new_engines, engine_gpu_counts, engine_gpu_offsets = ray.get( - self.rollout_manager.get_updatable_engines_and_lock.remote() + self.rollout_manager.get_rollout_engines_and_lock.remote() ) - reconnect_rollout_engines = self.args.offload_train and self.args.use_critic and not self.args.colocate - - if reconnect_rollout_engines: - self.wake_up() - elif self.args.offload_train: + if self.args.offload_train: reload_process_groups() - if num_new_engines > 0 or reconnect_rollout_engines: + if num_new_engines > 0: self.weight_updater.connect_rollout_engines( rollout_engines, rollout_engine_lock, @@ -741,11 +557,9 @@ def update_weights(self) -> None: ) dist.barrier(group=get_gloo_group()) if dist.get_rank() == 0: - ray.get(self.rollout_manager.clear_updatable_num_new_engines.remote()) + ray.get(self.rollout_manager.clear_num_new_engines.remote()) - weight_update_ctx = torch_memory_saver.disable() if self._uses_torch_memory_saver() else nullcontext() - - with weight_update_ctx: + with torch_memory_saver.disable() if self.args.offload_train else nullcontext(): print_memory("before update_weights") self.weight_updater.update_weights() print_memory("after update_weights") @@ -769,9 +583,7 @@ def update_weights(self) -> None: else: self.weights_backuper.backup("old_actor") - if reconnect_rollout_engines: - self.sleep() - elif self.args.offload_train: + if self.args.offload_train: destroy_process_groups() def load_other_checkpoint(self, model_tag: str, path: str) -> None: @@ -803,3 +615,26 @@ def load_other_checkpoint(self, model_tag: str, path: str) -> None: self.weights_backuper.backup(model_tag) self._active_model_tag = model_tag + + def connect_actor_critic( + self, + actor_handle: ActorHandle | None = None, + master_address: str | None = None, + master_port: int | None = None, + ) -> None: + if self.role == "actor": + master_address = ray.util.get_node_ip_address() + with socket.socket() as sock: + sock.bind(("", 0)) + master_port = sock.getsockname()[1] + actor_handle.connect_actor_critic.remote(master_address=master_address, master_port=master_port) + + group_name = "actor_critic" + world_size = 2 + self._actor_critic_groups = init_process_group( + backend="nccl", + init_method=f"tcp://{master_address}:{master_port}", + world_size=world_size, + rank=0 if self.role == "actor" else 1, + group_name=group_name, + ) diff --git a/slime/backends/megatron_utils/arguments.py b/slime/backends/megatron_utils/arguments.py index 6a026271c8..d724b899ca 100644 --- a/slime/backends/megatron_utils/arguments.py +++ b/slime/backends/megatron_utils/arguments.py @@ -1,4 +1,3 @@ -import ast import logging from megatron.training.arguments import parse_args as _megatron_parse_args @@ -11,67 +10,8 @@ logger = logging.getLogger(__name__) -_ALLGATHER_CP_DSA_ARCHITECTURES = { - "DeepseekV32ForCausalLM", - "GlmMoeDsaForCausalLM", -} - - -def _is_allgather_cp_dsa_model(hf_config): - if hf_config is None: - return False - - architecture_names = getattr(hf_config, "architectures", None) or [] - return any(name in _ALLGATHER_CP_DSA_ARCHITECTURES for name in architecture_names) - - -def _validate_allgather_cp_supported(args, hf_config=None): - if not getattr(args, "allgather_cp", False) or getattr(args, "context_parallel_size", 1) <= 1: - return - - if _is_allgather_cp_dsa_model(hf_config): - return - - raise ValueError( - "--allgather-cp with --context-parallel-size > 1 is currently only supported for " - "DSA attention models (DeepSeek-V3.2 and GLM-5.1). Non-DSA models still use the " - "zigzag CP layout and would silently scramble token order under allgather CP. " - "Please remove --allgather-cp, set --context-parallel-size 1, or use a supported DSA model." - ) - - -def _has_dense_moe_layers(args): - moe_layer_freq = getattr(args, "moe_layer_freq", None) - if moe_layer_freq is None: - return True - - if isinstance(moe_layer_freq, str): - try: - moe_layer_freq = ast.literal_eval(moe_layer_freq) - except (SyntaxError, ValueError): - return "0" in moe_layer_freq - - try: - return any(int(layer_freq) == 0 for layer_freq in moe_layer_freq) - except TypeError: - return int(moe_layer_freq) == 0 - - -def _is_moe_config(hf_config): - return any( - hasattr(hf_config, attr) - for attr in ( - "moe_intermediate_size", - "num_experts", - "n_routed_experts", - "num_local_experts", - ) - ) - - def validate_args(args): """Run megatron's own validate_args plus slime-specific megatron validations.""" - _megatron_validate_args(args) # always use varlen @@ -100,52 +40,21 @@ def equal(x, y): if hasattr(hf_config, "text_config"): hf_config = hf_config.text_config - # Some models store rope_theta inside rope_parameters dict rather than - # as a top-level attribute. Prefer the dict value when available so - # the validation doesn't compare against a stale class default. - rope_params = getattr(hf_config, "rope_parameters", None) - if isinstance(rope_params, dict) and "rope_theta" in rope_params: - _hf_rope_theta = rope_params["rope_theta"] - else: - _hf_rope_theta = getattr(hf_config, "rope_theta", None) - - validate_dense_ffn = not _is_moe_config(hf_config) or _has_dense_moe_layers(args) - for hf_config_name, megatron_config_name, compare_fn in [ ("hidden_size", "hidden_size", equal), ("num_attention_heads", "num_attention_heads", equal), ("num_hidden_layers", "num_layers", equal), ("intermediate_size", "ffn_hidden_size", equal), - ("moe_intermediate_size", "moe_ffn_hidden_size", equal), - ("shared_expert_intermediate_size", "moe_shared_expert_intermediate_size", equal), ("tie_word_embeddings", "untie_embeddings_and_output_weights", lambda x, y: not x == y), ("rms_norm_eps", "norm_epsilon", equal), - ("rms_norm_eps", "layernorm_epsilon", equal), + ("rope_theta", "rotary_base", equal), ]: if hasattr(hf_config, hf_config_name): - if not hasattr(args, megatron_config_name): - logger.warning( - f"Megatron args missing '{megatron_config_name}' (mapped from HF '{hf_config_name}') , " - f"Skip validate" + if not compare_fn(getattr(hf_config, hf_config_name), getattr(args, megatron_config_name)): + errors.append( + f"{hf_config_name} in hf config {getattr(hf_config, hf_config_name)} is not equal to " + f"{megatron_config_name} {getattr(args, megatron_config_name)}, please check the config." ) - continue - if hf_config_name == "intermediate_size" and not validate_dense_ffn: - continue - - # if hasattr(hf_config, hf_config_name) and hasattr(args, megatron_config_name): - # if not compare_fn(getattr(hf_config, hf_config_name), getattr(args, megatron_config_name)): - # errors.append( - # f"{hf_config_name} in hf config {getattr(hf_config, hf_config_name)} is not equal to " - # f"{megatron_config_name} {getattr(args, megatron_config_name)}, please check the config." - # ) - - # Validate rope_theta separately using the resolved value - if _hf_rope_theta is not None: - if not equal(_hf_rope_theta, getattr(args, "rotary_base", None)): - errors.append( - f"rope_theta in hf config {_hf_rope_theta} is not equal to " - f"rotary_base {getattr(args, 'rotary_base', None)}, please check the config." - ) if len(errors) > 0: raise AssertionError("hf_validate_args failed: " + "; ".join(errors)) @@ -187,15 +96,14 @@ def megatron_parse_args(extra_args_provider, skip_hf_validate=False): """Parse megatron args, validate HF config, and set defaults.""" args = _megatron_parse_args(extra_args_provider=extra_args_provider, ignore_unknown_args=True) - hf_config = None if args.hf_checkpoint and not skip_hf_validate: hf_config = AutoConfig.from_pretrained(args.hf_checkpoint, trust_remote_code=True) _hf_validate_args(args, hf_config) - if not skip_hf_validate: - _validate_allgather_cp_supported(args, hf_config) - args.rank = 0 - args.world_size = args.actor_num_nodes * args.actor_num_gpus_per_node + if args.critic_train_only: + args.world_size = args.critic_num_nodes * args.critic_num_gpus_per_node + else: + args.world_size = args.actor_num_nodes * args.actor_num_gpus_per_node args = _set_default_megatron_args(args) return args diff --git a/slime/backends/megatron_utils/checkpoint.py b/slime/backends/megatron_utils/checkpoint.py index d4eb236936..8c7cd5317c 100644 --- a/slime/backends/megatron_utils/checkpoint.py +++ b/slime/backends/megatron_utils/checkpoint.py @@ -135,9 +135,7 @@ def _load_checkpoint_hf(ddp_model, optimizer, args, load_path: str): logger.info(f"Load checkpoint from HuggingFace model into Megatron (path={load_path})") with megatron_bridge_utils.patch_megatron_model(ddp_model): - bridge = megatron_bridge_utils.patch_auto_bridge_hf_config( - AutoBridge.from_hf_pretrained(load_path, trust_remote_code=True) - ) + bridge = AutoBridge.from_hf_pretrained(args.hf_checkpoint, trust_remote_code=True) bridge.load_hf_weights(ddp_model) # Copied from Megatron-core :: load_checkpoint (with simplifications) diff --git a/slime/backends/megatron_utils/cp_utils.py b/slime/backends/megatron_utils/cp_utils.py index b0eab9b6ab..d30de602a8 100644 --- a/slime/backends/megatron_utils/cp_utils.py +++ b/slime/backends/megatron_utils/cp_utils.py @@ -223,10 +223,7 @@ def slice_log_prob_with_cp( qkv_format: str = "thd", max_token_len: int | None = None, ) -> list[float] | torch.Tensor: - assert len(log_prob) == response_length, ( - f"log_prob length mismatch: len(log_prob)={len(log_prob)}, " - f"response_length={response_length}, total_length={total_length}" - ) + assert len(log_prob) == response_length cp_size = mpu.get_context_parallel_world_size() diff --git a/slime/backends/megatron_utils/data.py b/slime/backends/megatron_utils/data.py index 19db1f475a..36ef3dae99 100644 --- a/slime/backends/megatron_utils/data.py +++ b/slime/backends/megatron_utils/data.py @@ -72,7 +72,6 @@ def get_batch( assert max([t.size(0) for t in tokens]) <= max_seqlen tokens = [slice_with_cp(t, pad_token_id, qkv_format, max_seqlen) for t in tokens] tokens = torch.stack(tokens) - packed_seq_params = None elif qkv_format == "thd": if allgather_cp: @@ -164,14 +163,18 @@ def get_batch( multimodal_train_inputs = batch.get("multimodal_train_inputs", None) if multimodal_train_inputs is not None: multimodal_data = {} # key -> concatenated tensor + multimodal_num_items = {} # key -> list of item counts per sequence for mm_input_dict in multimodal_train_inputs: if mm_input_dict is not None: for key, mm_tensor in mm_input_dict.items(): if key not in multimodal_data: multimodal_data[key] = mm_tensor + multimodal_num_items[key] = [mm_tensor.size(0)] else: multimodal_data[key] = torch.cat([multimodal_data[key], mm_tensor], dim=0) + multimodal_num_items[key].append(mm_tensor.size(0)) batch["multimodal_train_inputs"] = multimodal_data + batch["multimodal_num_items"] = multimodal_num_items return batch @@ -610,32 +613,53 @@ def log_perf_data(rollout_id: int, args: Namespace) -> None: ) -def tensors_to_cpu(tensor_list): - """Move a list of GPU tensors to CPU for Ray object store transfer. - - Args: - tensor_list: List of GPU tensors, or None. - - Returns: - List of CPU tensors (detached), or None if input is None. +def sync_actor_critic_data( + args: Namespace, + rollout_data: RolloutBatch | None = None, + group: dist.ProcessGroup | None = None, +) -> None: """ - if tensor_list is None: - return None - return [t.detach().cpu() for t in tensor_list] - + Broadcast `values` (from critic) and optionally `log_probs`/`ref_log_probs` + (from actor) across PP ranks to align data dependencies. -def tensors_to_gpu(tensor_list, device=None): - """Move a list of CPU tensors back to GPU. - - Args: - tensor_list: List of CPU tensors, or None. - device: Target CUDA device. If None, uses current device. - - Returns: - List of GPU tensors, or None if input is None. + - Values are broadcast from src=1. + - Log-probs and ref-log-probs are broadcast from src=0 when KL is used. + Updates `rollout_data` in place with the synchronized tensors. """ - if tensor_list is None: - return None - if device is None: - device = torch.cuda.current_device() - return [t.to(device=device, dtype=torch.float32) for t in tensor_list] + log_probs_key = "log_probs" if not args.use_rollout_logprobs else "rollout_log_probs" + values, log_probs, ref_log_probs = map(rollout_data.get, ("values", log_probs_key, "ref_log_probs")) + + # return when not the pp last stage + if not values and not log_probs: + return + + handles = [] + + if not values: + values = [torch.empty_like(log_prob) for log_prob in log_probs] + for value in values: + handles.append(dist.broadcast(value, src=1, group=group, async_op=True)) + + if args.kl_coef != 0 or args.use_kl_loss: + if not log_probs: + log_probs = [torch.empty_like(value) for value in values] + if not ref_log_probs: + ref_log_probs = [torch.empty_like(value) for value in values] + for ref_log_prob, log_prob in zip(ref_log_probs, log_probs, strict=False): + handles.append(dist.broadcast(log_prob, src=0, group=group, async_op=True)) + handles.append(dist.broadcast(ref_log_prob, src=0, group=group, async_op=True)) + + for handle in handles: + handle.wait() + + rollout_data.update( + { + k: v + for k, v in { + "values": values, + log_probs_key: log_probs, + "ref_log_probs": ref_log_probs, + }.items() + if v is not None + } + ) diff --git a/slime/backends/megatron_utils/loss.py b/slime/backends/megatron_utils/loss.py index 256338fca2..e84de361c2 100644 --- a/slime/backends/megatron_utils/loss.py +++ b/slime/backends/megatron_utils/loss.py @@ -145,7 +145,7 @@ def get_responses( def _allgather_cp_redistribute( res: dict[str, list[torch.Tensor]], *, - logits_local_len: int, + logits: torch.Tensor, args: Namespace, total_lengths: list[int], response_lengths: list[int], @@ -162,7 +162,8 @@ def _allgather_cp_redistribute( Args: res: Dict mapping metric names to lists of per-sample tensors. - logits_local_len: Local sequence length on this rank. + logits: Model output used only to determine the local sequence length + (``logits.size(1)``). args: Configuration (needs ``qkv_format``). total_lengths: Total sequence lengths (prompt + response) per sample. response_lengths: Response segment lengths per sample. @@ -170,19 +171,12 @@ def _allgather_cp_redistribute( """ cp_group = mpu.get_context_parallel_group() cp_rank = mpu.get_context_parallel_rank() + + logits_local_len = logits.size(1) # logits shape: [1, T_local, ...] chunk_start = cp_rank * logits_local_len chunk_end = chunk_start + logits_local_len for key, values in res.items(): - # Skip keys where all values are None (e.g. entropy when not computed) - if all(v is None for v in values): - continue - - # Determine reference dtype/device from first non-None value - ref_value = next(v for v in values if v is not None) - ref_dtype = ref_value.dtype - ref_device = ref_value.device - # Reconstruct full response tensors with each rank's contiguous contribution full_resps = [] seq_start = 0 @@ -194,12 +188,12 @@ def _allgather_cp_redistribute( s = max(logit_global_start, chunk_start) e = min(logit_global_end, chunk_end) - if value is None or e <= s: + if e <= s: # This rank has no response logprobs for this sample full_resp = torch.zeros( response_length, - dtype=ref_dtype, - device=ref_device, + dtype=value.dtype, + device=value.device, requires_grad=True, ) else: @@ -228,159 +222,6 @@ def _allgather_cp_redistribute( res[key] = new_values -def _build_shifted_tokens( - T: int, - device: torch.device, - unconcat_tokens: list[torch.Tensor], - total_lengths: list[int], - response_lengths: list[int], - qkv_format: str, - max_seq_lens: list[int] | None, - allgather_cp: bool, -) -> torch.Tensor: - """Build shifted target tokens for the full packed/padded logits.""" - cp_size = mpu.get_context_parallel_world_size() - - # --- zigzag CP: completely different layout --- - if cp_size > 1 and not allgather_cp: - full_tokens = torch.zeros(T, dtype=torch.long, device=device) - end = 0 - for i, (tokens, total_length, response_length) in enumerate( - zip(unconcat_tokens, total_lengths, response_lengths, strict=False) - ): - max_seq_len = max_seq_lens[i] if max_seq_lens is not None else None - chunk_size_cp, chunks_offset, logits_offset, tokens_offset = get_logits_and_tokens_offset_with_cp( - total_length, response_length, qkv_format, max_seq_len - ) - for half, base in ((0, end), (1, end + chunk_size_cp)): - lo = logits_offset[half][0] - chunks_offset[half][0] - hi = logits_offset[half][1] - chunks_offset[half][0] - full_tokens[base + lo : base + hi] = tokens[tokens_offset[half][0] : tokens_offset[half][1]] - end += 2 * chunk_size_cp - return full_tokens - - # --- cp1 and allgather-CP both build global shifted tokens the same way --- - T_global = sum(total_lengths) if allgather_cp else T - full_tokens = torch.zeros(T_global, dtype=torch.long, device=device) - - if qkv_format == "thd" or allgather_cp: - offset = 0 - for tokens, total_length in zip(unconcat_tokens, total_lengths, strict=False): - full_tokens[offset : offset + total_length - 1] = tokens[1:total_length] - offset += total_length - else: # bshd, cp1 - for i, (tokens, total_length) in enumerate(zip(unconcat_tokens, total_lengths, strict=False)): - seq_start = max_seq_lens[i] * i - full_tokens[seq_start : seq_start + total_length - 1] = tokens[1:total_length] - - # allgather-CP: slice to local chunk - if allgather_cp: - cp_rank = mpu.get_context_parallel_rank() - chunk_start = cp_rank * T - chunk_end = chunk_start + T - if chunk_end <= T_global: - return full_tokens[chunk_start:chunk_end].contiguous() - local = torch.zeros(T, dtype=torch.long, device=device) - valid = T_global - chunk_start - if valid > 0: - local[:valid] = full_tokens[chunk_start:] - return local - - return full_tokens - - -def _extract_per_sample( - log_prob_full: torch.Tensor, - entropy_full: torch.Tensor | None, - total_lengths: list[int], - response_lengths: list[int], - qkv_format: str, - max_seq_lens: list[int] | None, - allgather_cp: bool, -) -> tuple[list[torch.Tensor], list[torch.Tensor | None]]: - """Slice per-sample response log-probs/entropy from full-length 1-D tensors.""" - cp_size = mpu.get_context_parallel_world_size() - log_probs_list: list[torch.Tensor] = [] - entropy_list: list[torch.Tensor] = [] - - if cp_size > 1 and not allgather_cp: - # zigzag CP - pos = 0 - for i, (total_length, response_length) in enumerate(zip(total_lengths, response_lengths, strict=False)): - max_seq_len = max_seq_lens[i] if max_seq_lens is not None else None - chunk_size_cp, chunks_offset, logits_offset, _tokens_offset = get_logits_and_tokens_offset_with_cp( - total_length, response_length, qkv_format, max_seq_len - ) - lo0 = logits_offset[0][0] - chunks_offset[0][0] - hi0 = logits_offset[0][1] - chunks_offset[0][0] - lo1 = logits_offset[1][0] - chunks_offset[1][0] - hi1 = logits_offset[1][1] - chunks_offset[1][0] - - lp = torch.cat( - [ - log_prob_full[pos + lo0 : pos + hi0], - log_prob_full[pos + chunk_size_cp + lo1 : pos + chunk_size_cp + hi1], - ], - dim=0, - ) - log_probs_list.append(lp) - if entropy_full is not None: - ent = torch.cat( - [ - entropy_full[pos + lo0 : pos + hi0], - entropy_full[pos + chunk_size_cp + lo1 : pos + chunk_size_cp + hi1], - ], - dim=0, - ) - entropy_list.append(ent) - pos += 2 * chunk_size_cp - - elif allgather_cp: - cp_rank = mpu.get_context_parallel_rank() - local_len = log_prob_full.size(0) - chunk_start = cp_rank * local_len - chunk_end = chunk_start + local_len - - seq_start = 0 - for total_length, response_length in zip(total_lengths, response_lengths, strict=False): - prompt_length = total_length - response_length - logit_global_start = seq_start + prompt_length - 1 - logit_global_end = seq_start + total_length - 1 - - s = max(logit_global_start, chunk_start) - e = min(logit_global_end, chunk_end) - if e <= s: - log_probs_list.append(torch.zeros((0,), dtype=log_prob_full.dtype, device=log_prob_full.device)) - if entropy_full is not None: - entropy_list.append(torch.zeros((0,), dtype=entropy_full.dtype, device=entropy_full.device)) - else: - log_probs_list.append(log_prob_full[s - chunk_start : e - chunk_start]) - if entropy_full is not None: - entropy_list.append(entropy_full[s - chunk_start : e - chunk_start]) - seq_start += total_length - - else: - # cp1 - if qkv_format == "thd": - offset = 0 - for total_length, response_length in zip(total_lengths, response_lengths, strict=False): - end = offset + total_length - start = end - response_length - log_probs_list.append(log_prob_full[start - 1 : end - 1]) - if entropy_full is not None: - entropy_list.append(entropy_full[start - 1 : end - 1]) - offset += total_length - else: # bshd - for i, (total_length, response_length) in enumerate(zip(total_lengths, response_lengths, strict=False)): - end = max_seq_lens[i] * i + total_length - start = end - response_length - log_probs_list.append(log_prob_full[start - 1 : end - 1]) - if entropy_full is not None: - entropy_list.append(entropy_full[start - 1 : end - 1]) - - return log_probs_list, entropy_list - - def get_log_probs_and_entropy( logits: torch.Tensor, *, @@ -394,63 +235,51 @@ def get_log_probs_and_entropy( ) -> dict[str, list[torch.Tensor]]: """Compute per-token log-probabilities (and optionally entropy) on responses. - Computes on the **full** logits ``[T, V]`` tensor at once (instead of - per-sample slicing) so backward traverses ``[T, V]`` only once, then - extracts per-sample response portions. + For each sample, extracts response-aligned logits and tokens, then computes + log-probabilities via softmax across the tensor-parallel group. Log-probs + are squeezed from `[R, 1]` to `[R]`. Entropy values are always appended + (even when `with_entropy=False`), but only included in the result dict + when requested. + + Args: + logits: Policy logits with shape `[1, T, V]`. + args: Configuration (temperature applied in `get_responses`). + unconcat_tokens: List of token tensors per sample. + total_lengths: Total sequence lengths per sample. + response_lengths: Response segment lengths per sample. + with_entropy: If True, include "entropy" key in result. + non_loss_data: Unused; kept for API compatibility. - When ``entropy_coef == 0``, entropy is computed under ``torch.no_grad()`` - to avoid retaining the computation graph and to skip cloning. + Returns: + Dict with key "log_probs" mapping to a list of `[R]` tensors per + sample. If `with_entropy` is True, also includes "entropy" key with + a list of `[R]` tensors. """ assert non_loss_data - qkv_format = args.qkv_format - - assert logits.dtype == torch.float32, f"{logits.dtype}" - assert len(logits.shape) == 3, f"{logits.shape}" - - if qkv_format == "thd": - assert logits.size(0) == 1, f"{logits.shape}" - logits = logits.squeeze(0) - else: - assert max_seq_lens is not None - logits = logits.view(-1, logits.size(-1)) - - # Apply rollout temperature scaling to logits to match rollout-time log-probs. - rollout_temperature = getattr(args, "rollout_temperature", 1.0) - if rollout_temperature != 1.0: - logits = logits / rollout_temperature - logits = logits.contiguous() - T = logits.size(0) - device = logits.device - tp_group = mpu.get_tensor_model_parallel_group() - chunk_size = args.log_probs_chunk_size - - # --- build full shifted-token target tensor --- - full_tokens = _build_shifted_tokens( - T, device, unconcat_tokens, total_lengths, response_lengths, qkv_format, max_seq_lens, args.allgather_cp - ) - - # --- compute on full [T,V] logits at once via calculate_log_probs_and_entropy --- - log_prob_full, entropy_full = calculate_log_probs_and_entropy( + log_probs_list = [] + entropy_list = [] + for logits_chunk, tokens_chunk in get_responses( logits, - full_tokens, - tp_group, - with_entropy=with_entropy, - chunk_size=chunk_size, - ) - log_prob_full = log_prob_full.squeeze(-1) # [T, 1] -> [T] - - # --- extract per-sample response portions --- - log_probs_list, entropy_list = _extract_per_sample( - log_prob_full, - entropy_full, - total_lengths, - response_lengths, - qkv_format, - max_seq_lens, - args.allgather_cp, - ) + args=args, + unconcat_tokens=unconcat_tokens, + total_lengths=total_lengths, + response_lengths=response_lengths, + max_seq_lens=max_seq_lens, + ): + log_prob, entropy = calculate_log_probs_and_entropy( + logits_chunk, + tokens_chunk, + mpu.get_tensor_model_parallel_group(), + with_entropy=with_entropy, + chunk_size=args.log_probs_chunk_size, + ) + + log_probs_list.append(log_prob.squeeze(-1)) + entropy_list.append(entropy) - res = {"log_probs": log_probs_list} + res = { + "log_probs": log_probs_list, + } if with_entropy: res["entropy"] = entropy_list @@ -458,14 +287,14 @@ def get_log_probs_and_entropy( if args.allgather_cp: _allgather_cp_redistribute( res, - logits_local_len=T, + logits=logits, args=args, total_lengths=total_lengths, response_lengths=response_lengths, max_seq_lens=max_seq_lens, ) - return torch.empty((0,), device=device), res + return torch.empty((0,), device=logits.device), res def get_values( @@ -517,7 +346,7 @@ def get_values( if args.allgather_cp: _allgather_cp_redistribute( res, - logits_local_len=logits.size(1), + logits=logits, args=args, total_lengths=total_lengths, response_lengths=response_lengths, @@ -581,10 +410,6 @@ def compute_advantages_and_returns(args: Namespace, rollout_data: RolloutBatch) Early returns if both `log_probs` and `values` are None (intermediate pipeline stages). - If ``args.custom_advantage_function_path`` is set, it is called after KL computation - and must populate ``rollout_data["advantages"]`` and - ``rollout_data["returns"]``. - Args: args: Configuration specifying estimator type, KL coefficient, normalization settings, and other hyperparameters. @@ -593,10 +418,7 @@ def compute_advantages_and_returns(args: Namespace, rollout_data: RolloutBatch) "total_lengths"). Modified in-place to add "advantages" and "returns" keys, each mapping to lists of tensors per sample. """ - rollout_log_probs: list[torch.Tensor] | None = rollout_data.get("rollout_log_probs") - log_probs: list[torch.Tensor] | None = ( - rollout_log_probs if args.use_rollout_logprobs else rollout_data.get("log_probs") - ) + log_probs: list[torch.Tensor] = rollout_data.get("rollout_log_probs" if args.use_rollout_logprobs else "log_probs") ref_log_probs: list[torch.Tensor] = rollout_data.get("ref_log_probs") rewards: list[float] = rollout_data.get("rewards") values: None | list[torch.Tensor] = rollout_data.get("values") @@ -611,7 +433,7 @@ def compute_advantages_and_returns(args: Namespace, rollout_data: RolloutBatch) if args.kl_coef == 0 or not log_probs: # when kl_coef is 0, we won't compute ref_log_prob - xs = log_probs or rollout_log_probs or values + xs = log_probs if log_probs is not None else values kl = [torch.zeros_like(x, dtype=torch.float32, device=x.device) for x in xs] else: kl = [ @@ -622,14 +444,8 @@ def compute_advantages_and_returns(args: Namespace, rollout_data: RolloutBatch) ) for i in range(len(log_probs)) ] - rollout_data["kl"] = kl - if args.custom_advantage_function_path is not None: - custom_adv_fn = load_function(args.custom_advantage_function_path) - custom_adv_fn(args, rollout_data) - advantages, returns = rollout_data["advantages"], rollout_data["returns"] - - elif args.advantage_estimator in ["grpo", "gspo"]: + if args.advantage_estimator in ["grpo", "gspo"]: rewards = torch.tensor(rewards, dtype=torch.float32, device=kl[0].device) returns = get_grpo_returns(rewards, kl) # TODO: is the copy necessary? @@ -825,7 +641,7 @@ def policy_loss_function( are enabled. """ advantages = torch.cat(batch["advantages"], dim=0) - old_log_probs = batch["rollout_log_probs"] if args.use_rollout_logprobs else batch.get("log_probs") + old_log_probs = batch["rollout_log_probs"] if args.use_rollout_logprobs else batch["log_probs"] response_lengths = batch["response_lengths"] total_lengths = batch["total_lengths"] @@ -842,11 +658,6 @@ def policy_loss_function( ) log_probs = log_probs_and_entropy["log_probs"] - if not args.use_rollout_logprobs and not old_log_probs: - old_log_probs = [log_prob.detach() for log_prob in log_probs] - train_log_probs_for_tis = batch.get("log_probs") - if not train_log_probs_for_tis: - train_log_probs_for_tis = [log_prob.detach() for log_prob in log_probs] # Pre-gather log probs if needed by OPSM or GSPO to avoid duplicate gathering need_full_log_probs = args.use_opsm or args.advantage_estimator == "gspo" @@ -915,7 +726,7 @@ def policy_loss_function( tis_kwargs = { "args": args, "pg_loss": pg_loss, - "train_log_probs": train_log_probs_for_tis, + "train_log_probs": batch["log_probs"], "rollout_log_probs": batch["rollout_log_probs"], "loss_masks": batch["loss_masks"], "total_lengths": total_lengths, @@ -1183,18 +994,10 @@ def loss_function( raise ValueError(f"Unknown loss type: {args.loss_type}") if args.recompute_loss_function: - loss, log = checkpoint(func, args, batch, logits, sum_of_sample_mean, use_reentrant=False) + loss, log = checkpoint(func, args, batch, logits, sum_of_sample_mean) else: loss, log = func(args, batch, logits, sum_of_sample_mean) - # With allgather-CP, some CP ranks may have no loss-contributing tokens (e.g., all - # padding). Without this, gradient doesn't flow through their attention path, so - # the CP gather's backward (reduce-scatter) is not called, deadlocking other CP - # ranks that call it. Adding this zero loss forces autograd to traverse the full - # graph on every rank without changing gradient values. - if args.allgather_cp and mpu.get_context_parallel_world_size() > 1: - loss = loss + 0 * logits.sum() - # Here we need to divide by cp_size because to cancel the multiply in Megatron. global_batch_size = batch.get("dynamic_global_batch_size", args.global_batch_size) if not args.calculate_per_token_loss: diff --git a/slime/backends/megatron_utils/megatron_patch/__init__.py b/slime/backends/megatron_utils/megatron_patch/__init__.py deleted file mode 100644 index 8693ff85a0..0000000000 --- a/slime/backends/megatron_utils/megatron_patch/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import megatron_chunked_grad_coalesce_patch # noqa: F401 diff --git a/slime/backends/megatron_utils/megatron_patch/megatron_chunked_grad_coalesce_patch.py b/slime/backends/megatron_utils/megatron_patch/megatron_chunked_grad_coalesce_patch.py deleted file mode 100644 index f7ecceb2dd..0000000000 --- a/slime/backends/megatron_utils/megatron_patch/megatron_chunked_grad_coalesce_patch.py +++ /dev/null @@ -1,146 +0,0 @@ -# Patch _allreduce_non_tensor_model_parallel_grads (and its legacy alias -# _allreduce_layernorm_grads) in megatron.core.distributed.finalize_model_grads -# to coalesce/all_reduce TP-side grads in size-bounded chunks instead of one -# large _flatten_dense_tensors(grads). Lowers the peak contiguous-memory -# allocation during TP-side grad sync, avoiding OOM under allocator -# fragmentation when the combined grad buffer would otherwise be very large. -# SUM/AVG are element-wise, so chunking is mathematically equivalent. -# Chunk size: SLIME_GRAD_COALESCE_CHUNK_BYTES, default 1 GiB. -# -# Cross-compatible across the Megatron-LM versions slime is run against: -# the core_v0.13.0 line (DDP config exposes `use_custom_fsdp`, `_get_main_grad_attr` -# takes `(param, use_custom_fsdp)`, target function takes `(model, config)`) and -# the post-core_v0.15.0rc7 dev line (`use_megatron_fsdp`, single-arg -# `_get_main_grad_attr`, `(model, config, tp_group)`). API differences are -# resolved at runtime — no version-conditional imports. - -import inspect -import logging -import os -import sys -import warnings - -logger = logging.getLogger(__name__) - -try: - import torch - from megatron.core import parallel_state - from megatron.core.distributed.finalize_model_grads import ( - _flatten_dense_tensors, - _get_main_grad_attr, - _reshard_if_dtensor, - _unflatten_dense_tensors, - _unshard_if_dtensor, - get_attr_wrapped_model, - ) - - # post-core_v0.15.0rc7 dev takes (param); core_v0.13.0 line takes - # (param, use_custom_fsdp=False). - _gma_takes_fsdp_arg = len(inspect.signature(_get_main_grad_attr).parameters) >= 2 - - def _grad_attr(param, fsdp_on): - if _gma_takes_fsdp_arg: - return _get_main_grad_attr(param, fsdp_on) - return _get_main_grad_attr(param) - - def _fsdp_flag(ddp_config): - return bool(getattr(ddp_config, "use_megatron_fsdp", False) or getattr(ddp_config, "use_custom_fsdp", False)) - - _chunk_bytes = int(os.environ.get("SLIME_GRAD_COALESCE_CHUNK_BYTES") or (1 << 30)) - - def _split_into_chunks(params, grads, target_bytes): - """Greedy split keeping params/grads aligned. A single grad larger - than target_bytes is placed alone in its own chunk.""" - chunks, cur_p, cur_g, cur_b = [], [], [], 0 - for p, g in zip(params, grads, strict=False): - gb = g.numel() * g.element_size() - if cur_g and cur_b + gb > target_bytes: - chunks.append((cur_p, cur_g)) - cur_p, cur_g, cur_b = [], [], 0 - cur_p.append(p) - cur_g.append(g) - cur_b += gb - if cur_g: - chunks.append((cur_p, cur_g)) - return chunks - - def _allreduce_non_tensor_model_parallel_grads(model, config, tp_group=None): - # post-core_v0.15.0rc7 dev passes tp_group; core_v0.13.0 line omits it. - # Default-fill from parallel_state so the same body works for both call sites. - if tp_group is None: - tp_group = parallel_state.get_tensor_model_parallel_group() - if tp_group.size() <= 1: - return - - params_sum, grads_sum = [], [] - params_avg, grads_avg = [], [] - ddp_config = None - for model_chunk in model: - ddp_config = model_chunk.ddp_config - fsdp_on = _fsdp_flag(ddp_config) - for name, param in get_attr_wrapped_model(model_chunk, "named_parameters")(): - if not param.requires_grad: - continue - if getattr(param, "average_gradients_across_tp_domain", False): - target_params, target_grads = params_avg, grads_avg - elif (config.sequence_parallel and getattr(param, "sequence_parallel", False)) or ( - config.qk_layernorm and ("q_layernorm" in name or "k_layernorm" in name) - ): - target_params, target_grads = params_sum, grads_sum - else: - continue - - grad_attr = _grad_attr(param, fsdp_on) - grad = getattr(param, grad_attr) - if grad is None: - continue - target_params.append(param) - if fsdp_on and hasattr(grad, "_local_tensor"): - target_grads.append(grad._local_tensor.data) - else: - target_grads.append(_unshard_if_dtensor(grad).data) - - for params, grads, op in ( - (params_sum, grads_sum, torch.distributed.ReduceOp.SUM), - (params_avg, grads_avg, torch.distributed.ReduceOp.AVG), - ): - if not grads: - continue - fsdp_on = _fsdp_flag(ddp_config) - for p_chunk, g_chunk in _split_into_chunks(params, grads, _chunk_bytes): - coalesced = _flatten_dense_tensors(g_chunk) - torch.distributed.all_reduce(coalesced, op=op, group=tp_group) - for param, buf, synced in zip( - p_chunk, g_chunk, _unflatten_dense_tensors(coalesced, g_chunk), strict=False - ): - buf.copy_(synced) - grad_attr = _grad_attr(param, fsdp_on) - orig_grad = getattr(param, grad_attr) - if fsdp_on and hasattr(orig_grad, "_local_tensor"): - # buf already aliases orig_grad._local_tensor.data; - # restore original DTensor wrapper (post-rc7 dev semantics). - setattr(param, grad_attr, orig_grad) - else: - setattr(param, grad_attr, _reshard_if_dtensor(buf, orig_grad)) - del coalesced - - # The parent package re-exports a same-named function, shadowing the - # submodule attribute. Pull the real module out of sys.modules to setattr. - _fmg = sys.modules["megatron.core.distributed.finalize_model_grads"] - _fmg._allreduce_non_tensor_model_parallel_grads = _allreduce_non_tensor_model_parallel_grads - _fmg._allreduce_layernorm_grads = _allreduce_non_tensor_model_parallel_grads - - logger.info( - "slime grad coalesce patch applied to " - "megatron.core.distributed.finalize_model_grads." - "_allreduce_non_tensor_model_parallel_grads (chunk=%d MiB)", - _chunk_bytes // (1 << 20), - ) - -except ImportError as exc: - warnings.warn( - f"slime grad coalesce patch not applied — Megatron import failed ({exc!r}). " - "If this is a Megatron upgrade, the symbol layout may have changed; " - "without this patch, large-model TP grad sync may OOM.", - stacklevel=2, - ) diff --git a/slime/backends/megatron_utils/megatron_to_hf/processors/quantizer_fp8.py b/slime/backends/megatron_utils/megatron_to_hf/processors/quantizer_fp8.py index f97cfd6935..203f60eff0 100644 --- a/slime/backends/megatron_utils/megatron_to_hf/processors/quantizer_fp8.py +++ b/slime/backends/megatron_utils/megatron_to_hf/processors/quantizer_fp8.py @@ -9,8 +9,7 @@ def quantize_params_fp8(args, megatron_name, converted_named_params, quantization_config): assert quantization_config["quant_method"] == "fp8" - fmt = quantization_config.get("fmt", "e4m3") - assert fmt == "e4m3", f"Unsupported FP8 format: {fmt}" + assert quantization_config["fmt"] == "e4m3" assert quantization_config["activation_scheme"] == "dynamic" weight_block_size = quantization_config.get("weight_block_size", None) @@ -76,10 +75,6 @@ def quantize_params_fp8(args, megatron_name, converted_named_params, quantizatio # indexer "self_attention.wq_b.weight", "self_attention.wk.weight", - # linear attention - "self_attention.linear_attn.in_proj_qkv.weight", - "self_attention.linear_attn.in_proj_z.weight", - "self_attention.linear_attn.out_proj.weight", ]: quantize_named_params = [] for converted_name, param in converted_named_params: diff --git a/slime/backends/megatron_utils/megatron_to_hf/qwen3_5.py b/slime/backends/megatron_utils/megatron_to_hf/qwen3_5.py index 2aabd86eba..822760f8dd 100644 --- a/slime/backends/megatron_utils/megatron_to_hf/qwen3_5.py +++ b/slime/backends/megatron_utils/megatron_to_hf/qwen3_5.py @@ -12,7 +12,11 @@ def _convert_mtp_layer(args, name, param, layer_idx): if "final_layernorm.weight" in name: return [("mtp.norm.weight", param)] if "eh_proj.weight" in name: - return [("mtp.fc.weight", param)] + if param.dim() < 2: + raise ValueError(f"eh_proj weight expects 2D tensor, got {param.shape}") + first_half, second_half = param.chunk(2, dim=1) + new_param = torch.cat([second_half, first_half], dim=1) + return [("mtp.fc.weight", new_param)] if "transformer_layer" in name: proxy_name = name.replace(f"mtp.layers.{layer_idx}.transformer_layer", f"decoder.layers.{layer_idx}") diff --git a/slime/backends/megatron_utils/model.py b/slime/backends/megatron_utils/model.py index f326b1d0d3..dd3724424d 100644 --- a/slime/backends/megatron_utils/model.py +++ b/slime/backends/megatron_utils/model.py @@ -18,10 +18,9 @@ from megatron.core.optimizer.optimizer import MegatronOptimizer from megatron.core.optimizer_param_scheduler import OptimizerParamScheduler from megatron.core.pipeline_parallel import get_forward_backward_func -from megatron.core.utils import get_model_config, unwrap_model +from megatron.core.utils import get_model_config from megatron.training.global_vars import get_args from megatron.training.training import get_model -from tqdm import tqdm from slime.utils import logging_utils from slime.utils.memory_utils import clear_memory @@ -29,107 +28,11 @@ from .checkpoint import load_checkpoint, save_checkpoint from .data import DataIterator, get_batch from .loss import loss_function -from .model_provider import get_model_provider_func +from .model_provider import get_model_provider_func, wrap_model_provider_with_freeze logger = logging.getLogger(__name__) -def _disable_tqdm_for_non_main_rank() -> bool: - return not ( - mpu.get_data_parallel_rank(with_context_parallel=True) == 0 - and mpu.get_tensor_model_parallel_rank() == 0 - and mpu.get_pipeline_model_parallel_rank() == mpu.get_pipeline_model_parallel_world_size() - 1 - ) - - -def _should_update_microbatch_pbar(model) -> bool: - if _disable_tqdm_for_non_main_rank(): - return False - - while hasattr(model, "module"): - model = model.module - vp_stage = getattr(model, "vp_stage", None) - if mpu.get_virtual_pipeline_model_parallel_world_size() is not None and vp_stage is not None: - return mpu.is_pipeline_last_stage(ignore_virtual=False, vp_stage=vp_stage) - return mpu.is_pipeline_last_stage(ignore_virtual=True) - - -def _wrap_forward_step_with_microbatch_pbar(forward_step_func, pbar): - if pbar is None: - return forward_step_func - - def wrapped_forward_step(*args, **kwargs): - result = forward_step_func(*args, **kwargs) - model = args[1] if len(args) > 1 else kwargs.get("model") - if model is not None and _should_update_microbatch_pbar(model): - pbar.update(1) - return result - - return wrapped_forward_step - - -def _iter_critic_output_layers(model: Sequence[DDP]): - for chunk_id, module in enumerate(unwrap_model(model)): - output_layer = getattr(module, "output_layer", None) - if output_layer is not None: - yield chunk_id, output_layer - - -def _critic_output_layer_needs_reinit(args: Namespace, model: Sequence[DDP], role: str) -> bool: - if role != "critic" or args.load is None: - return False - - from megatron.core.dist_checkpointing.serialization import load_tensors_metadata - from megatron.training.checkpointing import get_load_checkpoint_path_by_args - - checkpoint_path = Path(get_load_checkpoint_path_by_args(args)) - if not (checkpoint_path / ".metadata").is_file(): - return False - - checkpoint_metadata = load_tensors_metadata(str(checkpoint_path)) - for _chunk_id, output_layer in _iter_critic_output_layers(model): - for name in ("weight", "bias"): - param = getattr(output_layer, name, None) - if param is None: - continue - - param_name = f"output_layer.{name}" - ckpt_tensor_metadata = next( - ( - tensor_metadata - for key, tensor_metadata in checkpoint_metadata.items() - if key == param_name or key.endswith(f".{param_name}") - ), - None, - ) - expected_shape = tuple(param.shape) - checkpoint_shape = tuple(ckpt_tensor_metadata.global_shape) if ckpt_tensor_metadata is not None else None - if checkpoint_shape == expected_shape: - continue - - reason = ( - "missing from checkpoint metadata" - if checkpoint_shape is None - else f"shape mismatch checkpoint={checkpoint_shape} runtime={expected_shape}" - ) - logger.warning( - "Will reinitialize critic %s after checkpoint load because it is %s", - param_name, - reason, - ) - return True - - return False - - -@torch.no_grad() -def _reinitialize_critic_output_layer(model: Sequence[DDP]) -> None: - for _chunk_id, output_layer in _iter_critic_output_layers(model): - output_layer.weight.data.normal_(mean=0.0, std=0.02) - if output_layer.bias is not None: - output_layer.bias.data.zero_() - - def get_optimizer_param_scheduler(args: Namespace, optimizer: MegatronOptimizer) -> OptimizerParamScheduler: """Create and configure the optimizer learning-rate/weight-decay scheduler. @@ -202,7 +105,9 @@ def setup_model_and_optimizer( assert not args.moe_use_upcycling assert args.load is not None or args.pretrained_checkpoint is not None - model = get_model(get_model_provider_func(args, role), ModelType.encoder_or_decoder) + model = get_model( + wrap_model_provider_with_freeze(get_model_provider_func(args, role), args), ModelType.encoder_or_decoder + ) # Optimizer kwargs = {} @@ -319,17 +224,15 @@ def forward_step( packed_seq_params = batch["packed_seq_params"] total_lengths = batch["total_lengths"] response_lengths = batch["response_lengths"] - forward_kwargs = { - "input_ids": tokens, - "position_ids": None, - "attention_mask": None, - "labels": None, - "packed_seq_params": packed_seq_params, - "loss_mask": batch["full_loss_masks"], - } - if batch["multimodal_train_inputs"] is not None: - forward_kwargs.update(batch["multimodal_train_inputs"]) - output_tensor = model(**forward_kwargs) + output_tensor = model( + input_ids=tokens, + position_ids=None, + attention_mask=None, + labels=None, + packed_seq_params=packed_seq_params, + loss_mask=batch["full_loss_masks"], + **(batch["multimodal_train_inputs"] if batch["multimodal_train_inputs"] is not None else {}), + ) return output_tensor, partial( f, @@ -356,18 +259,9 @@ def forward_step( config.timers = None forward_data_store = [] num_steps_per_rollout = len(num_microbatches) - microbatch_pbar = tqdm( - total=sum(num_microbatches), - desc=f"{(store_prefix or getattr(model[0], 'role', 'actor')).rstrip('_')} forward", - unit="microbatch", - dynamic_ncols=True, - leave=False, - disable=_disable_tqdm_for_non_main_rank(), - ) - forward_step_with_progress = _wrap_forward_step_with_microbatch_pbar(forward_step, microbatch_pbar) for step_id in range(num_steps_per_rollout): forward_data_store += forward_backward_func( - forward_step_func=forward_step_with_progress, + forward_step_func=forward_step, data_iterator=data_iterator, model=model, num_microbatches=num_microbatches[step_id], @@ -375,7 +269,6 @@ def forward_step( micro_batch_size=args.micro_batch_size, forward_only=True, ) - microbatch_pbar.close() # Move model back to the train mode. for model_module in model: @@ -412,7 +305,6 @@ def train_one_step( optimizer: MegatronOptimizer, opt_param_scheduler: OptimizerParamScheduler, num_microbatches: int, - microbatch_pbar=None, ) -> tuple[dict[str, float], float]: """Execute a single pipeline-parallel training step. @@ -492,10 +384,9 @@ def forward_step(data_iterator: DataIterator, model: GPTModel, return_schedule_p if return_schedule_plan: assert not args.enable_mtp_training, "MTP training should not be enabled when using combined 1f1b" - position_ids = None output_tensor = model.build_schedule_plan( input_ids=batch["tokens"], - position_ids=position_ids, + position_ids=None, attention_mask=None, labels=None, packed_seq_params=batch["packed_seq_params"], @@ -511,12 +402,12 @@ def forward_step(data_iterator: DataIterator, model: GPTModel, return_schedule_p "loss_mask": batch["full_loss_masks"], } - if batch["multimodal_train_inputs"] is not None: - forward_kwargs.update(batch["multimodal_train_inputs"]) - if args.enable_mtp_training: forward_kwargs["mtp_kwargs"] = {"mtp_labels": batch["tokens"]} + if batch["multimodal_train_inputs"] is not None: + forward_kwargs.update(batch["multimodal_train_inputs"]) + output_tensor = model(**forward_kwargs) if os.environ.get("ENABLE_ROUTING_REPLAY", "0") == "1": @@ -527,7 +418,7 @@ def forward_step(data_iterator: DataIterator, model: GPTModel, return_schedule_p # Forward pass. forward_backward_func = get_forward_backward_func() losses_reduced = forward_backward_func( - forward_step_func=_wrap_forward_step_with_microbatch_pbar(forward_step, microbatch_pbar), + forward_step_func=forward_step, data_iterator=data_iterator, model=model, num_microbatches=num_microbatches, @@ -538,7 +429,6 @@ def forward_step(data_iterator: DataIterator, model: GPTModel, return_schedule_p ) valid_step = True - grad_norm = float("nan") if not getattr(args, "check_for_nan_in_loss_and_grad", True): found_inf_flag = optimizer.prepare_grads() if found_inf_flag: @@ -691,14 +581,6 @@ def train( pre_hook_enabled = False num_steps_per_rollout = len(num_microbatches) - microbatch_pbar = tqdm( - total=sum(num_microbatches), - desc=f"{getattr(model[0], 'role', 'actor')} train", - unit="microbatch", - dynamic_ncols=True, - leave=False, - disable=_disable_tqdm_for_non_main_rank(), - ) # Run training iterations till done. for step_id in range(num_steps_per_rollout): @@ -713,7 +595,6 @@ def train( optimizer, opt_param_scheduler, num_microbatches[step_id], - microbatch_pbar=microbatch_pbar, ) if step_id == 0: @@ -774,7 +655,7 @@ def train( # TODO: figure out why KL is not exactly zero when using PPO loss with KL clipping, and whether this is expected behavior or a bug. assert log_dict["train/ppo_kl"] < 1e-8, f"{log_dict=}" if accumulated_step_id == 0 and "train/kl_loss" in log_dict: - assert log_dict["train/kl_loss"] < 1e-8, f"{log_dict=}" + assert log_dict["train/kl_loss"] == 0.0, f"{log_dict=}" logger.info(f"{role_tag}step {accumulated_step_id}: {log_dict}") @@ -798,7 +679,6 @@ def train( rel_tol=0.01, abs_tol=0.01, ), f"grad norm mismatch: {grad_norm} != {expected_grad_norm}" - microbatch_pbar.close() # Close out pre-hooks if using distributed optimizer and overlapped param gather. if pre_hook_enabled: disable_forward_pre_hook(model) @@ -845,15 +725,14 @@ def save_hf_model(args, rollout_id: int, model: Sequence[DDP]) -> None: try: from megatron.bridge import AutoBridge - - from slime.utils.megatron_bridge_utils import patch_auto_bridge_hf_config, patch_megatron_model + from slime.utils.megatron_bridge_utils import patch_megatron_model path = Path(args.save_hf.format(rollout_id=rollout_id)) if should_log: logger.info(f"Saving model in HuggingFace format to {path}") - bridge = patch_auto_bridge_hf_config(AutoBridge.from_hf_pretrained(args.hf_checkpoint, trust_remote_code=True)) + bridge = AutoBridge.from_hf_pretrained(args.hf_checkpoint, trust_remote_code=True) path.mkdir(parents=True, exist_ok=True) @@ -886,7 +765,6 @@ def initialize_model_and_optimizer( if torch.version.hip: import megatron.core.dist_checkpointing.strategies.filesystem_async as filesystem_async_module - from slime.utils.rocm_checkpoint_writer import ROCmFileSystemWriterAsync filesystem_async_module.FileSystemWriterAsync = ROCmFileSystemWriterAsync @@ -894,7 +772,6 @@ def initialize_model_and_optimizer( model, optimizer, opt_param_scheduler = setup_model_and_optimizer(args, role) model[0].role = role - reinit_critic_output_layer = _critic_output_layer_needs_reinit(args, model, role) clear_memory() iteration, _ = load_checkpoint( model, @@ -903,10 +780,8 @@ def initialize_model_and_optimizer( checkpointing_context={}, skip_load_to_model_and_opt=False, ) - if reinit_critic_output_layer: - _reinitialize_critic_output_layer(model) - if (args.fp16 or args.bf16) and optimizer is not None: - optimizer.reload_model_params() clear_memory() + opt_param_scheduler.step(increment=iteration * args.global_batch_size) + return model, optimizer, opt_param_scheduler, iteration diff --git a/slime/backends/megatron_utils/model_provider.py b/slime/backends/megatron_utils/model_provider.py index 68e62bb8d7..31db8b0da8 100644 --- a/slime/backends/megatron_utils/model_provider.py +++ b/slime/backends/megatron_utils/model_provider.py @@ -17,7 +17,6 @@ from megatron.core.transformer.transformer_config import TransformerConfig from megatron.training.arguments import core_transformer_config_from_args -from slime.utils.megatron_bridge_utils import patch_auto_bridge_hf_config from slime.utils.misc import load_function @@ -55,7 +54,7 @@ def forward( return logits, None -def _get_model_provider_func( +def get_model_provider_func( args: argparse.Namespace, role: Literal["actor", "critic"] = "actor", ): @@ -84,9 +83,7 @@ def wrapped_model_provider( if args.megatron_to_hf_mode == "bridge": from megatron.bridge import AutoBridge - import slime_plugins.megatron_bridge # noqa: F401 # register custom bridges - - bridge = patch_auto_bridge_hf_config(AutoBridge.from_hf_pretrained(args.hf_checkpoint, trust_remote_code=True)) + bridge = AutoBridge.from_hf_pretrained(args.hf_checkpoint, trust_remote_code=True) provider = bridge.to_megatron_provider(load_weights=False) # TODO: we should not manually set this... provider.tensor_model_parallel_size = args.tensor_model_parallel_size @@ -94,29 +91,11 @@ def wrapped_model_provider( provider.expert_model_parallel_size = args.expert_model_parallel_size provider.expert_tensor_parallel_size = args.expert_tensor_parallel_size provider.sequence_parallel = args.sequence_parallel - provider.context_parallel_size = args.context_parallel_size - provider.variable_seq_lengths = args.variable_seq_lengths - if hasattr(args, "moe_token_dispatcher_type"): - provider.moe_token_dispatcher_type = args.moe_token_dispatcher_type if getattr(args, "decoder_first_pipeline_num_layers", None) is not None: provider.num_layers_in_first_pipeline_stage = args.decoder_first_pipeline_num_layers if getattr(args, "decoder_last_pipeline_num_layers", None) is not None: provider.num_layers_in_last_pipeline_stage = args.decoder_last_pipeline_num_layers provider.finalize() - - if role == "critic": - _original_provide = provider.provide - - def _critic_provide(pre_process=True, post_process=True, vp_stage=None): - model = _original_provide(pre_process=pre_process, post_process=post_process, vp_stage=vp_stage) - if post_process: - model.output_layer = LinearForLastLayer( - input_size=model.config.hidden_size, output_size=1, config=model.config - ) - return model - - return _critic_provide - return provider.provide def model_provider(pre_process: bool = True, post_process: bool = True, vp_stage: int | None = None) -> GPTModel: @@ -141,17 +120,7 @@ def model_provider(pre_process: bool = True, post_process: bool = True, vp_stage transformer_layer_spec = import_module(args.spec) # Allow the spec to be a function so that user can use customized Megatron easier. if callable(transformer_layer_spec): - result = transformer_layer_spec(args, config, vp_stage) - # If the result is itself a model provider (callable with pre_process param), - # delegate model construction to it directly (e.g. glm-omni VL model). - if callable(result) and "pre_process" in inspect.signature(result).parameters: - model = result(pre_process=pre_process, post_process=post_process, vp_stage=vp_stage) - if post_process and role == "critic": - model.output_layer = LinearForLastLayer( - input_size=config.hidden_size, output_size=1, config=config - ) - return model - transformer_layer_spec = result + transformer_layer_spec = transformer_layer_spec(args, config, vp_stage) else: if args.num_experts: # Define the decoder block spec @@ -240,21 +209,13 @@ def model_provider(pre_process: bool = True, post_process: bool = True, vp_stage def wrap_model_provider_with_freeze(original_provider, args): - def wrapped_provider( - pre_process=True, - post_process=True, - **kwargs, - ): + def wrapped_provider(pre_process=True, post_process=True, vp_stage=None): sig = inspect.signature(original_provider) - provider_kwargs = { - "pre_process": pre_process, - "post_process": post_process, - } - for key in ["vp_stage", "config", "pg_collection"]: - if key in sig.parameters: - provider_kwargs[key] = kwargs.get(key, None) + if "vp_stage" in sig.parameters: + model = original_provider(pre_process=pre_process, post_process=post_process, vp_stage=vp_stage) + else: + model = original_provider(pre_process=pre_process, post_process=post_process) - model = original_provider(**provider_kwargs) freeze_model_params(model, args) return model @@ -262,12 +223,8 @@ def wrapped_provider( return wrapped_provider -def get_model_provider_func(args, role="actor"): - return wrap_model_provider_with_freeze(_get_model_provider_func(args, role), args) - - def freeze_model_params(model: GPTModel, args: argparse.Namespace): - if getattr(args, "only_train_params_name_list", None): + if args.only_train_params_name_list: for name, param in model.named_parameters(): param.requires_grad = False for pattern in args.only_train_params_name_list: @@ -275,7 +232,7 @@ def freeze_model_params(model: GPTModel, args: argparse.Namespace): param.requires_grad = True break - if getattr(args, "freeze_params_name_list", None): + if args.freeze_params_name_list: for name, param in model.named_parameters(): for pattern in args.freeze_params_name_list: if re.search(pattern, name): diff --git a/slime/backends/megatron_utils/sglang.py b/slime/backends/megatron_utils/sglang.py index 4c045c4817..97c82a31cd 100644 --- a/slime/backends/megatron_utils/sglang.py +++ b/slime/backends/megatron_utils/sglang.py @@ -1,9 +1,4 @@ # the file to manage all sglang deps in the megatron actor -# When sglang is installed we prefer its implementations; otherwise we -# fall back to API-compatible reimplementations in -# slime.backends.megatron_utils.weight_sync_utils. - -# ── FP8 quantisation helpers (sglang-only, no local fallback) ─────── try: from sglang.srt.layers.quantization.fp8_utils import quant_weight_ue8m0, transform_scale_ue8m0 from sglang.srt.model_loader.utils import should_deepgemm_weight_requant_ue8m0 @@ -12,29 +7,19 @@ transform_scale_ue8m0 = None should_deepgemm_weight_requant_ue8m0 = None -# ── monkey_patch_torch_reductions ─────────────────────────────────── try: from sglang.srt.utils.patch_torch import monkey_patch_torch_reductions except ImportError: - try: - from sglang.srt.patch_torch import monkey_patch_torch_reductions - except ImportError: - from .weight_sync_utils import monkey_patch_torch_reductions + from sglang.srt.patch_torch import monkey_patch_torch_reductions + + +from sglang.srt.utils import MultiprocessingSerializer -# ── MultiprocessingSerializer ─────────────────────────────────────── -try: - from sglang.srt.utils import MultiprocessingSerializer -except ImportError: - from .weight_sync_utils import MultiprocessingSerializer -# ── FlattenedTensorBucket ─────────────────────────────────────────── try: from sglang.srt.weight_sync.tensor_bucket import FlattenedTensorBucket # type: ignore[import] except ImportError: - try: - from sglang.srt.model_executor.model_runner import FlattenedTensorBucket # type: ignore[import] - except ImportError: - from .weight_sync_utils import FlattenedTensorBucket + from sglang.srt.model_executor.model_runner import FlattenedTensorBucket # type: ignore[import] __all__ = [ "quant_weight_ue8m0", diff --git a/slime/backends/megatron_utils/update_weight/common.py b/slime/backends/megatron_utils/update_weight/common.py index d46fef298a..bac46519d8 100644 --- a/slime/backends/megatron_utils/update_weight/common.py +++ b/slime/backends/megatron_utils/update_weight/common.py @@ -12,38 +12,6 @@ from slime.utils.types import ParamInfo -def _cat_partitions( - partitions: list[torch.Tensor], partition_dim: int, stride: int -) -> torch.Tensor: - """Concatenate TP-gathered partitions, reversing Megatron-Core's strided layout. - - When ``stride == 1`` each rank holds a single contiguous shard and a plain - ``torch.cat`` along *partition_dim* is sufficient. - - When ``stride > 1``, Megatron-Core's ``_initialize_affine_weight_cpu`` - splits the master weight into ``world_size * stride`` equal sub-chunks and - assigns rank *r* the sub-chunks at indices ``r, r + world_size, - r + 2 * world_size, …`` (i.e. ``weight_list[rank::world_size]``). Each - rank therefore holds ``stride`` sub-chunks concatenated together. - - To reconstruct the original full tensor we split each rank's shard back - into ``stride`` sub-chunks and interleave them: - ``for i in range(stride): for r in range(world_size): append chunk[r][i]`` - """ - if stride == 1: - return torch.cat(partitions, dim=partition_dim) - - world_size = len(partitions) - # Each rank holds exactly `stride` sub-chunks concatenated along partition_dim. - rank_chunks = [p.chunk(stride, dim=partition_dim) for p in partitions] - # Reconstruct original ordering: chunk index (i * world_size + r) - ordered: list[torch.Tensor] = [] - for i in range(stride): - for r in range(world_size): - ordered.append(rank_chunks[r][i]) - return torch.cat(ordered, dim=partition_dim) - - def all_gather_param(name: str, param: torch.nn.Parameter) -> torch.Tensor: """ All-gather TP-sharded param to full tensor. expert_bias→param, non-TP/duplicated→param.data. @@ -66,23 +34,17 @@ def all_gather_param(name: str, param: torch.nn.Parameter) -> torch.Tensor: param_partitions = [torch.empty_like(param.data) for _ in range(tp_size)] dist.all_gather(param_partitions, param.data, group=tp_group) partition_dim = param.partition_dim - stride = getattr(param, "partition_stride", 1) - assert param.partition_stride == 1 or ( - param.partition_stride == 2 and "linear_fc1" in name - ), "partition_stride != 1 is not supported" + assert param.partition_stride == 1, "partition_stride != 1 is not supported" # TODO: here we did an extra copy during concat, maybe merge this with convert_to_hf is better? # TODO: check only GLU is used. - if "linear_fc1.weight" in name or "linear_fc1.bias" in name: + if "linear_fc1.weight" in name: param_partitions = [p.chunk(2, dim=0) for p in param_partitions] param_partitions = [p[0] for p in param_partitions] + [p[1] for p in param_partitions] - # GLU rechunking already reverses the stride=2 interleaving, so use - # plain concatenation from here on. - stride = 1 # this is bug in megatron's grouped moe. if "linear_fc2.weight" in name: if partition_dim == 0: partition_dim = 1 - param = _cat_partitions(param_partitions, partition_dim, stride) + param = torch.cat(param_partitions, dim=partition_dim) return param @@ -101,10 +63,10 @@ def all_gather_params_async( for info, param in param_infos_and_params: # Prepare async all_gather if "expert_bias" in info.name: - gather_tasks.append((info, param, None, None, None, 1)) + gather_tasks.append((info, param, None, None, None)) handles.append(None) elif not param.tensor_model_parallel or getattr(param, "parallel_mode", None) == "duplicated": - gather_tasks.append((info, param.data, None, None, None, 1)) + gather_tasks.append((info, param.data, None, None, None)) handles.append(None) else: # Start async all_gather @@ -117,8 +79,7 @@ def all_gather_params_async( param_partitions = [torch.empty_like(param.data) for _ in range(tp_size)] handle = dist.all_gather(param_partitions, param.data, group=tp_group, async_op=True) - partition_stride = getattr(param, "partition_stride", 1) - gather_tasks.append((info, None, handle, param_partitions, param.partition_dim, partition_stride)) + gather_tasks.append((info, None, handle, param_partitions, param.partition_dim)) handles.append(handle) # Phase 2: Wait for ALL async operations to complete at once @@ -129,24 +90,23 @@ def all_gather_params_async( # Phase 3: Process all results after all communications are done gathered_params = [] - for info, direct_param, handle, param_partitions, partition_dim, partition_stride in gather_tasks: + for info, direct_param, handle, param_partitions, partition_dim in gather_tasks: if handle is None: # No all_gather needed param = direct_param else: # Process the gathered partitions (same logic as original all_gather_param) + assert partition_dim is not None, "partition_stride != 1 is not supported" # TODO: here we did an extra copy during concat, maybe merge this with convert_to_hf is better? # TODO: check only GLU is used. - if "linear_fc1.weight" in info.name or "linear_fc1.bias" in info.name: + if "linear_fc1.weight" in info.name: param_partitions = [p.chunk(2, dim=0) for p in param_partitions] param_partitions = [p[0] for p in param_partitions] + [p[1] for p in param_partitions] - # GLU rechunking already reverses the stride=2 interleaving. - partition_stride = 1 # this is bug in megatron's grouped moe. if "linear_fc2.weight" in info.name: if partition_dim == 0: partition_dim = 1 - param = _cat_partitions(param_partitions, partition_dim, partition_stride) + param = torch.cat(param_partitions, dim=partition_dim) gathered_params.append(param) @@ -171,10 +131,7 @@ def named_params_and_buffers( def _maybe_get_cpu_backup(x: torch.Tensor): - try: - from torch_memory_saver import torch_memory_saver - except Exception: # noqa: BLE001 - native lib may be unavailable (e.g. vLLM backend) - return x + from torch_memory_saver import torch_memory_saver if (cpu_tensor := torch_memory_saver.get_cpu_backup(x)) is not None: return cpu_tensor diff --git a/slime/backends/megatron_utils/update_weight/hf_weight_iterator_bridge.py b/slime/backends/megatron_utils/update_weight/hf_weight_iterator_bridge.py index 9ea728697b..01266aacef 100644 --- a/slime/backends/megatron_utils/update_weight/hf_weight_iterator_bridge.py +++ b/slime/backends/megatron_utils/update_weight/hf_weight_iterator_bridge.py @@ -44,9 +44,7 @@ def __init__(self, *args, **kwargs): import slime_plugins.megatron_bridge # noqa: F401 - self._bridge = megatron_bridge_utils.patch_auto_bridge_hf_config( - AutoBridge.from_hf_pretrained(self.args.hf_checkpoint, trust_remote_code=True) - ) + self._bridge = AutoBridge.from_hf_pretrained(self.args.hf_checkpoint, trust_remote_code=True) _patch_bridge_expert_cache_to_cpu() def get_hf_weight_chunks(self, megatron_local_weights): @@ -82,8 +80,6 @@ def _streaming_quantized(): def _process_conversion_tasks(vanilla_conversion_tasks, new_weight_dict): def _handle_one(task): - if task is None: - return None if task.param_weight is None: return task diff --git a/slime/backends/megatron_utils/update_weight/hf_weight_iterator_direct.py b/slime/backends/megatron_utils/update_weight/hf_weight_iterator_direct.py index cd1976f90c..a353e353fe 100644 --- a/slime/backends/megatron_utils/update_weight/hf_weight_iterator_direct.py +++ b/slime/backends/megatron_utils/update_weight/hf_weight_iterator_direct.py @@ -170,6 +170,7 @@ def _get_megatron_local_param_infos(args: Namespace, model: Sequence[torch.nn.Mo continue for name, info in infos.items(): if name in param_infos: + assert args.mtp_num_layers is not None old_info = param_infos[name] if old_info.src_rank > src_rank: param_infos[name] = info diff --git a/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py b/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py index c504212f64..7b5b7817f1 100644 --- a/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py +++ b/slime/backends/megatron_utils/update_weight/update_weight_from_distributed.py @@ -1,9 +1,5 @@ -import logging -import torch.multiprocessing as mp -import os import socket import time -import traceback from argparse import Namespace from collections.abc import Callable, Mapping, Sequence @@ -20,155 +16,6 @@ from ..megatron_to_hf import convert_to_hf from .common import all_gather_param, named_params_and_buffers -logger = logging.getLogger(__name__) - - -# --------------------------------------------------------------------------- -# NcclBridge: isolate vLLM's PyNcclCommunicator in a subprocess so that it -# never coexists with torch.distributed NCCL groups in the Megatron trainer. -# -# vLLM's weight transfer uses raw NCCL (PyNcclCommunicator) which conflicts -# with torch.distributed's NCCL backend when both exist in the same process -# (see https://github.com/vllm-project/vllm/issues/5477). sglang avoids -# this because it uses torch.distributed process groups for weight sync. -# --------------------------------------------------------------------------- - - -def _nccl_bridge_worker(conn, master_address, master_port, world_size, device, cvd, env_snapshot): - """Subprocess entry-point: creates PyNcclCommunicator and serves requests. - - GPU tensors are shared from the parent via CUDA IPC (torch.multiprocessing - handles this transparently). No GPU→CPU→GPU copies are needed. - - Protocol over *conn* (multiprocessing.Connection): - parent → child: - {"op": "broadcast", "tensors": [gpu_tensor, ...]} - {"op": "send_packed", "named_tensors": [(name, gpu_tensor), ...]} - None → shutdown - child → parent: - "ready" (after init) - "ok" (after each op) - "error: " - """ - try: - os.environ.update(env_snapshot) - if cvd: - os.environ["CUDA_VISIBLE_DEVICES"] = cvd - - import torch - import torch.multiprocessing # ensure CUDA IPC reducers are registered - torch.cuda.set_device(device) - - from vllm.distributed.device_communicators.pynccl import PyNcclCommunicator - from vllm.distributed.utils import StatelessProcessGroup - - pg = StatelessProcessGroup.create( - host=master_address, port=master_port, rank=0, world_size=world_size, - ) - comm = PyNcclCommunicator(pg, device=device) - - conn.send("ready") - - while True: - cmd = conn.recv() - if cmd is None: - break - - op = cmd["op"] - if op == "broadcast": - for t in cmd["tensors"]: - comm.broadcast(t, src=0, stream=torch.cuda.current_stream()) - torch.cuda.synchronize() - conn.send("ok") - - elif op == "send_packed": - from vllm.distributed.weight_transfer.nccl_engine import ( - NCCLTrainerSendWeightsArgs, - NCCLWeightTransferEngine, - ) - - trainer_args = NCCLTrainerSendWeightsArgs( - group=comm, - packed=True, - ) - NCCLWeightTransferEngine.trainer_send_weights( - iterator=iter(cmd["named_tensors"]), - trainer_args=trainer_args, - ) - torch.cuda.synchronize() - conn.send("ok") - - except Exception as e: - try: - conn.send(f"error: {e}") - except Exception: - pass - traceback.print_exc() - - -class _NcclBridge: - """Runs vLLM's PyNcclCommunicator in a separate subprocess. - - This prevents NCCL communicator conflicts with torch.distributed groups - that already exist in the Megatron trainer process. GPU tensors are shared - with the subprocess via CUDA IPC (handled transparently by - torch.multiprocessing), avoiding any GPU→CPU→GPU copies. - """ - - def __init__(self, master_address: str, master_port: int, world_size: int, device: int): - ctx = mp.get_context("spawn") - self._parent_conn, child_conn = ctx.Pipe() - - # Pass the full environment so the subprocess inherits all NCCL, CUDA, - # and networking settings from the trainer (set by Ray runtime_env). - env_snapshot = dict(os.environ) - cvd = os.environ.get("CUDA_VISIBLE_DEVICES", "") - - self._process = ctx.Process( - target=_nccl_bridge_worker, - args=(child_conn, master_address, master_port, world_size, device, cvd, env_snapshot), - daemon=True, - ) - self._process.start() - - msg = self._parent_conn.recv() - if isinstance(msg, str) and msg.startswith("error:"): - raise RuntimeError(f"NcclBridge init failed: {msg}") - if msg != "ready": - raise RuntimeError(f"NcclBridge init unexpected response: {msg}") - logger.info("NcclBridge ready (pid=%d, device=%d)", self._process.pid, device) - - def broadcast_tensors(self, tensors: list[torch.Tensor]) -> None: - """Broadcast a list of tensors (one-by-one) via the bridge subprocess.""" - gpu_tensors = [t.contiguous() for t in tensors] - self._parent_conn.send({"op": "broadcast", "tensors": gpu_tensors}) - self._wait_ok("broadcast_tensors") - - def send_weights_packed(self, named_tensors: list[tuple[str, torch.Tensor]]) -> None: - """Send weights using vLLM's packed broadcast protocol.""" - gpu_pairs = [] - for name, t in named_tensors: - data = t.data if hasattr(t, "data") else t - gpu_pairs.append((name, data.contiguous())) - self._parent_conn.send({"op": "send_packed", "named_tensors": gpu_pairs}) - self._wait_ok("send_weights_packed") - - def _wait_ok(self, label: str, timeout: float = 600.0) -> None: - if not self._parent_conn.poll(timeout): - raise TimeoutError(f"NcclBridge {label} timed out after {timeout}s") - msg = self._parent_conn.recv() - if msg != "ok": - raise RuntimeError(f"NcclBridge {label} failed: {msg}") - - def shutdown(self) -> None: - try: - self._parent_conn.send(None) - self._process.join(timeout=30) - except Exception: - pass - if self._process.is_alive(): - self._process.terminate() - class UpdateWeightFromDistributed: """ @@ -231,14 +78,6 @@ def connect_rollout_engines( engine_gpu_counts=engine_gpu_counts, ) - def disconnect_rollout_engines(self) -> None: - if not getattr(self, "_is_pp_src_rank", False) or self._model_update_groups is None: - return - disconnect_rollout_engines_from_distributed( - self.args, self._group_name, self._model_update_groups, self.rollout_engines - ) - self._model_update_groups = None - @torch.no_grad() def update_weights(self) -> None: """ @@ -259,52 +98,34 @@ def update_weights(self) -> None: ) dist.barrier(group=get_gloo_group()) - use_vllm_packed = self._use_vllm_packed() - if use_vllm_packed and self._is_pp_src_rank: - logger.info("Using vLLM packed weight sync (one-shot metadata + trainer_send_weights)") - if use_vllm_packed: - # vLLM packed path: gather all non-expert params, one-shot update (aligned with vLLM New Weight Syncing) - converted_named_tensors = [] - for name, param in named_params_and_buffers(self.args, self.model): - if ".experts." in name: - continue - param = all_gather_param(name, param) - if self._is_pp_src_rank: - converted_named_tensors += convert_to_hf( - self.args, self.model_name, name, param, self.quantization_config - ) - if converted_named_tensors and self._is_pp_src_rank: - self._update_weights_vllm_packed(converted_named_tensors) - else: - buffer_size = 0 - converted_named_tensors = [] - pbar = tqdm(desc=f"[{self._group_name}] Update weights", total=0) if self._is_pp_src_rank else None - - for name, param in named_params_and_buffers(self.args, self.model): - if ".experts." in name: - continue - buffer_size = self._update_weight_from_distributed( - name, param, converted_named_tensors, buffer_size, pbar=pbar - ) + buffer_size = 0 + converted_named_tensors = [] + # non expert params + pbar = tqdm(desc=f"[{self._group_name}] Update weights", total=0) if self._is_pp_src_rank else None + + for name, param in named_params_and_buffers(self.args, self.model): + if ".experts." in name: + continue + buffer_size = self._update_weight_from_distributed( + name, param, converted_named_tensors, buffer_size, pbar=pbar + ) - if converted_named_tensors: - self._update_bucket_weights_from_distributed(converted_named_tensors, pbar=pbar) + if converted_named_tensors: + self._update_bucket_weights_from_distributed(converted_named_tensors, pbar=pbar) dist.barrier(group=get_gloo_group()) - if not use_vllm_packed: - buffer_size = 0 - named_tensors = [] - pbar = tqdm(desc=f"[{self._group_name}] Update weights (experts)", total=0) if self._is_pp_src_rank else None - for name, param in named_params_and_buffers(self.args, self.model): - if ".experts." not in name: - continue - buffer_size = self._update_expert_weight_from_distributed( - name, param, named_tensors, buffer_size, pbar=pbar - ) + buffer_size = 0 + named_tensors = [] + for name, param in named_params_and_buffers(self.args, self.model): + if ".experts." not in name: + continue + buffer_size = self._update_expert_weight_from_distributed( + name, param, named_tensors, buffer_size, pbar=pbar + ) - if named_tensors: - self._update_expert_bucket_weights_from_distributed(named_tensors, pbar=pbar) + if named_tensors: + self._update_expert_bucket_weights_from_distributed(named_tensors, pbar=pbar) dist.barrier(group=get_gloo_group()) if dist.get_rank() == 0: @@ -342,41 +163,6 @@ def _update_weight_from_distributed( buffer_size += param_size return buffer_size - def _use_vllm_packed(self) -> bool: - """Use vLLM packed weight transfer (one-shot metadata + trainer_send_weights).""" - if not _is_vllm_backend(self.args): - return False - if not getattr(self.args, "vllm_weight_sync_packed", True): - return False - # MoE models need expert path, skip packed - if any(".experts." in name for name, _ in named_params_and_buffers(self.args, self.model)): - return False - # compressed-tensors needs pre/post process - if self.quantization_config and self.quantization_config.get("quant_method") == "compressed-tensors": - return False - return True - - def _update_weights_vllm_packed( - self, converted_named_tensors: list[tuple[str, torch.Tensor]] - ) -> None: - """Single-shot vLLM weight update using packed broadcast (aligned with vLLM New Weight Syncing).""" - while not ray.get(self.rollout_engine_lock.acquire.remote()): - time.sleep(0.1) - - try: - refs = update_weights_from_distributed( - self._group_name, - self._model_update_groups, - self.weight_version, - self.rollout_engines, - converted_named_tensors, - use_vllm=True, - packed=True, - ) - ray.get(refs) - finally: - ray.get(self.rollout_engine_lock.release.remote()) - def _update_expert_weight_from_distributed( self, name: str, @@ -455,7 +241,6 @@ def _update_bucket_weights_from_distributed( self.weight_version, self.rollout_engines, converted_named_tensors, - use_vllm=_is_vllm_backend(self.args), ) ray.get(refs) @@ -464,10 +249,6 @@ def _update_bucket_weights_from_distributed( pbar.update(1) -def _is_vllm_backend(args: Namespace) -> bool: - return getattr(args, "rollout_backend", "sglang") == "vllm" - - def connect_rollout_engines_from_distributed( args: Namespace, group_name: str, @@ -480,11 +261,6 @@ def connect_rollout_engines_from_distributed( ``engine_gpu_counts`` gives the number of GPUs per engine. When engines have heterogeneous TP sizes (e.g. prefill TP=2, decode TP=4), each engine occupies a different number of ranks in the NCCL group. - - For vLLM backend, the trainer-side NCCL communicator is created inside a - separate subprocess (_NcclBridge) to avoid conflicts between vLLM's raw - NCCL (PyNcclCommunicator) and the torch.distributed NCCL groups that - Megatron already holds in this process. """ if engine_gpu_counts is None: engine_gpu_counts = [args.rollout_num_gpus_per_engine] * len(rollout_engines) @@ -500,50 +276,24 @@ def connect_rollout_engines_from_distributed( for c in engine_gpu_counts: cumulative.append(cumulative[-1] + c) - # Fire engine init remotes first (non-blocking Ray calls). refs = [ engine.init_weights_update_group.remote( - master_address=master_address, - master_port=master_port, - rank_offset=cumulative[i] + 1, - world_size=world_size, - group_name=group_name, + master_address, + master_port, + cumulative[i] + 1, + world_size, + group_name, backend="nccl", ) for i, engine in enumerate(rollout_engines) ] - - torch.cuda.synchronize() - torch.cuda.empty_cache() - - if _is_vllm_backend(args): - # vLLM uses StatelessProcessGroup + PyNcclCommunicator (raw NCCL). - # Creating PyNcclCommunicator in the Megatron trainer process would - # conflict with torch.distributed's NCCL groups (issue #5477). - # Instead, we spawn a bridge subprocess that owns the PyNcclCommunicator, - # keeping the trainer process free of raw NCCL communicators. - device = torch.cuda.current_device() - logger.info( - "vLLM weight transfer via NcclBridge: addr=%s port=%d " - "world_size=%d device=%d CVD=%s", - master_address, master_port, world_size, device, - os.environ.get("CUDA_VISIBLE_DEVICES", ""), - ) - model_update_groups = _NcclBridge( - master_address=master_address, - master_port=master_port, - world_size=world_size, - device=device, - ) - else: - model_update_groups = init_process_group( - backend="nccl", - init_method=f"tcp://{master_address}:{master_port}", - world_size=world_size, - rank=0, - group_name=group_name, - ) - + model_update_groups = init_process_group( + backend="nccl", + init_method=f"tcp://{master_address}:{master_port}", + world_size=world_size, + rank=0, + group_name=group_name, + ) ray.get(refs) return model_update_groups @@ -553,56 +303,36 @@ def disconnect_rollout_engines_from_distributed(args, group_name, model_update_g Destroy NCCL on training and engines. """ refs = [engine.destroy_weights_update_group.remote(group_name) for engine in rollout_engines] - if _is_vllm_backend(args): - if isinstance(model_update_groups, _NcclBridge): - model_update_groups.shutdown() - model_update_groups = None - else: - dist.destroy_process_group(model_update_groups) + dist.destroy_process_group(model_update_groups) ray.get(refs) def update_weights_from_distributed( group_name: str, - group, + group: dist.ProcessGroup, weight_version: int, rollout_engines: Sequence[ActorHandle], converted_named_tensors: Sequence[tuple[str, torch.Tensor]], - use_vllm: bool = False, - packed: bool = False, ) -> list[ObjectRef]: """ Send metadata (Ray), broadcast tensors (NCCL rank 0 → engines). - - For vLLM the *group* is an ``_NcclBridge`` instance (subprocess) so that - raw NCCL never runs inside the Megatron trainer process. - For sglang the *group* is a ``torch.distributed.ProcessGroup``. """ - kwargs = { - "names": [name for name, _ in converted_named_tensors], - "dtypes": [param.dtype for _, param in converted_named_tensors], - "shapes": [param.shape for _, param in converted_named_tensors], - "group_name": group_name, - "weight_version": str(weight_version), - } - if use_vllm: - kwargs["packed"] = packed - refs = [ - engine.update_weights_from_distributed.remote(**kwargs) + engine.update_weights_from_distributed.remote( + names=[name for name, _ in converted_named_tensors], + dtypes=[param.dtype for _, param in converted_named_tensors], + shapes=[param.shape for _, param in converted_named_tensors], + group_name=group_name, + weight_version=str(weight_version), + ) for engine in rollout_engines ] - if use_vllm and packed: - group.send_weights_packed(converted_named_tensors) - elif use_vllm: - group.broadcast_tensors([param.data for _, param in converted_named_tensors]) - else: - handles = [] - for _, param in converted_named_tensors: - handles.append(dist.broadcast(param.data, 0, group=group, async_op=True)) - for handle in handles: - handle.wait() + handles = [] + for _, param in converted_named_tensors: + handles.append(dist.broadcast(param.data, 0, group=group, async_op=True)) + for handle in handles: + handle.wait() return refs diff --git a/slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py b/slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py index dbba6aeb57..b53cc5bdc0 100644 --- a/slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py +++ b/slime/backends/megatron_utils/update_weight/update_weight_from_tensor.py @@ -158,16 +158,9 @@ def update_weights(self) -> None: for hf_named_tensors in self._hf_weight_iterator.get_hf_weight_chunks(megatron_local_weights): refs, long_lived_tensors = self._send_hf_params(hf_named_tensors) ray.get(refs) - # Free GPU tensors so the caching allocator can reuse the blocks, - # then release CUDA IPC cache entries whose consumers (sglang engines) - # have already closed their IPC handles. - del long_lived_tensors, hf_named_tensors - torch.cuda.ipc_collect() + del long_lived_tensors dist.barrier(group=get_gloo_group()) - # After the barrier all engines have returned, so every rank's last-chunk - # IPC handles are now released by the consumers. Clean them up. - torch.cuda.ipc_collect() # int4/fp4 post_process if rank == 0: @@ -219,6 +212,7 @@ def _send_to_colocated_engine( if ipc_gather_group is None: return [], None + # TODO improve long_live_tensors = [] if getattr(FlattenedTensorBucket, "supports_multi_dtypes", False): diff --git a/slime/backends/megatron_utils/update_weight/update_weight_from_tensor_vllm.py b/slime/backends/megatron_utils/update_weight/update_weight_from_tensor_vllm.py deleted file mode 100644 index d58d0377e7..0000000000 --- a/slime/backends/megatron_utils/update_weight/update_weight_from_tensor_vllm.py +++ /dev/null @@ -1,282 +0,0 @@ -""" -UpdateVLLMWeightFromTensor -========================== - -Update vLLM rollout engines using CUDA IPC (HTTP mode) when colocated on the -same GPU(s) as the trainer. This follows the vLLM RLHF HTTP IPC example: -https://docs.vllm.ai/en/stable/examples/rl/rlhf_http_ipc/ - -The flow: -1. Megatron params → TP all-gather → HF conversion (via HfWeightIteratorBase) -2. Send HF-named tensors to the vLLM server using - ``IPCWeightTransferEngine.trainer_send_weights()`` with - ``IPCTrainerSendWeightsArgs(mode="http", url=)``. -3. For any overflow (non-colocated) engines, fall back to NCCL distributed - broadcast identical to ``UpdateWeightFromDistributed``. - -The API is compatible with ``MegatronTrainRayActor`` — same ``__init__``, -``connect_rollout_engines``, and ``update_weights`` signatures as -``UpdateWeightFromTensor`` / ``UpdateWeightFromDistributed``. -""" - -from __future__ import annotations - -import logging -import os -import time -from argparse import Namespace -from collections.abc import Callable, Mapping, Sequence - -import ray -import torch -import torch.distributed as dist -from megatron.core import mpu -from ray.actor import ActorHandle - -from slime.utils.distributed_utils import get_gloo_group - -from .common import all_gather_param, named_params_and_buffers -from .hf_weight_iterator_base import HfWeightIteratorBase -from .update_weight_from_distributed import ( - connect_rollout_engines_from_distributed, - disconnect_rollout_engines_from_distributed, - post_process_weights, - update_weights_from_distributed, -) - -logger = logging.getLogger(__name__) - - -class UpdateVLLMWeightFromTensor: - """ - Update colocated vLLM engines from tensor via CUDA IPC (HTTP mode). - - Colocated path: - Megatron weights → TP all-gather → HF conversion → CUDA IPC to vLLM - server via ``IPCWeightTransferEngine.trainer_send_weights()``. - - Non-colocated overflow path (optional): - Falls back to NCCL distributed broadcast via ``_NcclBridge``. - """ - - def __init__( - self, - args: Namespace, - model: Sequence[torch.nn.Module], - weights_getter: Callable[[], Mapping[str, torch.Tensor]], - *, - model_name: str, - quantization_config: dict[str, int | str | list[str]] | None, - ) -> None: - self.args = args - self.model = model - self.weights_getter = weights_getter - self.model_name = model_name - self.quantization_config = quantization_config - self.weight_version = 0 - - self._hf_weight_iterator = HfWeightIteratorBase.create( - args=args, model=model, model_name=model_name, quantization_config=quantization_config, - ) - - # Populated by connect_rollout_engines - self.rollout_engines: list[ActorHandle] = [] - self._colocated_engines: list[ActorHandle] = [] - self._colocated_vllm_urls: list[str] = [] - self._distributed_engines: list[ActorHandle] = [] - self._model_update_groups = None - self._is_distributed_src_rank = False - self._group_name = "slime" - self._ipc_initialized = False - - # ------------------------------------------------------------------ - # connect / disconnect - # ------------------------------------------------------------------ - - def connect_rollout_engines( - self, - rollout_engines: Sequence[ActorHandle], - rollout_engine_lock: ActorHandle, - engine_gpu_counts: Sequence[int] | None = None, - engine_gpu_offsets: Sequence[int] | None = None, - ) -> None: - """ - Split colocated / distributed engines. - - For colocated engines we resolve their vLLM base URLs (needed by the - IPC weight transfer HTTP mode). For overflow distributed engines we - create the NCCL bridge just like ``UpdateWeightFromDistributed``. - """ - self.rollout_engines = list(rollout_engines) - self.rollout_engine_lock = rollout_engine_lock - - if engine_gpu_counts is None: - engine_gpu_counts = [self.args.rollout_num_gpus_per_engine] * len(rollout_engines) - if engine_gpu_offsets is None: - engine_gpu_offsets = [] - offset = 0 - for c in engine_gpu_counts: - engine_gpu_offsets.append(offset) - offset += c - - # Determine colocated vs distributed engines - total_actor_gpus = self.args.actor_num_nodes * self.args.actor_num_gpus_per_node - colocate_engine_nums = 0 - for gpu_offset, gpu_count in zip(engine_gpu_offsets, engine_gpu_counts, strict=True): - if gpu_offset + gpu_count > total_actor_gpus: - break - colocate_engine_nums += 1 - - self._colocated_engines = list(rollout_engines[:colocate_engine_nums]) - self._distributed_engines = list(rollout_engines[colocate_engine_nums:]) - - # Resolve vLLM base URLs for colocated engines (blocking Ray call) - if dist.get_rank() == 0 and self._colocated_engines: - url_refs = [engine.get_vllm_url.remote() for engine in self._colocated_engines] - self._colocated_vllm_urls = ray.get(url_refs) - logger.info("Colocated vLLM URLs for IPC weight transfer: %s", self._colocated_vllm_urls) - - # Set up NCCL bridge for distributed overflow engines - if self._distributed_engines: - distributed_gpu_counts = engine_gpu_counts[colocate_engine_nums:] - self._is_distributed_src_rank = ( - mpu.get_data_parallel_rank(with_context_parallel=True) == 0 - and mpu.get_tensor_model_parallel_rank() == 0 - and mpu.get_pipeline_model_parallel_rank() == 0 - ) - if self._is_distributed_src_rank: - if self._model_update_groups is not None: - disconnect_rollout_engines_from_distributed( - self.args, self._group_name, self._model_update_groups, self._distributed_engines, - ) - self._model_update_groups = connect_rollout_engines_from_distributed( - self.args, - self._group_name, - self._distributed_engines, - engine_gpu_counts=distributed_gpu_counts, - ) - - # ------------------------------------------------------------------ - # weight update - # ------------------------------------------------------------------ - - @torch.no_grad() - def update_weights(self) -> None: - """ - Main entry-point called by ``MegatronTrainRayActor.update_weights()``. - - Pause → flush → init IPC (once) → send weights via IPC → resume. - """ - - self.weight_version += 1 - rank = dist.get_rank() - - # Pause generation and flush KV cache on all engines - if rank == 0: - all_engines = self._colocated_engines + self._distributed_engines - ray.get([engine.pause_generation.remote() for engine in all_engines]) - ray.get([engine.flush_cache.remote() for engine in all_engines]) - if self.quantization_config and self.quantization_config.get("quant_method") in ["compressed-tensors"]: - post_process_weights( - restore_weights_before_load=True, - post_process_quantization=False, - rollout_engines=all_engines, - ) - dist.barrier(group=get_gloo_group()) - - # Initialize IPC weight transfer engines (first time only) - if rank == 0 and self._colocated_engines and not self._ipc_initialized: - self._init_ipc_weight_transfer() - self._ipc_initialized = True - - # Get megatron weights and iterate HF chunks - megatron_local_weights = self.weights_getter() - - for hf_named_tensors in self._hf_weight_iterator.get_hf_weight_chunks(megatron_local_weights): - # Send to colocated engines via IPC - if rank == 0 and self._colocated_engines: - self._send_via_ipc(hf_named_tensors) - - # Send to distributed engines via NCCL - if self._distributed_engines and self._is_distributed_src_rank: - refs = update_weights_from_distributed( - self._group_name, - self._model_update_groups, - self.weight_version, - self._distributed_engines, - hf_named_tensors, - use_vllm=True, - packed=True, - ) - if refs: - ray.get(refs) - - dist.barrier(group=get_gloo_group()) - - # Post-process and resume - if rank == 0: - all_engines = self._colocated_engines + self._distributed_engines - if self.quantization_config and self.quantization_config.get("quant_method") in ["compressed-tensors"]: - post_process_weights( - restore_weights_before_load=False, - post_process_quantization=True, - rollout_engines=all_engines, - ) - # Bump weight version on sidecar for colocated engines - for engine in self._colocated_engines: - try: - ray.get(engine.set_weight_version.remote(self.weight_version)) - except Exception as exc: - logger.warning("Failed to set weight version on engine: %s", exc) - - ray.get([engine.continue_generation.remote() for engine in all_engines]) - dist.barrier(group=get_gloo_group()) - - # ------------------------------------------------------------------ - # IPC helpers - # ------------------------------------------------------------------ - - def _init_ipc_weight_transfer(self) -> None: - """ - Call ``/init_weight_transfer_engine`` on each colocated vLLM server. - For IPC backend this is a no-op on the server side but is still required - by vLLM's weight transfer protocol. - """ - import requests - - for url in self._colocated_vllm_urls: - try: - resp = requests.post( - f"{url}/init_weight_transfer_engine", - json={"init_info": {}}, - timeout=60, - ) - resp.raise_for_status() - logger.info("Initialized IPC weight transfer on %s", url) - except Exception as exc: - logger.error("Failed to init IPC weight transfer on %s: %s", url, exc) - raise - - def _send_via_ipc(self, hf_named_tensors: list[tuple[str, torch.Tensor]]) -> None: - """ - Send HF-named tensors to all colocated vLLM engines via CUDA IPC. - - Uses ``vllm.distributed.weight_transfer.ipc_engine.IPCWeightTransferEngine`` - with ``mode="http"`` so the IPC handles are sent via HTTP to the vLLM - server's ``/update_weights`` endpoint. - """ - # Allow insecure serialization for IPC handle serialization - os.environ["VLLM_ALLOW_INSECURE_SERIALIZATION"] = "1" - - from vllm.distributed.weight_transfer.ipc_engine import ( - IPCTrainerSendWeightsArgs, - IPCWeightTransferEngine, - ) - - for url in self._colocated_vllm_urls: - trainer_args = IPCTrainerSendWeightsArgs(mode="http", url=url) - IPCWeightTransferEngine.trainer_send_weights( - iterator=iter(hf_named_tensors), - trainer_args=trainer_args, - ) - logger.debug("IPC weight transfer completed to %s", url) diff --git a/slime/backends/megatron_utils/weight_sync_utils.py b/slime/backends/megatron_utils/weight_sync_utils.py deleted file mode 100644 index 1626444ad8..0000000000 --- a/slime/backends/megatron_utils/weight_sync_utils.py +++ /dev/null @@ -1,312 +0,0 @@ -""" -Local reimplementations of sglang weight-sync utilities. - -Used as fallback when sglang is not installed (e.g. vLLM-only mode). -The three classes/functions here are API-compatible with their sglang -counterparts so that the rest of the megatron weight-update code can -work unchanged. - -Origin (sglang): - - FlattenedTensorBucket → sglang.srt.weight_sync.tensor_bucket - - MultiprocessingSerializer / SafeUnpickler → sglang.srt.utils.common - - monkey_patch_torch_reductions → sglang.srt.utils.patch_torch -""" - -from __future__ import annotations - -import base64 -import io -import pickle -from dataclasses import dataclass -from multiprocessing.reduction import ForkingPickler -from typing import Callable, Union - -import torch -from torch.multiprocessing import reductions - -# ── FlattenedTensorBucket ─────────────────────────────────────────── - - -@dataclass -class FlattenedTensorMetadata: - """Metadata for a tensor in a flattened bucket.""" - - name: str - shape: torch.Size - dtype: torch.dtype - start_idx: int - end_idx: int - numel: int - - -class FlattenedTensorBucket: - """ - A bucket that flattens multiple tensors into a single uint8 tensor - for efficient serialisation, while preserving all metadata needed - for reconstruction. - - API-compatible with ``sglang.srt.weight_sync.tensor_bucket.FlattenedTensorBucket``. - """ - - # Checked by callers to decide whether to group tensors by dtype. - supports_multi_dtypes = True - - def __init__( - self, - named_tensors: list[tuple[str, torch.Tensor]] | None = None, - flattened_tensor: torch.Tensor | None = None, - metadata: list[FlattenedTensorMetadata] | None = None, - ): - if named_tensors is not None: - if not named_tensors: - raise ValueError("Cannot create empty tensor bucket") - - self.metadata: list[FlattenedTensorMetadata] = [None] * len(named_tensors) - current_idx = 0 - flat_parts: list[torch.Tensor] = [None] * len(named_tensors) - - for i, (name, tensor) in enumerate(named_tensors): - flat = tensor.flatten().view(torch.uint8) - numel = flat.numel() - flat_parts[i] = flat - self.metadata[i] = FlattenedTensorMetadata( - name=name, - shape=tensor.shape, - dtype=tensor.dtype, - start_idx=current_idx, - end_idx=current_idx + numel, - numel=numel, - ) - current_idx += numel - - self.flattened_tensor: torch.Tensor = torch.cat(flat_parts, dim=0) - else: - if flattened_tensor is None or metadata is None: - raise ValueError( - "Must provide either named_tensors or both flattened_tensor and metadata" - ) - self.flattened_tensor = flattened_tensor - self.metadata = metadata - - def get_flattened_tensor(self) -> torch.Tensor: - """Return the single flat uint8 tensor.""" - return self.flattened_tensor - - def get_metadata(self) -> list[FlattenedTensorMetadata]: - """Return per-tensor metadata list.""" - return self.metadata - - def reconstruct_tensors(self) -> list[tuple[str, torch.Tensor]]: - """Reconstruct the original named tensors from the flat representation.""" - reconstructed = [None] * len(self.metadata) - for i, meta in enumerate(self.metadata): - tensor = ( - self.flattened_tensor[meta.start_idx : meta.end_idx] - .view(meta.dtype) - .reshape(meta.shape) - ) - reconstructed[i] = (meta.name, tensor) - return reconstructed - - -# ── SafeUnpickler / MultiprocessingSerializer ─────────────────────── - - -class SafeUnpickler(pickle.Unpickler): - """ - Unpickler with an allow-list to prevent arbitrary code execution. - - API-compatible with the ``SafeUnpickler`` in ``sglang.srt.utils.common``. - """ - - ALLOWED_MODULE_PREFIXES = { - # Python builtins (specific safe classes only – see ALLOW_CLASSES) - "collections.", - "copyreg.", - "functools.", - "itertools.", - "operator.", - "types.", - "weakref.", - # PyTorch - "torch.", - "torch._tensor.", - "torch.storage.", - "torch.nn.parameter.", - "torch.autograd.function.", - # torch.distributed - "torch.distributed.", - "torch.distributed._shard.", - "torch.distributed._composable.", - "torch._C._distributed_c10d.", - "torch._C._distributed_fsdp.", - "torch.distributed.optim.", - # multiprocessing - "multiprocessing.resource_sharer.", - "multiprocessing.reduction.", - "pickletools.", - # HuggingFace / PEFT - "peft.", - "transformers.", - "huggingface_hub.", - # slime local reimplementation - "slime.backends.megatron_utils.weight_sync_utils.", - # sglang (if installed alongside) - "sglang.srt.weight_sync.tensor_bucket.", - "sglang.srt.model_executor.model_runner.", - "sglang.srt.layers.", - "sglang.srt.utils.", - # NPU - "torch_npu.", - } - - # Specific builtins classes that are safe to unpickle. - ALLOW_CLASSES = { - ("builtins", "True"), - ("builtins", "False"), - ("builtins", "None"), - ("builtins", "dict"), - ("builtins", "list"), - ("builtins", "tuple"), - ("builtins", "set"), - ("builtins", "frozenset"), - ("builtins", "int"), - ("builtins", "float"), - ("builtins", "complex"), - ("builtins", "str"), - ("builtins", "bytes"), - ("builtins", "bytearray"), - ("builtins", "bool"), - ("builtins", "slice"), - ("builtins", "range"), - ("builtins", "enumerate"), - ("builtins", "map"), - ("builtins", "zip"), - ("builtins", "filter"), - ("builtins", "reversed"), - ("builtins", "sorted"), - } - - DENY_CLASSES = { - ("builtins", "eval"), - ("builtins", "exec"), - ("builtins", "compile"), - ("builtins", "getattr"), - ("builtins", "setattr"), - ("builtins", "delattr"), - ("builtins", "__import__"), - ("builtins", "globals"), - ("builtins", "locals"), - ("builtins", "open"), - ("builtins", "breakpoint"), - ("builtins", "input"), - ("builtins", "memoryview"), - ("os", "system"), - ("subprocess", "Popen"), - ("subprocess", "run"), - ("codecs", "decode"), - ("types", "CodeType"), - ("types", "FunctionType"), - } - - def find_class(self, module: str, name: str): - if (module, name) in self.DENY_CLASSES: - raise RuntimeError( - f"Blocked unsafe class loading ({module}.{name}), " - f"to prevent exploitation of CVE-2025-10164" - ) - # Check explicit allow-list for builtins (strict whitelist) - if module == "builtins": - if (module, name) in self.ALLOW_CLASSES: - return super().find_class(module, name) - raise RuntimeError( - f"Blocked unsafe class loading ({module}.{name}), " - f"to prevent exploitation of CVE-2025-10164" - ) - if any((module + ".").startswith(prefix) for prefix in self.ALLOWED_MODULE_PREFIXES): - return super().find_class(module, name) - raise RuntimeError( - f"Blocked unsafe class loading ({module}.{name}), " - f"to prevent exploitation of CVE-2025-10164" - ) - - -class MultiprocessingSerializer: - """ - Serialize / deserialize Python objects via ``ForkingPickler`` so that - CUDA tensors are transferred through shared memory (IPC handles). - - API-compatible with ``sglang.srt.utils.common.MultiprocessingSerializer``. - - Uses stdlib ``base64`` instead of ``pybase64`` to avoid adding a dependency. - """ - - @staticmethod - def serialize(obj, output_str: bool = False): - buf = io.BytesIO() - ForkingPickler(buf).dump(obj) - buf.seek(0) - output = buf.read() - if output_str: - output = base64.b64encode(output).decode("utf-8") - return output - - @staticmethod - def deserialize(data): - if isinstance(data, str): - data = base64.b64decode(data, validate=True) - return SafeUnpickler(io.BytesIO(data)).load() - - -# ── monkey_patch_torch_reductions ─────────────────────────────────── - -_REDUCE_TENSOR_ARG_DEVICE_INDEX = 6 - - -def _device_to_uuid(device: int) -> str: - return str(torch.cuda.get_device_properties(device).uuid) - - -def _device_from_maybe_uuid(device_maybe_uuid: Union[int, str]) -> int: - if isinstance(device_maybe_uuid, int): - return device_maybe_uuid - if isinstance(device_maybe_uuid, str): - for device in range(torch.cuda.device_count()): - if str(torch.cuda.get_device_properties(device).uuid) == device_maybe_uuid: - return device - raise RuntimeError("Invalid device_uuid=" + device_maybe_uuid) - raise RuntimeError(f"Unknown type: {device_maybe_uuid=}") - - -def _modify_tuple(t, index: int, modifier: Callable): - return (*t[:index], modifier(t[index]), *t[index + 1 :]) - - -def _reduce_tensor_modified(*args, **kwargs): - output_fn, output_args = reductions._reduce_tensor_original(*args, **kwargs) - output_args = _modify_tuple(output_args, _REDUCE_TENSOR_ARG_DEVICE_INDEX, _device_to_uuid) - return output_fn, output_args - - -def _rebuild_cuda_tensor_modified(*args): - args = _modify_tuple(args, _REDUCE_TENSOR_ARG_DEVICE_INDEX, _device_from_maybe_uuid) - return reductions._rebuild_cuda_tensor_original(*args) - - -def monkey_patch_torch_reductions(): - """ - Monkey-patch ``torch.multiprocessing.reductions`` so that CUDA tensors - are identified by device UUID rather than ordinal index. - - This works around https://github.com/pytorch/pytorch/pull/149248. - - API-compatible with ``sglang.srt.utils.patch_torch.monkey_patch_torch_reductions``. - """ - if hasattr(reductions, "_reduce_tensor_original"): - return # already patched - reductions._reduce_tensor_original = reductions.reduce_tensor - reductions._rebuild_cuda_tensor_original = reductions.rebuild_cuda_tensor - - reductions.reduce_tensor = _reduce_tensor_modified - reductions.rebuild_cuda_tensor = _rebuild_cuda_tensor_modified - reductions.init_reductions() diff --git a/slime/backends/sglang_utils/arguments.py b/slime/backends/sglang_utils/arguments.py index c955583b15..71543e02d3 100644 --- a/slime/backends/sglang_utils/arguments.py +++ b/slime/backends/sglang_utils/arguments.py @@ -21,6 +21,12 @@ def add_sglang_router_arguments(parser): default=None, help="Port of the SGLang router", ) + parser.add_argument( + "--sglang-router-policy", + type=str, + default=None, + help="Routing policy for the SGLang router (e.g., 'consistent_hashing', 'round_robin')", + ) parser.add_argument( "--sglang-router-request-timeout-secs", type=int, @@ -36,6 +42,7 @@ def add_sglang_arguments(parser): """ parser = add_sglang_router_arguments(parser) parser.set_defaults(router_balance_abs_threshold=10, router_balance_rel_threshold=1.2) + parser.add_argument("--sglang-server-concurrency", type=int, default=512) old_add_argument = parser.add_argument @@ -124,7 +131,7 @@ def new_add_argument_wrapper(*name_or_flags, **kwargs): default=None, help=( "Path to a YAML config for SGLang engine deployment. " - "Defines server_groups with worker_type (regular/prefill/decode/placeholder), " + "Defines engine_groups with worker_type (regular/prefill/decode/placeholder), " "num_gpus per group, and optional per-group 'overrides' dict of " "ServerArgs field names that override the base --sglang-* CLI args. " "Placeholder groups reserve GPU slots without creating engines. " @@ -167,14 +174,14 @@ def validate_args(args): assert not ( getattr(args, "sglang_config", None) is not None and getattr(args, "prefill_num_servers", None) is not None - ), "sglang_config and prefill_num_servers are mutually exclusive. Use server_groups in the YAML config instead." + ), "sglang_config and prefill_num_servers are mutually exclusive. Use engine_groups in the YAML config instead." def sglang_parse_args(): """ Parse sglang server arguments independently using a separate ArgumentParser. Uses parse_known_args() to only consume sglang-related arguments from sys.argv, - allowing the remaining arguments to be parsed by megatron separately. + allowing the remaining arguments to be parsed by megatron/fsdp separately. Returns: argparse.Namespace: Parsed sglang arguments (all attributes prefixed with sglang_). diff --git a/slime/backends/sglang_utils/sglang_config.py b/slime/backends/sglang_utils/sglang_config.py deleted file mode 100644 index 827b47a1bd..0000000000 --- a/slime/backends/sglang_utils/sglang_config.py +++ /dev/null @@ -1,207 +0,0 @@ -"""Configuration dataclasses for SGLang engine deployment.""" - -import dataclasses -import logging - -import yaml - -logger = logging.getLogger(__name__) - - -@dataclasses.dataclass -class ServerGroupConfig: - """Configuration for a single server group. - - Attributes: - worker_type: One of "regular", "prefill", "decode", "placeholder", - or "encoder". - "placeholder" reserves GPU slots without creating engines. - "encoder" creates encoder-only engines for EPD - (Encoder-Prefill-Decode) disaggregation; encoder engines - are started first and their URLs are automatically - injected into prefill groups as ``encoder_urls``. - num_gpus: Total number of GPUs for this group. - num_gpus_per_engine: GPUs per engine for this group. Overrides the - model-level or global ``--rollout-num-gpus-per-engine``. - overrides: Optional dict of SGLang ``ServerArgs`` field overrides. - These are applied on top of the base CLI ``--sglang-*`` - arguments in ``_compute_server_args``. - """ - - worker_type: str - num_gpus: int - num_gpus_per_engine: int | None = None - overrides: dict = dataclasses.field(default_factory=dict) - - def __post_init__(self): - valid_types = {"regular", "prefill", "decode", "placeholder", "encoder"} - assert ( - self.worker_type in valid_types - ), f"Invalid worker_type '{self.worker_type}', must be one of {valid_types}" - assert self.num_gpus > 0, f"num_gpus must be > 0, got {self.num_gpus}" - - -@dataclasses.dataclass -class ModelConfig: - """Configuration for a single model deployment. - - Attributes: - name: Unique name for this model (e.g. "actor", "reward"). - model_path: HF checkpoint path. Falls back to ``args.hf_checkpoint``. - num_gpus_per_engine: Default GPUs per engine for all groups in this - model. Individual groups can override. - server_groups: Server group configurations for this model. - update_weights: Whether this model receives weight updates from - training. Set to ``False`` for frozen models - (reference, reward, etc.). When ``None`` (default), - automatically inferred in ``resolve()``: ``True`` if - model_path matches ``args.hf_checkpoint``, ``False`` - otherwise. - """ - - name: str - model_path: str | None = None - num_gpus_per_engine: int | None = None - server_groups: list[ServerGroupConfig] = dataclasses.field(default_factory=list) - update_weights: bool | None = None - - def resolve(self, args) -> None: - """Resolve per-group defaults from model-level then args-level values.""" - default_gpus_per_engine = self.num_gpus_per_engine or args.rollout_num_gpus_per_engine - default_model_path = self.model_path or args.hf_checkpoint - for g in self.server_groups: - if g.num_gpus_per_engine is None: - g.num_gpus_per_engine = default_gpus_per_engine - # Inject model_path into overrides so _compute_server_args picks it up. - if "model_path" not in g.overrides: - g.overrides["model_path"] = default_model_path - - # Validate: all server groups within a model must share the same model_path. - if self.server_groups: - model_paths = {g.overrides["model_path"] for g in self.server_groups} - assert len(model_paths) == 1, ( - f"Model '{self.name}' has server groups with different model_path values: " - f"{model_paths}. All server groups within a model must use the same model_path." - ) - effective_model_path = model_paths.pop() - else: - effective_model_path = default_model_path - - # Auto-infer update_weights when not explicitly set. - if self.update_weights is None: - if effective_model_path != args.hf_checkpoint: - logger.warning( - f"Model '{self.name}' uses model_path='{effective_model_path}' which differs " - f"from hf_checkpoint='{args.hf_checkpoint}'. Defaulting update_weights to False. " - f"Set update_weights explicitly in the config to suppress this warning." - ) - self.update_weights = False - else: - self.update_weights = True - - @property - def has_pd_disaggregation(self) -> bool: - return any(g.worker_type in ("prefill", "decode") for g in self.server_groups) - - @property - def has_encoder_disaggregation(self) -> bool: - return any(g.worker_type == "encoder" for g in self.server_groups) - - @property - def total_num_gpus(self) -> int: - return sum(g.num_gpus for g in self.server_groups) - - -@dataclasses.dataclass -class SglangConfig: - """Configuration for SGLang engine deployment. - - Loaded from ``--sglang-config`` YAML file. - - **Config format**:: - - sglang: - - name: actor - model_path: /path/to/actor - update_weights: true # receives training weight updates (default) - num_gpus_per_engine: 2 - server_groups: - - worker_type: prefill - num_gpus: 4 - num_gpus_per_engine: 2 - - worker_type: decode - num_gpus: 8 - num_gpus_per_engine: 4 - - name: ref - model_path: /path/to/ref - update_weights: false # frozen, no weight updates - server_groups: - - worker_type: regular - num_gpus: 4 - - Each model gets its own router. ``placeholder`` groups reserve GPU - slots without creating engines. ``overrides`` are ``ServerArgs`` - field names applied on top of the base ``--sglang-*`` CLI args. - - Set ``update_weights: false`` for frozen models (reference, reward, - etc.) that should not receive weight updates from training. - - .. note:: - - ``engine_groups`` is accepted as a backward-compatible alias for - ``server_groups`` in the YAML config. - """ - - models: list[ModelConfig] - - @staticmethod - def from_yaml(path: str) -> "SglangConfig": - with open(path) as f: - data = yaml.safe_load(f) - - assert "sglang" in data, ( - f"sglang config must have a 'sglang' key, got {list(data.keys())}. " - f"Wrap your server_groups inside a model entry under 'sglang'." - ) - models = [] - for m in data["sglang"]: - # Accept both "server_groups" and legacy "engine_groups". - raw_groups = m.get("server_groups") or m.get("engine_groups") or [] - groups = [ServerGroupConfig(**g) for g in raw_groups] - models.append( - ModelConfig( - name=m["name"], - model_path=m.get("model_path"), - num_gpus_per_engine=m.get("num_gpus_per_engine"), - server_groups=groups, - update_weights=m.get("update_weights"), - ) - ) - return SglangConfig(models=models) - - @staticmethod - def from_prefill_num_servers(args) -> "SglangConfig": - """Build a config equivalent to the legacy --prefill-num-servers flag.""" - total_gpus = args.rollout_num_gpus - prefill_gpus = args.prefill_num_servers * args.rollout_num_gpus_per_engine - decode_gpus = total_gpus - prefill_gpus - assert decode_gpus > 0, f"No decode GPUs: total {total_gpus}, prefill {prefill_gpus}" - return SglangConfig( - models=[ - ModelConfig( - name="default", - server_groups=[ - ServerGroupConfig(worker_type="prefill", num_gpus=prefill_gpus), - ServerGroupConfig(worker_type="decode", num_gpus=decode_gpus), - ], - ) - ] - ) - - @property - def has_pd_disaggregation(self) -> bool: - return any(m.has_pd_disaggregation for m in self.models) - - @property - def total_num_gpus(self) -> int: - return sum(m.total_num_gpus for m in self.models) diff --git a/slime/backends/sglang_utils/sglang_engine.py b/slime/backends/sglang_utils/sglang_engine.py index c28e13d5f9..290b1fcdce 100644 --- a/slime/backends/sglang_utils/sglang_engine.py +++ b/slime/backends/sglang_utils/sglang_engine.py @@ -26,6 +26,9 @@ def get_base_gpu_id(args, rank): else: num_actor_gpus = 0 if args.debug_rollout_only else args.actor_num_gpus_per_node * args.actor_num_nodes start_index = (num_actor_gpus + rank * num_gpus) % args.num_gpus_per_node + if args.use_critic: + num_critic_gpus = args.critic_num_gpus_per_node * args.critic_num_nodes + start_index = (num_actor_gpus + num_critic_gpus + rank * num_gpus) % args.num_gpus_per_node return start_index @@ -48,15 +51,6 @@ def _to_local_gpu_id(physical_gpu_id: int) -> int: def launch_server_process(server_args: ServerArgs) -> multiprocessing.Process: - if getattr(server_args, "encoder_only", False): - from sglang.srt.disaggregation.encode_server import launch_server_process as sglang_launch_server_process - - return sglang_launch_server_process( - server_args, - start_method="spawn", - wait_for_server=True, - ) - from sglang.srt.entrypoints.http_server import launch_server multiprocessing.set_start_method("spawn", force=True) @@ -64,8 +58,8 @@ def launch_server_process(server_args: ServerArgs) -> multiprocessing.Process: p = multiprocessing.Process(target=launch_server, args=(server_args,)) p.start() - if getattr(server_args, "node_rank", 0) != 0: - return p + if server_args.node_rank != 0: + return _wait_server_healthy( base_url=server_args.url(), @@ -96,6 +90,21 @@ def _wait_server_healthy(base_url, api_key, is_process_alive): time.sleep(2) + # use flush_cache to make sure the working queue is empty, so that we can do offload + while True: + try: + response = session.get(f"{base_url}/flush_cache", headers=headers) + if response.status_code == 200: + break + + except requests.RequestException: + pass + + if not is_process_alive(): + raise Exception("Server process terminated unexpectedly.") + + time.sleep(2) + class SGLangEngine(RayActor): def __init__( @@ -194,14 +203,13 @@ def _init_normal(self, server_args_dict): logger.info(f"Launch HttpServerEngineAdapter at: {self.server_host}:{self.server_port}") self.process = launch_server_process(ServerArgs(**server_args_dict)) - if self.worker_type == "encoder": - return - if self.node_rank == 0 and self.router_ip and self.router_port: - if parse(sglang_router.__version__) <= parse("0.2.1"): - assert self.worker_type == "regular", "pd disaggregation is not supported in old router." + if parse(sglang_router.__version__) <= parse("0.2.1") or self.args.use_slime_router: + assert ( + self.worker_type == "regular" + ), "pd disaggregation is not supported in old router or slime router." response = requests.post( - f"http://{self.router_ip}:{self.router_port}/add_worker?url=http://{self.server_host}:{self.server_port}", + f"http://{self.router_ip}:{self.router_port}/add_worker?url=http://{self.server_host}:{self.server_port}" ) else: payload = { @@ -304,20 +312,15 @@ def flush_cache(self): else: raise TimeoutError("Timeout while flushing cache.") - def get_url(self): - if self.node_rank != 0: - return None - return f"http://{self.server_host}:{self.server_port}" - def shutdown(self): if self.args.rollout_external: return logger.info(f"Shutdown engine {self.server_host}:{self.server_port}...") - if self.worker_type != "encoder" and self.node_rank == 0: + if self.node_rank == 0: worker_url = f"http://{self.server_host}:{self.server_port}" response = None - if parse(sglang_router.__version__) <= parse("0.2.1"): + if parse(sglang_router.__version__) <= parse("0.2.1") or self.args.use_slime_router: response = requests.post( f"http://{self.router_ip}:{self.router_port}/remove_worker?url=http://{self.server_host}:{self.server_port}" ) @@ -367,17 +370,6 @@ def resume_memory_occupation(self, tags: list[str] = None): def check_weights(self, action: str): return self._make_request("weights_checker", {"action": action}) - def update_weights_from_disk(self, model_path: str, load_format: str | None = None): - """Reload weights from *model_path* without restarting the engine. - - Used for non-updatable (frozen) models that overlap with megatron: - after offload, weights are restored from disk instead of CPU cache. - """ - payload = {"model_path": model_path} - if load_format is not None: - payload["load_format"] = load_format - return self._make_request("update_weights_from_disk", payload) - def init_weights_update_group(self, master_address, master_port, rank_offset, world_size, group_name, backend): return self._make_request( "init_weights_update_group", @@ -537,14 +529,11 @@ def _compute_server_args( "skip_server_warmup": True, # always enable draft weights cpu backup so that we run training without mtp weights. "enable_draft_weights_cpu_backup": True, - # Always enable Prometheus metrics so the /engine_metrics endpoint is - # available for W&B scraping (regardless of --sglang-enable-metrics). - "enable_metrics": True, } if worker_type == "prefill": kwargs["disaggregation_mode"] = "prefill" - kwargs["load_balance_method"] = "follow_bootstrap_room" + kwargs["load_balance_method"] = "round_robin" assert ( disaggregation_bootstrap_port is not None ), "disaggregation_bootstrap_port must be set for prefill worker" @@ -552,8 +541,6 @@ def _compute_server_args( elif worker_type == "decode": kwargs["disaggregation_mode"] = "decode" kwargs["prefill_round_robin_balance"] = True - elif worker_type == "encoder": - kwargs["encoder_only"] = True if args.use_rollout_routing_replay: kwargs["enable_return_routed_experts"] = True @@ -561,35 +548,22 @@ def _compute_server_args( kwargs["dtype"] = "float16" external_engine_need_check_fields = [k for k in kwargs.keys() if k not in _EXTERNAL_ENGINE_SKIP_CHECK_FIELDS] - server_arg_fields = dataclasses.fields(ServerArgs) - server_arg_field_names = {attr.name for attr in server_arg_fields} unused_keys = set(kwargs.keys()) - for attr in server_arg_fields: + for attr in dataclasses.fields(ServerArgs): if worker_type == "decode" and attr.name == "enable_hierarchical_cache": continue if hasattr(args, f"sglang_{attr.name}") and attr.name not in kwargs: kwargs[attr.name] = getattr(args, f"sglang_{attr.name}") unused_keys.discard(attr.name) - # Per-server-group overrides from --sglang-config YAML. + # Per-engine-group overrides from --sglang-config YAML. # Applied after base args so they take highest priority. if sglang_overrides: for key, value in sglang_overrides.items(): - normalized_key = key.replace("-", "_") - if normalized_key != key: - logger.warning( - f"sglang_overrides key '{key}' normalized to '{normalized_key}' (rank={rank}). " - "Please use underscore style in YAML overrides." - ) - if normalized_key in kwargs: - logger.info( - f"sglang_overrides: overriding {normalized_key}={kwargs[normalized_key]} -> {value} (rank={rank})" - ) - kwargs[normalized_key] = value - if normalized_key in server_arg_field_names: - unused_keys.discard(normalized_key) - else: - unused_keys.add(normalized_key) + if key in kwargs: + logger.info(f"sglang_overrides: overriding {key}={kwargs[key]} -> {value} (rank={rank})") + kwargs[key] = value + unused_keys.discard(key) # for compatibility with old args if len(unused_keys) > 0: @@ -608,6 +582,5 @@ def _compute_server_args( "dist_init_addr", "skip_server_warmup", "enable_draft_weights_cpu_backup", - "enable_metrics", "mem_fraction_static", ] diff --git a/slime/backends/vllm_utils/__init__.py b/slime/backends/vllm_utils/__init__.py deleted file mode 100644 index 41b5f9909c..0000000000 --- a/slime/backends/vllm_utils/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from slime.backends.vllm_utils.vllm_engine import VLLMEngine -from slime.backends.vllm_utils.vllm_translation_sidecar import TranslationSidecar, run_sidecar - -__all__ = ["VLLMEngine", "TranslationSidecar", "run_sidecar"] diff --git a/slime/backends/vllm_utils/vllm_engine.py b/slime/backends/vllm_utils/vllm_engine.py deleted file mode 100644 index c2902ea13f..0000000000 --- a/slime/backends/vllm_utils/vllm_engine.py +++ /dev/null @@ -1,375 +0,0 @@ -"""VLLMEngine: Ray actor that launches and manages a vLLM server + translation sidecar.""" - -import logging -import multiprocessing -import os -import subprocess -import tempfile -import time - -import requests - -from slime.ray.ray_actor import RayActor -from slime.utils.http_utils import get_host_info -from slime.utils.misc import get_free_port - -logger = logging.getLogger(__name__) - - -class VLLMEngine(RayActor): - """Ray actor that runs vLLM server with same interface as SGLangEngine for weight sync.""" - - def __init__(self, args, rank: int, base_gpu_id: int | None = None, gpu_ids: list[int] | None = None, **kwargs): - self.args = args - self.rank = rank - self.base_gpu_id = base_gpu_id or 0 - self.gpu_ids = gpu_ids or [self.base_gpu_id] - self.server_host = None - self.server_port = None - self.sidecar_port = None - self.process = None - self.sidecar_process = None - self._log_file = None - self._sidecar_log_file = None - self._weight_version: int = 0 - self._colocate: bool = getattr(args, "colocate", False) - - @property - def sidecar_url(self) -> str: - """URL of the translation sidecar (registered with the router).""" - return f"http://{self.server_host}:{self.sidecar_port}" - - @property - def vllm_url(self) -> str: - """URL of the raw vLLM server.""" - return f"http://{self.server_host}:{self.server_port}" - - def init(self, port=None, host=None, router_ip=None, router_port=None, **kwargs): - self.server_host = host or get_host_info()[1] - self.server_port = port or get_free_port(15000) - self.sidecar_port = get_free_port(self.server_port + 100) - self.router_ip = router_ip or getattr(self.args, "sglang_router_ip", None) - self.router_port = router_port or getattr(self.args, "sglang_router_port", None) - - model = getattr(self.args, "vllm_model", None) or self.args.hf_checkpoint - self._model_name = model - tp = self.args.rollout_num_gpus_per_engine - gpu_ids = self.gpu_ids[:tp] - cvd = os.environ.get("CUDA_VISIBLE_DEVICES", "") - if cvd: - visible = [int(x) for x in cvd.split(",") if x.strip()] - dev_str = ",".join(str(visible[gid]) if gid < len(visible) else str(gid) for gid in gpu_ids) - else: - dev_str = ",".join(str(g) for g in gpu_ids) - - seed = getattr(self.args, "seed", 1234) + self.rank - # Use IPC backend when colocated (same GPU), NCCL otherwise - if self._colocate: - weight_transfer_backend = '{"backend": "ipc"}' - else: - weight_transfer_backend = '{"backend": "nccl"}' - - cmd = [ - "vllm", "serve", model, - "--tensor-parallel-size", str(tp), - "--port", str(self.server_port), - "--host", "0.0.0.0", - "--weight-transfer-config", weight_transfer_backend, - "--seed", str(seed), - "--trust-remote-code", - ] - gpu_mem_util = getattr(self.args, "vllm_gpu_memory_utilization", 0.25) - cmd.extend(["--gpu-memory-utilization", str(gpu_mem_util)]) - if getattr(self.args, "offload_rollout", False): - cmd.append("--enable-sleep-mode") - if getattr(self.args, "vllm_enforce_eager", True): - cmd.append("--enforce-eager") - if getattr(self.args, "fp16", False): - cmd.extend(["--dtype", "float16"]) - - env = os.environ.copy() - env["VLLM_SERVER_DEV_MODE"] = "1" - if self._colocate: - env["VLLM_ALLOW_INSECURE_SERIALIZATION"] = "1" - env["CUDA_VISIBLE_DEVICES"] = dev_str - env.setdefault("NCCL_DEBUG", "INFO") - env.setdefault("NCCL_DEBUG_SUBSYS", "ALL") - env["NCCL_P2P_DISABLE"] = "1" - env.setdefault("NCCL_IB_DISABLE", "1") - - self._log_file = tempfile.NamedTemporaryFile( - prefix="vllm_engine_", suffix=".log", delete=False, mode="w" - ) - - logger.info("Launching vLLM: cmd=%s, CUDA_VISIBLE_DEVICES=%s, log=%s", - " ".join(cmd), dev_str, self._log_file.name) - self.process = subprocess.Popen( - cmd, - env=env, - stdout=self._log_file, - stderr=subprocess.STDOUT, - ) - self._wait_healthy() - - # Launch the translation sidecar - self._launch_sidecar() - self._wait_sidecar_healthy() - - # Register the sidecar URL with the router - if self.router_ip and self.router_port: - self._register_with_router() - - def _wait_healthy(self, timeout=300): - base = f"http://{self.server_host}:{self.server_port}" - start = time.time() - while time.time() - start < timeout: - try: - r = requests.get(f"{base}/health", timeout=5) - if r.status_code == 200: - logger.info("vLLM server healthy at %s:%s", self.server_host, self.server_port) - return - except Exception: - pass - if self.process and self.process.poll() is not None: - log_tail = self._read_log_tail() - raise RuntimeError(f"vLLM process exited with code {self.process.returncode}.\n{log_tail}") - time.sleep(2) - log_tail = self._read_log_tail() - raise TimeoutError(f"vLLM server failed to become healthy within {timeout}s.\n{log_tail}") - - def _launch_sidecar(self): - """Launch the translation sidecar as a subprocess.""" - from slime.backends.vllm_utils.vllm_translation_sidecar import run_sidecar - - self._sidecar_log_file = tempfile.NamedTemporaryFile( - prefix="vllm_sidecar_", suffix=".log", delete=False, mode="w" - ) - - def _target(): - run_sidecar( - vllm_host="127.0.0.1", - vllm_port=self.server_port, - sidecar_host="0.0.0.0", - sidecar_port=self.sidecar_port, - model_name=self._model_name, - log_level="info", - ) - - self.sidecar_process = multiprocessing.Process(target=_target, daemon=True) - self.sidecar_process.start() - logger.info( - "Launched translation sidecar on port %s (vLLM → %s:%s), log=%s", - self.sidecar_port, - self.server_host, - self.server_port, - self._sidecar_log_file.name, - ) - - def _wait_sidecar_healthy(self, timeout: float = 60.0): - """Block until the sidecar /health endpoint responds 200.""" - url = f"{self.sidecar_url}/health" - start = time.time() - while time.time() - start < timeout: - try: - r = requests.get(url, timeout=5) - if r.status_code == 200: - logger.info("Translation sidecar healthy at %s", self.sidecar_url) - return - except Exception: - pass - if self.sidecar_process and not self.sidecar_process.is_alive(): - raise RuntimeError( - f"Sidecar process exited with code {self.sidecar_process.exitcode}" - ) - time.sleep(1) - raise TimeoutError(f"Sidecar failed to become healthy within {timeout}s") - - def _register_with_router(self): - """Register the sidecar URL with the SlimeRouter.""" - router_url = f"http://{self.router_ip}:{self.router_port}" - response = requests.post( - f"{router_url}/add_worker", - params={"url": self.sidecar_url}, - ) - response.raise_for_status() - logger.info( - "Registered sidecar %s with router at %s", - self.sidecar_url, - router_url, - ) - - def _bump_weight_version(self, version: int | None = None): - """Notify the sidecar to increment (or set) its weight version counter.""" - url = f"{self.sidecar_url}/set_weight_version" - payload = {"weight_version": version} if version is not None else {} - try: - r = requests.post(url, json=payload, timeout=10) - r.raise_for_status() - self._weight_version = r.json().get("weight_version", self._weight_version) - except Exception as exc: - logger.warning("Failed to bump sidecar weight version: %s", exc) - - def _read_log_tail(self, n=200): - if not self._log_file: - return "" - try: - self._log_file.flush() - with open(self._log_file.name) as f: - lines = f.readlines() - return "".join(lines[-n:]) - except Exception: - return "" - - def _post(self, path: str, json_data: dict | None = None, params: dict | None = None): - url = f"http://{self.server_host}:{self.server_port}{path}" - kwargs = {"timeout": 120} - if json_data is not None: - kwargs["json"] = json_data - if params is not None: - kwargs["params"] = params - r = requests.post(url, **kwargs) - if not r.ok: - body = r.text[:2000] if r.text else "(empty)" - log_tail = self._read_log_tail(50) - logger.error( - "vLLM %s returned %s: %s\n--- vLLM log tail ---\n%s", - path, r.status_code, body, log_tail, - ) - r.raise_for_status() - try: - return r.json() - except Exception: - return None - - def health_generate(self, timeout: float = 5.0) -> bool: - try: - r = requests.get( - f"http://{self.server_host}:{self.server_port}/health", - timeout=timeout, - ) - r.raise_for_status() - return True - except requests.RequestException: - return False - - def pause_generation(self): - self._post("/pause", params={"mode": "abort"}) - - def flush_cache(self): - pass - - def init_weights_update_group(self, master_address, master_port, rank_offset, world_size, group_name=None, backend=None): - logger.info( - "Initializing NCCL weight transfer: master=%s:%s, rank_offset=%d, " - "world_size=%d, vllm_url=http://%s:%s, vllm_log=%s", - master_address, master_port, rank_offset, world_size, - self.server_host, self.server_port, - self._log_file.name if self._log_file else "", - ) - self._post("/init_weight_transfer_engine", json_data={ - "init_info": { - "master_address": master_address, - "master_port": master_port, - "rank_offset": rank_offset, - "world_size": world_size, - } - }) - log_tail = self._read_log_tail(30) - logger.info("vLLM log after init_weight_transfer_engine:\n%s", log_tail) - - def update_weights_from_distributed( - self, - names, - dtypes, - shapes, - group_name=None, - flush_cache=False, - weight_version=None, - packed: bool = True, - ): - dtype_names = [str(d).replace("torch.", "") for d in dtypes] - shape_lists = [list(s) for s in shapes] - self._post("/update_weights", json_data={ - "update_info": { - "names": names, - "dtype_names": dtype_names, - "shapes": shape_lists, - "packed": packed, - } - }) - # Notify the sidecar about the new weight version - self._bump_weight_version(weight_version) - - def continue_generation(self): - self._post("/resume") - - def destroy_weights_update_group(self, group_name): - pass - - def release_memory_occupation(self): - try: - self._post("/sleep", params={"level": "1", "mode": "abort"}) - except requests.RequestException as e: - logger.warning("vLLM sleep failed (need --enable-sleep-mode?): %s", e) - - def resume_memory_occupation(self, tags: list[str] | None = None): - try: - params = {} - if tags: - params["tags"] = tags - self._post("/wake_up", params=params) - except requests.RequestException as e: - logger.warning("vLLM wake_up failed: %s", e) - - def get_weight_version(self): - if self.sidecar_port: - try: - r = requests.get(f"{self.sidecar_url}/get_weight_version", timeout=5) - r.raise_for_status() - return r.json().get("weight_version", self._weight_version) - except Exception: - pass - return self._weight_version - - def get_vllm_url(self) -> str: - """Return the raw vLLM server URL (used by IPC weight transfer).""" - return self.vllm_url - - def set_weight_version(self, version: int) -> None: - """Set weight version on both the engine and the sidecar.""" - self._weight_version = version - self._bump_weight_version(version) - - def check_weights(self, action: str): - pass - - def post_process_weights(self, **kwargs): - pass - - def shutdown(self): - # Shutdown translation sidecar first - if self.sidecar_process and self.sidecar_process.is_alive(): - self.sidecar_process.terminate() - self.sidecar_process.join(timeout=10) - if self.sidecar_process.is_alive(): - self.sidecar_process.kill() - self.sidecar_process = None - if self._sidecar_log_file: - try: - self._sidecar_log_file.close() - except Exception: - pass - - # Shutdown vLLM server - if self.process: - self.process.terminate() - try: - self.process.wait(timeout=10) - except subprocess.TimeoutExpired: - self.process.kill() - self.process = None - if self._log_file: - try: - self._log_file.close() - except Exception: - pass diff --git a/slime/backends/vllm_utils/vllm_translation_sidecar.py b/slime/backends/vllm_utils/vllm_translation_sidecar.py deleted file mode 100644 index 73998d8bf4..0000000000 --- a/slime/backends/vllm_utils/vllm_translation_sidecar.py +++ /dev/null @@ -1,454 +0,0 @@ -""" -vLLM Translation Sidecar -======================== - -Lightweight FastAPI process co-located with each vLLM engine. -Receives SGLang-format ``/generate`` requests from the SlimeRouter, -translates them to vLLM ``/v1/completions``, and translates responses back. - -Also proxies lifecycle endpoints: - /health, /health_generate, /abort_request, /flush_cache, /get_weight_version - -See docs/en/vllm/ROUTER_DESIGN.md for the full specification. -""" - -from __future__ import annotations - -import argparse -import asyncio -import logging -import signal -import sys -from contextlib import asynccontextmanager -from typing import Any - -import httpx -import uvicorn -from fastapi import FastAPI, Request -from fastapi.responses import JSONResponse - -logger = logging.getLogger(__name__) - -# --------------------------------------------------------------------------- -# Sampling-param translation tables -# --------------------------------------------------------------------------- - -# SGLang name → vLLM /v1/completions name (only entries that differ) -_PARAM_RENAME = { - "max_new_tokens": "max_tokens", - "no_stop_trim": "include_stop_str_in_output", - "sampling_seed": "seed", -} - -# Parameters passed through unchanged -_PARAM_DIRECT = frozenset( - { - "temperature", - "top_p", - "top_k", - "stop", - "stop_token_ids", - "skip_special_tokens", - "spaces_between_special_tokens", - } -) - -# finish_reason vLLM → SGLang-style {"type": ...} -_FINISH_REASON_MAP = { - "stop": "stop", - "length": "length", - None: "abort", -} - - -# --------------------------------------------------------------------------- -# Request / response translation helpers -# --------------------------------------------------------------------------- - - -def translate_generate_request( - body: dict[str, Any], - model_name: str, -) -> dict[str, Any]: - """Translate an SGLang-format /generate request → vLLM /v1/completions payload.""" - - sp: dict = body.get("sampling_params", {}) - - vllm_payload: dict[str, Any] = { - "model": model_name, - # vLLM accepts list[int] as a pre-tokenized prompt - "prompt": body.get("input_ids") or body.get("input_tokens", []), - "stream": False, - } - - # --- direct-copy params --- - for key in _PARAM_DIRECT: - if key in sp: - vllm_payload[key] = sp[key] - - # --- renamed params --- - for src, dst in _PARAM_RENAME.items(): - if src in sp: - vllm_payload[dst] = sp[src] - - # --- logprob handling --- - if body.get("return_logprob", False): - vllm_payload["logprobs"] = 1 - # request token IDs alongside logprobs - # NOTE: must be a top-level param; "extra_body" is an OpenAI SDK - # client concept and is ignored by vLLM's raw HTTP API. - vllm_payload["return_token_ids"] = True - - return vllm_payload - - -def translate_vllm_response( - vllm_resp: dict[str, Any], - weight_version: int, -) -> dict[str, Any]: - """Translate a vLLM /v1/completions response → SGLang-format JSON.""" - - choice: dict = vllm_resp.get("choices", [{}])[0] - usage: dict = vllm_resp.get("usage", {}) - - # --- output token IDs --- - output_ids: list[int] = choice.get("token_ids", []) - - # --- logprobs: zip(logprob, token_id) --- - output_token_logprobs: list[list[float | int]] = [] - logprobs_obj = choice.get("logprobs") - if logprobs_obj and output_ids: - raw_lp: list[float | None] = logprobs_obj.get("token_logprobs", []) - output_token_logprobs = [ - [float(lp) if lp is not None else 0.0, tid] - for lp, tid in zip(raw_lp, output_ids) - ] - - # --- finish reason --- - raw_reason = choice.get("finish_reason") - mapped = _FINISH_REASON_MAP.get(raw_reason, raw_reason or "abort") - finish_reason = {"type": mapped} - - meta_info: dict[str, Any] = { - "finish_reason": finish_reason, - "weight_version": weight_version, - "prompt_tokens": usage.get("prompt_tokens", 0), - "completion_tokens": usage.get("completion_tokens", len(output_ids)), - "cached_tokens": 0, - } - # Only include output_token_logprobs when we have valid paired data; - # a None value causes RadixTreeMiddleware to silently fail when iterating. - if output_token_logprobs: - meta_info["output_token_logprobs"] = output_token_logprobs - - return { - "text": choice.get("text", ""), - "output_ids": output_ids, - "meta_info": meta_info, - } - - -# --------------------------------------------------------------------------- -# Sidecar application -# --------------------------------------------------------------------------- - - -class TranslationSidecar: - """Manages state and provides the FastAPI app for the translation sidecar.""" - - def __init__( - self, - vllm_base_url: str, - model_name: str, - *, - timeout: float = 600.0, - max_connections: int = 256, - ): - self.vllm_base_url = vllm_base_url.rstrip("/") - self.model_name = model_name - self._weight_version: int = 0 - self._active_connections: set[httpx.Response] = set() - self._lock = asyncio.Lock() - - self._client: httpx.AsyncClient | None = None - self._timeout = timeout - self._max_connections = max_connections - - self.app = self._build_app() - - # ---- lifecycle ----------------------------------------------------------- - - async def startup(self): - self._client = httpx.AsyncClient( - limits=httpx.Limits( - max_connections=self._max_connections, - max_keepalive_connections=self._max_connections, - ), - timeout=httpx.Timeout(self._timeout), - ) - - async def shutdown(self): - if self._client: - await self._client.aclose() - self._client = None - - # ---- app factory --------------------------------------------------------- - - def _build_app(self) -> FastAPI: - - @asynccontextmanager - async def lifespan(app: FastAPI): - await self.startup() - yield - await self.shutdown() - - app = FastAPI(title="vLLM Translation Sidecar", lifespan=lifespan) - - app.post("/generate")(self.generate) - app.get("/health")(self.health) - app.get("/health_generate")(self.health_generate) - app.post("/abort_request")(self.abort_request) - app.get("/flush_cache")(self.flush_cache) - app.get("/get_weight_version")(self.get_weight_version) - app.post("/set_weight_version")(self.set_weight_version) - - return app - - # ---- endpoints ----------------------------------------------------------- - - async def generate(self, request: Request): - """Translate SGLang /generate → vLLM /v1/completions → SGLang response.""" - - body = await request.json() - vllm_payload = translate_generate_request(body, self.model_name) - - url = f"{self.vllm_base_url}/v1/completions" - - resp: httpx.Response | None = None - try: - async with self._lock: - # We don't actually hold the lock during the request, - # just use it to safely add to the tracking set. - pass - - resp = await self._client.post(url, json=vllm_payload) - self._active_connections.add(resp) - - resp.raise_for_status() - vllm_data = resp.json() - except httpx.HTTPStatusError as exc: - logger.error( - "vLLM /v1/completions returned %s: %s", - exc.response.status_code, - exc.response.text[:2000], - ) - # Return an abort-style response so the middleware retries - return JSONResponse( - content={ - "text": "", - "output_ids": [], - "meta_info": { - "finish_reason": {"type": "abort"}, - "weight_version": self._weight_version, - "prompt_tokens": 0, - "completion_tokens": 0, - "cached_tokens": 0, - }, - }, - status_code=200, - ) - except Exception as exc: - logger.error("Error calling vLLM: %s", exc, exc_info=True) - return JSONResponse( - content={ - "text": "", - "output_ids": [], - "meta_info": { - "finish_reason": {"type": "abort"}, - "weight_version": self._weight_version, - "prompt_tokens": 0, - "completion_tokens": 0, - "cached_tokens": 0, - }, - }, - status_code=200, - ) - finally: - if resp is not None: - self._active_connections.discard(resp) - await resp.aclose() - - translated = translate_vllm_response(vllm_data, self._weight_version) - return JSONResponse(content=translated) - - async def health(self): - """Proxy to vLLM's built-in /health endpoint.""" - try: - resp = await self._client.get(f"{self.vllm_base_url}/health", timeout=5.0) - return JSONResponse(content={"status": "ok"}, status_code=resp.status_code) - except Exception: - return JSONResponse(content={"status": "unhealthy"}, status_code=503) - - async def health_generate(self): - """ - Startup readiness probe. - - Checks vLLM /health and optionally fires a dummy /v1/completions - with max_tokens=1 to verify end-to-end readiness. - """ - try: - resp = await self._client.get(f"{self.vllm_base_url}/health", timeout=10.0) - if resp.status_code != 200: - return JSONResponse(content={"status": "not_ready"}, status_code=503) - - # Lightweight smoke test: single-token completion - dummy_payload = { - "model": self.model_name, - "prompt": "hi", - "max_tokens": 1, - "stream": False, - } - resp2 = await self._client.post( - f"{self.vllm_base_url}/v1/completions", - json=dummy_payload, - timeout=30.0, - ) - if resp2.status_code == 200: - return JSONResponse(content={"status": "ready"}, status_code=200) - else: - return JSONResponse(content={"status": "not_ready"}, status_code=503) - except Exception as exc: - logger.debug("health_generate check failed: %s", exc) - return JSONResponse(content={"status": "not_ready"}, status_code=503) - - async def abort_request(self, request: Request): - """ - Handle abort requests. - - vLLM uses HTTP disconnect for cancellation. We close all active - connections to the vLLM backend, which triggers vLLM's - ``@with_cancellation`` decorator to abort in-flight requests. - - Alternatively, use pause/resume for a cleaner between-generation abort. - """ - body = await request.json() - - if body.get("abort_all", False): - # Strategy: pause + resume clears the pipeline - try: - await self._client.post( - f"{self.vllm_base_url}/pause", - params={"mode": "abort"}, - timeout=30.0, - ) - await self._client.post( - f"{self.vllm_base_url}/resume", - timeout=30.0, - ) - except Exception as exc: - logger.warning("pause/resume abort failed, falling back to connection close: %s", exc) - # Fallback: close all tracked connections - conns = list(self._active_connections) - self._active_connections.clear() - for conn in conns: - try: - await conn.aclose() - except Exception: - pass - - return JSONResponse(content={"status": "ok"}) - - async def flush_cache(self): - """ - Flush the KV cache. - - vLLM equivalent: sleep(level=1) + wake_up(tags=kv_cache). - """ - try: - await self._client.post( - f"{self.vllm_base_url}/sleep", - params={"level": "1", "mode": "abort"}, - timeout=30.0, - ) - await self._client.post( - f"{self.vllm_base_url}/wake_up", - params={"tags": "kv_cache"}, - timeout=30.0, - ) - return JSONResponse(content={"status": "ok"}) - except Exception as exc: - logger.warning("flush_cache failed: %s", exc) - return JSONResponse(content={"status": "ok"}) - - async def get_weight_version(self): - """Return the sidecar-tracked weight version counter.""" - return JSONResponse(content={"weight_version": self._weight_version}) - - async def set_weight_version(self, request: Request): - """Increment or set the weight version (called by VLLMEngine after weight update).""" - body = await request.json() - if "weight_version" in body: - self._weight_version = int(body["weight_version"]) - else: - self._weight_version += 1 - return JSONResponse(content={"weight_version": self._weight_version}) - - -# --------------------------------------------------------------------------- -# Standalone entry point -# --------------------------------------------------------------------------- - - -def run_sidecar( - vllm_host: str = "127.0.0.1", - vllm_port: int = 8000, - sidecar_host: str = "0.0.0.0", - sidecar_port: int = 8100, - model_name: str = "default", - timeout: float = 600.0, - max_connections: int = 256, - log_level: str = "info", -): - """Launch the translation sidecar as a standalone uvicorn process.""" - - vllm_base_url = f"http://{vllm_host}:{vllm_port}" - sidecar = TranslationSidecar( - vllm_base_url=vllm_base_url, - model_name=model_name, - timeout=timeout, - max_connections=max_connections, - ) - uvicorn.run( - sidecar.app, - host=sidecar_host, - port=sidecar_port, - log_level=log_level, - ) - - -def main(): - parser = argparse.ArgumentParser(description="vLLM Translation Sidecar") - parser.add_argument("--vllm-host", type=str, default="127.0.0.1") - parser.add_argument("--vllm-port", type=int, default=8000) - parser.add_argument("--sidecar-host", type=str, default="0.0.0.0") - parser.add_argument("--sidecar-port", type=int, default=8100) - parser.add_argument("--model-name", type=str, default="default") - parser.add_argument("--timeout", type=float, default=600.0) - parser.add_argument("--max-connections", type=int, default=256) - parser.add_argument("--log-level", type=str, default="info") - args = parser.parse_args() - - run_sidecar( - vllm_host=args.vllm_host, - vllm_port=args.vllm_port, - sidecar_host=args.sidecar_host, - sidecar_port=args.sidecar_port, - model_name=args.model_name, - timeout=args.timeout, - max_connections=args.max_connections, - log_level=args.log_level, - ) - - -if __name__ == "__main__": - main() diff --git a/slime/ray/actor_group.py b/slime/ray/actor_group.py index d50a61d1c4..5542835313 100644 --- a/slime/ray/actor_group.py +++ b/slime/ray/actor_group.py @@ -50,45 +50,16 @@ def _allocate_gpus_for_actor(self, pg, num_gpus_per_actor): assert pg is not None pg, reordered_bundle_indices, _reordered_gpu_ids = pg - # Restrict CUDA_VISIBLE_DEVICES to only this group's GPUs so that - # NCCL / PyTorch do not allocate memory on rollout GPUs. - trainer_gpu_ids = [_reordered_gpu_ids[rank] for rank in range(world_size)] - trainer_cvd = ",".join(str(g) for g in trainer_gpu_ids) - env_vars = { # because sglang will always set NCCL_CUMEM_ENABLE to 0 # we need also set it to 0 to prevent nccl error. "NCCL_CUMEM_ENABLE": os.environ.get("NCCL_CUMEM_ENABLE", "0"), "NVTE_FP8_BLOCK_SCALING_FP32_SCALES": os.environ.get("NVTE_FP8_BLOCK_SCALING_FP32_SCALES", "1"), **{name: "1" for name in NOSET_VISIBLE_DEVICES_ENV_VARS_LIST}, - "CUDA_VISIBLE_DEVICES": trainer_cvd, **self.args.train_env_vars, } - # if self.args.offload_train and self.args.train_backend == "megatron": - # import torch_memory_saver - - # dynlib_path = os.path.join( - # os.path.dirname(os.path.dirname(torch_memory_saver.__file__)), - # "torch_memory_saver_hook_mode_preload.abi3.so", - # ) - # assert os.path.exists(dynlib_path), f"LD_PRELOAD so file {dynlib_path} does not exist." - - # env_vars["LD_PRELOAD"] = dynlib_path - # env_vars["TMS_INIT_ENABLE"] = "1" - # env_vars["TMS_INIT_ENABLE_CPU_BACKUP"] = "1" - - # torch_memory_saver requires an LD_PRELOAD'd allocator hook. It is only - # used when offloading the trainer for the sglang rollout backend. With - # the vLLM rollout backend we instead fall back to an explicit CPU - # offload path inside the Megatron actor (see ``MegatronTrainRayActor`` - # ``sleep`` / ``wake_up``), so we must NOT preload the .so here. - rollout_backend = getattr(self.args, "rollout_backend", "sglang") - if ( - self.args.offload_train - and self.args.train_backend == "megatron" - and rollout_backend != "vllm" - ): + if self.args.offload_train and self.args.train_backend == "megatron": import torch_memory_saver dynlib_path = os.path.join( @@ -105,9 +76,16 @@ def _allocate_gpus_for_actor(self, pg, num_gpus_per_actor): if self.args.use_routing_replay and self.role == "actor": env_vars["ENABLE_ROUTING_REPLAY"] = "1" - from slime.backends.megatron_utils.actor import MegatronTrainRayActor + backend = self.args.train_backend + if backend == "megatron": + from slime.backends.megatron_utils.actor import MegatronTrainRayActor + + actor_impl = MegatronTrainRayActor + + else: + from slime.backends.fsdp_utils import FSDPTrainRayActor - actor_impl = MegatronTrainRayActor + actor_impl = FSDPTrainRayActor TrainRayActor = ray.remote(num_gpus=1, runtime_env={"env_vars": env_vars})(actor_impl) @@ -137,25 +115,9 @@ def async_init(self, args, role, with_ref=False, with_opd_teacher=False): for actor in self._actor_handlers ] - def async_train(self, rollout_id, rollout_data_ref, external_data=None): - """Do one rollout training. Returns a list of Ray refs (one per worker). - - For critics, each ref resolves to ``{"values": [cpu tensors...]}`` (or ``{}`` - for non-last-PP-stage workers). Actor refs resolve to ``None``. - - ``external_data`` may be a list (one item per worker) or a single dict - broadcast to all workers. - """ - if isinstance(external_data, list): - assert len(external_data) == len(self._actor_handlers) - return [ - actor.train.remote(rollout_id, rollout_data_ref, external_data=ed) - for actor, ed in zip(self._actor_handlers, external_data, strict=False) - ] - return [ - actor.train.remote(rollout_id, rollout_data_ref, external_data=external_data) - for actor in self._actor_handlers - ] + def async_train(self, rollout_id, rollout_data_ref): + """Do one rollout training""" + return [actor.train.remote(rollout_id, rollout_data_ref) for actor in self._actor_handlers] def save_model(self, rollout_id, force_sync=False): """Save actor model""" @@ -174,5 +136,13 @@ def offload(self): def clear_memory(self): return ray.get([actor.clear_memory.remote() for actor in self._actor_handlers]) + def connect(self, critic_group): + return ray.get( + [ + actor.connect_actor_critic.remote(critic) + for actor, critic in zip(self._actor_handlers, critic_group._actor_handlers, strict=False) + ] + ) + def set_rollout_manager(self, rollout_manager): return ray.get([actor.set_rollout_manager.remote(rollout_manager) for actor in self._actor_handlers]) diff --git a/slime/ray/placement_group.py b/slime/ray/placement_group.py index edc723dcef..ef78e271eb 100644 --- a/slime/ray/placement_group.py +++ b/slime/ray/placement_group.py @@ -77,93 +77,91 @@ def _create_placement_group(num_gpus): def create_placement_groups(args): - """Create placement groups for actor, critic, and rollout engines.""" + """Create placement groups for actor and rollout engines.""" num_gpus = 0 if args.debug_train_only: num_gpus = args.actor_num_nodes * args.actor_num_gpus_per_node rollout_offset = 0 + if args.use_critic: + num_gpus += args.critic_num_nodes * args.critic_num_gpus_per_node + critic_offset = args.actor_num_nodes * args.actor_num_gpus_per_node elif args.debug_rollout_only: num_gpus = args.rollout_num_gpus rollout_offset = 0 elif args.colocate: num_gpus = args.actor_num_nodes * args.actor_num_gpus_per_node rollout_offset = 0 + if args.use_critic: + num_gpus += args.critic_num_nodes * args.critic_num_gpus_per_node + critic_offset = args.actor_num_nodes * args.actor_num_gpus_per_node else: num_gpus = args.actor_num_nodes * args.actor_num_gpus_per_node + args.rollout_num_gpus rollout_offset = args.actor_num_nodes * args.actor_num_gpus_per_node + if args.use_critic: + num_gpus += args.critic_num_nodes * args.critic_num_gpus_per_node + critic_offset = args.actor_num_nodes * args.actor_num_gpus_per_node + rollout_offset += args.critic_num_nodes * args.critic_num_gpus_per_node logger.info(f"Creating placement group with {num_gpus} GPUs...") pg, actor_pg_reordered_bundle_indices, actor_pg_reordered_gpu_ids = _create_placement_group(num_gpus) + rollout_pg_reordered_bundle_indices = actor_pg_reordered_bundle_indices[rollout_offset:] rollout_pg_reordered_gpu_ids = actor_pg_reordered_gpu_ids[rollout_offset:] + if args.use_critic: + critic_pg_reordered_bundle_indices = actor_pg_reordered_bundle_indices[critic_offset:] + critic_pg_reordered_gpu_ids = actor_pg_reordered_gpu_ids[critic_offset:] - result = { + return { "actor": (pg, actor_pg_reordered_bundle_indices, actor_pg_reordered_gpu_ids), + "critic": (pg, critic_pg_reordered_bundle_indices, critic_pg_reordered_gpu_ids) if args.use_critic else None, "rollout": (pg, rollout_pg_reordered_bundle_indices, rollout_pg_reordered_gpu_ids), } - result["critic"] = result["actor"] if args.use_critic else None - - return result - -def allocate_train_group(args, num_nodes, num_gpus_per_node, pg, role="actor"): +def allocate_train_group(args, num_nodes, num_gpus_per_node, pg): return RayTrainGroup( args=args, num_nodes=num_nodes, num_gpus_per_node=num_gpus_per_node, pg=pg, num_gpus_per_actor=0.4, - role=role, ) def create_training_models(args, pgs, rollout_manager): - actor_args = args - if args.megatron_config_path is not None: - from slime.utils.arguments import parse_megatron_role_args - - actor_args = parse_megatron_role_args(args, args.megatron_config_path, role="actor") - actor_model = allocate_train_group( - args=actor_args, + args=args, num_nodes=args.actor_num_nodes, num_gpus_per_node=args.actor_num_gpus_per_node, pg=pgs["actor"], ) - - critic_model = None if args.use_critic: - from slime.utils.arguments import parse_megatron_role_args - - critic_args = ( - parse_megatron_role_args(args, args.megatron_config_path, role="critic") - if args.megatron_config_path is not None - else args - ) critic_model = allocate_train_group( - args=critic_args, + args=args, num_nodes=args.critic_num_nodes, num_gpus_per_node=args.critic_num_gpus_per_node, pg=pgs["critic"], - role="critic", ) - critic_start_rollout_ids = ray.get(critic_model.async_init(critic_model.args, role="critic", with_ref=False)) + critic_init_handle = critic_model.async_init(args, role="critic", with_ref=False) + else: + critic_model = None - actor_start_rollout_ids = ray.get( + start_rollout_ids = ray.get( actor_model.async_init( - actor_args, + args, role="actor", - with_ref=actor_args.kl_coef != 0 or actor_args.use_kl_loss, - with_opd_teacher=actor_args.use_opd and actor_args.opd_type == "megatron", + with_ref=args.kl_coef != 0 or args.use_kl_loss, + with_opd_teacher=args.use_opd and args.opd_type == "megatron", ) ) - # TODO how to decide rollout start id when critic is involved? For now we just require user to specify it via args. + if args.use_critic: - start_rollout_ids = critic_start_rollout_ids - else: - start_rollout_ids = actor_start_rollout_ids + critic_start_rollout_ids = ray.get(critic_init_handle) + if not args.critic_train_only: + actor_model.connect(critic_model) + else: + start_rollout_ids = critic_start_rollout_ids assert len(set(start_rollout_ids)) == 1 diff --git a/slime/ray/rollout.py b/slime/ray/rollout.py index fbb6338f93..8f919c1172 100644 --- a/slime/ray/rollout.py +++ b/slime/ray/rollout.py @@ -11,15 +11,11 @@ import numpy as np import ray import torch +import yaml from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy +from sglang.srt.constants import GPU_MEMORY_TYPE_CUDA_GRAPH, GPU_MEMORY_TYPE_KV_CACHE, GPU_MEMORY_TYPE_WEIGHTS -# GPU memory-tag constants (originally from sglang.srt.constants). -# Duplicated here to avoid a hard sglang dependency when running the vLLM backend. -GPU_MEMORY_TYPE_KV_CACHE = "kv_cache" -GPU_MEMORY_TYPE_WEIGHTS = "weights" -GPU_MEMORY_TYPE_CUDA_GRAPH = "cuda_graph" - -from slime.backends.sglang_utils.sglang_config import ModelConfig, ServerGroupConfig, SglangConfig +from slime.backends.sglang_utils.sglang_engine import SGLangEngine from slime.rollout.base_types import call_rollout_fn from slime.utils import logging_utils from slime.utils.health_monitor import RolloutHealthMonitor @@ -40,11 +36,158 @@ @dataclasses.dataclass -class ServerGroup: +class EngineGroupConfig: + """Configuration for a single engine group. + + Attributes: + worker_type: One of "regular", "prefill", "decode", or "placeholder". + "placeholder" reserves GPU slots without creating engines. + num_gpus: Total number of GPUs for this group. + num_gpus_per_engine: GPUs per engine for this group. Overrides the + model-level or global ``--rollout-num-gpus-per-engine``. + overrides: Optional dict of SGLang ``ServerArgs`` field overrides. + These are applied on top of the base CLI ``--sglang-*`` + arguments in ``_compute_server_args``. + """ + + worker_type: str + num_gpus: int + num_gpus_per_engine: int | None = None + overrides: dict = dataclasses.field(default_factory=dict) + + def __post_init__(self): + valid_types = {"regular", "prefill", "decode", "placeholder"} + assert ( + self.worker_type in valid_types + ), f"Invalid worker_type '{self.worker_type}', must be one of {valid_types}" + assert self.num_gpus > 0, f"num_gpus must be > 0, got {self.num_gpus}" + + +@dataclasses.dataclass +class ModelConfig: + """Configuration for a single model deployment. + + Attributes: + name: Unique name for this model (e.g. "actor", "reward"). + model_path: HF checkpoint path. Falls back to ``args.hf_checkpoint``. + num_gpus_per_engine: Default GPUs per engine for all groups in this + model. Individual groups can override. + engine_groups: Engine group configurations for this model. + """ + + name: str + model_path: str | None = None + num_gpus_per_engine: int | None = None + engine_groups: list[EngineGroupConfig] = dataclasses.field(default_factory=list) + + def resolve(self, args) -> None: + """Resolve per-group defaults from model-level then args-level values.""" + default_gpus_per_engine = self.num_gpus_per_engine or args.rollout_num_gpus_per_engine + default_model_path = self.model_path or args.hf_checkpoint + for g in self.engine_groups: + if g.num_gpus_per_engine is None: + g.num_gpus_per_engine = default_gpus_per_engine + # Inject model_path into overrides so _compute_server_args picks it up. + if "model_path" not in g.overrides: + g.overrides["model_path"] = default_model_path + + @property + def has_pd_disaggregation(self) -> bool: + return any(g.worker_type in ("prefill", "decode") for g in self.engine_groups) + + @property + def total_num_gpus(self) -> int: + return sum(g.num_gpus for g in self.engine_groups) + + +@dataclasses.dataclass +class SglangConfig: + """Configuration for SGLang engine deployment. + + Loaded from ``--sglang-config`` YAML file. + + **Config format**:: + + sglang: + - name: actor + model_path: /path/to/actor + num_gpus_per_engine: 2 + engine_groups: + - worker_type: prefill + num_gpus: 4 + num_gpus_per_engine: 2 + - worker_type: decode + num_gpus: 8 + num_gpus_per_engine: 4 + - name: reward + model_path: /path/to/reward + engine_groups: + - worker_type: regular + num_gpus: 4 + + Each model gets its own router. ``placeholder`` groups reserve GPU + slots without creating engines. ``overrides`` are ``ServerArgs`` + field names applied on top of the base ``--sglang-*`` CLI args. + """ + + models: list[ModelConfig] + + @staticmethod + def from_yaml(path: str) -> "SglangConfig": + with open(path) as f: + data = yaml.safe_load(f) + + assert "sglang" in data, ( + f"sglang config must have a 'sglang' key, got {list(data.keys())}. " + f"Wrap your engine_groups inside a model entry under 'sglang'." + ) + models = [] + for m in data["sglang"]: + groups = [EngineGroupConfig(**g) for g in m.get("engine_groups", [])] + models.append( + ModelConfig( + name=m["name"], + model_path=m.get("model_path"), + num_gpus_per_engine=m.get("num_gpus_per_engine"), + engine_groups=groups, + ) + ) + return SglangConfig(models=models) + + @staticmethod + def from_prefill_num_servers(args) -> "SglangConfig": + """Build a config equivalent to the legacy --prefill-num-servers flag.""" + total_gpus = args.rollout_num_gpus + prefill_gpus = args.prefill_num_servers * args.rollout_num_gpus_per_engine + decode_gpus = total_gpus - prefill_gpus + assert decode_gpus > 0, f"No decode GPUs: total {total_gpus}, prefill {prefill_gpus}" + return SglangConfig( + models=[ + ModelConfig( + name="default", + engine_groups=[ + EngineGroupConfig(worker_type="prefill", num_gpus=prefill_gpus), + EngineGroupConfig(worker_type="decode", num_gpus=decode_gpus), + ], + ) + ] + ) + + @property + def has_pd_disaggregation(self) -> bool: + return any(m.has_pd_disaggregation for m in self.models) + + @property + def total_num_gpus(self) -> int: + return sum(m.total_num_gpus for m in self.models) + + +@dataclasses.dataclass +class EngineGroup: """A group of homogeneous SGLang engines with the same configuration. All engines in a group share the same tp_size / nodes_per_engine / pg. - A RolloutServer may contain multiple ServerGroups (e.g. prefill vs decode + A RolloutServer may contain multiple EngineGroups (e.g. prefill vs decode in PD disaggregation). """ @@ -53,12 +196,10 @@ class ServerGroup: all_engines: list num_gpus_per_engine: int num_new_engines: int - worker_type: str = "regular" # "regular", "prefill", "decode", or "placeholder" + worker_type: str = "regular" # "regular", "prefill", or "decode" rank_offset: int = 0 # cumulative engine count before this group gpu_offset: int = 0 # cumulative GPU count before this group sglang_overrides: dict = dataclasses.field(default_factory=dict) - needs_offload: bool = False # True when this group's GPUs overlap with megatron - model_path: str | None = None # checkpoint path for update_weights_from_disk router_ip: str | None = None router_port: int | None = None @@ -77,7 +218,7 @@ def start_engines(self, port_cursors: dict[int, int] | None = None) -> tuple[lis Returns ``(init_handles, port_cursors)`` where *init_handles* is a list of Ray ObjectRefs and *port_cursors* maps node index → next free port. The caller should ``ray.get()`` on the handles to block until the - engines are healthy, and pass *port_cursors* to the next server group + engines are healthy, and pass *port_cursors* to the next engine group so that different groups on the same node don't race for ports. Placeholder groups (worker_type="placeholder") skip engine creation entirely. @@ -92,14 +233,7 @@ def start_engines(self, port_cursors: dict[int, int] | None = None) -> tuple[lis pg, reordered_bundle_indices, reordered_gpu_ids = self.pg - if getattr(self.args, "rollout_backend", "sglang") == "vllm": - from slime.backends.vllm_utils.vllm_engine import VLLMEngine - - RolloutRayActor = ray.remote(VLLMEngine) - else: - from slime.backends.sglang_utils.sglang_engine import SGLangEngine - - RolloutRayActor = ray.remote(SGLangEngine) + RolloutRayActor = ray.remote(SGLangEngine) rollout_engines = [] for i in range(len(self.all_engines)): @@ -123,17 +257,16 @@ def start_engines(self, port_cursors: dict[int, int] | None = None) -> tuple[lis env_vars = {name: "1" for name in NOSET_VISIBLE_DEVICES_ENV_VARS_LIST} | { key: os.environ.get(key, default_val) for key, default_val in { - "SGLANG_JIT_DEEPGEMM_PRECOMPILE": "true", - "SGLANG_JIT_DEEPGEMM_FAST_WARMUP": "true", + "SGLANG_JIT_DEEPGEMM_PRECOMPILE": "false", "SGL_DISABLE_TP_MEMORY_INBALANCE_CHECK": "true", "SGLANG_DISABLE_TP_MEMORY_INBALANCE_CHECK": "true", "SGLANG_MEMORY_SAVER_CUDA_GRAPH": "true", "SGLANG_BATCH_INVARIANT_OPS_ENABLE_MM_FALLBACK_VARIANT": "true", "SGLANG_ENABLE_HEALTH_ENDPOINT_GENERATION": "false", "SGLANG_ENABLE_STRICT_MEM_CHECK_DURING_IDLE": "false", - "SLIME_ENABLE_PROFILING": "true", }.items() } + rollout_engine = RolloutRayActor.options( num_cpus=num_cpus, num_gpus=num_gpus, @@ -188,74 +321,55 @@ def start_engines(self, port_cursors: dict[int, int] | None = None) -> tuple[lis def offload(self): """Fire release_memory_occupation on all engines (non-blocking). - Returns a list of Ray ObjectRefs. Skipped for groups that do not - overlap with megatron GPUs (``needs_offload=False``). + Returns a list of Ray ObjectRefs. """ - if not self.needs_offload: - return [] return [engine.release_memory_occupation.remote() for engine in self.engines if engine is not None] def onload(self, tags: list[str] | None = None): """Fire resume_memory_occupation on all engines (non-blocking). - Returns a list of Ray ObjectRefs. Skipped for groups that do not - overlap with megatron GPUs (``needs_offload=False``). + Returns a list of Ray ObjectRefs. """ - if not self.needs_offload: - return [] return [engine.resume_memory_occupation.remote(tags=tags) for engine in self.engines if engine is not None] - def onload_weights_from_disk(self): - """Reload weights from ``model_path`` for non-updatable groups. - - Used instead of ``resume_memory_occupation(tags=[WEIGHTS])`` so that - CPU memory is not consumed by offloaded weight copies. - """ - if not self.needs_offload or not self.model_path: - return [] - return [ - engine.update_weights_from_disk.remote(self.model_path) for engine in self.engines if engine is not None - ] - @dataclasses.dataclass class RolloutServer: - """A model served behind a shared router, with one or more server groups. + """A model served behind a shared router, with one or more engine groups. Each RolloutServer represents one model deployed behind a single router. - A server may contain multiple ServerGroups with different + A server may contain multiple EngineGroups with different ``num_gpus_per_engine`` (e.g. prefill TP=2, decode TP=4). """ - server_groups: list[ServerGroup] + engine_groups: list[EngineGroup] router_ip: str | None = None router_port: int | None = None model_name: str = "default" - update_weights: bool = True @property def engines(self): """All node-0 engines across all groups (placeholder groups contribute nothing).""" - return [e for g in self.server_groups for e in g.engines] + return [e for g in self.engine_groups for e in g.engines] @property def all_engines(self): """All engines (including non-node-0) across all groups.""" - return [e for g in self.server_groups for e in g.all_engines] + return [e for g in self.engine_groups for e in g.all_engines] @property def num_new_engines(self): - return sum(g.num_new_engines for g in self.server_groups) + return sum(g.num_new_engines for g in self.engine_groups) @num_new_engines.setter def num_new_engines(self, value): - for g in self.server_groups: + for g in self.engine_groups: g.num_new_engines = value @property def engine_gpu_counts(self) -> list[int]: """Per-engine GPU count for all node-0 engines, parallel to ``engines``.""" - return [g.num_gpus_per_engine for g in self.server_groups for _ in g.engines] + return [g.num_gpus_per_engine for g in self.engine_groups for _ in g.engines] @property def engine_gpu_offsets(self) -> list[int]: @@ -264,7 +378,7 @@ def engine_gpu_offsets(self) -> list[int]: Accounts for placeholder groups that occupy GPU slots without creating engines. """ offsets = [] - for g in self.server_groups: + for g in self.engine_groups: for j in range(len(g.engines)): offsets.append(g.gpu_offset + j * g.num_gpus_per_engine) return offsets @@ -272,7 +386,7 @@ def engine_gpu_offsets(self) -> list[int]: @property def nodes_per_engine(self): """Nodes per engine. Only valid when all active groups share the same value.""" - values = {g.nodes_per_engine for g in self.server_groups if g.worker_type != "placeholder"} + values = {g.nodes_per_engine for g in self.engine_groups} if len(values) != 1: raise ValueError(f"Heterogeneous nodes_per_engine across groups: {values}") return values.pop() @@ -280,12 +394,12 @@ def nodes_per_engine(self): def recover(self): """Recover dead engines across all active groups, overlapping init.""" # Record dead indices per group before starting. - dead_per_group = [[i for i, engine in enumerate(g.all_engines) if engine is None] for g in self.server_groups] + dead_per_group = [[i for i, engine in enumerate(g.all_engines) if engine is None] for g in self.engine_groups] # Start all groups concurrently. all_handles = [] port_cursors: dict[int, int] = {} - for g in self.server_groups: + for g in self.engine_groups: handles, port_cursors = g.start_engines(port_cursors) all_handles.extend(handles) if all_handles: @@ -293,69 +407,35 @@ def recover(self): # Post-recovery: offload then onload weights for newly created engines. release_handles = [] - updatable_new_engines = [] - non_updatable_groups_engines: list[tuple[str, list]] = [] - for g, dead_indices in zip(self.server_groups, dead_per_group, strict=True): + new_engines_all = [] + for g, dead_indices in zip(self.engine_groups, dead_per_group, strict=True): logger.info(f"Recovered {g.num_new_engines} dead rollout engines (worker_type={g.worker_type})") assert g.num_new_engines == len(dead_indices), "num_new_engines does not match dead_indices length" - if g.needs_offload and dead_indices: + if g.args.offload_rollout and dead_indices: new_engines = [g.all_engines[i] for i in dead_indices] release_handles.extend(engine.release_memory_occupation.remote() for engine in new_engines) - if self.update_weights: - updatable_new_engines.extend(new_engines) - elif g.model_path: - non_updatable_groups_engines.append((g.model_path, new_engines)) + new_engines_all.extend(new_engines) if release_handles: ray.get(release_handles) - # Resume GPU memory for all engines that need offload. - all_resume_engines = updatable_new_engines[:] - for _model_path, engines in non_updatable_groups_engines: - all_resume_engines.extend(engines) - if all_resume_engines: - ray.get( - [ - engine.resume_memory_occupation.remote(tags=[GPU_MEMORY_TYPE_WEIGHTS]) - for engine in all_resume_engines - ] - ) + ray.get( + [engine.resume_memory_occupation.remote(tags=[GPU_MEMORY_TYPE_WEIGHTS]) for engine in new_engines_all] + ) def offload(self): """Release memory occupation across all groups (concurrent).""" handles = [] - for g in self.server_groups: + for g in self.engine_groups: handles.extend(g.offload()) return ray.get(handles) if handles else [] def onload(self, tags: list[str] | None = None): """Resume memory occupation across all groups (concurrent).""" handles = [] - for g in self.server_groups: + for g in self.engine_groups: handles.extend(g.onload(tags)) return ray.get(handles) if handles else [] - def onload_weights(self): - """Restore weights for offloaded groups. - - All groups resume from CPU cache via ``resume_memory_occupation``. - For updatable servers, weights will be overwritten by - ``update_weights`` shortly after. For non-updatable servers the - CPU backup already contains the correct (unchanged) weights. - """ - handles = [] - for g in self.server_groups: - if not g.needs_offload: - continue - handles.extend(g.onload(tags=[GPU_MEMORY_TYPE_WEIGHTS])) - return ray.get(handles) if handles else [] - - def onload_kv(self): - """Resume KV cache and CUDA graphs for offloaded groups.""" - handles = [] - for g in self.server_groups: - handles.extend(g.onload(tags=[GPU_MEMORY_TYPE_KV_CACHE, GPU_MEMORY_TYPE_CUDA_GRAPH])) - return ray.get(handles) if handles else [] - @ray.remote class RolloutManager: @@ -366,7 +446,8 @@ def __init__(self, args, pg): self.pg = pg self.args = args - self.rollout_backend = getattr(args, "rollout_backend", "sglang") + + init_tracking(args, primary=False) data_source_cls = load_function(self.args.data_source_path) self.data_source = data_source_cls(args) @@ -389,37 +470,18 @@ def __init__(self, args, pg): else: init_http_client(args) self.servers = start_rollout_servers(args, pg) - - init_tracking(args, primary=False) self.rollout_engine_lock = Lock.options(num_cpus=1, num_gpus=0).remote() self.rollout_id = -1 self._health_monitors = [] if not self.args.debug_train_only and self.args.use_fault_tolerance: for srv in self.servers.values(): - for group in srv.server_groups: + for group in srv.engine_groups: monitor = RolloutHealthMonitor(group, args) monitor.start() self._health_monitors.append(monitor) self._ci_fault_injection_pending = self.args.ci_test # Flag for CI fault injection - def _get_metrics_router_addr(self) -> str | None: - """Return the router address for scraping SGLang engine metrics. - - The sglang_router gateway exposes ``/engine_metrics`` on its main port, - which aggregates Prometheus metrics from all backend sglang servers. - Returns ``http://{ip}:{port}`` for the first server, or ``None`` when - metrics are disabled or no servers are running. - """ - srv = self.server - if srv is None or srv.router_ip is None: - return None - return f"http://{srv.router_ip}:{srv.router_port}" - - def get_metrics_router_addr(self) -> str | None: - """Public wrapper for remote calls from the driver process.""" - return self._get_metrics_router_addr() - def _try_ci_fault_injection(self): """Try to inject fault during generate (when health monitor is running).""" if not self._ci_fault_injection_pending: @@ -428,11 +490,11 @@ def _try_ci_fault_injection(self): # Only inject fault once self._ci_fault_injection_pending = False - if self.server and self.server.server_groups[0].all_engines and self.server.server_groups[0].all_engines[0]: + if self.server and self.server.engine_groups[0].all_engines and self.server.engine_groups[0].all_engines[0]: logger.info("CI Fault Injection: Simulating crash on engine 0 during generate") try: # This will cause the ray actor to exit - self.server.server_groups[0].all_engines[0].simulate_crash.remote() + self.server.engine_groups[0].all_engines[0].simulate_crash.remote() # Wait for health monitor to detect the crash and mark engine as None # health_check_interval + health_check_timeout + buffer wait_time = self.args.rollout_health_check_interval + self.args.rollout_health_check_timeout + 5 @@ -444,7 +506,6 @@ def _try_ci_fault_injection(self): def dispose(self): for monitor in self._health_monitors: monitor.stop() - logging_utils.finish_tracking(self.args) @property def server(self) -> RolloutServer | None: @@ -453,30 +514,18 @@ def server(self) -> RolloutServer | None: return None return next(iter(self.servers.values())) - def _get_updatable_server(self) -> RolloutServer | None: - """Return the server with ``update_weights=True``. - - When multiple updatable servers exist, returns the first one - (multi-model weight update is not yet supported). - """ - for srv in self.servers.values(): - if srv.update_weights: - return srv - return None + def _get_server(self, model_name: str | None = None) -> RolloutServer | None: + if model_name is None: + return self.server + return self.servers.get(model_name) @property def rollout_engines(self): """All node-0 engines across all servers / models.""" return [e for srv in self.servers.values() for e in srv.engines] - def get_updatable_engines_and_lock(self): - """Return engines eligible for weight updates. - - Returns engines from the first model that has - ``update_weights=True``. Frozen models (reference, reward, - etc.) are automatically excluded. - """ - srv = self._get_updatable_server() + def get_rollout_engines_and_lock(self, model_name: str | None = None): + srv = self._get_server(model_name) engines = srv.engines if srv else [] gpu_counts = srv.engine_gpu_counts if srv else [] gpu_offsets = srv.engine_gpu_offsets if srv else [] @@ -529,31 +578,15 @@ def onload(self, tags: list[str] | None = None): srv.onload(tags) def onload_weights(self): - # vLLM does not expose a separate weights-only resume: a single - # resume_memory_occupation reloads both weights and KV cache. To keep - # the public ``onload_weights`` / ``onload_kv`` contract on the train - # side unchanged, we load everything here and make ``onload_kv`` a - # no-op for the vLLM backend. - if self.rollout_backend == "vllm": - self.onload(tags=[GPU_MEMORY_TYPE_WEIGHTS, GPU_MEMORY_TYPE_KV_CACHE]) - else: - self.onload(tags=[GPU_MEMORY_TYPE_WEIGHTS]) + self.onload(tags=[GPU_MEMORY_TYPE_WEIGHTS]) def onload_kv(self): - # See ``onload_weights``: for vLLM, weights+KV are already resumed - # together, so this is a no-op to avoid a double-resume. - if self.rollout_backend == "vllm": - return self.onload(tags=[GPU_MEMORY_TYPE_KV_CACHE, GPU_MEMORY_TYPE_CUDA_GRAPH]) - def recover_updatable_engines(self): - """Restart any dead rollout engines and update num_new_engines for update_weights detection. - - Recovers the updatable model (the one that receives weight - updates from training). - """ + def recover_rollout_engines(self, model_name: str | None = None): + """Restart any dead rollout engines and update num_new_engines for update_weights detection.""" self.health_monitoring_pause() - srv = self._get_updatable_server() + srv = self._get_server(model_name) if self.rollout_id == -1 or srv is None: engines = srv.engines if srv else [] gpu_counts = srv.engine_gpu_counts if srv else [] @@ -569,9 +602,9 @@ def recover_updatable_engines(self): srv.engine_gpu_offsets, ) - def clear_updatable_num_new_engines(self): + def clear_num_new_engines(self, model_name: str | None = None): # when fault tolerance is not enabled, we need to manually clear num_new_engines after update_weights - srv = self._get_updatable_server() + srv = self._get_server(model_name) if srv: srv.num_new_engines = 0 @@ -740,13 +773,9 @@ def _convert_samples_to_train_data(self, samples: list[Sample] | list[list[Sampl loss_masks.append(sample.loss_mask) train_data["loss_masks"] = loss_masks - # Overwrite raw_reward when available. Mixed-source batches may only - # populate this field for a subset of samples (e.g. SWE but not code). - if any(sample.metadata and "raw_reward" in sample.metadata for sample in samples): - train_data["raw_reward"] = [ - sample.metadata["raw_reward"] if sample.metadata and "raw_reward" in sample.metadata else sample.reward - for sample in samples - ] + # overwriting the raw reward + if samples[0].metadata and "raw_reward" in samples[0].metadata: + train_data["raw_reward"] = [sample.metadata["raw_reward"] for sample in samples] # For rollout buffer if samples[0].metadata and "round_number" in samples[0].metadata: @@ -860,7 +889,7 @@ def _allocate_rollout_engine_addr_and_ports_normal( num_engines_per_node = max(1, args.num_gpus_per_node // _gpus_per_engine) addr_and_ports: dict[int, dict] = {} - # Track per-node port cursors so that different server groups (called + # Track per-node port cursors so that different engine groups (called # sequentially) never race for the same ports on a given node. node_port_cursor: dict[int, int] = {} @@ -937,14 +966,14 @@ def _start_router(args, *, has_pd_disaggregation: bool = False, force_new: bool ``force_new`` is False, skip launching and return the existing values. When ``force_new`` is True (multi-model), always allocate a fresh port. """ - if not force_new and getattr(args, "sglang_router_ip", None) is not None: + if not force_new and args.sglang_router_ip is not None: return args.sglang_router_ip, args.sglang_router_port router_ip = _wrap_ipv6(get_host_info()[1]) if force_new: router_port = find_available_port(random.randint(3000, 4000)) else: - router_port = getattr(args, "sglang_router_port", None) + router_port = args.sglang_router_port if router_port is None: router_port = find_available_port(random.randint(3000, 4000)) @@ -959,7 +988,7 @@ def _start_router(args, *, has_pd_disaggregation: bool = False, force_new: bool router_args.sglang_router_port = router_port else: - from sglang_router.launch_router import RouterArgs # noqa: delayed import — only needed for sglang router + from sglang_router.launch_router import RouterArgs from slime.utils.http_utils import run_router @@ -991,121 +1020,11 @@ def _start_router(args, *, has_pd_disaggregation: bool = False, force_new: bool return router_ip, router_port -def _start_vllm_rollout_servers(args, pg) -> dict[str, RolloutServer]: - """Start vLLM rollout server(s) with optional SlimeRouter. - - When ``args.use_slime_router`` is True, a SlimeRouter is launched first - and each vLLM engine registers its translation sidecar with the router. - Otherwise, a single engine is started and used directly (no router). - """ - pg_obj, reordered_bundle_indices, reordered_gpu_ids = pg - tp = args.rollout_num_gpus_per_engine - num_gpu_per_engine_local = min(tp, args.num_gpus_per_node) - num_engines = max(1, args.rollout_num_gpus // num_gpu_per_engine_local) - - use_router = getattr(args, "use_slime_router", False) - - # --- Launch the SlimeRouter if requested --- - if use_router: - router_ip, router_port = _start_router(args, has_pd_disaggregation=False) - args.sglang_router_ip = router_ip - args.sglang_router_port = router_port - else: - router_ip = None - router_port = None - - env_vars = {name: "1" for name in NOSET_VISIBLE_DEVICES_ENV_VARS_LIST} - - from slime.backends.vllm_utils.vllm_engine import VLLMEngine - - VLLMRayActor = ray.remote(VLLMEngine) - - engines = [] - init_handles = [] - for i in range(num_engines): - gpu_index = i * num_gpu_per_engine_local - gpu_ids = [int(reordered_gpu_ids[gpu_index + j]) for j in range(num_gpu_per_engine_local)] - scheduling_strategy = PlacementGroupSchedulingStrategy( - placement_group=pg_obj, - placement_group_capture_child_tasks=True, - placement_group_bundle_index=reordered_bundle_indices[gpu_index], - ) - - engine = VLLMRayActor.options( - num_cpus=0.2, - num_gpus=0.2, - scheduling_strategy=scheduling_strategy, - runtime_env={"env_vars": env_vars}, - ).remote(args, rank=i, base_gpu_id=gpu_ids[0], gpu_ids=gpu_ids) - - host, port = ray.get(engine._get_current_node_ip_and_free_port.remote(start_port=15000 + i * 10)) - - init_handles.append( - engine.init.remote( - port=port, - host=host, - router_ip=router_ip, - router_port=router_port, - ) - ) - engines.append(engine) - - # Use the first engine's host for args if no router - if i == 0 and not use_router: - args.vllm_base_url = f"http://{host}:{port}" - args.sglang_router_ip = host - args.sglang_router_port = port - - # Wait for all engines to be healthy + registered with router - ray.get(init_handles) - - first_host = args.sglang_router_ip - first_port = args.sglang_router_port - - group = ServerGroup( - args=args, - pg=pg, - all_engines=engines, - num_gpus_per_engine=args.rollout_num_gpus_per_engine, - num_new_engines=num_engines, - worker_type="regular", - rank_offset=0, - gpu_offset=0, - sglang_overrides={}, - needs_offload=getattr(args, "offload_rollout", False), - model_path=getattr(args, "hf_checkpoint", None), - router_ip=first_host, - router_port=first_port, - ) - return { - "default": RolloutServer( - server_groups=[group], - router_ip=first_host, - router_port=first_port, - model_name="default", - ) - } -def _compute_rollout_offset(args) -> int: - """Offset (in PG bundle slots) where rollout GPUs start.""" - if args.debug_train_only or args.debug_rollout_only or args.colocate: - return 0 - offset = args.actor_num_nodes * args.actor_num_gpus_per_node - return offset - - -def _compute_megatron_num_gpus(args) -> int: - """Total number of megatron (actor + critic) GPU slots in the placement group.""" - if args.debug_rollout_only: - return 0 - num = args.actor_num_nodes * args.actor_num_gpus_per_node - return num - - def start_rollout_servers(args, pg) -> dict[str, RolloutServer]: """Start rollout servers: one per model, each with its own router. Each model defined in the sglang config gets its own router and set - of server groups. Server groups within a model may have different + of engine groups. Engine groups within a model may have different ``num_gpus_per_engine`` (e.g. for PD disaggregation where prefill and decode use different TP sizes). @@ -1114,19 +1033,12 @@ def start_rollout_servers(args, pg) -> dict[str, RolloutServer]: Note: ``init_http_client`` should be called separately before this, as the HTTP client is shared across all servers. """ - if getattr(args, "rollout_backend", "sglang") == "vllm": - return _start_vllm_rollout_servers(args, pg) - config = _resolve_sglang_config(args) servers: dict[str, RolloutServer] = {} gpu_offset = 0 engine_offset = 0 - # Compute megatron GPU range for per-group offload decisions. - rollout_pg_offset = _compute_rollout_offset(args) - megatron_num_gpus = _compute_megatron_num_gpus(args) - for model_idx, model_cfg in enumerate(config.models): model_cfg.resolve(args) @@ -1138,31 +1050,16 @@ def start_rollout_servers(args, pg) -> dict[str, RolloutServer]: args.sglang_router_ip = router_ip args.sglang_router_port = router_port - server_groups: list[ServerGroup] = [] + engine_groups: list[EngineGroup] = [] + all_init_handles: list = [] port_cursors: dict[int, int] = {} - has_epd = model_cfg.has_encoder_disaggregation - - def _make_group(group_cfg, router_ip, router_port, overrides_extra=None): - nonlocal engine_offset, gpu_offset + for group_cfg in model_cfg.engine_groups: gpus_per_engine = group_cfg.num_gpus_per_engine num_gpu_per_engine_local = min(gpus_per_engine, args.num_gpus_per_node) num_engines = group_cfg.num_gpus // num_gpu_per_engine_local - group_abs_start = rollout_pg_offset + gpu_offset - needs_offload = args.offload_rollout and group_abs_start < megatron_num_gpus - overrides = dict(group_cfg.overrides) - if overrides_extra: - for k, v in overrides_extra.items(): - overrides.setdefault(k, v) - if args.offload_rollout and not needs_offload: - overrides.setdefault("enable_memory_saver", False) - logger.info( - f"Engine group '{group_cfg.worker_type}' gpu_offset={gpu_offset} " - f"(abs={group_abs_start}): needs_offload={needs_offload}" - ) - - group = ServerGroup( + group = EngineGroup( args=args, pg=pg, all_engines=[None] * num_engines if group_cfg.worker_type != "placeholder" else [], @@ -1171,73 +1068,27 @@ def _make_group(group_cfg, router_ip, router_port, overrides_extra=None): worker_type=group_cfg.worker_type, rank_offset=engine_offset, gpu_offset=gpu_offset, - sglang_overrides=overrides, - needs_offload=needs_offload, - model_path=overrides.get("model_path", args.hf_checkpoint), + sglang_overrides=group_cfg.overrides, router_ip=router_ip, router_port=router_port, ) + handles, port_cursors = group.start_engines(port_cursors) + all_init_handles.extend(handles) + engine_groups.append(group) + engine_offset += num_engines gpu_offset += group_cfg.num_gpus - return group - - if has_epd: - # --- Phase 1: start encoder groups, wait, collect URLs --- - encoder_urls: list[str] = [] - for group_cfg in model_cfg.server_groups: - if group_cfg.worker_type != "encoder": - continue - group = _make_group(group_cfg, router_ip, router_port) - handles, port_cursors = group.start_engines(port_cursors) - if handles: - ray.get(handles) - urls = ray.get([e.get_url.remote() for e in group.engines]) - encoder_urls.extend(u for u in urls if u is not None) - server_groups.append(group) - - logger.info(f"EPD phase 1 done: collected {len(encoder_urls)} encoder URLs: {encoder_urls}") - - # --- Phase 2: start non-encoder groups, injecting encoder URLs into - # language-only LLM workers. Prefill groups use this for full EPD, - # while regular groups allow encoder/LLM split without PD. - non_encoder_handles: list = [] - for group_cfg in model_cfg.server_groups: - if group_cfg.worker_type == "encoder": - continue - overrides_extra = {} - if encoder_urls and group_cfg.worker_type in ("prefill", "regular"): - overrides_extra["language_only"] = True - overrides_extra["encoder_urls"] = encoder_urls - group = _make_group(group_cfg, router_ip, router_port, overrides_extra=overrides_extra) - handles, port_cursors = group.start_engines(port_cursors) - non_encoder_handles.extend(handles) - server_groups.append(group) - - if non_encoder_handles: - ray.get(non_encoder_handles) - else: - # No EPD — start all groups in one pass (original path). - all_init_handles: list = [] - for group_cfg in model_cfg.server_groups: - group = _make_group(group_cfg, router_ip, router_port) - handles, port_cursors = group.start_engines(port_cursors) - all_init_handles.extend(handles) - server_groups.append(group) - if all_init_handles: - ray.get(all_init_handles) + if all_init_handles: + ray.get(all_init_handles) servers[model_cfg.name] = RolloutServer( - server_groups=server_groups, + engine_groups=engine_groups, router_ip=router_ip, router_port=router_port, model_name=model_cfg.name, - update_weights=model_cfg.update_weights, ) - # Expose per-model router info for custom rollout functions. - args.sglang_model_routers = {name: (srv.router_ip, srv.router_port) for name, srv in servers.items()} - return servers @@ -1259,7 +1110,7 @@ def _resolve_sglang_config(args) -> SglangConfig: models=[ ModelConfig( name="default", - server_groups=[ServerGroupConfig(worker_type="regular", num_gpus=args.rollout_num_gpus)], + engine_groups=[EngineGroupConfig(worker_type="regular", num_gpus=args.rollout_num_gpus)], ) ] ) @@ -1322,8 +1173,6 @@ def compute_metrics_from_samples(args, samples): log_dict = {} log_dict |= dict_add_prefix(compute_statistics(response_lengths), "response_len/") log_dict |= _compute_zero_std_metrics(args, samples) - log_dict |= _compute_spec_metrics(args, samples) - log_dict |= _compute_prefix_cache_metrics(args, samples) log_dict |= _compute_reward_cat_metrics(args, samples) log_dict["repetition_frac"] = np.mean([int(has_repetition(s.response)) for s in samples]).item() log_dict["truncated_ratio"] = np.mean([int(s.status == Sample.Status.TRUNCATED) for s in samples]).item() diff --git a/slime/ray/train_actor.py b/slime/ray/train_actor.py index a8ba6ddc64..87400ce130 100644 --- a/slime/ray/train_actor.py +++ b/slime/ray/train_actor.py @@ -58,7 +58,12 @@ def init(self, args, role, with_ref=False, with_opd_teacher=False): local_rank = int(os.environ.get("LOCAL_RANK", 0)) torch.cuda.set_device(f"cuda:{local_rank}") + # Use hybrid backend when FSDP CPU offload is enabled with a CPU backend backend = args.distributed_backend + if getattr(args, "fsdp_cpu_offload", False) and getattr(args, "fsdp_cpu_backend", None): + cpu_backend = args.fsdp_cpu_backend + backend = f"cpu:{cpu_backend},cuda:{args.distributed_backend}" + logger.info(f"FSDP CPU offload enabled, using hybrid backend: {backend}") dist.init_process_group( backend=backend, @@ -92,8 +97,6 @@ def init(self, args, role, with_ref=False, with_opd_teacher=False): logger.info(f"Warning: Failed to set NUMA affinity: {e}") def clear_memory(self): - if self.args.debug_rollout_only: - return print_memory("before TrainRayActor.clear_memory") clear_memory() print_memory("after TrainRayActor.clear_memory") @@ -107,7 +110,7 @@ def wake_up(self, tags): raise NotImplementedError @abc.abstractmethod - def train(self, rollout_id, rollout_data_ref, external_data=None): + def train(self, rollout_id, rollout_data_ref): raise NotImplementedError @abc.abstractmethod @@ -118,6 +121,10 @@ def save_model(self, rollout_id, force_sync=False): def update_weights(self): raise NotImplementedError + @abc.abstractmethod + def connect_actor_critic(self, critic_group): + raise NotImplementedError + @abc.abstractmethod def _get_parallel_config(self): raise NotImplementedError diff --git a/slime/rollout/backends/__init__.py b/slime/rollout/backends/__init__.py deleted file mode 100644 index ea9ccd8a9c..0000000000 --- a/slime/rollout/backends/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -from slime.rollout.backends.base_client import BackendCapabilities, RolloutBackendClient -from slime.rollout.backends.vllm_client import VLLMClient - - -def __getattr__(name): - if name == "SGLangClient": - from slime.rollout.backends.sglang_client import SGLangClient - - return SGLangClient - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") - - -__all__ = [ - "BackendCapabilities", - "RolloutBackendClient", - "SGLangClient", - "VLLMClient", -] diff --git a/slime/rollout/backends/base_client.py b/slime/rollout/backends/base_client.py deleted file mode 100644 index 1730d6cbac..0000000000 --- a/slime/rollout/backends/base_client.py +++ /dev/null @@ -1,31 +0,0 @@ -from abc import ABC, abstractmethod -from dataclasses import dataclass - -from slime.rollout.base_types import RolloutBackendRequest, RolloutBackendResponse - - -@dataclass -class BackendCapabilities: - supports_abort: bool - supports_routed_experts: bool - supports_prompt_logprobs: bool - - -class RolloutBackendClient(ABC): - @property - @abstractmethod - def capabilities(self) -> BackendCapabilities: - ... - - @abstractmethod - async def generate( - self, - request: RolloutBackendRequest, - base_url: str, - headers: dict | None = None, - ) -> RolloutBackendResponse: - ... - - async def abort(self) -> list[str]: - """Return worker URLs for abort. Empty for backends without worker-level abort.""" - return [] diff --git a/slime/rollout/backends/sglang_client.py b/slime/rollout/backends/sglang_client.py deleted file mode 100644 index 2aae5f80ee..0000000000 --- a/slime/rollout/backends/sglang_client.py +++ /dev/null @@ -1,88 +0,0 @@ -import logging - -import numpy as np -import pybase64 -import sglang_router -from packaging.version import parse - -from slime.rollout.backends.base_client import BackendCapabilities, RolloutBackendClient -from slime.rollout.base_types import RolloutBackendRequest, RolloutBackendResponse -from slime.utils.http_utils import get, post - -logger = logging.getLogger(__name__) - - -class SGLangClient(RolloutBackendClient): - def __init__(self, args): - self.args = args - - @property - def capabilities(self) -> BackendCapabilities: - return BackendCapabilities( - supports_abort=True, - supports_routed_experts=bool(getattr(self.args, "use_rollout_routing_replay", False)), - supports_prompt_logprobs=True, - ) - - async def generate( - self, - request: RolloutBackendRequest, - base_url: str, - headers: dict | None = None, - ) -> RolloutBackendResponse: - payload = { - "sampling_params": request.sampling_params, - "return_logprob": request.return_logprob, - "return_routed_experts": request.return_routed_experts, - } - # For multimodal: send raw text so SGLang's server-side processor can - # expand image placeholders. Otherwise send pre-tokenized input_ids. - if request.image_data and request.text is not None: - payload["text"] = request.text - payload["image_data"] = request.image_data - else: - payload["input_ids"] = request.input_ids - if request.image_data: - payload["image_data"] = request.image_data - - url = f"{base_url.rstrip('/')}/generate" - output = await post(url, payload, headers=headers) - - meta = output.get("meta_info", {}) - logprobs = meta.get("output_token_logprobs", []) - output_token_ids = [item[1] for item in logprobs] - output_token_logprobs = [item[0] for item in logprobs] - - finish_reason = meta.get("finish_reason", {}).get("type", "stop") - routed_experts = None - if "routed_experts" in meta and self.capabilities.supports_routed_experts: - num_layers = getattr(self.args, "num_layers", 0) - moe_topk = getattr(self.args, "moe_router_topk", 1) - if num_layers and moe_topk: - routed_experts = np.frombuffer( - pybase64.b64decode(meta["routed_experts"].encode("ascii")), - dtype=np.int32, - ).reshape( - len(request.input_ids) + len(output_token_ids) - 1, - num_layers, - moe_topk, - ) - - return RolloutBackendResponse( - text=output.get("text", ""), - output_token_ids=output_token_ids, - output_token_logprobs=output_token_logprobs, - finish_reason=finish_reason, - prompt_tokens=meta.get("prompt_tokens", len(request.input_ids)), - completion_tokens=meta.get("completion_tokens", len(output_token_ids)), - backend_raw=output, - routed_experts=routed_experts, - ) - - async def abort(self) -> list[str]: - base = f"http://{self.args.sglang_router_ip}:{self.args.sglang_router_port}" - if parse(sglang_router.__version__) <= parse("0.2.1") or getattr(self.args, "use_slime_router", False): - r = await get(f"{base}/list_workers") - return r.get("urls", []) - r = await get(f"{base}/workers") - return [w["url"] for w in r.get("workers", [])] diff --git a/slime/rollout/backends/vllm_client.py b/slime/rollout/backends/vllm_client.py deleted file mode 100644 index 56d57d8954..0000000000 --- a/slime/rollout/backends/vllm_client.py +++ /dev/null @@ -1,192 +0,0 @@ -import logging - -from slime.rollout.backends.base_client import BackendCapabilities, RolloutBackendClient -from slime.rollout.base_types import RolloutBackendRequest, RolloutBackendResponse -from slime.utils.http_utils import get, post - -logger = logging.getLogger(__name__) - -_FINISH_REASON_MAP = { - "stop": "stop", - "length": "length", - "abort": "abort", - "end_turn": "stop", - "max_tokens": "length", -} - - -class VLLMClient(RolloutBackendClient): - """Rollout backend client for vLLM. - - Supports two modes: - - 1. **Direct mode** (default): sends requests directly to vLLM's - ``/v1/completions`` endpoint and parses the native vLLM response. - 2. **Router mode** (``use_slime_router=True``): sends SGLang-format - requests to ``/generate`` through the SlimeRouter, which forwards - to the translation sidecar. The sidecar handles the vLLM translation - and returns SGLang-format responses. - """ - - def __init__(self, args): - self.args = args - self._max_retries = getattr(args, "vllm_max_retries", 3) - self._use_router = getattr(args, "use_slime_router", False) - - @property - def capabilities(self) -> BackendCapabilities: - return BackendCapabilities( - supports_abort=self._use_router, # abort is supported through the sidecar - supports_routed_experts=False, - supports_prompt_logprobs=False, - ) - - async def generate( - self, - request: RolloutBackendRequest, - base_url: str, - headers: dict | None = None, - ) -> RolloutBackendResponse: - if self._use_router: - return await self._generate_via_router(request, base_url, headers) - return await self._generate_direct(request, base_url, headers) - - # ------------------------------------------------------------------ - # Router mode: SGLang-format /generate → sidecar → vLLM - # ------------------------------------------------------------------ - - async def _generate_via_router( - self, - request: RolloutBackendRequest, - base_url: str, - headers: dict | None = None, - ) -> RolloutBackendResponse: - """Send SGLang-format request through the SlimeRouter → sidecar pipeline.""" - - payload = { - "sampling_params": request.sampling_params, - "return_logprob": request.return_logprob, - "stream": False, - } - # Multimodal: send raw text + image_data so the translation sidecar can - # apply the chat template and forward to vLLM. Otherwise send tokenized - # input_ids. - if request.image_data and request.text is not None: - payload["text"] = request.text - payload["image_data"] = request.image_data - else: - payload["input_ids"] = request.input_ids - if request.image_data: - payload["image_data"] = request.image_data - - url = f"{base_url.rstrip('/')}/generate" - output = await post(url, payload, headers=headers) - - # Parse SGLang-format response (produced by translation sidecar) - meta = output.get("meta_info", {}) - logprobs_data = meta.get("output_token_logprobs", []) - - # output_token_logprobs is list of [logprob, token_id] - output_token_ids = [item[1] for item in logprobs_data] if logprobs_data else [] - output_token_logprobs = [item[0] for item in logprobs_data] if logprobs_data else [] - - # Fall back to output_ids if logprobs not available - if not output_token_ids: - output_token_ids = output.get("output_ids") or [] - - finish_reason = meta.get("finish_reason", {}).get("type", "stop") - - return RolloutBackendResponse( - text=output.get("text", ""), - output_token_ids=output_token_ids, - output_token_logprobs=output_token_logprobs, - finish_reason=finish_reason, - prompt_tokens=meta.get("prompt_tokens", len(request.input_ids)), - completion_tokens=len(output_token_ids), - backend_raw=output, - routed_experts=None, - ) - - # ------------------------------------------------------------------ - # Direct mode: vLLM /v1/completions (no router) - # ------------------------------------------------------------------ - - async def _generate_direct( - self, - request: RolloutBackendRequest, - base_url: str, - headers: dict | None = None, - ) -> RolloutBackendResponse: - sp = request.sampling_params - # vLLM /v1/completions accepts a string or list of token IDs as "prompt". - # Prefer raw text when provided (e.g. multimodal callers); fall back to - # the pre-tokenized input_ids otherwise. - prompt_field = request.text if request.text is not None else request.input_ids - payload = { - "prompt": prompt_field, - "max_tokens": sp.get("max_new_tokens", 1024), - "temperature": sp.get("temperature", 1.0), - "top_p": sp.get("top_p", 1.0), - "top_k": sp.get("top_k", -1), - "stop": sp.get("stop"), - "stop_token_ids": sp.get("stop_token_ids"), - "skip_special_tokens": sp.get("skip_special_tokens", True), - "spaces_between_special_tokens": sp.get("spaces_between_special_tokens", False), - "logprobs": 1 if request.return_logprob else None, - "include_stop_str_in_output": sp.get("no_stop_trim", False), - "return_token_ids": True, - "seed": sp.get("sampling_seed"), - } - payload = {k: v for k, v in payload.items() if v is not None} - - url = f"{base_url.rstrip('/')}/v1/completions" - output = await post(url, payload, headers=headers) - - choice = output.get("choices", [{}])[0] - text = choice.get("text", "") - finish = choice.get("finish_reason", "stop") - finish_reason = _FINISH_REASON_MAP.get(finish, "stop") - - # vLLM /v1/completions response format: - # choice.token_ids: list[int] (output token IDs) - # choice.logprobs.token_logprobs: list[float|None] - # choice.logprobs.tokens: list[str] (token text, not IDs) - output_token_ids = choice.get("token_ids") or [] - logprobs_obj = choice.get("logprobs") or {} - raw_logprobs = logprobs_obj.get("token_logprobs") or [] - output_token_logprobs = [float(lp) if lp is not None else 0.0 for lp in raw_logprobs] - - # If token_ids not in response, fall back to tokenizer - if not output_token_ids and text: - logger.warning("vLLM response missing token_ids, falling back to tokenizer") - from slime.utils.processing_utils import load_tokenizer - tokenizer = load_tokenizer(self.args.hf_checkpoint, trust_remote_code=True) - output_token_ids = tokenizer.encode(text, add_special_tokens=False) - - # Ensure logprobs list matches token count - if len(output_token_logprobs) < len(output_token_ids): - output_token_logprobs.extend([0.0] * (len(output_token_ids) - len(output_token_logprobs))) - - usage = output.get("usage", {}) - return RolloutBackendResponse( - text=text, - output_token_ids=output_token_ids, - output_token_logprobs=output_token_logprobs, - finish_reason=finish_reason, - prompt_tokens=usage.get("prompt_tokens", len(request.input_ids)), - completion_tokens=usage.get("completion_tokens", len(output_token_ids)), - backend_raw=output, - routed_experts=None, - ) - - # ------------------------------------------------------------------ - # Abort (router mode only) - # ------------------------------------------------------------------ - - async def abort(self) -> list[str]: - """Return worker URLs for abort. Only works in router mode.""" - if not self._use_router: - return [] - base = f"http://{self.args.sglang_router_ip}:{self.args.sglang_router_port}" - r = await get(f"{base}/list_workers") - return r.get("urls", []) diff --git a/slime/rollout/base_types.py b/slime/rollout/base_types.py index aefa73b15d..f0eb0d96ce 100644 --- a/slime/rollout/base_types.py +++ b/slime/rollout/base_types.py @@ -4,39 +4,6 @@ from slime.utils.types import Sample -@dataclass -class RolloutBackendRequest: - """Backend-agnostic rollout request. - - For multimodal requests, callers should set both ``text`` (the raw prompt - with image placeholders) and ``image_data``. Backends that natively expand - image placeholders (SGLang) will prefer ``text`` over ``input_ids`` in this - case so the server-side processor can do the expansion. - """ - - input_ids: list[int] - sampling_params: dict[str, Any] - return_logprob: bool = True - return_routed_experts: bool = False - image_data: list[str] | None = None - session_id: str | None = None - text: str | None = None - - -@dataclass -class RolloutBackendResponse: - """Backend-agnostic rollout response.""" - - text: str - output_token_ids: list[int] - output_token_logprobs: list[float] - finish_reason: str # "stop" | "length" | "abort" - prompt_tokens: int - completion_tokens: int - backend_raw: dict - routed_experts: Any = None - - @dataclass class RolloutFnTrainOutput: samples: list[list[Sample]] diff --git a/slime/rollout/data_source.py b/slime/rollout/data_source.py index ca7171ecae..e52cd27ef5 100644 --- a/slime/rollout/data_source.py +++ b/slime/rollout/data_source.py @@ -58,7 +58,7 @@ def __init__(self, args): # TODO remove this self.metadata = {} - if args.rollout_global_dataset and args.prompt_data is not None: + if args.rollout_global_dataset: tokenizer = load_tokenizer(args.hf_checkpoint, trust_remote_code=True) processor = load_processor(args.hf_checkpoint, trust_remote_code=True) @@ -156,12 +156,10 @@ def load(self, rollout_id=None): self.sample_index = state_dict.get("sample_index", 0) self.metadata = state_dict.get("metadata", {}) - if self.args.rollout_global_dataset and self.args.rollout_shuffle and self.dataset is not None: + if self.args.rollout_global_dataset and self.args.rollout_shuffle: self.dataset.shuffle(self.epoch_id) def __len__(self) -> int: - if self.dataset is None: - return 0 return len(self.dataset) diff --git a/slime/rollout/filter_hub/dynamic_sampling_filters.py b/slime/rollout/filter_hub/dynamic_sampling_filters.py index 9c579d0fda..dc17422d68 100644 --- a/slime/rollout/filter_hub/dynamic_sampling_filters.py +++ b/slime/rollout/filter_hub/dynamic_sampling_filters.py @@ -8,7 +8,7 @@ def check_reward_nonzero_std(args, samples: list[Sample], **kwargs): rewards = [sample.get_reward_value(args) for sample in samples] - keep = torch.tensor(rewards, dtype=torch.float64).std() > 1e-6 + keep = torch.tensor(rewards, dtype=torch.float).std() > 0.0 return DynamicFilterOutput( keep=keep, reason=None if keep else f"zero_std_{round(rewards[0], 1)}", diff --git a/slime/rollout/generate_hub/__init__.py b/slime/rollout/generate_hub/__init__.py new file mode 100644 index 0000000000..2d43c62459 --- /dev/null +++ b/slime/rollout/generate_hub/__init__.py @@ -0,0 +1 @@ +# TODO: maybe move `sglang_rollout::generate` to this folder diff --git a/slime/rollout/generate_hub/benchmarkers.py b/slime/rollout/generate_hub/benchmarkers.py new file mode 100644 index 0000000000..facf089185 --- /dev/null +++ b/slime/rollout/generate_hub/benchmarkers.py @@ -0,0 +1,25 @@ +import logging +import random +from argparse import Namespace +from copy import deepcopy +from typing import Any + +from slime.rollout.sglang_rollout import generate as _generate_base +from slime.utils.types import Sample + +logger = logging.getLogger(__name__) + + +async def generate_with_random_osl(args: Namespace, sample: Sample, sampling_params: dict[str, Any]) -> Sample: + # TODO: make it configurable after we have an enhanced arg parser + min_osl = 32 * 1024 + max_osl = 64 * 1024 + + modified_sampling_params = deepcopy(sampling_params) + modified_sampling_params["ignore_eos"] = True + modified_sampling_params["max_new_tokens"] = random.randrange(min_osl, max_osl) + + ans = await _generate_base(args, sample, modified_sampling_params) + + logger.info(f"generate_with_random_osl {ans.response_length=}") + return ans diff --git a/slime/rollout/on_policy_distillation.py b/slime/rollout/on_policy_distillation.py index 9190974345..cf25b4897d 100644 --- a/slime/rollout/on_policy_distillation.py +++ b/slime/rollout/on_policy_distillation.py @@ -1,7 +1,6 @@ import aiohttp import torch -from slime.utils.processing_utils import encode_image_for_rollout_engine from slime.utils.types import Sample @@ -17,11 +16,6 @@ async def reward_func(args, sample, **kwargs): "return_logprob": True, "logprob_start_len": 0, } - - if sample.multimodal_inputs and sample.multimodal_inputs.get("images"): - image_data = sample.multimodal_inputs["images"] - payload["image_data"] = [encode_image_for_rollout_engine(image) for image in image_data] - session_kwargs = {} async with aiohttp.ClientSession(**session_kwargs) as session: async with session.post(args.rm_url, json=payload) as resp: diff --git a/slime/rollout/rm_hub/gpqa.py b/slime/rollout/rm_hub/gpqa.py index affb7a22ad..df2e3c0b91 100644 --- a/slime/rollout/rm_hub/gpqa.py +++ b/slime/rollout/rm_hub/gpqa.py @@ -2,7 +2,7 @@ import string from collections.abc import Iterable -DEFAULT_VALID_LETTERS = list(string.ascii_uppercase[:10]) +DEFAULT_VALID_LETTERS = list(string.ascii_uppercase[:8]) def _strip_chain_of_thought(text: str) -> str: diff --git a/slime/rollout/sft_rollout.py b/slime/rollout/sft_rollout.py index 4407463d23..6b914a964e 100644 --- a/slime/rollout/sft_rollout.py +++ b/slime/rollout/sft_rollout.py @@ -47,10 +47,6 @@ def generate_rollout(args, rollout_id, data_buffer, evaluation=False): tools = sample.metadata.get("tools", None) token_ids, loss_mask = MASK_GENERATOR.get_loss_mask(messages, tools=tools) - if len(token_ids) != len(loss_mask): - raise ValueError( - f"SFT rollout produced mismatched token_ids/loss_mask lengths: {len(token_ids)=}, {len(loss_mask)=}" - ) response_length = MASK_GENERATOR.get_response_lengths([loss_mask])[0] diff --git a/slime/rollout/sglang_rollout.py b/slime/rollout/sglang_rollout.py index 9b6bc3cbc4..042fdab315 100644 --- a/slime/rollout/sglang_rollout.py +++ b/slime/rollout/sglang_rollout.py @@ -9,14 +9,17 @@ from typing import Any import numpy as np +import pybase64 +import sglang_router +from packaging.version import parse from tqdm import tqdm -from slime.rollout.base_types import RolloutBackendRequest, RolloutBackendResponse, RolloutFnEvalOutput, RolloutFnTrainOutput +from slime.rollout.base_types import RolloutFnEvalOutput, RolloutFnTrainOutput from slime.rollout.filter_hub.base_types import MetricGatherer, call_dynamic_filter from slime.utils.async_utils import run from slime.utils.data import Dataset from slime.utils.eval_config import EvalDatasetConfig -from slime.utils.http_utils import post +from slime.utils.http_utils import get, post from slime.utils.misc import SingletonMeta, load_function from slime.utils.processing_utils import ( build_processor_kwargs, @@ -24,89 +27,14 @@ load_processor, load_tokenizer, ) -from slime.utils.trace_utils import build_sglang_meta_trace_attrs, trace_function, trace_span from slime.utils.types import Sample from .rm_hub import async_rm, batched_async_rm -__all__ = ["generate_rollout", "get_model_url"] - - -def _get_backend_client(args): - backend = getattr(args, "rollout_backend", "sglang") - if backend == "vllm": - from .backends.vllm_client import VLLMClient - return VLLMClient(args) - from .backends.sglang_client import SGLangClient - return SGLangClient(args) - - -def _apply_backend_response(sample, resp: RolloutBackendResponse, args): - """Apply RolloutBackendResponse to sample.""" - sample.tokens = sample.tokens + resp.output_token_ids - sample.response_length += len(resp.output_token_ids) - sample.response += resp.text - if sample.loss_mask is not None: - assert args.partial_rollout and args.mask_offpolicy_in_partial_rollout - sample.loss_mask += [1] * len(resp.output_token_ids) - if sample.rollout_log_probs is None: - sample.rollout_log_probs = [] - sample.rollout_log_probs += resp.output_token_logprobs - if resp.routed_experts is not None: - sample.rollout_routed_experts = resp.routed_experts - meta = { - "finish_reason": {"type": resp.finish_reason}, - "prompt_tokens": resp.prompt_tokens, - "completion_tokens": resp.completion_tokens, - **{k: v for k, v in resp.backend_raw.get("meta_info", {}).items() if k not in ("finish_reason",)}, - } - sample.update_from_meta_info(args, meta) +__all__ = ["generate_rollout"] logger = logging.getLogger(__name__) -_PROCESSOR_PROMPT_KEYS = {"input_ids", "attention_mask"} - - -def _prepare_prompt_ids(sample: Sample, tokenizer, processor: Any) -> list[int]: - raw_multimodal_inputs = sample.multimodal_inputs or {} - has_multimodal_inputs = any(value is not None for value in raw_multimodal_inputs.values()) - reuse_existing_input_ids = bool(sample.tokens) and ( - sample.multimodal_train_inputs is not None or not has_multimodal_inputs - ) - - if processor and has_multimodal_inputs and not reuse_existing_input_ids: - processor_output = processor(text=sample.prompt, **build_processor_kwargs(raw_multimodal_inputs)) - prompt_ids = processor_output["input_ids"][0] - if sample.multimodal_train_inputs is None: - sample.multimodal_train_inputs = { - k: v for k, v in processor_output.items() if k not in _PROCESSOR_PROMPT_KEYS - } or None - return prompt_ids - - if reuse_existing_input_ids: - return sample.tokens - - return tokenizer.encode(sample.prompt, add_special_tokens=False) - - -def get_model_url(args: Namespace, model_name: str, endpoint: str = "/generate") -> str: - """Return the router URL for a named model. - - Use this in custom rollout functions to route requests to a specific - model when multiple models are deployed via ``--sglang-config``:: - - url = get_model_url(args, "ref", "/generate") - resp = await post(url, json=payload) - - Falls back to the default router if *model_name* is not found or - ``sglang_model_routers`` is not set. - """ - routers = getattr(args, "sglang_model_routers", None) - if routers and model_name in routers: - ip, port = routers[model_name] - return f"http://{ip}:{port}{endpoint}" - return f"http://{args.sglang_router_ip}:{args.sglang_router_port}{endpoint}" - class GenerateState(metaclass=SingletonMeta): """ @@ -120,7 +48,7 @@ def __init__(self, args: Namespace) -> None: self.processor = load_processor(args.hf_checkpoint, trust_remote_code=True) self.semaphore = asyncio.Semaphore( - args.rollout_server_concurrency * args.rollout_num_gpus // args.rollout_num_gpus_per_engine + args.sglang_server_concurrency * args.rollout_num_gpus // args.rollout_num_gpus_per_engine ) self.sampling_params: dict[str, Any] = dict( temperature=args.rollout_temperature, @@ -178,16 +106,29 @@ def submit_generate_tasks(self, samples: list[list[Sample]]) -> None: async def generate(args: Namespace, sample: Sample, sampling_params: dict[str, Any]) -> Sample: - """Generate using backend client (SGLang or vLLM).""" + """Generate using traditional SGLang router with token-based workflow""" if args.ci_test: assert isinstance(sample.prompt, str) state = GenerateState(args) + url = f"http://{args.sglang_router_ip}:{args.sglang_router_port}/generate" + assert ( sample.status == Sample.Status.PENDING or sample.status == Sample.Status.ABORTED ), f"Sample status is {sample.status}" - prompt_ids = _prepare_prompt_ids(sample, state.tokenizer, state.processor) + if state.processor and sample.multimodal_inputs and any(v is not None for v in sample.multimodal_inputs.values()): + processor_kwargs = build_processor_kwargs(sample.multimodal_inputs) + processor_output = state.processor(text=sample.prompt, **processor_kwargs) + prompt_ids = processor_output["input_ids"][0] + sample.multimodal_train_inputs = { + k: v for k, v in processor_output.items() if k not in ["input_ids", "attention_mask"] + } or None + else: + prompt_ids = state.tokenizer.encode(sample.prompt, add_special_tokens=False) + + if len(sample.response) > 0: + sampling_params["max_new_tokens"] -= len(sample.tokens) - len(prompt_ids) assert ( sampling_params["max_new_tokens"] >= 0 @@ -196,70 +137,74 @@ async def generate(args: Namespace, sample: Sample, sampling_params: dict[str, A sample.status = Sample.Status.TRUNCATED return sample - input_ids = sample.tokens if len(sample.response) > 0 else prompt_ids - if not sample.tokens: - sample.tokens = list(input_ids) + # Prepare payload for sglang server + payload = { + "sampling_params": sampling_params, + "return_logprob": True, + } + + if args.use_rollout_routing_replay: + payload["return_routed_experts"] = True - # Multimodal images: when present, prefer sending raw text+image_data so the - # backend (SGLang) expands image placeholders with its own processor rules. - images = sample.multimodal_inputs.get("images") if sample.multimodal_inputs else None - image_data = [encode_image_for_rollout_engine(img) for img in images] if images else None + if sample.multimodal_inputs and sample.multimodal_inputs["images"]: + image_data = sample.multimodal_inputs["images"] + payload["image_data"] = [encode_image_for_rollout_engine(image) for image in image_data] + + # Use existing tokens for multi-turn or tokenize the new prompt + if len(sample.response) > 0: + payload["input_ids"] = sample.tokens + else: + payload["input_ids"] = prompt_ids + if not sample.tokens: # Initialize sample.tokens for the first turn + sample.tokens = prompt_ids - use_radix = args.use_slime_router and "RadixTreeMiddleware" in getattr(args, "slime_router_middleware_paths", []) - if use_radix: - # RadixTree path: SGLang-specific, keep direct post + # Use session_id for consistent hashing routing if router uses consistent_hashing policy + headers = None + if args.sglang_router_policy == "consistent_hashing" and sample.session_id: + headers = {"X-SMG-Routing-Key": sample.session_id} + + output = await post(url, payload, headers=headers) + + if args.use_slime_router and "RadixTreeMiddleware" in args.slime_router_middleware_paths: from slime.router.middleware_hub.radix_tree_middleware import postprocess_sample_with_radix_tree - url = f"http://{args.sglang_router_ip}:{args.sglang_router_port}/generate" - payload = { - "sampling_params": sampling_params, - "return_logprob": True, - "return_routed_experts": args.use_rollout_routing_replay, - } - if image_data: - payload["image_data"] = image_data - payload["text"] = sample.prompt - else: - payload["input_ids"] = input_ids - headers = ( - {"X-SMG-Routing-Key": sample.session_id} - if getattr(args, "sglang_router_policy", None) == "consistent_hashing" and sample.session_id - else None - ) - output = await post(url, payload, headers=headers) sample = await postprocess_sample_with_radix_tree(args, sample, output) else: - backend = _get_backend_client(args) - base_url = getattr(args, "vllm_base_url", None) or f"http://{args.sglang_router_ip}:{args.sglang_router_port}" - headers = ( - {"X-SMG-Routing-Key": sample.session_id} - if getattr(args, "sglang_router_policy", None) == "consistent_hashing" and sample.session_id - else None - ) - req = RolloutBackendRequest( - input_ids=input_ids, - text=sample.prompt if image_data else None, - sampling_params=sampling_params, - return_logprob=True, - return_routed_experts=args.use_rollout_routing_replay, - image_data=image_data, - session_id=sample.session_id, + if "output_token_logprobs" in output["meta_info"]: + new_response_tokens = [item[1] for item in output["meta_info"]["output_token_logprobs"]] + new_response_log_probs = [item[0] for item in output["meta_info"]["output_token_logprobs"]] + else: + new_response_tokens, new_response_log_probs = [], [] + + # Update sample with tokens directly - avoiding re-tokenization + sample.tokens = sample.tokens + new_response_tokens + sample.response_length += len(new_response_tokens) + sample.response += output["text"] + + # When partial rollout and masking off policy is enabled, update the loss mask + if sample.loss_mask is not None: + assert args.partial_rollout and args.mask_offpolicy_in_partial_rollout + sample.loss_mask += [1] * len(new_response_tokens) + + if sample.rollout_log_probs is None: + sample.rollout_log_probs = [] + sample.rollout_log_probs += new_response_log_probs + + if "routed_experts" in output["meta_info"]: + sample.rollout_routed_experts = np.frombuffer( + pybase64.b64decode(output["meta_info"]["routed_experts"].encode("ascii")), + dtype=np.int32, + ).reshape( + len(sample.tokens) - 1, + args.num_layers, + args.moe_router_topk, ) - with trace_span( - sample, - "rollout_generate", - attrs={"max_new_tokens": sampling_params["max_new_tokens"]}, - ) as span: - resp = await backend.generate(req, base_url, headers=headers) - meta_info = resp.backend_raw.get("meta_info") if isinstance(resp.backend_raw, dict) else None - if meta_info: - span.update(build_sglang_meta_trace_attrs(meta_info)) - _apply_backend_response(sample, resp, args) + + sample.update_from_meta_info(args, output["meta_info"]) return sample -@trace_function("generate_and_rm", target="sample") async def generate_and_rm( args: Namespace, sample: Sample | list[Sample], @@ -303,33 +248,28 @@ async def generate_and_rm( if args.group_rm: return sample + # multi samples if isinstance(sample, list): samples = sample - if any(sample.status == Sample.Status.ABORTED for sample in samples): + if any([sample.status == Sample.Status.ABORTED for sample in samples]): return samples + # for multi agent system, the reward of some sample is calculated during generation. samples_need_reward = [sample for sample in samples if sample.reward is None] - with trace_span(samples_need_reward, "reward_model"): - rewards = await batched_async_rm(args, samples_need_reward) + rewards = await batched_async_rm(args, samples_need_reward) for sample, reward in zip(samples_need_reward, rewards, strict=False): sample.reward = reward return samples else: if sample.status == Sample.Status.ABORTED: return sample - # Some custom generate paths may have already filled the reward. + # for multi-turn environment, a reward could be assigned to the agent. if sample.reward is None: - with trace_span(sample, "reward_model"): - sample.reward = await async_rm(args, sample) + sample.reward = await async_rm(args, sample) return sample -@trace_function( - "generate_and_rm_group", - target="group", - attrs_getter=lambda args, group, sampling_params, evaluation=False: {"group_size": len(group)}, -) async def generate_and_rm_group( args: Namespace, group: list[Sample], sampling_params: dict[str, Any], evaluation: bool = False ) -> list[Sample]: @@ -357,8 +297,7 @@ async def generate_and_rm_group( # for the rm that need the whole group, we will do the rm here if not state.aborted and args.group_rm: - with trace_span(group, "group_reward_model"): - rewards = await batched_async_rm(args, group) + rewards = await batched_async_rm(args, group) for sample, reward in zip(group, rewards, strict=False): sample.reward = reward @@ -367,19 +306,24 @@ async def generate_and_rm_group( async def abort(args: Namespace, rollout_id: int) -> list[list[Sample]]: aborted_samples = [] + state = GenerateState(args) assert not state.aborted state.aborted = True - backend = _get_backend_client(args) - urls = await backend.abort() - if urls: - logger.info(f"Abort request for {urls}") - abort_tasks = [post(f"{url}/abort_request", {"abort_all": True}) for url in urls] - abort_results = await asyncio.gather(*abort_tasks, return_exceptions=True) - for url, result in zip(urls, abort_results, strict=False): - if isinstance(result, Exception): - logger.warning(f"Failed to abort worker at {url}: {result}") + if parse(sglang_router.__version__) <= parse("0.2.1") or args.use_slime_router: + response = await get(f"http://{args.sglang_router_ip}:{args.sglang_router_port}/list_workers") + urls = response["urls"] + else: + response = await get(f"http://{args.sglang_router_ip}:{args.sglang_router_port}/workers") + urls = [worker["url"] for worker in response["workers"]] + + logger.info(f"Abort request for {urls}") + abort_tasks = [post(f"{url}/abort_request", {"abort_all": True}) for url in urls] + abort_results = await asyncio.gather(*abort_tasks, return_exceptions=True) + for url, result in zip(urls, abort_results, strict=False): + if isinstance(result, Exception): + logger.warning(f"Failed to abort worker at {url}: {result}") # make sure all the pending tasks are finished count = 0 @@ -591,11 +535,10 @@ async def eval_rollout_single_dataset( for coro in asyncio.as_completed(tasks): sample = await coro if do_print: - logged_sample = sample[0] if isinstance(sample, list) else sample logger.info( "eval_rollout_single_dataset example data: " - f"{[str(logged_sample.prompt) + logged_sample.response]} " - f"reward={logged_sample.reward}" + f"{[str(sample.prompt) + sample.response]} " + f"reward={sample.reward}" ) do_print = False if isinstance(sample, list): @@ -637,6 +580,5 @@ def generate_rollout( return output output, aborted_samples = run(generate_rollout_async(args, rollout_id, data_source.get_samples)) - if aborted_samples: - data_source.add_samples(aborted_samples) + data_source.add_samples(aborted_samples) return output diff --git a/slime/router/__init__.py b/slime/router/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/slime/router/middleware_hub/__init__.py b/slime/router/middleware_hub/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/slime/router/middleware_hub/radix_tree.py b/slime/router/middleware_hub/radix_tree.py new file mode 100644 index 0000000000..6e722f1e25 --- /dev/null +++ b/slime/router/middleware_hub/radix_tree.py @@ -0,0 +1,681 @@ +from __future__ import annotations + +""" +String-based Radix Trie for efficient prefix matching and token caching. +Optimized for string prefixes with corresponding token IDs. +""" + +import threading +import time +from dataclasses import dataclass +from typing import Any + + +@dataclass +class MatchResult: + """Result of prefix matching operation.""" + + matched_prefix: str + token_ids: list[int] + logp: list[float] + loss_mask: list[int] # Added loss mask for model generation parts + remaining_string: str + last_node: StringTreeNode + + +class StringTreeNode: + """Tree node for string-based radix trie.""" + + counter = 0 + + def __init__(self, node_id: int | None = None): + # Core tree structure + self.children: list[StringTreeNode] = [] # Use list to store children + self.parent: StringTreeNode | None = None + + # Node data + self.string_key: str = "" # The string fragment this node represents + self.token_ids: list[int] | None = None # Token IDs for this node only (not cumulative) + self.logp: list[float] | None = None # Log probabilities for this node's tokens + self.loss_mask: list[int] | None = None # Loss mask for model generation parts + + # Access tracking + self.last_access_time = time.monotonic() + self.access_count = 0 + + # Reference counting for protection from eviction + self.ref_count = 0 + + # Weight version tracking + self.weight_version: int | None = None # Weight version for this node + + # Node identification + self.id = StringTreeNode.counter if node_id is None else node_id + StringTreeNode.counter += 1 + + @property + def is_leaf(self) -> bool: + """Check if this node is a leaf node.""" + return len(self.children) == 0 + + @property + def has_value(self) -> bool: + """Check if this node has token IDs stored.""" + return self.token_ids is not None + + def validate_token_logp_consistency(self) -> bool: + """Validate that token_ids, logp, and loss_mask have consistent lengths.""" + if self.token_ids is None and self.logp is None and self.loss_mask is None: + return True + + # Check if at least one is not None + if self.token_ids is not None and len(self.token_ids) > 0: + token_len = len(self.token_ids) + if self.logp is not None and len(self.logp) != token_len: + return False + if self.loss_mask is not None and len(self.loss_mask) != token_len: + return False + + return True + + @property + def is_evictable(self) -> bool: + """Check if this node can be evicted.""" + return self.ref_count == 0 and self.token_ids is not None + + def touch(self): + """Update access time and count.""" + self.last_access_time = time.monotonic() + self.access_count += 1 + + def __lt__(self, other: StringTreeNode) -> bool: + """For heap operations - least recently used first.""" + return self.last_access_time < other.last_access_time + + +class StringRadixTrie: + """ + String-based Radix Trie for efficient prefix matching and token caching. + Features: + - Efficient string prefix matching + - Token ID caching for matched prefixes + - Thread-safe operations + - Weight version tracking + - Automatic garbage collection based on weight version thresholds + """ + + def __init__(self, max_cache_size: int = 10000, gc_threshold_k: int = 5, tokenizer=None, verbose: bool = False): + """ + Initialize the String Radix Trie. + Args: + max_cache_size: Maximum number of cached token IDs (triggers GC when exceeded) + gc_threshold_k: GC threshold - nodes with weight_version < (current_version - k) will be removed + tokenizer: Optional tokenizer for converting text to tokens when not found in cache + verbose: Whether to print debug information and tree structure + """ + self.max_cache_size = max_cache_size + self.gc_threshold_k = gc_threshold_k + self.tokenizer = tokenizer + self.verbose = verbose + + # Tree structure + self.root = StringTreeNode() + self.root.string_key = "" + self.root.ref_count = 1 # Root is always protected + + # Cache statistics + self.total_entries = 0 + self.cache_hits = 0 + self.cache_misses = 0 + self.cur_cache_size = 0 # Total number of token IDs across all nodes + + # Thread safety + self._lock = threading.RLock() + + def find_longest_prefix(self, text: str) -> MatchResult: + """ + Find the longest cached prefix for the given text. + Args: + text: Input string to find prefix for + Returns: + MatchResult containing matched prefix, token IDs, logp, and remaining string + """ + with self._lock: + if not text: + return MatchResult("", [], [], [], text, self.root) + + matched_tokens = [] + matched_logp = [] + matched_loss_mask = [] + matched_prefix = "" + current_node = self.root + remaining_text = text + + while remaining_text: + # Find the best matching child that completely matches from start + best_child = None + best_key_len = 0 + + for child_node in current_node.children: + # Only consider complete startswith matches using node's string_key + if remaining_text.startswith(child_node.string_key): + if len(child_node.string_key) > best_key_len: + best_child = child_node + best_key_len = len(child_node.string_key) + + if best_child is None: + # No complete startswith match found + break + + # Move to the best matching child + best_child.touch() + current_node = best_child + matched_prefix += best_child.string_key + remaining_text = remaining_text[best_key_len:] + + # Accumulate tokens, logp, and loss_mask from this node + if best_child.has_value: + matched_tokens.extend(best_child.token_ids) + matched_logp.extend(best_child.logp) + if best_child.loss_mask is not None: + matched_loss_mask.extend(best_child.loss_mask) + else: + # If no loss_mask is stored, create default mask same as logp + matched_loss_mask.extend([1] * len(best_child.token_ids)) + self.cache_hits += 1 + + if not matched_tokens: + self.cache_misses += 1 + + result = MatchResult( + matched_prefix, matched_tokens, matched_logp, matched_loss_mask, remaining_text, current_node + ) + + # Print tree structure if verbose is enabled + if self.verbose: + print("Tree structure after find_longest_prefix:") + self.pretty_print() + + return result + + def insert( + self, + text: str, + token_ids: list[int], + logp: list[float] | None = None, + loss_mask: list[int] | None = None, + weight_version: int | None = None, + ) -> bool: + """ + Insert a string and its corresponding token IDs, log probabilities, and loss mask into the trie. + Args: + text: String to insert + token_ids: Corresponding token IDs + logp: Corresponding log probabilities (must match token_ids length) + loss_mask: Corresponding loss mask for model generation parts (must match token_ids length) + weight_version: Optional weight version for this insertion + Returns: + True if insertion was successful + """ + with self._lock: + if not text or not token_ids: + if self.verbose: + print("[RadixTree] Insertion failed: text or token_ids is empty") + return False + + # Use provided weight version + current_weight_version = weight_version + + # Validate logp consistency + if logp is not None and len(logp) != len(token_ids): + if self.verbose: + print( + f"[WARNING] Logp length {len(logp)} does not match token length {len(token_ids)} for text: {text}" + ) + print(f"[WARNING] Logp: {logp}") + print(f"[WARNING] Token IDs: {token_ids}") + return False + + # Validate loss_mask consistency + if loss_mask is not None and len(loss_mask) != len(token_ids): + if self.verbose: + print( + f"[WARNING] Loss mask length {len(loss_mask)} does not match token length {len(token_ids)} for text: {text}" + ) + print(f"[WARNING] Loss mask: {loss_mask}") + print(f"[WARNING] Token IDs: {token_ids}") + return False + + # If logp is not provided, create default values (0.0) + if logp is None: + logp = [0.0] * len(token_ids) + + # If loss_mask is not provided, create default values (1 for model generation parts) + if loss_mask is None: + loss_mask = [0] * len(token_ids) + + result = self._insert(text, token_ids, logp, loss_mask, current_weight_version) + + # Check if GC should be triggered after insert + if self.cur_cache_size > self.max_cache_size and weight_version is not None: + if self.verbose: + print( + f"[RadixTree] Cache size {self.cur_cache_size} exceeds limit {self.max_cache_size}, triggering GC" + ) + gc_removed = self.gc_by_weight_version(weight_version) + if self.verbose: + print(f"[RadixTree] GC removed {gc_removed} nodes, new cache size: {self.cur_cache_size}") + + # Print tree structure if verbose is enabled + if self.verbose: + print("Tree structure after insert:") + self.pretty_print() + + return result + + def _insert( + self, + text: str, + token_ids: list[int], + logp: list[float], + loss_mask: list[int], + weight_version: int | None = None, + ) -> bool: + """Insert tokens - skip tokens for existing nodes just like we skip text.""" + + current_node = self.root + remaining_text = text + remaining_tokens = token_ids[:] # Copy the tokens list + remaining_logp = logp[:] # Copy the logp list + remaining_loss_mask = loss_mask[:] # Copy the loss_mask list + + # Track all nodes traversed during insert for weight version update + traversed_nodes = [current_node] + new_node = None + + while remaining_text: + # Find best startswith match + best_child = None + best_key_len = 0 + + for child_node in current_node.children: + if remaining_text.startswith(child_node.string_key) and len(child_node.string_key) > best_key_len: + best_child = child_node + best_key_len = len(child_node.string_key) + + if best_child is not None: + # Found existing node - skip its text and tokens + current_node = best_child + traversed_nodes.append(current_node) + remaining_text = remaining_text[best_key_len:] + + # Skip the tokens that this existing node covers + if best_child.has_value: + tokens_to_skip = len(best_child.token_ids) + remaining_tokens = remaining_tokens[tokens_to_skip:] + remaining_logp = remaining_logp[tokens_to_skip:] + remaining_loss_mask = remaining_loss_mask[tokens_to_skip:] + else: + # Create new node for remaining text with remaining tokens + new_node = StringTreeNode() + new_node.parent = current_node + new_node.string_key = remaining_text + + if remaining_tokens: # Only assign if there are tokens left + new_node.token_ids = remaining_tokens + new_node.logp = remaining_logp + new_node.loss_mask = remaining_loss_mask + new_node.touch() + # Increment cache size by number of tokens added + self.cur_cache_size += len(remaining_tokens) + + current_node.children.append(new_node) + traversed_nodes.append(new_node) + self.total_entries += 1 + break + + # If we've traversed the entire text and the last node doesn't have tokens, + # assign remaining tokens to it + if remaining_text == "" and not current_node.has_value: + if remaining_tokens: # Only assign if there are tokens left + current_node.token_ids = remaining_tokens + current_node.logp = remaining_logp + current_node.loss_mask = remaining_loss_mask + current_node.touch() + self.cur_cache_size += len(remaining_tokens) + + # Update weight version for all traversed nodes + if weight_version is not None and new_node: + new_node.weight_version = weight_version + + return True + + def remove(self, text: str) -> bool: + """ + Remove a string and all nodes with this text as prefix from the trie. + Args: + text: String to remove (will also remove all strings starting with this text) + Returns: + True if any removal was performed + """ + with self._lock: + node = self._find_node_by_text(text) + if node: + removed_count = self._clean_node_subtree(node) + + # Print tree structure if verbose is enabled + if self.verbose: + print("Tree structure after remove:") + self.pretty_print() + + return removed_count > 0 + return False + + def _find_node_by_text(self, text: str) -> StringTreeNode | None: + """ + Find node by exact text match. + Args: + text: Text to find + Returns: + Node if found, None otherwise + """ + result = self.find_longest_prefix(text) + if result.matched_prefix == text: + return result.last_node + return None + + def _clean_node_subtree(self, node: StringTreeNode) -> int: + """ + Clean a node and all its descendants. + This is the core cleanup function. + Args: + node: Node to clean (including all descendants) + Returns: + Number of nodes removed + """ + if node == self.root: + return 0 + return self._remove_node_and_descendants(node) + + def _remove_node_and_descendants(self, node: StringTreeNode) -> int: + """ + Remove a node and all its descendants from the trie. + Args: + node: The node to remove along with all its descendants + Returns: + Number of nodes removed + """ + if node == self.root: + # Never remove root node + return 0 + + removed_count = 0 + + # First, recursively remove all descendants + for child in list(node.children): # Create a copy to avoid modification during iteration + removed_count += self._remove_node_and_descendants(child) + + # Count this node if it has data and decrement cache size + if node.has_value: + removed_count += 1 + # Decrement cache size by number of tokens removed + self.cur_cache_size -= len(node.token_ids) + + # Remove this node from its parent + if self._remove_node_from_parent(node): + # Update count for the node structure itself + pass # _remove_node_from_parent already decrements total_entries + + return removed_count + + def _remove_node_from_parent(self, node: StringTreeNode) -> bool: + """Remove a node from its parent's children list.""" + if node.parent and node in node.parent.children: + node.parent.children.remove(node) + self.total_entries -= 1 + return True + return False + + def gc_by_weight_version(self, current_weight_version: int | None = None) -> int: + """ + Perform garbage collection based on weight version. + Remove nodes with weight_version < (current_weight_version - gc_threshold_k). + Args: + current_weight_version: Current weight version to use for GC threshold + Returns: + Number of nodes removed + """ + with self._lock: + if current_weight_version is None: + if self.verbose: + print("[RadixTree GC] No weight version provided, skipping GC") + return 0 + + gc_threshold = current_weight_version - self.gc_threshold_k + if self.verbose: + print( + f"[RadixTree GC] Starting GC with threshold: {gc_threshold} (current_version: {current_weight_version}, k: {self.gc_threshold_k})" + ) + + nodes_to_remove = self._find_outdated_nodes(gc_threshold) + removed_count = 0 + + for node in nodes_to_remove: + # Validate that subtree weight versions are <= parent weight version + self._validate_subtree_weight_versions(node) + removed_count += self._clean_node_subtree(node) + + if self.verbose: + print(f"[RadixTree GC] Completed GC, removed {removed_count} nodes") + + return removed_count + + def _find_outdated_nodes(self, gc_threshold: int) -> list[StringTreeNode]: + """ + Find nodes that should be removed based on weight version threshold. + Uses layer-by-layer traversal - if parent is outdated, children are not checked. + Args: + gc_threshold: Weight version threshold (nodes < this value will be removed) + Returns: + List of nodes to remove + """ + outdated_nodes = [] + + def check_node(node): + if node == self.root: + # Root is never removed, check its children + for child in node.children: + check_node(child) + return + + # Check if this node should be removed + if node.weight_version is not None and node.weight_version <= gc_threshold and node.has_value: + outdated_nodes.append(node) + return # Don't check children since entire subtree will be removed + + # Node is not outdated, check its children + for child in node.children: + check_node(child) + + check_node(self.root) + return outdated_nodes + + def _validate_subtree_weight_versions(self, node: StringTreeNode): + """ + Validate that all nodes in subtree have weight_version <= parent weight_version. + Args: + node: Root node of subtree to validate + """ + + def validate_recursive(current_node, parent_weight_version): + if current_node.weight_version is not None and parent_weight_version is not None: + assert current_node.weight_version <= parent_weight_version, ( + f"Child node weight_version {current_node.weight_version} > " + f"parent weight_version {parent_weight_version}" + ) + + # Recursively validate children + for child in current_node.children: + validate_recursive(child, current_node.weight_version) + + # Start validation from the node itself + validate_recursive(node, node.weight_version) + + def get_stats(self) -> dict[str, Any]: + """Get cache statistics.""" + with self._lock: + total_requests = self.cache_hits + self.cache_misses + hit_rate = self.cache_hits / total_requests if total_requests > 0 else 0 + + return { + "total_entries": self.total_entries, + "cache_hits": self.cache_hits, + "cache_misses": self.cache_misses, + "hit_rate": hit_rate, + "max_cache_size": self.max_cache_size, + "cur_cache_size": self.cur_cache_size, + "gc_threshold_k": self.gc_threshold_k, + } + + def clear(self): + """Clear all entries from the trie.""" + with self._lock: + self.root = StringTreeNode() + self.root.string_key = "" + self.root.ref_count = 1 + self.total_entries = 0 + self.cache_hits = 0 + self.cache_misses = 0 + self.cur_cache_size = 0 + + def pretty_print(self): + """Print the trie structure in a readable format.""" + print("String Radix Trie Structure:") + print("=" * 50) + self._print_node(self.root, 0) + print("=" * 50) + stats = self.get_stats() + for key, value in stats.items(): + print(f"{key}: {value}") + + def _print_node(self, node: StringTreeNode, depth: int): + """Recursively print node structure.""" + indent = " " * depth + key_repr = repr(node.string_key) if node.string_key else "" + token_info = "" + if node.has_value: + token_info = f" -> tokens: {node.token_ids}" + if node.logp: + token_info += f", logp: {[round(p, 3) for p in node.logp]}" + if node.loss_mask: + token_info += f", loss_mask: {node.loss_mask}" + access_info = f" (accessed: {node.access_count}, ref: {node.ref_count})" + + print(f"{indent}{key_repr}{token_info}{access_info}") + + for child in node.children: + self._print_node(child, depth + 1) + + def retrieve_from_text(self, text: str, return_logprob: bool = True): + """ + Get tokens from text by looking up in radix tree or using tokenizer. + Also fetches weight version from worker during this operation. + Args: + text: Input text to get tokens for + return_logprob: If True, also return log probabilities + Returns: + List of token IDs corresponding to the input text if return_logprob is False. + Tuple of (token_ids, logp) if return_logprob is True. + """ + # Call find_longest_prefix to get the match result + result = self.find_longest_prefix(text) + + # If we have a match and it covers the entire text, return the tokens + if result.matched_prefix and result.token_ids: + additional_tokens = self.tokenizer(result.remaining_string, add_special_tokens=False)["input_ids"] + return ( + result.token_ids + additional_tokens, + ( + result.logp + len(additional_tokens) * [0.0] + if return_logprob + else [0] * len(result.token_ids + additional_tokens) + ), + result.loss_mask + len(additional_tokens) * [0], + ) + # If result is empty and input text is not empty, tokenize with tokenizer + # This is needed because we cannot get the prompt token id from engine response + # We have to manually insert the text and token into the tree + if self.tokenizer and text: + # Tokenize the text using the provided tokenizer + tokens = self.tokenizer(text, add_special_tokens=False)["input_ids"] + # Insert the text and tokens into the tree + self.insert(text, tokens) + # Return the tokens + return (tokens, [0.0] * len(tokens), [0] * len(tokens)) + else: + raise ValueError("Tokenizer or input text can't be empty") + + +# Example usage and testing +if __name__ == "__main__": + # Create trie instance for testing + trie = StringRadixTrie(max_cache_size=100, verbose=True) + + # Example usage with simplified insert + test_cases = [ + ("Hello world", [1, 2, 3], [-0.1, -0.2, -0.3]), + ("Hello", [1, 2], [-0.1, -0.2]), + ("Hi there", [4, 5, 6], [-0.4, -0.5, -0.6]), + ] + + # Insert test data with weight version and loss masks + print("Inserting test data...") + for text, tokens, logp in test_cases: + # Create loss_mask to match tokens length, 1 for model generation parts + loss_mask = [1] * len(tokens) + success = trie.insert(text, tokens, logp, loss_mask, weight_version=1) + print(f"Inserted '{text}' -> {tokens}: {success}") + + print("\nTrie structure:") + trie.pretty_print() + + # Test prefix matching + print("\nTesting prefix matching:") + test_queries = [ + "Hello world!", # Should match "Hello world" completely + "Hello everyone", # Should match "Hello" only + "Hi there", # Should match "Hi" only + "How are you doing?", # Should match "How are you" completely + "Goodbye", # Should not match anything + "Hell", # Should not match anything (not complete startswith) + ] + + for query in test_queries: + result = trie.find_longest_prefix(query) + print(f"Query: '{query}'") + print( + f" Matched: '{result.matched_prefix}' -> tokens: {result.token_ids}, logp: {result.logp}, loss_mask: {result.loss_mask}" + ) + print(f" Remaining: '{result.remaining_string}'") + print() + + # Test removal + print("Testing removal:") + removed = trie.remove("Hello") + print(f"Removed 'Hello': {removed}") + + result = trie.find_longest_prefix("Hello world") + print( + f"After removal - 'Hello world' -> matched: '{result.matched_prefix}', tokens: {result.token_ids}, logp: {result.logp}, loss_mask: {result.loss_mask}" + ) + + # Show final stats + print("\nFinal statistics:") + stats = trie.get_stats() + for key, value in stats.items(): + print(f"{key}: {value}") + + # Test GC with weight version + print("\nTesting GC with weight version 5:") + gc_removed = trie.gc_by_weight_version(5) + print(f"GC removed {gc_removed} nodes") diff --git a/slime/router/middleware_hub/radix_tree_middleware.py b/slime/router/middleware_hub/radix_tree_middleware.py new file mode 100644 index 0000000000..5df163a38d --- /dev/null +++ b/slime/router/middleware_hub/radix_tree_middleware.py @@ -0,0 +1,169 @@ +import asyncio +import json + +from fastapi.responses import JSONResponse +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.requests import Request +from starlette.responses import Response +from transformers import AutoTokenizer + +from slime.utils.http_utils import post +from slime.utils.mask_utils import get_response_lengths +from slime.utils.types import Sample + +from .radix_tree import StringRadixTrie + +# Hop-by-hop headers that should not be forwarded +HOP_BY_HOP = { + "content-length", + "transfer-encoding", + "connection", + "keep-alive", + "proxy-authenticate", + "proxy-authorization", + "te", + "trailers", + "upgrade", +} + + +def _filter_headers(headers): + """Filter out hop-by-hop headers that should not be forwarded.""" + return {k: v for k, v in headers.items() if k.lower() not in HOP_BY_HOP} + + +async def _materialize_response(resp): + """Convert streaming-like Response into a regular Response/JSONResponse safely.""" + # Collect all bytes from the streaming response + body = b"" + async for chunk in resp.body_iterator: + body += chunk + + # Try to parse as JSON based on content-type + ct = resp.headers.get("content-type", "") + headers = _filter_headers(resp.headers) + + if "application/json" in ct: + # If it's JSON, try to parse and return as JSONResponse + try: + data = json.loads(body.decode("utf-8")) + return JSONResponse(content=data, status_code=resp.status_code, headers=headers) + except Exception: + # JSON parsing failed, fall back to raw bytes + pass + + # Other types: return as raw bytes (without content-length) + return Response(content=body, status_code=resp.status_code, headers=headers, media_type=resp.media_type) + + +class RadixTreeMiddleware(BaseHTTPMiddleware): + def __init__(self, app, *, router): + super().__init__(app) + self.router = router + self.args = router.args + self.tokenizer = AutoTokenizer.from_pretrained(self.args.hf_checkpoint, trust_remote_code=True) + self.radix_tree = StringRadixTrie(max_cache_size=10000, tokenizer=self.tokenizer, verbose=False) + self.router.radix_tree = self.radix_tree + + async def dispatch(self, request: Request, call_next): + + path = request.url.path + + if path != "/generate": + return await call_next(request) + + request_json = await request.json() + if "text" in request_json: + input_text = request_json.pop("text", "") + elif "input_ids" in request_json: + input_text = self.tokenizer.decode(request_json["input_ids"]) + else: + input_text = None + if not input_text: + return await call_next(request) + input_tokens, input_logprobs, input_loss_mask = self.radix_tree.retrieve_from_text( + input_text, return_logprob=True + ) + request_json["input_tokens"] = input_tokens + request_json["stream"] = False + request._json = request_json + + response_data = None + for _ in range(5): + response = await call_next(request) + + # If upstream returned a streaming response, materialize it to avoid Content-Length issues + if response.__class__.__name__ == "_StreamingResponse": + response = await _materialize_response(response) + # Try to parse JSON from the current response for meta inspection + try: + if hasattr(response, "body") and isinstance(response.body, (bytes, bytearray)): + response_data = json.loads(response.body.decode("utf-8")) + elif hasattr(response, "content") and isinstance(response.content, (dict, list)): + response_data = response.content # JSONResponse.content is already a dict/list + except Exception: + response_data = None + + if ( + isinstance(response_data, dict) + and "meta_info" in response_data + and "finish_reason" in response_data["meta_info"] + and response_data["meta_info"]["finish_reason"]["type"] != "abort" + ): + break + # await 30 seconds for aborted responses + await asyncio.sleep(30) + + if isinstance(response_data, dict) and "text" in response_data and "output_ids" in response_data: + generated_text = response_data["text"] + + full_text = input_text + generated_text + if full_text: + try: + if "output_token_logprobs" in response_data.get("meta_info", {}): + generated_token_logprobs = [ + item[0] for item in response_data["meta_info"]["output_token_logprobs"] + ] + generated_token_ids = [item[1] for item in response_data["meta_info"]["output_token_logprobs"]] + full_logprobs = input_logprobs + generated_token_logprobs + full_token_ids = input_tokens + generated_token_ids + full_loss_mask = input_loss_mask + [1] * len(generated_token_ids) + self.radix_tree.insert( + full_text, + full_token_ids, + full_logprobs, + full_loss_mask, + weight_version=response_data["meta_info"]["weight_version"], + ) + else: + generated_token_ids = self.tokenizer(generated_text, add_special_tokens=False)["input_ids"] + full_token_ids = input_tokens + generated_token_ids + full_loss_mask = input_loss_mask + [1] * len(generated_token_ids) + self.radix_tree.insert( + full_text, + full_token_ids, + None, + full_loss_mask, + weight_version=response_data["meta_info"]["weight_version"], + ) + + if getattr(self.router, "verbose", False): + print(f"[slime-router] Successfully cached trajectory with {len(full_token_ids)} tokens") + except Exception as e: + if getattr(self.router, "verbose", False): + print(f"[slime-router] Warning: Failed to cache trajectory: {e}") + return response + + +async def postprocess_sample_with_radix_tree(args, sample: Sample, output: dict): + assert not args.partial_rollout, "Currently partial rollout is not supported when using slime router" + retrieve_url = f"http://{args.sglang_router_ip}:{args.sglang_router_port}/retrieve_from_text" + retrieve_payload = {"text": sample.prompt + output["text"], "return_logp": True} + retrieve_output = await post(retrieve_url, retrieve_payload) + sample.tokens = retrieve_output["tokens"] + sample.response += output["text"] + sample.loss_mask = retrieve_output["loss_mask"] + sample.response_length = get_response_lengths([sample.loss_mask])[0] + sample.loss_mask = sample.loss_mask[-sample.response_length :] + sample.rollout_log_probs = retrieve_output["rollout_logp"][-sample.response_length :] + return sample diff --git a/slime/router/router.py b/slime/router/router.py index b77dd975f4..669094e442 100644 --- a/slime/router/router.py +++ b/slime/router/router.py @@ -45,7 +45,7 @@ def __init__(self, args, verbose=False): max_connections = getattr(args, "slime_router_max_connections", None) if max_connections is None: max_connections = ( - args.rollout_server_concurrency * args.rollout_num_gpus // args.rollout_num_gpus_per_engine + args.sglang_server_concurrency * args.rollout_num_gpus // args.rollout_num_gpus_per_engine ) timeout = getattr(args, "slime_router_timeout", None) diff --git a/slime/utils/arguments.py b/slime/utils/arguments.py index f9617e1f5e..fb2d305a63 100644 --- a/slime/utils/arguments.py +++ b/slime/utils/arguments.py @@ -1,12 +1,14 @@ import argparse -import copy import json import logging import os from typing import Any import yaml +from sglang_router.launch_router import RouterArgs +from slime.backends.sglang_utils.arguments import sglang_parse_args +from slime.backends.sglang_utils.arguments import validate_args as sglang_validate_args from slime.utils.eval_config import EvalDatasetConfig, build_eval_dataset_configs, ensure_dataset_list from slime.utils.logging_utils import configure_logger @@ -37,6 +39,12 @@ def add_cluster_arguments(parser): parser.add_argument( "--actor-num-gpus-per-node", type=int, default=8, help="Number of gpus per node for training actor" ) + parser.add_argument( + "--critic-num-nodes", type=int, default=None, help="Number of nodes for training actor" + ) + parser.add_argument( + "--critic-num-gpus-per-node", type=int, default=None, help="Number of gpus per node for training actor" + ) parser.add_argument( "--rollout-num-gpus", @@ -109,6 +117,12 @@ def add_train_arguments(parser): default="thd", help="The qkv layout for Megatron backend.", ) + parser.add_argument( + "--true-on-policy-mode", + action="store_true", + default=False, + help="Whether to enable true-on-policy mode.", + ) parser.add_argument( "--train-env-vars", type=json.loads, @@ -224,45 +238,6 @@ def add_rollout_arguments(parser): "Also, sometimes this will help alleviate the bug that transformers cannot find certain model." ), ) - parser.add_argument( - "--rollout-backend", - type=str, - choices=["sglang", "vllm"], - default="sglang", - help="Rollout inference backend: sglang (default) or vllm.", - ) - parser.add_argument( - "--vllm-base-url", - type=str, - default=None, - help="vLLM server URL (set automatically when using managed vLLM).", - ) - parser.add_argument( - "--vllm-max-retries", - type=int, - default=3, - help="Max HTTP retries for vLLM requests.", - ) - parser.add_argument( - "--vllm-weight-sync-packed", - action=argparse.BooleanOptionalAction, - default=True, - help="Use vLLM packed weight transfer for non-colocate (default: True). Disable for per-bucket mode.", - ) - parser.add_argument( - "--vllm-gpu-memory-utilization", - type=float, - default=0.4, - help="Fraction of GPU memory for vLLM KV cache (default: 0.85). " - "Lower this if the training model leaves insufficient free memory.", - ) - parser.add_argument( - "--rollout-server-concurrency", - type=int, - default=512, - help="Maximum number of concurrent requests sent to the rollout server. " - "Controls request parallelism for any backend (sglang or vllm).", - ) parser.add_argument( "--rollout-function-path", type=str, @@ -781,21 +756,16 @@ def add_algo_arguments(parser): reset_arg(parser, "--calculate-per-token-loss", action="store_true") reset_arg(parser, "--lr", type=float, default=1e-6) + parser.add_argument("--num-critic-only-steps", type=int, default=0, help="Number of critic only steps") + parser.add_argument("--critic-load", type=str, default=None, help="The checkpoint for critic model.") + parser.add_argument("--critic-save", type=str, default=None, help="The checkpoint for critic model.") + parser.add_argument("--critic-lr", type=float, default=None, help="The lr for critic model") + parser.add_argument("--critic-train-only", action="store_true", default=False, help="Only train critic") parser.add_argument( - "--num-critic-only-steps", + "--critic-lr-warmup-iters", type=int, default=0, - help="Number of initial rollout steps that train critic only; set >= num_rollout for critic-only runs", - ) - parser.add_argument( - "--megatron-config-path", - type=str, - default=None, - help=( - "Path to a structured YAML config for Megatron roles. The file should use " - "a top-level 'megatron' key with role-tagged entries; the critic runtime will " - "select exactly one entry with role=critic. Legacy 'critic' configs are still accepted." - ), + help="number of iterations to linearly warmup for critic model.", ) parser.add_argument("--eps-clip", type=float, default=0.2, help="PPO clip range") @@ -865,19 +835,6 @@ def add_algo_arguments(parser): "This is useful for sft or custom loss function." ), ) - parser.add_argument( - "--custom-advantage-function-path", - type=str, - default=None, - help=( - "Path to a custom advantage/returns computation function. " - "When set, this function replaces the built-in compute_advantages_and_returns. " - "Signature: def custom_fn(args, rollout_data) -> None. " - "The function should set rollout_data['advantages'] and rollout_data['returns'] in-place. " - "Critic values are available in rollout_data['values']. " - "(e.g., my_module.py:my_advantage_fn)." - ), - ) parser.add_argument( "--use-kl-loss", action="store_true", default=False, help="whether to use KL loss from GRPO" ) @@ -1080,13 +1037,7 @@ def add_router_arguments(parser): default=3, help="Number of consecutive failures before marking a worker as unhealthy.", ) - # try: - # from sglang_router.launch_router import RouterArgs - - # RouterArgs.add_cli_args(parser, use_router_prefix=True, exclude_host_port=True) - # except ImportError: - # pass # sglang not installed — router args unavailable (vllm-only mode) - # RouterArgs.add_cli_args(parser, use_router_prefix=True, exclude_host_port=True) + RouterArgs.add_cli_args(parser, use_router_prefix=True, exclude_host_port=True) return parser # wandb @@ -1149,7 +1100,7 @@ def add_wandb_arguments(parser): default=None, help=( "Log statistics of the category of reward, such as why the reward function considers it as failed. " - "Specify the key in the reward dict using this argument." + "Specify the key in the reward dict using this argument.", ), ) parser.add_argument( @@ -1331,7 +1282,7 @@ def add_rollout_buffer_arguments(parser): "--loss-mask-type", type=str, default="qwen", - choices=["qwen", "qwen3", "qwen3_5", "distill_qwen"], + choices=["qwen", "qwen3", "distill_qwen"], help="Loss mask type", ) parser.add_argument( @@ -1476,11 +1427,10 @@ def _pre_parse_mode(): the final ``args`` after Phase 2 parsing. """ temp_parser = argparse.ArgumentParser(add_help=False, allow_abbrev=False) - temp_parser.add_argument("--train-backend", type=str, choices=["megatron"], default="megatron") + temp_parser.add_argument("--train-backend", type=str, choices=["megatron", "fsdp"], default="megatron") temp_parser.add_argument("--debug-rollout-only", action="store_true", default=False) temp_parser.add_argument("--debug-train-only", action="store_true", default=False) temp_parser.add_argument("--load-debug-rollout-data", type=str, default=None) - temp_parser.add_argument("--rollout-backend", type=str, choices=["sglang", "vllm"], default="sglang") temp_args, _ = temp_parser.parse_known_args() return temp_args @@ -1492,30 +1442,33 @@ def parse_args(add_custom_arguments=None): add_slime_arguments = get_slime_extra_args_provider(add_custom_arguments) pre = _pre_parse_mode() - skip_sglang = ( - pre.debug_train_only - or pre.load_debug_rollout_data is not None - or pre.rollout_backend == "vllm" - ) + skip_sglang = pre.debug_train_only or pre.load_debug_rollout_data is not None # Phase 1: Parse sglang args independently (separate parser, parse_known_args). - # Skipped when sglang servers are not needed or when using vLLM backend. + # Skipped when sglang servers are not needed. sglang_ns = None if not skip_sglang: - from slime.backends.sglang_utils.arguments import sglang_parse_args - sglang_ns = sglang_parse_args() - # Phase 2: Parse megatron + slime args. + # Phase 2: Parse megatron/fsdp + slime args. # Uses ignore_unknown_args=True so that --sglang-* and pre-parsed CLI flags - # are silently ignored by the megatron parser. - from slime.backends.megatron_utils.arguments import megatron_parse_args - from slime.backends.megatron_utils.arguments import validate_args as megatron_validate_args + # are silently ignored by the megatron/fsdp parser. + if pre.train_backend == "megatron": + from slime.backends.megatron_utils.arguments import megatron_parse_args + from slime.backends.megatron_utils.arguments import validate_args as megatron_validate_args + + args = megatron_parse_args( + extra_args_provider=add_slime_arguments, + skip_hf_validate=pre.debug_rollout_only, + ) + else: + logger.warning( + "🚧 🚧 🚧 FSDP backend is being rewritten, please use Megatron backend for better stability. 🚧 🚧 🚧" + ) - args = megatron_parse_args( - extra_args_provider=add_slime_arguments, - skip_hf_validate=pre.debug_rollout_only, - ) + from slime.backends.fsdp_utils.arguments import fsdp_parse_args + + args = fsdp_parse_args(extra_args_provider=add_slime_arguments, ignore_unknown_args=True) # Merge pre-parsed args into the main namespace for key, value in vars(pre).items(): @@ -1531,103 +1484,12 @@ def parse_args(add_custom_arguments=None): if pre.train_backend == "megatron" and not args.debug_rollout_only: megatron_validate_args(args) - if not args.debug_train_only and getattr(args, "rollout_backend", "sglang") == "sglang": - from slime.backends.sglang_utils.arguments import validate_args as sglang_validate_args - + if not args.debug_train_only: sglang_validate_args(args) - elif getattr(args, "rollout_backend", "sglang") == "vllm": - # Set sglang aliases that the rest of the codebase expects - args.sglang_dp_size = getattr(args, "sglang_data_parallel_size", 1) or 1 - args.sglang_pp_size = getattr(args, "sglang_pipeline_parallel_size", 1) or 1 - args.sglang_ep_size = getattr(args, "sglang_expert_parallel_size", 1) or 1 - args.sglang_tp_size = args.rollout_num_gpus_per_engine - if not hasattr(args, "sglang_speculative_algorithm"): - args.sglang_speculative_algorithm = None return args -def _apply_megatron_role_overrides(base_args, overrides, role): - role_args = copy.deepcopy(base_args) - ignored_keys = {"num_nodes", "num_gpus_per_node"} - - # Apply overrides from the YAML config. - # Unspecified keys inherit from base_args via deepcopy. - for key, value in overrides.items(): - if key in ignored_keys: - logger.info(f"Ignoring {role} config key '{key}'; GPU allocation always follows CLI args.") - continue - if not hasattr(role_args, key): - logger.warning(f"{role.capitalize()} config key '{key}' is not a known argument, setting it anyway.") - else: - # YAML safe_load doesn't parse scientific notation (e.g. 1e-5) as float. - # Coerce the value to match the type of the existing attribute. - original = getattr(role_args, key) - if original is not None and isinstance(value, str) and isinstance(original, (int, float)): - try: - value = type(original)(value) - except (ValueError, TypeError): - pass - setattr(role_args, key, value) - - if role == "critic": - # Critic-specific: disable features that only apply to actors. - role_args.kl_coef = 0 - role_args.use_opd = False - role_args.custom_advantage_function_path = None - role_args.untie_embeddings_and_output_weights = True - - return role_args - - -def parse_megatron_role_args(base_args, megatron_config_path, role): - """Parse role-specific arguments from a unified Megatron YAML config. - - The config must contain a top-level ``megatron`` list with per-role entries. - Missing roles inherit the base args unchanged. - """ - assert role in {"actor", "critic"}, f"Unsupported Megatron config role: {role}" - - with open(megatron_config_path) as f: - raw_config = yaml.safe_load(f) or {} - - assert "megatron" in raw_config, ( - "megatron config must contain a top-level 'megatron' list, e.g. " - "megatron: [{name: default, role: actor, overrides: {...}}]" - ) - - overrides = {} - megatron_entries = raw_config["megatron"] - assert isinstance(megatron_entries, list), ( - "megatron config 'megatron' field must be a list, e.g. " - "megatron: [{name: default, role: actor, overrides: {...}}]" - ) - role_entries = [entry for entry in megatron_entries if entry.get("role") == role] - assert len(role_entries) <= 1, ( - f"megatron config must contain at most one entry with role={role}, e.g. " - f"megatron: [{{name: default, role: {role}, overrides: {{...}}}}]" - ) - if role_entries: - role_entry = role_entries[0] - overrides = role_entry.get("overrides") or role_entry.get("args") or {} - else: - logger.info( - f"No megatron config entry with role={role} found in {megatron_config_path}; using inherited args." - ) - - role_args = _apply_megatron_role_overrides(base_args, overrides, role) - logger.info( - f"Parsed megatron config for role={role} from {megatron_config_path}: overrides = {list(overrides.keys())}" - ) - - return role_args - - -def parse_critic_args(actor_args, megatron_config_path): - """Backward-compatible wrapper for critic-specific Megatron role parsing.""" - return parse_megatron_role_args(actor_args, megatron_config_path, role="critic") - - def _resolve_eval_datasets(args) -> list[EvalDatasetConfig]: """ Build evaluation dataset configurations from either --eval-config or --eval-prompt-data. @@ -1674,13 +1536,6 @@ def _resolve_eval_datasets(args) -> list[EvalDatasetConfig]: def slime_validate_args(args): args.eval_datasets = _resolve_eval_datasets(args) - if args.use_slime_router: - logger.warning( - "--use-slime-router is deprecated and ignored. slime now always uses sglang_router " - "built from https://github.com/zhuzilin/sgl-router." - ) - args.use_slime_router = False - if args.kl_coef != 0 or args.use_kl_loss: if not os.path.exists(args.ref_load): raise FileNotFoundError(f"ref_load {args.ref_load} does not exist, please check the path.") @@ -1800,9 +1655,14 @@ def slime_validate_args(args): args.debug_train_only = True args.use_critic = args.advantage_estimator == "ppo" - # Critic always uses the same GPU count as actor. - args.critic_num_gpus_per_node = args.actor_num_gpus_per_node - args.critic_num_nodes = args.actor_num_nodes + if args.critic_num_gpus_per_node is None: + args.critic_num_gpus_per_node = args.actor_num_gpus_per_node + if args.critic_num_nodes is None: + args.critic_num_nodes = args.actor_num_nodes + if args.critic_load is None: + args.critic_load = args.load + if args.critic_lr is None: + args.critic_lr = args.lr if args.offload: args.offload_train = True @@ -1844,10 +1704,6 @@ def slime_validate_args(args): args.offload_train = False if args.offload_rollout is None: args.offload_rollout = False - args.offload_rollout = False - - if args.use_critic: - args.offload_train = True if args.eval_function_path is None: args.eval_function_path = args.rollout_function_path diff --git a/slime/utils/data.py b/slime/utils/data.py index 4bb81e5677..c3dbfa96a0 100644 --- a/slime/utils/data.py +++ b/slime/utils/data.py @@ -89,30 +89,15 @@ def filter_long_prompt(origin_samples: list[Sample], tokenizer, processor, max_l return origin_samples if processor: - # Use processor only for samples with actual multimodal content; use batched tokenizer for text-only. - text_only = [] - multimodal = [] - for sample in origin_samples: - if sample.multimodal_inputs and any(v is not None for v in sample.multimodal_inputs.values()): - multimodal.append(sample) - else: - text_only.append(sample) filtered_samples = [] - if text_only: - prompts = [s.prompt for s in text_only] - input_ids_list = tokenizer(prompts, add_special_tokens=False)["input_ids"] - for sample, input_ids in zip(text_only, input_ids_list, strict=True): - if len(input_ids) <= max_length: - filtered_samples.append(sample) - if multimodal: + for sample in origin_samples: from slime.utils.processing_utils import process_vision_info - for sample in multimodal: - multimodal_inputs = process_vision_info(sample.prompt, processor) - processor_output = processor(text=sample.prompt, **multimodal_inputs) - input_ids = processor_output["input_ids"][0] - if len(input_ids) <= max_length: - filtered_samples.append(sample) + multimodal_inputs = process_vision_info(sample.prompt, processor) + processor_output = processor(text=sample.prompt, **multimodal_inputs) + input_ids = processor_output["input_ids"][0] + if len(input_ids) <= max_length: + filtered_samples.append(sample) else: prompts = [sample.prompt for sample in origin_samples] input_ids_list = tokenizer(prompts, add_special_tokens=False)["input_ids"] diff --git a/slime/utils/distributed_utils.py b/slime/utils/distributed_utils.py index 7f7e57271a..7918657a99 100644 --- a/slime/utils/distributed_utils.py +++ b/slime/utils/distributed_utils.py @@ -3,7 +3,6 @@ import torch import torch.distributed as dist -from packaging.version import parse as V from torch.distributed.distributed_c10d import ( Backend, PrefixStore, @@ -14,6 +13,7 @@ rendezvous, ) + GLOO_GROUP = None @@ -74,7 +74,7 @@ def init_process_group( # NOTE: The pg_options parameter was renamed into backend_options in PyTorch 2.6.0 # https://github.com/pytorch/pytorch/commit/a0c7029a75628cd5fa8df83c0de0ea98ee7fd844 # We need to determine the appropriate parameter name based on PyTorch version - pg_options_param_name = "backend_options" if V(torch.__version__) >= V("2.6") else "pg_options" + pg_options_param_name = "backend_options" if str(torch.__version__) >= "2.6" else "pg_options" pg, _ = _new_process_group_helper( world_size, rank, diff --git a/slime/utils/eval_config.py b/slime/utils/eval_config.py index 8342c7b20e..c3c20db1b8 100644 --- a/slime/utils/eval_config.py +++ b/slime/utils/eval_config.py @@ -118,12 +118,6 @@ class EvalDatasetConfig: # per-dataset custom generate function (e.g., for tool calling) custom_generate_function_path: str | None = None - # app_service URL for server mode generation (e.g., "http://localhost:18080") - # If set, eval will use ServerGenerationProxy to generate through AppServer - app_service: str | None = None - - eval_task_timeout: int | None = None - metadata_overrides: dict[str, Any] = field(default_factory=dict) def __post_init__(self) -> None: diff --git a/slime/utils/external_utils/command_utils.py b/slime/utils/external_utils/command_utils.py index cdf2cbe0b0..9f51ecdf20 100644 --- a/slime/utils/external_utils/command_utils.py +++ b/slime/utils/external_utils/command_utils.py @@ -28,7 +28,6 @@ def convert_checkpoint( hf_checkpoint: str | None = None, ): hf_checkpoint = hf_checkpoint or f"/root/models/{model_name}" - normalized_extra_args = f" {extra_args.strip()}" if extra_args.strip() else "" # TODO shall we make it in host-mapped folder and thus can cache it to speedup CI path_dst = f"{dir_dst}/{model_name}_torch_dist" @@ -60,7 +59,7 @@ def convert_checkpoint( "${MODEL_ARGS[@]} " f"--hf-checkpoint {hf_checkpoint} " f"--save {path_dst}" - f"{normalized_extra_args}" + f"{extra_args}" ) @@ -107,6 +106,9 @@ def execute_train( external_ray = get_bool_env_var("SLIME_SCRIPT_EXTERNAL_RAY") master_addr = os.environ.get("MASTER_ADDR", "127.0.0.1") + train_backend_fsdp = "--train-backend fsdp" in train_args + assert train_backend_fsdp == (megatron_model_type is None) + exec_command( "pkill -9 sglang; " "sleep 3; " @@ -138,7 +140,14 @@ def execute_train( { "env_vars": { "PYTHONPATH": "/root/Megatron-LM/", - "CUDA_DEVICE_MAX_CONNECTIONS": "1", + # If setting this in FSDP, the computation communication overlapping may have issues + **( + {} + if train_backend_fsdp + else { + "CUDA_DEVICE_MAX_CONNECTIONS": "1", + } + ), "NCCL_NVLS_ENABLE": str(int(check_has_nvlink())), "no_proxy": f"127.0.0.1,{master_addr}", # This is needed by megatron / torch distributed in multi-node setup diff --git a/slime/utils/health_monitor.py b/slime/utils/health_monitor.py index 52190267af..975330963f 100644 --- a/slime/utils/health_monitor.py +++ b/slime/utils/health_monitor.py @@ -20,8 +20,8 @@ class RolloutHealthMonitor: - stop(): Stop the monitor thread completely (called during dispose) """ - def __init__(self, server_group, args): - self._server_group = server_group + def __init__(self, engine_group, args): + self._engine_group = engine_group self._thread = None self._stop_event = None @@ -38,7 +38,7 @@ def start(self) -> bool: Returns: True if the monitor was started, False if there are no engines to monitor. """ - if not self._server_group.all_engines: + if not self._engine_group.all_engines: return False if self._thread is not None: @@ -135,7 +135,7 @@ def _health_monitor_loop(self) -> None: break def _run_health_checks(self) -> None: - for rollout_engine_id, engine in enumerate(self._server_group.engines): + for rollout_engine_id, engine in enumerate(self._engine_group.engines): if self._stop_event is not None and self._stop_event.is_set(): break if self._pause_event is not None and self._pause_event.is_set(): @@ -158,12 +158,12 @@ def _check_engine_health(self, rollout_engine_id, engine) -> None: logger.debug(f"Health check passed for rollout engine {rollout_engine_id}") def _kill_engine(self, rollout_engine_id: int): - logger.info(f"Killing server group {rollout_engine_id}...") + logger.info(f"Killing engine group {rollout_engine_id}...") for i in range( - rollout_engine_id * self._server_group.nodes_per_engine, - (rollout_engine_id + 1) * self._server_group.nodes_per_engine, + rollout_engine_id * self._engine_group.nodes_per_engine, + (rollout_engine_id + 1) * self._engine_group.nodes_per_engine, ): - engine = self._server_group.all_engines[i] + engine = self._engine_group.all_engines[i] if engine: logger.info(f"Shutting down and killing engine at index {i}") try: @@ -174,4 +174,4 @@ def _kill_engine(self, rollout_engine_id: int): logger.warning(f"Fail to kill engine at index {i} (e: {e})") else: logger.info(f"Engine at index {i} is already None") - self._server_group.all_engines[i] = None + self._engine_group.all_engines[i] = None diff --git a/slime/utils/http_utils.py b/slime/utils/http_utils.py index d68e340796..d7807f3b7a 100644 --- a/slime/utils/http_utils.py +++ b/slime/utils/http_utils.py @@ -204,12 +204,11 @@ def init_http_client(args): if not args.rollout_num_gpus: return - _client_concurrency = args.rollout_server_concurrency * args.rollout_num_gpus // args.rollout_num_gpus_per_engine + _client_concurrency = args.sglang_server_concurrency * args.rollout_num_gpus // args.rollout_num_gpus_per_engine if _http_client is None: _http_client = httpx.AsyncClient( limits=httpx.Limits(max_connections=_client_concurrency), timeout=httpx.Timeout(None), - trust_env=False, # internal SGLang comm only — never route through system proxy ) # Optionally initialize distributed POST via Ray without changing interfaces @@ -221,8 +220,8 @@ def init_http_client(args): def _init_ray_distributed_post(args): """Initialize one or more Ray async actors per node for HTTP POST. - Uses NodeAffinitySchedulingStrategy to place actors on alive Ray nodes. - Creates ``args.num_gpus_per_node`` actors per node. + Uses NodeAffinitySchedulingStrategy to place actors on distinct nodes. + Controlled by SLIME_HTTP_POST_ACTORS_PER_NODE. """ global _post_actors if _post_actors: @@ -244,7 +243,6 @@ def __init__(self, concurrency: int): self._client = httpx.AsyncClient( limits=httpx.Limits(max_connections=max(1, concurrency)), timeout=httpx.Timeout(None), - trust_env=False, # internal SGLang comm only — never route through system proxy ) async def do_post(self, url, payload, max_retries=60, headers=None): @@ -252,8 +250,8 @@ async def do_post(self, url, payload, max_retries=60, headers=None): # Create actors per node created = [] - total_actors = max(1, len(nodes) * args.num_gpus_per_node) - per_actor_conc = max(1, (_client_concurrency + total_actors - 1) // total_actors) + # Distribute client concurrency across actors (at least 1 per actor) + per_actor_conc = (_client_concurrency + len(nodes)) // len(nodes) for node in nodes: node_id = node["NodeID"] @@ -276,16 +274,13 @@ async def post(url, payload, max_retries=60, headers=None): # If distributed mode is enabled and actors exist, dispatch via Ray. if _distributed_post_enabled and _post_actors: try: + import ray + actor = _next_actor() if actor is not None: - # Await the Ray ObjectRef directly. The previous - # `asyncio.to_thread(ray.get, obj_ref)` blocked an OS thread - # from the default ThreadPoolExecutor (capped at - # `min(32, cpu+4)`), which becomes a hard upper bound on the - # number of in-flight POSTs that can be waited on in parallel - # and produces large tail latencies under high concurrency. + # Use a thread to avoid blocking the event loop on ray.get obj_ref = actor.do_post.remote(url, payload, max_retries, headers=headers) - return await obj_ref + return await asyncio.to_thread(ray.get, obj_ref) except Exception as e: logger.info(f"[http_utils] Distributed POST failed, falling back to local: {e} (url={url})") # fall through to local diff --git a/slime/utils/logging_utils.py b/slime/utils/logging_utils.py index 11348a4074..5fc0fad357 100644 --- a/slime/utils/logging_utils.py +++ b/slime/utils/logging_utils.py @@ -31,20 +31,6 @@ def init_tracking(args, primary: bool = True, **kwargs): wandb_utils.init_wandb_secondary(args, **kwargs) -def update_tracking_open_metrics(args, router_addr): - wandb_utils.reinit_wandb_primary_with_open_metrics(args, router_addr) - - -def finish_tracking(args): - if not args.use_wandb: - return - try: - if wandb.run is not None: - wandb.finish() - except Exception: - logging.getLogger(__name__).exception("Failed to finish wandb run") - - # TODO further refactor, e.g. put TensorBoard init to the "init" part def log(args, metrics, step_key: str): if args.use_wandb: diff --git a/slime/utils/mask_utils.py b/slime/utils/mask_utils.py index efe5e159f1..0ddb3a1410 100644 --- a/slime/utils/mask_utils.py +++ b/slime/utils/mask_utils.py @@ -9,11 +9,8 @@ def get_response_lengths(loss_masks: list[list[int]]) -> list[int]: class MultiTurnLossMaskGenerator: def __init__(self, tokenizer: AutoTokenizer, tokenizer_type: str = "qwen"): self.tokenizer = tokenizer + self.system_message_length, self.gen_token_length = self.get_system_message_length() self.tokenizer_type = tokenizer_type - self.system_message_length = 0 - self.gen_token_length = 0 - if self.tokenizer_type in ("qwen", "qwen3"): - self.system_message_length, self.gen_token_length = self.get_system_message_length() def get_response_lengths(self, loss_masks: list[list[int]]) -> list[int]: return get_response_lengths(loss_masks) @@ -41,11 +38,7 @@ def get_system_message_length(self) -> tuple[int, int]: end_interval = len(chat_template_token_ids) - len(raw_token_ids) - idx_2 gen_token_length = len( self.tokenizer.apply_chat_template( - test_messages, - add_special_tokens=False, - tokenize=True, - add_generation_prompt=True, - return_dict=False, + test_messages, add_special_tokens=False, tokenize=True, add_generation_prompt=True ) ) - len(chat_template_token_ids) @@ -60,11 +53,9 @@ def gen_multi_turn_loss_mask_qwen( for i, message in enumerate(messages): if i == 0: - message_ids = self.tokenizer.apply_chat_template( - [message], tokenize=True, tools=tools, return_dict=False - ) + message_ids = self.tokenizer.apply_chat_template([message], tokenize=True, tools=tools) else: - message_ids = self.tokenizer.apply_chat_template([message], tokenize=True, return_dict=False) + message_ids = self.tokenizer.apply_chat_template([message], tokenize=True) if message["role"] != "system" and i > 0: message_ids = message_ids[self.system_message_length :] @@ -89,23 +80,16 @@ def gen_multi_turn_loss_mask_qwen3( all_token_ids = [] prefix_message = {"role": "user", "content": "FOR CALCULATING LOSS MASK ONLY"} - prefix_token_ids = self.tokenizer.apply_chat_template([prefix_message], tokenize=True, return_dict=False) + prefix_token_ids = self.tokenizer.apply_chat_template([prefix_message], tokenize=True) for i, message in enumerate(messages): if i == 0: tailed_message_ids = self.tokenizer.apply_chat_template( - [message, prefix_message], - tokenize=True, - tools=tools, - return_dict=False, + [message, prefix_message], tokenize=True, tools=tools ) message_ids = tailed_message_ids[: -len(prefix_token_ids)] else: - prefixed_message_ids = self.tokenizer.apply_chat_template( - [prefix_message, message], - tokenize=True, - return_dict=False, - ) + prefixed_message_ids = self.tokenizer.apply_chat_template([prefix_message, message], tokenize=True) message_ids = prefixed_message_ids[len(prefix_token_ids) :] if message["role"] != "system" and i > 0: @@ -124,77 +108,6 @@ def gen_multi_turn_loss_mask_qwen3( return all_token_ids, all_loss_masks - def gen_multi_turn_loss_mask_qwen3_5( - self, messages: list[dict], tools: list[dict] = None - ) -> tuple[list[int], list[int]]: - rendered_text = self.tokenizer.apply_chat_template(messages, tokenize=False, tools=tools, return_dict=False) - tokenized = self.tokenizer(rendered_text, add_special_tokens=False, return_offsets_mapping=True) - token_ids = tokenized["input_ids"] - offset_mapping = tokenized.get("offset_mapping") - - if offset_mapping is None: - raise ValueError( - "Qwen3.5 loss mask generation requires a fast tokenizer " "with `return_offsets_mapping` support." - ) - - expected_token_ids = self.tokenizer.apply_chat_template( - messages, tokenize=True, tools=tools, return_dict=False - ) - if token_ids != expected_token_ids: - raise ValueError( - "Qwen3.5 rendered text tokenization does not match " - "`apply_chat_template(..., tokenize=True)` output." - ) - - assistant_header = "<|im_start|>assistant\n" - think_prefix = "\n" - end_marker = "<|im_end|>" - - char_mask = [0] * len(rendered_text) - cursor = 0 - - for message in messages: - if message["role"] != "assistant": - continue - - header_pos = rendered_text.find(assistant_header, cursor) - if header_pos < 0: - raise ValueError("Failed to locate assistant message in rendered Qwen3.5 chat template output.") - - content_start = header_pos + len(assistant_header) - end_pos = rendered_text.find(end_marker, content_start) - if end_pos < 0: - raise ValueError("Failed to locate <|im_end|> for assistant message in rendered text.") - - span_end = end_pos + len(end_marker) - if span_end < len(rendered_text) and rendered_text[span_end] == "\n": - span_end += 1 - cursor = span_end - - if message.get("step_loss_mask", 1) != 1: - continue - - if rendered_text[content_start : content_start + len(think_prefix)] == think_prefix: - mask_start = content_start + len(think_prefix) - else: - mask_start = content_start - - for pos in range(mask_start, span_end): - char_mask[pos] = 1 - - char_mask_prefix_sum = [0] - for value in char_mask: - char_mask_prefix_sum.append(char_mask_prefix_sum[-1] + value) - - loss_mask = [] - for start, end in offset_mapping: - if end <= start: - loss_mask.append(0) - else: - loss_mask.append(1 if char_mask_prefix_sum[end] - char_mask_prefix_sum[start] > 0 else 0) - - return token_ids, loss_mask - def gen_multi_turn_loss_mask_distill_qwen( self, messages: list[dict], tools: list[dict] = None ) -> tuple[list[int], list[int]]: @@ -221,8 +134,6 @@ def get_loss_mask(self, messages: list[dict], tools: list[dict] = None) -> tuple return self.gen_multi_turn_loss_mask_qwen(messages, tools) elif self.tokenizer_type == "qwen3": return self.gen_multi_turn_loss_mask_qwen3(messages, tools) - elif self.tokenizer_type == "qwen3_5": - return self.gen_multi_turn_loss_mask_qwen3_5(messages, tools) elif self.tokenizer_type == "distill_qwen": return self.gen_multi_turn_loss_mask_distill_qwen(messages, tools) else: diff --git a/slime/utils/megatron_bridge_utils.py b/slime/utils/megatron_bridge_utils.py index c87fb5b7b0..9e5f065cd4 100644 --- a/slime/utils/megatron_bridge_utils.py +++ b/slime/utils/megatron_bridge_utils.py @@ -6,38 +6,6 @@ unwrap_model = None -def patch_hf_config_for_megatron_bridge(hf_config): - configs = [] - seen_config_ids = set() - - def add_config(config): - if config is None or id(config) in seen_config_ids: - return - seen_config_ids.add(id(config)) - configs.append(config) - - add_config(hf_config) - add_config(getattr(hf_config, "config", None)) - - for config in list(configs): - add_config(getattr(config, "text_config", None)) - - for config in configs: - rope_params = getattr(config, "rope_parameters", None) or getattr(config, "rope_scaling", None) - if isinstance(rope_params, dict) and "rope_theta" in rope_params and not hasattr(config, "rope_theta"): - config.rope_theta = rope_params["rope_theta"] - - return hf_config - - -def patch_auto_bridge_hf_config(bridge): - hf_pretrained = getattr(bridge, "hf_pretrained", None) - if hf_pretrained is not None: - patch_hf_config_for_megatron_bridge(hf_pretrained) - - return bridge - - @contextmanager def patch_megatron_model(model): unwrapped_model = unwrap_model(model)[0] diff --git a/slime/utils/memory_utils.py b/slime/utils/memory_utils.py index d4b2d89321..c12f3cd0bc 100644 --- a/slime/utils/memory_utils.py +++ b/slime/utils/memory_utils.py @@ -1,7 +1,6 @@ import gc import logging -import psutil import torch import torch.distributed as dist @@ -19,7 +18,6 @@ def clear_memory(clear_host_memory: bool = False): def available_memory(): device = torch.cuda.current_device() free, total = torch.cuda.mem_get_info(device) - vm = psutil.virtual_memory() return { "gpu": str(device), "total_GB": _byte_to_gb(total), @@ -27,10 +25,6 @@ def available_memory(): "used_GB": _byte_to_gb(total - free), "allocated_GB": _byte_to_gb(torch.cuda.memory_allocated(device)), "reserved_GB": _byte_to_gb(torch.cuda.memory_reserved(device)), - "host_total_GB": _byte_to_gb(vm.total), - "host_available_GB": _byte_to_gb(vm.available), - "host_used_GB": _byte_to_gb(vm.used), - "host_free_GB": _byte_to_gb(vm.free), } diff --git a/slime/utils/misc.py b/slime/utils/misc.py index 4d4775f4f7..5a0841568a 100644 --- a/slime/utils/misc.py +++ b/slime/utils/misc.py @@ -119,6 +119,7 @@ def group_by(iterable, key=None): return dict(ret) +# TODO fsdp can also use this def chunk_named_params_by_size(named_params: Iterable[tuple[str, torch.Tensor]], chunk_size: int): return _chunk_by_size( named_params, diff --git a/slime/utils/ppo_utils.py b/slime/utils/ppo_utils.py index 2a858e7a3f..2404883ab3 100644 --- a/slime/utils/ppo_utils.py +++ b/slime/utils/ppo_utils.py @@ -648,31 +648,30 @@ def chunked_gae( def calculate_log_probs_and_entropy(logits, tokens, tp_group, with_entropy: bool = False, chunk_size: int = -1): logits = logits.contiguous() + # TODO: not sure why we need to clone the logits here. + # Without the clone, the backward will trigger inplace edit error. + # It seems that the function with tp will modify the logits inplace. entropy = None if logits.size(0) != 0: if chunk_size > 0: num_chunks = (logits.size(0) - 1) // chunk_size + 1 - logits_chunks = logits.chunk(num_chunks, dim=0) tokens_chunks = tokens.chunk(num_chunks, dim=0) - - if with_entropy: - entropys = [] - for logits_chunk in logits_chunks: - entropy_input = logits_chunk.clone() - entropys.append(compute_entropy_from_logits(entropy_input, tp_group)) - entropy = torch.cat(entropys, dim=0) - + logits_chunks = logits.chunk(num_chunks, dim=0) log_probs = [] for tokens_chunk, logits_chunk in zip(tokens_chunks, logits_chunks, strict=True): log_prob = compute_log_probs(logits_chunk.clone(), tokens_chunk, tp_group) log_probs.append(log_prob) log_prob = torch.cat(log_probs, dim=0) - else: if with_entropy: - entropy_input = logits.clone() - entropy = compute_entropy_from_logits(entropy_input, tp_group) - + entropys = [] + for _, logits_chunk in zip(tokens_chunks, logits_chunks, strict=True): + entropy = compute_entropy_from_logits(logits_chunk.clone(), tp_group) + entropys.append(entropy) + entropy = torch.cat(entropys, dim=0) + else: log_prob = compute_log_probs(logits.clone(), tokens, tp_group) + if with_entropy: + entropy = compute_entropy_from_logits(logits.clone(), tp_group) else: log_prob = logits.new_zeros((0,)) if with_entropy: diff --git a/slime/utils/processing_utils.py b/slime/utils/processing_utils.py index fb652e73d0..18aa279971 100644 --- a/slime/utils/processing_utils.py +++ b/slime/utils/processing_utils.py @@ -1,10 +1,7 @@ import base64 import io -import json import logging -from pathlib import Path -from PIL import Image from transformers import AutoProcessor, AutoTokenizer, PreTrainedTokenizerBase, ProcessorMixin logger = logging.getLogger(__name__) @@ -21,16 +18,17 @@ def load_tokenizer(name_or_path: str, **kwargs): def build_processor_kwargs(multimodal_inputs: dict | None = None) -> dict: + forced = { + # force return_tensors to None for input_ids + "return_tensors": None, + } modality_forced = {"return_tensors": "pt"} result = dict(multimodal_inputs) if multimodal_inputs else {} - # return_tensors=None for text (input_ids as lists), "pt" for modality-specific outputs - result["text_kwargs"] = { - **result.get("text_kwargs", {}), - "return_tensors": None, - "return_mm_token_type_ids": False, - } + result.update(forced) + + # set return_tensors="pt" for modality-specific outputs for key in ("audio_kwargs", "images_kwargs", "videos_kwargs"): if key in result: result[key] = {**result[key], **modality_forced} @@ -40,48 +38,6 @@ def build_processor_kwargs(multimodal_inputs: dict | None = None) -> dict: return result -def _try_load_glm4v_processor(name_or_path: str, **kwargs): - """Fallback: manually construct a Glm4vProcessor for GLM-4.6V / GLM-4.5V models. - - AutoProcessor fails for these models on transformers < 5.0 because - the Glm46VProcessor / Glm4vMoeProcessor classes are not registered. - The underlying Glm4vProcessor (non-MoE) works for both variants since - they share the same vision architecture. - """ - try: - from transformers.models.glm4v.image_processing_glm4v import Glm4vImageProcessor - from transformers.models.glm4v.processing_glm4v import Glm4vProcessor - from transformers.models.glm4v.video_processing_glm4v import Glm4vVideoProcessor - except ImportError: - return None - - pp_path = Path(name_or_path) / "preprocessor_config.json" - vp_path = Path(name_or_path) / "video_preprocessor_config.json" - if not pp_path.exists(): - return None - - skip_keys = {"image_processor_type", "processor_class", "video_processor_type"} - with open(pp_path) as f: - pp_cfg = {k: v for k, v in json.load(f).items() if k not in skip_keys} - image_processor = Glm4vImageProcessor(**pp_cfg) - - video_processor = None - if vp_path.exists(): - with open(vp_path) as f: - vp_cfg = {k: v for k, v in json.load(f).items() if k not in skip_keys} - video_processor = Glm4vVideoProcessor(**vp_cfg) - - tokenizer = AutoTokenizer.from_pretrained(name_or_path, **kwargs) - proc = Glm4vProcessor( - image_processor=image_processor, - tokenizer=tokenizer, - video_processor=video_processor, - chat_template=tokenizer.chat_template, - ) - logger.info(f"Loaded Glm4vProcessor manually for {name_or_path}") - return proc - - def load_processor(name_or_path: str, **kwargs): try: proc = AutoProcessor.from_pretrained(name_or_path, **kwargs) @@ -89,67 +45,25 @@ def load_processor(name_or_path: str, **kwargs): logger.warning(f"Failed to load processor from {name_or_path}: {e}") proc = None - # If HF returned a tokenizer instead of a proper processor, discard it. + # If HF returned a tokenizer, discard it. if isinstance(proc, PreTrainedTokenizerBase) or not isinstance(proc, ProcessorMixin): - # Fallback: try to construct a GLM-4.6V / GLM-4.5V processor manually. - proc = _try_load_glm4v_processor(name_or_path, **kwargs) + proc = None return proc -def _extract_images_from_messages(messages): - """Extract PIL images from chat messages containing multimodal content. - - Handles base64 strings (with or without data: URI prefix), file paths, - and PIL Image objects embedded in message content dicts. - """ - images = [] - for msg in messages: - content = msg.get("content", []) - if not isinstance(content, list): - continue - for item in content: - if not isinstance(item, dict) or item.get("type") != "image": - continue - image_data = item.get("image") - if image_data is None: - continue - if isinstance(image_data, Image.Image): - images.append(image_data) - elif isinstance(image_data, str): - if image_data.startswith("data:"): - _, encoded = image_data.split(",", 1) - images.append(Image.open(io.BytesIO(base64.b64decode(encoded)))) - else: - try: - raw = base64.b64decode(image_data) - images.append(Image.open(io.BytesIO(raw))) - except Exception: - # Not base64 — try as file path - images.append(Image.open(image_data)) - return images - - def process_vision_info(prompt, processor): - """Extract PIL images (and videos) from the message list for training. - - Tries qwen_vl_utils first (Qwen VL family), falls back to generic - extraction for other models (e.g. GLM-4.6V). - """ - try: - from qwen_vl_utils import process_vision_info as qwen_process_vision_info - - if hasattr(processor.image_processor, "patch_size"): - image_patch_size = processor.image_processor.patch_size - else: - image_patch_size = DEFAULT_PATCH_SIZE - images, videos = qwen_process_vision_info(prompt, image_patch_size=image_patch_size) - except Exception: - # Fallback: generic extraction for non-Qwen models - images = _extract_images_from_messages(prompt) or None - videos = None - - return {"images": images, "videos": videos} + # TODO: temporary solution, will write image utils for slime later + from qwen_vl_utils import process_vision_info as qwen_process_vision_info + + if hasattr(processor.image_processor, "patch_size"): + image_patch_size = processor.image_processor.patch_size + else: + logger.info(f"Using default patch size: {DEFAULT_PATCH_SIZE}") + image_patch_size = DEFAULT_PATCH_SIZE + images, videos = qwen_process_vision_info(prompt, image_patch_size=image_patch_size) + multimodal_inputs = {"images": images, "videos": videos} + return multimodal_inputs def encode_image_for_rollout_engine(image) -> str: diff --git a/slime/utils/reloadable_process_group.py b/slime/utils/reloadable_process_group.py index 66055a352f..a8ea33a909 100644 --- a/slime/utils/reloadable_process_group.py +++ b/slime/utils/reloadable_process_group.py @@ -296,7 +296,7 @@ def reload_process_groups(): def _wrap_low_level_call(): try: mem_info = available_memory() - if mem_info["free_GB"] < 3: + if mem_info["free_GB"] < 5: clear_memory() yield except Exception as e: diff --git a/slime/utils/trace_utils.py b/slime/utils/trace_utils.py deleted file mode 100644 index b51bc5b931..0000000000 --- a/slime/utils/trace_utils.py +++ /dev/null @@ -1,612 +0,0 @@ -from __future__ import annotations - -import contextvars -import functools -import inspect -import logging -import time -import uuid -from collections.abc import Callable -from contextlib import contextmanager -from dataclasses import dataclass, field -from typing import Any - -from slime.utils.types import Sample - -TRACE_VERSION = 1 -SGLANG_TRACE_META_KEYS = ( - "prompt_tokens", - "completion_tokens", - "cached_tokens", - "pd_prefill_bootstrap_queue_duration", - "pd_prefill_forward_duration", - "pd_prefill_transfer_queue_duration", - "pd_prefill_retry_count", - "pd_decode_prealloc_duration", - "pd_decode_transfer_duration", - "pd_decode_forward_duration", - "pd_bootstrap_duration", - "pd_alloc_waiting_duration", - "pd_transfer_speed_gb_s", - "pd_transfer_total_mb", -) - -logger = logging.getLogger(__name__) -_TRACE_STACK: contextvars.ContextVar[tuple[tuple[str, str], ...]] = contextvars.ContextVar( - "slime_trace_stack", - default=(), -) -_TRACE_HANDLE_STACK: contextvars.ContextVar[tuple[tuple[TraceHandle, ...], ...]] = contextvars.ContextVar( - "slime_trace_handle_stack", - default=(), -) -_TRACE_AUTO_INFER_WARNED: set[str] = set() - - -@dataclass -class TraceHandle: - trace_id: str - carrier: dict[str, Any] - sample_id: int | str | None = None - group_id: int | str | None = None - attempt: int = 0 - parent_span_id: str | None = None - - -@dataclass -class TraceSpanContext: - target: Sample | TraceHandle | list[Sample | TraceHandle] - handles: list[TraceHandle] - end_attrs: dict[str, Any] = field(default_factory=dict) - end_events: list[dict[str, Any]] = field(default_factory=list) - closed: bool = False - - def set(self, key: str, value: Any) -> TraceSpanContext: - self.end_attrs[key] = value - self._sync_end_events({key: value}) - return self - - def update(self, attrs: dict[str, Any] | None) -> TraceSpanContext: - if attrs: - self.end_attrs.update(attrs) - self._sync_end_events(attrs) - return self - - def set_attr(self, key: str, value: Any) -> TraceSpanContext: - return self.set(key, value) - - def update_attrs(self, attrs: dict[str, Any] | None) -> TraceSpanContext: - return self.update(attrs) - - def build_end_attrs(self) -> dict[str, Any] | None: - return dict(self.end_attrs) or None - - def finalize(self, end_events: list[dict[str, Any]]) -> None: - self.end_events = end_events - self.closed = True - if self.end_attrs: - self._sync_end_events(self.end_attrs) - - def _sync_end_events(self, attrs: dict[str, Any]) -> None: - if not self.end_events or not attrs: - return - for event in self.end_events: - event.setdefault("attrs", {}) - event["attrs"].update(attrs) - - -def _noop_handle() -> TraceHandle: - return TraceHandle( - trace_id="", - carrier={ - "version": TRACE_VERSION, - "trace_id": "", - "events": [], - "sample_id": None, - "group_id": None, - "attempt": 0, - }, - ) - - -def _log_trace_error(action: str, exc: Exception) -> None: - logger.debug("trace %s skipped: %s", action, exc, exc_info=True) - - -def _new_trace_id() -> str: - return uuid.uuid4().hex - - -def _new_span_id() -> str: - return uuid.uuid4().hex - - -def build_sglang_meta_trace_attrs(meta: dict[str, Any]) -> dict[str, Any]: - attrs = {key: meta[key] for key in SGLANG_TRACE_META_KEYS if key in meta and meta[key] is not None} - attrs["finish_reason"] = meta["finish_reason"]["type"] - return attrs - - -def _ensure_trace_carrier( - carrier: dict[str, Any] | None, - *, - trace_id: str | None = None, - sample_id: int | str | None = None, - group_id: int | str | None = None, - attempt: int = 0, -) -> dict[str, Any]: - if carrier is None: - carrier = {} - carrier.setdefault("version", TRACE_VERSION) - carrier.setdefault("trace_id", trace_id or _new_trace_id()) - carrier.setdefault("events", []) - if sample_id is not None: - carrier["sample_id"] = sample_id - else: - carrier.setdefault("sample_id", None) - if group_id is not None: - carrier["group_id"] = group_id - else: - carrier.setdefault("group_id", None) - carrier["attempt"] = int(carrier.get("attempt", attempt)) - return carrier - - -def bind_trace(sample: Sample) -> TraceHandle: - try: - sample.trace = _ensure_trace_carrier( - getattr(sample, "trace", None), - sample_id=sample.index, - group_id=sample.group_index, - ) - return TraceHandle( - trace_id=sample.trace["trace_id"], - carrier=sample.trace, - sample_id=sample.trace.get("sample_id"), - group_id=sample.trace.get("group_id"), - attempt=int(sample.trace.get("attempt", 0)), - ) - except Exception as exc: - _log_trace_error("bind", exc) - return _noop_handle() - - -def bind_trace_carrier( - carrier: dict[str, Any] | None, - *, - trace_id: str | None = None, - sample_id: int | str | None = None, - group_id: int | str | None = None, - attempt: int = 0, - parent_span_id: str | None = None, -) -> TraceHandle: - try: - trace = _ensure_trace_carrier( - carrier, - trace_id=trace_id, - sample_id=sample_id, - group_id=group_id, - attempt=attempt, - ) - return TraceHandle( - trace_id=trace["trace_id"], - carrier=trace, - sample_id=trace.get("sample_id"), - group_id=trace.get("group_id"), - attempt=int(trace.get("attempt", 0)), - parent_span_id=parent_span_id, - ) - except Exception as exc: - _log_trace_error("bind_carrier", exc) - handle = _noop_handle() - handle.parent_span_id = parent_span_id - return handle - - -def export_trace(handle: TraceHandle) -> dict[str, Any]: - try: - return { - "version": TRACE_VERSION, - "trace_id": handle.trace_id, - "sample_id": handle.sample_id, - "group_id": handle.group_id, - "attempt": handle.attempt, - "parent_span_id": handle.parent_span_id or _get_current_parent_span_id(handle.trace_id), - } - except Exception as exc: - _log_trace_error("export", exc) - return { - "version": TRACE_VERSION, - "trace_id": "", - "sample_id": None, - "group_id": None, - "attempt": 0, - "parent_span_id": None, - } - - -def import_trace(payload: dict[str, Any], carrier: dict[str, Any] | None = None) -> TraceHandle: - try: - return bind_trace_carrier( - carrier, - trace_id=payload.get("trace_id"), - sample_id=payload.get("sample_id"), - group_id=payload.get("group_id"), - attempt=int(payload.get("attempt", 0)), - parent_span_id=payload.get("parent_span_id"), - ) - except Exception as exc: - _log_trace_error("import", exc) - return _noop_handle() - - -def trace_event( - target: Sample | TraceHandle | list[Sample | TraceHandle], name: str, *, attrs: dict[str, Any] | None = None -): - try: - timestamp = time.time() - for handle in _coerce_handles(target): - _append_event(handle, kind="event", name=name, timestamp=timestamp, attrs=attrs) - except Exception as exc: - _log_trace_error(f"event:{name}", exc) - - -@contextmanager -def trace_span( - target: Sample | TraceHandle | list[Sample | TraceHandle], - name: str, - *, - attrs: dict[str, Any] | None = None, - record_error: bool = True, -): - try: - handles = _coerce_handles(target) - except Exception as exc: - _log_trace_error(f"span:{name}", exc) - handles = [] - - if not handles: - yield target - return - - timestamp = time.time() - stack_before = _TRACE_STACK.get() - handle_stack_before = _TRACE_HANDLE_STACK.get() - span_records: list[tuple[TraceHandle, str]] = [] - new_entries: list[tuple[str, str]] = [] - - try: - for handle in handles: - span_id = _new_span_id() - parent_span_id = handle.parent_span_id or _get_current_parent_span_id(handle.trace_id, stack=stack_before) - _append_event( - handle, - kind="span_start", - name=name, - timestamp=timestamp, - span_id=span_id, - parent_span_id=parent_span_id, - attrs=attrs, - ) - span_records.append((handle, span_id)) - new_entries.append((handle.trace_id, span_id)) - token = _TRACE_STACK.set(stack_before + tuple(new_entries)) - handle_token = _TRACE_HANDLE_STACK.set(handle_stack_before + (tuple(handles),)) - except Exception as exc: - _log_trace_error(f"span:{name}", exc) - yield target - return - - span_context = TraceSpanContext( - target=handles[0] if len(handles) == 1 else handles, - handles=handles, - ) - - try: - yield span_context - except Exception as exc: - try: - end_attrs = span_context.build_end_attrs() - if record_error: - error_attrs = {"error_type": type(exc).__name__, "error_message": str(exc)} - if end_attrs: - end_attrs.update(error_attrs) - else: - end_attrs = error_attrs - span_context.finalize(_record_span_end(span_records, name=name, attrs=end_attrs)) - except Exception as trace_exc: - _log_trace_error(f"span_end:{name}", trace_exc) - raise - else: - try: - span_context.finalize(_record_span_end(span_records, name=name, attrs=span_context.build_end_attrs())) - except Exception as exc: - _log_trace_error(f"span_end:{name}", exc) - finally: - try: - _TRACE_STACK.reset(token) - except Exception as exc: - _log_trace_error(f"span_reset:{name}", exc) - try: - _TRACE_HANDLE_STACK.reset(handle_token) - except Exception as exc: - _log_trace_error(f"span_handle_reset:{name}", exc) - - -def trace_next_attempt( - target: Sample | TraceHandle | list[Sample | TraceHandle], - *, - attrs: dict[str, Any] | None = None, -): - try: - handles = _coerce_handles(target) - for handle in handles: - next_attempt = int(handle.carrier.get("attempt", 0)) + 1 - handle.carrier["attempt"] = next_attempt - handle.attempt = next_attempt - attempt_attrs = {"attempt": next_attempt} - if attrs: - attempt_attrs.update(attrs) - trace_event(handle, "attempt_start", attrs=attempt_attrs) - if not handles: - return target - return handles[0] if len(handles) == 1 else handles - except Exception as exc: - _log_trace_error("next_attempt", exc) - return target - - -def trace_function( - name: str, - *, - target: str | None = None, - target_getter: Callable[..., Sample | TraceHandle | list[Sample | TraceHandle] | None] | None = None, - attrs_getter: Callable[..., dict[str, Any] | None] | None = None, - record_error: bool = True, -): - def decorator(fn): - if inspect.iscoroutinefunction(fn): - - @functools.wraps(fn) - async def async_wrapper(*args, **kwargs): - resolved_target = _resolve_trace_function_target( - fn, - args, - kwargs, - target=target, - target_getter=target_getter, - ) - if resolved_target is None: - return await fn(*args, **kwargs) - attrs = _resolve_trace_function_attrs(fn, args, kwargs, attrs_getter=attrs_getter) - with trace_span(resolved_target, name, attrs=attrs, record_error=record_error): - return await fn(*args, **kwargs) - - return async_wrapper - - @functools.wraps(fn) - def sync_wrapper(*args, **kwargs): - resolved_target = _resolve_trace_function_target( - fn, - args, - kwargs, - target=target, - target_getter=target_getter, - ) - if resolved_target is None: - return fn(*args, **kwargs) - attrs = _resolve_trace_function_attrs(fn, args, kwargs, attrs_getter=attrs_getter) - with trace_span(resolved_target, name, attrs=attrs, record_error=record_error): - return fn(*args, **kwargs) - - return sync_wrapper - - return decorator - - -def _record_span_end( - span_records: list[tuple[TraceHandle, str]], - *, - name: str, - attrs: dict[str, Any] | None, -) -> list[dict[str, Any]]: - timestamp = time.time() - events = [] - for handle, span_id in span_records: - events.append( - _append_event( - handle, - kind="span_end", - name=name, - timestamp=timestamp, - span_id=span_id, - attrs=attrs, - ) - ) - return events - - -def _append_event( - handle: TraceHandle, - *, - kind: str, - name: str, - timestamp: float, - attrs: dict[str, Any] | None = None, - span_id: str | None = None, - parent_span_id: str | None = None, -) -> dict[str, Any]: - event = { - "type": kind, - "name": name, - "ts": timestamp, - "trace_id": handle.trace_id, - "sample_id": handle.sample_id, - "group_id": handle.group_id, - "attempt": int(handle.carrier.get("attempt", handle.attempt)), - } - if span_id is not None: - event["span_id"] = span_id - if parent_span_id is not None: - event["parent_span_id"] = parent_span_id - if attrs: - event["attrs"] = dict(attrs) - handle.carrier["events"].append(event) - return event - - -def _coerce_handles(target: Sample | TraceHandle | list[Sample | TraceHandle]) -> list[TraceHandle]: - target = _adapt_trace_target(target) - if isinstance(target, TraceHandle): - return [target] - if isinstance(target, Sample): - return [bind_trace(target)] - if isinstance(target, list): - handles = [] - for item in target: - handles.extend(_coerce_handles(item)) - return handles - return [] - - -def _get_current_parent_span_id( - trace_id: str, - *, - stack: tuple[tuple[str, str], ...] | None = None, -) -> str | None: - stack = _TRACE_STACK.get() if stack is None else stack - for current_trace_id, span_id in reversed(stack): - if current_trace_id == trace_id: - return span_id - return None - - -def _resolve_trace_function_target( - fn, - args: tuple[Any, ...], - kwargs: dict[str, Any], - *, - target: str | None, - target_getter: Callable[..., Sample | TraceHandle | list[Sample | TraceHandle] | None] | None, -): - try: - bound = inspect.signature(fn).bind_partial(*args, **kwargs) - except Exception as exc: - _log_trace_error(f"trace_function_bind:{getattr(fn, '__qualname__', fn)}", exc) - bound = None - - if target is not None: - if bound is None or target not in bound.arguments: - logger.warning( - "trace_function target '%s' not found for %s; tracing disabled for this call", - target, - getattr(fn, "__qualname__", repr(fn)), - ) - return None - resolved = _normalize_trace_target(bound.arguments.get(target)) - if resolved is None: - logger.warning( - "trace_function target '%s' for %s is not a supported trace target; tracing disabled for this call", - target, - getattr(fn, "__qualname__", repr(fn)), - ) - return resolved - - if target_getter is not None: - try: - resolved = _normalize_trace_target(target_getter(*args, **kwargs)) - return resolved - except Exception as exc: - _log_trace_error(f"trace_function_target_getter:{getattr(fn, '__qualname__', fn)}", exc) - return None - - inferred = _infer_trace_target(bound.arguments.values() if bound is not None else args) - if inferred is not None: - warn_key = getattr(fn, "__module__", "") + "." + getattr(fn, "__qualname__", repr(fn)) - if warn_key not in _TRACE_AUTO_INFER_WARNED: - _TRACE_AUTO_INFER_WARNED.add(warn_key) - logger.warning( - "trace_function auto-inferred target for %s; inference may be ambiguous, prefer explicit target=...", - getattr(fn, "__qualname__", repr(fn)), - ) - return inferred - - return _get_current_trace_target() - - -def _resolve_trace_function_attrs( - fn, - args: tuple[Any, ...], - kwargs: dict[str, Any], - *, - attrs_getter: Callable[..., dict[str, Any] | None] | None, -) -> dict[str, Any] | None: - if attrs_getter is None: - return None - try: - attrs = attrs_getter(*args, **kwargs) - if attrs is None: - return None - if isinstance(attrs, dict): - return attrs - logger.warning( - "trace_function attrs_getter for %s returned non-dict %s; ignoring attrs", - getattr(fn, "__qualname__", repr(fn)), - type(attrs).__name__, - ) - return None - except Exception as exc: - _log_trace_error(f"trace_function_attrs_getter:{getattr(fn, '__qualname__', fn)}", exc) - return None - - -def _infer_trace_target(values) -> Sample | TraceHandle | list[Sample | TraceHandle] | None: - for value in values: - normalized = _normalize_trace_target(value) - if normalized is not None: - return normalized - return None - - -def _normalize_trace_target(value): - value = _adapt_trace_target(value) - if isinstance(value, (Sample, TraceHandle)): - return value - if isinstance(value, list) and value: - if all(_normalize_trace_target(item) is not None for item in value): - return value - return None - - -def _adapt_trace_target(value): - if value is None: - return None - if isinstance(value, (Sample, TraceHandle)): - return value - if isinstance(value, list): - return [_adapt_trace_target(item) for item in value] - if _looks_like_sample_box(value): - generation = getattr(value, "generation", None) - if generation: - return generation - return getattr(value, "prompt_sample", None) - return value - - -def _get_current_trace_target() -> TraceHandle | list[TraceHandle] | None: - handle_stack = _TRACE_HANDLE_STACK.get() - if not handle_stack: - return None - current_handles = list(handle_stack[-1]) - if not current_handles: - return None - if len(current_handles) == 1: - return current_handles[0] - return current_handles - - -def _looks_like_sample_box(value: Any) -> bool: - cls = getattr(value, "__class__", None) - if cls is None or getattr(cls, "__name__", "") != "SampleBox": - return False - return hasattr(value, "prompt_sample") and hasattr(value, "generation") diff --git a/slime/utils/wandb_utils.py b/slime/utils/wandb_utils.py index 2ec859de5f..bb491d1b03 100644 --- a/slime/utils/wandb_utils.py +++ b/slime/utils/wandb_utils.py @@ -79,62 +79,6 @@ def init_wandb_primary(args): args.wandb_run_id = wandb.run.id -def reinit_wandb_primary_with_open_metrics(args, router_addr): - """Re-initialize the primary W&B run with open metrics endpoints. - - The primary wandb init happens before rollout servers start (to obtain - ``wandb_run_id`` for secondary processes). This function is called - *after* servers are up so the router address is available for scraping - SGLang Prometheus metrics via the primary process's stats monitor. - """ - if not args.use_wandb or _is_offline_mode(args): - return - if getattr(args, "wandb_mode", None) == "disabled": - return - if router_addr is None: - return - wandb_run_id = getattr(args, "wandb_run_id", None) - if wandb_run_id is None: - return - - import sglang_router - - if "slime" not in sglang_router.__version__: - logger.warning( - "Only customized sglang_router from https://github.com/zhuzilin/sgl-router supports uploading metrics." - ) - return - - logger.info(f"Re-initializing primary W&B with SGLang metrics at {router_addr}.") - - wandb.finish() - - init_kwargs = { - "id": wandb_run_id, - "entity": args.wandb_team, - "project": args.wandb_project, - "resume": "allow", - "reinit": True, - "settings": wandb.Settings( - mode="shared", - x_primary=True, - x_stats_open_metrics_endpoints={ - "sgl_engine": f"{router_addr}/engine_metrics", - }, - x_stats_open_metrics_filters={ - "sgl_engine.*": {}, - }, - ), - } - - if args.wandb_dir: - os.makedirs(args.wandb_dir, exist_ok=True) - init_kwargs["dir"] = args.wandb_dir - - wandb.init(**init_kwargs) - _init_wandb_common() - - def _compute_config_for_logging(args): output = deepcopy(args.__dict__) @@ -148,7 +92,7 @@ def _compute_config_for_logging(args): # https://docs.wandb.ai/guides/track/log/distributed-training/#track-all-processes-to-a-single-run -def init_wandb_secondary(args): +def init_wandb_secondary(args, router_addr=None): wandb_run_id = getattr(args, "wandb_run_id", None) if wandb_run_id is None: return @@ -172,6 +116,17 @@ def init_wandb_secondary(args): x_update_finish_state=False, ) + if getattr(args, "sglang_enable_metrics", False) and router_addr is not None: + logger.info(f"Forward SGLang metrics at {router_addr} to WandB.") + settings_kwargs |= dict( + x_stats_open_metrics_endpoints={ + "sgl_engine": f"{router_addr}/engine_metrics", + }, + x_stats_open_metrics_filters={ + "sgl_engine.*": {}, + }, + ) + init_kwargs = { "id": wandb_run_id, "entity": args.wandb_team, diff --git a/slime_plugins/mbridge/deepseek_v32.py b/slime_plugins/mbridge/deepseek_v32.py index d45fd40fe6..d3a4ee7977 100644 --- a/slime_plugins/mbridge/deepseek_v32.py +++ b/slime_plugins/mbridge/deepseek_v32.py @@ -6,15 +6,6 @@ @register_model("deepseek_v32") class DeepseekV32Bridge(DeepseekV3Bridge): - - def __init__(self, hf_config, **kwargs): - # transformers 5.x stores rope_theta inside rope_parameters dict, - # but DeepseekV3Bridge._build_config() expects hf_config.rope_theta directly. - if not hasattr(hf_config, "rope_theta"): - rope_params = getattr(hf_config, "rope_parameters", None) or {} - hf_config.rope_theta = rope_params.get("rope_theta", 1000000) - super().__init__(hf_config, **kwargs) - _DSA_ATTENTION_MAPPING = { "self_attention.wq_b.weight": ["model.layers.{layer_number}.self_attn.indexer.wq_b.weight"], "self_attention.wk.weight": ["model.layers.{layer_number}.self_attn.indexer.wk.weight"], diff --git a/slime_plugins/mbridge/glm4moe_lite.py b/slime_plugins/mbridge/glm4moe_lite.py index ceaa8d86e0..8306d281ae 100644 --- a/slime_plugins/mbridge/glm4moe_lite.py +++ b/slime_plugins/mbridge/glm4moe_lite.py @@ -1,76 +1,7 @@ -import torch from mbridge.core import register_model -from mbridge.core.safetensor_io import SafeTensorIO from mbridge.models import DeepseekV3Bridge @register_model("glm4_moe_lite") class GLM4MoELiteBridge(DeepseekV3Bridge): - """ - Bridge for GLM-4.7-Flash (glm4_moe_lite) models. - - Extends DeepseekV3Bridge with: - - Dynamic MTP layer indexing (parent hardcodes layer 61 for DeepSeek V3) - - Standard bf16 safetensor loading (parent uses FP8 dequant for DeepSeek V3) - """ - - def __init__(self, hf_config, **kwargs): - # Patch rope_theta: GLM-4.7-Flash stores it in rope_parameters dict, - # but DeepseekV3Bridge._build_config() expects hf_config.rope_theta directly. - if not hasattr(hf_config, "rope_theta"): - rope_params = getattr(hf_config, "rope_parameters", None) or {} - hf_config.rope_theta = rope_params.get("rope_theta", 1000000) - super().__init__(hf_config, **kwargs) - # Override the shared state dict mapping with dynamic layer index. - # DeepseekV3Bridge hardcodes layer 61; GLM-4.7-Flash uses num_hidden_layers (47). - n = hf_config.num_hidden_layers - if getattr(hf_config, "num_nextn_predict_layers", 0) and n: - self._SHARED_STATE_DICT_MAPPING = { - "embedding.word_embeddings.weight": [ - "model.embed_tokens.weight", - f"model.layers.{n}.embed_tokens.weight", - ], - "output_layer.weight": [ - "lm_head.weight", - f"model.layers.{n}.shared_head.head.weight", - ], - } - - def _get_safetensor_io(self, weights_path: str): - """Use standard SafeTensorIO — GLM-4.7-Flash ships bf16 safetensors, not FP8.""" - return SafeTensorIO(self._get_actual_hf_path(weights_path)) - - def _weight_to_hf_format( - self, mcore_weights_name: str, mcore_weights: torch.Tensor - ) -> tuple[list[str], list[torch.Tensor]]: - """Handle shared embedding/output weights for MTP with dynamic layer count.""" - if ( - self.config.mtp_num_layers is not None - and self.config.mtp_num_layers >= 1 - and mcore_weights_name in self._SHARED_STATE_DICT_MAPPING - ): - hf_names = self._SHARED_STATE_DICT_MAPPING[mcore_weights_name] - return hf_names, [mcore_weights] * len(hf_names) - # Skip DeepseekV3Bridge's _weight_to_hf_format (hardcoded 61) and go to Bridge base - return super(DeepseekV3Bridge, self)._weight_to_hf_format(mcore_weights_name, mcore_weights) - - def _convert_mtp_param(self, name: str) -> list[str]: - """Convert MTP parameter names with dynamic layer count (not hardcoded 61).""" - assert self.config.mtp_num_layers == 1, "only support one mtp layer for now" - n = self.config.num_layers - direct_name_mapping = { - "mtp.layers.0.enorm.weight": f"model.layers.{n}.enorm.weight", - "mtp.layers.0.hnorm.weight": f"model.layers.{n}.hnorm.weight", - "mtp.layers.0.eh_proj.weight": f"model.layers.{n}.eh_proj.weight", - "mtp.layers.0.final_layernorm.weight": f"model.layers.{n}.shared_head.norm.weight", - } - if name in direct_name_mapping: - return [direct_name_mapping[name]] - assert "mtp.layers.0.transformer_layer" in name, f"mtp not found in {name}" - proxy_name = name.replace("mtp.layers.0.transformer_layer", f"decoder.layers.{n}") - if "self_attention" in proxy_name or "input_layernorm.weight" in proxy_name: - return self._weight_name_mapping_attention(proxy_name) - elif "mlp" in proxy_name: - return self._weight_name_mapping_mlp(proxy_name) - else: - raise NotImplementedError(f"Unsupported MTP parameter name: {name}") + pass diff --git a/slime_plugins/mbridge/qwen3_5.py b/slime_plugins/mbridge/qwen3_5.py index d01094ecc9..670227888b 100644 --- a/slime_plugins/mbridge/qwen3_5.py +++ b/slime_plugins/mbridge/qwen3_5.py @@ -1,5 +1,3 @@ -import inspect - import torch from megatron.core.models.gpt.gpt_layer_specs import get_gpt_mtp_block_spec @@ -117,44 +115,12 @@ def _get_text_config(self): return self.hf_config.text_config return self.hf_config - def _adjust_mapping_for_shared_weights(self): - text_config = self._get_text_config() - tie_word_embeddings = getattr(text_config, "tie_word_embeddings", False) or getattr( - self.hf_config, "tie_word_embeddings", False - ) - if tie_word_embeddings: - self._DIRECT_MAPPING = dict(self._DIRECT_MAPPING) - self._DIRECT_MAPPING["output_layer.weight"] = "model.language_model.embed_tokens.weight" - - def _supports_transformer_config_kwarg(self, kwarg_name: str) -> bool: - """Check whether the current TransformerConfig accepts a given kwarg.""" - transformer_config_class = getattr(self, "TransformerConfigClass", None) - if transformer_config_class is None: - return True - - dataclass_fields = getattr(transformer_config_class, "__dataclass_fields__", None) - if dataclass_fields is not None: - return kwarg_name in dataclass_fields - - try: - signature = inspect.signature(transformer_config_class) - except (TypeError, ValueError): - return True - return kwarg_name in signature.parameters - - def _get_transformer_layer_spec(self, vp_stage=None): - transformer_layer_spec = super()._get_transformer_layer_spec(vp_stage) - self._last_transformer_layer_spec = transformer_layer_spec - return transformer_layer_spec - def _get_gptmodel_args(self) -> dict: """Override to add MTP block spec if needed.""" ret = super()._get_gptmodel_args() text_config = self._get_text_config() if getattr(text_config, "mtp_num_hidden_layers", None) is not None: - transformer_layer_spec = getattr(self, "_last_transformer_layer_spec", None) - if transformer_layer_spec is None: - transformer_layer_spec = self._get_transformer_layer_spec() + transformer_layer_spec = self.config mtp_block_spec = get_gpt_mtp_block_spec(self.config, transformer_layer_spec, use_transformer_engine=True) ret["mtp_block_spec"] = mtp_block_spec return ret @@ -180,25 +146,6 @@ def _weight_name_mapping_mlp(self, name: str) -> list[str]: raise NotImplementedError(f"Unsupported parameter name: {name}") return convert_names - def _weight_name_mapping_mtp_mlp(self, name: str) -> list[str]: - """Handle MTP MLP mappings, keeping per-expert tensors unfused for MoE layers.""" - layer_number = name.split(".")[2] - mapping = self._MTP_MLP_MAPPING if "mlp.experts.linear_fc" in name else self._MLP_MAPPING - convert_names = [] - for keyword, mapping_names in mapping.items(): - if keyword in name: - if "{expert_id}" in mapping_names[0]: - expert_id = name.split("weight")[-1] - convert_names.extend( - [x.format(layer_number=layer_number, expert_id=expert_id) for x in mapping_names] - ) - else: - convert_names.extend([x.format(layer_number=layer_number) for x in mapping_names]) - break - if len(convert_names) == 0: - raise NotImplementedError(f"Unsupported parameter name: {name}") - return convert_names - def _weight_name_mapping_mcore_to_hf(self, mcore_weights_name: str) -> list[str]: """Override to handle MTP layer mappings.""" if "mtp" in mcore_weights_name: @@ -232,7 +179,7 @@ def _convert_mtp_param(self, name: str) -> list[str]: if "self_attention" in proxy_name or "input_layernorm.weight" in proxy_name: convert_names = super()._weight_name_mapping_attention(proxy_name) elif "mlp" in proxy_name or "pre_mlp_layernorm" in proxy_name: - convert_names = self._weight_name_mapping_mtp_mlp(proxy_name) + convert_names = super()._weight_name_mapping_mlp(proxy_name) else: raise NotImplementedError(f"Unsupported transformer component in MTP: {name}") @@ -286,28 +233,23 @@ def _weight_to_mcore_format( if "mlp.experts.linear_fc" in mcore_weights_name and len(hf_weights) == 1: w = hf_weights[0] if w.dim() == 3: - # Extract local expert_id from name like "...linear_fc1.weight42" - local_expert_id = int(mcore_weights_name.split("weight")[-1]) - # When using Expert Parallelism (EP), the local expert_id is relative - # to this EP rank. We need to convert to global expert_id to index - # into the full HF fused tensor [num_experts, ...]. - from megatron.core import mpu - - ep_size = mpu.get_expert_model_parallel_world_size() - if ep_size > 1: - ep_rank = mpu.get_expert_model_parallel_rank() - num_local_experts = w.shape[0] // ep_size - global_expert_id = ep_rank * num_local_experts + local_expert_id - else: - global_expert_id = local_expert_id - expert_w = w[global_expert_id] # (out_features, in_features) + # Extract expert_id from name like "...linear_fc1.weight42" + expert_id = int(mcore_weights_name.split("weight")[-1]) + expert_w = w[expert_id] # (out_features, in_features) return expert_w.contiguous() - return super()._weight_to_mcore_format(mcore_weights_name, hf_weights) + weight = super()._weight_to_mcore_format(mcore_weights_name, hf_weights) + if mcore_weights_name.endswith("eh_proj.weight"): + first_half, second_half = weight.chunk(2, dim=1) + weight = torch.cat([second_half, first_half], dim=1) + return weight def _weight_to_hf_format( self, mcore_weights_name: str, mcore_weights: torch.Tensor ) -> tuple[list[str], list[torch.Tensor]]: + if mcore_weights_name.endswith("eh_proj.weight"): + first_half, second_half = mcore_weights.chunk(2, dim=1) + mcore_weights = torch.cat([second_half, first_half], dim=1) return super()._weight_to_hf_format(mcore_weights_name, mcore_weights) def _build_config(self): @@ -331,9 +273,6 @@ def _build_config(self): **mtp_args, ) - if self._supports_transformer_config_kwarg("use_gated_attention"): - base_kwargs["use_gated_attention"] = True - # Handle MoE-specific config if hasattr(text_config, "num_experts"): base_kwargs.update( diff --git a/slime_plugins/megatron_bridge/__init__.py b/slime_plugins/megatron_bridge/__init__.py index a0425d491b..e69de29bb2 100644 --- a/slime_plugins/megatron_bridge/__init__.py +++ b/slime_plugins/megatron_bridge/__init__.py @@ -1 +0,0 @@ -import slime_plugins.megatron_bridge.glm4v_moe # noqa: F401 # register GLM-4.6V bridge diff --git a/slime_plugins/megatron_bridge/glm4v_moe.py b/slime_plugins/megatron_bridge/glm4v_moe.py deleted file mode 100644 index 785276e976..0000000000 --- a/slime_plugins/megatron_bridge/glm4v_moe.py +++ /dev/null @@ -1,711 +0,0 @@ -""" -GLM-4.6V (glm4v_moe) bridge for megatron.bridge. - -Registers `Glm4vMoeForConditionalGeneration` so that `AutoBridge.from_hf_pretrained` -recognises GLM-4.6V checkpoints and can provide a Megatron-compatible VL model + -weight mappings. - -Architecture: - HF vision encoder (Glm4vMoeVisionModel, replicated on first PP stage) - + Megatron GPTModel (MoE language model, standard M-RoPE) -""" - -from __future__ import annotations - -import itertools -import logging -from copy import deepcopy -from dataclasses import dataclass, field - -import torch -from megatron.bridge.models.conversion.mapping_registry import MegatronMappingRegistry -from megatron.bridge.models.conversion.model_bridge import MegatronModelBridge -from megatron.bridge.models.conversion.param_mapping import AutoMapping, GatedMLPMapping, QKVMapping, ReplicatedMapping -from megatron.bridge.models.qwen.qwen_provider import Qwen3MoEModelProvider -from megatron.bridge.utils.common_utils import hook_hf_module_setattr_for_tp_grad_sync -from megatron.core import parallel_state, tensor_parallel -from megatron.core.models.gpt import GPTModel as MCoreGPTModel -from megatron.core.models.gpt.gpt_layer_specs import get_gpt_decoder_block_spec -from megatron.core.packed_seq_params import PackedSeqParams -from megatron.core.transformer.module import MegatronModule - -logger = logging.getLogger(__name__) - - -# --------------------------------------------------------------------------- -# THD ↔ BSHD helpers (cf. Qwen3VL bridge) -# --------------------------------------------------------------------------- -def _thd_to_bshd(packed: torch.Tensor, cu_seqlens: torch.Tensor) -> torch.Tensor: - """Unpack THD-format [1, T, ...] to BSHD [bs, max_seq, ...] using cu_seqlens.""" - seqlens = cu_seqlens[1:] - cu_seqlens[:-1] - max_seq = seqlens.max().item() - bs = len(cu_seqlens) - 1 - out = packed.new_zeros(bs, max_seq, *packed.shape[2:]) - for i, sl in enumerate(seqlens): - out[i, :sl] = packed[0, cu_seqlens[i] : cu_seqlens[i] + sl] - return out - - -def _bshd_to_thd(unpacked: torch.Tensor, cu_seqlens: torch.Tensor) -> torch.Tensor: - """Pack BSHD [bs, max_seq, ...] back to THD [1, T, ...].""" - seqlens = cu_seqlens[1:] - cu_seqlens[:-1] - total = cu_seqlens[-1].item() - out = unpacked.new_zeros(1, total, *unpacked.shape[2:]) - for i, sl in enumerate(seqlens): - out[0, cu_seqlens[i] : cu_seqlens[i] + sl] = unpacked[i, :sl] - return out - - -def _gather_input_ids_from_cp( - input_ids: torch.Tensor, - cu_seqlens: torch.Tensor, -) -> torch.Tensor: - """Reconstruct full (global) input_ids from zigzag CP chunks. - - With zigzag CP, each CP rank r holds chunks [r] and [2*cp_size-1-r] for - each sequence. This function all-gathers across CP ranks and reassembles - the original token order so that position-ID computation sees the full - sequence. - - Args: - input_ids: Local input_ids in THD format [1, T_local]. - cu_seqlens: **Global** cumulative sequence lengths. - - Returns: - Full input_ids in THD format [1, T_global]. - """ - cp_size = parallel_state.get_context_parallel_world_size() - if cp_size <= 1: - return input_ids - - # all-gather local input_ids across CP ranks → list of [1, T_local] per rank - gathered = torch.distributed.nn.all_gather( - input_ids, group=parallel_state.get_context_parallel_group() - ) # list of cp_size tensors, each [1, T_local] - - local_cu_seqlens = cu_seqlens // cp_size - num_seqs = len(cu_seqlens) - 1 - whole_list = [] - for i in range(num_seqs): - seqlen = (cu_seqlens[i + 1] - cu_seqlens[i]).item() - chunk_size = seqlen // 2 // cp_size - # First half: rank 0 chunk, rank 1 chunk, ..., rank cp_size-1 chunk - whole_list.extend( - gathered[cp_rank][0, local_cu_seqlens[i] : local_cu_seqlens[i] + chunk_size] for cp_rank in range(cp_size) - ) - # Second half: rank cp_size-1 chunk, ..., rank 0 chunk (reversed) - whole_list.extend( - [ - gathered[cp_rank][0, local_cu_seqlens[i] + chunk_size : local_cu_seqlens[i + 1]] - for cp_rank in range(cp_size) - ][::-1] - ) - return torch.cat(whole_list).unsqueeze(0) # [1, T_global] - - -def _select_local_image_embeds( - full_input_ids: torch.Tensor, - cu_seqlens: torch.Tensor, - image_token_id: int, - image_embeds: torch.Tensor, - cp_rank: int, - cp_size: int, -) -> torch.Tensor: - """Select the subset of *image_embeds* that falls in this CP rank's chunk. - - With zigzag CP, each rank holds specific chunks of each packed sequence. - The vision encoder produces embeddings for ALL image tokens (ordered by - position in the full sequence). This function returns only the embeddings - whose positions land in the local chunk. - - Args: - full_input_ids: Reconstructed full input_ids [1, T_global]. - cu_seqlens: **Global** cumulative sequence lengths. - image_token_id: Token id for image placeholder tokens. - image_embeds: Vision embeddings [N_total, hidden] for all image tokens. - cp_rank: This rank's position in the CP group. - cp_size: Total number of CP ranks. - - Returns: - Subset of image_embeds [N_local, hidden] for this rank's image tokens. - """ - device = full_input_ids.device - full_flat = full_input_ids[0] # [T_global] - full_mask = full_flat == image_token_id - - # Build boolean mask over T_global marking this rank's positions - T_global = full_flat.shape[0] - rank_mask = torch.zeros(T_global, dtype=torch.bool, device=device) - - num_seqs = len(cu_seqlens) - 1 - for i in range(num_seqs): - seq_start = cu_seqlens[i].item() - seqlen = (cu_seqlens[i + 1] - cu_seqlens[i]).item() - chunk_size = seqlen // (2 * cp_size) - - # First-half chunk for this rank - first_start = seq_start + cp_rank * chunk_size - rank_mask[first_start : first_start + chunk_size] = True - - # Second-half chunk for this rank (reversed order) - second_end = seq_start + seqlen - cp_rank * chunk_size - rank_mask[second_end - chunk_size : second_end] = True - - # Image tokens that belong to this rank - local_image_mask = full_mask & rank_mask - n_local = local_image_mask.sum().item() - - if n_local == 0: - return image_embeds[:0] # empty slice preserving hidden dim - if n_local == image_embeds.shape[0]: - return image_embeds # all image tokens are on this rank - - # Map positions to indices in image_embeds via cumulative sum - image_cumsum = full_mask.long().cumsum(0) # 1-indexed - local_positions = local_image_mask.nonzero(as_tuple=True)[0] - embed_indices = image_cumsum[local_positions] - 1 - return image_embeds[embed_indices] - - -# --------------------------------------------------------------------------- -# Megatron VL Model -# --------------------------------------------------------------------------- -class Glm4vMoeVLModel(MegatronModule): - """GLM-4.6V vision-language model for Megatron training. - - Wraps an HF vision encoder (only on first PP stage) together with a - standard Megatron Core GPTModel configured for M-RoPE. - """ - - def __init__( - self, - language_transformer_config, - language_transformer_layer_spec, - hf_vision_config, - parallel_output: bool = True, - pre_process: bool = True, - post_process: bool = True, - ) -> None: - super().__init__(config=language_transformer_config) - - self.pre_process = pre_process - self.post_process = post_process - self.image_token_id = language_transformer_config.image_token_id - self.video_token_id = language_transformer_config.video_token_id - self.spatial_merge_size = language_transformer_config.spatial_merge_size - - self.share_embeddings_and_output_weights = False - - # Vision encoder -- only on the first pipeline stage - self.vision_model = None - if self.pre_process: - from transformers.models.glm4v_moe.modeling_glm4v_moe import Glm4vMoeVisionModel - - self.vision_model = Glm4vMoeVisionModel._from_config(hf_vision_config) - # Freeze vision encoder — not trained during RL - self.vision_model.requires_grad_(False) - self.vision_model.eval() - hook_hf_module_setattr_for_tp_grad_sync(self.vision_model) - if torch.cuda.is_available(): - self.vision_model = self.vision_model.to("cuda") - - # Language model -- standard Megatron GPT with M-RoPE - self.language_model = MCoreGPTModel( - config=language_transformer_config, - transformer_layer_spec=language_transformer_layer_spec, - vocab_size=language_transformer_config.vocab_size, - max_sequence_length=language_transformer_config.language_max_sequence_length, - parallel_output=parallel_output, - position_embedding_type="mrope", - rotary_percent=language_transformer_config.rotary_percent, - pre_process=self.pre_process, - post_process=self.post_process, - rotary_base=language_transformer_config.rotary_base, - fp16_lm_cross_entropy=language_transformer_config.fp16_lm_cross_entropy, - share_embeddings_and_output_weights=language_transformer_config.share_embeddings_and_output_weights, - scatter_embedding_sequence_parallel=False, - ) - - self.share_embeddings_and_output_weights = self.language_model.share_embeddings_and_output_weights - - # -- helpers required by Megatron pipeline engine ----------------------- - - def shared_embedding_or_output_weight(self): - return self.language_model.shared_embedding_or_output_weight() - - def set_input_tensor(self, input_tensor): - if not isinstance(input_tensor, list): - input_tensor = [input_tensor] - assert len(input_tensor) == 1 - if self.pre_process: - self.encoder_hidden_state = input_tensor[0] - else: - self.language_model.set_input_tensor(input_tensor[0]) - - # -- vision helpers ----------------------------------------------------- - - def _get_image_features(self, pixel_values, image_grid_thw): - """Run HF vision encoder and return flat image embeddings.""" - pixel_values = pixel_values.to(dtype=self.vision_model.dtype) - with torch.no_grad(): - return self.vision_model(pixel_values, grid_thw=image_grid_thw) - - # -- M-RoPE position IDs ----------------------------------------------- - - @staticmethod - def _get_vision_position_ids( - start_position: int, - grid_thw, - temp_merge_size: int, - spatial_merge_size: int, - device, - ) -> torch.Tensor: - """Compute 3D positions for one image/video (ported from HF).""" - llm_grid_t = grid_thw[0].item() // temp_merge_size - llm_grid_h = grid_thw[1].item() // spatial_merge_size - llm_grid_w = grid_thw[2].item() // spatial_merge_size - n_tokens = llm_grid_h * llm_grid_w * llm_grid_t - - pos_w = torch.arange(start_position, start_position + llm_grid_w, device=device) - pos_w = pos_w.repeat(llm_grid_h * llm_grid_t) - pos_h = torch.arange(start_position, start_position + llm_grid_h, device=device) - pos_h = pos_h.repeat_interleave(llm_grid_w * llm_grid_t) - pos_t = torch.full((n_tokens,), start_position, device=device, dtype=torch.long) - return torch.stack([pos_t, pos_h, pos_w], dim=0) # [3, n_tokens] - - def _compute_mrope_position_ids( - self, - input_ids_bshd: torch.Tensor, - image_grid_thw: torch.Tensor | None, - ) -> torch.Tensor: - """Compute 3D M-RoPE position IDs from input_ids in [bs, seq] format. - - Image regions are detected by looking for consecutive runs of - ``image_token_id`` in each sequence — no ``mm_token_type_ids`` needed. - """ - bs, seq_len = input_ids_bshd.shape - device = input_ids_bshd.device - spatial_merge_size = self.spatial_merge_size - - position_ids = torch.zeros(3, bs, seq_len, dtype=torch.long, device=device) - - if image_grid_thw is None or image_grid_thw.numel() == 0: - # Text-only: standard 1D positions replicated across 3 dims - pos = torch.arange(seq_len, device=device).unsqueeze(0).expand(bs, -1) - position_ids[0] = pos - position_ids[1] = pos - position_ids[2] = pos - return position_ids - - grid_iter = iter(image_grid_thw) - - for b in range(bs): - ids = input_ids_bshd[b] - is_image = ids == self.image_token_id - - # Find contiguous groups: text (0) vs image (1) - token_types = is_image.long() - groups = [] - for key, group in itertools.groupby(enumerate(token_types.tolist()), lambda x: x[1]): - g = list(group) - groups.append((key, g[0][0], g[-1][0] + 1)) - - current_pos = 0 - pos_list = [] - for modality, start, end in groups: - if modality == 0: - # Text tokens - n = end - start - pos_list.append(torch.arange(n, device=device).view(1, -1).expand(3, -1) + current_pos) - current_pos += n - else: - # Image tokens - grid_thw = next(grid_iter) - temp_merge_size = grid_thw[0] - vis_pos = self._get_vision_position_ids( - current_pos, - grid_thw, - temp_merge_size, - spatial_merge_size, - device, - ) - pos_list.append(vis_pos) - current_pos += max(grid_thw[1], grid_thw[2]) // spatial_merge_size - - all_pos = torch.cat(pos_list, dim=1) # [3, seq_for_this_sample] - position_ids[:, b, : all_pos.shape[1]] = all_pos - - return position_ids - - # -- forward ------------------------------------------------------------ - - def forward( - self, - input_ids: torch.Tensor, - position_ids: torch.Tensor = None, - attention_mask: torch.Tensor = None, - labels: torch.Tensor = None, - loss_mask: torch.Tensor = None, - inference_params=None, - packed_seq_params: PackedSeqParams = None, - extra_block_kwargs: dict = None, - # multimodal kwargs (unpacked from multimodal_train_inputs) - pixel_values: torch.Tensor = None, - image_grid_thw: torch.Tensor = None, - # unused VL kwargs that may come through - pixel_values_videos: torch.Tensor = None, - video_grid_thw: torch.Tensor = None, - mm_token_type_ids: torch.Tensor = None, - **kwargs, - ) -> torch.Tensor: - assert pixel_values_videos is None, "Video not supported yet" - assert inference_params is None, "Inference not supported" - - # -- Extract cu_seqlens and CP info early (needed for both vision scatter and M-RoPE) -- - cu_seqlens = None - if packed_seq_params is not None: - cu_seqlens = ( - packed_seq_params.cu_seqlens_q_padded - if packed_seq_params.cu_seqlens_q_padded is not None - else packed_seq_params.cu_seqlens_q - ) - cp_size = parallel_state.get_context_parallel_world_size() - full_input_ids = None # cached for reuse between vision scatter and M-RoPE - - combined_embeddings = None - - if self.pre_process: - # 1. Text embeddings from language model embedding layer - combined_embeddings = self.language_model.embedding( - input_ids=input_ids, - position_ids=None, - ).clone() # [seq, batch, hidden] - - # 2. Vision encoding + masked scatter - if pixel_values is not None and image_grid_thw is not None: - image_embeds = self._get_image_features(pixel_values, image_grid_thw) - image_embeds = image_embeds.to(combined_embeddings.device, combined_embeddings.dtype) - - # With CP > 1, input_ids is a local chunk but pixel_values - # cover ALL images. Select only the embeddings whose tokens - # land in this rank's zigzag portion. - if cp_size > 1 and cu_seqlens is not None: - full_input_ids = _gather_input_ids_from_cp(input_ids, cu_seqlens) - cp_rank = parallel_state.get_context_parallel_rank() - image_embeds = _select_local_image_embeds( - full_input_ids, - cu_seqlens, - self.image_token_id, - image_embeds, - cp_rank, - cp_size, - ) - - image_mask = (input_ids == self.image_token_id).contiguous() - # Scatter: [seq, bs, hidden] → [bs, seq, hidden] - combined_embeddings = combined_embeddings.transpose(0, 1).contiguous() - if image_mask.any(): - combined_embeddings[image_mask] = image_embeds - combined_embeddings = combined_embeddings.transpose(0, 1).contiguous() - - # Scatter to sequence-parallel region if needed - if self.config.sequence_parallel: - combined_embeddings = tensor_parallel.scatter_to_sequence_parallel_region(combined_embeddings) - combined_embeddings = combined_embeddings.contiguous() - - # 3. Compute M-RoPE position IDs - # position_ids must be available on ALL PP stages for rotary embeddings. - # On stage 0, compute from input_ids. Then broadcast to other stages. - pp_size = parallel_state.get_pipeline_model_parallel_world_size() - - if position_ids is None: - if self.pre_process: - # First PP stage: compute position_ids from input_ids. - # With CP > 1, input_ids is a local chunk; reconstruct full - # sequence so that _compute_mrope_position_ids sees all tokens - # (image token positions affect the M-RoPE IDs). - if cu_seqlens is not None: - if cp_size > 1: - if full_input_ids is None: - full_input_ids = _gather_input_ids_from_cp(input_ids, cu_seqlens) - else: - full_input_ids = input_ids - input_ids_bshd = _thd_to_bshd(full_input_ids, cu_seqlens) - pos_bshd = self._compute_mrope_position_ids(input_ids_bshd, image_grid_thw) - pos_packed = _bshd_to_thd(pos_bshd.permute(1, 2, 0), cu_seqlens) - position_ids = pos_packed.permute(2, 0, 1).contiguous() # [3, 1, T_global] - else: - position_ids = self._compute_mrope_position_ids(input_ids, image_grid_thw) - else: - # Non-first PP stage: allocate buffer with correct shape - if cu_seqlens is not None: - T = cu_seqlens[-1].item() - position_ids = torch.zeros(3, 1, T, dtype=torch.long, device=torch.cuda.current_device()) - else: - raise NotImplementedError( - "Non-THD position_ids broadcast not yet supported for non-first PP stages" - ) - - # Broadcast position_ids from first to all PP stages - if pp_size > 1: - src = parallel_state.get_pipeline_model_parallel_first_rank() - torch.distributed.broadcast( - position_ids, - src=src, - group=parallel_state.get_pipeline_model_parallel_group(), - ) - - # 4. Language model forward (pass decoder_input to skip re-embedding) - output = self.language_model( - input_ids=None, - position_ids=position_ids, - attention_mask=attention_mask, - decoder_input=combined_embeddings, - labels=labels, - loss_mask=loss_mask, - inference_params=inference_params, - packed_seq_params=packed_seq_params, - **(extra_block_kwargs or {}), - ) - - return output - - -# --------------------------------------------------------------------------- -# Model Provider (dataclass that doubles as TransformerConfig) -# --------------------------------------------------------------------------- -@dataclass -class Glm4vMoeVLModelProvider(Qwen3MoEModelProvider): - """Provider that creates Glm4vMoeVLModel. - - Inherits from Qwen3MoEModelProvider to reuse MoE + TransformerConfig infra. - Defined at module level (not inside a function) so that the class is - picklable -- megatron-bridge broadcasts config objects across PP ranks - via ``torch.distributed.broadcast_object_list`` which requires pickling. - """ - - # GLM-4.6V specific config - image_token_id: int = 151363 - video_token_id: int = 151364 - spatial_merge_size: int = 2 - - # Vision config (stored as HF config object) - hf_vision_config: object = None - hf_text_config: object = None - - # M-RoPE - position_embedding_type: str = "mrope" - mrope_section: list[int] = field(default_factory=lambda: [8, 12, 12]) - scatter_embedding_sequence_parallel: bool = False - - # Language model sequence length - language_max_sequence_length: int = 131072 - - def provide(self, pre_process=None, post_process=None, vp_stage=None): - """Create a Glm4vMoeVLModel instance.""" - - # Resolve PP stage flags - if pre_process is None: - pre_process = parallel_state.is_pipeline_first_stage(ignore_virtual=False, vp_stage=vp_stage) - if post_process is None: - post_process = parallel_state.is_pipeline_last_stage(ignore_virtual=False, vp_stage=vp_stage) - - # Build per-layer specs respecting moe_layer_freq (layer 0 = dense, rest = MoE) - transformer_layer_spec = get_gpt_decoder_block_spec( - config=self, - use_transformer_engine=True, - vp_stage=vp_stage, - ) - - model = Glm4vMoeVLModel( - language_transformer_config=self, - language_transformer_layer_spec=transformer_layer_spec, - hf_vision_config=self.hf_vision_config, - parallel_output=True, - pre_process=pre_process, - post_process=post_process, - ) - - return model - - -# --------------------------------------------------------------------------- -# Bridge -# --------------------------------------------------------------------------- -try: - from transformers import Glm4vMoeForConditionalGeneration as _Glm4vMoeHF -except ImportError: - _Glm4vMoeHF = "Glm4vMoeForConditionalGeneration" - - -@MegatronModelBridge.register_bridge(source=_Glm4vMoeHF, target=Glm4vMoeVLModel) -class Glm4vMoeBridge(MegatronModelBridge): - """Bridge between HuggingFace GLM-4.6V and the Megatron VL model.""" - - def provider_bridge(self, hf_pretrained): - """Create a Glm4vMoeVLModelProvider from HF config.""" - hf_config = hf_pretrained.config - text_config = hf_config.text_config - vision_config = deepcopy(hf_config.vision_config) - - model_dtype = self.dtype_from_hf(text_config, default=torch.bfloat16) - vision_config.torch_dtype = model_dtype - - ProviderClass = Glm4vMoeVLModelProvider - - rope_params = getattr(text_config, "rope_parameters", {}) or {} - mrope_section = rope_params.get("mrope_section", [8, 12, 12]) - rotary_base = rope_params.get("rope_theta", 500000) - partial_rotary_factor = rope_params.get("partial_rotary_factor", 0.5) - - # Determine MoE layer frequency - first_k_dense = getattr(text_config, "first_k_dense_replace", 1) - num_layers = text_config.num_hidden_layers - # Build moe_layer_freq list: first_k_dense dense layers + rest MoE - moe_layer_freq_list = [0] * first_k_dense + [1] * (num_layers - first_k_dense) - - # Shared expert intermediate size - n_shared = getattr(text_config, "n_shared_experts", 1) - moe_ffn = getattr(text_config, "moe_intermediate_size", 1408) - shared_expert_intermediate = moe_ffn * n_shared - - provider = ProviderClass( - # Language model configuration - num_layers=num_layers, - hidden_size=text_config.hidden_size, - ffn_hidden_size=text_config.intermediate_size, - num_attention_heads=text_config.num_attention_heads, - num_query_groups=text_config.num_key_value_heads, - kv_channels=getattr(text_config, "head_dim", 128), - init_method_std=text_config.initializer_range, - layernorm_epsilon=text_config.rms_norm_eps, - gated_linear_unit=True, - make_vocab_size_divisible_by=self.make_vocab_size_divisible_by(text_config.vocab_size), - rotary_base=rotary_base, - rotary_percent=partial_rotary_factor, - share_embeddings_and_output_weights=getattr(text_config, "tie_word_embeddings", False), - vocab_size=text_config.vocab_size, - seq_length=text_config.max_position_embeddings, - fp16=(model_dtype == torch.float16), - bf16=(model_dtype == torch.bfloat16), - params_dtype=model_dtype, - # MoE configuration - num_moe_experts=getattr(text_config, "n_routed_experts", 128), - moe_router_topk=getattr(text_config, "num_experts_per_tok", 8), - moe_ffn_hidden_size=moe_ffn, - moe_shared_expert_intermediate_size=shared_expert_intermediate, - moe_layer_freq=moe_layer_freq_list, - moe_grouped_gemm=True, - moe_router_load_balancing_type="seq_aux_loss", - moe_aux_loss_coeff=0, - moe_router_score_function="sigmoid", - moe_router_pre_softmax=True, - moe_router_enable_expert_bias=True, - moe_router_dtype="fp32", - # Attention - add_qkv_bias=getattr(text_config, "attention_bias", True), - qk_layernorm=getattr(text_config, "qk_layernorm", False) or getattr(text_config, "use_qk_norm", False), - # M-RoPE - mrope_section=mrope_section, - position_embedding_type="mrope", - scatter_embedding_sequence_parallel=False, - # Vision - hf_vision_config=vision_config, - hf_text_config=text_config, - image_token_id=getattr(hf_config, "image_token_id", 151363), - video_token_id=getattr(hf_config, "video_token_id", 151364), - spatial_merge_size=getattr(hf_config.vision_config, "spatial_merge_size", 2), - language_max_sequence_length=text_config.max_position_embeddings, - ) - - return provider - - def mapping_registry(self) -> MegatronMappingRegistry: - """Weight mappings from HF GLM-4.6V to Megatron format. - - Follows GLM-4.5 bridge pattern with language_model prefix for VL model. - Layer 0 is dense, layers 1-45 are MoE. The mapping framework handles - missing keys gracefully (warnings for non-existent params). - """ - param_mappings = { - # Embeddings and output - "language_model.embedding.word_embeddings.weight": "model.language_model.embed_tokens.weight", - "language_model.output_layer.weight": "lm_head.weight", - "language_model.decoder.final_layernorm.weight": "model.language_model.norm.weight", - # Attention: input layernorm (fused with TE) - "language_model.decoder.layers.*.self_attention.linear_qkv.layer_norm_weight": "model.language_model.layers.*.input_layernorm.weight", - # Attention: separate input layernorm (quantization layer spec) - "language_model.decoder.layers.*.input_layernorm.weight": "model.language_model.layers.*.input_layernorm.weight", - # Attention output - "language_model.decoder.layers.*.self_attention.linear_proj.weight": "model.language_model.layers.*.self_attn.o_proj.weight", - # Post-attention layernorm: - # MoE layers → pre_mlp_layernorm, Dense layer → linear_fc1.layer_norm_weight (fused) - "language_model.decoder.layers.*.pre_mlp_layernorm.weight": "model.language_model.layers.*.post_attention_layernorm.weight", - "language_model.decoder.layers.*.mlp.linear_fc1.layer_norm_weight": "model.language_model.layers.*.post_attention_layernorm.weight", - # Dense MLP output (layer 0) - "language_model.decoder.layers.*.mlp.linear_fc2.weight": "model.language_model.layers.*.mlp.down_proj.weight", - # MoE router - "language_model.decoder.layers.*.mlp.router.weight": "model.language_model.layers.*.mlp.gate.weight", - "language_model.decoder.layers.*.mlp.router.expert_bias": "model.language_model.layers.*.mlp.gate.e_score_correction_bias", - # MoE expert output (TEGroupedMLP format: weight* suffix) - "language_model.decoder.layers.*.mlp.experts.linear_fc2.weight*": "model.language_model.layers.*.mlp.experts.*.down_proj.weight", - # MoE shared expert output - "language_model.decoder.layers.*.mlp.shared_experts.linear_fc2.weight": "model.language_model.layers.*.mlp.shared_experts.down_proj.weight", - } - - mapping_list = [] - for megatron_param, hf_param in param_mappings.items(): - mapping_list.append(AutoMapping(megatron_param=megatron_param, hf_param=hf_param)) - - mapping_list.extend( - [ - # Vision model weights — replicated directly - ReplicatedMapping( - megatron_param="vision_model.**", - hf_param="model.visual.**", - ), - # QKV weight and bias - QKVMapping( - megatron_param="language_model.decoder.layers.*.self_attention.linear_qkv.weight", - q="model.language_model.layers.*.self_attn.q_proj.weight", - k="model.language_model.layers.*.self_attn.k_proj.weight", - v="model.language_model.layers.*.self_attn.v_proj.weight", - ), - QKVMapping( - megatron_param="language_model.decoder.layers.*.self_attention.linear_qkv.bias", - q="model.language_model.layers.*.self_attn.q_proj.bias", - k="model.language_model.layers.*.self_attn.k_proj.bias", - v="model.language_model.layers.*.self_attn.v_proj.bias", - ), - # Dense MLP gate+up (layer 0) - GatedMLPMapping( - megatron_param="language_model.decoder.layers.*.mlp.linear_fc1.weight", - gate="model.language_model.layers.*.mlp.gate_proj.weight", - up="model.language_model.layers.*.mlp.up_proj.weight", - ), - # MoE expert gate+up (TEGroupedMLP format) - GatedMLPMapping( - megatron_param="language_model.decoder.layers.*.mlp.experts.linear_fc1.weight*", - gate="model.language_model.layers.*.mlp.experts.*.gate_proj.weight", - up="model.language_model.layers.*.mlp.experts.*.up_proj.weight", - ), - # MoE expert gate+up (SequentialMLP format, for quantization) - GatedMLPMapping( - megatron_param="language_model.decoder.layers.*.mlp.experts.local_experts.*.linear_fc1.weight", - gate="model.language_model.layers.*.mlp.experts.*.gate_proj.weight", - up="model.language_model.layers.*.mlp.experts.*.up_proj.weight", - ), - AutoMapping( - megatron_param="language_model.decoder.layers.*.mlp.experts.local_experts.*.linear_fc2.weight", - hf_param="model.language_model.layers.*.mlp.experts.*.down_proj.weight", - ), - # MoE shared expert gate+up - GatedMLPMapping( - megatron_param="language_model.decoder.layers.*.mlp.shared_experts.linear_fc1.weight", - gate="model.language_model.layers.*.mlp.shared_experts.gate_proj.weight", - up="model.language_model.layers.*.mlp.shared_experts.up_proj.weight", - ), - ] - ) - - return MegatronMappingRegistry(*mapping_list) diff --git a/slime_plugins/models/hf_attention.py b/slime_plugins/models/hf_attention.py index d5cf619724..c353ae7b29 100644 --- a/slime_plugins/models/hf_attention.py +++ b/slime_plugins/models/hf_attention.py @@ -1,5 +1,3 @@ -import json -import os from abc import ABC, abstractmethod import torch @@ -8,56 +6,7 @@ from megatron.core.inference.contexts import BaseInferenceContext from megatron.core.packed_seq_params import PackedSeqParams from megatron.core.transformer.module import MegatronModule - - -def _load_hf_config(checkpoint_path): - """Load HF config with fallback for unsupported model types.""" - try: - from transformers import AutoConfig - - return AutoConfig.from_pretrained(checkpoint_path, trust_remote_code=True) - except (ValueError, KeyError): - config_path = os.path.join(checkpoint_path, "config.json") - with open(config_path) as f: - config_dict = json.load(f) - - _DTYPE_MAP = {"bfloat16": torch.bfloat16, "float16": torch.float16, "float32": torch.float32} - - def _fix_dtype(d): - if "torch_dtype" in d: - d["torch_dtype"] = _DTYPE_MAP.get(d["torch_dtype"], d["torch_dtype"]) - if "dtype" in d: - d["dtype"] = _DTYPE_MAP.get(d["dtype"], d["dtype"]) - - _fix_dtype(config_dict) - ns = type("HFConfig", (), config_dict)() - if "text_config" in config_dict: - _fix_dtype(config_dict["text_config"]) - ns.text_config = type("TextConfig", (), config_dict["text_config"])() - return ns - - -class _AllGatherForDuplicatedComputation(torch.autograd.Function): - """All-gather whose backward just returns the local gradient slice (no reduce). - - Use this instead of ``dist.nn.all_gather`` when the computation after the - gather is *duplicated* across ranks (same weights, same full input → - identical gradients). The default ``all_gather`` backward performs a - reduce-scatter, which incorrectly sums ``world_size`` identical copies of - the gradient. - """ - - @staticmethod - def forward(ctx, x, group): - ctx.group = group - ctx.rank = dist.get_rank(group=group) - out = [torch.empty_like(x) for _ in range(dist.get_world_size(group=group))] - dist.all_gather(out, x.contiguous(), group=group) - return tuple(out) - - @staticmethod - def backward(ctx, *grads): - return grads[ctx.rank], None +from transformers import AutoConfig class HuggingfaceAttention(MegatronModule, ABC): @@ -81,7 +30,7 @@ def __init__( # Note that megatron layer_number starts at 1 self.layer_number = layer_number self.hf_layer_idx = layer_number - 1 - self.hf_config = _load_hf_config(args.hf_checkpoint) + self.hf_config = AutoConfig.from_pretrained(args.hf_checkpoint, trust_remote_code=True) # hardcode to fa2 at the moment. self.hf_config._attn_implementation = "flash_attention_2" @@ -105,22 +54,15 @@ def forward( cu_seqlens = packed_seq_params.cu_seqlens_q if self.args.sequence_parallel: - # tensor_parallel_output_grad=False: the linear attention after this - # gather is NOT TP-sharded (duplicated on all ranks), so the backward - # should split (not reduce-scatter) to avoid inflating gradients by TP. hidden_states = tensor_parallel.gather_from_sequence_parallel_region( - hidden_states, - tensor_parallel_output_grad=False, - group=mpu.get_tensor_model_parallel_group(), + hidden_states, group=mpu.get_tensor_model_parallel_group() ) if mpu.get_context_parallel_world_size() > 1: cp_size = mpu.get_context_parallel_world_size() - # Use custom all-gather whose backward returns local gradient - # instead of reduce-scatter, since the computation is duplicated. - hidden_states_list = _AllGatherForDuplicatedComputation.apply( + hidden_states_list = dist.nn.all_gather( hidden_states, - mpu.get_context_parallel_group(), + group=mpu.get_context_parallel_group(), ) # TODO: preprocess this for each batch to prevent tolist in the training step diff --git a/slime_plugins/models/qwen3_5.py b/slime_plugins/models/qwen3_5.py index eb8cff0a31..33ff1a45b5 100644 --- a/slime_plugins/models/qwen3_5.py +++ b/slime_plugins/models/qwen3_5.py @@ -1,4 +1,6 @@ import copy +import json +import os import torch import torch.nn as nn @@ -9,13 +11,32 @@ from megatron.core.transformer.transformer_layer import get_transformer_layer_offset from transformers.activations import ACT2FN + +def _load_hf_config(checkpoint_path): + """Load HF config, handling cases where transformers doesn't know the model type.""" + try: + from transformers import AutoConfig + + return AutoConfig.from_pretrained(checkpoint_path, trust_remote_code=True) + except (ValueError, KeyError): + # Fallback: load config.json directly as a SimpleNamespace + config_path = os.path.join(checkpoint_path, "config.json") + with open(config_path) as f: + config_dict = json.load(f) + # If there's a text_config, also make it a namespace + ns = type("HFConfig", (), config_dict)() + if "text_config" in config_dict: + ns.text_config = type("TextConfig", (), config_dict["text_config"])() + return ns + + try: from fla.modules import FusedRMSNormGated, ShortConvolution from fla.ops.gated_delta_rule import chunk_gated_delta_rule except ImportError: pass -from .hf_attention import HuggingfaceAttention, _load_hf_config +from .hf_attention import HuggingfaceAttention def _get_text_config(hf_config): @@ -76,7 +97,7 @@ def __init__(self, config, layer_idx: int): eps=self.layer_norm_epsilon, activation=self.activation, device=torch.cuda.current_device(), - dtype=config.dtype if config.dtype is not None else torch.get_default_dtype(), + dtype=config.dtype if config.dtype is not None else torch.get_current_dtype(), ) self.out_proj = nn.Linear(self.value_dim, self.hidden_size, bias=False) @@ -127,7 +148,6 @@ def forward( initial_state=None, output_final_state=False, use_qk_l2norm_in_kernel=True, - cu_seqlens=cu_seqlens, ) z_shape_og = z.shape @@ -205,14 +225,6 @@ def get_qwen3_5_spec(args, config, vp_stage): hf_config = _load_hf_config(args.hf_checkpoint) text_config = _get_text_config(hf_config) - # Compute layer_types if the config class doesn't expose it - if not hasattr(text_config, "layer_types"): - interval = getattr(text_config, "full_attention_interval", 4) - n = text_config.num_hidden_layers - text_config.layer_types = [ - "full_attention" if (i + 1) % interval == 0 else "linear_attention" for i in range(n) - ] - for layer_id in range(num_layers_to_build): if text_config.layer_types[layer_id + offset] == "linear_attention": layer_specs = copy.deepcopy(transformer_layer_spec.layer_specs[layer_id]) diff --git a/slime_plugins/models/qwen3_next.py b/slime_plugins/models/qwen3_next.py index 3060a945c6..0a42e4d572 100644 --- a/slime_plugins/models/qwen3_next.py +++ b/slime_plugins/models/qwen3_next.py @@ -7,10 +7,9 @@ from megatron.core.transformer.spec_utils import ModuleSpec from megatron.core.transformer.transformer_block import get_num_layers_to_build from megatron.core.transformer.transformer_layer import get_transformer_layer_offset +from transformers import AutoConfig from transformers.activations import ACT2FN -from .hf_attention import _load_hf_config - try: from fla.modules import FusedRMSNormGated, ShortConvolution from fla.ops.gated_delta_rule import chunk_gated_delta_rule @@ -69,7 +68,7 @@ def __init__(self, config, layer_idx: int): eps=self.layer_norm_epsilon, activation=self.activation, device=torch.cuda.current_device(), - dtype=config.dtype if config.dtype is not None else torch.get_default_dtype(), + dtype=config.dtype if config.dtype is not None else torch.get_current_dtype(), ) self.out_proj = nn.Linear(self.value_dim, self.hidden_size, bias=False) @@ -149,7 +148,6 @@ def forward( initial_state=None, output_final_state=False, use_qk_l2norm_in_kernel=True, - cu_seqlens=cu_seqlens, ) z_shape_og = z.shape @@ -215,13 +213,7 @@ def get_qwen3_next_spec(args, config, vp_stage): num_layers_to_build = get_num_layers_to_build(config, vp_stage=vp_stage) offset = get_transformer_layer_offset(config, vp_stage=vp_stage) - hf_config = _load_hf_config(args.hf_checkpoint) - - # Compute layer_types if the config class doesn't expose it - if not hasattr(hf_config, "layer_types"): - interval = getattr(hf_config, "full_attention_interval", 4) - n = hf_config.num_hidden_layers - hf_config.layer_types = ["full_attention" if (i + 1) % interval == 0 else "linear_attention" for i in range(n)] + hf_config = AutoConfig.from_pretrained(args.hf_checkpoint, trust_remote_code=True) for layer_id in range(num_layers_to_build): if hf_config.layer_types[layer_id + offset] == "linear_attention": diff --git a/tests/plugin_contracts/test_plugin_generate_contracts.py b/tests/plugin_contracts/test_plugin_generate_contracts.py index 9cf7af3a32..d63a69f45f 100644 --- a/tests/plugin_contracts/test_plugin_generate_contracts.py +++ b/tests/plugin_contracts/test_plugin_generate_contracts.py @@ -173,29 +173,5 @@ def test_custom_generate_function_path_supports_user_override(patch_generate_sta assert_sample_contract(result) -def test_generate_and_rm_group_rm_accepts_list_result_from_custom_generate(patch_generate_state, monkeypatch): - sglang_rollout = patch_generate_state - - async def custom_generate_list(args, sample: Sample, sampling_params: dict): - sample.status = Sample.Status.COMPLETED - sibling = Sample(index=1, prompt="prompt-1", status=Sample.Status.COMPLETED) - return [sample, sibling] - - monkeypatch.setattr(sglang_rollout, "load_function", lambda _path: custom_generate_list) - - result = asyncio.run( - generate_and_rm( - make_args(custom_generate_function_path="plugin_contracts.fake_generate", group_rm=True), - Sample(index=0, prompt="prompt-0"), - sampling_params={"temperature": 0.3}, - evaluation=False, - ) - ) - - assert isinstance(result, list) - assert len(result) == 2 - assert all(isinstance(sample, Sample) for sample in result) - - if __name__ == "__main__": run_contract_test_file() diff --git a/tests/plugin_contracts/test_plugin_runtime_hook_contracts.py b/tests/plugin_contracts/test_plugin_runtime_hook_contracts.py index a8380feecc..9c74876d96 100644 --- a/tests/plugin_contracts/test_plugin_runtime_hook_contracts.py +++ b/tests/plugin_contracts/test_plugin_runtime_hook_contracts.py @@ -69,7 +69,7 @@ def reference_convert_samples_to_train_data(args, samples): } -def reference_rollout_data_postprocess(args, rollout_id, rollout_data) -> None: +def reference_rollout_data_postprocess(args) -> None: args.rollout_data_postprocess_called = True @@ -124,7 +124,7 @@ def invoke_convert_samples_to_train_data(fn): def invoke_rollout_data_postprocess(fn): args = type("Args", (), {})() - assert fn(args, 0, {}) is None + assert fn(args) is None assert args.rollout_data_postprocess_called is True @@ -170,8 +170,8 @@ def invoke_rollout_data_postprocess(fn): "ROLLOUT_DATA_POSTPROCESS_PATH", "plugin_contracts.test_plugin_runtime_hook_contracts.reference_rollout_data_postprocess", "slime/backends/megatron_utils/actor.py", - "self.rollout_data_postprocess(self.args, rollout_id, rollout_data)", - ("args", "rollout_id", "rollout_data"), + "self.rollout_data_postprocess(self.args)", + ("args",), invoke_rollout_data_postprocess, ), ] diff --git a/tests/test_fsdp_import.py b/tests/test_fsdp_import.py new file mode 100644 index 0000000000..66b6861ed1 --- /dev/null +++ b/tests/test_fsdp_import.py @@ -0,0 +1,9 @@ +import pytest + + +def test_fsdp_import(): + try: + from torch.distributed.fsdp import FullyShardedDataParallel as FSDP + except ImportError: + pytest.skip("FSDP not available in this environment") + assert FSDP is not None diff --git a/tests/test_fused_experts_backward.py b/tests/test_fused_experts_backward.py new file mode 100644 index 0000000000..945a3a0480 --- /dev/null +++ b/tests/test_fused_experts_backward.py @@ -0,0 +1,593 @@ +""" +Test script to compare Triton backward implementation with Python backward implementation. + +This test compares: +1. Triton implementation (from fused_experts.py) - uses invoke_fused_moe_backward_kernel +2. Python reference implementation (defined in this file) - uses pure PyTorch operations +""" + +import pytest +import torch + +# ============================================================================ +# Python Reference Implementation (Pure PyTorch) +# ============================================================================ + + +class GateUpProjFunctionPython(torch.autograd.Function): + @staticmethod + def forward( + ctx, + hidden_states: torch.Tensor, + w1: torch.Tensor, + topk_weights: torch.Tensor, + topk_ids: torch.Tensor, + ): + num_tokens, D_in = hidden_states.shape + E, N, K = w1.shape + assert D_in == K, f"hidden_states dim {D_in} != w1 dim {K}" + + topk = topk_ids.shape[1] + + # Output: (num_tokens * topk, N) + intermediate_cache1 = torch.empty( + (num_tokens * topk, N), + device=hidden_states.device, + dtype=hidden_states.dtype, + ) + + # Python implementation: iterate over tokens and their topk experts + # For each token t and expert k: + # intermediate_cache1[t*topk + k] = hidden_states[t] @ w1[expert_id].T + for t in range(num_tokens): + for k in range(topk): + expert_id = topk_ids[t, k].item() + x_t = hidden_states[t] # shape: (D_in,) + W1_e = w1[expert_id] # shape: (N, K) + intermediate_cache1[t * topk + k] = x_t @ W1_e.T + + ctx.save_for_backward(hidden_states, w1, topk_weights, topk_ids) + ctx.num_tokens = num_tokens + ctx.topk = topk + + return intermediate_cache1 + + @staticmethod + def backward(ctx, grad_output): + """ + Backward pass for GateUpProjFunction - Pure Python implementation. + + Forward: output = input @ w1 (without topk_weight multiplication) + Backward: + - grad_hidden_states = grad_output @ w1 + - grad_w1 = grad_output.T @ input (note: transposed) + - grad_topk_weights = zeros (not needed in this stage) + + Args: + grad_output: shape (num_tokens * topk, N) + + Returns: + (grad_hidden_states, grad_w1, grad_topk_weights, None) + """ + hidden_states, w1, topk_weights, topk_ids = ctx.saved_tensors + topk = ctx.topk + + num_tokens, D_in = hidden_states.shape + E, N, _ = w1.shape + CHUNK_SIZE = 64 * 1024 + + # Initialize gradient tensors + grad_hidden_states = torch.zeros_like(hidden_states) + # Use float32 for grad_w1 accumulation to avoid bfloat16 precision loss + grad_w1 = torch.zeros(w1.shape, dtype=torch.float32, device=w1.device) + # GateUpProj stage doesn't compute topk_weights gradient + grad_topk_weights = torch.zeros_like(topk_weights) + + # Process in chunks to match forward pass + for chunk in range((num_tokens // CHUNK_SIZE) + 1): + begin_chunk_idx, end_chunk_idx = ( + chunk * CHUNK_SIZE, + min((chunk + 1) * CHUNK_SIZE, num_tokens), + ) + + curr_num_tokens = end_chunk_idx - begin_chunk_idx + if curr_num_tokens == 0: + continue + + curr_hidden_states = hidden_states[begin_chunk_idx:end_chunk_idx] + curr_topk_ids = topk_ids[begin_chunk_idx:end_chunk_idx] + curr_grad_output = grad_output[begin_chunk_idx * topk : end_chunk_idx * topk] + + # 1. Calculate grad_hidden_states: grad_output @ w1 + # For each token t and expert k: + # grad_hidden_states[t] += grad_output[t*topk+k] @ w1[expert_id] + for t in range(curr_num_tokens): + for k in range(topk): + expert_id = curr_topk_ids[t, k].item() + grad_y_tk = curr_grad_output[t * topk + k] # shape: (N,) + W1_e = w1[expert_id] # shape: (N, D_in) + # grad_x: (N,) @ (N, D_in) -> (D_in,) + grad_hidden_states[begin_chunk_idx + t] += grad_y_tk @ W1_e + + # 2. Calculate grad_w1: input.T @ grad_output + # For each token t and expert k: + # grad_w1[expert_id] += input[t].T @ grad_output[t*topk+k] + # Which is: grad_w1[expert_id] += outer(grad_output[t*topk+k], input[t]) + for t in range(curr_num_tokens): + for k in range(topk): + expert_id = curr_topk_ids[t, k].item() + x_t = curr_hidden_states[t] # shape: (D_in,) + grad_y_tk = curr_grad_output[t * topk + k] # shape: (N,) + # grad_W1: outer(grad_y_tk, x_t) -> (N, D_in) + # Accumulate in float32 + grad_w1[expert_id] += torch.outer(grad_y_tk, x_t).to(torch.float32) + + # Convert grad_w1 back to original dtype (bfloat16) + grad_w1 = grad_w1.to(hidden_states.dtype) + + return grad_hidden_states, grad_w1, grad_topk_weights, None + + +class DownProjFunctionPython(torch.autograd.Function): + @staticmethod + def forward( + ctx, + intermediate_cache2: torch.Tensor, + w2: torch.Tensor, + topk_weights: torch.Tensor, + topk_ids: torch.Tensor, + ): + total_tokens, intermediate_size = intermediate_cache2.shape + topk = topk_ids.shape[1] + num_tokens = total_tokens // topk + E, hidden_size, K = w2.shape + assert intermediate_size == K, f"intermediate_cache2 dim {intermediate_size} != w2 dim {K}" + + # Output: (num_tokens, topk, hidden_size) + intermediate_cache3 = torch.empty( + (num_tokens, topk, hidden_size), + device=intermediate_cache2.device, + dtype=intermediate_cache2.dtype, + ) + + # Python implementation: iterate over tokens and their topk experts + # For each token t and expert k: + # intermediate_cache3[t, k] = topk_weights[t, k] * (intermediate_cache2[t*topk+k] @ w2[expert_id].T) + for t in range(num_tokens): + for k in range(topk): + expert_id = topk_ids[t, k].item() + x_tk = intermediate_cache2[t * topk + k] # shape: (intermediate_size,) + W2_e = w2[expert_id] # shape: (hidden_size, intermediate_size) + weight_tk = topk_weights[t, k] # scalar + + intermediate_cache3[t, k] = weight_tk * (x_tk @ W2_e.T) + + ctx.save_for_backward(intermediate_cache2, w2, topk_weights, topk_ids) + ctx.num_tokens = num_tokens + ctx.topk = topk + + return intermediate_cache3 + + @staticmethod + def backward(ctx, grad_output): + """ + Backward pass for DownProjFunction - Pure Python implementation. + + Forward: output = topk_weights * (input @ w2) (with topk_weight multiplication) + Backward: + - grad_intermediate_cache2 = topk_weights * (grad_output @ w2) + - grad_w2 = topk_weights * (grad_output.T @ intermediate_cache2) + - grad_topk_weights = dot(grad_output, forward_output_before_weighting) + + Args: + grad_output: shape (num_tokens, topk, hidden_size) + + Returns: + (grad_intermediate_cache2, grad_w2, grad_topk_weights, None) + """ + intermediate_cache2, w2, topk_weights, topk_ids = ctx.saved_tensors + num_tokens = ctx.num_tokens + topk = ctx.topk + + E, hidden_size, intermediate_size = w2.shape + CHUNK_SIZE = 64 * 1024 + + # Initialize gradient tensors + grad_intermediate_cache2 = torch.zeros_like(intermediate_cache2) + # Use float32 for grad_w2 accumulation to avoid bfloat16 precision loss + grad_w2 = torch.zeros(w2.shape, dtype=torch.float32, device=w2.device) + # Compute grad_topk_weights in DownProjFunction backward + grad_topk_weights = torch.zeros_like(topk_weights) + + # Process in chunks to match forward pass + for chunk in range((num_tokens // CHUNK_SIZE) + 1): + begin_chunk_idx, end_chunk_idx = ( + chunk * CHUNK_SIZE, + min((chunk + 1) * CHUNK_SIZE, num_tokens), + ) + + curr_num_tokens = end_chunk_idx - begin_chunk_idx + if curr_num_tokens == 0: + continue + + curr_intermediate_cache2 = intermediate_cache2[begin_chunk_idx * topk : end_chunk_idx * topk] + curr_topk_ids = topk_ids[begin_chunk_idx:end_chunk_idx] + curr_grad_output = grad_output[begin_chunk_idx:end_chunk_idx] + curr_topk_weights = topk_weights[begin_chunk_idx:end_chunk_idx] + + # 1. Calculate grad_intermediate_cache2: topk_weights * (grad_output @ w2) + for t in range(curr_num_tokens): + for k in range(topk): + expert_id = curr_topk_ids[t, k].item() + grad_y_tk = curr_grad_output[t, k] # shape: (hidden_size,) + W2_e = w2[expert_id] # shape: (hidden_size, intermediate_size) + weight_tk = curr_topk_weights[t, k] # scalar + + grad_intermediate_cache2[(begin_chunk_idx + t) * topk + k] = weight_tk * (grad_y_tk @ W2_e) + + # 2. Calculate grad_w2: topk_weights * (grad_output.T @ intermediate_cache2) + for t in range(curr_num_tokens): + for k in range(topk): + expert_id = curr_topk_ids[t, k].item() + grad_y_tk = curr_grad_output[t, k] # shape: (hidden_size,) + x_tk = curr_intermediate_cache2[t * topk + k] # shape: (intermediate_size,) + weight_tk = curr_topk_weights[t, k] # scalar + + # Accumulate in float32 + grad_w2[expert_id] += (weight_tk * torch.outer(grad_y_tk, x_tk)).to(torch.float32) + + # 3. Calculate grad_topk_weights: dot(grad_output, forward_output_before_weighting) + for t in range(curr_num_tokens): + for k in range(topk): + expert_id = curr_topk_ids[t, k].item() + grad_y_tk = curr_grad_output[t, k] # shape: (hidden_size,) + x_tk = curr_intermediate_cache2[t * topk + k] # shape: (intermediate_size,) + W2_e = w2[expert_id] # shape: (hidden_size, intermediate_size) + + # Compute forward output before weighting + forward_output_unweighted = x_tk @ W2_e.T # shape: (hidden_size,) + + # grad_topk_weights: dot product + grad_topk_weights[begin_chunk_idx + t, k] += torch.sum(grad_y_tk * forward_output_unweighted) + + # Convert grad_w2 back to original dtype (bfloat16) + grad_w2 = grad_w2.to(intermediate_cache2.dtype) + + return grad_intermediate_cache2, grad_w2, grad_topk_weights, None + + +# ============================================================================ +# Import Triton Implementation +# ============================================================================ + +from slime.backends.fsdp_utils.kernels.fused_experts import DownProjFunction as DownProjFunctionTriton +from slime.backends.fsdp_utils.kernels.fused_experts import GateUpProjFunction as GateUpProjFunctionTriton + +# ============================================================================ +# Test Fixtures and Utilities +# ============================================================================ + + +@pytest.fixture +def setup_moe_params(): + """Setup MOE parameters for testing.""" + torch.manual_seed(42) + + # Small parameters for easier debugging + num_tokens = 64 + hidden_size = 128 + intermediate_size = 256 + num_experts = 4 + topk = 2 + + device = "cuda" if torch.cuda.is_available() else "cpu" + dtype = torch.bfloat16 + + # Create input tensors with random values for better testing + hidden_states = torch.randn(num_tokens, hidden_size, device=device, dtype=dtype) + + # Create expert weights + w1 = torch.randn(num_experts, intermediate_size * 2, hidden_size, device=device, dtype=dtype) + w2 = torch.randn(num_experts, hidden_size, intermediate_size, device=device, dtype=dtype) + + # Create router outputs + topk_weights = torch.rand(num_tokens, topk, device=device, dtype=dtype) + topk_weights = topk_weights / topk_weights.sum(dim=-1, keepdim=True) # normalize + + # Random expert selection + topk_ids = torch.stack([torch.randperm(num_experts, device=device)[:topk] for _ in range(num_tokens)], dim=0).to( + torch.int32 + ) + + return { + "hidden_states": hidden_states, + "w1": w1, + "w2": w2, + "topk_weights": topk_weights, + "topk_ids": topk_ids, + "device": device, + "dtype": dtype, + } + + +# ============================================================================ +# Test Cases +# ============================================================================ + + +class TestGateUpProjBackward: + """Test GateUpProjFunction backward pass comparison.""" + + def test_forward_consistency(self, setup_moe_params): + """Test that Triton and Python implementations produce same forward output.""" + params = setup_moe_params + + # Python implementation + out_python = GateUpProjFunctionPython.apply( + params["hidden_states"].clone(), + params["w1"].clone(), + params["topk_weights"].clone(), + params["topk_ids"].clone(), + ) + + # Triton implementation + out_triton = GateUpProjFunctionTriton.apply( + params["hidden_states"].clone(), + params["w1"].clone(), + params["topk_weights"].clone(), + params["topk_ids"].clone(), + ) + + # Check outputs are close + torch.testing.assert_close(out_python, out_triton, rtol=1, atol=1) + print("✓ GateUpProjFunction forward test passed") + + def test_backward_consistency(self, setup_moe_params): + """Test that Triton and Python implementations produce same gradients.""" + params = setup_moe_params + + # Prepare inputs with requires_grad + hidden_states_python = params["hidden_states"].clone().requires_grad_(True) + w1_python = params["w1"].clone().requires_grad_(True) + topk_weights_python = params["topk_weights"].clone().requires_grad_(True) + topk_ids_python = params["topk_ids"].clone() + + hidden_states_triton = params["hidden_states"].clone().requires_grad_(True) + w1_triton = params["w1"].clone().requires_grad_(True) + topk_weights_triton = params["topk_weights"].clone().requires_grad_(True) + topk_ids_triton = params["topk_ids"].clone() + + # Python implementation + out_python = GateUpProjFunctionPython.apply( + hidden_states_python, + w1_python, + topk_weights_python, + topk_ids_python, + ) + + # Triton implementation + out_triton = GateUpProjFunctionTriton.apply( + hidden_states_triton, + w1_triton, + topk_weights_triton, + topk_ids_triton, + ) + + # Create gradient for backward + grad_output = torch.randn_like(out_python) + + # Backward pass + out_python.backward(grad_output.clone()) + out_triton.backward(grad_output.clone()) + + # Check hidden_states gradients + print("\n" + "=" * 80) + print("GateUpProjFunction Backward - hidden_states gradients:") + print("=" * 80) + if hidden_states_python.grad is not None and hidden_states_triton.grad is not None: + diff = hidden_states_python.grad - hidden_states_triton.grad + max_diff = torch.max(torch.abs(diff)) + print(f"Max absolute difference: {max_diff:.6f}") + torch.testing.assert_close(hidden_states_python.grad, hidden_states_triton.grad, rtol=1, atol=1) + print("✓ hidden_states gradient matches") + print("=" * 80 + "\n") + + # Check w1 gradients + print("\n" + "=" * 80) + print("GateUpProjFunction Backward - w1 gradients:") + print("=" * 80) + if w1_python.grad is not None and w1_triton.grad is not None: + diff = w1_python.grad - w1_triton.grad + max_diff = torch.max(torch.abs(diff)) + print(f"Max absolute difference: {max_diff:.6f}") + torch.testing.assert_close(w1_python.grad, w1_triton.grad, rtol=1, atol=1) + print("✓ w1 gradient matches") + print("=" * 80 + "\n") + + print("✓ GateUpProjFunction backward test passed") + + +class TestDownProjBackward: + """Test DownProjFunction backward pass comparison.""" + + def test_forward_consistency(self, setup_moe_params): + """Test that Triton and Python implementations produce same forward output.""" + params = setup_moe_params + + # Create intermediate input (after SiluAndMul) + num_tokens = params["hidden_states"].shape[0] + topk = params["topk_ids"].shape[1] + intermediate_size = params["w2"].shape[2] + intermediate_cache2 = torch.randn( + num_tokens * topk, intermediate_size, device=params["device"], dtype=params["dtype"] + ) + + # Python implementation + out_python = DownProjFunctionPython.apply( + intermediate_cache2.clone(), + params["w2"].clone(), + params["topk_weights"].clone(), + params["topk_ids"].clone(), + ) + + # Triton implementation + out_triton = DownProjFunctionTriton.apply( + intermediate_cache2.clone(), + params["w2"].clone(), + params["topk_weights"].clone(), + params["topk_ids"].clone(), + ) + + # Check outputs are close + torch.testing.assert_close(out_python, out_triton, rtol=1, atol=1) + print("✓ DownProjFunction forward test passed") + + def test_backward_consistency(self, setup_moe_params): + """Test that Triton and Python implementations produce same gradients.""" + params = setup_moe_params + + # Create intermediate input + num_tokens = params["hidden_states"].shape[0] + topk = params["topk_ids"].shape[1] + intermediate_size = params["w2"].shape[2] + + intermediate_cache2_base = torch.randn( + num_tokens * topk, intermediate_size, device=params["device"], dtype=params["dtype"] + ) + + intermediate_cache2_python = intermediate_cache2_base.clone().requires_grad_(True) + intermediate_cache2_triton = intermediate_cache2_base.clone().requires_grad_(True) + + w2_python = params["w2"].clone().requires_grad_(True) + w2_triton = params["w2"].clone().requires_grad_(True) + + topk_weights_python = params["topk_weights"].clone().requires_grad_(True) + topk_weights_triton = params["topk_weights"].clone().requires_grad_(True) + + # Python implementation + out_python = DownProjFunctionPython.apply( + intermediate_cache2_python, + w2_python, + topk_weights_python, + params["topk_ids"], + ) + + # Triton implementation + out_triton = DownProjFunctionTriton.apply( + intermediate_cache2_triton, + w2_triton, + topk_weights_triton, + params["topk_ids"], + ) + + # Create gradient for backward + grad_output = torch.randn_like(out_python) + + # Backward pass + out_python.backward(grad_output.clone()) + out_triton.backward(grad_output.clone()) + + # Check intermediate_cache2 gradients + print("\n" + "=" * 80) + print("DownProjFunction Backward - intermediate_cache2 gradients:") + print("=" * 80) + if intermediate_cache2_python.grad is not None and intermediate_cache2_triton.grad is not None: + diff = intermediate_cache2_python.grad - intermediate_cache2_triton.grad + max_diff = torch.max(torch.abs(diff)) + print(f"Max absolute difference: {max_diff:.6f}") + torch.testing.assert_close( + intermediate_cache2_python.grad, intermediate_cache2_triton.grad, rtol=1, atol=1 + ) + print("✓ intermediate_cache2 gradient matches") + print("=" * 80 + "\n") + + # Check topk_weights gradients + print("\n" + "=" * 80) + print("DownProjFunction Backward - topk_weights gradients:") + print("=" * 80) + if topk_weights_python.grad is not None and topk_weights_triton.grad is not None: + diff = topk_weights_python.grad - topk_weights_triton.grad + max_diff = torch.max(torch.abs(diff)) + print(f"Max absolute difference: {max_diff:.6f}") + torch.testing.assert_close(topk_weights_python.grad, topk_weights_triton.grad, rtol=1, atol=1) + print("✓ topk_weights gradient matches") + print("=" * 80 + "\n") + + # Check w2 gradients + print("\n" + "=" * 80) + print("DownProjFunction Backward - w2 gradients:") + print("=" * 80) + if w2_python.grad is not None and w2_triton.grad is not None: + diff = w2_python.grad - w2_triton.grad + max_diff = torch.max(torch.abs(diff)) + print(f"Max absolute difference: {max_diff:.6f}") + torch.testing.assert_close(w2_python.grad, w2_triton.grad, rtol=1, atol=1) + print("✓ w2 gradient matches") + print("=" * 80 + "\n") + + print("✓ DownProjFunction backward test passed") + + +# ============================================================================ +# Main Test Runner +# ============================================================================ + + +def run_all_tests(): + """Run all tests.""" + print("=" * 80) + print("Running Fused Experts Backward Tests") + print("Testing: Triton Implementation vs Python Reference") + print("=" * 80) + + if not torch.cuda.is_available(): + print("WARNING: CUDA not available, skipping tests") + return + + # Setup parameters + torch.manual_seed(42) + params_dict = {} + + # Small parameters for testing + num_tokens = 64 + hidden_size = 128 + intermediate_size = 256 + num_experts = 4 + topk = 2 + + device = "cuda" + dtype = torch.bfloat16 + + # Create input tensors + params_dict["hidden_states"] = torch.randn(num_tokens, hidden_size, device=device, dtype=dtype) + params_dict["w1"] = torch.randn(num_experts, intermediate_size * 2, hidden_size, device=device, dtype=dtype) + params_dict["w2"] = torch.randn(num_experts, hidden_size, intermediate_size, device=device, dtype=dtype) + params_dict["topk_weights"] = torch.rand(num_tokens, topk, device=device, dtype=dtype) + params_dict["topk_weights"] = params_dict["topk_weights"] / params_dict["topk_weights"].sum(dim=-1, keepdim=True) + params_dict["topk_ids"] = torch.stack( + [torch.randperm(num_experts, device=device)[:topk] for _ in range(num_tokens)], dim=0 + ).to(torch.int32) + params_dict["device"] = device + params_dict["dtype"] = dtype + + print("\n" + "=" * 80) + print("Testing GateUpProjFunction Backward") + print("=" * 80) + test_gate_up = TestGateUpProjBackward() + test_gate_up.test_forward_consistency(params_dict) + test_gate_up.test_backward_consistency(params_dict) + + print("\n" + "=" * 80) + print("Testing DownProjFunction Backward") + print("=" * 80) + test_down = TestDownProjBackward() + test_down.test_forward_consistency(params_dict) + test_down.test_backward_consistency(params_dict) + + print("\n" + "=" * 80) + print("All Backward Tests Passed! ✓") + print("=" * 80) + + +if __name__ == "__main__": + run_all_tests() diff --git a/tests/test_glm4.7_30B_A3B_pd_mooncake.py b/tests/test_glm4.7_30B_A3B_pd_mooncake.py deleted file mode 100644 index 8ea17b5ce9..0000000000 --- a/tests/test_glm4.7_30B_A3B_pd_mooncake.py +++ /dev/null @@ -1,160 +0,0 @@ -"""GLM-4.7-Flash colocated training test with single-node PD + Mooncake.""" - -import os -import tempfile - -import yaml - -import slime.utils.external_utils.command_utils as U - - -MODEL_REPO = "zai-org/GLM-4.7-Flash" -MODEL_NAME = "GLM-4.7-Flash" -MODEL_TYPE = "glm4.7-30B-A3B" -NUM_GPUS = 8 - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download {MODEL_REPO} --local-dir /root/models/{MODEL_NAME}") - U.hf_download_dataset("zhuzilin/dapo-math-17k") - U.convert_checkpoint( - model_name=MODEL_NAME, - megatron_model_type=MODEL_TYPE, - num_gpus_per_node=NUM_GPUS, - dir_dst="/root/models", - hf_checkpoint=f"/root/models/{MODEL_NAME}", - ) - - -def write_sglang_config() -> str: - config = { - "sglang": [ - { - "name": "default", - "server_groups": [ - { - "worker_type": "prefill", - "num_gpus": 4, - "num_gpus_per_engine": 4, - "overrides": {"disaggregation_transfer_backend": "mooncake"}, - }, - { - "worker_type": "decode", - "num_gpus": 4, - "num_gpus_per_engine": 4, - "overrides": {"disaggregation_transfer_backend": "mooncake"}, - }, - ], - } - ] - } - f = tempfile.NamedTemporaryFile("w", suffix=".yaml", prefix="sglang_pd_mooncake_", delete=False) - with f: - yaml.safe_dump(config, f, sort_keys=False) - return f.name - - -def execute(): - sglang_config = write_sglang_config() - - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME} " f"--ref-load /root/models/{MODEL_NAME}_torch_dist " - rollout_args = ( - "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " - "--input-key prompt " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type deepscaler " - "--num-rollout 2 " - "--rollout-batch-size 4 " - "--n-samples-per-prompt 2 " - "--rollout-max-response-len 512 " - "--rollout-temperature 0.8 " - "--global-batch-size 8 " - ) - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - "--optimizer-cpu-offload " - "--overlap-cpu-optimizer-d2h-h2d " - "--use-precision-aware-optimizer " - ) - grpo_args = ( - "--advantage-estimator grpo " - "--kl-loss-coef 0.00 " - "--kl-loss-type low_var_kl " - "--kl-coef 0.00 " - "--entropy-coef 0.00 " - "--eps-clip 0.2 " - "--eps-clip-high 0.28 " - ) - perf_args = ( - "--tensor-model-parallel-size 2 " - "--sequence-parallel " - "--pipeline-model-parallel-size 2 " - "--context-parallel-size 2 " - "--expert-model-parallel-size 4 " - "--expert-tensor-parallel-size 1 " - "--decoder-last-pipeline-num-layers 23 " - "--recompute-granularity full " - "--recompute-method uniform " - "--recompute-num-layers 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 2048 " - ) - sglang_args = ( - "--rollout-num-gpus 8 " - "--rollout-num-gpus-per-engine 4 " - "--sglang-enable-dp-attention " - "--sglang-dp-size 4 " - "--sglang-enable-dp-lm-head " - "--sglang-ep-size 4 " - "--sglang-moe-dense-tp-size 1 " - "--sglang-mem-fraction-static 0.45 " - "--sglang-cuda-graph-max-bs 8 " - "--sglang-max-running-requests 16 " - "--sglang-disaggregation-transfer-backend mooncake " - "--sglang-speculative-algorithm EAGLE " - "--sglang-speculative-num-steps 3 " - "--sglang-speculative-eagle-topk 1 " - "--sglang-speculative-num-draft-tokens 4 " - "--sglang-watchdog-timeout 1200 " - "--sglang-router-request-timeout-secs 1200 " - "--sglang-enable-metrics " - f"--sglang-config {sglang_config} " - ) - misc_args = ( - "--ci-test " - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " - "--colocate " - "--moe-token-dispatcher-type alltoall " - ) - train_args = ( - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{grpo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{sglang_args} " - f"{misc_args} " - ) - U.execute_train(train_args=train_args, num_gpus_per_node=NUM_GPUS, megatron_model_type=MODEL_TYPE) - - -if __name__ == "__main__": - prepare() - for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): - os.environ.pop(proxy_var, None) - execute() diff --git a/tests/test_gspo.sh b/tests/test_gspo.sh index d26a479038..6e915ca652 100644 --- a/tests/test_gspo.sh +++ b/tests/test_gspo.sh @@ -71,7 +71,7 @@ ray job submit --address="http://127.0.0.1:8265" \ --actor-num-nodes 1 \ --actor-num-gpus-per-node 4 \ --colocate \ - --train-backend megatron \ + --train-backend fsdp \ ${CKPT_ARGS[@]} \ ${ROLLOUT_ARGS[@]} \ ${OPTIMIZER_ARGS[@]} \ diff --git a/tests/test_megatron_argument_validation.py b/tests/test_megatron_argument_validation.py deleted file mode 100644 index 83e8390ee1..0000000000 --- a/tests/test_megatron_argument_validation.py +++ /dev/null @@ -1,140 +0,0 @@ -import importlib.util -import sys -import types -from pathlib import Path - -import pytest - - -def load_arguments_module(monkeypatch): - megatron_mod = types.ModuleType("megatron") - training_mod = types.ModuleType("megatron.training") - arguments_mod = types.ModuleType("megatron.training.arguments") - tokenizer_pkg_mod = types.ModuleType("megatron.training.tokenizer") - tokenizer_mod = types.ModuleType("megatron.training.tokenizer.tokenizer") - transformers_mod = types.ModuleType("transformers") - - arguments_mod.parse_args = lambda *args, **kwargs: None - arguments_mod.validate_args = lambda args: args - tokenizer_mod._vocab_size_with_padding = lambda vocab_size, _args: vocab_size - transformers_mod.AutoConfig = types.SimpleNamespace(from_pretrained=lambda *args, **kwargs: None) - - monkeypatch.setitem(sys.modules, "megatron", megatron_mod) - monkeypatch.setitem(sys.modules, "megatron.training", training_mod) - monkeypatch.setitem(sys.modules, "megatron.training.arguments", arguments_mod) - monkeypatch.setitem(sys.modules, "megatron.training.tokenizer", tokenizer_pkg_mod) - monkeypatch.setitem(sys.modules, "megatron.training.tokenizer.tokenizer", tokenizer_mod) - monkeypatch.setitem(sys.modules, "transformers", transformers_mod) - - module_path = Path(__file__).resolve().parents[1] / "slime" / "backends" / "megatron_utils" / "arguments.py" - module_name = "test_megatron_argument_validation_module" - sys.modules.pop(module_name, None) - spec = importlib.util.spec_from_file_location(module_name, module_path) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return module - - -def make_qwen3_6_args(**overrides): - values = dict( - hidden_size=2048, - num_attention_heads=16, - num_layers=40, - ffn_hidden_size=512, - moe_ffn_hidden_size=512, - moe_shared_expert_intermediate_size=512, - moe_layer_freq=[1] * 40, - untie_embeddings_and_output_weights=True, - norm_epsilon=1e-6, - layernorm_epsilon=1e-6, - rotary_base=10000000, - ) - values.update(overrides) - return types.SimpleNamespace(**values) - - -def make_qwen3_6_hf_config(): - text_config = types.SimpleNamespace( - hidden_size=2048, - num_attention_heads=16, - num_hidden_layers=40, - intermediate_size=5632, - moe_intermediate_size=512, - shared_expert_intermediate_size=512, - num_experts=256, - tie_word_embeddings=False, - rms_norm_eps=1e-6, - rope_parameters={"rope_theta": 10000000}, - ) - return types.SimpleNamespace(text_config=text_config) - - -def make_allgather_cp_args(**overrides): - values = dict( - allgather_cp=True, - context_parallel_size=2, - ) - values.update(overrides) - return types.SimpleNamespace(**values) - - -@pytest.mark.unit -def test_hf_validate_all_moe_skips_dense_intermediate_size(monkeypatch): - module = load_arguments_module(monkeypatch) - - module._hf_validate_args(make_qwen3_6_args(), make_qwen3_6_hf_config()) - - -@pytest.mark.unit -def test_hf_validate_checks_moe_intermediate_size(monkeypatch): - module = load_arguments_module(monkeypatch) - - with pytest.raises(AssertionError, match="moe_intermediate_size"): - module._hf_validate_args(make_qwen3_6_args(moe_ffn_hidden_size=256), make_qwen3_6_hf_config()) - - -@pytest.mark.unit -def test_hf_validate_checks_dense_intermediate_size_when_moe_has_dense_layers(monkeypatch): - module = load_arguments_module(monkeypatch) - - args = make_qwen3_6_args(moe_layer_freq=[0] + [1] * 39) - - with pytest.raises(AssertionError, match="intermediate_size"): - module._hf_validate_args(args, make_qwen3_6_hf_config()) - - -@pytest.mark.unit -def test_allgather_cp_rejects_non_dsa_cp_models(monkeypatch): - module = load_arguments_module(monkeypatch) - args = make_allgather_cp_args() - hf_config = types.SimpleNamespace(architectures=["Qwen3ForCausalLM"], model_type="qwen3") - - with pytest.raises(ValueError, match="only supported for DSA attention models"): - module._validate_allgather_cp_supported(args, hf_config) - - -@pytest.mark.unit -@pytest.mark.parametrize( - "hf_config", - [ - types.SimpleNamespace(architectures=["DeepseekV32ForCausalLM"], model_type="deepseek_v3"), - types.SimpleNamespace(architectures=["GlmMoeDsaForCausalLM"], model_type="glm"), - ], -) -def test_allgather_cp_allows_dsa_architectures(monkeypatch, hf_config): - module = load_arguments_module(monkeypatch) - - module._validate_allgather_cp_supported(make_allgather_cp_args(), hf_config) - - -@pytest.mark.unit -def test_allgather_cp_ignores_cp_size_one(monkeypatch): - module = load_arguments_module(monkeypatch) - args = make_allgather_cp_args(context_parallel_size=1) - - module._validate_allgather_cp_supported(args) - - -if __name__ == "__main__": - raise SystemExit(pytest.main([__file__])) diff --git a/tests/test_moonlight_16B_A3B_r3.py b/tests/test_moonlight_16B_A3B_r3.py index facb2d0b70..b8a4e5ee3a 100644 --- a/tests/test_moonlight_16B_A3B_r3.py +++ b/tests/test_moonlight_16B_A3B_r3.py @@ -69,6 +69,7 @@ def execute(): "--entropy-coef 0.00 " "--eps-clip 4e-4 " "--use-rollout-routing-replay " + "--use-slime-router " ) optimizer_args = ( diff --git a/tests/test_quick_start_glm4_9B.py b/tests/test_quick_start_glm4_9B.py index 30cb348594..4f87df8eab 100644 --- a/tests/test_quick_start_glm4_9B.py +++ b/tests/test_quick_start_glm4_9B.py @@ -80,7 +80,7 @@ def execute(): "--adam-beta2 0.98 " ) - sglang_args = "--rollout-num-gpus-per-engine 2 " "--sglang-cuda-graph-max-bs 32 " + sglang_args = "--rollout-num-gpus-per-engine 2 " "--sglang-cuda-graph-max-bs 32 " "--use-slime-router " ci_args = "--ci-test " diff --git a/tests/test_qwen2.5_0.5B_async_short.py b/tests/test_qwen2.5_0.5B_async_short.py deleted file mode 100644 index c3925d4432..0000000000 --- a/tests/test_qwen2.5_0.5B_async_short.py +++ /dev/null @@ -1,121 +0,0 @@ -import os -import slime.utils.external_utils.command_utils as U - -TIGHT_DEVICE_MEMORY = U.get_bool_env_var("SLIME_TEST_TIGHT_DEVICE_MEMORY", "1") - -MODEL_NAME = "Qwen2.5-0.5B-Instruct" -MODEL_TYPE = "qwen2.5-0.5B" -NUM_GPUS = 4 - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") - U.hf_download_dataset("zhuzilin/dapo-math-17k") - - -def execute(): - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/models/{MODEL_NAME}/ " - - rollout_args = ( - "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " - "--input-key prompt " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type deepscaler " - "--num-rollout 3 " - "--rollout-batch-size 8 " - "--n-samples-per-prompt 4 " - "--rollout-max-response-len 8192 " - "--rollout-temperature 0.8 " - "--global-batch-size 32 " - "--balance-data " - ) - - perf_args = ( - "--tensor-model-parallel-size 1 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 1 " - "--expert-model-parallel-size 1 " - "--expert-tensor-parallel-size 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 9216 " - ) - - grpo_args = ( - "--advantage-estimator grpo " - "--use-kl-loss " - "--kl-loss-coef 0.00 " - "--kl-loss-type low_var_kl " - "--entropy-coef 0.00 " - "--eps-clip 0.2 " - "--eps-clip-high 0.28 " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 1 " - f"--sglang-mem-fraction-static {0.55 if TIGHT_DEVICE_MEMORY else 0.65} " - "--sglang-cuda-graph-max-bs 32 " - "--sglang-enable-metrics " - ) - - ci_args = "--ci-test " - - fault_tolerance_args = ( - "--use-fault-tolerance " - "--rollout-health-check-interval 5 " - "--rollout-health-check-timeout 10 " - "--rollout-health-check-first-wait 0 " - ) - - misc_args = ( - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 1 " - "--rollout-num-gpus 3 " - "--megatron-to-hf-mode bridge " - ) - - train_args = ( - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{grpo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{sglang_args} " - f"{ci_args} " - f"{fault_tolerance_args} " - f"{misc_args} " - ) - - U.execute_train( - train_args=train_args, - num_gpus_per_node=NUM_GPUS, - megatron_model_type=MODEL_TYPE, - train_script="train_async.py", - ) - - -if __name__ == "__main__": - prepare() - os.environ.pop("http_proxy") - os.environ.pop("https_proxy") - os.environ.pop("HTTP_PROXY") - os.environ.pop("HTTPS_PROXY") - execute() diff --git a/tests/test_qwen2.5_0.5B_debug_rollout_then_train.py b/tests/test_qwen2.5_0.5B_debug_rollout_then_train.py index 6e687799c8..63fd24904a 100644 --- a/tests/test_qwen2.5_0.5B_debug_rollout_then_train.py +++ b/tests/test_qwen2.5_0.5B_debug_rollout_then_train.py @@ -23,7 +23,7 @@ def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") U.hf_download_dataset("zhuzilin/gsm8k") diff --git a/tests/test_qwen3.5_0.8B_gsm8k_async_short.py b/tests/test_qwen2.5_0.5B_gsm8k_async_short.py similarity index 85% rename from tests/test_qwen3.5_0.8B_gsm8k_async_short.py rename to tests/test_qwen2.5_0.5B_gsm8k_async_short.py index 14d92ff4fe..ee71ff60e6 100644 --- a/tests/test_qwen3.5_0.8B_gsm8k_async_short.py +++ b/tests/test_qwen2.5_0.5B_gsm8k_async_short.py @@ -1,30 +1,21 @@ import os - import slime.utils.external_utils.command_utils as U - TIGHT_DEVICE_MEMORY = U.get_bool_env_var("SLIME_TEST_TIGHT_DEVICE_MEMORY", "1") -MODEL_NAME = "Qwen3.5-0.8B" -MODEL_TYPE = "qwen3.5-0.8B" +MODEL_NAME = "Qwen2.5-0.5B-Instruct" +MODEL_TYPE = "qwen2.5-0.5B" NUM_GPUS = 4 -TORCH_DIST_CKPT = f"/dev/shm/{MODEL_NAME}_torch_dist" def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") U.hf_download_dataset("zhuzilin/gsm8k") - U.convert_checkpoint( - model_name=MODEL_NAME, - megatron_model_type=MODEL_TYPE, - num_gpus_per_node=NUM_GPUS, - dir_dst="/dev/shm", - ) def execute(): - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load {TORCH_DIST_CKPT} " + ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/models/{MODEL_NAME}/ " rollout_args = ( "--prompt-data /root/datasets/gsm8k/train.parquet " @@ -103,10 +94,10 @@ def execute(): "--accumulate-allreduce-grads-in-fp32 " "--attention-softmax-in-fp32 " "--attention-backend flash " - "--loss-mask-type qwen3_5 " "--actor-num-nodes 1 " "--actor-num-gpus-per-node 1 " "--rollout-num-gpus 3 " + "--megatron-to-hf-mode bridge " ) train_args = ( @@ -133,6 +124,8 @@ def execute(): if __name__ == "__main__": prepare() - for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): - os.environ.pop(proxy_var, None) + os.environ.pop("http_proxy") + os.environ.pop("https_proxy") + os.environ.pop("HTTP_PROXY") + os.environ.pop("HTTPS_PROXY") execute() diff --git a/tests/test_qwen3.5_0.8B_gsm8k_short.py b/tests/test_qwen2.5_0.5B_gsm8k_short.py similarity index 85% rename from tests/test_qwen3.5_0.8B_gsm8k_short.py rename to tests/test_qwen2.5_0.5B_gsm8k_short.py index 856413de75..1b47c8d007 100644 --- a/tests/test_qwen3.5_0.8B_gsm8k_short.py +++ b/tests/test_qwen2.5_0.5B_gsm8k_short.py @@ -1,30 +1,21 @@ import os - import slime.utils.external_utils.command_utils as U - TIGHT_DEVICE_MEMORY = U.get_bool_env_var("SLIME_TEST_TIGHT_DEVICE_MEMORY", "1") -MODEL_NAME = "Qwen3.5-0.8B" -MODEL_TYPE = "qwen3.5-0.8B" +MODEL_NAME = "Qwen2.5-0.5B-Instruct" +MODEL_TYPE = "qwen2.5-0.5B" NUM_GPUS = 4 -TORCH_DIST_CKPT = f"/dev/shm/{MODEL_NAME}_torch_dist" def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") U.hf_download_dataset("zhuzilin/gsm8k") - U.convert_checkpoint( - model_name=MODEL_NAME, - megatron_model_type=MODEL_TYPE, - num_gpus_per_node=NUM_GPUS, - dir_dst="/dev/shm", - ) def execute(): - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load {TORCH_DIST_CKPT} " + ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/models/{MODEL_NAME}/ " rollout_args = ( "--prompt-data /root/datasets/gsm8k/train.parquet " @@ -103,10 +94,10 @@ def execute(): "--accumulate-allreduce-grads-in-fp32 " "--attention-softmax-in-fp32 " "--attention-backend flash " - "--loss-mask-type qwen3_5 " "--actor-num-nodes 1 " "--actor-num-gpus-per-node 4 " "--colocate " + "--megatron-to-hf-mode bridge " ) train_args = ( @@ -132,6 +123,8 @@ def execute(): if __name__ == "__main__": prepare() - for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): - os.environ.pop(proxy_var, None) + os.environ.pop("http_proxy") + os.environ.pop("https_proxy") + os.environ.pop("HTTP_PROXY") + os.environ.pop("HTTPS_PROXY") execute() diff --git a/tests/test_qwen2.5_0.5B_opd_sglang.py b/tests/test_qwen2.5_0.5B_opd_sglang.py index eb0892fb91..85addd0ab4 100644 --- a/tests/test_qwen2.5_0.5B_opd_sglang.py +++ b/tests/test_qwen2.5_0.5B_opd_sglang.py @@ -18,7 +18,7 @@ def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") U.hf_download_dataset("zhuzilin/gsm8k") diff --git a/tests/test_qwen2.5_0.5B_ppo_critic_only_short.py b/tests/test_qwen2.5_0.5B_ppo_critic_only_short.py deleted file mode 100644 index c03d863d8e..0000000000 --- a/tests/test_qwen2.5_0.5B_ppo_critic_only_short.py +++ /dev/null @@ -1,131 +0,0 @@ -import os -import tempfile - -import slime.utils.external_utils.command_utils as U - -TIGHT_DEVICE_MEMORY = U.get_bool_env_var("SLIME_TEST_TIGHT_DEVICE_MEMORY", "1") - -MODEL_NAME = "Qwen2.5-0.5B-Instruct" -MODEL_TYPE = "qwen2.5-0.5B" -NUM_GPUS = 4 - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") - U.hf_download_dataset("zhuzilin/dapo-math-17k") - - -def execute(): - megatron_config = tempfile.NamedTemporaryFile("w", suffix=".yaml", delete=False) - megatron_config.write( - """ -megatron: - - name: default - role: critic - overrides: - lr: 1e-5 - - name: default - role: actor - overrides: - lr: 1e-6 -""" - ) - megatron_config.close() - - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " - - rollout_args = ( - "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " - "--input-key prompt " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type deepscaler " - "--num-rollout 3 " - "--rollout-batch-size 8 " - "--n-samples-per-prompt 4 " - "--rollout-max-response-len 1024 " - "--rollout-temperature 0.8 " - "--global-batch-size 32 " - "--balance-data " - ) - - perf_args = ( - "--tensor-model-parallel-size 1 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 1 " - "--expert-model-parallel-size 1 " - "--expert-tensor-parallel-size 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 9216 " - ) - - ppo_args = ( - "--advantage-estimator ppo " - "--kl-loss-coef 0.00 " - "--kl-loss-type k1 " - "--kl-coef 0.00 " - "--entropy-coef 0.00 " - "--eps-clip 4e-4 " - "--num-critic-only-steps 3 " - "--normalize-advantages " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 1 " - "--rollout-num-gpus 2 " - f"--sglang-mem-fraction-static {0.6 if TIGHT_DEVICE_MEMORY else 0.7} " - "--sglang-cuda-graph-max-bs 32 " - "--sglang-enable-metrics " - ) - - ci_args = "--ci-test " - - misc_args = ( - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 4 " - "--megatron-to-hf-mode bridge " - "--colocate " - ) - - train_args = ( - f"--megatron-config-path {megatron_config.name} " - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{ppo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{sglang_args} " - f"{ci_args} " - f"{misc_args} " - ) - - U.execute_train( - train_args=train_args, - num_gpus_per_node=NUM_GPUS, - megatron_model_type=MODEL_TYPE, - ) - - -if __name__ == "__main__": - prepare() - for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): - os.environ.pop(proxy_var, None) - execute() diff --git a/tests/test_qwen2.5_0.5B_sglang_config.py b/tests/test_qwen2.5_0.5B_sglang_config.py index f30c6ac6cf..0b1ec9e057 100644 --- a/tests/test_qwen2.5_0.5B_sglang_config.py +++ b/tests/test_qwen2.5_0.5B_sglang_config.py @@ -16,7 +16,7 @@ SGLANG_CONFIG_YAML = """\ sglang: - name: default - server_groups: + engine_groups: - worker_type: regular num_gpus: 4 num_gpus_per_engine: 2 @@ -30,7 +30,7 @@ def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") U.hf_download_dataset("zhuzilin/gsm8k") diff --git a/tests/test_qwen2.5_0.5B_sglang_config_distributed.py b/tests/test_qwen2.5_0.5B_sglang_config_distributed.py index 68215b34c6..41d70bea44 100644 --- a/tests/test_qwen2.5_0.5B_sglang_config_distributed.py +++ b/tests/test_qwen2.5_0.5B_sglang_config_distributed.py @@ -10,14 +10,14 @@ NUM_GPUS = 8 # Inline sglang config: same model, 3 engine groups with different parallelism. -# Non-colocated (decoupled training and rollout): actor uses 4 GPUs, rollout uses 4 GPUs. +# Non-colocated (训推分离): actor uses 4 GPUs, rollout uses 4 GPUs. # Group 1: 2 GPUs, 2 GPUs/engine (tp=2) → 1 engine # Group 2: 1 GPU, 1 GPU/engine (tp=1) → 1 engine # Group 3: 1 GPU, placeholder → reserves 1 GPU slot, no engine created SGLANG_CONFIG_YAML = """\ sglang: - name: default - server_groups: + engine_groups: - worker_type: regular num_gpus: 2 num_gpus_per_engine: 2 @@ -31,7 +31,7 @@ def prepare(): U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.exec_command(f"huggingface-cli download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") U.hf_download_dataset("zhuzilin/gsm8k") diff --git a/tests/test_qwen2.5_0.5B_short.py b/tests/test_qwen2.5_0.5B_short.py deleted file mode 100644 index 6f45095bfb..0000000000 --- a/tests/test_qwen2.5_0.5B_short.py +++ /dev/null @@ -1,120 +0,0 @@ -import os -import slime.utils.external_utils.command_utils as U - -TIGHT_DEVICE_MEMORY = U.get_bool_env_var("SLIME_TEST_TIGHT_DEVICE_MEMORY", "1") - -MODEL_NAME = "Qwen2.5-0.5B-Instruct" -MODEL_TYPE = "qwen2.5-0.5B" -NUM_GPUS = 4 - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") - U.hf_download_dataset("zhuzilin/dapo-math-17k") - - -def execute(): - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/models/{MODEL_NAME}/ " - - rollout_args = ( - "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " - "--input-key prompt " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type deepscaler " - "--num-rollout 3 " - "--rollout-batch-size 8 " - "--n-samples-per-prompt 4 " - "--rollout-max-response-len 8192 " - "--rollout-temperature 0.8 " - "--global-batch-size 32 " - "--balance-data " - ) - - perf_args = ( - "--tensor-model-parallel-size 1 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 1 " - "--expert-model-parallel-size 1 " - "--expert-tensor-parallel-size 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 9216 " - ) - - grpo_args = ( - "--advantage-estimator grpo " - "--use-kl-loss " - "--kl-loss-coef 0.00 " - "--kl-loss-type low_var_kl " - "--entropy-coef 0.00 " - "--eps-clip 0.2 " - "--eps-clip-high 0.28 " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 1 " - f"--sglang-mem-fraction-static {0.6 if TIGHT_DEVICE_MEMORY else 0.7} " - "--sglang-cuda-graph-max-bs 32 " - "--sglang-enable-metrics " - ) - - ci_args = "--ci-test " - - fault_tolerance_args = ( - "--use-fault-tolerance " - "--rollout-health-check-interval 5 " - "--rollout-health-check-timeout 10 " - "--rollout-health-check-first-wait 0 " - ) - - misc_args = ( - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 4 " - "--colocate " - "--megatron-to-hf-mode bridge " - ) - - train_args = ( - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{grpo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{sglang_args} " - f"{ci_args} " - f"{fault_tolerance_args} " - f"{misc_args} " - ) - - U.execute_train( - train_args=train_args, - num_gpus_per_node=NUM_GPUS, - megatron_model_type=MODEL_TYPE, - ) - - -if __name__ == "__main__": - prepare() - os.environ.pop("http_proxy") - os.environ.pop("https_proxy") - os.environ.pop("HTTP_PROXY") - os.environ.pop("HTTPS_PROXY") - execute() diff --git a/tests/test_qwen3.6_35B_A3B_pd_mooncake.py b/tests/test_qwen3.6_35B_A3B_pd_mooncake.py deleted file mode 100644 index 83e2449dae..0000000000 --- a/tests/test_qwen3.6_35B_A3B_pd_mooncake.py +++ /dev/null @@ -1,153 +0,0 @@ -import os -import tempfile - -import slime.utils.external_utils.command_utils as U - - -MODEL_NAME = "Qwen3.6-35B-A3B" -MODEL_TYPE = "qwen3.5-35B-A3B" -NUM_GPUS = 8 -TORCH_DIST_CKPT = f"/root/models/{MODEL_NAME}_torch_dist" - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") - U.hf_download_dataset("zhuzilin/dapo-math-17k") - U.hf_download_dataset("zhuzilin/aime-2024") - U.convert_checkpoint( - model_name=MODEL_NAME, - megatron_model_type=MODEL_TYPE, - num_gpus_per_node=NUM_GPUS, - dir_dst="/root/models", - ) - - -def execute(): - debug_data_path = os.environ.get("DEBUG_ROLLOUT_DATA") or tempfile.mktemp( - prefix="qwen3_6_35b_a3b_pd_rollout_", suffix=".pt" - ) - try: - os.remove(debug_data_path) - except FileNotFoundError: - pass - print(f"Saving debug rollout data to {debug_data_path}") - - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME} " f"--ref-load {TORCH_DIST_CKPT} " - - rollout_args = ( - "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " - "--input-key prompt " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type deepscaler " - "--num-rollout 2 " - "--rollout-batch-size 8 " - "--n-samples-per-prompt 4 " - "--rollout-max-response-len 16384 " - "--rollout-temperature 1.0 " - "--global-batch-size 32 " - ) - - eval_args = ( - "--eval-prompt-data aime24 /root/datasets/aime-2024/aime-2024.jsonl " - "--n-samples-per-eval-prompt 2 " - "--eval-max-response-len 16384 " - "--eval-temperature 0.6 " - "--eval-top-p 0.95 " - ) - - perf_args = ( - "--tensor-model-parallel-size 2 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 2 " - "--expert-model-parallel-size 8 " - "--expert-tensor-parallel-size 1 " - "--recompute-granularity full " - "--recompute-method uniform " - "--recompute-num-layers 1 " - "--max-tokens-per-gpu 8192 " - ) - - grpo_args = ( - "--advantage-estimator grpo " - "--kl-loss-coef 0.00 " - "--kl-loss-type low_var_kl " - "--kl-coef 0.00 " - "--entropy-coef 0.00 " - "--eps-clip 0.2 " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - "--optimizer-cpu-offload " - "--overlap-cpu-optimizer-d2h-h2d " - "--use-precision-aware-optimizer " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 4 " - "--sglang-mem-fraction-static 0.75 " - "--sglang-enable-dp-attention " - "--sglang-dp-size 4 " - "--sglang-ep-size 4 " - "--sglang-enable-dp-lm-head " - "--sglang-cuda-graph-bs 1 2 4 8 16 24 32 " - "--sglang-max-running-requests 512 " - "--prefill-num-servers 1 " - "--sglang-disaggregation-transfer-backend mooncake " - "--sglang-speculative-algorithm EAGLE " - "--sglang-speculative-num-steps 3 " - "--sglang-speculative-eagle-topk 1 " - "--sglang-speculative-num-draft-tokens 4 " - "--sglang-mamba-scheduler-strategy extra_buffer " - "--sglang-enable-metrics " - ) - - misc_args = ( - "--ci-test " - f"--save-debug-rollout-data {debug_data_path} " - "--update-weight-buffer-size 2147483648 " - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " - "--colocate " - "--moe-token-dispatcher-type flex " - "--moe-enable-deepep " - ) - - train_args = ( - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{grpo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{eval_args} " - f"{sglang_args} " - f"{misc_args} " - ) - - U.execute_train( - train_args=train_args, - num_gpus_per_node=NUM_GPUS, - megatron_model_type=MODEL_TYPE, - ) - - -if __name__ == "__main__": - prepare() - for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): - os.environ.pop(proxy_var, None) - execute() diff --git a/tests/test_qwen3_0.6B_megatron_fsdp_align.py b/tests/test_qwen3_0.6B_megatron_fsdp_align.py new file mode 100644 index 0000000000..1c48f42a69 --- /dev/null +++ b/tests/test_qwen3_0.6B_megatron_fsdp_align.py @@ -0,0 +1,154 @@ +import os + +import slime.utils.external_utils.command_utils as U + +MODEL_NAME = "Qwen3-0.6B" +MODEL_TYPE = "qwen3-0.6B" +NUM_GPUS = 4 +CP_SIZE = 1 +MEGATRON_TP_SIZE = 1 +MEGATRON_PP_SIZE = 1 + + +def prepare(): + U.exec_command("mkdir -p /root/models /root/datasets") + U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.hf_download_dataset("zhuzilin/dapo-math-17k") + + U.convert_checkpoint( + model_name=MODEL_NAME, + megatron_model_type=MODEL_TYPE, + num_gpus_per_node=NUM_GPUS, + dir_dst="/root/models", + ) + + +def execute(): + ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/" + + rollout_args = ( + "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " + "--input-key prompt " + "--label-key label " + "--apply-chat-template " + "--rollout-shuffle " + "--rm-type deepscaler " + "--num-rollout 1 " + "--rollout-batch-size 8 " + "--n-samples-per-prompt 4 " + "--rollout-max-response-len 8192 " + "--rollout-temperature 1 " + "--global-batch-size 64 " + "--use-dynamic-batch-size " + "--max-tokens-per-gpu 8192 " + ) + + ppo_args = ( + "--advantage-estimator grpo " + "--kl-loss-coef 0.00 " + "--kl-loss-type k1 " + "--kl-coef 0.00 " + "--entropy-coef 0.00 " + "--eps-clip 4e-4 " + ) + + optimizer_args = ( + "--optimizer adam " + "--lr 1e-6 " + "--lr-decay-style constant " + "--weight-decay 0.1 " + "--adam-beta1 0.9 " + "--adam-beta2 0.98 " + ) + + sglang_args = ( + "--rollout-num-gpus-per-engine 1 " + "--sglang-chunked-prefill-size 4096 " + "--sglang-mem-fraction-static 0.75 " + "--sglang-cuda-graph-max-bs 32 " + ) + + ci_args = "--ci-test " + + misc_args = "--actor-num-nodes 1 " "--colocate " f"--actor-num-gpus-per-node {NUM_GPUS} " + + train_args = ( + f"{ckpt_args} " + f"{rollout_args} " + f"{optimizer_args} " + f"{ppo_args} " + f"{U.get_default_wandb_args(__file__)} " + f"{sglang_args} " + f"{ci_args} " + f"{misc_args} " + ) + + debug_data_path = "test_rollout_data_megatron_fsdp_align.pt" + grad_norm_path = "grad_norm_fsdp.pt" + + fsdp_args = ( + "--train-backend fsdp " + "--attn-implementation flash_attention_2 " + "--gradient-checkpointing " + f"--update-weight-buffer-size {512 * 1024 * 1024} " + """--train-env-vars '{"PYTORCH_CUDA_ALLOC_CONF":"expandable_segments:True"}' """ + ) + + try: + U.execute_train( + train_args=train_args + (f"{fsdp_args}" f"--save-debug-rollout-data {debug_data_path} "), + num_gpus_per_node=NUM_GPUS, + megatron_model_type=None, + ) + + U.execute_train( + train_args=train_args + + ( + f"{fsdp_args}" + f"--load-debug-rollout-data {debug_data_path} " + f"--ci-save-grad-norm {grad_norm_path} " + "--debug-train-only " + ), + num_gpus_per_node=NUM_GPUS, + megatron_model_type=None, + ) + + U.execute_train( + train_args=train_args + + ( + f"--ref-load /root/models/{MODEL_NAME}_torch_dist " + f"--tensor-model-parallel-size {MEGATRON_TP_SIZE} " + "--sequence-parallel " + f"--pipeline-model-parallel-size {MEGATRON_PP_SIZE} " + f"--context-parallel-size {CP_SIZE} " + "--expert-model-parallel-size 1 " + "--expert-tensor-parallel-size 1 " + "--recompute-granularity full " + "--recompute-method uniform " + "--recompute-num-layers 1 " + "--train-memory-margin-bytes 3221225472 " + f"--load-debug-rollout-data {debug_data_path} " + f"--ci-load-grad-norm {grad_norm_path} " + "--attention-dropout 0.0 " + "--hidden-dropout 0.0 " + "--accumulate-allreduce-grads-in-fp32 " + "--attention-softmax-in-fp32 " + "--attention-backend flash " + "--debug-train-only " + ), + num_gpus_per_node=NUM_GPUS, + megatron_model_type=MODEL_TYPE, + ) + + finally: + if os.path.exists(grad_norm_path): + os.remove(grad_norm_path) + if os.path.exists(debug_data_path): + os.remove(debug_data_path) + + +if __name__ == "__main__": + prepare() + for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): + os.environ.pop(proxy_var, None) + execute() diff --git a/tests/test_qwen3_30B_A3B_r3.py b/tests/test_qwen3_30B_A3B_r3.py index 71d87a3919..9beeb57686 100644 --- a/tests/test_qwen3_30B_A3B_r3.py +++ b/tests/test_qwen3_30B_A3B_r3.py @@ -77,6 +77,7 @@ def execute(): "--eps-clip 4e-4 " "--use-tis " "--use-rollout-routing-replay " + "--use-slime-router " ) optimizer_args = ( diff --git a/tests/test_qwen3_4B_fsdp_true_on_policy.py b/tests/test_qwen3_4B_fsdp_true_on_policy.py new file mode 100644 index 0000000000..b365ddf665 --- /dev/null +++ b/tests/test_qwen3_4B_fsdp_true_on_policy.py @@ -0,0 +1,123 @@ +import os +from argparse import ArgumentParser +import slime.utils.external_utils.command_utils as U + +ENABLE_EVAL = bool(int(os.environ.get("SLIME_TEST_ENABLE_EVAL", "1"))) +NUM_GPUS = 4 + +MODEL_NAME = "Qwen3-4B" + +parser = ArgumentParser() +parser.add_argument("--colocated", action="store_true", help="Whether to run with colocate.") + + +def prepare(): + U.exec_command("mkdir -p /root/models /root/datasets") + U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.hf_download_dataset("zhuzilin/dapo-math-17k") + U.hf_download_dataset("zhuzilin/aime-2024") + + +def execute(args): + ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME} " + + rollout_args = ( + "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " + "--input-key prompt " + "--label-key label " + "--apply-chat-template " + "--rollout-shuffle " + "--rm-type math " + "--num-rollout 3 " + "--rollout-batch-size 8 " + "--n-samples-per-prompt 4 " + "--rollout-max-response-len 4096 " + "--rollout-temperature 1 " + "--global-batch-size 64 " + ) + + eval_args = ( + f"{'--eval-interval 20 ' if ENABLE_EVAL else ''}" + "--eval-prompt-data aime /root/datasets/aime-2024/aime-2024.jsonl " + "--n-samples-per-eval-prompt 1 " + "--eval-max-response-len 4096 " + "--eval-top-p 0.7 " + ) + + fsdp_args = "--train-backend fsdp " "--update-weight-buffer-size 536870912 " + + grpo_args = ( + "--advantage-estimator grpo " + "--kl-loss-coef 0.00 " + "--kl-loss-type low_var_kl " + "--kl-coef 0.00 " + "--entropy-coef 0.00 " + "--eps-clip 0.2 " + "--eps-clip-high 0.28 " + ) + + optimizer_args = ( + "--optimizer adam " + "--lr 1e-6 " + "--lr-decay-style constant " + "--weight-decay 0.1 " + "--adam-beta1 0.9 " + "--adam-beta2 0.98 " + ) + + sglang_args = ( + "--rollout-num-gpus-per-engine 1 " + "--sglang-decode-log-interval 1000 " + "--sglang-cuda-graph-max-bs 32 " + "--sglang-enable-metrics " + "--sglang-enable-deterministic-inference " + "--sglang-rl-on-policy-target fsdp " + "--sglang-attention-backend fa3 " + "--attn-implementation flash_attention_3 " + "--deterministic-mode " + "--true-on-policy-mode " + ) + + ci_args = "--ci-test " + + if args.colocated: + misc_args = f"--actor-num-nodes 1 --actor-num-gpus-per-node {NUM_GPUS} --colocate " + else: + misc_args = ( + f"--actor-num-nodes 1 --actor-num-gpus-per-node {NUM_GPUS // 2} --rollout-num-gpus {NUM_GPUS // 2} " + ) + + train_args = ( + f"{ckpt_args} " + f"{rollout_args} " + f"{optimizer_args} " + f"{grpo_args} " + f"{U.get_default_wandb_args(__file__)} " + f"{fsdp_args} " + f"{eval_args} " + f"{sglang_args} " + f"{ci_args} " + f"{misc_args} " + ) + + extra_env_vars = { + "NCCL_ALGO": "allreduce:tree", + "NVTE_ALLOW_NONDETERMINISTIC_ALGO": "0", + "CUBLAS_WORKSPACE_CONFIG": ":4096:8", + "CUDA_DEVICE_MAX_CONNECTIONS": "1", + } + + U.execute_train( + train_args=train_args, + num_gpus_per_node=NUM_GPUS, + megatron_model_type=None, + extra_env_vars=extra_env_vars, + ) + + +if __name__ == "__main__": + args = parser.parse_args() + prepare() + for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): + os.environ.pop(proxy_var, None) + execute(args) diff --git a/tests/test_qwen3_4B_ppo.py b/tests/test_qwen3_4B_ppo.py index 9b9105f499..b800c19fed 100644 --- a/tests/test_qwen3_4B_ppo.py +++ b/tests/test_qwen3_4B_ppo.py @@ -1,5 +1,4 @@ import os -import tempfile import slime.utils.external_utils.command_utils as U @@ -22,22 +21,6 @@ def prepare(): def execute(): - megatron_config = tempfile.NamedTemporaryFile("w", suffix=".yaml", delete=False) - megatron_config.write( - """ -megatron: - - name: default - role: critic - overrides: - lr: 1e-5 - - name: default - role: actor - overrides: - lr: 1e-6 -""" - ) - megatron_config.close() - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/{MODEL_NAME}_torch_dist " rollout_args = ( @@ -86,6 +69,7 @@ def execute(): "--eps-clip 4e-4 " "--num-critic-only-steps 1 " "--normalize-advantages " + "--critic-lr 1e-5 " ) optimizer_args = ( @@ -118,12 +102,11 @@ def execute(): # need to comment this when using model with MLA "--attention-backend flash " "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " + "--actor-num-gpus-per-node 4 " "--colocate " ) train_args = ( - f"--megatron-config-path {megatron_config.name} " f"{ckpt_args} " f"{rollout_args} " f"{optimizer_args} " diff --git a/tests/test_qwen3_4B_ppo_disaggregate.py b/tests/test_qwen3_4B_ppo_disaggregate.py deleted file mode 100644 index 52119a5b67..0000000000 --- a/tests/test_qwen3_4B_ppo_disaggregate.py +++ /dev/null @@ -1,150 +0,0 @@ -import os -import tempfile - -import slime.utils.external_utils.command_utils as U - - -ENABLE_EVAL = bool(int(os.environ.get("SLIME_TEST_ENABLE_EVAL", "1"))) -TIGHT_HOST_MEMORY = bool(int(os.environ.get("SLIME_TEST_TIGHT_HOST_MEMORY", "1"))) - -MODEL_NAME = "Qwen3-4B" -MODEL_TYPE = "qwen3-4B" -NUM_GPUS = 8 - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command("hf download Qwen/Qwen3-4B --local-dir /root/models/Qwen3-4B") - U.hf_download_dataset("zhuzilin/dapo-math-17k") - U.hf_download_dataset("zhuzilin/aime-2024") - - U.convert_checkpoint(model_name=MODEL_NAME, megatron_model_type=MODEL_TYPE, num_gpus_per_node=NUM_GPUS) - - -def execute(): - megatron_config = tempfile.NamedTemporaryFile("w", suffix=".yaml", delete=False) - megatron_config.write( - """ -megatron: - - name: default - role: critic - overrides: - lr: 1e-5 - - name: default - role: actor - overrides: - lr: 1e-6 -""" - ) - megatron_config.close() - - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/{MODEL_NAME}_torch_dist " - - rollout_args = ( - "--prompt-data /root/datasets/dapo-math-17k/dapo-math-17k.jsonl " - "--input-key prompt " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type deepscaler " - "--num-rollout 3 " - "--rollout-batch-size 8 " - "--n-samples-per-prompt 4 " - "--rollout-max-response-len 8192 " - "--rollout-temperature 0.8 " - "--global-batch-size 32 " - "--balance-data " - ) - - eval_args = ( - f"{'--eval-interval 20 ' if ENABLE_EVAL else ''}" - "--eval-prompt-data aime24 /root/datasets/aime-2024/aime-2024.jsonl " - "--n-samples-per-eval-prompt 1 " - "--eval-max-response-len 16384 " - "--eval-top-k 1 " - ) - - perf_args = ( - "--tensor-model-parallel-size 2 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 2 " - "--recompute-granularity full " - "--recompute-method uniform " - "--recompute-num-layers 1 " - "--use-dynamic-batch-size " - f"--max-tokens-per-gpu {2048 if TIGHT_HOST_MEMORY else 16384} " - ) - - ppo_args = ( - "--advantage-estimator ppo " - f"{'' if TIGHT_HOST_MEMORY else '--use-kl-loss '}" - "--kl-loss-coef 0.00 " - "--kl-loss-type k1 " - "--kl-coef 0.00 " - "--entropy-coef 0.00 " - "--eps-clip 4e-4 " - "--num-critic-only-steps 1 " - "--normalize-advantages " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 2 " - "--rollout-num-gpus 4 " - "--sglang-mem-fraction-static 0.8 " - "--sglang-cuda-graph-max-bs 32 " - "--sglang-max-running-requests 512 " - "--sglang-enable-metrics " - ) - - ci_args = "--ci-test " - - misc_args = ( - # default dropout in megatron is 0.1 - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - # should be good for model performance - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - # need to comment this when using model with MLA - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 4 " - ) - - train_args = ( - f"--megatron-config-path {megatron_config.name} " - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{ppo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{eval_args} " - f"{sglang_args} " - f"{ci_args} " - f"{misc_args} " - ) - - U.execute_train( - train_args=train_args, - num_gpus_per_node=NUM_GPUS, - megatron_model_type=MODEL_TYPE, - ) - - -if __name__ == "__main__": - # TODO also use typer - prepare() - for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): - os.environ.pop(proxy_var, None) - execute() diff --git a/tests/test_qwen3_4B_ppo_train_critic_only.py b/tests/test_qwen3_4B_ppo_train_critic_only.py index f0e1b19e08..64859a5716 100644 --- a/tests/test_qwen3_4B_ppo_train_critic_only.py +++ b/tests/test_qwen3_4B_ppo_train_critic_only.py @@ -1,5 +1,4 @@ import os -import tempfile import slime.utils.external_utils.command_utils as U @@ -22,22 +21,6 @@ def prepare(): def execute(): - megatron_config = tempfile.NamedTemporaryFile("w", suffix=".yaml", delete=False) - megatron_config.write( - """ -megatron: - - name: default - role: critic - overrides: - lr: 1e-5 - - name: default - role: actor - overrides: - lr: 1e-6 -""" - ) - megatron_config.close() - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/{MODEL_NAME}_torch_dist " rollout_args = ( @@ -84,8 +67,9 @@ def execute(): "--kl-coef 0.00 " "--entropy-coef 0.00 " "--eps-clip 4e-4 " - "--num-critic-only-steps 3 " + "--critic-train-only " "--normalize-advantages " + "--critic-lr 1e-5 " ) optimizer_args = ( @@ -99,7 +83,7 @@ def execute(): sglang_args = ( "--rollout-num-gpus-per-engine 2 " - "--rollout-num-gpus 8 " + "--rollout-num-gpus 4 " "--sglang-mem-fraction-static 0.8 " "--sglang-max-running-requests 512 " "--sglang-enable-metrics " @@ -116,13 +100,13 @@ def execute(): "--attention-softmax-in-fp32 " # need to comment this when using model with MLA "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " - "--colocate " + "--actor-num-nodes 0 " + "--actor-num-gpus-per-node 0 " + "--critic-num-nodes 1 " + "--critic-num-gpus-per-node 4 " ) train_args = ( - f"--megatron-config-path {megatron_config.name} " f"{ckpt_args} " f"{rollout_args} " f"{optimizer_args} " diff --git a/tests/test_qwen3_5_mtp_bridge_mapping.py b/tests/test_qwen3_5_mtp_bridge_mapping.py deleted file mode 100644 index cb304ab5db..0000000000 --- a/tests/test_qwen3_5_mtp_bridge_mapping.py +++ /dev/null @@ -1,242 +0,0 @@ -import importlib.util -import sys -import types -from pathlib import Path - -import pytest -import torch - - -def install_bridge_stubs(): - megatron_mod = types.ModuleType("megatron") - core_mod = types.ModuleType("megatron.core") - models_mod = types.ModuleType("megatron.core.models") - gpt_mod = types.ModuleType("megatron.core.models.gpt") - gpt_layer_specs_mod = types.ModuleType("megatron.core.models.gpt.gpt_layer_specs") - gpt_layer_specs_mod.get_gpt_mtp_block_spec = lambda _config, transformer_layer_spec, **_kwargs: ( - "mtp-spec", - transformer_layer_spec, - ) - - mbridge_mod = types.ModuleType("mbridge") - mbridge_core_mod = types.ModuleType("mbridge.core") - mbridge_models_mod = types.ModuleType("mbridge.models") - - def register_model(_names): - def decorator(cls): - return cls - - return decorator - - class Qwen2MoEBridge: - _MLP_MAPPING = { - "shared_experts.linear_fc1.weight": [ - "model.layers.{layer_number}.mlp.shared_expert.gate_proj.weight", - "model.layers.{layer_number}.mlp.shared_expert.up_proj.weight", - ], - "pre_mlp_layernorm": ["model.layers.{layer_number}.post_attention_layernorm.weight"], - "shared_experts.linear_fc2.weight": ["model.layers.{layer_number}.mlp.shared_expert.down_proj.weight"], - "mlp.router.weight": ["model.layers.{layer_number}.mlp.gate.weight"], - "shared_experts.gate_weight": ["model.layers.{layer_number}.mlp.shared_expert_gate.weight"], - "mlp.experts.linear_fc1": [ - "model.layers.{layer_number}.mlp.experts.{expert_id}.gate_proj.weight", - "model.layers.{layer_number}.mlp.experts.{expert_id}.up_proj.weight", - ], - "mlp.experts.linear_fc2": ["model.layers.{layer_number}.mlp.experts.{expert_id}.down_proj.weight"], - } - - def _weight_name_mapping_mlp(self, name: str) -> list[str]: - layer_number = name.split(".")[2] - convert_names = [] - for keyword, mapping_names in self._MLP_MAPPING.items(): - if keyword in name: - if "{expert_id}" in mapping_names[0]: - expert_id = name.split("weight")[-1] - convert_names.extend( - [x.format(layer_number=layer_number, expert_id=expert_id) for x in mapping_names] - ) - else: - convert_names.extend([x.format(layer_number=layer_number) for x in mapping_names]) - break - if len(convert_names) == 0: - raise NotImplementedError(f"Unsupported parameter name: {name}") - return convert_names - - def _weight_name_mapping_attention(self, name: str) -> list[str]: - raise NotImplementedError(f"Unexpected attention mapping lookup: {name}") - - def _get_transformer_layer_spec(self, vp_stage=None): - return "REAL_LAYER_SPEC" if vp_stage is None else f"REAL_LAYER_SPEC_VP{vp_stage}" - - def _get_gptmodel_args(self) -> dict: - return {"base": "ok"} - - def _model_provider(self, callbacks): - def provider(pre_process, post_process, vp_stage=None): - transformer_layer_spec = self._get_transformer_layer_spec(vp_stage) - gptmodel_args = self._get_gptmodel_args() - return {"transformer_layer_spec": transformer_layer_spec, **gptmodel_args} - - return provider - - def _weight_to_mcore_format(self, _mcore_weights_name, hf_weights): - assert len(hf_weights) == 1 - return hf_weights[0] - - def _weight_to_hf_format(self, mcore_weights_name, mcore_weights): - return [mcore_weights_name], [mcore_weights] - - def _build_base_config(self, **kwargs): - return kwargs - - mbridge_core_mod.register_model = register_model - mbridge_models_mod.Qwen2MoEBridge = Qwen2MoEBridge - - sys.modules["megatron"] = megatron_mod - sys.modules["megatron.core"] = core_mod - sys.modules["megatron.core.models"] = models_mod - sys.modules["megatron.core.models.gpt"] = gpt_mod - sys.modules["megatron.core.models.gpt.gpt_layer_specs"] = gpt_layer_specs_mod - sys.modules["mbridge"] = mbridge_mod - sys.modules["mbridge.core"] = mbridge_core_mod - sys.modules["mbridge.models"] = mbridge_models_mod - - -def load_bridge_module(): - install_bridge_stubs() - module_path = Path(__file__).resolve().parents[1] / "slime_plugins" / "mbridge" / "qwen3_5.py" - module_name = "test_qwen3_5_bridge_module" - sys.modules.pop(module_name, None) - spec = importlib.util.spec_from_file_location(module_name, module_path) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return module - - -def load_raw_export_module(): - module_path = ( - Path(__file__).resolve().parents[1] / "slime" / "backends" / "megatron_utils" / "megatron_to_hf" / "qwen3_5.py" - ) - module_name = "test_qwen3_5_raw_export_module" - sys.modules.pop(module_name, None) - spec = importlib.util.spec_from_file_location(module_name, module_path) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return module - - -@pytest.mark.unit -def test_mtp_moe_expert_mapping_uses_individual_hf_weights(): - module = load_bridge_module() - bridge = module.Qwen3_5Bridge.__new__(module.Qwen3_5Bridge) - - fc1_names = bridge._convert_mtp_param("mtp.layers.0.transformer_layer.mlp.experts.linear_fc1.weight42") - fc2_names = bridge._convert_mtp_param("mtp.layers.0.transformer_layer.mlp.experts.linear_fc2.weight42") - - assert fc1_names == [ - "mtp.layers.0.mlp.experts.42.gate_proj.weight", - "mtp.layers.0.mlp.experts.42.up_proj.weight", - ] - assert fc2_names == ["mtp.layers.0.mlp.experts.42.down_proj.weight"] - - -@pytest.mark.unit -def test_mtp_dense_mlp_mapping_still_uses_dense_hf_weights(): - module = load_bridge_module() - bridge = module.Qwen3_5Bridge.__new__(module.Qwen3_5Bridge) - - fc1_names = bridge._convert_mtp_param("mtp.layers.0.transformer_layer.mlp.linear_fc1.weight") - fc2_names = bridge._convert_mtp_param("mtp.layers.0.transformer_layer.mlp.linear_fc2.weight") - - assert fc1_names == ["mtp.layers.0.mlp.gate_proj.weight", "mtp.layers.0.mlp.up_proj.weight"] - assert fc2_names == ["mtp.layers.0.mlp.down_proj.weight"] - - -@pytest.mark.unit -def test_mtp_block_spec_uses_current_transformer_layer_spec(): - module = load_bridge_module() - bridge = module.Qwen3_5Bridge.__new__(module.Qwen3_5Bridge) - bridge.config = "CONFIG_OBJECT" - bridge.hf_config = types.SimpleNamespace(text_config=types.SimpleNamespace(mtp_num_hidden_layers=1)) - - provider = bridge._model_provider([]) - result = provider(True, True, vp_stage=3) - - assert result["transformer_layer_spec"] == "REAL_LAYER_SPEC_VP3" - assert result["mtp_block_spec"] == ("mtp-spec", "REAL_LAYER_SPEC_VP3") - - -@pytest.mark.unit -def test_tied_qwen3_5_uses_language_embedding_for_output_layer(): - module = load_bridge_module() - bridge = module.Qwen3_5Bridge.__new__(module.Qwen3_5Bridge) - bridge.hf_config = types.SimpleNamespace(text_config=types.SimpleNamespace(tie_word_embeddings=True)) - - bridge._adjust_mapping_for_shared_weights() - - assert bridge._DIRECT_MAPPING["output_layer.weight"] == "model.language_model.embed_tokens.weight" - assert module.Qwen3_5Bridge._DIRECT_MAPPING["output_layer.weight"] == "lm_head.weight" - - -@pytest.mark.unit -def test_eh_proj_keeps_column_order_when_loading_to_mcore(): - module = load_bridge_module() - bridge = module.Qwen3_5Bridge.__new__(module.Qwen3_5Bridge) - - weight = torch.arange(24, dtype=torch.float32).view(3, 8) - converted = bridge._weight_to_mcore_format("mtp.layers.0.eh_proj.weight", [weight]) - - assert torch.equal(converted, weight) - - -@pytest.mark.unit -def test_build_config_enables_gated_attention_when_transformer_config_supports_it(): - module = load_bridge_module() - bridge = module.Qwen3_5Bridge.__new__(module.Qwen3_5Bridge) - bridge.hf_config = types.SimpleNamespace(text_config=types.SimpleNamespace(mtp_num_hidden_layers=1)) - bridge.TransformerConfigClass = types.SimpleNamespace( - __dataclass_fields__={ - "mtp_num_layers": None, - "attention_output_gate": None, - "use_gated_attention": None, - } - ) - - config = bridge._build_config() - - assert config["mtp_num_layers"] == 1 - assert config["attention_output_gate"] is True - assert config["use_gated_attention"] is True - - -@pytest.mark.unit -def test_build_config_skips_gated_attention_when_transformer_config_does_not_support_it(): - module = load_bridge_module() - bridge = module.Qwen3_5Bridge.__new__(module.Qwen3_5Bridge) - bridge.hf_config = types.SimpleNamespace(text_config=types.SimpleNamespace(mtp_num_hidden_layers=1)) - bridge.TransformerConfigClass = types.SimpleNamespace( - __dataclass_fields__={ - "mtp_num_layers": None, - "attention_output_gate": None, - } - ) - - config = bridge._build_config() - - assert config["mtp_num_layers"] == 1 - assert config["attention_output_gate"] is True - assert "use_gated_attention" not in config - - -@pytest.mark.unit -def test_raw_qwen3_5_mtp_export_keeps_eh_proj_column_order(): - module = load_raw_export_module() - - weight = torch.arange(24, dtype=torch.float32).view(3, 8) - converted = module.convert_qwen3_5_to_hf( - types.SimpleNamespace(), "module.module.mtp.layers.0.eh_proj.weight", weight - ) - - assert converted == [("mtp.fc.weight", weight)] diff --git a/tests/test_qwen3_linear_attention_cu_seqlens.py b/tests/test_qwen3_linear_attention_cu_seqlens.py deleted file mode 100644 index 7107561fa5..0000000000 --- a/tests/test_qwen3_linear_attention_cu_seqlens.py +++ /dev/null @@ -1,165 +0,0 @@ -from __future__ import annotations - -import importlib -import sys -import types -from types import SimpleNamespace - -import pytest -import torch -import torch.nn as nn - - -def install_megatron_stubs() -> None: - if "megatron" in sys.modules: - return - - megatron_mod = types.ModuleType("megatron") - core_mod = types.ModuleType("megatron.core") - models_mod = types.ModuleType("megatron.core.models") - gpt_mod = types.ModuleType("megatron.core.models.gpt") - gpt_layer_specs_mod = types.ModuleType("megatron.core.models.gpt.gpt_layer_specs") - inference_mod = types.ModuleType("megatron.core.inference") - inference_contexts_mod = types.ModuleType("megatron.core.inference.contexts") - packed_seq_mod = types.ModuleType("megatron.core.packed_seq_params") - transformer_mod = types.ModuleType("megatron.core.transformer") - transformer_module_mod = types.ModuleType("megatron.core.transformer.module") - spec_utils_mod = types.ModuleType("megatron.core.transformer.spec_utils") - transformer_block_mod = types.ModuleType("megatron.core.transformer.transformer_block") - transformer_layer_mod = types.ModuleType("megatron.core.transformer.transformer_layer") - - class PackedSeqParams: - def __init__(self, **kwargs): - for key, value in kwargs.items(): - setattr(self, key, value) - - class MegatronModule(nn.Module): - def __init__(self, config=None): - super().__init__() - self.config = config - - class ModuleSpec: - def __init__(self, module=None, params=None): - self.module = module - self.params = params or {} - - mpu_stub = types.SimpleNamespace( - get_context_parallel_world_size=lambda: 1, - get_context_parallel_group=lambda: None, - get_context_parallel_rank=lambda: 0, - get_tensor_model_parallel_group=lambda: None, - ) - tensor_parallel_stub = types.SimpleNamespace( - gather_from_sequence_parallel_region=lambda x, group=None: x, - scatter_to_sequence_parallel_region=lambda x, group=None: x, - ) - - gpt_layer_specs_mod.get_gpt_decoder_block_spec = lambda *args, **kwargs: None - inference_contexts_mod.BaseInferenceContext = type("BaseInferenceContext", (), {}) - packed_seq_mod.PackedSeqParams = PackedSeqParams - transformer_module_mod.MegatronModule = MegatronModule - spec_utils_mod.ModuleSpec = ModuleSpec - transformer_block_mod.get_num_layers_to_build = lambda *args, **kwargs: 0 - transformer_layer_mod.get_transformer_layer_offset = lambda *args, **kwargs: 0 - - core_mod.mpu = mpu_stub - core_mod.tensor_parallel = tensor_parallel_stub - - sys.modules["megatron"] = megatron_mod - sys.modules["megatron.core"] = core_mod - sys.modules["megatron.core.models"] = models_mod - sys.modules["megatron.core.models.gpt"] = gpt_mod - sys.modules["megatron.core.models.gpt.gpt_layer_specs"] = gpt_layer_specs_mod - sys.modules["megatron.core.inference"] = inference_mod - sys.modules["megatron.core.inference.contexts"] = inference_contexts_mod - sys.modules["megatron.core.packed_seq_params"] = packed_seq_mod - sys.modules["megatron.core.transformer"] = transformer_mod - sys.modules["megatron.core.transformer.module"] = transformer_module_mod - sys.modules["megatron.core.transformer.spec_utils"] = spec_utils_mod - sys.modules["megatron.core.transformer.transformer_block"] = transformer_block_mod - sys.modules["megatron.core.transformer.transformer_layer"] = transformer_layer_mod - - -class FakeShortConvolution(nn.Module): - def __init__(self, *args, **kwargs): - super().__init__() - - def forward(self, x, cu_seqlens=None, **kwargs): - return x, None - - -class FakeFusedRMSNormGated(nn.Module): - def __init__(self, *args, **kwargs): - super().__init__() - - def forward(self, x, z): - return x - - -def make_config() -> SimpleNamespace: - return SimpleNamespace( - hidden_size=32, - linear_num_value_heads=4, - linear_num_key_heads=2, - linear_key_head_dim=8, - linear_value_head_dim=8, - linear_conv_kernel_dim=4, - hidden_act="silu", - rms_norm_eps=1e-6, - dtype=torch.float32, - ) - - -def load_module(module_name: str): - install_megatron_stubs() - sys.modules.pop("slime_plugins.models.hf_attention", None) - sys.modules.pop(module_name, None) - return importlib.import_module(module_name) - - -@pytest.mark.unit -@pytest.mark.parametrize( - ("module_name", "class_name"), - [ - ("slime_plugins.models.qwen3_5", "Qwen3_5GatedDeltaNet"), - ("slime_plugins.models.qwen3_next", "Qwen3NextGatedDeltaNet"), - ], -) -def test_linear_attention_forwards_cu_seqlens_to_chunk_kernel(monkeypatch, module_name: str, class_name: str): - module = load_module(module_name) - - monkeypatch.setattr(module.torch.cuda, "current_device", lambda: "cpu") - monkeypatch.setattr(module, "ShortConvolution", FakeShortConvolution) - monkeypatch.setattr(module, "FusedRMSNormGated", FakeFusedRMSNormGated) - - chunk_calls = [] - - def fake_chunk_gated_delta_rule( - q, - k, - v, - *, - g, - beta, - initial_state, - output_final_state, - use_qk_l2norm_in_kernel, - cu_seqlens=None, - **kwargs, - ): - chunk_calls.append(cu_seqlens.clone() if cu_seqlens is not None else None) - assert q.shape[0] == 1 - assert cu_seqlens is not None - return torch.zeros_like(v), None - - monkeypatch.setattr(module, "chunk_gated_delta_rule", fake_chunk_gated_delta_rule) - - layer = getattr(module, class_name)(make_config(), layer_idx=0) - hidden_states = torch.randn(1, 7, 32) - cu_seqlens = torch.tensor([0, 3, 7], dtype=torch.int32) - - output = layer(hidden_states, cu_seqlens=cu_seqlens) - - assert output.shape == hidden_states.shape - assert len(chunk_calls) == 1 - assert torch.equal(chunk_calls[0], cu_seqlens) diff --git a/tests/test_qwen3_vl_4B_fsdp.py b/tests/test_qwen3_vl_4B_fsdp.py new file mode 100644 index 0000000000..5509cad29c --- /dev/null +++ b/tests/test_qwen3_vl_4B_fsdp.py @@ -0,0 +1,117 @@ +import os +import slime.utils.external_utils.command_utils as U + +ENABLE_EVAL = bool(int(os.environ.get("SLIME_TEST_ENABLE_EVAL", "1"))) +NUM_GPUS = 8 + +MODEL_NAME = "Qwen3-VL-4B-Instruct" +DATASET_NAME = "chenhegu/geo3k_imgurl" + + +def prepare(): + U.exec_command("mkdir -p /root/models /root/datasets") + U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") + U.hf_download_dataset(DATASET_NAME) + + +def execute(): + ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME} " + + rollout_args = ( + "--prompt-data /root/datasets/geo3k_imgurl/train.parquet " + "--input-key problem " + "--label-key answer " + "--apply-chat-template " + "--rollout-shuffle " + "--rm-type math " + "--num-rollout 3 " + "--rollout-batch-size 8 " + "--n-samples-per-prompt 4 " + "--rollout-max-response-len 4096 " + "--rollout-temperature 1 " + "--global-batch-size 32 " + ) + + # multimodal keys required for vlm datasets + multimodal_args = '--multimodal-keys \'{"image": "images"}\' ' + + eval_args = ( + f"{'--eval-interval 20 ' if ENABLE_EVAL else ''}" + "--eval-prompt-data geo3k /root/datasets/geo3k_imgurl/test.parquet " + "--n-samples-per-eval-prompt 1 " + "--eval-max-response-len 4096 " + ) + + fsdp_args = "--train-backend fsdp " "--gradient-checkpointing " "--update-weight-buffer-size 536870912 " + + grpo_args = ( + "--advantage-estimator grpo " + "--kl-loss-coef 0.00 " + "--kl-loss-type low_var_kl " + "--kl-coef 0.00 " + "--entropy-coef 0.00 " + "--eps-clip 0.2 " + "--eps-clip-high 0.28 " + ) + + optimizer_args = ( + "--optimizer adam " + "--lr 1e-6 " + "--lr-decay-style constant " + "--weight-decay 0.1 " + "--adam-beta1 0.9 " + "--adam-beta2 0.98 " + ) + + sglang_args = ( + "--rollout-num-gpus-per-engine 1 " + "--sglang-mem-fraction-static 0.6 " + "--sglang-decode-log-interval 1000 " + "--sglang-enable-metrics " + # "--sglang-enable-deterministic-inference " + # "--sglang-rl-on-policy-target fsdp " + "--sglang-attention-backend fa3 " + "--attn-implementation flash_attention_3 " + "--sglang-cuda-graph-max-bs 32 " + # "--deterministic-mode " + # "--true-on-policy-mode " + ) + + ci_args = "--ci-test " + + misc_args = "--actor-num-nodes 1 " f"--actor-num-gpus-per-node {NUM_GPUS} " "--colocate " + + train_args = ( + f"{ckpt_args} " + f"{rollout_args} " + f"{multimodal_args} " + f"{optimizer_args} " + f"{grpo_args} " + f"{U.get_default_wandb_args(__file__)} " + f"{fsdp_args} " + f"{eval_args} " + f"{sglang_args} " + f"{ci_args} " + f"{misc_args} " + ) + + extra_env_vars = { + # "NCCL_ALGO": "allreduce:tree", + # "NVTE_ALLOW_NONDETERMINISTIC_ALGO": "0", + # "CUBLAS_WORKSPACE_CONFIG": ":4096:8", + "CUDA_DEVICE_MAX_CONNECTIONS": "1", + } + + U.execute_train( + train_args=train_args, + num_gpus_per_node=NUM_GPUS, + megatron_model_type=None, + extra_env_vars=extra_env_vars, + ) + + +if __name__ == "__main__": + prepare() + for proxy_var in ("http_proxy", "https_proxy", "HTTP_PROXY", "HTTPS_PROXY"): + os.environ.pop(proxy_var, None) + execute() diff --git a/tests/test_sglang_config_mixed_offload.py b/tests/test_sglang_config_mixed_offload.py deleted file mode 100644 index 90d3d97389..0000000000 --- a/tests/test_sglang_config_mixed_offload.py +++ /dev/null @@ -1,158 +0,0 @@ -"""E2E test: mixed offload with updatable + frozen models. - -Deploys two models via --sglang-config in colocate mode: - - "actor": update_weights=true, 4 GPUs → overlaps with megatron, gets offloaded - and weights updated from training. - - "ref": update_weights=false, 4 GPUs → overlaps with megatron, gets offloaded - and weights restored from disk (update_weights_from_disk). - -Key coverage: - - Per-group needs_offload (both overlap with megatron in colocate mode) - - update_weights_from_disk for frozen model - - Selective flush_cache (only for offloaded / updatable engines) - - Offload/onload cycle completes without crash -""" - -import os -import tempfile - -import slime.utils.external_utils.command_utils as U - -TIGHT_DEVICE_MEMORY = U.get_bool_env_var("SLIME_TEST_TIGHT_DEVICE_MEMORY", "1") - -MODEL_NAME = "Qwen2.5-0.5B-Instruct" -MODEL_TYPE = "qwen2.5-0.5B" -NUM_GPUS = 8 - -# Two models on 8 GPUs (colocate): actor gets weight updates, ref is frozen. -SGLANG_CONFIG_YAML = """\ -sglang: - - name: actor - update_weights: true - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 1 - - name: ref - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 1 -""" - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") - U.hf_download_dataset("zhuzilin/gsm8k") - - -def execute(): - config_file = tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", prefix="sglang_mixed_offload_", delete=False) - config_file.write(SGLANG_CONFIG_YAML) - config_file.flush() - config_path = config_file.name - - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/models/{MODEL_NAME}/ " - - rollout_args = ( - "--prompt-data /root/datasets/gsm8k/train.parquet " - "--input-key messages " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type math " - "--num-rollout 3 " - "--rollout-batch-size 8 " - "--n-samples-per-prompt 4 " - "--rollout-max-response-len 512 " - "--rollout-temperature 0.8 " - "--global-batch-size 32 " - ) - - eval_args = ( - "--eval-interval 20 " - "--eval-prompt-data gsm8k /root/datasets/gsm8k/test.parquet " - "--n-samples-per-eval-prompt 1 " - "--eval-max-response-len 512 " - "--eval-top-k 1 " - ) - - perf_args = ( - "--tensor-model-parallel-size 1 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 1 " - "--expert-model-parallel-size 1 " - "--expert-tensor-parallel-size 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 4096 " - ) - - grpo_args = ( - "--advantage-estimator grpo " - "--use-kl-loss " - "--kl-loss-coef 0.00 " - "--kl-loss-type low_var_kl " - "--entropy-coef 0.00 " - "--eps-clip 0.2 " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 1 " - f"--sglang-mem-fraction-static {0.6 if TIGHT_DEVICE_MEMORY else 0.7} " - "--sglang-cuda-graph-max-bs 32 " - f"--sglang-config {config_path} " - ) - - ci_args = "--ci-test " - - misc_args = ( - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " - "--colocate " - "--megatron-to-hf-mode bridge " - ) - - train_args = ( - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{grpo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{eval_args} " - f"{sglang_args} " - f"{ci_args} " - f"{misc_args} " - ) - - U.execute_train( - train_args=train_args, - num_gpus_per_node=NUM_GPUS, - megatron_model_type=MODEL_TYPE, - ) - - -if __name__ == "__main__": - prepare() - os.environ.pop("http_proxy", None) - os.environ.pop("https_proxy", None) - os.environ.pop("HTTP_PROXY", None) - os.environ.pop("HTTPS_PROXY", None) - execute() diff --git a/tests/test_sglang_config_mixed_offload_ft.py b/tests/test_sglang_config_mixed_offload_ft.py deleted file mode 100644 index f017965c5f..0000000000 --- a/tests/test_sglang_config_mixed_offload_ft.py +++ /dev/null @@ -1,165 +0,0 @@ -"""E2E test: mixed offload with fault tolerance. - -Same two-model layout as test_sglang_config_mixed_offload.py but with -fault tolerance enabled. --ci-test triggers a simulated engine crash -on the updatable (actor) server, testing: - - Health monitor detects crash and marks engine as None - - RolloutServer.recover() restarts the dead engine - - Updatable engines: offload → resume_memory_occupation → update_weights - - Non-updatable engines: offload → update_weights_from_disk - - Training continues after recovery -""" - -import os -import tempfile - -import slime.utils.external_utils.command_utils as U - -TIGHT_DEVICE_MEMORY = U.get_bool_env_var("SLIME_TEST_TIGHT_DEVICE_MEMORY", "1") - -MODEL_NAME = "Qwen2.5-0.5B-Instruct" -MODEL_TYPE = "qwen2.5-0.5B" -NUM_GPUS = 8 - -# Two models on 8 GPUs (colocate): actor gets weight updates, ref is frozen. -SGLANG_CONFIG_YAML = """\ -sglang: - - name: actor - update_weights: true - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 1 - - name: ref - update_weights: false - server_groups: - - worker_type: regular - num_gpus: 4 - num_gpus_per_engine: 1 -""" - - -def prepare(): - U.exec_command("mkdir -p /root/models /root/datasets") - U.exec_command(f"hf download Qwen/{MODEL_NAME} --local-dir /root/models/{MODEL_NAME}") - U.hf_download_dataset("zhuzilin/gsm8k") - - -def execute(): - config_file = tempfile.NamedTemporaryFile( - mode="w", suffix=".yaml", prefix="sglang_mixed_offload_ft_", delete=False - ) - config_file.write(SGLANG_CONFIG_YAML) - config_file.flush() - config_path = config_file.name - - ckpt_args = f"--hf-checkpoint /root/models/{MODEL_NAME}/ " f"--ref-load /root/models/{MODEL_NAME}/ " - - rollout_args = ( - "--prompt-data /root/datasets/gsm8k/train.parquet " - "--input-key messages " - "--label-key label " - "--apply-chat-template " - "--rollout-shuffle " - "--rm-type math " - "--num-rollout 3 " - "--rollout-batch-size 8 " - "--n-samples-per-prompt 4 " - "--rollout-max-response-len 512 " - "--rollout-temperature 0.8 " - "--global-batch-size 32 " - ) - - eval_args = ( - "--eval-interval 20 " - "--eval-prompt-data gsm8k /root/datasets/gsm8k/test.parquet " - "--n-samples-per-eval-prompt 1 " - "--eval-max-response-len 512 " - "--eval-top-k 1 " - ) - - perf_args = ( - "--tensor-model-parallel-size 1 " - "--sequence-parallel " - "--pipeline-model-parallel-size 1 " - "--context-parallel-size 1 " - "--expert-model-parallel-size 1 " - "--expert-tensor-parallel-size 1 " - "--use-dynamic-batch-size " - "--max-tokens-per-gpu 4096 " - ) - - grpo_args = ( - "--advantage-estimator grpo " - "--use-kl-loss " - "--kl-loss-coef 0.00 " - "--kl-loss-type low_var_kl " - "--entropy-coef 0.00 " - "--eps-clip 0.2 " - ) - - optimizer_args = ( - "--optimizer adam " - "--lr 1e-6 " - "--lr-decay-style constant " - "--weight-decay 0.1 " - "--adam-beta1 0.9 " - "--adam-beta2 0.98 " - ) - - sglang_args = ( - "--rollout-num-gpus-per-engine 1 " - f"--sglang-mem-fraction-static {0.6 if TIGHT_DEVICE_MEMORY else 0.7} " - "--sglang-cuda-graph-max-bs 32 " - f"--sglang-config {config_path} " - ) - - ci_args = "--ci-test " - - fault_tolerance_args = ( - "--use-fault-tolerance " - "--rollout-health-check-interval 5 " - "--rollout-health-check-timeout 10 " - "--rollout-health-check-first-wait 0 " - ) - - misc_args = ( - "--attention-dropout 0.0 " - "--hidden-dropout 0.0 " - "--accumulate-allreduce-grads-in-fp32 " - "--attention-softmax-in-fp32 " - "--attention-backend flash " - "--actor-num-nodes 1 " - "--actor-num-gpus-per-node 8 " - "--colocate " - "--megatron-to-hf-mode bridge " - ) - - train_args = ( - f"{ckpt_args} " - f"{rollout_args} " - f"{optimizer_args} " - f"{grpo_args} " - f"{U.get_default_wandb_args(__file__)} " - f"{perf_args} " - f"{eval_args} " - f"{sglang_args} " - f"{ci_args} " - f"{fault_tolerance_args} " - f"{misc_args} " - ) - - U.execute_train( - train_args=train_args, - num_gpus_per_node=NUM_GPUS, - megatron_model_type=MODEL_TYPE, - ) - - -if __name__ == "__main__": - prepare() - os.environ.pop("http_proxy", None) - os.environ.pop("https_proxy", None) - os.environ.pop("HTTP_PROXY", None) - os.environ.pop("HTTPS_PROXY", None) - execute() diff --git a/tests/utils/test_loss_mask_type_qwen35.py b/tests/utils/test_loss_mask_type_qwen35.py deleted file mode 100644 index 69ffd1513f..0000000000 --- a/tests/utils/test_loss_mask_type_qwen35.py +++ /dev/null @@ -1,236 +0,0 @@ -from slime.utils.mask_utils import MultiTurnLossMaskGenerator - - -class FakeQwen35Tokenizer: - """A tiny char-level tokenizer that models the Qwen3.5 assistant formatting rule. - - The critical behavior we need for these tests is: - 1. `add_generation_prompt=True` appends `<|im_start|>assistant\n\n` - 2. Only assistant turns after the last non-tool user query are wrapped in - `...` - """ - - assistant_generation_prompt = "<|im_start|>assistant\n\n" - - def __call__(self, text, add_special_tokens=False, return_offsets_mapping=False): - encoded = {"input_ids": [ord(ch) for ch in text]} - if return_offsets_mapping: - encoded["offset_mapping"] = [(index, index + 1) for index in range(len(text))] - return encoded - - def decode(self, token_ids): - return "".join(chr(token_id) for token_id in token_ids) - - def apply_chat_template( - self, - messages, - tokenize=True, - tools=None, - add_generation_prompt=False, - return_dict=False, - add_special_tokens=False, - **kwargs, - ): - rendered = self.render(messages, add_generation_prompt=add_generation_prompt) - if tokenize: - return [ord(ch) for ch in rendered] - return rendered - - def render(self, messages, add_generation_prompt=False): - rendered, _ = self.render_with_expected_mask(messages, add_generation_prompt=add_generation_prompt) - return rendered - - def render_with_expected_mask(self, messages, add_generation_prompt=False): - if not messages: - raise ValueError("No messages provided.") - - pieces = [] - mask = [] - last_query_index = self._find_last_query_index(messages) - has_assistant = any(message["role"] == "assistant" for message in messages) - if has_assistant and last_query_index is None: - raise ValueError("No user query found in messages.") - - for index, message in enumerate(messages): - role = message["role"] - if role == "system": - if index != 0: - raise ValueError("System message must be at the beginning.") - piece = f"<|im_start|>system\n{message['content']}<|im_end|>\n" - pieces.append(piece) - mask.extend([0] * len(piece)) - continue - - if role == "user": - piece = f"<|im_start|>user\n{message['content']}<|im_end|>\n" - pieces.append(piece) - mask.extend([0] * len(piece)) - continue - - if role == "tool": - piece = "" - if index > 0 and messages[index - 1]["role"] != "tool": - piece += "<|im_start|>user" - piece += f"\n\n{message['content']}\n" - if index == len(messages) - 1 or messages[index + 1]["role"] != "tool": - piece += "<|im_end|>\n" - pieces.append(piece) - mask.extend([0] * len(piece)) - continue - - if role != "assistant": - raise NotImplementedError(f"Unsupported role in test tokenizer: {role}") - - reasoning, answer = self._split_assistant_content(message["content"]) - if index > last_query_index: - prefix = "<|im_start|>assistant\n\n" - target = f"{reasoning}\n\n\n{answer}" - else: - prefix = "<|im_start|>assistant\n" - target = answer - - target += self._render_tool_calls(answer, message.get("tool_calls")) - target += "<|im_end|>\n" - - pieces.append(prefix + target) - mask.extend([0] * len(prefix)) - mask.extend([1] * len(target)) - - if add_generation_prompt: - pieces.append(self.assistant_generation_prompt) - mask.extend([0] * len(self.assistant_generation_prompt)) - - return "".join(pieces), mask - - @staticmethod - def _split_assistant_content(content): - if "" not in content: - return "", content - reasoning = content.split("")[0].split("")[-1].strip("\n") - answer = content.split("")[-1].lstrip("\n") - return reasoning, answer - - @staticmethod - def _render_tool_calls(answer, tool_calls): - if not tool_calls: - return "" - - pieces = [] - for index, tool_call in enumerate(tool_calls): - function_call = tool_call.get("function", tool_call) - function_name = function_call["name"] - if index == 0: - if answer.strip(): - pieces.append(f"\n\n\n\n") - else: - pieces.append(f"\n\n") - else: - pieces.append(f"\n\n\n") - - for argument_name, argument_value in function_call.get("arguments", {}).items(): - pieces.append(f"\n") - pieces.append(str(argument_value)) - pieces.append("\n\n") - - pieces.append("\n") - - return "".join(pieces) - - @staticmethod - def _find_last_query_index(messages): - last_query_index = None - for index, message in enumerate(messages): - if message["role"] == "user": - last_query_index = index - return last_query_index - - -def test_qwen3_and_qwen3_5_match_on_single_turn_qwen35_data(): - tokenizer = FakeQwen35Tokenizer() - messages = [ - {"role": "system", "content": "SYSTEM"}, - {"role": "user", "content": "USER"}, - {"role": "assistant", "content": "REASONING\nANSWER"}, - ] - - expected_text, expected_mask = tokenizer.render_with_expected_mask(messages) - expected_token_ids = tokenizer(expected_text, add_special_tokens=False)["input_ids"] - - for loss_mask_type in ("qwen3", "qwen3_5"): - generator = MultiTurnLossMaskGenerator(tokenizer, tokenizer_type=loss_mask_type) - token_ids, loss_mask = generator.get_loss_mask(messages) - assert token_ids == expected_token_ids - assert loss_mask == expected_mask - - -def test_qwen3_and_qwen3_5_diverge_on_multi_turn_qwen35_data(): - tokenizer = FakeQwen35Tokenizer() - messages = [ - {"role": "system", "content": "SYSTEM"}, - {"role": "user", "content": "USER_1"}, - {"role": "assistant", "content": "ANSWER_1"}, - {"role": "user", "content": "USER_2"}, - {"role": "assistant", "content": "REASONING_2\nANSWER_2"}, - ] - - expected_text, expected_mask = tokenizer.render_with_expected_mask(messages) - expected_token_ids = tokenizer(expected_text, add_special_tokens=False)["input_ids"] - - qwen3_generator = MultiTurnLossMaskGenerator(tokenizer, tokenizer_type="qwen3") - qwen35_generator = MultiTurnLossMaskGenerator(tokenizer, tokenizer_type="qwen3_5") - - qwen3_token_ids, qwen3_loss_mask = qwen3_generator.get_loss_mask(messages) - qwen35_token_ids, qwen35_loss_mask = qwen35_generator.get_loss_mask(messages) - - assert qwen3_token_ids != qwen35_token_ids - assert qwen3_loss_mask != qwen35_loss_mask - - # `qwen3` is incompatible with the real Qwen3.5 full-text rendering: - # it rebuilds each assistant turn in isolation and fabricates a `` block - # for the earlier assistant answer. - assert qwen3_token_ids != expected_token_ids - assert qwen3_loss_mask != expected_mask - - # `qwen3_5` matches the expected full-text rendering and supervises every - # assistant turn in the full conversation. - assert qwen35_token_ids == expected_token_ids - assert qwen35_loss_mask == expected_mask - - assert qwen3_generator.get_text_from_loss_mask(qwen3_token_ids, qwen3_loss_mask) == [ - "\n\n\nANSWER_1<|im_end|>\n", - "REASONING_2\n\n\nANSWER_2<|im_end|>\n", - ] - expected_selected_texts = [ - "ANSWER_1<|im_end|>\n", - "REASONING_2\n\n\nANSWER_2<|im_end|>\n", - ] - assert qwen35_generator.get_text_from_loss_mask(qwen35_token_ids, qwen35_loss_mask) == expected_selected_texts - assert qwen35_generator.get_text_from_loss_mask(expected_token_ids, expected_mask) == expected_selected_texts - - -def test_qwen3_5_matches_expected_mask_for_tool_call_flow(): - tokenizer = FakeQwen35Tokenizer() - messages = [ - {"role": "system", "content": "SYSTEM"}, - {"role": "user", "content": "USER"}, - { - "role": "assistant", - "content": "TOOL_CALL", - "tool_calls": [{"function": {"name": "terminal", "arguments": {"command": "ls"}}}], - }, - {"role": "tool", "content": "README.md"}, - {"role": "assistant", "content": "REASONING\nFINAL"}, - ] - - expected_text, expected_mask = tokenizer.render_with_expected_mask(messages) - expected_token_ids = tokenizer(expected_text, add_special_tokens=False)["input_ids"] - - generator = MultiTurnLossMaskGenerator(tokenizer, tokenizer_type="qwen3_5") - token_ids, loss_mask = generator.get_loss_mask(messages) - - assert token_ids == expected_token_ids - assert loss_mask == expected_mask - assert generator.get_text_from_loss_mask(token_ids, loss_mask) == [ - "\n\n\nTOOL_CALL\n\n\n\n\nls\n\n\n<|im_end|>\n", - "REASONING\n\n\nFINAL<|im_end|>\n", - ] diff --git a/tests/utils/test_megatron_bridge_utils.py b/tests/utils/test_megatron_bridge_utils.py deleted file mode 100644 index d47babcaca..0000000000 --- a/tests/utils/test_megatron_bridge_utils.py +++ /dev/null @@ -1,64 +0,0 @@ -import types - -import pytest - -from slime.utils.megatron_bridge_utils import patch_auto_bridge_hf_config, patch_hf_config_for_megatron_bridge - - -@pytest.mark.unit -def test_patch_hf_config_adds_rope_theta_from_rope_parameters(): - hf_config = types.SimpleNamespace(rope_parameters={"rope_theta": 1000000}) - - patched_config = patch_hf_config_for_megatron_bridge(hf_config) - - assert patched_config is hf_config - assert hf_config.rope_theta == 1000000 - - -@pytest.mark.unit -def test_patch_hf_config_does_not_override_existing_rope_theta(): - hf_config = types.SimpleNamespace(rope_theta=500000, rope_parameters={"rope_theta": 1000000}) - - patch_hf_config_for_megatron_bridge(hf_config) - - assert hf_config.rope_theta == 500000 - - -@pytest.mark.unit -def test_patch_hf_config_handles_nested_text_config(): - text_config = types.SimpleNamespace(rope_parameters={"rope_theta": 10000}) - hf_config = types.SimpleNamespace(text_config=text_config) - - patch_hf_config_for_megatron_bridge(hf_config) - - assert text_config.rope_theta == 10000 - - -@pytest.mark.unit -def test_patch_hf_config_handles_pretrained_wrapper_config(): - wrapped_config = types.SimpleNamespace(rope_parameters={"rope_theta": 10000}) - hf_pretrained = types.SimpleNamespace(config=wrapped_config) - - patch_hf_config_for_megatron_bridge(hf_pretrained) - - assert wrapped_config.rope_theta == 10000 - - -@pytest.mark.unit -def test_patch_hf_config_uses_rope_scaling_fallback(): - hf_config = types.SimpleNamespace(rope_scaling={"rope_theta": 10000}) - - patch_hf_config_for_megatron_bridge(hf_config) - - assert hf_config.rope_theta == 10000 - - -@pytest.mark.unit -def test_patch_auto_bridge_hf_config_patches_hf_pretrained(): - hf_config = types.SimpleNamespace(rope_parameters={"rope_theta": 12345}) - bridge = types.SimpleNamespace(hf_pretrained=hf_config) - - patched_bridge = patch_auto_bridge_hf_config(bridge) - - assert patched_bridge is bridge - assert bridge.hf_pretrained.rope_theta == 12345 diff --git a/tests/utils/test_megatron_role_config.py b/tests/utils/test_megatron_role_config.py deleted file mode 100644 index 24cc37c57f..0000000000 --- a/tests/utils/test_megatron_role_config.py +++ /dev/null @@ -1,158 +0,0 @@ -"""Unit tests for Megatron role config parsing and application.""" - -import tempfile -from argparse import Namespace - -import pytest -import yaml - - -def _write_yaml(data: dict) -> str: - handle = tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) - yaml.dump(data, handle) - handle.flush() - return handle.name - - -def _base_args(**overrides): - args = dict( - lr=2e-6, - tensor_model_parallel_size=1, - kl_coef=0.1, - use_kl_loss=False, - use_opd=True, - opd_type="megatron", - custom_advantage_function_path="slime.test.adv", - untie_embeddings_and_output_weights=False, - actor_num_nodes=1, - actor_num_gpus_per_node=1, - critic_num_nodes=1, - critic_num_gpus_per_node=1, - use_critic=False, - megatron_config_path=None, - start_rollout_id=None, - rollout_global_dataset=False, - ) - args.update(overrides) - return Namespace(**args) - - -class TestMegatronRoleConfig: - def test_parse_actor_and_critic_role_overrides(self): - from slime.utils.arguments import parse_megatron_role_args - - path = _write_yaml( - { - "megatron": [ - { - "name": "default", - "role": "critic", - "overrides": {"lr": "1e-5", "tensor_model_parallel_size": 2}, - }, - {"name": "default", "role": "actor", "overrides": {"lr": "1e-6", "tensor_model_parallel_size": 4}}, - ] - } - ) - args = _base_args() - - actor_args = parse_megatron_role_args(args, path, role="actor") - critic_args = parse_megatron_role_args(args, path, role="critic") - - assert actor_args.lr == 1e-6 - assert actor_args.tensor_model_parallel_size == 4 - assert actor_args.kl_coef == args.kl_coef - assert actor_args.use_opd is args.use_opd - - assert critic_args.lr == 1e-5 - assert critic_args.tensor_model_parallel_size == 2 - assert critic_args.kl_coef == 0 - assert critic_args.use_opd is False - assert critic_args.custom_advantage_function_path is None - assert critic_args.untie_embeddings_and_output_weights is True - - def test_missing_role_inherits_base_args(self): - from slime.utils.arguments import parse_megatron_role_args - - path = _write_yaml( - { - "megatron": [ - {"name": "default", "role": "actor", "overrides": {"lr": "1e-6"}}, - ] - } - ) - args = _base_args() - - critic_args = parse_megatron_role_args(args, path, role="critic") - - assert critic_args is not args - assert critic_args.lr == args.lr - assert critic_args.kl_coef == 0 - assert critic_args.use_opd is False - - @pytest.mark.parametrize( - "config", - [ - {"critic": [{"name": "default", "overrides": {"lr": "1e-5"}}]}, - {"lr": "1e-5"}, - {}, - ], - ) - def test_requires_top_level_megatron_key(self, config): - from slime.utils.arguments import parse_megatron_role_args - - path = _write_yaml(config) - args = _base_args() - - with pytest.raises(AssertionError, match="top-level 'megatron' list"): - parse_megatron_role_args(args, path, role="critic") - - def test_create_training_models_applies_actor_override_without_critic(self, monkeypatch): - from slime.ray import placement_group as placement_group_module - - path = _write_yaml( - { - "megatron": [ - {"name": "default", "role": "actor", "overrides": {"lr": "1e-6"}}, - ] - } - ) - args = _base_args(megatron_config_path=path, use_critic=False) - - class DummyModel: - def __init__(self, model_args): - self.args = model_args - self.init_calls = [] - self.rollout_manager = None - - def async_init(self, model_args, role, with_ref=False, with_opd_teacher=False): - self.args = model_args - self.init_calls.append( - { - "args": model_args, - "role": role, - "with_ref": with_ref, - "with_opd_teacher": with_opd_teacher, - } - ) - return [7] - - def set_rollout_manager(self, rollout_manager): - self.rollout_manager = rollout_manager - - def fake_allocate_train_group(args, num_nodes, num_gpus_per_node, pg, role="actor"): - return DummyModel(args) - - monkeypatch.setattr(placement_group_module, "allocate_train_group", fake_allocate_train_group) - monkeypatch.setattr(placement_group_module.ray, "get", lambda value: value) - - actor_model, critic_model = placement_group_module.create_training_models( - args, - {"actor": None, "critic": None}, - object(), - ) - - assert critic_model is None - assert actor_model.args.lr == 1e-6 - assert actor_model.init_calls[0]["args"].lr == 1e-6 - assert actor_model.init_calls[0]["role"] == "actor" - assert args.start_rollout_id == 7 diff --git a/tests/utils/test_sglang_config.py b/tests/utils/test_sglang_config.py deleted file mode 100644 index 5015a74558..0000000000 --- a/tests/utils/test_sglang_config.py +++ /dev/null @@ -1,133 +0,0 @@ -"""Unit tests for SglangConfig multi-model parsing with update_weights.""" - -import tempfile - -import pytest -import yaml - - -def _write_yaml(data: dict) -> str: - f = tempfile.NamedTemporaryFile(mode="w", suffix=".yaml", delete=False) - yaml.dump(data, f) - f.flush() - return f.name - - -class TestSglangConfigUpdateWeights: - def test_update_weights_default_true(self): - """Models without explicit update_weights should default to True.""" - from slime.backends.sglang_utils.sglang_config import SglangConfig - - path = _write_yaml( - { - "sglang": [ - { - "name": "actor", - "engine_groups": [{"worker_type": "regular", "num_gpus": 4}], - } - ] - } - ) - config = SglangConfig.from_yaml(path) - assert len(config.models) == 1 - assert config.models[0].update_weights is True - - def test_update_weights_explicit_false(self): - """Models with update_weights: false should be parsed correctly.""" - from slime.backends.sglang_utils.sglang_config import SglangConfig - - path = _write_yaml( - { - "sglang": [ - { - "name": "actor", - "update_weights": True, - "engine_groups": [{"worker_type": "regular", "num_gpus": 4}], - }, - { - "name": "ref", - "update_weights": False, - "model_path": "/path/to/ref", - "engine_groups": [{"worker_type": "regular", "num_gpus": 2}], - }, - ] - } - ) - config = SglangConfig.from_yaml(path) - assert len(config.models) == 2 - assert config.models[0].name == "actor" - assert config.models[0].update_weights is True - assert config.models[1].name == "ref" - assert config.models[1].update_weights is False - assert config.models[1].model_path == "/path/to/ref" - - def test_multi_model_total_gpus(self): - """total_num_gpus should sum across all models.""" - from slime.backends.sglang_utils.sglang_config import SglangConfig - - path = _write_yaml( - { - "sglang": [ - { - "name": "actor", - "server_groups": [{"worker_type": "regular", "num_gpus": 8}], - }, - { - "name": "ref", - "update_weights": False, - "server_groups": [{"worker_type": "regular", "num_gpus": 4}], - }, - ] - } - ) - config = SglangConfig.from_yaml(path) - assert config.total_num_gpus == 12 - - -class TestGetModelUrl: - def test_get_model_url_basic(self): - """get_model_url should return the correct URL for a named model.""" - from argparse import Namespace - - from slime.rollout.sglang_rollout import get_model_url - - args = Namespace( - sglang_router_ip="10.0.0.1", - sglang_router_port=3000, - sglang_model_routers={ - "actor": ("10.0.0.1", 3000), - "ref": ("10.0.0.1", 3001), - }, - ) - assert get_model_url(args, "actor") == "http://10.0.0.1:3000/generate" - assert get_model_url(args, "ref") == "http://10.0.0.1:3001/generate" - assert get_model_url(args, "ref", "/v1/chat/completions") == "http://10.0.0.1:3001/v1/chat/completions" - - def test_get_model_url_fallback(self): - """get_model_url should fall back to default router if model not found.""" - from argparse import Namespace - - from slime.rollout.sglang_rollout import get_model_url - - args = Namespace( - sglang_router_ip="10.0.0.1", - sglang_router_port=3000, - sglang_model_routers={"actor": ("10.0.0.1", 3000)}, - ) - assert get_model_url(args, "unknown") == "http://10.0.0.1:3000/generate" - - def test_get_model_url_no_routers(self): - """get_model_url should work when sglang_model_routers is not set.""" - from argparse import Namespace - - from slime.rollout.sglang_rollout import get_model_url - - args = Namespace( - sglang_router_ip="10.0.0.1", - sglang_router_port=3000, - ) - assert get_model_url(args, "anything") == "http://10.0.0.1:3000/generate" - - -if __name__ == "__main__": - pytest.main([__file__, "-v"]) diff --git a/tests/utils/test_trace_utils.py b/tests/utils/test_trace_utils.py deleted file mode 100644 index 01a6b527b8..0000000000 --- a/tests/utils/test_trace_utils.py +++ /dev/null @@ -1,83 +0,0 @@ -import importlib.util -import sys -from pathlib import Path - -import pytest -import torch - -from slime.utils.trace_utils import build_sglang_meta_trace_attrs, trace_span -from slime.utils.types import Sample - - -def _load_trace_timeline_viewer_module(): - module_path = Path(__file__).resolve().parents[2] / "tools" / "trace_timeline_viewer.py" - module_name = "test_trace_timeline_viewer_module" - sys.modules.pop(module_name, None) - spec = importlib.util.spec_from_file_location(module_name, module_path) - module = importlib.util.module_from_spec(spec) - assert spec is not None - assert spec.loader is not None - sys.modules[module_name] = module - spec.loader.exec_module(module) - return module - - -@pytest.mark.unit -def test_build_sglang_meta_trace_attrs_keeps_standard_and_pd_fields(): - meta = { - "prompt_tokens": 12, - "completion_tokens": 7, - "cached_tokens": 3, - "pd_prefill_forward_duration": 0.125, - "pd_decode_transfer_duration": None, - "finish_reason": {"type": "stop"}, - "unused_field": "ignored", - } - - assert build_sglang_meta_trace_attrs(meta) == { - "prompt_tokens": 12, - "completion_tokens": 7, - "cached_tokens": 3, - "pd_prefill_forward_duration": 0.125, - "finish_reason": "stop", - } - - -@pytest.mark.unit -def test_trace_timeline_viewer_omits_virtual_pd_lanes_without_pd_attrs(tmp_path: Path): - viewer = _load_trace_timeline_viewer_module() - sample = Sample(index=0, prompt="hello") - - with trace_span(sample, "sglang_generate", attrs={"max_new_tokens": 8}) as span: - span.update( - build_sglang_meta_trace_attrs( - { - "prompt_tokens": 4, - "completion_tokens": 2, - "cached_tokens": 1, - "finish_reason": {"type": "stop"}, - } - ) - ) - - pt_path = tmp_path / "rollout.pt" - torch.save({"samples": [sample]}, pt_path) - - cache = viewer._build_cache_data(pt_path) - - assert cache["sample_count"] == 1 - row = cache["rows"][0] - assert row["lane_count"] == 1 - assert row["item_count"] == 1 - assert row["closed_span_count"] == 1 - - item = row["items"][0] - assert item["name"] == "sglang_generate" - assert item["attrs"]["end_attrs"] == { - "prompt_tokens": 4, - "completion_tokens": 2, - "cached_tokens": 1, - "finish_reason": "stop", - } - assert "[P]" not in item["name"] - assert "[D]" not in item["name"] diff --git a/tools/analyze_profile.py b/tools/analyze_profile.py deleted file mode 100644 index de511744f2..0000000000 --- a/tools/analyze_profile.py +++ /dev/null @@ -1,730 +0,0 @@ -#!/usr/bin/env python3 -""" -SGLang Decode Profile Analyzer -============================== -Analyzes PyTorch profiler traces (.trace.json.gz) from SGLang decode workers. - -Usage: - python tools/analyze_profile.py --profile-dir profiles/20260303_052303_my_run - python tools/analyze_profile.py --profile-dir profiles/20260303_052303_my_run --rank 0 - python tools/analyze_profile.py --profile-dir profiles/20260303_052303_my_run --all-ranks -""" - -import argparse -import glob -import gzip -import json -import os -import sys -from collections import defaultdict -from dataclasses import dataclass, field - - -# ─── Color helpers ────────────────────────────────────────────────────────── -class C: - HEADER = "\033[95m" - BLUE = "\033[94m" - CYAN = "\033[96m" - GREEN = "\033[92m" - YELLOW = "\033[93m" - RED = "\033[91m" - BOLD = "\033[1m" - UNDERLINE = "\033[4m" - END = "\033[0m" - - -def header(text): - print(f"\n{C.BOLD}{C.HEADER}{'═' * 80}{C.END}") - print(f"{C.BOLD}{C.HEADER} {text}{C.END}") - print(f"{C.BOLD}{C.HEADER}{'═' * 80}{C.END}") - - -def section(text): - print(f"\n{C.BOLD}{C.CYAN}── {text} ──{C.END}") - - -def warn(text): - print(f" {C.YELLOW}⚠ {text}{C.END}") - - -def good(text): - print(f" {C.GREEN}✓ {text}{C.END}") - - -def bad(text): - print(f" {C.RED}✗ {text}{C.END}") - - -def bar(pct, width=40, label=""): - filled = int(pct / 100 * width) - bar_str = "█" * filled + "░" * (width - filled) - color = C.GREEN if pct >= 80 else C.YELLOW if pct >= 50 else C.RED - return f" {color}{bar_str}{C.END} {pct:5.1f}% {label}" - - -# ─── Data structures ─────────────────────────────────────────────────────── -@dataclass -class KernelInfo: - name: str - category: str - count: int = 0 - total_dur: float = 0.0 - - @property - def avg_dur(self): - return self.total_dur / max(self.count, 1) - - -@dataclass -class CudaGraphLaunch: - index: int - ts: float - dur: float - tid: int - - -@dataclass -class TraceAnalysis: - rank_name: str = "" - # Device - gpu_name: str = "" - num_gpus: int = 0 - total_vram_gb: float = 0.0 - num_sms: int = 0 - # CUDA/NCCL - cuda_version: str = "" - nccl_version: str = "" - nccl_backend: str = "" - world_size: int = 0 - pg_count: int = 0 - # Timeline - trace_wall_time_us: float = 0.0 - gpu_active_span_us: float = 0.0 - gpu_busy_time_us: float = 0.0 - gpu_util_pct: float = 0.0 - # Events - total_events: int = 0 - total_kernel_events: int = 0 - total_kernel_time_us: float = 0.0 - # Categories - kernel_categories: dict[str, KernelInfo] = field(default_factory=dict) - top_kernels: list[KernelInfo] = field(default_factory=list) - # CUDA Graph - cuda_graph_launches: list[CudaGraphLaunch] = field(default_factory=list) - cuda_graph_total_cpu_us: float = 0.0 - # Gaps - top_gaps: list[tuple[float, float, float, str]] = field(default_factory=list) # (dur, start, end, cause) - # Decode steps - decode_steps: list[dict] = field(default_factory=list) - # Per-stream - stream_info: dict[int, dict] = field(default_factory=dict) - # Communication - nccl_kernel_dur_us: float = 0.0 - deep_ep_dur_us: float = 0.0 - gloo_total_us: float = 0.0 - # CPU overhead - aten_copy_total_us: float = 0.0 - aten_copy_count: int = 0 - - -def classify_kernel(name: str) -> str: - nl = name.lower() - if "nccl" in nl: - return "NCCL Communication" - if "deep_ep" in nl: - if "dispatch" in nl: - return "DeepEP Dispatch (MoE)" - if "combine" in nl: - return "DeepEP Combine (MoE)" - if "clean" in nl: - return "DeepEP Buffer Clean" - return "DeepEP (other)" - if "flash" in nl and "attn" in nl: - return "Flash Attention" - if "sparse_attn" in nl: - return "Sparse Attention (MLA)" - if "paged_mqa" in nl: - return "Paged MQA/MLA Logits" - if "attention" in nl or "fmha" in nl: - return "Attention (other)" - if "deep_gemm" in nl or "sm90_fp8_gemm" in nl: - return "DeepGEMM (FP8)" - if "nvjet" in nl: - return "NvJet GEMM" - if "gemm" in nl or "cutlass" in nl or "matmul" in nl or "cublas" in nl: - return "GEMM/MatMul (other)" - if "topk" in nl: - return "TopK / MoE Routing" - if "quant" in nl: - return "Quantization (FP8)" - if "rmsnorm" in nl or "layernorm" in nl or "norm" in nl: - return "Normalization" - if any(k in nl for k in ["triton", "fused"]): - return "Fused/Triton Kernels" - if "elementwise" in nl or "vectorized_elementwise" in nl: - return "Elementwise Ops" - if "reduce" in nl or "softmax" in nl: - return "Reduce/Softmax" - if "embedding" in nl: - return "Embedding" - if "memcpy" in nl or "memset" in nl: - return "Memory Ops" - if "index" in nl or "scatter" in nl or "gather" in nl: - return "Index/Gather/Scatter" - if "cat" in nl and "batched" in nl: - return "Concat/Cat" - return "Other Compute" - - -def load_trace(filepath: str) -> dict: - with gzip.open(filepath, "rt") as f: - return json.load(f) - - -def analyze_trace(data: dict, rank_name: str = "") -> TraceAnalysis: - result = TraceAnalysis(rank_name=rank_name) - events = data["traceEvents"] - result.total_events = len(events) - - # ─── Device Properties ────────────────────────────────────────────── - dev_props = data.get("deviceProperties", []) - if dev_props: - result.gpu_name = dev_props[0].get("name", "Unknown") - result.num_gpus = len(dev_props) - result.total_vram_gb = dev_props[0].get("totalGlobalMem", 0) / (1024**3) - result.num_sms = dev_props[0].get("numSms", 0) - - # ─── CUDA/NCCL Info ───────────────────────────────────────────────── - cuda_rt = data.get("cuda_runtime_version", 0) - result.cuda_version = f"{cuda_rt // 1000}.{(cuda_rt % 1000) // 10}" - - dist_info = data.get("distributedInfo", {}) - result.nccl_version = dist_info.get("nccl_version", "?") - result.nccl_backend = dist_info.get("backend", "?") - result.world_size = dist_info.get("world_size", 0) - result.pg_count = dist_info.get("pg_count", 0) - - # ─── Kernel Analysis ──────────────────────────────────────────────── - kernel_events = [e for e in events if e.get("cat") == "kernel" and e.get("ph") == "X"] - result.total_kernel_events = len(kernel_events) - - kernel_cats = defaultdict(lambda: {"count": 0, "total_dur": 0.0}) - kernel_indiv = defaultdict(lambda: {"count": 0, "total_dur": 0.0}) - - for e in kernel_events: - name = e.get("name", "?") - dur = e.get("dur", 0) - cat = classify_kernel(name) - kernel_cats[cat]["count"] += 1 - kernel_cats[cat]["total_dur"] += dur - kernel_indiv[name]["count"] += 1 - kernel_indiv[name]["total_dur"] += dur - - result.total_kernel_time_us = sum(v["total_dur"] for v in kernel_cats.values()) - - for cat, info in kernel_cats.items(): - result.kernel_categories[cat] = KernelInfo( - name=cat, category=cat, count=info["count"], total_dur=info["total_dur"] - ) - - for name, info in sorted(kernel_indiv.items(), key=lambda x: -x[1]["total_dur"])[:30]: - result.top_kernels.append( - KernelInfo(name=name, category=classify_kernel(name), count=info["count"], total_dur=info["total_dur"]) - ) - - # ─── GPU Utilization ──────────────────────────────────────────────── - gpu_events = [e for e in events if e.get("cat") in ("kernel", "gpu_memcpy", "gpu_memset") and e.get("ph") == "X"] - intervals = sorted([(e["ts"], e["ts"] + e["dur"]) for e in gpu_events]) - - if intervals: - merged = [] - for s, e_end in intervals: - if merged and s <= merged[-1][1]: - merged[-1] = (merged[-1][0], max(merged[-1][1], e_end)) - else: - merged.append((s, e_end)) - - result.gpu_busy_time_us = sum(e - s for s, e in merged) - result.gpu_active_span_us = merged[-1][1] - merged[0][0] - result.gpu_util_pct = result.gpu_busy_time_us / result.gpu_active_span_us * 100 - - # Trace wall time - all_x = [(e["ts"], e["ts"] + e["dur"]) for e in events if e.get("ph") == "X" and "ts" in e and "dur" in e] - if all_x: - result.trace_wall_time_us = max(t[1] for t in all_x) - min(t[0] for t in all_x) - - # GPU idle gaps - gaps = [] - for i in range(1, len(merged)): - gap = merged[i][0] - merged[i - 1][1] - if gap > 0: - gaps.append((gap, merged[i - 1][1], merged[i][0])) - gaps.sort(reverse=True) - - # Identify cause of top gaps - cpu_ops = [ - e for e in events if e.get("cat") in ("cpu_op", "user_annotation", "cuda_runtime") and e.get("ph") == "X" - ] - for gap, gap_start, gap_end in gaps[:15]: - cause = "unknown" - for e in cpu_ops: - e_start = e.get("ts", 0) - e_end = e_start + e.get("dur", 0) - if e_start < gap_end and e_end > gap_start: - cause = e.get("name", "?") - break - result.top_gaps.append((gap, gap_start, gap_end, cause)) - - # ─── Per-stream analysis ──────────────────────────────────────────── - stream_events = defaultdict(list) - for e in gpu_events: - stream_events[e.get("tid")].append(e) - - for tid, evts in stream_events.items(): - total_dur = sum(e.get("dur", 0) for e in evts) - min_ts = min(e["ts"] for e in evts) - max_ts = max(e["ts"] + e.get("dur", 0) for e in evts) - span = max_ts - min_ts - result.stream_info[tid] = { - "count": len(evts), - "total_dur": total_dur, - "span": span, - "util": total_dur / span * 100 if span > 0 else 0, - } - - # ─── CUDA Graph analysis ─────────────────────────────────────────── - cg_launches = sorted( - [e for e in events if e.get("name") == "cudaGraphLaunch" and e.get("cat") == "cuda_runtime"], - key=lambda x: x["ts"], - ) - for i, e in enumerate(cg_launches): - result.cuda_graph_launches.append(CudaGraphLaunch(index=i, ts=e["ts"], dur=e["dur"], tid=e.get("tid", 0))) - result.cuda_graph_total_cpu_us = sum(e["dur"] for e in cg_launches) - - # Group into decode steps (3 launches per step) - for i in range(0, len(cg_launches), 3): - group = cg_launches[i : i + 3] - if len(group) == 3: - step_start = group[0]["ts"] - step_end = group[2]["ts"] + group[2]["dur"] - result.decode_steps.append( - { - "step": i // 3, - "span_us": step_end - step_start, - "launches": [g["dur"] for g in group], - "ts_start": step_start, - "ts_end": step_end, - } - ) - - # ─── Communication ────────────────────────────────────────────────── - result.nccl_kernel_dur_us = sum( - e.get("dur", 0) for e in events if e.get("cat") == "kernel" and "nccl" in e.get("name", "").lower() - ) - result.deep_ep_dur_us = sum( - e.get("dur", 0) for e in events if e.get("cat") == "kernel" and "deep_ep" in e.get("name", "") - ) - result.gloo_total_us = sum(e.get("dur", 0) for e in events if "gloo" in e.get("name", "").lower()) - - # ─── CPU overhead ─────────────────────────────────────────────────── - copy_events = [e for e in events if e.get("cat") == "cpu_op" and e.get("name") == "aten::copy_"] - result.aten_copy_total_us = sum(e.get("dur", 0) for e in copy_events) - result.aten_copy_count = len(copy_events) - - return result - - -# ─── Pretty print ────────────────────────────────────────────────────────── -def print_analysis(r: TraceAnalysis): - header(f"Profile Analysis: {r.rank_name}") - - # ── Config ────────────────────────────────────────────────────────── - section("Hardware & Config") - print(f" GPU: {C.BOLD}{r.gpu_name}{C.END} × {r.num_gpus} (visible)") - print(f" VRAM per GPU: {r.total_vram_gb:.0f} GB") - print(f" SMs per GPU: {r.num_sms}") - print(f" CUDA Version: {r.cuda_version}") - print(f" NCCL: {r.nccl_version} (backend: {r.nccl_backend})") - print(f" World Size: {r.world_size}") - print(f" Process Groups: {r.pg_count}") - print(f" Total Events: {r.total_events:,}") - - # ── Timeline ──────────────────────────────────────────────────────── - section("Timeline") - print(f" Trace Wall Time: {r.trace_wall_time_us / 1000:.1f} ms") - print(f" GPU Active Span: {r.gpu_active_span_us / 1000:.1f} ms") - print(f" GPU Busy Time: {r.gpu_busy_time_us / 1000:.1f} ms") - print(f" GPU Idle (bubbles): {(r.gpu_active_span_us - r.gpu_busy_time_us) / 1000:.1f} ms") - print() - print(f" {C.BOLD}GPU Utilization:{C.END}") - print(bar(r.gpu_util_pct, label="GPU busy")) - print(bar(100 - r.gpu_util_pct, label="GPU idle (bubbles)")) - - # ── Kernel Breakdown ──────────────────────────────────────────────── - section("GPU Kernel Time Breakdown") - total = r.total_kernel_time_us - print(f" Total kernel time: {total / 1000:.1f} ms ({r.total_kernel_events:,} kernel launches)\n") - - sorted_cats = sorted(r.kernel_categories.values(), key=lambda x: -x.total_dur) - for ki in sorted_cats: - pct = ki.total_dur / total * 100 - filled = int(pct / 100 * 30) - bar_str = "█" * filled + "░" * (30 - filled) - color = C.CYAN - if "NCCL" in ki.name or "DeepEP" in ki.name: - color = C.YELLOW - elif "GEMM" in ki.name or "NvJet" in ki.name or "DeepGEMM" in ki.name: - color = C.GREEN - elif "Attention" in ki.name or "MLA" in ki.name or "MQA" in ki.name: - color = C.BLUE - print(f" {color}{bar_str}{C.END} {pct:5.1f}% {ki.total_dur / 1000:8.1f} ms n={ki.count:5d} {ki.name}") - - # ── Top Kernels ───────────────────────────────────────────────────── - section("Top 20 Individual Kernels (by total GPU time)") - print(f" {'%':>5s} {'Total(ms)':>9s} {'Avg(us)':>8s} {'Count':>6s} Kernel") - print(f" {'─' * 5} {'─' * 9} {'─' * 8} {'─' * 6} {'─' * 50}") - for ki in r.top_kernels[:20]: - pct = ki.total_dur / total * 100 - print(f" {pct:5.1f} {ki.total_dur / 1000:9.2f} {ki.avg_dur:8.1f} {ki.count:6d} {ki.name[:90]}") - - # ── CUDA Graph ────────────────────────────────────────────────────── - section("CUDA Graph Analysis") - print(f" Total cudaGraphLaunch calls: {C.BOLD}{len(r.cuda_graph_launches)}{C.END}") - print(f" Total CPU time in cudaGraphLaunch: {C.BOLD}{r.cuda_graph_total_cpu_us / 1000:.1f} ms{C.END}") - print() - - if r.cuda_graph_launches: - # Categorize launches by duration - small = [launch for launch in r.cuda_graph_launches if launch.dur < 1000] - medium = [launch for launch in r.cuda_graph_launches if 1000 <= launch.dur < 5000] - large = [launch for launch in r.cuda_graph_launches if launch.dur >= 5000] - - print(" Launch size distribution:") - print( - f" Small (<1ms): {len(small):3d} launches, total {sum(launch.dur for launch in small) / 1000:.1f} ms" - ) - print( - f" Medium (1-5ms): {len(medium):3d} launches, total {sum(launch.dur for launch in medium) / 1000:.1f} ms" - ) - print( - f" {C.RED}Large (>5ms): {len(large):3d} launches, total {sum(launch.dur for launch in large) / 1000:.1f} ms{C.END}" - ) - - if r.decode_steps: - print("\n Decode Steps (3 cudaGraphLaunch per step):") - print(f" {'Step':>4s} {'Span(ms)':>8s} {'L1(us)':>7s} {'L2(us)':>7s} {'L3(us)':>7s} Note") - print(f" {'─' * 4} {'─' * 8} {'─' * 7} {'─' * 7} {'─' * 7} {'─' * 30}") - for step in r.decode_steps: - launches = step["launches"] - note = "" - if any(val > 10000 for val in launches): - note = f"{C.RED}← large launch stall{C.END}" - print( - f" {step['step']:4d} {step['span_us'] / 1000:8.1f} " - f"{launches[0]:7.0f} {launches[1]:7.0f} {launches[2]:7.0f} {note}" - ) - - avg_span = sum(s["span_us"] for s in r.decode_steps) / len(r.decode_steps) - print(f"\n Average decode step span: {C.BOLD}{avg_span / 1000:.1f} ms{C.END}") - print(f" Estimated decode throughput: {C.BOLD}{1e6 / avg_span:.0f} tokens/s per GPU{C.END}") - - # ── CUDA Graph Location in Timeline ───────────────────────────────── - section("CUDA Graph Locations in Timeline") - if r.cuda_graph_launches and r.gpu_active_span_us > 0: - base_ts = min(launch.ts for launch in r.cuda_graph_launches) - span = r.gpu_active_span_us - print(f" Timeline (0 = first GPU activity, total span = {span / 1000:.1f} ms):") - print() - # ASCII timeline - WIDTH = 70 - timeline = [" "] * WIDTH - for launch in r.cuda_graph_launches: - pos = int((launch.ts - base_ts) / span * WIDTH) - pos = min(pos, WIDTH - 1) - if launch.dur >= 5000: - timeline[pos] = f"{C.RED}▓{C.END}" - elif launch.dur >= 1000: - timeline[pos] = f"{C.YELLOW}▒{C.END}" - else: - timeline[pos] = f"{C.GREEN}░{C.END}" - print(f" |{''.join(timeline)}|") - print(f" 0ms{' ' * (WIDTH - 8)}{span / 1000:.0f}ms") - print( - f" Legend: {C.GREEN}░{C.END}=small(<1ms) {C.YELLOW}▒{C.END}=medium(1-5ms) {C.RED}▓{C.END}=large(>5ms)" - ) - - # ── GPU Idle Gaps ─────────────────────────────────────────────────── - section("Top GPU Idle Gaps (Bubbles)") - if r.top_gaps: - print(f" {'#':>3s} {'Gap(us)':>8s} {'Cause'}") - print(f" {'─' * 3} {'─' * 8} {'─' * 50}") - for i, (gap, _start, _end, cause) in enumerate(r.top_gaps[:10]): - color = C.RED if gap > 3000 else C.YELLOW if gap > 1000 else "" - end_c = C.END if color else "" - print(f" {i + 1:3d} {color}{gap:8.0f}{end_c} {cause}") - - # ── Per-Stream ────────────────────────────────────────────────────── - section("Per-Stream GPU Activity") - print(f" {'Stream':>8s} {'Events':>7s} {'Time(ms)':>9s} {'Span(ms)':>9s} {'Util%':>6s} Role") - print(f" {'─' * 8} {'─' * 7} {'─' * 9} {'─' * 9} {'─' * 6} {'─' * 20}") - for tid in sorted(r.stream_info.keys()): - info = r.stream_info[tid] - role = "" - if info["count"] > 50000: - role = "← main compute" - elif info["count"] > 5000: - role = "← secondary compute" - elif info["util"] < 2: - role = "← auxiliary" - print( - f" {tid:8d} {info['count']:7d} {info['total_dur'] / 1000:9.1f} " - f"{info['span'] / 1000:9.1f} {info['util']:6.1f} {role}" - ) - - # ── Communication ─────────────────────────────────────────────────── - section("Communication Overhead") - comm_total = r.nccl_kernel_dur_us + r.deep_ep_dur_us - print(f" NCCL AllGather (GPU kernel): {r.nccl_kernel_dur_us / 1000:.1f} ms") - print(f" DeepEP (MoE all-to-all): {r.deep_ep_dur_us / 1000:.1f} ms") - print(f" Gloo Broadcast (CPU): {r.gloo_total_us / 1000:.1f} ms") - print(f" Communication / Total Kernel: {comm_total / total * 100:.1f}%") - - # ── Performance Bottleneck Summary ────────────────────────────────── - header("🔍 Performance Bottleneck Analysis") - - issues = [] - - # 1. GPU utilization - if r.gpu_util_pct < 90: - issues.append( - ( - "GPU Utilization", - f"GPU utilization is {r.gpu_util_pct:.1f}% — {100 - r.gpu_util_pct:.1f}% idle bubbles " - f"({(r.gpu_active_span_us - r.gpu_busy_time_us) / 1000:.1f} ms wasted)", - "high" if r.gpu_util_pct < 80 else "medium", - ) - ) - - # 2. CUDA Graph launch overhead - large_launches = [launch for launch in r.cuda_graph_launches if launch.dur >= 5000] - if large_launches: - avg_large = sum(launch.dur for launch in large_launches) / len(large_launches) - issues.append( - ( - "CUDA Graph Launch Stalls", - f"{len(large_launches)} cudaGraphLaunch calls take >{5}ms (avg {avg_large / 1000:.1f}ms). " - f"Total: {sum(launch.dur for launch in large_launches) / 1000:.1f}ms CPU blocked. " - f"This is the {C.BOLD}#1 source of GPU bubbles{C.END}.", - "high", - ) - ) - - # 3. DeepEP dispatch latency - dep_cat = r.kernel_categories.get("DeepEP Dispatch (MoE)") - if dep_cat and dep_cat.total_dur / total > 0.15: - issues.append( - ( - "DeepEP Dispatch Dominance", - f"DeepEP dispatch takes {dep_cat.total_dur / 1000:.1f}ms ({dep_cat.total_dur / total * 100:.1f}% of kernel time). " - f"MoE expert parallelism communication is a major cost.", - "high", - ) - ) - - # 4. MoE routing overhead - topk_cat = r.kernel_categories.get("TopK / MoE Routing") - if topk_cat and topk_cat.total_dur / total > 0.05: - issues.append( - ( - "MoE Routing Overhead", - f"TopK routing takes {topk_cat.total_dur / 1000:.1f}ms ({topk_cat.total_dur / total * 100:.1f}%). " - f"topk_transform_decode_kernel is expensive at {topk_cat.avg_dur:.0f}us avg.", - "medium", - ) - ) - - # 5. CPU copy overhead - if r.aten_copy_total_us > 100000: - issues.append( - ( - "CPU aten::copy_ Overhead", - f"aten::copy_ takes {r.aten_copy_total_us / 1000:.1f}ms CPU time ({r.aten_copy_count} calls). " - f"Likely dtype conversions (BF16→FP8) stalling the CPU.", - "medium", - ) - ) - - # 6. Small kernel launches - small_kernels = sum(1 for k in r.top_kernels if k.avg_dur < 3) - if small_kernels > 5: - issues.append( - ( - "Many Tiny Kernels", - f"{small_kernels} of top-30 kernels have avg duration <3us. " - f"Launch overhead may exceed compute. Consider kernel fusion.", - "low", - ) - ) - - for issue_name, desc, severity in issues: - color = C.RED if severity == "high" else C.YELLOW if severity == "medium" else C.CYAN - sev_label = {"high": "HIGH", "medium": "MED", "low": "LOW"}[severity] - print(f"\n {color}[{sev_label}]{C.END} {C.BOLD}{issue_name}{C.END}") - print(f" {desc}") - - # ── Optimization Recommendations ──────────────────────────────────── - header("💡 Optimization Recommendations") - - recs = [] - - # Based on detected issues - if any("CUDA Graph Launch" in i[0] for i in issues): - recs.append( - ( - "Reduce CUDA Graph Re-capture / Launch Latency", - [ - "The large cudaGraphLaunch (13-16ms) occurs once per decode step — this is the MoE expert " - "portion that runs OUTSIDE the CUDA graph (DeepEP dispatch/combine + NCCL allgather).", - "The 3-launch pattern per step = (1) pre-MoE graph, (2) post-MoE graph, (3) MoE-expert graph.", - "Optimization: try increasing decode batch size to amortize graph launch overhead per token.", - "Check if `--sglang-disable-cuda-graph` helps isolate whether the overhead is in graph " - "management vs. actual compute.", - "Consider padding batch sizes to avoid frequent graph re-capture for different sizes.", - ], - ) - ) - - if any("DeepEP" in i[0] for i in issues): - recs.append( - ( - "Optimize MoE Expert Parallelism (DeepEP)", - [ - f"DeepEP dispatch+combine = {r.deep_ep_dur_us / 1000:.1f}ms/step = " - f"{r.deep_ep_dur_us / total * 100:.1f}% of GPU time — this is all-to-all expert communication.", - "dispatch (76.8us avg × 1556 calls) dominates over combine (29.4us avg).", - "Consider: reduce number of MoE layers, or reduce EP degree if not fully utilizing all experts.", - "Ensure NVLink/NVSwitch bandwidth is saturated (H100 should be 900 GB/s bidirectional).", - "Check if low-latency mode for DeepEP is enabled — the clean_buffer kernel (700us avg) suggests " - "low-latency mode is active.", - ], - ) - ) - - if any("TopK" in i[0] for i in issues): - recs.append( - ( - "Optimize MoE TopK Routing", - [ - "topk_transform_decode_kernel at 49us avg is expensive for decode (small batch).", - "Consider using a more efficient routing algorithm or fusing TopK with dispatch.", - ], - ) - ) - - recs.append( - ( - "General Decode Throughput", - [ - ( - f"Current: ~{1e6 / (sum(s['span_us'] for s in r.decode_steps) / max(len(r.decode_steps), 1)):.0f} tokens/s/GPU " - f"(avg {sum(s['span_us'] for s in r.decode_steps) / max(len(r.decode_steps), 1) / 1000:.1f}ms/step)." - if r.decode_steps - else "No decode step data." - ), - "Increase batch size to improve GPU SM occupancy — many kernels are memory-bound at small batch.", - "Speculative decoding could help if generation is latency-bound.", - "Verify `--sglang-mem-fraction-static` is set high enough for large KV cache.", - ], - ) - ) - - for i, (title, items) in enumerate(recs): - print(f"\n {C.BOLD}{i + 1}. {title}{C.END}") - for item in items: - print(f" • {item}") - - -def print_cross_rank_summary(analyses: list[TraceAnalysis]): - header("Cross-Rank Comparison") - print( - f" {'Rank':<25s} {'Span(ms)':>9s} {'Busy(ms)':>9s} {'Util%':>6s} " - f"{'Kernel(ms)':>10s} {'DeepEP(ms)':>10s} {'GEMM(ms)':>9s} {'NCCL(ms)':>9s}" - ) - print(f" {'─' * 25} {'─' * 9} {'─' * 9} {'─' * 6} {'─' * 10} {'─' * 10} {'─' * 9} {'─' * 9}") - - for r in analyses: - gemm_dur = sum( - ki.total_dur - for ki in r.kernel_categories.values() - if "GEMM" in ki.name or "NvJet" in ki.name or "DeepGEMM" in ki.name - ) - print( - f" {r.rank_name:<25s} {r.gpu_active_span_us / 1000:9.1f} {r.gpu_busy_time_us / 1000:9.1f} " - f"{r.gpu_util_pct:6.1f} {r.total_kernel_time_us / 1000:10.1f} " - f"{r.deep_ep_dur_us / 1000:10.1f} {gemm_dur / 1000:9.1f} {r.nccl_kernel_dur_us / 1000:9.1f}" - ) - - utils = [r.gpu_util_pct for r in analyses] - spans = [r.gpu_active_span_us for r in analyses] - print(f"\n Utilization range: {min(utils):.1f}% ~ {max(utils):.1f}% (spread: {max(utils) - min(utils):.1f}%)") - print(f" Span range: {min(spans) / 1000:.1f}ms ~ {max(spans) / 1000:.1f}ms") - - if max(utils) - min(utils) > 5: - warn("Significant load imbalance detected across ranks (>5% spread).") - else: - good("Load balance across ranks is reasonable (<5% spread).") - - -def main(): - parser = argparse.ArgumentParser(description="Analyze SGLang decode profile traces") - parser.add_argument("--profile-dir", type=str, required=True, help="Directory containing .trace.json.gz files") - parser.add_argument("--rank", type=int, default=None, help="Specific rank to analyze (default: first file)") - parser.add_argument("--all-ranks", action="store_true", help="Analyze all ranks and show comparison") - parser.add_argument("--top-n", type=int, default=20, help="Number of top kernels to show") - args = parser.parse_args() - - files = sorted(glob.glob(os.path.join(args.profile_dir, "*.trace.json.gz"))) - if not files: - print(f"No .trace.json.gz files found in {args.profile_dir}") - sys.exit(1) - - print(f"Found {len(files)} trace files in {args.profile_dir}") - - if args.all_ranks: - analyses = [] - for fpath in files: - basename = os.path.basename(fpath) - # Extract rank info - parts = basename.split("-") - rank_name = "-".join(parts[1:]).replace(".trace.json.gz", "") - print(f" Loading {rank_name}...", end=" ", flush=True) - data = load_trace(fpath) - analysis = analyze_trace(data, rank_name) - analyses.append(analysis) - print("done") - # Full analysis of first rank - print_analysis(analyses[0]) - # Cross-rank comparison - print_cross_rank_summary(analyses) - else: - if args.rank is not None: - target = f"TP-{args.rank}" - matching = [f for f in files if target in f] - if not matching: - print(f"No file found for rank {args.rank}") - sys.exit(1) - fpath = matching[0] - else: - fpath = files[0] - - basename = os.path.basename(fpath) - rank_name = "-".join(basename.split("-")[1:]).replace(".trace.json.gz", "") - print(f"Analyzing: {basename}") - - data = load_trace(fpath) - analysis = analyze_trace(data, rank_name) - print_analysis(analysis) - - -if __name__ == "__main__": - main() diff --git a/tools/convert_fsdp_to_hf.py b/tools/convert_fsdp_to_hf.py new file mode 100644 index 0000000000..ff1ee30ea1 --- /dev/null +++ b/tools/convert_fsdp_to_hf.py @@ -0,0 +1,185 @@ +import argparse +import os +import pickle +import shutil +import time + +import torch +import torch.distributed.checkpoint as dist_cp +from transformers import AutoConfig, AutoModelForCausalLM, AutoModelForImageTextToText +from typing_extensions import override + + +class UnpicklerWrapper(pickle.Unpickler): + @override + def find_class(self, mod_name, name): + class DummyClass: + def __init__(self, *args, **kwargs): + pass + + if mod_name.startswith("megatron") or mod_name.startswith("glm"): + return DummyClass + return super().find_class(mod_name, name) + + +class WrappedStorageReader(dist_cp.FileSystemReader): + @override + def read_metadata(self): + path = self.fs.concat_path(self.path, ".metadata") + with self.fs.create_stream(path, "rb") as metadata_file: + metadata = UnpicklerWrapper(metadata_file).load() + if getattr(metadata, "storage_meta", None) is None: + metadata.storage_meta = dist_cp.StorageMeta() + metadata.storage_meta.load_id = self.load_id + if metadata.planner_data is None: + metadata.planner_data = {} + return metadata + + +class EmptyStateDictLoadPlanner(dist_cp.default_planner.DefaultLoadPlanner): + @override + def set_up_planner( + self, + state_dict: dist_cp.metadata.STATE_DICT_TYPE, + metadata: dist_cp.metadata.Metadata | None = None, + is_coordinator: bool = False, + ) -> None: + for k, v in metadata.state_dict_metadata.items(): + if "optimizer" in k: + continue + print(f"find {k} in torch_dist ckpt") + if isinstance(v, dist_cp.metadata.TensorStorageMetadata): + v = torch.empty(v.size, dtype=v.properties.dtype) # type: ignore[assignment] + state_dict[k] = v + super().set_up_planner(state_dict, metadata, is_coordinator) + + +def _detect_model_dir(input_dir: str) -> str: + model_dir = os.path.join(input_dir, "model") + return model_dir if os.path.isdir(model_dir) else input_dir + + +def _load_fsdp_state_dict(input_dir: str) -> dict[str, torch.Tensor]: + state_dict: dict[str, torch.Tensor] = {} + dist_cp.state_dict_loader._load_state_dict( + state_dict, + storage_reader=WrappedStorageReader(input_dir), + planner=EmptyStateDictLoadPlanner(), + no_dist=True, + ) + return state_dict + + +def _get_candidate_prefixes(keys: list[str]) -> list[str]: + predefined = [ + "model_state.model.", + "model_state.", + "model.", + "module.", + "", + ] + + detected: set[str] = set() + for key in keys: + for prefix in predefined: + if prefix and key.startswith(prefix): + detected.add(prefix) + + # Always keep empty string as a fall back option for exact match. + detected.add("") + # Preserve predefined order while keeping only detected prefixes. + return [p for p in predefined if p in detected] + + +def _strip_best_prefix(keys: list[str], target_keys: set[str]) -> tuple[str, int]: + best_prefix = "" + best_match = -1 + + for prefix in _get_candidate_prefixes(keys): + mapped_keys = {k.removeprefix(prefix) for k in keys} + match_count = len(mapped_keys & target_keys) + if match_count > best_match: + best_match = match_count + best_prefix = prefix + + return best_prefix, best_match + + +def _build_hf_model(config: AutoConfig) -> torch.nn.Module: + print(f"Detected model type: {config.model_type}") + model_cls = AutoModelForImageTextToText if hasattr(config, "vision_config") else AutoModelForCausalLM + print(f"Loaded with {model_cls.__name__}") + return model_cls.from_config(config, trust_remote_code=True) + + +def _convert_fsdp_to_hf( + origin_hf_dir: str, + input_dir: str, + output_dir: str, +) -> None: + print(f"loading FSDP model from {input_dir}") + t = time.time() + state_dict = _load_fsdp_state_dict(input_dir) + print(f"FSDP model loaded in {time.time()-t:.2f} sec.") + + tensor_items = {k: v for k, v in state_dict.items() if isinstance(v, torch.Tensor)} + + config = AutoConfig.from_pretrained(origin_hf_dir, trust_remote_code=True) + hf_model = _build_hf_model(config) + target_keys = set(hf_model.state_dict().keys()) + + best_prefix, best_match = _strip_best_prefix(list(tensor_items.keys()), target_keys) + total_keys = len(tensor_items) + + print(f"Using prefix '{best_prefix}' for key mapping. " f"Matched {best_match}/{total_keys} parameter keys.") + + model_state = {k.removeprefix(best_prefix): v for k, v in tensor_items.items()} + + if not model_state: + raise ValueError( + "No model weights found in checkpoint. " + "Please pass the checkpoint directory (e.g. iter_xxx or iter_xxx/model)." + ) + + missing, unexpected = hf_model.load_state_dict(model_state, strict=False) + print(f"Missing keys: {missing}\nUnexpected keys: {unexpected}") + + os.makedirs(output_dir, exist_ok=True) + hf_model.save_pretrained(output_dir, safe_serialization=True) + print(f"Model weights saved to {output_dir}") + + +def copy_assets(origin_hf_dir: str, output_dir: str) -> None: + for filename in os.listdir(origin_hf_dir): + if filename == "model.safetensors.index.json" or filename.endswith(".safetensors"): + continue + origin_filename = os.path.join(origin_hf_dir, filename) + if not os.path.isfile(origin_filename): + print(f"Skip {filename}, not a file.") + continue + src, dst = origin_filename, os.path.join(output_dir, filename) + print(f"copy from {src} to {dst}") + shutil.copy(src, dst) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--input-dir", type=str, required=True) + parser.add_argument("--output-dir", type=str, required=True) + parser.add_argument( + "--origin-hf-dir", + type=str, + required=True, + help="The original Hugging Face model directory to load config/tokenizer assets.", + ) + parser.add_argument( + "-f", "--force", action="store_true", help="Force overwrite the output directory if it exists." + ) + args = parser.parse_args() + + if os.path.exists(args.output_dir) and not args.force: + raise ValueError(f"Output directory {args.output_dir} already exists. Use --force to overwrite it.") + + model_dir = _detect_model_dir(args.input_dir) + _convert_fsdp_to_hf(args.origin_hf_dir, model_dir, args.output_dir) + copy_assets(args.origin_hf_dir, args.output_dir) diff --git a/tools/convert_hf_to_fp8.py b/tools/convert_hf_to_fp8.py index 5294140d5a..98eebce01b 100644 --- a/tools/convert_hf_to_fp8.py +++ b/tools/convert_hf_to_fp8.py @@ -134,11 +134,6 @@ def process_file(input_path, output_path, filename, strategy, block_size, result and "lm_head" not in key and "eh_proj" not in key and "weights_proj" not in key - and "conv1d" not in key - and "A_log" not in key - and "dt_bias" not in key - and "in_proj_a" not in key - and "in_proj_b" not in key ): qw, s = quant_fp8(weights[key], strategy, block_size) q_weights[key] = qw diff --git a/tools/convert_torch_dist_to_hf.py b/tools/convert_torch_dist_to_hf.py index 8049d77437..2ddd1b7b1b 100644 --- a/tools/convert_torch_dist_to_hf.py +++ b/tools/convert_torch_dist_to_hf.py @@ -103,20 +103,18 @@ def get_named_params(args, state_dict): yield from get_layer_param(args, name, param) -def save_tensors(args, model_name, state_dict, output_dir, chunk_size, vocab_size=None, origin_hf_dir=None): +def save_tensors(args, model_name, state_dict, output_dir, chunk_size, vocab_size=None): print(f"start saving to {output_dir}") os.makedirs(output_dir, exist_ok=True) # 2GB current_size = 0 total_size = 0 modeltensors = [{}] - converted_names = set() for name, param in get_named_params(args, state_dict): if vocab_size: param = remove_padding(name, param, vocab_size) converted_named_tensors = convert_to_hf(args, model_name, name, param) for converted_name, converted_param in converted_named_tensors: - converted_names.add(converted_name) tensor_size = converted_param.numel() * converted_param.element_size() if tensor_size + current_size > chunk_size: modeltensors.append({}) @@ -125,24 +123,6 @@ def save_tensors(args, model_name, state_dict, output_dir, chunk_size, vocab_siz current_size += tensor_size total_size += tensor_size - if origin_hf_dir is not None: - safetensors_files = [f for f in os.listdir(origin_hf_dir) if f.endswith(".safetensors")] - for filename in safetensors_files: - with safetensors.safe_open(os.path.join(origin_hf_dir, filename), framework="pt", device="cpu") as f: - for k in f.keys(): - if k not in converted_names: - converted_name = k - print(f"add {k} from origin hf checkpoint") - converted_param = f.get_tensor(k) - converted_names.add(k) - tensor_size = converted_param.numel() * converted_param.element_size() - if tensor_size + current_size > chunk_size: - modeltensors.append({}) - current_size = 0 - modeltensors[-1][converted_name] = converted_param - current_size += tensor_size - total_size += tensor_size - metadata = {"metadata": {"total_size": total_size}, "weight_map": {}} num_files = len(modeltensors) @@ -189,9 +169,6 @@ def copy_assets(origin_hf_dir, output_dir): parser.add_argument( "-f", "--force", action="store_true", help="Force overwrite the output directory if it exists." ) - parser.add_argument( - "-a", "--add-missing-from-origin-hf", action="store_true", help="Add missing weights from origin hf checkpoint" - ) parser.add_argument( "--chunk-size", type=int, @@ -230,15 +207,7 @@ def copy_assets(origin_hf_dir, output_dir): ) print(f"model loaded in {time.time()-t:.2f} sec.") - save_tensors( - megatron_args, - args.model_name, - state_dict, - args.output_dir, - args.chunk_size, - args.vocab_size, - args.origin_hf_dir if args.add_missing_from_origin_hf else None, - ) + save_tensors(megatron_args, args.model_name, state_dict, args.output_dir, args.chunk_size, args.vocab_size) if args.origin_hf_dir: copy_assets(args.origin_hf_dir, args.output_dir) diff --git a/tools/convert_torch_dist_to_hf_bridge.py b/tools/convert_torch_dist_to_hf_bridge.py index 798503f218..3412e73e69 100644 --- a/tools/convert_torch_dist_to_hf_bridge.py +++ b/tools/convert_torch_dist_to_hf_bridge.py @@ -4,8 +4,6 @@ import megatron.bridge.training.model_load_save as _model_load_save_module from megatron.bridge import AutoBridge -from slime.utils.megatron_bridge_utils import patch_auto_bridge_hf_config - # Here we need to patch Megatron Bridge's `load_model_config`, since the checkpoint is saved # by Megatron and lack of provider information. @@ -51,7 +49,7 @@ def _patched_load_model_config(checkpoint_path): raise ValueError(f"Output directory {args.output_dir} already exists. Use --force to overwrite it.") print(f"Loading config from {args.origin_hf_dir}") - bridge = patch_auto_bridge_hf_config(AutoBridge.from_hf_pretrained(args.origin_hf_dir, trust_remote_code=True)) + bridge = AutoBridge.from_hf_pretrained(args.origin_hf_dir, trust_remote_code=True) # Use Bridge's provider so the correct model class is created (e.g., Qwen3VLModel # instead of GPTModel). This is needed because MLM checkpoints lack run_config.yaml. diff --git a/tools/convert_torch_dist_to_hf_parallel.py b/tools/convert_torch_dist_to_hf_parallel.py deleted file mode 100644 index 763254d42c..0000000000 --- a/tools/convert_torch_dist_to_hf_parallel.py +++ /dev/null @@ -1,578 +0,0 @@ -import argparse -import json -import multiprocessing -import os -import pickle -import re -import shutil -import threading -import time -from concurrent.futures import ThreadPoolExecutor, as_completed - -import safetensors.torch -import torch -import torch.distributed.checkpoint as dist_cp -from tqdm import tqdm -from transformers import AutoConfig -from typing_extensions import override - -from slime.backends.megatron_utils.megatron_to_hf import convert_to_hf, remove_padding - - -class DummyClass: - def __init__(self, *args, **kwargs): - pass - - -class UnpicklerWrapper(pickle.Unpickler): - @override - def find_class(self, mod_name, name): - if mod_name.startswith("megatron") or mod_name.startswith("glm"): - return DummyClass - return super().find_class(mod_name, name) - - -pickle.Unpickler = UnpicklerWrapper - - -class WrappedStorageReader(dist_cp.FileSystemReader): - def __init__(self, path, load_id=None, max_workers=None): - super().__init__(path, load_id) - self.max_workers = max_workers - self._read_cache = {} if max_workers and max_workers > 1 else None - self._cache_lock = threading.Lock() if max_workers and max_workers > 1 else None - - @override - def read_metadata(self): - path = self.fs.concat_path(self.path, ".metadata") - with self.fs.create_stream(path, "rb") as metadata_file: - metadata = UnpicklerWrapper(metadata_file).load() - if getattr(metadata, "storage_meta", None) is None: - metadata.storage_meta = dist_cp.StorageMeta() - metadata.storage_meta.load_id = self.load_id - if metadata.planner_data is None: - metadata.planner_data = {} - return metadata - - def _collect_read_operations(self, plan): - read_ops = [] - - def collect_from_storage_metadata(storage_item, base_path=""): - if isinstance(storage_item, dist_cp.metadata.BytesStorageMetadata): - full_path = self.fs.concat_path(self.path, storage_item.relative_path) - read_ops.append(("bytes", storage_item.relative_path, full_path, None, None)) - elif isinstance(storage_item, dist_cp.metadata.ChunkStorageMetadata): - full_path = self.fs.concat_path(self.path, storage_item.relative_path) - read_ops.append( - ("chunk", storage_item.relative_path, full_path, storage_item.offset, storage_item.length) - ) - elif isinstance(storage_item, dist_cp.metadata.TensorStorageMetadata): - if hasattr(storage_item, "chunks"): - for chunk in storage_item.chunks: - collect_from_storage_metadata(chunk) - - if hasattr(plan, "items"): - for item in plan.items: - collect_from_storage_metadata(item) - elif hasattr(plan, "state_dict_metadata"): - for _key, metadata in plan.state_dict_metadata.items(): - if hasattr(metadata, "storage"): - collect_from_storage_metadata(metadata.storage) - - return read_ops - - def _parallel_preload_files(self, metadata=None, keys=None, state_dict_metadata_dict=None): - if not self.max_workers or self.max_workers <= 1: - return None - - keys_set = set(keys) if keys else None - - read_ops = [] - - if state_dict_metadata_dict is not None: - metadata_dict = state_dict_metadata_dict - elif metadata is not None and hasattr(metadata, "state_dict_metadata"): - metadata_dict = metadata.state_dict_metadata - else: - if metadata is None: - metadata = self.read_metadata() - metadata_dict = metadata.state_dict_metadata if hasattr(metadata, "state_dict_metadata") else {} - - for key, tensor_meta in metadata_dict.items(): - if "optimizer" in key or "_state" in key: - continue - if keys_set is not None and key not in keys_set: - continue - - if hasattr(tensor_meta, "storage"): - storage = tensor_meta.storage - if isinstance(storage, dist_cp.metadata.BytesStorageMetadata): - full_path = self.fs.concat_path(self.path, storage.relative_path) - read_ops.append(("bytes", storage.relative_path, full_path, None, None)) - elif isinstance(storage, dist_cp.metadata.ChunkStorageMetadata): - full_path = self.fs.concat_path(self.path, storage.relative_path) - read_ops.append(("chunk", storage.relative_path, full_path, storage.offset, storage.length)) - elif hasattr(storage, "chunks"): - for chunk in storage.chunks: - if isinstance(chunk, dist_cp.metadata.ChunkStorageMetadata): - full_path = self.fs.concat_path(self.path, chunk.relative_path) - read_ops.append(("chunk", chunk.relative_path, full_path, chunk.offset, chunk.length)) - - if not read_ops: - return None - - # Group by file path - for chunked files, we'll cache the whole file - file_ops = {} - for op_type, rel_path, _full_path, offset, length in read_ops: - if rel_path not in file_ops: - file_ops[rel_path] = [] - file_ops[rel_path].append((op_type, offset, length)) - - # Parallel read files - for files with chunks, read the whole file - def read_file(rel_path, full_path, ops): - try: - with self.fs.create_stream(full_path, "rb") as stream: - has_chunks = any(op[0] == "chunk" and op[1] is not None for op in ops) - if has_chunks: - data = stream.read() - return rel_path, data, True # True indicates full file - else: - data = stream.read() - return rel_path, data, False - except Exception as e: - print(f"Error reading {rel_path}: {e}") - return None - - print(f"Parallel pre-loading {len(file_ops)} files with {self.max_workers} workers...") - with ThreadPoolExecutor(max_workers=self.max_workers) as executor: - futures = { - executor.submit(read_file, rel_path, full_path, ops): rel_path - for rel_path, (full_path, ops) in [ - (r, (self.fs.concat_path(self.path, r), ops)) for r, ops in file_ops.items() - ] - } - for future in tqdm(as_completed(futures), total=len(futures), desc="Pre-loading files"): - result = future.result() - if result: - rel_path, data, is_full_file = result - with self._cache_lock: - # Cache by file path - for chunked files, store the full file - self._read_cache[rel_path] = data - - return self._read_cache - - @override - def read_data(self, plan, planner): - """Override read_data to use parallel reading when enabled""" - if self.max_workers and self.max_workers > 1 and self._read_cache is not None and len(self._read_cache) > 0: - original_create_stream = self.fs.create_stream - - def cached_create_stream(path, mode="rb"): - if mode == "rb": - try: - if path.startswith(self.path): - rel_path = os.path.relpath(path, self.path) - else: - filename = os.path.basename(path) - rel_path = None - for cached_path in self._read_cache.keys(): - if os.path.basename(cached_path) == filename: - rel_path = cached_path - break - if rel_path is None: - return original_create_stream(path, mode) - - if rel_path in self._read_cache: - from io import BytesIO - - return BytesIO(self._read_cache[rel_path]) - except (ValueError, KeyError, OSError): - pass - return original_create_stream(path, mode) - - self.fs.create_stream = cached_create_stream - try: - result = super().read_data(plan, planner) - finally: - self.fs.create_stream = original_create_stream - return result - - return super().read_data(plan, planner) - - -class EmptyStateDictLoadPlanner(dist_cp.default_planner.DefaultLoadPlanner): - def __init__(self, keys=None): - super().__init__() - self.keys = set(keys) if keys else None - - @override - def set_up_planner( - self, - state_dict: dist_cp.metadata.STATE_DICT_TYPE, - metadata: dist_cp.metadata.Metadata | None = None, - is_coordinator: bool = False, - ) -> None: - for k, v in metadata.state_dict_metadata.items(): - if "optimizer" in k or "_state" in k: - continue - if self.keys is not None and k not in self.keys: - continue - print(f"find {k} in torch_dist ckpt") - if isinstance(v, dist_cp.metadata.TensorStorageMetadata): - v = torch.empty(v.size, dtype=v.properties.dtype) # type: ignore[assignment] - state_dict[k] = v - super().set_up_planner(state_dict, metadata, is_coordinator) - - -def get_expert_param(args, name, param): - if ".experts." not in name: - yield name, param - return - - num_experts = args.num_experts - match = re.search(r"mlp.experts\.(.+)\.weight(\d+)", name) - if not match: - assert param.shape[0] == num_experts - for expert_id in range(num_experts): - expert_name = name.replace(".experts.experts.", ".experts.") + str(expert_id) - expert_param = param[expert_id] - yield expert_name, expert_param - else: - yield name, param - - -def get_layer_param(args, name, param): - if ".layers." not in name: - yield name, param - return - - num_layers = args.num_layers - match = re.search(r"\.layers\.(\d+)\.", name) - if not match: - assert param.shape[0] == num_layers - for layer_id in range(num_layers): - layer_name = name.replace(".layers.", f".layers.{layer_id}.") - layer_param = param[layer_id] - yield from get_expert_param(args, layer_name, layer_param) - else: - yield from get_expert_param(args, name, param) - - -def get_named_params(args, state_dict): - for name, param in state_dict.items(): - name = f"module.module.{name}" - yield from get_layer_param(args, name, param) - - -def process_param(args, model_name, name, param, vocab_size=None): - if vocab_size: - param = remove_padding(name, param, vocab_size) - converted_named_tensors = list(convert_to_hf(args, model_name, name, param)) - return converted_named_tensors - - -def save_tensors(args, model_name, state_dict, output_dir, chunk_size, vocab_size=None, max_workers=1, worker_id=None): - # for slime update_weight compatible - args.sglang_enable_ep_moe = False - - print(f"start saving to {output_dir}") - os.makedirs(output_dir, exist_ok=True) - param_list = list(get_named_params(args, state_dict)) - print(f"Total parameters to process: {len(param_list)}") - - all_converted_tensors = [] - lock = threading.Lock() - - def process_and_collect(name_param_pair): - name, param = name_param_pair - try: - converted = process_param(args, model_name, name, param, vocab_size) - return converted - except Exception as e: - print(f"Error processing {name}: {e}") - return [] - - print(f"Processing with {max_workers} workers") - with ThreadPoolExecutor(max_workers=max_workers) as executor: - futures = {executor.submit(process_and_collect, (name, param)): name for name, param in param_list} - for future in tqdm(as_completed(futures), total=len(futures), desc="Converting parameters"): - converted = future.result() - with lock: - all_converted_tensors.extend(converted) - - current_size = 0 - total_size = 0 - modeltensors = [{}] - for converted_name, converted_param in all_converted_tensors: - tensor_size = converted_param.numel() * converted_param.element_size() - if tensor_size + current_size > chunk_size: - modeltensors.append({}) - current_size = 0 - modeltensors[-1][converted_name] = converted_param - current_size += tensor_size - total_size += tensor_size - - metadata = {"metadata": {"total_size": total_size}, "weight_map": {}} - - num_files = len(modeltensors) - file_prefix = f"worker_{worker_id}_" if worker_id is not None else "" - index_prefix = f"worker_{worker_id}_" if worker_id is not None else "" - - for i, tensors in enumerate(modeltensors): - filename = f"{file_prefix}model-{i:05d}-of-{num_files:05d}.safetensors" - for key in tensors.keys(): - metadata["weight_map"][key] = filename - index_filepath = os.path.join(output_dir, f"{index_prefix}model.safetensors.index.json") - json.dump(metadata, open(index_filepath, "w"), indent=2) - print(f"{index_filepath} saved.") - - def save_file(i, tensors): - filename = f"{file_prefix}model-{i:05d}-of-{num_files:05d}.safetensors" - t = time.time() - filepath = os.path.join(output_dir, filename) - safetensors.torch.save_file(tensors, filepath) - return filename, time.time() - t - - with ThreadPoolExecutor(max_workers=min(max_workers, num_files)) as executor: - futures = [executor.submit(save_file, i, tensors) for i, tensors in enumerate(modeltensors)] - for future in tqdm(as_completed(futures), total=len(futures), desc="Saving files"): - filename, elapsed = future.result() - print(f"{filename} saved in {elapsed:.2f} sec.") - - -def copy_assets(origin_hf_dir, output_dir): - for filename in os.listdir(origin_hf_dir): - if filename == "model.safetensors.index.json" or filename.endswith(".safetensors"): - continue - origin_filename = os.path.join(origin_hf_dir, filename) - if not os.path.isfile(origin_filename): - print(f"Skip {filename}, not a file.") - continue - src, dst = origin_filename, os.path.join(output_dir, filename) - print(f"copy from {src} to {dst}") - shutil.copy(src, dst) - - -def conversion_worker( - worker_id, - keys, - args, - megatron_args, - model_name, - state_dict_metadata_dict=None, - load_max_workers=2, - save_max_workers=16, -): - print(f"Worker {worker_id} starting with {len(keys)} keys") - planner = EmptyStateDictLoadPlanner(keys) - state_dict = {} - - storage_reader = WrappedStorageReader(args.input_dir, max_workers=load_max_workers) - - if load_max_workers and load_max_workers > 1: - print(f"Worker {worker_id}: Pre-loading files with {load_max_workers} workers...") - storage_reader._parallel_preload_files(keys=keys, state_dict_metadata_dict=state_dict_metadata_dict) - - print(f"Worker {worker_id}: Loading state dict...") - t = time.time() - dist_cp.state_dict_loader._load_state_dict( - state_dict, - storage_reader=storage_reader, - planner=planner, - no_dist=True, - ) - print(f"Worker {worker_id}: State dict loaded in {time.time()-t:.2f} sec.") - - save_tensors( - megatron_args, - model_name, - state_dict, - args.output_dir, - args.chunk_size, - args.vocab_size, - max_workers=save_max_workers, - worker_id=worker_id, - ) - - index_file = os.path.join(args.output_dir, f"worker_{worker_id}_model.safetensors.index.json") - if os.path.exists(index_file): - with open(index_file) as f: - idx = json.load(f) - return idx - return None - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("--model-name", type=str, default=None) - parser.add_argument("--input-dir", type=str, required=True) - parser.add_argument("--output-dir", type=str, required=True) - parser.add_argument( - "--origin-hf-dir", - type=str, - default=None, - help="use the origin hf dir to copy files like tokenizer, config.json, etc.", - ) - parser.add_argument( - "-f", "--force", action="store_true", help="Force overwrite the output directory if it exists." - ) - parser.add_argument( - "--chunk-size", - type=int, - default=5 * 1024**3, - help="Chunk size for saving tensors, default is 2GB.", - ) - parser.add_argument( - "--vocab-size", - type=int, - default=None, - help="Vocab size for removing padding, if applicable. If not provided, no padding will be removed.", - ) - parser.add_argument( - "--load-max-workers", - type=int, - default=2, - help="Number of worker threads for parallel file loading. Default is 2.", - ) - parser.add_argument( - "--save-max-workers", - type=int, - default=16, - help="Number of worker threads for parallel tensor conversion and saving. Default is 16.", - ) - args = parser.parse_args() - - if os.path.exists(args.output_dir) and not args.force: - raise ValueError(f"Output directory {args.output_dir} already exists. Use --force to overwrite it.") - - if args.model_name is None and args.origin_hf_dir is None: - raise ValueError( - "Either --model-name or --origin-hf-dir must be provided, so that we can know the name of the params." - ) - - if args.model_name is None: - hf_config = AutoConfig.from_pretrained(args.origin_hf_dir, trust_remote_code=True) - args.model_name = type(hf_config).__name__.lower() - - megatron_args = torch.load(os.path.join(args.input_dir, "common.pt"), weights_only=False)["args"] - - load_max_workers = args.load_max_workers - save_max_workers = args.save_max_workers - - reader = WrappedStorageReader(args.input_dir) - metadata = reader.read_metadata() - all_keys = [k for k in metadata.state_dict_metadata.keys() if "optimizer" not in k and "_state" not in k] - - # Group paired keys (linear_q_down_proj and linear_kv_down_proj) together - # These will be converted to q_a_proj and kv_a_proj_with_mqa later - paired_keys = set() - key_groups = [] # Each element is either a single key or a pair of keys - - for key in all_keys: - if key in paired_keys: - continue - - # Check if this is a linear_q_down_proj or linear_kv_down_proj key - if "linear_q_down_proj" in key or "linear_kv_down_proj" in key: - # Find its pair - if "linear_q_down_proj" in key: - pair_key = key.replace("linear_q_down_proj", "linear_kv_down_proj") - else: - pair_key = key.replace("linear_kv_down_proj", "linear_q_down_proj") - - # If pair exists in all_keys, group them together - if pair_key in all_keys: - key_groups.append([key, pair_key]) - paired_keys.add(key) - paired_keys.add(pair_key) - else: - key_groups.append([key]) - else: - key_groups.append([key]) - - # Distribute key groups to workers (round-robin to balance load) - num_workers = load_max_workers - key_chunks = [[] for _ in range(num_workers)] - - for i, key_group in enumerate(key_groups): - worker_idx = i % num_workers - key_chunks[worker_idx].extend(key_group) - - # Remove empty chunks - key_chunks = [chunk for chunk in key_chunks if chunk] - num_workers = len(key_chunks) - - print( - f"Total keys: {len(all_keys)}, Paired groups: {len([g for g in key_groups if len(g) > 1])}, Workers: {num_workers}" - ) - - state_dict_metadata_dict = metadata.state_dict_metadata if hasattr(metadata, "state_dict_metadata") else {} - - ctx = multiprocessing.get_context("spawn") - with ctx.Pool(num_workers) as pool: - results = pool.starmap( - conversion_worker, - [ - ( - i, - key_chunks[i], - args, - megatron_args, - args.model_name, - state_dict_metadata_dict, - load_max_workers, - save_max_workers, - ) - for i in range(num_workers) - ], - ) - - final_weight_map = {} - total_size = 0 - final_file_index = 1 - - for i, res in enumerate(results): - if not res: - continue - - w_map = res["weight_map"] - total_size += res["metadata"]["total_size"] - - worker_files = sorted(list(set(w_map.values()))) - file_rename_map = {} - for wf in worker_files: - new_name = f"model-{final_file_index:05d}.safetensors" - final_file_index += 1 - file_rename_map[wf] = new_name - - src = os.path.join(args.output_dir, wf) - dst = os.path.join(args.output_dir, new_name) - if os.path.exists(src): - shutil.move(src, dst) - - for param_name, old_fname in w_map.items(): - final_weight_map[param_name] = file_rename_map[old_fname] - - temp_index = os.path.join(args.output_dir, f"worker_{i}_model.safetensors.index.json") - if os.path.exists(temp_index): - os.remove(temp_index) - - total_files = final_file_index - 1 - final_weight_map_fixed = {} - for i in range(1, total_files + 1): - old_name = f"model-{i:05d}.safetensors" - new_name = f"model-{i:05d}-of-{total_files:05d}.safetensors" - old_path = os.path.join(args.output_dir, old_name) - new_path = os.path.join(args.output_dir, new_name) - if os.path.exists(old_path): - shutil.move(old_path, new_path) - for k, v in final_weight_map.items(): - if v == old_name: - final_weight_map_fixed[k] = new_name - - index_data = {"metadata": {"total_size": total_size}, "weight_map": final_weight_map_fixed} - json.dump(index_data, open(os.path.join(args.output_dir, "model.safetensors.index.json"), "w"), indent=2) - print("Model converted and saved.") - - if args.origin_hf_dir: - copy_assets(args.origin_hf_dir, args.output_dir) diff --git a/tools/replay_openai_jsonl.py b/tools/replay_openai_jsonl.py deleted file mode 100644 index fd7b4a2f94..0000000000 --- a/tools/replay_openai_jsonl.py +++ /dev/null @@ -1,535 +0,0 @@ -from __future__ import annotations - -import argparse -import asyncio -import json -import math -import time -from dataclasses import dataclass, field -from pathlib import Path -from typing import Any - -import httpx - -DEFAULT_INPUT_FILE = Path(__file__).resolve().parent.parent / "tob-glm-5.filtered.jsonl" -STREAM_MODE_CHOICES = ("inherit", "true", "false") - - -@dataclass -class ReplayStats: - submitted: int = 0 - completed: int = 0 - succeeded: int = 0 - failed: int = 0 - stream_requests: int = 0 - status_counts: dict[str, int] = field(default_factory=dict) - latencies_ms: list[float] = field(default_factory=list) - - def record(self, result: dict[str, Any]) -> None: - self.completed += 1 - if result["ok"]: - self.succeeded += 1 - else: - self.failed += 1 - - if result.get("stream"): - self.stream_requests += 1 - - status_key = str(result.get("status_code", "transport_error")) - self.status_counts[status_key] = self.status_counts.get(status_key, 0) + 1 - - latency_ms = result.get("latency_ms") - if isinstance(latency_ms, (int, float)): - self.latencies_ms.append(float(latency_ms)) - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser( - description="Replay OpenAI-compatible chat completion payloads from a JSONL file against an SGLang router.", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - epilog=( - "Examples:\n" - " python tools/replay_openai_jsonl.py --port 30000 --concurrency 32\n" - " python tools/replay_openai_jsonl.py --port 30000 --replay-times 1\n" - " python tools/replay_openai_jsonl.py --base-url http://127.0.0.1:30000/v1 --concurrency 64 --max-requests 100\n" - " python tools/replay_openai_jsonl.py --port 30000 --model custom --stream-mode false --output-file /tmp/replay.jsonl" - ), - ) - parser.add_argument("--input-file", type=Path, default=DEFAULT_INPUT_FILE, help="Input JSONL file to replay") - parser.add_argument("--host", default="127.0.0.1", help="Router host when --base-url is not provided") - parser.add_argument("--port", type=int, help="Router port when --base-url is not provided") - parser.add_argument( - "--base-url", - help="OpenAI-compatible base URL, e.g. http://127.0.0.1:30000/v1. If omitted, it is built from --host/--port.", - ) - parser.add_argument("--endpoint", default="/chat/completions", help="Endpoint path to append to the base URL") - parser.add_argument("--api-key", help="Optional Bearer token for the OpenAI-compatible endpoint") - parser.add_argument("--concurrency", type=int, default=32, help="Maximum number of in-flight requests") - parser.add_argument("--timeout", type=float, default=600.0, help="Per-request timeout in seconds") - parser.add_argument("--retries", type=int, default=0, help="Retry count for 429/5xx/transport failures") - parser.add_argument("--max-requests", type=int, help="Stop after replaying at most this many input lines") - parser.add_argument("--replay-times", type=int, default=10, help="Replay the input dataset this many times") - parser.add_argument("--model", help="Override model for every request") - parser.add_argument("--default-model", default="custom", help="Fallback model when the payload has no model") - parser.add_argument( - "--stream-mode", - choices=STREAM_MODE_CHOICES, - default="inherit", - help="Whether to keep the payload stream flag or override it", - ) - parser.add_argument("--output-file", type=Path, help="Optional JSONL file for per-request results") - parser.add_argument("--overwrite", action="store_true", help="Overwrite --output-file if it already exists") - parser.add_argument( - "--progress-every", - type=int, - default=100, - help="Print one progress line every N completed requests; set <= 0 to disable", - ) - args = parser.parse_args() - - if not args.base_url and args.port is None: - parser.error("Either --base-url or --port must be provided.") - if args.concurrency <= 0: - parser.error("--concurrency must be positive.") - if args.timeout <= 0: - parser.error("--timeout must be positive.") - if args.retries < 0: - parser.error("--retries cannot be negative.") - if args.max_requests is not None and args.max_requests <= 0: - parser.error("--max-requests must be positive when provided.") - if args.replay_times <= 0: - parser.error("--replay-times must be positive.") - - return args - - -def build_request_url(args: argparse.Namespace) -> str: - endpoint = args.endpoint if args.endpoint.startswith("/") else f"/{args.endpoint}" - if args.base_url: - base_url = args.base_url.rstrip("/") - else: - base_url = f"http://{args.host}:{args.port}/v1" - if base_url.endswith(endpoint): - return base_url - return f"{base_url}{endpoint}" - - -def build_headers(api_key: str | None, stream: bool) -> dict[str, str]: - headers = { - "Content-Type": "application/json", - "Accept": "text/event-stream" if stream else "application/json", - } - if api_key: - headers["Authorization"] = f"Bearer {api_key}" - return headers - - -def normalize_payload(raw_payload: dict[str, Any], args: argparse.Namespace) -> dict[str, Any]: - payload = dict(raw_payload) - - if args.model is not None: - payload["model"] = args.model - elif not str(payload.get("model", "") or "").strip(): - payload["model"] = args.default_model - - if args.stream_mode != "inherit": - payload["stream"] = args.stream_mode == "true" - if not payload["stream"]: - payload.pop("stream_options", None) - - return payload - - -def decode_body(content: bytes) -> Any: - try: - return json.loads(content) - except json.JSONDecodeError: - return content.decode("utf-8", errors="replace") - - -def extract_delta_text(delta: Any, key: str) -> list[str]: - if not isinstance(delta, dict): - return [] - - value = delta.get(key) - if isinstance(value, str): - return [value] - - if isinstance(value, list): - text_parts = [] - for item in value: - if isinstance(item, dict) and isinstance(item.get("text"), str): - text_parts.append(item["text"]) - return text_parts - - return [] - - -async def dispatch_request( - client: httpx.AsyncClient, - request_url: str, - api_key: str | None, - payload: dict[str, Any], -) -> tuple[int, str | None, Any]: - stream = bool(payload.get("stream", False)) - headers = build_headers(api_key, stream=stream) - - if not stream: - response = await client.post(request_url, json=payload, headers=headers) - body = decode_body(response.content) - return response.status_code, response.headers.get("x-request-id"), body - - async with client.stream("POST", request_url, json=payload, headers=headers) as response: - request_id = response.headers.get("x-request-id") - content_type = response.headers.get("content-type", "") - if "text/event-stream" not in content_type: - body = decode_body(await response.aread()) - return response.status_code, request_id, body - - content_parts = [] - reasoning_parts = [] - finish_reasons = [] - tool_call_deltas = [] - usage = None - chunk_count = 0 - raw_events = 0 - - async for line in response.aiter_lines(): - if not line or not line.startswith("data:"): - continue - - data = line[5:].strip() - if data == "[DONE]": - continue - - chunk_count += 1 - try: - event = json.loads(data) - except json.JSONDecodeError: - raw_events += 1 - continue - - event_usage = event.get("usage") - if event_usage is not None: - usage = event_usage - - for choice in event.get("choices", []): - finish_reason = choice.get("finish_reason") - if finish_reason is not None: - finish_reasons.append(finish_reason) - - delta = choice.get("delta", {}) - content_parts.extend(extract_delta_text(delta, "content")) - reasoning_parts.extend(extract_delta_text(delta, "reasoning")) - reasoning_parts.extend(extract_delta_text(delta, "reasoning_content")) - - if delta.get("tool_calls") is not None: - tool_call_deltas.append(delta["tool_calls"]) - - body = { - "mode": "stream", - "content": "".join(content_parts), - "reasoning": "".join(reasoning_parts) or None, - "finish_reasons": finish_reasons or None, - "usage": usage, - "chunk_count": chunk_count, - } - if tool_call_deltas: - body["tool_call_deltas"] = tool_call_deltas - if raw_events: - body["raw_event_count"] = raw_events - return response.status_code, request_id, body - - -def should_retry_status(status_code: int) -> bool: - return status_code == 429 or status_code >= 500 - - -def percentile(values: list[float], ratio: float) -> float | None: - if not values: - return None - - ordered = sorted(values) - if len(ordered) == 1: - return ordered[0] - - index = (len(ordered) - 1) * ratio - lower = math.floor(index) - upper = math.ceil(index) - if lower == upper: - return ordered[lower] - - lower_value = ordered[lower] - upper_value = ordered[upper] - return lower_value + (upper_value - lower_value) * (index - lower) - - -def make_summary( - stats: ReplayStats, - elapsed_s: float, - request_url: str, - output_file: Path | None, - replay_times: int, -) -> dict[str, Any]: - throughput = stats.completed / elapsed_s if elapsed_s > 0 else None - return { - "request_url": request_url, - "replay_times": replay_times, - "submitted": stats.submitted, - "completed": stats.completed, - "succeeded": stats.succeeded, - "failed": stats.failed, - "stream_requests": stats.stream_requests, - "non_stream_requests": stats.completed - stats.stream_requests, - "status_counts": stats.status_counts, - "elapsed_s": round(elapsed_s, 3), - "throughput_rps": round(throughput, 3) if throughput is not None else None, - "latency_ms": { - "p50": percentile(stats.latencies_ms, 0.50), - "p95": percentile(stats.latencies_ms, 0.95), - "p99": percentile(stats.latencies_ms, 0.99), - }, - "output_file": str(output_file) if output_file else None, - } - - -def print_progress(stats: ReplayStats) -> None: - print( - f"[progress] completed={stats.completed} succeeded={stats.succeeded} failed={stats.failed} " - f"stream={stats.stream_requests}" - ) - - -def emit_result(result: dict[str, Any], output_handle) -> None: - if output_handle is None: - return - output_handle.write(json.dumps(result, ensure_ascii=False) + "\n") - - -def validate_output_path(output_file: Path | None, overwrite: bool) -> None: - if output_file is None: - return - if output_file.exists() and not overwrite: - raise SystemExit(f"Output file already exists: {output_file}. Pass --overwrite to replace it.") - output_file.parent.mkdir(parents=True, exist_ok=True) - - -def make_input_error_result(replay_round: int, line_number: int, error: str) -> dict[str, Any]: - return { - "replay_round": replay_round, - "line_number": line_number, - "ok": False, - "status_code": None, - "request_id": None, - "latency_ms": 0.0, - "stream": None, - "model": None, - "attempts": 0, - "error": error, - "response": None, - } - - -async def send_request( - client: httpx.AsyncClient, - request_url: str, - api_key: str | None, - replay_round: int, - line_number: int, - payload: dict[str, Any], - retries: int, -) -> dict[str, Any]: - started = time.perf_counter() - last_status_code = None - last_request_id = None - last_response = None - last_error = None - - for attempt in range(1, retries + 2): - try: - status_code, request_id, response_body = await dispatch_request(client, request_url, api_key, payload) - except httpx.HTTPError as exc: - last_error = f"{type(exc).__name__}: {exc}" - if attempt <= retries: - await asyncio.sleep(min(0.5 * attempt, 2.0)) - continue - latency_ms = round((time.perf_counter() - started) * 1000, 3) - return { - "replay_round": replay_round, - "line_number": line_number, - "ok": False, - "status_code": None, - "request_id": None, - "latency_ms": latency_ms, - "stream": bool(payload.get("stream", False)), - "model": payload.get("model"), - "attempts": attempt, - "error": last_error, - "response": None, - } - - last_status_code = status_code - last_request_id = request_id - last_response = response_body - - if status_code < 400: - latency_ms = round((time.perf_counter() - started) * 1000, 3) - return { - "replay_round": replay_round, - "line_number": line_number, - "ok": True, - "status_code": status_code, - "request_id": request_id, - "latency_ms": latency_ms, - "stream": bool(payload.get("stream", False)), - "model": payload.get("model"), - "attempts": attempt, - "error": None, - "response": response_body, - } - - last_error = f"HTTP {status_code}" - if attempt <= retries and should_retry_status(status_code): - await asyncio.sleep(min(0.5 * attempt, 2.0)) - continue - - break - - latency_ms = round((time.perf_counter() - started) * 1000, 3) - return { - "replay_round": replay_round, - "line_number": line_number, - "ok": False, - "status_code": last_status_code, - "request_id": last_request_id, - "latency_ms": latency_ms, - "stream": bool(payload.get("stream", False)), - "model": payload.get("model"), - "attempts": retries + 1, - "error": last_error, - "response": last_response, - } - - -async def collect_completed( - pending: set[asyncio.Task], - stats: ReplayStats, - output_handle, - progress_every: int, -) -> set[asyncio.Task]: - done, still_pending = await asyncio.wait(pending, return_when=asyncio.FIRST_COMPLETED) - for task in done: - result = await task - emit_result(result, output_handle) - stats.record(result) - if progress_every > 0 and stats.completed % progress_every == 0: - print_progress(stats) - return still_pending - - -async def run(args: argparse.Namespace) -> int: - validate_output_path(args.output_file, overwrite=args.overwrite) - request_url = build_request_url(args) - input_file = args.input_file.resolve() - if not input_file.exists(): - raise SystemExit(f"Input file does not exist: {input_file}") - - print( - f"Replaying {input_file} -> {request_url} with concurrency={args.concurrency}, replay_times={args.replay_times}" - ) - - stats = ReplayStats() - pending: set[asyncio.Task] = set() - output_handle = args.output_file.open("w", encoding="utf-8") if args.output_file else None - started = time.perf_counter() - - try: - limits = httpx.Limits( - max_connections=args.concurrency, - max_keepalive_connections=max(20, args.concurrency), - ) - timeout = httpx.Timeout(args.timeout) - async with httpx.AsyncClient(limits=limits, timeout=timeout, http2=True, trust_env=False) as client: - with input_file.open("r", encoding="utf-8") as input_handle: - for replay_round in range(1, args.replay_times + 1): - input_handle.seek(0) - for line_number, line in enumerate(input_handle, start=1): - if args.max_requests is not None and stats.submitted >= args.max_requests: - break - - stripped = line.strip() - if not stripped: - continue - - try: - raw_payload = json.loads(stripped) - except json.JSONDecodeError as exc: - stats.submitted += 1 - result = make_input_error_result(replay_round, line_number, f"Invalid JSON: {exc}") - emit_result(result, output_handle) - stats.record(result) - continue - - if not isinstance(raw_payload, dict): - stats.submitted += 1 - result = make_input_error_result(replay_round, line_number, "JSON line must be an object") - emit_result(result, output_handle) - stats.record(result) - continue - - payload = normalize_payload(raw_payload, args) - pending.add( - asyncio.create_task( - send_request( - client=client, - request_url=request_url, - api_key=args.api_key, - replay_round=replay_round, - line_number=line_number, - payload=payload, - retries=args.retries, - ) - ) - ) - stats.submitted += 1 - - if len(pending) >= args.concurrency: - pending = await collect_completed( - pending, - stats=stats, - output_handle=output_handle, - progress_every=args.progress_every, - ) - - if args.max_requests is not None and stats.submitted >= args.max_requests: - break - - while pending: - pending = await collect_completed( - pending, - stats=stats, - output_handle=output_handle, - progress_every=args.progress_every, - ) - finally: - if output_handle is not None: - output_handle.close() - - summary = make_summary( - stats, - elapsed_s=time.perf_counter() - started, - request_url=request_url, - output_file=args.output_file, - replay_times=args.replay_times, - ) - print(json.dumps(summary, indent=2, ensure_ascii=False)) - return 0 if stats.failed == 0 else 1 - - -def main() -> int: - args = parse_args() - return asyncio.run(run(args)) - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/trace_timeline_viewer.py b/tools/trace_timeline_viewer.py deleted file mode 100644 index f08683f2ec..0000000000 --- a/tools/trace_timeline_viewer.py +++ /dev/null @@ -1,2370 +0,0 @@ -#!/usr/bin/env python3 -"""Build and serve an interactive timeline viewer for rollout trace dumps. - -The viewer consumes a rollout debug dump `.pt` file, extracts per-sample trace -events, rebuilds spans and point events, and writes a lightweight JSON cache -plus a self-contained HTML viewer next to the source file. -""" - -from __future__ import annotations - -import argparse -import functools -import json -import pickle -import socketserver -import sys -import time -import types -from dataclasses import dataclass -from http.server import SimpleHTTPRequestHandler -from pathlib import Path -from typing import Any - -import torch - - -CACHE_VERSION = 1 - - -class _MissingPickleObject: - def __setstate__(self, state: Any) -> None: - if isinstance(state, dict): - self.__dict__.update(state) - return - self.__dict__["_raw_state"] = state - - -_MISSING_PICKLE_GLOBALS: set[tuple[str, str]] = set() - - -def _ensure_dummy_module(module_name: str) -> types.ModuleType: - module = sys.modules.get(module_name) - if isinstance(module, types.ModuleType): - return module - - module = types.ModuleType(module_name) - sys.modules[module_name] = module - if "." in module_name: - parent_name, child_name = module_name.rsplit(".", 1) - parent = _ensure_dummy_module(parent_name) - setattr(parent, child_name, module) - return module - - -def _make_dummy_pickle_global(module_name: str, name: str) -> type[_MissingPickleObject]: - module = _ensure_dummy_module(module_name) - existing = getattr(module, name, None) - if isinstance(existing, type): - return existing - - dummy_type = type(name, (_MissingPickleObject,), {"__module__": module_name}) - setattr(module, name, dummy_type) - _MISSING_PICKLE_GLOBALS.add((module_name, name)) - return dummy_type - - -class _DummyFallbackUnpickler(pickle.Unpickler): - def find_class(self, module: str, name: str) -> Any: - try: - return super().find_class(module, name) - except (AttributeError, ImportError, ModuleNotFoundError): - return _make_dummy_pickle_global(module, name) - - -_DUMMY_FALLBACK_PICKLE_MODULE = types.SimpleNamespace( - __name__="pickle", - Unpickler=_DummyFallbackUnpickler, - load=pickle.load, - loads=pickle.loads, -) - - -@dataclass -class TimelinePaths: - pt_path: Path - cache_path: Path - html_path: Path - - -def _json_safe(value: Any) -> Any: - if isinstance(value, (str, int, float, bool)) or value is None: - return value - if isinstance(value, dict): - return {str(k): _json_safe(v) for k, v in value.items()} - if isinstance(value, (list, tuple)): - return [_json_safe(v) for v in value] - return str(value) - - -def _round_float(value: float | None) -> float | None: - if value is None: - return None - return round(float(value), 6) - - -def _compact_text(value: Any, max_len: int = 256) -> Any: - value = _json_safe(value) - if not isinstance(value, str): - return value - if len(value) <= max_len: - return value - return f"{value[:max_len]}..." - - -def _safe_duration(start: float | None, end: float | None) -> float | None: - if start is None or end is None: - return None - return max(0.0, float(end) - float(start)) - - -def _to_sample_dict(sample: Any) -> dict[str, Any]: - if hasattr(sample, "to_dict"): - sample = sample.to_dict() - if isinstance(sample, dict): - return sample - result = {} - for key in ( - "group_index", - "index", - "prompt", - "response", - "response_length", - "reward", - "metadata", - "source", - "status", - "label", - "trace", - ): - if hasattr(sample, key): - result[key] = getattr(sample, key) - return result - - -def _infer_source(sample: dict[str, Any], metadata: dict[str, Any]) -> Any: - if sample.get("source") not in (None, ""): - return sample.get("source") - if metadata.get("source") not in (None, ""): - return metadata.get("source") - if metadata.get("source_name") not in (None, ""): - return metadata.get("source_name") - for key, value in metadata.items(): - if "source" in str(key).lower() and value not in (None, ""): - return value - return None - - -def _event_timestamp(event: dict[str, Any]) -> float | None: - ts = event.get("ts") - if ts is None: - return None - try: - return float(ts) - except (TypeError, ValueError): - return None - - -def _normalize_trace_events(trace: dict[str, Any]) -> list[dict[str, Any]]: - raw_events = trace.get("events") or [] - normalized = [] - active_stack: list[str] = [] - - for order, raw_event in enumerate(raw_events): - if not isinstance(raw_event, dict): - continue - ts = _event_timestamp(raw_event) - if ts is None: - continue - - event = { - "order": order, - "ts": ts, - "type": _json_safe(raw_event.get("type")), - "name": _json_safe(raw_event.get("name")), - "attempt": int(raw_event.get("attempt", trace.get("attempt", 0)) or 0), - "sample_id": _json_safe(raw_event.get("sample_id", trace.get("sample_id"))), - "group_id": _json_safe(raw_event.get("group_id", trace.get("group_id"))), - "span_id": _json_safe(raw_event.get("span_id")), - "parent_span_id": _json_safe(raw_event.get("parent_span_id")), - "attrs": _json_safe(raw_event.get("attrs") or {}), - } - event["inferred_parent_span_id"] = active_stack[-1] if active_stack else None - normalized.append(event) - - if event["type"] == "span_start" and event["span_id"]: - active_stack.append(event["span_id"]) - continue - - if event["type"] == "span_end" and event["span_id"]: - for idx in range(len(active_stack) - 1, -1, -1): - if active_stack[idx] == event["span_id"]: - del active_stack[idx] - break - - return normalized - - -def _span_name(item: dict[str, Any]) -> str: - return str(item.get("name") or "span") - - -def _span_type(item: dict[str, Any]) -> str: - if item["type"] == "event": - return "point_event" - if item["type"] == "orphan_end": - return "orphan_end" - return item["state"] - - -def _compute_span_depths(spans: list[dict[str, Any]]) -> dict[str, int]: - span_by_id = {span["span_id"]: span for span in spans if span.get("span_id")} - cache: dict[str, int] = {} - - def resolve(span_id: str | None, seen: set[str]) -> int: - if not span_id or span_id not in span_by_id: - return 0 - if span_id in cache: - return cache[span_id] - if span_id in seen: - cache[span_id] = 0 - return 0 - seen.add(span_id) - parent_id = span_by_id[span_id].get("parent_span_id") - depth = 0 if not parent_id or parent_id not in span_by_id else resolve(parent_id, seen) + 1 - cache[span_id] = depth - return depth - - for span in spans: - span_id = span.get("span_id") - if span_id: - resolve(span_id, set()) - return cache - - -def _build_items_from_trace(sample: dict[str, Any], sample_idx: int) -> dict[str, Any] | None: - trace = sample.get("trace") - if not isinstance(trace, dict): - return None - - events = _normalize_trace_events(trace) - if not events: - return None - - open_starts: dict[str, dict[str, Any]] = {} - closed_spans: list[dict[str, Any]] = [] - point_events: list[dict[str, Any]] = [] - orphan_ends: list[dict[str, Any]] = [] - all_timestamps: list[float] = [] - - for event in events: - all_timestamps.append(event["ts"]) - event_type = event["type"] - - if event_type == "span_start" and event["span_id"]: - open_starts[event["span_id"]] = { - "type": "span", - "state": "closed_span", - "name": event["name"], - "start_ts": event["ts"], - "end_ts": None, - "display_end_ts": None, - "attempt": event["attempt"], - "span_id": event["span_id"], - "parent_span_id": event.get("parent_span_id"), - "start_attrs": event.get("attrs") or {}, - "end_attrs": {}, - } - continue - - if event_type == "span_end": - span_id = event.get("span_id") - start_record = open_starts.pop(span_id, None) if span_id else None - if start_record is None: - orphan_ends.append( - { - "type": "orphan_end", - "state": "orphan_end", - "name": event["name"], - "ts": event["ts"], - "attempt": event["attempt"], - "span_id": span_id, - "parent_span_id": event.get("parent_span_id") or event.get("inferred_parent_span_id"), - "attrs": event.get("attrs") or {}, - } - ) - continue - - start_record["end_ts"] = event["ts"] - start_record["display_end_ts"] = event["ts"] - start_record["end_attrs"] = event.get("attrs") or {} - closed_spans.append(start_record) - continue - - point_events.append( - { - "type": "event", - "state": "point_event", - "name": event["name"], - "ts": event["ts"], - "attempt": event["attempt"], - "span_id": None, - "parent_span_id": event.get("inferred_parent_span_id"), - "attrs": event.get("attrs") or {}, - } - ) - - row_end_ts = max(all_timestamps) if all_timestamps else None - open_spans = list(open_starts.values()) - all_spans = closed_spans + open_spans - span_depths = _compute_span_depths(all_spans) - span_by_id = {span["span_id"]: span for span in all_spans if span.get("span_id")} - sibling_groups: dict[str | None, list[dict[str, Any]]] = {} - - for span in all_spans: - sibling_groups.setdefault(span.get("parent_span_id"), []).append(span) - - for siblings in sibling_groups.values(): - siblings.sort(key=lambda item: (item["start_ts"], item["end_ts"] or float("inf"), _span_name(item))) - - def nearest_closed_ancestor_end(span: dict[str, Any]) -> float | None: - current_parent = span.get("parent_span_id") - while current_parent: - parent = span_by_id.get(current_parent) - if parent is None: - return None - if parent.get("end_ts") is not None: - return float(parent["end_ts"]) - current_parent = parent.get("parent_span_id") - return None - - for span in open_spans: - candidates: list[tuple[float, str]] = [] - if row_end_ts is not None: - candidates.append((row_end_ts, "row_end")) - - siblings = sibling_groups.get(span.get("parent_span_id"), []) - for sibling in siblings: - if sibling is span: - continue - sibling_start = float(sibling["start_ts"]) - if sibling_start > float(span["start_ts"]): - candidates.append((sibling_start, "next_sibling_start")) - break - - ancestor_end = nearest_closed_ancestor_end(span) - if ancestor_end is not None and ancestor_end > float(span["start_ts"]): - candidates.append((ancestor_end, "ancestor_end")) - - if candidates: - display_end_ts, clipped_by = min(candidates, key=lambda item: item[0]) - if display_end_ts <= float(span["start_ts"]): - display_end_ts = float(span["start_ts"]) - clipped_by = "self" - else: - display_end_ts = float(span["start_ts"]) - clipped_by = "self" - - span["state"] = "open_span" - span["display_end_ts"] = display_end_ts - span.setdefault("end_attrs", {}) - span["end_attrs"]["clipped_by"] = clipped_by - - for span in all_spans: - span["depth"] = span_depths.get(span.get("span_id") or "", 0) - span["lane"] = span["depth"] - - for event in point_events: - parent_span_id = event.get("parent_span_id") - event["depth"] = span_depths.get(parent_span_id or "", 0) - event["lane"] = event["depth"] - - for item in orphan_ends: - parent_span_id = item.get("parent_span_id") - item["depth"] = span_depths.get(parent_span_id or "", 0) - item["lane"] = item["depth"] - - def parent_span_name(parent_span_id: str | None) -> str | None: - if not parent_span_id: - return None - parent = span_by_id.get(parent_span_id) - if not parent: - return None - return parent.get("name") - - all_items: list[dict[str, Any]] = [] - for span in all_spans: - all_items.append( - { - "type": "span", - "state": span["state"], - "name": span["name"], - "start_ts": _round_float(span["start_ts"]), - "end_ts": _round_float(span["end_ts"]), - "display_end_ts": _round_float(span["display_end_ts"]), - "attempt": span["attempt"], - "span_id": span.get("span_id"), - "parent_span_id": span.get("parent_span_id"), - "parent_span_name": parent_span_name(span.get("parent_span_id")), - "lane": span["lane"], - "depth": span["depth"], - "attrs": { - "start_attrs": _json_safe(span.get("start_attrs") or {}), - "end_attrs": _json_safe(span.get("end_attrs") or {}), - }, - } - ) - - for event in point_events: - all_items.append( - { - "type": "event", - "state": "point_event", - "name": event["name"], - "ts": _round_float(event["ts"]), - "attempt": event["attempt"], - "span_id": None, - "parent_span_id": event.get("parent_span_id"), - "parent_span_name": parent_span_name(event.get("parent_span_id")), - "lane": event["lane"], - "depth": event["depth"], - "attrs": _json_safe(event.get("attrs") or {}), - } - ) - - for item in orphan_ends: - all_items.append( - { - "type": "orphan_end", - "state": "orphan_end", - "name": item["name"], - "ts": _round_float(item["ts"]), - "attempt": item["attempt"], - "span_id": item.get("span_id"), - "parent_span_id": item.get("parent_span_id"), - "parent_span_name": parent_span_name(item.get("parent_span_id")), - "lane": item["lane"], - "depth": item["depth"], - "attrs": _json_safe(item.get("attrs") or {}), - } - ) - - pd_lane_specs = [ - ( - "prefill", - "P", - [ - "pd_prefill_bootstrap_queue_duration", - "pd_bootstrap_duration", - "pd_alloc_waiting_duration", - "pd_prefill_forward_duration", - "pd_prefill_transfer_queue_duration", - ], - ), - ( - "decode", - "D", - [ - "pd_decode_prealloc_duration", - "pd_decode_transfer_duration", - "pd_decode_forward_duration", - ], - ), - ] - next_virtual_lane = max((item["lane"] for item in all_items), default=-1) - for span in all_spans: - if span["state"] != "closed_span" or span.get("end_ts") is None: - continue - end_attrs = span.get("end_attrs") or {} - for role, suffix, keys in pd_lane_specs: - role_attrs = { - key: value for key in keys if isinstance((value := end_attrs.get(key)), (int, float)) and value > 0 - } - if not role_attrs: - continue - next_virtual_lane += 1 - role_attrs.update( - { - "timeline_pd_virtual_role": role, - "timeline_pd_parent_name": span["name"], - "timeline_pd_parent_duration": _round_float(_safe_duration(span["start_ts"], span["end_ts"])), - } - ) - all_items.append( - { - "type": "span", - "state": "closed_span", - "name": f'{span["name"]} [{suffix}]', - "start_ts": _round_float(span["start_ts"]), - "end_ts": _round_float(span["end_ts"]), - "display_end_ts": _round_float(span["display_end_ts"]), - "attempt": span["attempt"], - "span_id": f'{span.get("span_id") or span["name"]}:pd:{role}', - "parent_span_id": span.get("span_id"), - "parent_span_name": span["name"], - "lane": next_virtual_lane, - "depth": next_virtual_lane, - "attrs": { - "start_attrs": {}, - "end_attrs": _json_safe(role_attrs), - }, - } - ) - - all_items.sort( - key=lambda item: ( - item["lane"], - item.get("start_ts", item.get("ts", 0.0)), - item.get("display_end_ts", item.get("ts", 0.0)), - item["name"], - ) - ) - - row_start = min(item.get("start_ts", item.get("ts")) for item in all_items) - row_end = max(item.get("display_end_ts", item.get("ts")) for item in all_items) - response_lengths = [] - for item in all_items: - attrs = item.get("attrs") or {} - for payload in (attrs, attrs.get("start_attrs"), attrs.get("end_attrs")): - if not isinstance(payload, dict): - continue - response_length = payload.get("response_length") - if isinstance(response_length, (int, float)): - response_lengths.append(int(response_length)) - - metadata = sample.get("metadata") or {} - if not isinstance(metadata, dict): - metadata = {} - - reward = sample.get("reward") - if isinstance(reward, dict): - reward = _json_safe(reward) - - return { - "row_id": sample_idx, - "sample_index": sample.get("index", sample_idx), - "group_index": sample.get("group_index"), - "source": _compact_text(_infer_source(sample, metadata), max_len=64), - "status": _compact_text(sample.get("status"), max_len=64), - "label": _compact_text(sample.get("label"), max_len=256), - "reward": reward, - "trace_id": _json_safe(trace.get("trace_id")), - "attempt": int(trace.get("attempt", 0) or 0), - "start": row_start, - "end": row_end, - "duration": _round_float(_safe_duration(row_start, row_end)), - "lane_count": 1 + max((item["lane"] for item in all_items), default=0), - "item_count": len(all_items), - "closed_span_count": sum(1 for item in all_items if item["state"] == "closed_span"), - "open_span_count": sum(1 for item in all_items if item["state"] == "open_span"), - "point_event_count": sum(1 for item in all_items if item["state"] == "point_event"), - "orphan_count": sum(1 for item in all_items if item["state"] == "orphan_end"), - "total_response_length": sum(response_lengths), - "max_response_length": max(response_lengths, default=0), - "items": all_items, - } - - -def _build_cache_data(pt_path: Path) -> dict[str, Any]: - before_missing = len(_MISSING_PICKLE_GLOBALS) - data = torch.load( - pt_path, - map_location="cpu", - weights_only=False, - pickle_module=_DUMMY_FALLBACK_PICKLE_MODULE, - ) - if len(_MISSING_PICKLE_GLOBALS) > before_missing: - missing_names = ", ".join(f"{module}.{name}" for module, name in sorted(_MISSING_PICKLE_GLOBALS)) - print( - f"[trace_timeline_viewer] substituted missing pickle globals with dummy classes: {missing_names}", - file=sys.stderr, - ) - samples = data["samples"] if isinstance(data, dict) and "samples" in data else data - - rows: list[dict[str, Any]] = [] - global_start = None - global_end = None - - for sample_idx, raw_sample in enumerate(samples): - sample = _to_sample_dict(raw_sample) - row = _build_items_from_trace(sample, sample_idx) - if row is None: - continue - rows.append(row) - global_start = row["start"] if global_start is None else min(global_start, row["start"]) - global_end = row["end"] if global_end is None else max(global_end, row["end"]) - - return { - "cache_version": CACHE_VERSION, - "pt_path": str(pt_path), - "generated_at": time.time(), - "sample_count": len(rows), - "global_start": _round_float(global_start), - "global_end": _round_float(global_end), - "rows": rows, - } - - -def _timeline_paths(pt_path: Path) -> TimelinePaths: - stem = pt_path.stem - directory = pt_path.parent - return TimelinePaths( - pt_path=pt_path, - cache_path=directory / f"{stem}.trace_timeline_cache.json", - html_path=directory / f"{stem}.trace_timeline_viewer.html", - ) - - -def ensure_cache(paths: TimelinePaths, rebuild: bool = False) -> dict[str, Any]: - if not rebuild and paths.cache_path.exists() and paths.cache_path.stat().st_mtime >= paths.pt_path.stat().st_mtime: - with paths.cache_path.open("r", encoding="utf-8") as handle: - cached = json.load(handle) - if cached.get("cache_version") == CACHE_VERSION: - return cached - - cache_data = _build_cache_data(paths.pt_path) - with paths.cache_path.open("w", encoding="utf-8") as handle: - json.dump(cache_data, handle, ensure_ascii=True, separators=(",", ":")) - return cache_data - - -HTML_TEMPLATE = r""" - - - - - __TITLE__ - - - -
-
-
-
- Trace Timeline - -
- -
-
-
- - - - - - - - - - - - -
-
- - drag = pan, wheel = zoom, click = set cursor and select item - - -
-
-
- -
-
-
- -
-
-
-
- -
-
- -
-
-
- - - - -""" - - -def ensure_html(paths: TimelinePaths) -> None: - title = f"{paths.pt_path.name} trace timeline" - html = HTML_TEMPLATE.replace("__CACHE_FILE__", paths.cache_path.name).replace("__TITLE__", title) - with paths.html_path.open("w", encoding="utf-8") as handle: - handle.write(html) - - -class QuietHandler(SimpleHTTPRequestHandler): - def log_message(self, format: str, *args: Any) -> None: - return - - -def serve_directory(directory: Path, port: int) -> None: - handler = functools.partial(QuietHandler, directory=str(directory)) - with socketserver.TCPServer(("0.0.0.0", port), handler) as httpd: - print(f"Serving http://127.0.0.1:{port}/") - print("Press Ctrl+C to stop.") - try: - httpd.serve_forever() - except KeyboardInterrupt: - pass - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("pt_path", help="Path to rollout debug dump .pt file") - parser.add_argument("--rebuild", action="store_true", help="Rebuild cache even if it already exists") - parser.add_argument( - "--serve", - action=argparse.BooleanOptionalAction, - default=True, - help="Start a local static file server for the generated HTML", - ) - parser.add_argument("--port", type=int, default=9999, help="Port for --serve") - return parser.parse_args() - - -def main() -> None: - args = parse_args() - pt_path = Path(args.pt_path).expanduser().resolve() - if not pt_path.exists(): - raise SystemExit(f"pt file not found: {pt_path}") - - paths = _timeline_paths(pt_path) - cache_data = ensure_cache(paths, rebuild=args.rebuild) - ensure_html(paths) - - print(f"pt: {paths.pt_path}") - print(f"cache: {paths.cache_path}") - print(f"html: {paths.html_path}") - print(f"samples: {cache_data['sample_count']}") - - if args.serve: - serve_directory(paths.html_path.parent, args.port) - - -if __name__ == "__main__": - main() diff --git a/train.py b/train.py index 2404a0bbd1..7e7f752b3a 100644 --- a/train.py +++ b/train.py @@ -2,7 +2,7 @@ from slime.ray.placement_group import create_placement_groups, create_rollout_manager, create_training_models from slime.utils.arguments import parse_args -from slime.utils.logging_utils import configure_logger, finish_tracking, init_tracking, update_tracking_open_metrics +from slime.utils.logging_utils import configure_logger, init_tracking from slime.utils.misc import should_run_periodic_action @@ -16,17 +16,13 @@ def train(args): # need to initialize rollout manager first to calculate num_rollout rollout_manager, num_rollout_per_epoch = create_rollout_manager(args, pgs["rollout"]) - # Update primary W&B with SGLang metrics endpoint now that servers are up. - router_addr = ray.get(rollout_manager.get_metrics_router_addr.remote()) - update_tracking_open_metrics(args, router_addr) - # create the actor and critic models actor_model, critic_model = create_training_models(args, pgs, rollout_manager) if args.offload_rollout: ray.get(rollout_manager.onload_weights.remote()) - # Always push actor weights to rollout once weights are loaded. + # always update weight first so that sglang has the loaded weights from training. actor_model.update_weights() if args.check_weight_update_equal: @@ -39,18 +35,19 @@ def train(args): if args.num_rollout == 0 and args.eval_interval is not None: ray.get(rollout_manager.eval.remote(rollout_id=0)) - def offload_train(actor_trains_this_step): - # Each model auto-offloads after train() when offload_train is set, - # so we only need clear_memory for the non-offload case. - if not args.offload_train: - if not args.use_critic or actor_trains_this_step: - actor_model.clear_memory() + def offload_train(rollout_id): + if args.offload_train: + if args.use_critic: + critic_model.offload() + if rollout_id >= args.num_critic_only_steps: + actor_model.offload() else: - critic_model.clear_memory() + actor_model.offload() + else: + actor_model.clear_memory() def save(rollout_id): - actor_trains_this_step = (not args.use_critic) or rollout_id >= args.num_critic_only_steps - if actor_trains_this_step: + if (not args.use_critic) or (rollout_id >= args.num_critic_only_steps): actor_model.save_model( rollout_id, force_sync=rollout_id == args.num_rollout - 1, @@ -64,6 +61,7 @@ def save(rollout_id): ray.get(rollout_manager.save.remote(rollout_id)) # train loop. + # note that for async training, one can change the position of the sync operation(ray.get). for rollout_id in range(args.start_rollout_id, args.num_rollout): if args.eval_interval is not None and rollout_id == 0 and not args.skip_eval_before_train: ray.get(rollout_manager.eval.remote(rollout_id)) @@ -73,25 +71,21 @@ def save(rollout_id): if args.offload_rollout: ray.get(rollout_manager.offload.remote()) - actor_trains_this_step = (not args.use_critic) or rollout_id >= args.num_critic_only_steps - if args.use_critic: - value_refs = critic_model.async_train(rollout_id, rollout_data_ref) - if actor_trains_this_step: - ray.get(actor_model.async_train(rollout_id, rollout_data_ref, external_data=value_refs)) - else: - ray.get(value_refs) + critic_train_handle = critic_model.async_train(rollout_id, rollout_data_ref) + if rollout_id >= args.num_critic_only_steps: + ray.get(actor_model.async_train(rollout_id, rollout_data_ref)) + ray.get(critic_train_handle) else: ray.get(actor_model.async_train(rollout_id, rollout_data_ref)) if should_run_periodic_action(rollout_id, args.save_interval, num_rollout_per_epoch, args.num_rollout): save(rollout_id) - offload_train(actor_trains_this_step) + offload_train(rollout_id) if args.offload_rollout: ray.get(rollout_manager.onload_weights.remote()) actor_model.update_weights() - if args.offload_rollout: ray.get(rollout_manager.onload_kv.remote()) @@ -99,7 +93,6 @@ def save(rollout_id): ray.get(rollout_manager.eval.remote(rollout_id)) ray.get(rollout_manager.dispose.remote()) - finish_tracking(args) if __name__ == "__main__": diff --git a/train_async.py b/train_async.py index 6960bd0558..fc6c17d58c 100644 --- a/train_async.py +++ b/train_async.py @@ -2,7 +2,7 @@ from slime.ray.placement_group import create_placement_groups, create_rollout_manager, create_training_models from slime.utils.arguments import parse_args -from slime.utils.logging_utils import configure_logger, finish_tracking, init_tracking, update_tracking_open_metrics +from slime.utils.logging_utils import configure_logger, init_tracking from slime.utils.misc import should_run_periodic_action @@ -18,14 +18,10 @@ def train(args): # need to initialize rollout manager first to calculate num_rollout rollout_manager, num_rollout_per_epoch = create_rollout_manager(args, pgs["rollout"]) - # Update primary W&B with SGLang metrics endpoint now that servers are up. - router_addr = ray.get(rollout_manager.get_metrics_router_addr.remote()) - update_tracking_open_metrics(args, router_addr) - # create the actor and critic models actor_model, critic_model = create_training_models(args, pgs, rollout_manager) - # Always push actor weights to rollout once weights are loaded. + # always update weight first so that sglang has the loaded weights from training. actor_model.update_weights() if args.check_weight_update_equal: @@ -43,21 +39,18 @@ def train(args): rollout_data_next_future = rollout_manager.generate.remote(rollout_id + 1) if args.use_critic: - actor_trains_this_step = rollout_id >= args.num_critic_only_steps - value_refs = critic_model.async_train(rollout_id, rollout_data_curr_ref) - if actor_trains_this_step: - ray.get(actor_model.async_train(rollout_id, rollout_data_curr_ref, external_data=value_refs)) - else: - ray.get(value_refs) + critic_train_handle = critic_model.async_train(rollout_id, rollout_data_curr_ref) + if rollout_id >= args.num_critic_only_steps: + ray.get(actor_model.async_train(rollout_id, rollout_data_curr_ref)) + ray.get(critic_train_handle) else: ray.get(actor_model.async_train(rollout_id, rollout_data_curr_ref)) if should_run_periodic_action(rollout_id, args.save_interval, num_rollout_per_epoch, args.num_rollout): - if (not args.use_critic) or rollout_id >= args.num_critic_only_steps: - actor_model.save_model( - rollout_id, - force_sync=rollout_id == args.num_rollout - 1, - ) + actor_model.save_model( + rollout_id, + force_sync=rollout_id == args.num_rollout - 1, + ) if args.use_critic: critic_model.save_model( rollout_id, @@ -76,7 +69,6 @@ def train(args): ray.get(rollout_manager.eval.remote(rollout_id)) ray.get(rollout_manager.dispose.remote()) - finish_tracking(args) if __name__ == "__main__":

-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⪙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%0A|8y!x-iBh7A|^N@P!&$d1Z%#d&) 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 z z4@-4quopQjm&3Qc4WShOh&|HNv5qLItmhm!Gb1kh$Yc+?Y7npR-S{Hrt&M!U-b0vP zhTQFo)h++{&!24M%K}WBN}Fw;xSf0yMn;A16v9B=+5h+Nf*EGP4S?V>liG5hSTT}1 ziq#K6xAZD?z0Pz?uUp>z`(^uBr=Ys{KQyuShgXW1gm@L&fYkTiL;?a<#qhjN?}wk| z|7#svIs>wO+i(Fq-7ESRM zwGZ-Y9v$5HnvWvI$_vNwmj$_A|LGeSL>@E}qTApyfnB&;jj{@f1Kzuib{u(ryq5^_ z7^NiL>ht~VRM1|qe*fOB=J_W;)Rb+K==w7htJNkkxgwxo5Mby1ZAUrtxaejzWW$G$ z2HV{72$WdgtQnjKFFd%?=D~H3T?w%LC8Udx?mYj~nQfG`@gmQzk^G1?i0)S$!d@Yk zRp%sR()amly)mCu0QZ%20_K}fVMdRI%GsgOyagtv!3pDPP>SES6gbs4ejYP&1u&$T z`!V+UY;DbM7oa;ip@$e$Wp|HNvkbj^>=E7ArR&NSuM%ob#Mw*}(F%#ZOJa6CHa%`! zyw{&bB)*%9N$ijxUjztg-uf;GRnk~5a{=rK}D+Fta%4XKDK{0R#rBqB|??I zX%nsHdZar(L&$gaMAn=rnYXJx?n@$iU2-{Sw~25ScpAYYRTT5<8W1h`ZI|?x{|;<^ z#3N;Gk!P$?$#4y}5LFe6fz3ZyU1?e|8?I}FkK5VmbVlj70^+2M*Issw6(44WdMXC) zz9le4b<~D)8t4~2Ry7zb(anofIa%e1k7J6%xD5}dBaby1m0b7Kd4$5v?JFU(_eNQw zcgCI%YqX`{2}#3cij7%Q$DcwJM`D#TrQ7b)6KB;Lv|69keodXP7x>uxU{{i*WZdG>BPfL!nP_f=zN^s$M4`Ym6`~i7A z%FJeBC;jO{gY5N3aqPCl<(lwnZCv4mHT&?%hBF)dpzyE1r}Y`WSz+O`bp1Jct6kqD zsPpYem!hMj#uBJJX3{RSefg{NMDHvpVnlLLv)?UIM0GwzkD?XBCZpogD_y-beBtAT zryg#{83G&q)h0ni13gaGMvMKbVf`D6Dc8wf^VT2}7}>*L8Ui70ltcbjHq#RY=GPaG1Wb`! z?*k12x+1N7MUX*)H;Pwu(o#(agfayWWP3vvVo~|Wj^&eJMyIsMKg^zhpZlx$ebl1-!jURzJmHd?ae-CT2 z289QHzrP4EWREjSU0xZEY7ORW)lQnr&*OyONV=;aND*S<0?`A-t>X9^L%GKYX#WHLqU<#~0wNtXGfsM2O_Pw^ zK34;0ugr-Ij#Ifo**LV*gkum2RAj4<)uwilDBhwcQQ7hkJOrYuDB_+taG zw0Qe~<;8v@c&>mS^WyB{NosA9^_Itjyv**G*OAWK!H{PxDhZyzAHQHtXDZd2hlmqR zIY`nvy-Dp{&8i@SHf^^)L+JU8$EaQK>Oh`n=zWuskWvJSMLOua#PQdz4qe7=U$nnv z9vdC~Y@E80n#w?Lf~k|AMa;VI&!QWgKT{3p?Jb6Zst+K?ME9O%H-0&tE)+$Af|fsZ zT$8J7}@`|?G& zkV`5}l{OW7F|f4{kf|;2Y8iRuNmJciHQom{NBYua;Gs) zx>n6`AWD>%)4E|KVnZDu=bbTaGTA%hbd>Fwsd+-xy(U{+bs%LautPFei#Ifyx6!tNrc*1G9+gY~c-d}1Xwdcn;kiKLGCsXj~(R*matDopmFAei9j_@Eo^ z{S}j-!2POj?Jwlg#O*BIXHsqZulcSX#VbyICawR4!DHLgk?MiN$?y&Hd7W#I6O3*e zvJHXkd0?txCcqGTN>awYH6*k9dVD#*#KW^osgt`(8Eb`L)k1Easi1ykhi|)Kq^zk+ zeFA~?&z0V+BR#J4F?0(6K;HQ6UN^5VQj3Q(PL3c3{K+k1Q&5lM>2rJSirv2otZO}H zSX(!PZfPWOvH&f=yqhkHlPml4pD#YxR~^G3r9$xL;=GHeBr)}KQ?!Y6z1Avj5o$h| z?sX+*lM_uqNx9zF_*%tS>t;={-TZF()6A!oO2QuGGq7EGkhI5=F7?0nJxz2EKp8u8 zd@OSCj_9>EEQfWhcv!cq9S_KHz$HV!LNPnaLow=Iwb!%l4skRDJ}uGKomA|iK72wy ziNrDShiL)^S8OY&W zEnc3F*96mF#Oa;}9bZ#_Lv)XR$quy(w5(y#TYpS{F8;(+hSR{wW&H)?+5^_wQdSl7 zZ|5NnJI9f0tp_81#9s%>6OsKaORAeKQg0g|_W^tbd0}f&*xh7bx%svD?`81mv(%?e zh_k}FwXKDah*whSb)*@On!#eIN{KIoZ{K~Zq5bCeoWi6rJN=wYmIqJXr91X>;EO4> z4B6czpLX{W=Z13@|HX3su)p7fe6R~-!)epB&O`9A(EXh!~Td;sz0 z{)nLxe+cn)G9`LN(k1r{2 ze~Qhh>c-4AZtQwU3hXDFpX8jS3mE)a>`yQBQ!;s)vg*a{9y>WJ0G|>#p6T8}7~P4Z z1W~S6qFA>%vaUKvnVdfi-8naY8-Q@2S_1r|LCl10x9V4cr9tZNu}F|aQCKS?BS%}N2=n2ZsYq>ANTi62(%7-0%u4^ zr?Fu4gBeU*$I~jD-_!cXDS@E`Ee*jyaD|%l9%GQ;4f%F%Cu18YTP_NzK1KM#GHmUf z{2$qH{L%E?{S4rsTjMS3PmWiu<$}s~U(wwusE1kdY1+$b%`ia_PlCFJWiM%weh;EY zR3zp;buqV|ySX=-$1Z%2mUy>&w0kfS4Y2x$ya-u0!k#^qQ$ND2e-!3NGu1#J%JN?Kw z?rxi(jCz8V&pC?G;jG#6H;Z2U7Tp-mbXe6b^nshw_QSSE!!FN zq<5|FIae53#d23Un^Gevr(U8}Kwi%(rj??Vp8|C^&0XoT9 zSv#*4Y9_=-v=43$YUO1->$>su8a(stwy;vJlJTj{*tRWe=e|gR?qkL|l{DLctEEXXcZxmD%mn8w{>hxHV{5{ zMJIjJ{2pBbr>T#{nXAwfNdOZHIO~FHwEn}RSa;c+o$c5Alje=`nMn)Ak3o%{R6R5k*zRI@dSuA6IYV6AU$M;5 zRi7GvUln_Ex^agKh^3l+M_Z|APX)RgG_ULZxh4kWo@!(A_dLz%N-D>K7aMKj+t6Ux zA37!SGtsBX5$YbJdx8sNhm7(+z!XS1ZhwwKVra>Ng5)hchVsSm%BsKa@S^_#rhT(R zp64~#(Ua?EoWvfjy$ua}#hiFx8Lo!*DBauf#KS)5wn>3pp#nJ?h^*%zGh^%pYOl@w)B0Mabv&# z)AEBX6Ez?jUft14$L)ikO)0Pq*kw9%i^sfMtvQW^VZALtZA^ zkpGVb@J*#@KEVRqVtJ31I6b(gF!awFVRC&w*5fJ`R!?%^a!j>BJV~wkRhusX=%WOw z#}|F-Qo1O<{Efn7GUf{yrk3%M;_i3*_Z^l&D#J>uq#cF|1VN`?^xHsOyf0QG)eIj3 z9ACIJ&1`*V{q9ObSd7&AF{D)EU2|hkbGf|o_vi6f>H{$`(#Tr@*boinh$NgqxV?MtgwOuDg=<;7u zy-^?YZxkrzX^ZcGjC!yBZlxkM6e&eSBZIZ;POT1@Gap!*<6bft6b2Oi2WEN|q0wft zsOH;Y``(aQ^kgY2;)NYlNZQ59b8fvW zQ?)X6Y}S${vp`uUie32gDylL~A=KI9IBGtROX>#`wrN0lW*hdiVE)>sLw@tAy0^W| za`rWw#enIMBkSpcmODjwe{~%)p#~`yx7HaO6T^5DI%(Pn6(wa>x)SoEhjn67teo()iD-F|^^gB~ z!ZPMch5Bt&$PLK6prU@VA?Zv9x;5s*f-v#2`}sa1Qf9)%h(xp@cYlc~DC12r+i#57 zG;Ej~*)j2OiP)sqi|8PkbeR1XQxn5+NvO1KwVEEtsOkNUd0uJpzTLdw?YlTO00?Zg zLO)m*={#OmVwxl7`L(_L&U+7`mJv+ZxUHyDg>z0c#U%^h&O z=*J(aRY(W?M67p_<4b=Xf=@9kS4hp(Z0_syX}L8;-k<(*5#L6nsxABR?}($yoPp!g zlkeLhGFN}xy?TGN3Gv=?UfFxl5Lq`-nq~sqPWxNuI2f-*Cp%`HmBd-I%NQWh z($Ib&F;{QoJR-Ap9b5X)@#MH$)a>m$5&RQUn!wt2>_3%e^5?E^p3~_*Eyc%u2wvD9^z$*+|jPOFSVwT7qq0G z+c&miMOXH%{bW4+d`X5w3@@2Nm?KA%44BYcPz^*>w8onI0M7lLLEj3cyNc5|xRa&T z?2>pW;fG6~^$OCRub^USHu5kzpyYFD5^d8Hkn;eiv6{ zaOAL2-eB4U^S8(OeCYgrI5=~>oCtmCGsG$d-LKrM!~Z|N{yV6tHfkS*t)POUq7*4n zQ96X8bcl$EC`AP65FiAkOD8};MMb(umnH%NQbVsnDG3lDD!nTK0t5&Fk^mve$@9M7 zcjk9y&YXYu-gD31v)8@Wy4SkabxnJZAKakzA9z-WKU-i3g8qq3_q|_|(IDV8>^&l$ z{n^MN4Uadwe_ZZqwCs;NIEC$;&YzTqapSaak>Y;YHPwRn zfvYf^2eGv!X2%wgqGnkIuk3g2UqXcJLH=zXJkfNAYp_fV|O@x)sZ zoolz+VekuUy9P11g?C9~%LFrO>x5=o2C8AkgWfqY@s1yjdPyJzd_Qm7omw+SqO)CXZjZFoJ|U?V(GIW?RjKF(?~>?^JM(z|i)7l_nj87k^O6Z< z8l{QmTkiCfnz1~uXGCd?nIJWUpz6Ht^5e+wCpxMG0Rw_%S8>OfR{b-CVB!~#&={q3erfeNh10x?zi@b=GpQHhXDx=3BVGoJ zhwpT1L8Tch%2**hVNe4xt`tYIcxO!Lw6wC|>6CP;gk++{$l1@)K23d65lV2&)~Q#KF|vK6l}%v4*6Uxq;1x zXC)YqBr zGAJ7ZufmqRE!h@!-(1Qy&V?Jn`mQTAa?J#zqLP5cIGRhy|V;k$z;$@r+ET*99@i5OQHJ-akQNkJS26QH7@R!zOQsOJhtPRS|v zJ_;0)ChibED#Jm-*Xo8qSISSAd<*)!td2wH!Boa&i=^{?YZ%({A z$;W}o$#`lWwY{VV?HUN5n*G!LK2<(M42Gzd+n+6B-mo7Ga%`|`6iVsHIdv*MQp%!A zunFSfAk~_~yH_Ryg=RsY_;;)y-OmeJmGO|Kl_Ne|Of>%h1rCdyt#9+H=`Wg;(M@?pk7l#-MC4)orL0AHp$Xp9(0u{Y=w=T!Pi|Z}N*LW&a&S(2 zX#yM>r4Vyou;Q1>w;z_i)2W2#cn|yRJU_t%KbJSX-x|wdbiND?GyZxq&9}m=!d^JD zSO~hw{6vpU40X!7mST1iRtl@h$-w6XlS)&z?qyAHG3lMvdU}TmxS;-s57E1Vdw=!= z)FjZ4=JO|6{FO@M+9()2+VbDKy>#VHH;sb2Ms-%-6LTvq7>U~_Sxk(+{ygX^jro<5 z4=ofNIF&=q-$&m3zRC9yL(<9KhW5-VtrXa1ERk~$)VLx^Kv~(%h)Jmn3DNwZG0%3P zi`%E!FCTW&=){4>kiQqyc^E@Jp}0}rlm7hmx68dcar;df9@i%m5$E|VbwdB`QWIj_ zc~dp`K*Lk)LLv9E9-RU=oeod$$A0aF9h&YvY*(_)u%H7#$vB#pgZoBdUgyovIyfW zjxxG*TnSz;pGM>#E~$nHBOEWKWE@%^0`;Cfl91v}Wc01pfDjKO*E)gTB z{S&HIH>$(!#Mf;^15VkgZ_PAk3`g{_2nkaBG((X`%h+b*xQ(QF>K_0c`gyl*!x|xx z;^ZOxdG{_`{)i=r61h|Hz(oPc60~!&T~J1MoH#4Zlx^Q;pR3C|*h?f(fss?y>aX z-+fi-Hi>3-;_{W3XY#_X45RZCa8FyvZ(VCX2L97Zp{0jc29P0vu_^ohJ^!L*n$34+ z7Yn$;LQMX}#p83}jqAn3a$>!K|4xeKs*JIzM$A0akuUQrRVcHp0@PMEPPdMdFr>g! z!+QM6*vE7|VPDG@O7*qPhqc35Jl7r9p`UR#uvq^Xjfw5LVGaLv>#WUfG%vSB)kbxi zVD+udAy;=KrO@_!l0okm)io)WnOJDeOjY%*hYtZKswk$rhn35BtAzu2-iP0KU(qyd zS+1F?Z3AjA9SPfDN=kv1FW6KuiJ^FP%;OSUfyQZf%r`rLaioyQ169~B(h*UW69K>!xcISVkQ$?vo^d6U$bp&}u`-rxJX08fMIrjX9ZJ&SAyQ&(Fj zNu06znunzlp?ie=o8@PPE~kd6u6rno%#|2Te^#Sa^aqsL2qCI#LrIe8Xav zjx<66@Xn@N!Q3zcn{hqLoR0fO^<4*_->ce zRve^*?jJ_)*Jk0P1(osadC*l6NUt12+_WUUyH4ms4A3Dn{?hc})wUn&shgv2{qE|x z2ljXmt(oDjj}w+d1oZw=!N8YF@OT!q#E4RCAOOcasY_7H8jr9JT6YEyjAjhGXPc|L zpR|j$tF-xF!iX1ZCqrr%{}p9DTYcC6Y}$6bx+TSGDZuqwy2``;dh6NEym(W zc@6N6W}XyK;d_Hg0i8$r;6zNFZ7Fe9g=T-5C{^>E(qD&_ z;FgirQ4h~xz$fdT{!}A1yvgwk8$I|8uCm+I%j>^CBiyiUH>tYN@)h^w*1C!J@I*MO z4~Vkint3ezeUMVVW+^spI){*+Nn!u+Rv7D%Ig3$pF?nd3$RfqE01|(zK3ywuuGl}P zN_2X}k0X>$ZbN)0;*(u-da~#DzrD#&za1cwwlC7ycO^nvz|l0&0`&VUwnNbC(jb6Q zvqxR1J8bUp(p=Y)U5-s&a4)ZXJZJfGQ%GJkX1elf9B5XF$7v|SQia9BvK>{jM@DNu z4*$su5X|0tjq0_YBNx!ExMgYeFHS_`m8<(eqxk>6h0 zTS4VRR@xvP7=JD;3}wqy>*Vt}7}sNc-@eD^z`jVoJ!rCL^ij^P)7M`wK0Qr%oxN^Z z7tZs3SejE6G~ispIYW~|$Yf1|X9~J|E^iHWUq{|+m?~lvaN0AsUssg8lV}{s+<&%3 zJE|<=>E+23Ui@>Qcu$HCmjZr`U(hnDCWdRV-jv$h;ci>mgITda}-TztdR zKH72TNjozxOq|D7)SQTmX-RBrKY0d*D9(A*UhdlF&)9d*8L1W9XC#S%H~D?pq(q2RBPamY&^-GzpR&Q-~pOmXN9SJsB*bi)dmCIQenL0 zWMe-JlUiB4x3Bl@=^6ikkDu_w<>hXjj>px}FdvOYOil4TS7>{nq)Lh9sjMz?$^5=e zyV34?xy9~)RbUHM@U5+9kCg;u$smd4*jRI99oFTlUZf%Swckxy?M^^? zh}*xVxH;k7$v1R)`w+mj{1z6$d))m7%hZgg8ml|drP$_+l|m_}P!fBgLyT&_&3^!3%4IlWtaj$Mks% zshj4<{yN?_GRRR`FDN>{>z1Q7$ z9I?DV=+m~@h>MZ-ffH;n&XV#5Sv~&uD?S*0H4V(C&6X_LMAq7ISUeom*!NBQFoC2r zW@5uy}6*7%1H!3=vw|?=bcYlF!6nqGSXKgCc$fE;PQS8PKan3pz3m*MJ*-ep$d*Qj7rkX}!TtY(#Xk|j2A z_>7Qm2wP>#_YX*P;>{GuE#t+w+Xg5Rt18P&sC>^1=!&8p$Q)M>e?bg|imcQBaZ$mR z4%r6{w>_KtU70uF5^T+vY_yWB6B)||frBzr0h$k8$4t~Y4?Z^%?%FKB4i_0dzs%j9 zyx>QuM0x$TF=RFf+xXNOM#>}-x_R}$mM3v&*Cl=M(GhPe_~@%oQtQSH`j)DDw+OEPE@?UX*l~BG& zAjX=5TI^Z!jk5Enl`*cbF%mdo=QG%uoU#?3mSwUdP7c=}4 zn&&pX!2y|^xE|vT6>QGY>y%bK(0X!>;t1#gdv4EP8RUcRy9*ie*XI6RV9F&jQ@J9( z7#QdzJ?NlJQ4eloHAlGt%t?h`6=xQ?@J3GRj7=Y@uU<_vNWkC9t`94ee%M&5esT)7 zz4h)Ku@|^uMBk47)-y^zn>5o=FI3*9@^Z4V7s%DF@0#NqnpKa1B_Eci2#qU96OiVPvVc$oVzxczr_I_?a=wsou?nFF!KG3E@JRr|0Jfq4}qS1-E?_+2;`J?CP@H7Uega2@Tc zotzn}^DB7t;r@pruUm3%%;e-BleZeB4r(-2k&gy6;aJL{^z6$$6FuHs0+`7*XI^-` zeBIJ@AJ~H_hyyZuN8uAi;dc(rh#~`|-lXGyZcUS(knZRAv@G-=ZLelMMy}}nr9&2% z4fVWORVJjPhSejRX%~2#_UHjNRuDGY;>9v}sa9Tx>b! zXFC{VbRg>rt`(lwWYI)gy{0AGY?5SKor6_ca&>GxuGXft14e;=gi!LrdKBZ04L8x? z1T7J8z)krZe_#79fTaE@)6A=H7jof?pjBxGTM*`7wMWzM`|}XhioX~sg)upO$%a*F z3%X`(eHjL1S97|_NleJFg*VSCbS?)_%k9yiD-&g5Zc4w`n+k1{#vDwuRir~fPS4;n zE+zJu3-Li1uZ-R4$BN^%HZ6Y8rce#jTT{Rli~#4e(vdeIUn~9p3lV5l;WgF#{rxu) zaqLwK z7HhfG<#wGWbA3s-;_~b%I=qC7@F1#GzxLmn49@RBpFH*J-_+nP6>cBQpdLcVj)nc7 zdMFi|`6FC^I6CZtA}skwqtC~9{G=I$_^i!zEfDOpd%DiiPvw|*{NjHc+zw%qN3fAw zb*A9Gp7;K<-ppD;NbQf0`57D3uVoQJh{@`1St=ouv+M5rfFBH?%tYpFVz@pK4A~Oo z$o&{JMNX!Fb^QJ9AjkH{ehRj~DLzeKQ)~n<<57)I^YW#LY4OY~!c1r0#8f812fa!5 z|MXfVTUAAmu{NuaK;oXeJ)Cu5%?ZNH$m7S7T|8TY4&8fAF@Mv>%s{_pP&7dz({gb6 zRR*$NLzyDXE;M|cGf{Q*)yY;42JOTHp(t6teQmoMy!~7C*-=tZ1-24rvKWm$IwMU!Jz|F4uJD zZ?FBl&Mx^)dIoAWJfY;!AWgfJvhE?TPPPtmz<8mTr_cAAqR&)Ud^>y{D}f0bxbN}F zu;qW2;ju%xilTQ!)_!?q}I%c&g1c;?n%~cte4Y4*5-yzcgImv-ifA& zee?+q&>&vBO?GI=_?{vUosz{2x<010!9U`|$2}aal<_t}5&z!2&JFj~nux-mDM7!v zmnde%PgnRvb{IUS2RsRh{5YTSwVURj@ zOfACx$B9~7F8Q(um#NKmOx2tu)Dt`*bQv<4x#!k}*2Ahv&7VaUdN$bTb)rd6DlHqb zQBIwg&PY;9=Y;JVxi8}M6Ezn5YO8avaBE+Pn8FNXme~|n^Fc~v;&`|@Vi2x@fOrBs z9`+|tk5!!R0l@oQr@MISMQ8>}u^JPlkuma*5ss}3D8=6yLLpD7t$cc@mi4(y3vu?_ zZxXAYtFwK}Orms5N3Qhm+8`DO08ATC1S}@o!+}5YQiO66;#rHv;xvOnC3>s1D(wny zc!0AFmWtsoZ04g7h8;>7hlBf3hTaqHz)?|QCUiru-T3chu*vtfIj_R6!zV6^hPgbJ?8K=^6!_S|LgmW0#5&Ws)#Jcdt&R%j2&n|F@x+Fvfl0qj>COgC z_bl>{hX&vC<5?Tu%0+ABf4xV?XlN;Lj0NET+2lNhI`ShRY}GN9I30V8pC&6dSPdF= zqzg^{&t+V)>;#szR@0bp1E;-}A^GH00nEdoya?Qtnf#=KIJsTNQ;F?4Gk@a>|LTRt zKak|pSeaOZUunB%UM&AeJk8fqSHgb&#;ReM_02W*t@JNZ#AsEr_TDho;y2_SNQ2OkfuLMCw}lERUxTTXiR9I?#H63boDZDLx2#+vijF3& zqjgK(ry1@W;JYDTf6yQ&hL}fK;9~E{lYyeoog5n_zVd!@n+cGQc*VRHbhCYNL_J)h zX(4Ew-(66mtE{5+Tv#5*LD8mlL_K#3IteBZ*U8`S5eur0AeUpF3`P|y>PJT(`oCU& zs6C@T`|rYXoLo;QS;+?NusSmEV~O{HUW|6=q}^U&T*yb$KIN z3q4`iT;?_EDYqLPIWN#110MV*rk37+#}gvVbMW*{_GdBBK|d~SU0RGLk^~af)nJg4 zh?y1LL+5hsy{%zSe-24~a%YF=M{Xd{ z>FiCT?~Whz+}C7H7IbW>FB}-fJnwvpoA60M5Yw-!-Y>{|QEQpg;6vu;8(OL$_Hs1U z;U1=qby@v>r2>=KI(g3t_A5%*`GtJVi>So2Ru$6249X&JXEUe4(tGlv<=xRqiz?fx z&H51|)4-X45kt%=9=5(n5p(e=7Io3UMv&Y52*-^2jR#2>6zL* z>^Zn(RG2n>v_z|6 z@<1#jNqTq1iX7GBi!YLre_@BcCWTt#LT|Coyq43S#+<3Fnc&*ZQZbrp;7fJl#i)_J zXci%82f+@*o0!?Y_bH>jC}bW^ox?l{iTkZJ6AQJ*jT|k7e+PMuMZM{d%H|z;c!)?s zy*idzGjoelHf`TwUrZeuaMP$Sg7otaTEgBx;17pz*s6U+BOWTMUChLrxa|8g~>=(2>_OpcuW(Bo`Al1rupcLbKltk~i_g&Y$s=DY73u~x%px}|*oA5$ ztqR<5Z3}l3d)s=ItlHXVAzf!$f%C-TIn0H1Dx!7PP-!YaI&{#Re)0tJ+kUblNGaVP z^fJjZH#X*XG=LJj(@o4k?lkyaSbU;4l`0pTr+W*e9}iMa zAh3g#3UUo-8?-mRxtaTceFfFx;M27-Q^E$f)TpyQM$-zS70Zo9wrqPyx)4$FPvSBH>a%oRcMA1YCBLPbD#SX(k+)H`e`*Z3PL-Uaq>8*reI*Tc! z*Dt(Ab7y@maE32>ROPYb8rG@#djouBNQZ1O6H~_FZEuh*pD^?du`D%aAy$9c=#Lb=zB%d0ZI-$N zjZ?(wtyQbA&UOB?8jCLXy8~O>P!k}Se)v4hcL>hVDxO7a{)?IWmhJs)3zvUXZMe;e%!8iI$<8Z*~3I%EBVBR9_#dSme#>RUu}fd=-#P3}8?KYjVlnR4X>;jD~T zkzdF!bdSTQwkNad@^0I9q^>PGQ5|8U$WlLvYh`HJ7d<@#?9QX?m89*O+M(tuc7w4} zc>8v1*TCc~WhLjpn=Zq<2H*Y)&u7B^<%|T(ohZ1msOR6D@VkU)Hhq*Vq)y3v zu`3YJWbHAu6{+XNV(%tQ)x(%Ke^`=!#yt_$PZ^I1^WDnOAIEuJ^2=w=MAN4 z@<8((v&av*-yg_4)~qiZ<#8CdQge>3wrXA;4O#KGhr6LzO+Ttkc*m>VIeHTj9H7BC zYaAOE#fX4oT|vq`!2QQ9^Z(87%$3{29#n)jn!wz!fqjR*hJ|zfm!nqvY}D$uEd(PT zWDO3$uTr^Y(c20K7QdTle=?9Nlr~%6JnOJXPKauJanB zJMQZ8f&N)e)AcVJF^#GVJB7KK;oygnO1vIv9`K?O3OC1gd>QaG&YJPh@~vT8hRq&=IB#QMs59p&4Hm0P8#8A2hZ||k?eM2YcJac7MbFJITlvg`d^G-@?eKf~ zmQ)XMAckZgdHQWg%Y=ht)?{gMehR??odS=t@{wr#_x|IzXQ+}_v1ORy_5&nmbza9w zL^Q|=zcoTS?K$jfkm~GsTuh_2=4$KSS>@SnS==93`rb4ok&s8)W2yROX`SE(GyVa# z_$J;m#pyPws=Pv>lb3MtAE60C=be8QdmcKonwX?zdmpqAqinyOzG;!F#ZQ;HoN_No zbESdqjy|8i@9^sjy;U9c-)Pj#N$-YR+KMe;3@bYq~AJuokN zBzh^wbH?Au#jl?1Y!gn31Aox=27K83(Wp}38HbVW@SJ5rZvHt-gd0n6fDR?!?5DtX zf3?ne7zl$_Y=Y7YL1jvd&j{(To!v=tC`ZzHxHiF0(MQ-FHhnY9K*RqiBK&*`&`IH- zh_i-MmHW895zpvKqpxwxOd-I|l0Z%^0d<5yH^f-bW@g%PFCvIUU$$DsvM5v#n)nnk z%>(`A2vzjYOIAV@p1X+|DrorUovpROKh@gFbe8O*4ct=)rG^i;W4=@!=gvmU@;Yl4 zO(Dm*cS9CcwnMBH^Wgqi)Wm1~eOz7wE~dRv%f@ZaN5ctk$CCqKfmf^&XAX}(E=ci} zK?os`;zQV8_bSguWsZv z<(+NMRLWX6{%$yagDX#-T+EMY++EyVT~-*)aPgE_F1MNazpeANe0I3nHri&d*9^f#879XwkyVVlJ4xg)d3IMGhG4EC3H}@Q)N(V7_ zXL=JTT2#klA`>>E!rQVFu3oklB43ZdjSmjfq_!+;uDdI@`chfQ z!SWqhK9MQ}*ZkT~oEj-{JUD|F9k#;Tx&3arb+DN;uTI@4iXln#<9*VY7Mi8J;Euk= zN>C5dh4#g8<+o;p$dvt$mQ>tb%%yE35ln0}xOyOAGFzYbpgn|akj6ev_1 z)*~Wp!gGD!uDv@PVjJuefXnWg_~2v0_I@{<>@=d%EX~%@paWl0%T{Qx_;QWUJJW7} zDK5j>`7fjq&9O6vCRcC<7@CG`3bl! z9Ou8ADgEPw-RMT_U!oA!NJeVJcD#&af3Rl~c}Oi})OS1{sO2&nh@psDC3W3GW+YYU zwXWY&o^_!6Z79gb;)(xCH9FOf`a}lQd!iq}0P(IJO!@+EDkL8vq8$J8pCGL`9}xJ} zTaXq{D8=;!o=Pe4-2F9uA*aapyJ3}ClZs#4PMs8+a>1x?e(-Y>$QwY8C!I-TQUvKHS!neZk@e++qx8hv)&clp1 z0_?T5y*lr0JrnMFPj%el!Kp~1(&XPq>xVM0f-cW|+@ZwCi(+RyYWK}#GqfhlodoBZ zzuDt_ZN*Swml6@IDlN?F4ky4iGLH|}%$KAyK>2yaieb7~POd$1@PZ>8|G844XScK^AuQCtD@6J2xwgZ+U{3VNVb8zV~{w~e0Z@fY~*FY9S29< zJQGqy`fgPaO6e-?L;q%{mBILtbI zUb6l0*en{Pvc&`mrewG!@fK5nVBa{UcB@%ql7Pp=)*DilSsSoa3czIFT ztZsj&;Y$s7HSEpJ^hw6hgQ!XIx)(}=YO48xeQ^oPg~!Yj;!KQI%hcoibo3V$1FT%f z_$nTJHfh)@Gmd=N^v~`g@Cn+>%wXW>kLxk`UJlF{q`_mF$aIps6Vv_aNwa?u0Q(K@u!RKqX-7^2il`F6p3j58rUe ziYx1_vl41U{Mqx&E9JV1E!~Z%_dlVW$6SvM+xvPv>O7y4W8`$ufZL8T|?$`iO@#K0~Gu0TvaCFHNZU1m;K9Et^&%MzNYN~_J! z(c{glo{~Er)9CUm!?!WKVZ8up)>hKn%_b)78-J0=wOCvU+?`bZbz{pDb8@jnV_AX} zvk>w1s@D_tR)VWM8EQkh+ju@k&6m6XyH@>gf1IP@W+pjqag__{PpjWa zH5^oqjW)j}`e1wcqS#qqK~_P*`RjGHeQl!yE$Jeo+3nWHieNpb#YI zpXqNL4(e0PXTjl&zrwcw9>K zt+ikYNCz?0_0^5H$f{NRg5%$Sfq}=TP4t8xF34#q=5iwhBEJc$XV2s3@7Pldn?<*m zud@V|6>WNWk5wtQrl%1+g08_t?`Yi={o4BM;VHG^pAr5~4diCR<7CPntmV*G^*|dD zmr~621Kv~O>2c5Vc}C@7-{rB@rI}6kpJDc`!>gf^TY;(3y9S(ZU7xZ|=w3egI{zBi zfiNE#?c&J`yPR?&D;!hOu0N`RR+a(>lvDaW8_NTul(!+JKOU3ygy05(RAqqr0HZoGijaiCAm;wQr~8%|d{6mofuylITHu1? zc=VTvq#oXvd>7kcoNrag^+`QF^AWlsf%We$@6IGfx@uI!!CR6mm<7?o^P1A4pDlTp zKX0@WIs*VlzshjWv-$6l%R>I*uRmkUeiNoOnnbB9l`45@>z-0ZlcSWQx*_uPITibd z@~=F~E1M)v8d`Sr>fh)50;$$2CqGGHX1KCI z8!fJp6JbW;v^z&sr!=y0_z?tpJ81DHqO)^zKUg}1-?5`u7q+KoRn=Krp*OFR=BkCa zX`QaG@nj`NcFqX0NM_%i2#3?gp{5!a+5=86LyyHMYMp#f3y)-ALt6~{)PM8PvEeHt zy;YNJlxkzRwUuvuh$C30G?$EgS=D0W-7+?Mw<+oC1g>D^Ms$0-O+P$zUz|$vom+uk ziFy4E829cnAK#OAhd~0*r75}kxG$QY*zE%MvMA5>qAqc$S@$L#eJ@Wul=>GHo#V|V zZl8I*&PTfON32DLeW-p*p8aL&p@Tu{-*+>)BfJ2T+u~13y01O%xVOqyw$os*$$D@PjTVS@E5AgOy?tFEW+%Wx?agrdT%AphX_zdQMa;Zv1dtrmaE`nW$_3 znfza`Y$DFT$`X@!_UC_-H-1C?Dln(zh#k5ZT#iQ*X8wAu4z84_Q~kW1Q}bU>%0Po; zQxpt7pyO|^F(OEOFaIKUhX|__;S7wiE3klA8x4cO0#R%Rjl)kLcV(2-9p zgoe+GI^o`}qqTgE4$fWEph||H9$*=HE30$}vJia+RS&4lzM_F|p?cn43^SP3^Q-Qr zI~Y0a6?d3-%h}T9hwD`BU!P4y=of3rE8k4>q*3uwZbrn z1l@32#95fjX|_b@$^^9YSOm;~b4B$WFkU~WDNhLderFv${RT(eqBg6)OZ$0S`nyR< z!eVCJkGRaMUjEib^f21H&2;)Ftnc{IMWv-^#;@OKK^q>4?WxP$Z!O6@`FpB~iD$Kw z;IlZi_iUAhhstKWA`T;&eKj5_zyj(YZJD%bexv>92S`#S#b2Ns#CBJHYT`>dP+bZ> zAtN@AJJ00#3&3B99^dw(WkSFJU|0V9oWowuJ)6>l*=n4i6_sFgu)QY#>Lp}0$!lLh ze1eas<9b7t{GM(zY7(uT^wmcReeB2gS$;GgY$3vq9XCsfxoPgf=66dtTuce|R zSL4FuE44-jxae}erTeD>zJnw=_x|!9q(F6N>D92EvD)^574UuwN zri9+l`t<@W^hgX51k<=gVnHRWRTHx&4Hxa-gem2zkNPelRa^hAZyPNpkOtrD|GAYH z`4ZT7@LH=Ef$ne&kLU~f&)0yTAqM@8!}~B`6VV(SF>;X(*=I`JV`|OxGekT6Ag5Y> zvskB9CzFDb&UY&pUVq{N-%q!DVm!x!LST}XAA7*zu}|uR4+f2#QK`y1?6Bqv3xK-P7?57OWD=1vr1xEP$FA!!G?x-|6Pe zX+-lWRzy~6ouka4{c}5Xh@!>uh=1acoCd+X);zdcNhru{XfDidOXPWj^nzGBKf8uQMa|YDG^#Q07UlRk6ee zZGN6FZENQA|FR1m)hc*DiG-+4Q^xDQEjRNu#3-%5l>TG9I5$Mc5xV!TS_(Q~Rk%8j zu0|*3?>eB7$s^5NJali$l|u*VW6y^1CiBz3+10PF2XN&P%=!@=d#4k0t;>uy#T;1P zo`)t}=53mHN$6-NBO^kD_(;WAzGd?rqJ|_aA5kT}p;X&Jdhxq19YDW71ip%9@?1(m z)O~E~S6FIMs(Xompk?_x{6Dv+v_LdcGLcF%5uO}75acu^z9}d0C<6iT-IR@Uvk2;G z)SETlzOA!<51i|9VuDTVto)_*tlz^LfbXVu=s~aGUcBBSDt)MOgz1m&%?3h&vnd+HsT#Fe{`DE?%l3p z-)9j26TUScmeF|693_XQ=cl}Fj$A(4AJoiKCEHriS{VZcm8_O-CE0Zfs<}f}8VVn7 z3aG2TF?YiNP#Nm{e?&OI|IgIa-@5ta>}0)(!G8VEE&u0nSa;gK(=GoGPs8$CSOtZ2 zR*|VCz9Jjmu;D&epd{Rtz9`n{S1p|K%IW3hl3F&l+#mmcE`Ue2>;qugpm)*fQu-#D ztK^lP(!{+my>~!l1eFk1y{f(;e-C&o2V&AOE2QFFtjyzcQT&py01y39dOlq_QK8f?zTed#%Z!sX&qTWvH6CL3u(4czqt}K{rR?2U&}@yu z+Uw)Yro^*cgNu0GFC=}kgAQr`50t0INi_%$$R zUKW0qkMt$s=MB!;qHc7N5ZON~yrDOmv;E3fL(9rHsdVcq1vis;&{T?t~_EbN%xj9?P$bK%!< zE@{#22BkMx+h>G;GGbvg6P8!neDT9%t{sZvWg)lM|xC2sZ0Ppcr+_tRpm ztZj1gLWO(Jb=`;yqKe-9q5d;v;PKC%s-|Cb9J^M^!>Qbc}CjLwUxn&?uo{W0>A$)$17*wg;xWrImDU zfEV~jIy1u?MZmbgtf?y0`p(|%hKk;e9|uM2NwP>SHXOfX zT9sh-pXy_9Fa@nOPSPz9u|F6>^!V)v?3*y(GkkzHkAtvC~%sFM`&VgLV*WJ&h zxs1oJ3PJz#ic^W<3HZ<>>S^B8v#J`8n#tBpTb9ttvsF4lPU&gzSbk%U?h7!KiZbc+ z_k6~l*m7ovUB$1BIBvLmMp@?a>t!=si$RU27>e<79=0Gs<>o{|UtYtj!_OaJ`Cwks zXoa5CZdcCU+j_pB;O^$}%IC;|-UeeEGC?7YU;{4;@yft?IL1xAZrX?!p(&@wJBDrX zTC!BY=h%XY)g@D?_QtwJlPVu_@#0hH;d@C_pEn4mUVdZ1vni}BP@`Tt=n_7{GfX{o zdb41`R*Rb6{=wmShYf1LEd2G*@tr`8DWiD4WG=_mOn3DqS}%v_R-I*K;`6az|FoDh z2uURUsy*dGn*3WUrTXVujr=LVu01^)Qmeso=4hsZcwpgBBoF)!oBK{JHe*UBNXDR3 zhfhtEa4gC2n^PZ_KFxbF>Ff|Sk@s?8s_$m1HhH2eRliP1!L(fX(93c12B2&2e1q-I zln*LZ1R{UZUah7Jfd7&9I~chvGjYuNsY|0rugH8?Z1;O?KJ&cnFw2*|Csa3OwK!JWzPk(N()D31*AFvuFME$Y+9AXvmZC7p{Qdt$6Dk!u|>>ftyk z0_gJN$3^VUDN86#>m&^Au(0~on8BdC?>j;`>MD4~YjsfmF@T4l|Dg6J{Es4bZT2`6 zER$@%F>Ep!y-N+r<0_#8Us%6~@TlIiCGkVtKZ`KTi~lu+?JTcI!A&w){!+BI=B&r= z;3pbKV7%^pri!xPmSZt7jnrUh?j#*`a-|fc<=&}kj`^zdWnDm=|Tt)2xMjuks=Y1CM7BYQX?e^ zH4&r-h}6&mN(cc$4>cjlZ%1e5%xUj?uIu|<-}PPJe}T34TF-Oe_p{dC>sf2<%3^hh z72-NuCi}0d-f{*fAH^DKt2879f!^N#hz9Q`4vhG=E^ci$!95dHuA($2aqSUX1| zCAlq56+xt0A%~*PChRYsK$2lbrKieq)IIdWejj%{&IA&eUgm)os~V$kInDC85b*Nx^pK7#y{zGU83*+YEgeck^^P z5J%kSV2@7MsHNo7ca#k6 zjJp_Rf+3RctRLfgHquR-#2=_^oN8EFn-<59J3iPNQMIldFT{yqNVh61xmVkK4LXw7 zjy~OyLY)5j@=dsSzFINiRkts?(;??+r4X`qNrayFi1FQ?%TLKdQBfC6)2$y-Af64U z-l2eS$Vp0B<}_AUv52o-M zcX0}6^-r{YO;c%ynC@3Rl&C&H5k5dVgHeG$kz`n%jpXe!BsxB@C)&B2{)O!4P1~Db z|1F1%Vi~2%#C#&m!Th_uhIyfyy!Cw2w$ZtEznhGxJpTRw>WZr(Vt{f5O^}YdC;>f# zv)$XZS6*>W4#F?#UeQHAo*!IWx_|#VjuW2rD17=W#gj|56e8gUU-Aed+0Kx28hKro z4>5Fti?kbL@r*JjNTW&AT4HhGzZ7j=!cMk(tgkH$uEk+jq8u#I0I zZsCc0{)To-9dW9*#yCCgJwL@h;FIXm$i|$j&wRst+oMiV+!xc9lS~a>haWkhh`rbj z&Eq$*NH43C;B+}cKu4j=l7vJ%Z=EEm15K4o?a}fmzht4=VKVmV3F~u|J&<1)JXiUt z8?2?fs9N(!PJ6H=QYlv)|MWnTL?3k<{JRGbAlfvlT^`Yc9W#ND=i)AMh27W>9EFxO z#HtP7T{H*H!t7lgT7e$!glFxelTtK8|%&H zwK(H#!jW0uz@D#KlzHhGg8R*J#n~R}i=18XQ8i-YbJ_g7Zs(Uu?k`N1`X7NO(`O3j zU)K4^I|tsc5rO|m>TYY&=Cu`n6JbR^;+=UMzHTjZiT||wQi_sVkF<9>zO)+A9m2Sq zrq=Fru58J#{(?u<(I~HaXJw9LH)GrDxehVs9MaZB%DLm!(LrUSb%&5Tm`qi^a)9c} z2_?|c1v;CYK#o}d&bKW=jM|;1l(=|fqGx0H39!MW{n!Pi7b6i`(;F@%U`t2bFRd}m zf+6CzRwAQWCKa(e7CJCqsEW?0Ei+CTRGt7n9F{G#?dey!f5X5tDK4{J+tNIp6ck)! zKrMcw(%}36==%(SuUwhUm|e9vVHKta?8ND&{qiN~1VU+!{#1)pSm80^q?#Uel+I-1 zL-<2mMaS%KLUJXYeV-`?z~bf&qpxu}207>LLd02z)kywD^gtS~!t288Ga66|@nhI! zXQ2Rj%7H;G7d~)GMz;MPaB8Y^l5Qx?M!lWk;r~ES&=B)GXd1>`?u#Qu-&` z*(t(qi{I&4NY3|QhJ{U{YYWHHv95FQkGNi2ZsI({Fl=>Kqg77teh_cS8sxlD_LE8d z*$MQ<2H`J6`)*hnEbfhCn7AcZ3K5mjFp1rFj41aX8E~rbdo4$5n~N_9;a(Hbsxi&& zJ6QAG&ndc8&!%t8gZIw7ALF1Ip{t;?h*ddPsS_-%Wh{qi6v|~zKR^1DOPy*=UvO-d zzZ%Lc@LOKe_A)E zQGewbc`73jB5$(y>F^|Fe6mTX2^~^qgFJK*3Vw&us7P2wlgd~yqY-p^?GmjZBwS+vun0%JBfX=wdpV1})Y%S*~^VJFl*cPdeQIC-KdEkSqCnFNKIo z4bx-B$g5jAo(t|1@;O)E?@ij^C(78Yo}hQfXk*@!5)|!pB;-8#E53SOqTXMi>BP3~ zB5+5>EwAAMdWP>&Vw)AUJuekF6of5BH;k67>D27kABNmP)Y)&VKSdYyiu>|U^I5ln zh05-so4I>>b@%NT>yHi-HzzzIE1wk??55K!uTEa6sUk%Kobp%(|Cpqk+>v_n<4ety(Zv8Q}Y&)PUZeJN#?lky> zTaM=syYN+3!_XQx=kNFbb%q1H#~j(l7X)~?hdwzz5klfzS6dk$@2kGU8bU|rz1Yd9 zMkwsmiHN>++VV?7O*#6OJ4Da+tJ52+%t;30yX+*0N+GJeehjrocON$ibLMZX3_%rB zWi+lt*Fo+WblY3_V3EsSdD>OnaJ265;fbg5GT2tu698Jz}&Y zw@7$Qm6NSw>F~7L9?4!D<>|FMi)}5M82oish*T}46A-%MC7^f*NWiAG2pbn_O?3>~(T<7ui2+!F~DlN~3@M$tL&&7@br= zE4BZ2hH$~%cNoq2iEv8$sbi=KyZYk(8Zgk5QEo`N8#_JFRcY(Y%V1_m<XaleYu87D^3Ic>1V~u*Xotg(21V(4yM|j1*CH3g&WD^M(A`<-NPq6&9hB6g z(B*CPCeiCse^nc@f&-S?7R7Gtrs7}5qM$hMC(JWP!Vku3fV^JmbSJskG+G`zESDLv zkxujhRiD>BDeSIA*QixGq>?6e{rj=|J(m)?^3;`z88^k$@={&KX4hWCxPmt_O*AZM zR}x+u+E*RDyw}*A7LR}9z!x~FoCC>JDA=-VFnZu)xW$i6kd-2Ps zth=fL`qZ%d@2npXOjk6)*-a!~<$LFk?Tr2p4wVM=H*-PcrR z)KmY6wJVbplbx{`CVr@5y3B0q+bNE+9mYLh#^_CtLaKaAP46vWubVMjcYN8_gZzAglLBzb+90`YZ%}6&h}PCUYPR%Wwo?4m+3o3ms@7Ns&DM^at5`%-p^V(a-=eT z`t(s9m~-8J(s^=~pNOl+O!dWkTu+ycvq6Y#A=2I{((dsGuCmZ&J6SrGU|0+H#@PTH zr7i1lR`hX7jjFt}Y}B1=d9T15^Im`Qht4iuwto~z+kG~ZLEJ1@0oL|R8HE?+y5AUI zZioHAUk*e%?Q}u=RNGbw9NJ;*qgPn)(_rpU>G@Es@&xYUn!rk6T@fAe=-3z}2_b9u zcLp3(SjaH6pVM^paKN-bSSnPnt>twT57k~1sRCgSY1Hd{S<*OvhU@3$>ez@{d}Z#l zzX6zgjr;OOt&;b%fdGW}myegf+o{KV@eN{|9gu(XV6n~Z!TMV8Lz+QHI!nve@Fa2B z|FG-8Po`kA_55Se>F#mS{-vnX=F;8W?2Qj|1&h5cj&ui$^WXA1fz|J6mA+%&Fg@m; zeZ<*mQwbyGh1H99C$YwmC&9Tx%PBle_@nctrR|U7Mcl?cOI*?+^0U52|2Z|TU zK7C4BI8)8M*^veJqkHWk)?(x*Wuu0C>&a2un$(3NG;ny{F9uJ)!3q|>j>>K)m?SO% z$Jp%tDz>{=?`}uBh}#!G6aaU~XuRqS!pacZANN*~B=_`Hmwn9P{p6Lx5-G0=bm*%dCeJ#7+m*pbgZ|~87W`#7E%S@{#0#Pm2;Np3?gBD)8c#l z?KooA6|UEteI0OOiBFEBQlr0qo(jLSp;d?|4jn7P0VkfcJ#|6>^;Y>!w7lKQhIM7P zR_cgocMZm6wQIOe2(&_JUAAO0c}GpB3%p_JQ47KYM*+6xp4ZeE(BY+e_kbr1vDZQ{64R&mn- z%#|`!^h*Sn(JE^BqoD=+@^h|aQW7ATj-4xEbu4>Jr=X=CiezJSfrFjHb_!$+(2Z!I zTe|hcIf`uw;AUW2ivMuxuPK{ma>^_zOl6s!2bP+MZ+K;}m8~NKviU+srOk4r7v4P` z$T2H)myl0*B>7fzSd~D+U#F_a>?0dTj*aPOOUH1r zzc6)}Pjuov0_A`UlxZfC5in;g81|I%DHg_TvrZ-fJ;3ch^hA<`(^5vFhv8jZwMSji zI?m70%ROe;wjz!5l3g3Rhrx~10uRE^Qkd~82AgYH0Kq1ixGbLx$XMJu<)i^baGIcj zcn$X^LTs)Y&Gl363!heh(5FLKf3#AjNjri}@oGLM{!!aSj4mAq>#T$vZB$ibeK4=E zSC}g28H&5_kD7u`B`O7e4F=Y=`^E9Ri}D-^&*F?z<9}kmFk~Hk&AU@ppycY&9c1Ux z*(%V401uH3twSi6N5wiv28FM6(>I@tZM~-T7~(cejQdMHMk?AXjCdRlqrPd@TZd&e z@g{bxZ}D21V4!im?gY6r;V3VFVICM1{^;20Y=;V22nE;ahjz#m#EdIx)8LPw!v7Ie z!|Igi;hUfPdrv3GKa3CpMoj;&Fmm&^=qj)LJVd&3QoufYyJvvzfS`e1KSherN?(5I z@XdOX@t1fD$V*{(=C>j_m5O$)8TS+94y7zFcOA0*q6saza%td5Rks+mq}JqD_v`A) z!q-lVHruXRV~NGa2_u{s3m;s{>` z4tO|7RYir{-yHKve1ZN z)3ObQgz$P}J#>0^Qt#^`H+_R@xr&@8>?5Q*VcAa&7F#8>{GZpgG@+&fW&*8729kl3 z$E~;X%Pz+)J$RF@21yN_KeNVa&Cea$U{u;rB4+8+K&Jov&uJmQ{DOj#NE3+eX zHPI#yxsfU#7HLTHrp`I}jUmC&Z;K55ots&ZL{Jfv?xE6*XMQ#k3; zH&A~Q;Gi(x_&8c$xIoE?f46yE&tnQFJ)Ue*DWJ#17~{vq;t}&!PqxQLA7GuGFQ~d) z+gn`poyv>@Abno%>LMZWaS+xiVz*%Y8a-__6G0JJWe8Du6s4CX@@~W?nqW z=)c0T+BprX^AFBb`%3-co*X`RiL$G%(xHe$UI#+u$wa%hPrsi>WRFK_?$9>6!`6kC z^)D$9`05d}@|b!YnA`E$cbCRMFYm;9MILSF!_VIrsNMngLaCK+?aFOok zi^M$<>DWwknH|F`EeL`bS#Kr}%8g%rAzCt@B6S#!N?SD#}mpS&`o3AYOV_F!~F*hhtNXne2^Sb+tlFQgOa{ z$)j*w@1A!K&hvvKF-jwy3vA=KdDccgAqjnzzj0%|z(z4JO!#gtU4s z;FlgdfTHfmWihv?BfKjAK3_1C60MP^zMOV-IPM#oSIb$};&&Md3)YUD z;i6lU!AW3F-YN$9>6Udf*Amb<4N|YMPcHrTn9!bca;Ewz`CyhiHlS2a#b9|jV^IWf zqpOPkLewzCv{A#Gq{_+M*8Dz6eFAXCDNmydCG7I?;Ib{#S4aEdQ4QwLGTFde5%|Ib ze+zb(hDQ&fH?dd^CC_qyKW-trRWNo)3Y2O*`(nndtqQedS{Gf=nc?^Vr_%5uxb=+! zBob&@6*6MKefq2o*pUNl$-+dHgE?Kh?b6fLkrV5yOH*t0w0cV<+nU-XuUq_fG*gaK z+Yv^FueefSm`G}szvh*!td1+uKqmC+mVyX2c?=I%-=eR3xSE5dtWC2%VG3Z%}qc@rf0y^0)Cd?{5X}I!a`ZqoZG8UCO67;sL?P|4YI6G&m9=aXsvh zF@?8b+umb$`IZx3x;%+UrVv3MV$UXe_xG##U zpmPlSNM9iPbjVWoqJ5f)Q)YPkX1RGn#aB`w>tvIxT`OQ27`u2+8SEo9j$2YTEvYa( zX;55CXifNG;4-GY3OLk(JunW&^}?5Zx#O1YnuSJHuf6xh+mDUVnk4)*P`9Fs?N@^~ z>_DPjXdE{_CNtRCtUMowb@ASC?!W1fcDGR;5XSqQ+4F;lM_!*8ib+C$1?VgTe4)^? zINHaUlwox!^gnF9Nu!v3;d} zU$pkmo(RIhfRs|AB+_Pap+c?l<>Qe4($5vvY-jjGT{(`#?bP)oZ;W|~@kuF=sCJf} zQ2i})^uRdAxL_vTV}G2K@8zn@Ii704v;fTbiOc>Ir@gH*lj&_Bg3$+T0iWiH0mFW5i zBJXasm8HD-O9$5?%=)AYN$9=jHSgA*me<#Sc=p9_{UWe0 zux&F<9R}pXk7-1o1$5yI1hH`eJ0dn9Ln*X$O$rM>0m z*@@xIM)kSi-o)Yh-E#F19|PFX=ML<1Sluqg5F+raM_i8|QE$Q+06V2aK}lWT?_Yb_ zxJ%u};g|FFUn#-_N4Yc^@>C0sCOvSMHjsr3^#)Iz%kXtQ$~B-aSWvCe+chgstt}R! zH{Z#JPP0eqsQ8zzdQ@oY^?K7~+{7*O4^JmHvbc%)fyT7%7iJHFf`MB&4N$O*B^?_M2 zrX*pRO|TF72!&^ zoI*Rxz}s$FH-fn2L`c(;BI%JjM_a9s0IbRc4syjtlZ3OjNXE*d7b^Jh%CZdZox0z; z(7@pXx#JZhfn%quqsQVPKeTOu)Y7-AK>bAdnqh>g^ds-zZd1E&aar4V%$-innQyxOkVFue? z_O_YKnYP`&arj(HTFb}CTihF`icb7k+-85N?@n33o1{m_u4J9|J6}IW20lCB8&^Uj z8Qiz`w`0vi8geLc`dNW=Cmal}g;}ldb>u;%f$;YMOG#IiR`%d$`gHefxjUmCsFf;U z-I%SDKlbI+#$Z)x)H|{h3RJ|VY?Z?ow=!<GQ%6?~|#vPQbT0BB(b02?uq|St~joLXXUSiRHlRlI>Q`xwY|%x#42G z!?JYrRKyTr4w#K8E)&CNp3JRZ0*WgA#}+gP;lLc#MU0DTX&RbBzOiRY+^$_2FjHFy zK+t&A+a|`)qvfF_z;1()P%ZET7V-Lk>@^i9(u5z75ZPC)pMR;bwwFOX|U#wrlo@1ut;jqc=Dd$eo5$q{gkzDt*u`B+N;0ysel1N#Ay!&mw5iAlyTF8!1@PsZ4HNs3a%PG;i!wr-+L2h%DG&9-X8S)|c#rFr+{@8Or_aW{ zDVs`!~v@N5|%2W#-;1-{@yqnP{HE&kvZzk2Ov{1dPalM9W`+wheo-E_?WqP6#ewfq2}PkULD z_RTZ0EknQHX8LONVPn8K?_@zlinKke)PImP9R0fj`in^w%RbTREBm-F9$oy8pn3`RKdBhSMaH+1e-E#((v zZ}oVA#wnS=1~2Uqa^|ZKb6X1F2~WYve5FzIPL3S6)Jm9dqs;?-U{#vC)$Ccw4aBE| zVhUr6Ct7L-iRxy}y-ZUA&Spm(UmJVl1#7f8^;p{X=dI;rS?+ct7W|Rx31C+G`M@k- zF-ennAy~Z__&VtGx+L*X$P#eE&)u|?tsZG7T)FyQy5({i+W+i99gO_mxHfZc|FO%m z$@Bo6ThsmC^vED4b13|I_w(H+fo_6&+m+ieaMJ2t$m#2q#Rd}rC(hTipIW>J?XWGs z>D{V5yNDdjp1O31(UTYA=JW&9??-2kkspj`8NX&zY+Wbbf0@fWtLQQ3HTFy5RYhZo z_Ghpj6BW~mQ>j8a;0dWj!mH6timhDI7t<}kIy7L&Z2LHm(zvU7ptijtDVI=%vXycm z8xBSIfIWOG>I&cY)RvIWwZEWkrcJDip6ftif_NGKk?s2-&IvUlBX|Tn4lW% zzaVK{*|I~v<_#|QYdKSosb-Kye^zff^VMG>++qS&>%#UmJbN1Yl0_9af(m+$Nio$K z&c4f07FRr-A)b#@x8!~mZMbC`<=I}MYHSq0P+Z&c!A26+{ANgICxhBCVj{C!wW)WP zOsN#|akCLc=e2HHJG-r2NUFbW@6-JRxL+)^IGNp(WaEOEJ6%{bb2!G%ZRp@TphQ~J%_8oE$I}OUq zrsqvrX0BGY;N~~$nqL}gdc@K+6@q+nnY>f7G6FzsEN2c20Ns87Ai@?Mv|i7wtiFmF zx%%C*QYHP$vKNy7j7mO)Zu+{~wC}pQ%tf-%65n%`zqqtY+Jh2<)Phm&u{5YfYcZ^X z;~R4C^?5T3TcdcTB`evjG3mcKsaAPql?3}#JW}_sIk2(@@Y#9&#w=uW{gjOeVKoY9#^KzA5O9;4|;cTE=w zdzad!R9(1@NUd0Vj##?B?xuiMM}XDeMJb>lD7Lxu;^MDv#Q>Hgk+=TPOIBQF-X|5_ zlsIa3-66PYD!)awzrVxxmQhX|*{|YyQf*0mGB?Q6{^Rb@X^V0w6}?b(2n)>d-ZFZ9 zQy_B<6ri%v_|%UTl)%$f!qE*o>P!8|HHi4#PZ6$Is&dOcOeB1$c>5{MGHN$c7gy$wKc6 z(r&Fv*YLUdQ7MO#rf;39jQ;Bd+Em&4fWD=yC?%KkG{q5dqO=MGa8Su+EuT!$Op~T2wC#*89t6PXqgTT`cn%s z3ajGN@ZIDtvZSjc&7_kO^x;X@NRCHinnV=ie`9 z%eS?>64f@=81cR977&M88BK=DG_@KeXMO*SW|K>loTbjl+exMXNK{^eV#CYo24@Xc&F-7P*@jnnYWorcb=Rv5SdorlX_>yH0XbRYIp*M>Y?2M zQ=Gl6@U2~AhN0jH6crqE1`XE$?)Hr+D?TsGV2Gnn{aZC<>(a`K$;ZF|<9|m^b;J^3 zSFQmmd{z}&*Cvris{AOQN0H55_~eOzeNO@VBY+bIlqd##id)VZEwK)q3r<|E{%CL( zSngIy>2$>EPrCKf- z27BWLPI7@*i0)$`5R7{CxYVIArg7i@{cy^4yC-NY+2~bn?;_Ctn3*6V8$U@|(5YmR z%7NGjt>E;r8aYloK^3ZdJ&)lis>HO1AVLHJ{>^YqZ9m%-_%P5k=u4?R9`r|(VtLa= ztuytGLN5HEf~Z_qI}l-LOauLB{84R@C4Y9y?x=LeG_dl9#!EI? z7Eu+s1=-=BwhkwODA|u>;#P#dv*?D7oXXW*JSY+A#Kp?5rg5M>+*!zy^G<3}_yZBY z$s3xkBfwbR)v(Iozu`A<_kkb86&4aP(r1ifvBv9G6jxaxJa#uObT5x;$z^!+tD|NK zIn3w{xosq#jI5WdX3{b_a9M$~T@6eolEQ__RkMP6xP~1`xxjTN$@e-YF^l1S0Q;uA zC=j1RKsJd34)Y(}?=vZ#)_m6#;eU3j|CP<&jK`1vf2_ z)=7EyP{bClav1f{bo+fZuI+s= z5Il}0ANjGz*+dmvG=tS&P1BNvg5W@`acB2z-wmj;pDQEdGfBDu~Ibq09YNF}>w zi7`(F7aNIThT)j9g-lKt3DB&frRHHT+cMwIg6&(4wv48#LXQA{WCsH_+?&5gx3pRq+yG6F{?pm4pHGXbnU_mc4q6zRaxn<&R0^# zwToTI0Dj)(ga`}irQRV(SyI|o4kz-ej*Y7xnby!&WZT{y*%x)G>ohnBR;{YiF^f(p zraA8bBkXlDDNLDpOFg1vQm7+XE?_;?M41V^ROrqsRm?d#Cew{eGWC<|M3NzL_}#A4 z>9AyunaqZm9ZN-}BUs+XTvl+O2FhuF_BctugL_689+Zm$MrW;Edq%B@suR65r_ak< zFP&lEHWbtobr0W?k?!G81T>$?`C#AoP9-|{AtaZ^I}wLy8%CHhB}G@?_D1PZ)OV^y zSha0&*_9i4Q2Fb@op#P>X}OWgNmH=~VgHQ}oj{w2aH$5>s7q#hCF0O}@#)HM1+I9#CG1$y8cq?qpm1}7hEA(?y(Z% zk=5}JB>ZO{+Rp_gqGjA27`4RK(`ps0b?QvRA$dSM&5%+=+TfnDO2>vw=_m25*zOJl z3seS6Rv*Sh-UDP-oc1?jrxgs#JUSvvh;sG9{)_*T+J8kme0U>bS5Q;XNX6Q0k57=r zy-9t6(C*4Y1Au4TnB48hzkK2>k9)x2~^U zc(5l{S5Y@WmIN(xuK{A~Z}7-K0kh#bC@!Et{K~4rk}DEZZlC8$GD$h`RRCE{Fx5|3!P? zzZXuDqH)uce+iVhjgF(V^bH37P$%5TFkLWy9qk*RCRDP!_@1qLTlh$_@DVdda-E22 zU4fjYdBnX%_u^cxks6wiB~-eoC(&4P;EIYv@LHv-D1T2PZ<@=tBL>Lx>mzxwYFjld zx|dN+@_B~-rF&vA=$NZ0aoO~7y*LJaP=|Hf#)$E&9qjGv*gjVG`721_ImZzD2w*Pd z9xB*1=h(J!E@($+M>@TFt+qZa{T{j0)<@Rs&;aAtg5S>qh%hEG_+uF4@OG6i8L74z z6eUkEB_mU|(Uk5Txctua%2G6FR%;u2HObyqiM;7R;6rVv8H{x{Bf3^@Nojoy8>FIN zc2NbCpCX0YeD^Ed**oJ?L(N$zN#J2{I8JK5I8(2$`SlqUePyhyf}$BnIkO`z^s61i zttjyhBee?mHRwgk%Xfzdt*AXIVM^dcy*2BG`;mkJIa)-2g{M1?i|1p#hUMh927P}7 zW%I5<@3Qkh&cAsxM1iinyP3Slb{;XUB=CG|*Ga~QC8L*2bnD%Ul~uTrDMt5p+vI($ zQ}upC3`~XUFpS!Zjo32v5z{G`O^w`@9Z~dmpx6eB$szqbEdjd4A^?DHj(Q!Pa=OTvX>EXRtYWi zHGhc23>g6DHo@Oy**SaXuGTV?%4vGEcf5?%^|7(}oMt_105IZ}1X0C~t*g%KCj_jy zIgTOkn9Aiix2L5$d>A0J;=d-HB@Veq-gxNs}-c#Gj^v+?Z5q-W1b;Wi!Evftz)JhT?5Lp|^r# z52i+s_9*p@b?IerZ^7O=n+h9`_|}U|Lswz|ZMB9?vRY1lzR5N-eenW?hpd^8JGd#S zlDTwZ1s-mkNXwJ3Q{UCg^z8>=DGr$HY)Hej$?O&%q(BX(t6S0_5O7FKb)kS~A2@(b zyI<8GO0k~y3YuiiTsQ<0f_@UxaIXv;zk$s>0K%GmLe9ZjP&fPe zuGK||pPXytaoRV4~FWy7D2FN&% z{qF&CX)ywO%aWfZG?SZ$g#HuvvlLcs3F6QXML_%@3Sfr50^qFWYv$jy)Z79H6={F* zV5U_}t@qG$=B61SJRgHA7U|J{ zLJ$y%GqB|HcExAF|3B8E4s@2r0A9|D37Q-l9c^;3ztAtw0Umq1XV9-nbd}ni9h`nLC+k#?;@7o?D4&##{v1 z?eyPPN~-(NX(wv~i7r<4b0VRW;s%~i{HQdc>_ z@<*d%_Xv}wF-Eb!kY=VskbSXIkW%M4B@03AW=0zc4mK8<3@Uga{(zdwsWNmOr-kL1 zlTe&B0=wOFS=ovHl)p(6frNtD8yRL6i@;42N5*1S$D(c`Rt}p@cFWcE9k{LPK6W8v zFCkU0ZFV36v`0|eY5riBxk`$TeHMNOinPkR#0fISI zmvUOTlNXeOdb={L41@pOyZOPbGa`?J^Thn&lbQA`f zrW?BNEW$e%tczcd`nY@M#m$g=TLC}B?fTRjzw${!y)*bqHhB4A#Xa~;a`maErgTPJ zz`5|*B%`w#wleh2{L`!Iz+^Ax-lD+6NL?0=7P-OIiOhhI>#?w2vFZVkSU$k^#fl@9 zerY5`TUU;Iuy+$0(c6yrM1M%vruy z$^FBus5;c4$ioLR+K3ChoFkgue}Ix6F)LPGl5>&VKzt?2cxw7AuN>U44&Hng$OGF&y@(iF6K$sU-1ZHWS8k@L(u z*Us&OjmWOp0}Gi?x`qDoC)*ZN?0QOqTMSouPXqzbf1B$}l~`feey03wW}-c=8$y`5 zW1(JGGi6BtgmiINYz|QKF*b|A1I!t5eC-M$auT40%;ixUuH$8z35wkbQ$L6nZ*Reo>eB8(E{aR411`g4fRF zwK^r`_0pFgbw%bcN@QhIk;9g`QQ(yrb(g;jMgF2;NzU9_BWFnsn$T5HAP4t(ydybX zw_>LY`%rK>W=k^+9PXNEt*$j#FPv2O@NZ$u&&>THZ9pxz*OYnym7ZEUf7Dr=U&w)~_MH2hg#TG4JyeN2 z%FHeE-kOR79{Qy)Bc>>Tb}M>AfIrZQ0!`k1Bi8Qxr(Q$=CSmeF12eDXEo42g z9>i!#67*?;+B;0`@FoFR`r=Lgj{WoK*&m2vAB+7b<9`1$uEa%NZYY_ z$u{3R?>4y`ge*K8laQCGtXMquz1_BRWao9AdqK_g+vyM2EIt-3zRIgF3R$y4S5Ci* z@0}UiJ0|kLs3^Hs%_zFg%y@4t=Cb#QF&@YrEy_TD#_ER`lXZ7ecCB*iq{ZvNodI7_-smz4;^m;DPC6zh?lXI&RJowZSIe%H} zgDCe*V$(7q;DoERg&#;~VYB|Gmb1>wn|5ldie{_h`NPZ*)%~ntUz>#oZL7yPYXiwB zDQ(>*4iD-%0$tmjPb8}cGopEQ!hD%XZ$2lK&lvOJlZ`N8rHCrdFp+20lDIw&jltXB z6`6$@wh38M>vrT>T{G5^o*(lDnzM&bq;qry|9-~zsAi3fJ_r1G3x>%AP4VH$0W5rHAH3@F;bBgntRNkbs8M$rU%-6f^WIi1#ikpThTq z*-`iv9H@A;=C9UcL%?W@8%T{YYaIE6r%msKEVhmKikiW#W*Fk*xJbeZpUh-T!>C9zSSPwl1o+-Sd_t+m1{s+rjYfVn zvkTYX;qn@o+-VqcC2rsF8)SE3-zw&*WvMn}qwPG8XIM);HO9(IjM5UM3 z$39&kX)GvabE0`79O49n5Bxw_Y}8%*!_(hNfR9IBU9tI_h@ANiO+0W7D^LeaA&I((>>9XMLWA<%f}Pn8(+yS4Lj+xdhHdFJ^6;$A2-VBcG#cHG>3*( zggCY;RMnmdNvSxry7caV#Eqi1}A2s%2SXVw|BwkuH$g0w$E5FWHAzI|TlB ze&BcxDG12G0Xd1>#6w3`&u;6MUY)Md%b@+1F_Jho0^i8kh==#Kp5z3pZdI;%dci~` zqaZf?vk^T$5y%~ubNWS)b&$ov+d(U&wy(Q9*UxarD4IUp%eXRK(~|*j1FEVWcpj52 zeto6?_naxa5JKot3KgWn4#`deUu#)0saHeNm70>KAY^8(+7IoUp(I4!?|CSRW8wjQ zbH62cC8GxCoRbAfy3ejKy1?Cvb6TR-OQgD?j+TjtWGC2Wn$4qf7;dqV$bqYxWul99 zi$Xql7ZU|JqRs0hM3&tWkT_C0reEvb?+2vBWTPPPumQEGJ*DNXIi8lRnrRQP@vJi3 zG{^u&_<(v1O32`x)gBkaM_u_bqP6C@vCj|EYJ@n8Nt(#QgYCBpg&9PHl#&R;zRav- zkR67$Z{y*cTdr@Rx;y~;np_#gqwKJeg1m6>bnDX1Romh=#skE~{iHNZI$G?M^1dMb z_>XJ^3a+2e)@B4x{+6eF+1xTwk1E$^7xvc42vT%?u<5$HZ~9V+Pc3_V&lZkmK#Nha z_$?Xy;=EGnDJN!5J}1KxwBiqMn$`TksC%3t$mo8)X{~Q84obCC0mP9+@P?{(e9G9b z!-c}94oV#ppYj{Ye)|uN>s#`yjMXt&neO1e0%P&1>pAOXXQLo(*+GH-&El;v>XhB0 z3ukf$e(~7admr#(yW#_FIv~IuRs9SYjkCzW6!GWmIp9WaZ@suQnTe_(c;znqLo+Se zy%B)K{+{G;oyrb}>;JRkItHbH%}S+goqiA7K~4jjQFVVWD*<{>1D9(!^7ab#i$If-hna0 zj59stkVnb&-o^YkNL~~?=OH>yundAP;}-&Fr!ZNUf)Rm+&U|JRZz4h#zgWU7opfkbGfPhf zprWxpKYN9wn*Ef?4%sIN#PX<98&@{=k|bUOS3UewSyQZ?!#exW4q|vAPH!k-TVCO# zPYaV=3kliW+Zf&)j0=@oN4U~dk=4+=r4)@py z8{=kf>8+>ji1_R(Z&zWU+6CN<8}}iTfKg-eeKuEhc&yt9m_o=7OSzWcrkG;=c9z8GRp*Vw+xP`Uejs zi!@O%od5g*`5XQ%M11nNy^oEio!+i}Q}xr8I7`r})k|%>`*socF0LcQ_ln%TYb@4J zggx@;)+-GoZ4v_sy?Ib8Y^IRhR{!RiG z(IoQS_ZA^NU>#rKio z!2Au)TXywbC2FW7TT(9gB19wxHC6dyc_i<`{I3k=Hp{vs6nP=|7`g$1{(VRns4){} zL$P9POZL28T9KmVgLp%Ze==eJ!{dVOW)W=bTsui+Bp15iwq|>^gzpAwR7Xg!ez5FAB!A9y$^nX|3IUZdCkW-3ye=_xlBAuIHeg| z5oA4vy0*F(NPnjgL?k7-JM>~cx9^j%5Ojq+gB$!Vd&r3^tKTtkUv%3#V&Tqq*Qx`_ znN2&Wqqi!eAY)KAu4mq|F*DU-KjjJ~nVi|gzS5MjmR?gx%L}aD3qpIqxpiU=F_2v!B+%};WJ&9RYb)L0xYcDp$>C`m5n}K zslMz=S5wK!6O;>36E5piW$%w?a}2RZ{yibff%XPN&;#q+C%!QlL z3*EqW=GPt*ubzW?kdxkB(65?O%#Y>LwtPE6@19(B~xBeiuJtEI|5uJc7H3VZTgZF z0j>%odOrixGv7|G4v~M#aqKob{1;~AP#;QSLdUB*Wzg)g{d`?n%L%NBy&c(70KRCv zPx!oqf>e|c#M89Nn!Bo4&C=4<^f$LeFuCoa@QwgngI9E4ZC`tJLn@D;=_aBHDWSBOF>vxg-NT%z>&zRJGwgjrITuYpY(6X`kco-w$^&!!oC=L zHBkZi+UB+fp#n2%p*+j4-;Fq*gSZ85?UKvrPY>jb>~*pG6XQWg%@)fu)UFj=o$8Y( zccW_q#>)XCU7&hQ+wrli!u1i-Ie9{CUDLbM+QuZ8F+)tuRXuLx!r3l!#ixbIuvi1xbjVjO0_xxYz2Mcu(743H%QPixr2Sixlb`_*MuPsvo%0DTTF)Ie+m|bid+lq8aK$jTb8Pvl-#@&cCEI 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