--update-weight-transfer-mode p2p, miles enables more efficient weight transfer from training ranks to rollout engine ranks. More details on the design and implementation can be found in this issue.
Usage
To enable P2P weight transfer, add the following flag to your training command:How It Works
The default weight transfer mode in miles isbroadcast: after training, updated weights are broadcast via NCCL to all rollout engine ranks. This works but does not fully utilize the available bandwidth, as redundant copies of the same weights are transferred to multiple ranks.
P2P mode addresses this by having each training rank transfer only the specific weight shards required by its target rollout engine rank(s), writing them directly to remote memory without redundant copies. The key steps are:
-
Initialization: Training ranks establish point-to-point connections (via RDMA) to their target rollout engine ranks. Including:
- Create a transfer plan that maps each training rank to its target rollout rank(s) based on GPU counts and parallelism configuration.
- Query remote rollout engines for their weight memory registration info (addresses and sizes for RDMA writes).
- Query remote parallelism config and construct a local CPU model replica that mirrors the target’s sharding layout, enabling correct weight format conversion before transfer.
- Weight gather: Megatron TP/EP shards are all-gathered and converted to HF format, same as the broadcast path.
- P2P transfer: Instead of a collective broadcast, each source rank writes bucketed weight tensors directly to the destination rollout rank’s memory, in a write-only fashion.
- Synchronization: Once all RDMA writes are confirmed complete, rollout engines increment their weight version and resume generation for the next training step.
Architecture
Both broadcast and P2P modes share the same bucketed weight-update pipeline inmiles/backends/megatron_utils/update_weight/. The diagram below shows which components are shared and which are P2P-specific.
Shared components (broadcast & P2P)
P2P-specific components
Supported Model Architectures
P2P weight transfer relies on a unified weight name mapping interface between Megatron and sglang (see sglang#17326). The following sglang model classes are supported:Note: All the above models are tested on H100-80GB clusters. For Kimi-K2, we settraining nodes = inference nodes = 32to ensure sufficient memory. The original Kimi-K2 checkpoint uses a block-quant size of[128, 128], which will trigger errors ifsglang-tp-size = 32. To work around this, we re-quantize to[64, 64]and update all affected scale tensors accordingly.
Validated Models
All models below have been validated with--check-weight-update-equal in P2P mode.
Enabling--check-weight-update-equalfor Kimi-K2 is non-trivial due to several issues:We verified P2P correctness for Kimi-K2 by enabling
- The user must first dequantize the Kimi-K2 model to BF16 for training, then re-quantize the parameters for weight updating. Meanwhile, the rollout side snapshots the original Kimi-K2 tensors as the reference when enabling
--check-weight-update-equal. This means the rollout SGLang engine should load the checkpoints processed by thedequant-requantpipeline.- We use modified checkpoints with block-quant size
[64, 64], so anyquant/dequantcode that hard-codes the block-quant size as[128, 128]will break.- Certain tensors that are only initialized on the rollout side (e.g.,
k_scale/v_scale) must be skipped during the weight-check process.--check-weight-update-equalwith hard-coded workarounds for the issues above. The transferred weights were confirmed correct. These hard-coded workarounds are verification-only and will not be merged into the main branch to keep the codebase maintainable.
Profiling Results
For M source ranks and N target ranks, with source pp sizesrc_pp and target ep size sgl_ep, the benefit of P2P transfer is approximately:
- utilizes
M // src_pptimes more source transmission bandwidth. - each target rank receives
sgl_eptimes less data.
pause_generation call returns and before update_weight call exits to exclude request queue abortion time.
Table includes steady-state steps 3–12 average. For Kimi-K2, the RDMA (ms) column includes GPU-side post-processing time (post_load_weights ~884ms) since this model requires GPU-side weight requantization after RDMA transfer.
Models marked with ★ are MoE architectures, where P2P benefits are most pronounced due to expert-parallel sharding reducing per-target transfer volume.

post_load_weights requantization on rollout engines.
Examples
CI Test (single-node, Qwen3-4B)
The P2P weight transfer E2E test validates correctness on a single node usingQwen3-4B:

