Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Core] Support for Scheduling-defined Prefill-Decode Disaggregation feature #15

Open
wants to merge 13 commits into
base: main
Choose a base branch
from

Conversation

Xinyi-ECNU
Copy link

@Xinyi-ECNU Xinyi-ECNU commented Aug 23, 2024

Design for introducing cluster-level prefill-decode disaggregation design to Llumnix. Based on dynamic rescheduling of requests in Llumnix, this design allows Llumnix to manage prefill/decoding instances and the scheduling of requests on these instances. Specifically, this PR designs broader scheduling semantics, enabling the rules for PD disaggregation to be expressed as customized policies within Llumnix.

llumnix/arg_utils.py Outdated Show resolved Hide resolved
llumnix/backends/backend_interface.py Outdated Show resolved Hide resolved
llumnix/backends/backend_interface.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/llm_engine.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/llm_engine.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/llm_engine.py Outdated Show resolved Hide resolved
@Xinyi-ECNU Xinyi-ECNU requested a review from zhypku August 26, 2024 06:02
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/global_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/llumlet/local_migration_scheduler.py Outdated Show resolved Hide resolved
Copy link
Collaborator

@zhypku zhypku left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to call this feature as: scheduling-defined pdd :)

llumnix/arg_utils.py Outdated Show resolved Hide resolved
llumnix/backends/backend_interface.py Outdated Show resolved Hide resolved
llumnix/backends/backend_interface.py Outdated Show resolved Hide resolved
llumnix/backends/backend_interface.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/llm_engine.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/llm_engine.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/global_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/global_scheduler.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/config.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/llm_engine_manager.py Outdated Show resolved Hide resolved
llumnix/llm_engine_manager.py Outdated Show resolved Hide resolved
llumnix/llm_engine_manager.py Outdated Show resolved Hide resolved
llumnix/llm_engine_manager.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
@Xinyi-ECNU Xinyi-ECNU changed the title [Core] Support for Prefill-Decode Disaggregation feature [Core] Support for Scheduling-defined Prefill-Decode Disaggregation feature Aug 27, 2024
@CLAassistant
Copy link

CLAassistant commented Aug 28, 2024

CLA assistant check
All committers have signed the CLA.

llumnix/backends/backend_interface.py Outdated Show resolved Hide resolved
llumnix/backends/backend_interface.py Outdated Show resolved Hide resolved
llumnix/config.py Outdated Show resolved Hide resolved
llumnix/config.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/global_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/global_scheduler/migration_scheduler.py Outdated Show resolved Hide resolved
llumnix/llm_engine_manager.py Outdated Show resolved Hide resolved
llumnix/llumlet/llumlet.py Outdated Show resolved Hide resolved
llumnix/llumlet/migration_coordinator.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/backends/vllm/scheduler.py Outdated Show resolved Hide resolved
llumnix/llumlet/request.py Outdated Show resolved Hide resolved
llumnix/llumlet/llumlet.py Outdated Show resolved Hide resolved
llumnix/backends/backend_interface.py Show resolved Hide resolved
llumnix/llumlet/request.py Outdated Show resolved Hide resolved
# the expected steps, blocking_migration is True.
@property
def blocking_migration(self) -> bool:
return self.output_len >= self.expected_steps
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you use this to tag the requests that finish the expected steps?
blocking is ambiguous,consider change the name.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you use this to tag the requests that finish the expected steps? blocking is ambiguous,consider change the name.

yes. In our paper blocking migration means one-stage migration

