MCPcopy Index your code
hub / github.com/deepseek-ai/DualPipe

github.com/deepseek-ai/DualPipe @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
79 symbols 251 edges 8 files 4 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

DualPipe

DualPipe is an innovative bidirectional pipeline parallelism algorithm introduced in the DeepSeek-V3 Technical Report. It achieves full overlap of forward and backward computation-communication phases, also reducing pipeline bubbles. For detailed information on computation-communication overlap, please refer to the profile data.

Schedules

dualpipe

Example DualPipe scheduling for 8 PP ranks and 20 micro-batches in two directions. The micro-batches in the reverse direction are symmetric to those in the forward direction, so we omit their batch ID for illustration simplicity. Two cells enclosed by a shared black border have mutually overlapped computation and communication

DualPipeV

DualPipeV is a concise V-shape schedule derived from DualPipe using a "cut-in-half" procedure, introduced by Sea AI Lab as "Cut-in-half" in their blog post. Thanks to them for this efficient schedule!

Schedules

dualpipev

Example DualPipeV scheduling for 4 PP ranks (8 PP stages) and 10 micro-batches.

Pipeline Bubbles and Memory Usage Comparison (based on the same number of PP stages)

Method Bubble Parameter Per Device Activation Per Device #Devices
1F1B (PP-1)(𝐹+𝐵) PP PP
ZB1P (PP-1)(𝐹+𝐵-2𝑊) PP PP
DualPipe (PP/2-1)(𝐹&𝐵+𝐵-3𝑊) PP+1 PP
DualPipeV (PP/2-1)(𝐹&𝐵+𝐵-3𝑊) PP+1 PP/2

PP denotes the number of pp stages (even). 𝐹 denotes the execution time of a forward chunk, 𝐵 denotes the execution time of a full backward chunk, 𝑊 denotes the execution time of a "backward for weights" chunk, and 𝐹&𝐵 denotes the execution time of two mutually overlapped forward and backward chunks.

Quick Start

The usage is shown in the following example:

python examples/example_dualpipe.py
python examples/example_dualpipev.py

Note: For real-world applications, you will need to implement a custom overlapped_forward_backward method tailored to your specific module.

Requirements

  • PyTorch 2.0 and above

Developers

DualPipe was created and developed by Jiashi Li and Chengqi Deng and Wenfeng Liang.

Citation

@misc{deepseekai2025deepseekv3technicalreport,
      title={DeepSeek-V3 Technical Report}, 
      author={DeepSeek-AI},
      year={2025},
      eprint={2412.19437},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2412.19437}, 
}

Core symbols most depended-on inside this repo

_backward_chunk
called by 6
dualpipe/dualpipev.py
_backward_chunk
called by 6
dualpipe/dualpipe.py
_forward_chunk
called by 5
dualpipe/dualpipev.py
_recv_forward
called by 5
dualpipe/dualpipev.py
_send_forward
called by 5
dualpipe/dualpipev.py
_commit_and_wait_comm
called by 5
dualpipe/dualpipev.py
_forward_chunk
called by 5
dualpipe/dualpipe.py
_recv_forward
called by 5
dualpipe/dualpipe.py

Shape

Method 50
Function 20
Class 9

Languages

Python100%

Modules by API surface

dualpipe/dualpipev.py17 symbols
dualpipe/dualpipe.py17 symbols
examples/example_dualpipev.py15 symbols
examples/example_dualpipe.py15 symbols
dualpipe/utils.py10 symbols
dualpipe/comm.py5 symbols

For agents

$ claude mcp add DualPipe \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact