From c49ce18ea544970510ebb04fff49a484533fe2a3 Mon Sep 17 00:00:00 2001 From: wanghengkang Date: Fri, 6 Mar 2026 14:25:10 +0800 Subject: [PATCH] [Test] Add e2e test cases for the Qwen-VL model adaptation to Ascend 310p (#6977) ### What this PR does / why we need it? Add e2e test cases for the Qwen-VL model adaptation to Ascend 310p - vLLM version: v0.16.0 - vLLM main: https://github.com/vllm-project/vllm/commit/15d76f74e2fdb12a95ea00f0ca283acf6219a2b7 Signed-off-by: gcw_61wqY8cy --- .github/workflows/_e2e_test.yaml | 6 +- .github/workflows/pr_test_light.yaml | 1 + tests/e2e/310p/data/qwen.png | Bin 0 -> 17778 bytes .../310p/multicard/test_vl_model_multicard.py | 42 ++++++++++++ .../singlecard/test_vl_model_singlecard.py | 34 ++++++++++ tests/e2e/310p/test_utils.py | 60 ++++++++++++++++++ 6 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 tests/e2e/310p/data/qwen.png create mode 100644 tests/e2e/310p/multicard/test_vl_model_multicard.py create mode 100644 tests/e2e/310p/singlecard/test_vl_model_singlecard.py create mode 100644 tests/e2e/310p/test_utils.py diff --git a/.github/workflows/_e2e_test.yaml b/.github/workflows/_e2e_test.yaml index 7ab5c3f8..fb84bd72 100644 --- a/.github/workflows/_e2e_test.yaml +++ b/.github/workflows/_e2e_test.yaml @@ -517,7 +517,8 @@ jobs: PYTORCH_NPU_ALLOC_CONF: max_split_size_mb:256 VLLM_WORKER_MULTIPROC_METHOD: spawn run: | - pytest -sv --durations=0 tests/e2e/310p/singlecard/test_dense_model_singlecard.py + pytest -sv --durations=0 tests/e2e/310p/singlecard/test_dense_model_singlecard.py \ + tests/e2e/310p/singlecard/test_vl_model_singlecard.py e2e_310p-4cards: name: 310p multicards 4cards @@ -577,4 +578,5 @@ jobs: run: | pytest -sv --durations=0 \ tests/e2e/310p/multicard/test_dense_model_multicard.py \ - tests/e2e/310p/multicard/test_moe_model_multicard.py + tests/e2e/310p/multicard/test_moe_model_multicard.py \ + tests/e2e/310p/multicard/test_vl_model_multicard.py diff --git a/.github/workflows/pr_test_light.yaml b/.github/workflows/pr_test_light.yaml index d3c9a881..bb98dfe3 100644 --- a/.github/workflows/pr_test_light.yaml +++ b/.github/workflows/pr_test_light.yaml @@ -77,6 +77,7 @@ jobs: - '.github/workflows/pr_test_light.yaml' _310_tracker: - 'vllm_ascend/_310p/**' + - 'tests/e2e/310p/**' - 'vllm_ascend/worker/model_runner_v1.py' - 'vllm_ascend/attention/attention_v1.py' - 'vllm_ascend/ops/fused_moe/**' diff --git a/tests/e2e/310p/data/qwen.png b/tests/e2e/310p/data/qwen.png new file mode 100644 index 0000000000000000000000000000000000000000..49be989377847638ba4e2f05b07421693f4e3398 GIT binary patch literal 17778 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 JPDHLkV1hcZ!43cb literal 0 HcmV?d00001 diff --git a/tests/e2e/310p/multicard/test_vl_model_multicard.py b/tests/e2e/310p/multicard/test_vl_model_multicard.py new file mode 100644 index 00000000..0016ea86 --- /dev/null +++ b/tests/e2e/310p/multicard/test_vl_model_multicard.py @@ -0,0 +1,42 @@ +# +# Copyright (c) 2026 Huawei Technologies Co., Ltd. All Rights Reserved. +# Copyright 2023 The vLLM team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# This file is a part of the vllm-ascend project. + +import sys +import os + +# Add 310p directory to sys.path +current_dir = os.path.dirname(os.path.abspath(__file__)) +parent_dir = os.path.dirname(current_dir) # 310p directory +sys.path.insert(0, parent_dir) + +from test_utils import run_vl_model_test + +def test_qwen3_vl_8b_tp2_fp16(): + """Qwen3-VL-8B dual-card FP16 test""" + run_vl_model_test( + model_name="Qwen/Qwen3-VL-8B-Instruct", + tensor_parallel_size=2, + max_tokens=5 + ) + +def test_qwen3_vl_32b_tp1_fp16(): + """Qwen3-VL-32B 4-card FP16 test""" + run_vl_model_test( + model_name="Qwen/Qwen3-VL-32B-Instruct", + tensor_parallel_size=4, + max_tokens=5 + ) \ No newline at end of file diff --git a/tests/e2e/310p/singlecard/test_vl_model_singlecard.py b/tests/e2e/310p/singlecard/test_vl_model_singlecard.py new file mode 100644 index 00000000..380116c7 --- /dev/null +++ b/tests/e2e/310p/singlecard/test_vl_model_singlecard.py @@ -0,0 +1,34 @@ +# +# Copyright (c) 2026 Huawei Technologies Co., Ltd. All Rights Reserved. +# Copyright 2023 The vLLM team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# This file is a part of the vllm-ascend project. + +import sys +import os + +# Add 310p directory to sys.path +current_dir = os.path.dirname(os.path.abspath(__file__)) +parent_dir = os.path.dirname(current_dir) # 310p directory +sys.path.insert(0, parent_dir) + +from test_utils import run_vl_model_test + +def test_qwen3_vl_8b_tp1_fp16(): + """Qwen3-VL-8B single-card FP16 test""" + run_vl_model_test( + model_name="Qwen/Qwen3-VL-8B-Instruct", + tensor_parallel_size=1, + max_tokens=5 + ) \ No newline at end of file diff --git a/tests/e2e/310p/test_utils.py b/tests/e2e/310p/test_utils.py new file mode 100644 index 00000000..f9c521fd --- /dev/null +++ b/tests/e2e/310p/test_utils.py @@ -0,0 +1,60 @@ +# +# Copyright (c) 2026 Huawei Technologies Co., Ltd. All Rights Reserved. +# Copyright 2023 The vLLM team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# This file is a part of the vllm-ascend project. + +from tests.e2e.conftest import VllmRunner +from PIL import Image +import os + + +def get_test_image(): + """Get the image object for testing""" + current_dir = os.path.dirname(os.path.abspath(__file__)) + image_path = os.path.join(current_dir, "data", "qwen.png") + return Image.open(image_path) + + +def get_test_prompts(): + """Get the prompts for testing""" + return ["<|image_pad|>Describe this image in detail."] + + +def run_vl_model_test(model_name: str, + tensor_parallel_size: int, + max_tokens: int, + dtype: str = "float16", + enforce_eager: bool = True): + """ + Generic visual language model test function + + Args: + model_name: Model name, e.g., "Qwen/Qwen3-VL-4B" + tensor_parallel_size: Tensor parallel size + max_tokens: Maximum number of generated tokens + dtype: Data type, default is float16 + enforce_eager: Whether to enforce eager mode + """ + image = get_test_image() + images = [image] + prompts = get_test_prompts() + + with VllmRunner( + model_name, + tensor_parallel_size=tensor_parallel_size, + enforce_eager=enforce_eager, + dtype=dtype + ) as vllm_model: + vllm_model.generate_greedy(prompts, max_tokens, images=images) \ No newline at end of file