@@ -98,29 +98,36 @@ def from_args(cls,
llumlet = engine_class.remote(instance_id, backend_type, migration_config, *args, **kwargs)
return llumlet

def migrate_out(self, dst_instance_name: str) -> List[str]:
def migrate_out(self, dst_instance_name: str, num_requests: int) -> List[str]:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this function, num_request is used like a boolean (num_requests == 1)

And for pdd, I think you need a function named migrate_out_singlestage.

consider refactor this fucntion

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this function, num_request is used like a boolean (num_requests == 1)

And for pdd, I think you need a function named migrate_out_singlestage.

consider refactor this fucntion

Removed the logic to treat num_request as a boolean. We have reused migrate_out_multistage to send blocks in one stage for pdd and dont need additional function. Please check.

Copy link

migration_size 8.00 MB 16.00 MB 24.00 MB 32.00 MB 40.00 MB 48.00 MB 56.00 MB 64.00 MB 72.00 MB 80.00 MB 88.00 MB 96.00 MB 104.00 MB 112.00 MB 120.00 MB 128.00 MB 136.00 MB 144.00 MB 152.00 MB 160.00 MB 168.00 MB 176.00 MB 184.00 MB 192.00 MB 200.00 MB 208.00 MB 224.00 MB 232.00 MB 280.00 MB 288.00 MB 312.00 MB 344.00 MB 368.00 MB 416.00 MB 424.00 MB 432.00 MB 440.00 MB 496.00 MB 720.00 MB 912.00 MB
rpc_speed(GB/s) 1.05 1.53 1.79 1.95 2.04 2.18 2.18 2.22 2.24 2.34 2.34 2.41 2.43 2.40 2.49 2.51 2.62 2.34 2.34 2.59 2.52 2.50 2.52 2.46 2.64 2.78 2.18 2.49 2.80 2.59 2.76 2.92 3.18 3.05 3.13 3.17 2.93 3.45 3.32 3.06
migration_size 8.00 MB 16.00 MB 24.00 MB 32.00 MB 40.00 MB 48.00 MB 56.00 MB 64.00 MB 72.00 MB 80.00 MB 88.00 MB 96.00 MB 104.00 MB 112.00 MB 120.00 MB 128.00 MB 136.00 MB 144.00 MB 152.00 MB 160.00 MB 168.00 MB 176.00 MB 192.00 MB 200.00 MB 240.00 MB 280.00 MB 312.00 MB 384.00 MB 416.00 MB 464.00 MB 480.00 MB 488.00 MB 536.00 MB 544.00 MB 696.00 MB
gloo_speed(GB/s) 0.92 1.60 1.98 2.28 2.44 2.78 2.72 2.99 2.64 2.91 2.90 2.57 2.62 2.68 3.41 2.62 2.36 2.25 2.19 2.13 2.18 2.50 2.92 2.90 3.40 2.56 2.38 2.97 2.51 2.68 2.84 2.63 2.73 2.64 2.81
migration_size 8.00 MB 16.00 MB 24.00 MB 32.00 MB 40.00 MB 48.00 MB 56.00 MB 64.00 MB 72.00 MB 80.00 MB 88.00 MB 96.00 MB 104.00 MB 112.00 MB 120.00 MB 128.00 MB 136.00 MB 144.00 MB 152.00 MB 160.00 MB 168.00 MB 176.00 MB 184.00 MB 192.00 MB 208.00 MB 232.00 MB 240.00 MB 256.00 MB 280.00 MB 312.00 MB 320.00 MB 416.00 MB 424.00 MB 448.00 MB 464.00 MB 488.00 MB 528.00 MB 536.00 MB 752.00 MB
nccl_speed(GB/s) 0.19 0.45 0.68 0.85 1.14 1.33 1.50 1.52 2.00 1.76 1.76 2.24 2.38 2.63 2.26 2.63 2.86 2.58 3.38 3.44 4.23 3.41 3.62 3.31 3.22 4.43 5.22 4.46 2.65 2.94 4.44 5.66 5.35 5.49 3.73 3.54 5.44 3.99 3.96

Copy link

prefill p25 p50 p75 p95 p99 mean
latency(ms) 32545.25 99194.50 192927.00 260004.45 292360.40 114263.90
decode p25 p50 p75 p95 p99 mean
latency(ms) 54.14 59.66 73.90 135.57 231.50 72.70

Copy link

migration_size 8.00 MB 16.00 MB 24.00 MB 32.00 MB 40.00 MB 48.00 MB 56.00 MB 64.00 MB 72.00 MB 80.00 MB 88.00 MB 96.00 MB 104.00 MB 112.00 MB 120.00 MB 128.00 MB 136.00 MB 144.00 MB 152.00 MB 160.00 MB 168.00 MB 176.00 MB 184.00 MB 192.00 MB 200.00 MB 216.00 MB 232.00 MB 240.00 MB 248.00 MB 272.00 MB 312.00 MB 352.00 MB 376.00 MB 424.00 MB 464.00 MB 480.00 MB 536.00 MB 544.00 MB 560.00 MB
rpc_speed(GB/s) 1.03 1.52 1.75 1.90 1.99 2.11 2.03 2.13 2.16 2.21 2.28 2.35 2.32 2.36 2.44 2.40 2.42 2.37 2.42 2.39 2.46 2.39 2.64 2.45 2.32 2.61 2.58 2.27 2.63 2.48 2.76 2.72 2.91 2.78 2.93 2.96 3.01 3.08 2.99
migration_size 8.00 MB 16.00 MB 24.00 MB 32.00 MB 40.00 MB 48.00 MB 56.00 MB 64.00 MB 72.00 MB 80.00 MB 88.00 MB 96.00 MB 104.00 MB 112.00 MB 120.00 MB 128.00 MB 136.00 MB 144.00 MB 152.00 MB 160.00 MB 168.00 MB 176.00 MB 184.00 MB 192.00 MB 200.00 MB 224.00 MB 264.00 MB 312.00 MB 320.00 MB 416.00 MB 424.00 MB 480.00 MB 536.00 MB
gloo_speed(GB/s) 0.94 1.56 2.08 2.27 2.47 2.53 2.69 2.91 3.05 2.95 2.82 3.05 3.31 3.30 2.61 2.37 2.73 3.03 2.74 2.42 2.36 2.61 3.02 3.19 3.02 2.83 2.57 2.53 2.40 2.85 2.29 2.60 2.61
migration_size 8.00 MB 16.00 MB 24.00 MB 32.00 MB 40.00 MB 48.00 MB 56.00 MB 64.00 MB 72.00 MB 80.00 MB 88.00 MB 96.00 MB 104.00 MB 112.00 MB 120.00 MB 128.00 MB 136.00 MB 144.00 MB 152.00 MB 160.00 MB 168.00 MB 176.00 MB 184.00 MB 192.00 MB 208.00 MB 232.00 MB 280.00 MB 312.00 MB 336.00 MB 416.00 MB 424.00 MB 432.00 MB 472.00 MB 480.00 MB 536.00 MB 560.00 MB 568.00 MB
nccl_speed(GB/s) 0.19 0.45 0.68 0.87 1.04 1.20 1.44 1.67 1.92 1.93 1.96 2.17 2.38 2.23 2.33 2.68 2.90 3.11 2.72 3.08 2.83 4.17 2.83 3.27 5.00 4.47 2.73 3.18 3.45 5.82 6.39 3.52 5.66 7.48 6.22 5.66 4.20

Copy link

prefill p25 p50 p75 p95 p99 mean
latency(ms) 28162.75 101213.50 206765.75 237777.95 250164.08 111382.05
decode p25 p50 p75 p95 p99 mean
latency(ms) 53.26 59.09 72.60 130.21 401.89 75.28

@@ -61,6 +62,8 @@ class EngineManagerArgs:
last_stage_max_blocks: int = None
max_stages: int = None

enable_pd_disagg: bool = False

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in this file, set the default value to None, set default value in config/default.py.

we want to get default value from only one palce

@@ -47,9 +56,15 @@ def __init__(self,
self.instance_info: Dict[str, InstanceInfo] = None
self.sorted_instance_infos: List[InstanceInfo] = None

def pair_migration(self) -> List[Tuple[str, str]]:
def pair_migration(self, pair_migration_type:str) -> List[Tuple[str, str]]:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pair_migration_type:str -> pair_migration_type: str
add a space

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and other place

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants