-
-
Notifications
You must be signed in to change notification settings - Fork 8.3k
Introduce RayCudaCommunicator as Ray Compiled Graph communicator #19816
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
base: main
Are you sure you want to change the base?
Conversation
Signed-off-by: Rui Qiao <ruisearch42@gmail.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @ruisearch42, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request establishes a foundational component for enhancing distributed GPU communication within vLLM when leveraging Ray's Compiled Graph capabilities. It introduces RayCudaCommunicator
, a specialized class that integrates with Ray's experimental channel API to manage efficient, NCCL-backed data exchange between distributed Ray actors on NVIDIA GPUs. This integration is crucial for optimizing the performance of large-scale model inference and training by streamlining inter-GPU communication.
Highlights
- New Ray Communicator: Introduces
RayCudaCommunicator
, a new class designed to handle GPU communication for Ray's experimental Compiled Graph feature. - NCCL-based Communication: The
RayCudaCommunicator
internally utilizesPyNcclCommunicator
to perform efficient GPU-to-GPU data transfers and collective operations likesend
,recv
,allgather
,allreduce
, andreducescatter
. - Integration with Ray Compiled Graph: The new communicator is registered within
ray_distributed_executor.py
to be used specifically for CUDA operations when Ray's Compiled Graph is enabled, facilitating optimized distributed execution.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command>
or @gemini-code-assist <command>
. Below is a summary of the supported commands.
Feature | Command | Description |
---|---|---|
Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/
folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
👋 Hi! Thank you for contributing to the vLLM project. 💬 Join our developer Slack at https://slack.vllm.ai to discuss your PR in #pr-reviews, coordinate on features in #feat- channels, or join special interest groups in #sig- channels. Just a reminder: PRs would not trigger full CI run by default. Instead, it would only run Once the PR is approved and ready to go, your PR reviewer(s) can run CI to test the changes comprehensively before merging. To run CI, PR reviewers can either: Add 🚀 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request introduces RayCudaCommunicator
, a new communicator designed for Ray Compiled Graphs on NVIDIA GPUs, leveraging PyNcclCommunicator
for underlying NCCL operations. The changes also include registering this communicator within the Ray distributed executor.
Several areas need attention:
- Critical issues include hardcoded network parameters that will prevent multi-node operation and a missing explicit cleanup for the NCCL communicator.
- Type hint consistency and correctness for
list
andtuple
should be addressed. - Redundant imports and an unused parameter should be cleaned up.
- Several TODO comments point to important future work, some of which (like performance synchronizations) are significant.
- The PR description template is not filled out, which is important for context and testability.
Overall, the PR lays the groundwork for a specialized Ray communicator, but the critical issues must be resolved before it can be reliably used, especially in distributed environments.
@youkaichao @stephanie-wang Could you help review the PR, thanks! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
realized I didn't release my qs for like 4 days :)
logger = init_logger(__name__) | ||
|
||
|
||
class RayCudaCommunicator(Communicator): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So I do not thing this class belongs here. Since every other communicator that is here under device_communicators
inherits from the CommunicatorBase
class and is constructed in a standard way from Platform object.
We can later decide how we need to organize ray stuff, but I think a better organization for now would be vllm/distributed/ray_communicators/cuda.RayCudaCommunicator
Essential Elements of an Effective PR Description Checklist
supported_models.md
andexamples
for a new model.Purpose
Ray uses cupy under the hood for inter-GPU communication in compiled graphs. This dependency is heavy and should be removed.
In this PR, we introduce
RayCudaCommunicator
which leverages PyNCCL from vLLM.RayCudaCommunicator
is registered to Ray Compiled Graph as the communicator to use, therefore cupy dependency can be removed.Closes #19758
Test Plan
Test with test_pipeline_parallel.py which uses Ray Compiled Graph (and the underlying communicator)
Test Result
Passed
(Optional) Documentation Update