-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[Test] L4 complete diffusion feature test for Bagel models #1938
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
Changes from 2 commits
e0d9cb4
1ca862c
2b6c223
ad0c6b2
fb78bb4
752d2f2
321c634
01a6af2
27addc4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,130 @@ | ||
| """L4 diffusion feature expansion tests for Bagel. | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. what's the expected result for these tests?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The expected result is that for each configuration (TeaCache / Cache-DiT / CFG-Parallel / TP2), Bagel can successfully generate images via online serving, and assert_diffusion_response verifies that:
An additional comment was added at the top of the file to clarify the use of the file. |
||
| Coverage: | ||
| - TeaCache | ||
| - Cache-DiT | ||
| - CFG-Parallel | ||
| - Tensor-Parallel | ||
| """ | ||
|
|
||
| import pytest | ||
|
|
||
| from tests.conftest import ( | ||
| OmniServer, | ||
| OmniServerParams, | ||
| OpenAIClientHandler, | ||
| dummy_messages_from_mix_data, | ||
| ) | ||
| from tests.utils import hardware_marks | ||
|
|
||
| PROMPT = "A futuristic city skyline at twilight, cyberpunk style, ultra-detailed, high resolution." | ||
| NEGATIVE_PROMPT = "low quality, blurry, distorted, deformed, watermark" | ||
|
|
||
| SINGLE_CARD_FEATURE_MARKS = hardware_marks(res={"cuda": "H100"}) | ||
| PARALLEL_FEATURE_MARKS = hardware_marks(res={"cuda": "H100"}, num_cards=2) | ||
|
NumberWan marked this conversation as resolved.
|
||
|
|
||
|
|
||
| def _get_diffusion_feature_cases(model: str): | ||
| """Return L4 diffusion feature cases for Bagel. | ||
|
|
||
| Each case enables at least one of the Bagel-supported diffusion | ||
| acceleration features listed in RFC #1217: | ||
| TeaCache, Cache-DiT, CFG-Parallel, Tensor-Parallel. | ||
| """ | ||
|
|
||
| return [ | ||
| # TeaCache (single-card) | ||
| pytest.param( | ||
| OmniServerParams( | ||
| model=model, | ||
| server_args=[ | ||
| "--cache-backend", | ||
| "tea_cache", | ||
| ], | ||
| ), | ||
| id="single_card_teacache", | ||
| marks=SINGLE_CARD_FEATURE_MARKS, | ||
| ), | ||
| # Cache-DiT (single-card) | ||
| pytest.param( | ||
| OmniServerParams( | ||
| model=model, | ||
| server_args=[ | ||
| "--cache-backend", | ||
| "cache_dit", | ||
| ], | ||
| ), | ||
| id="single_card_cache_dit", | ||
| marks=SINGLE_CARD_FEATURE_MARKS, | ||
| ), | ||
| # CFG-Parallel size 2 (2 GPUs, TeaCache backend) | ||
| pytest.param( | ||
| OmniServerParams( | ||
| model=model, | ||
| server_args=[ | ||
| "--cache-backend", | ||
| "tea_cache", | ||
| "--cfg-parallel-size", | ||
| "2", | ||
| ], | ||
| ), | ||
| id="parallel_cfg_2", | ||
| marks=PARALLEL_FEATURE_MARKS, | ||
| ), | ||
| # Tensor-Parallel size 2 (2 GPUs, Cache-DiT backend) | ||
| pytest.param( | ||
| OmniServerParams( | ||
| model=model, | ||
| server_args=[ | ||
| "--cache-backend", | ||
| "cache_dit", | ||
| "--tensor-parallel-size", | ||
| "2", | ||
| ], | ||
| ), | ||
| id="parallel_tp_2", | ||
| marks=PARALLEL_FEATURE_MARKS, | ||
| ), | ||
| ] | ||
|
|
||
|
|
||
| @pytest.mark.advanced_model | ||
| @pytest.mark.diffusion | ||
| @pytest.mark.parametrize( | ||
| "omni_server", | ||
| _get_diffusion_feature_cases("ByteDance-Seed/BAGEL-7B-MoT"), | ||
| indirect=True, | ||
| ) | ||
| def test_bagel( | ||
| omni_server: OmniServer, | ||
| openai_client: OpenAIClientHandler, | ||
| ): | ||
| """L4 diffusion feature coverage for Bagel on H100. | ||
|
|
||
| This test exercises: | ||
| - TeaCache | ||
| - Cache-DiT | ||
| - CFG-Parallel (size=2) | ||
| - Tensor-Parallel (size=2) | ||
|
|
||
| Validation is delegated to assert_diffusion_response in tests.conftest, | ||
| which checks output dimensions and basic correctness. | ||
| """ | ||
|
|
||
| messages = dummy_messages_from_mix_data(content_text=PROMPT) | ||
|
|
||
| request_config = { | ||
| "model": omni_server.model, | ||
| "messages": messages, | ||
| "extra_body": { | ||
| "height": 512, | ||
| "width": 512, | ||
| "num_inference_steps": 2, | ||
| # Enable CFG for models that use classifier-free guidance | ||
| "negative_prompt": NEGATIVE_PROMPT, | ||
| "true_cfg_scale": 4.0, | ||
| "seed": 42, | ||
| }, | ||
| } | ||
|
|
||
| openai_client.send_diffusion_request(request_config) | ||
|
|
||
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.
We need compare some specific pixel value to ensure these feature can output expect result, so you can refer to bagel's e2e test, and I also think only use
OmniDiffusionis enough to test these feature.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.
Thanks for the suggestion!
But according to the internal agreement that:
This Bagel L4 suite follows exactly the same pattern/infra as test_qwen_image_edit_expansion.py and #1682 to keep the behavior consistent across models.
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.
#1832 This is the RFC @princepride
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.
Thank you, I will check it later
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.
I think maybe you can unify the bagel test cases in the current test-ready.yml into test_bagel.py, and use the current code style
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.
@princepride Thanks! This PR follows the current L4 diffusion e2e scope in RFC #1832 / template #1682 (online serving, shape checks). . If this is acceptable, could you please dismiss the “changes requested” so this PR can merge?