2025-05-29 11:58:26 +08:00
#
# Copyright (c) 2025 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.
#
2025-10-10 16:31:20 +08:00
2026-02-24 15:50:00 +08:00
# ruff: noqa: E501
2026-01-30 16:24:48 +08:00
import os
2025-05-29 11:58:26 +08:00
2026-02-24 15:50:00 +08:00
import pytest
from tests . e2e . singlecard . utils import PROMPTS_LONG , PROMPTS_SHORT , LLMTestCase , gen_and_valid
2025-05-29 11:58:26 +08:00
2026-01-07 20:58:15 +08:00
CASE_QWEN_ACLGRAPH = LLMTestCase (
model = " Qwen/Qwen3-0.6B " ,
prompts = PROMPTS_SHORT ,
golden_answers = [
2026-02-11 21:20:53 +08:00
" Lina. I ' m a 22-year-old student from China. I ' m interested in studying in the US. I ' m looking for a job in the " ,
2026-02-24 15:50:00 +08:00
" the same as the president of the United Nations. This is because the president of the United States is the same as the president of the United Nations. The president " ,
" Paris. The capital of France is also the capital of the Republic of France. The capital of France is also the capital of the European Union. The capital of " ,
" not just a technological challenge but a profound transformation of how we live, work, and interact with the world. As we stand at the intersection of artificial intelligence and " ,
2026-01-07 20:58:15 +08:00
] ,
)
CASE_DS_ACLGRAPH = LLMTestCase (
model = " vllm-ascend/DeepSeek-V2-Lite-W8A8 " ,
quantization = " ascend " ,
prompts = PROMPTS_SHORT ,
golden_answers = [
2026-02-24 15:50:00 +08:00
" \n I am a 20 year old female, and I have been suffering from depression for 3 years now. I have been on medication for 2 " ,
" a man who has been in the public eye for decades. He has been a senator, a governor, and a businessman. He has also been married to the " ,
" Paris, which is also the largest city in the country. The city is located on the River Seine and is known for its beautiful architecture, museums, and art " ,
" here, and it’ s not what you think. \n The future of AI is here, and it’ s not what you think. \n The future of " ,
2026-01-07 20:58:15 +08:00
] ,
)
2025-12-26 09:18:16 +08:00
2026-02-04 21:11:08 +08:00
CASE_QWEN_FULL = LLMTestCase (
model = " Qwen/Qwen3-0.6B " ,
prompts = PROMPTS_SHORT ,
golden_answers = [
2026-02-11 21:20:53 +08:00
" Lina. I ' m a 22-year-old student from China. I ' m interested in studying in the US. I ' m looking for a job in the " ,
2026-02-24 15:50:00 +08:00
" the same as the president of the United Nations. This is because the president of the United States is the same as the president of the United Nations. The president " ,
" Paris. The capital of France is also the capital of the Republic of France. The capital of France is also the capital of the European Union. The capital of " ,
" not just a technological challenge but a profound transformation of how we live, work, and interact with the world. As we stand at the intersection of artificial intelligence and " ,
2026-02-04 21:11:08 +08:00
] ,
)
CASE_DS_FULL = LLMTestCase (
model = " vllm-ascend/DeepSeek-V2-Lite-W8A8 " ,
quantization = " ascend " ,
prompts = PROMPTS_SHORT ,
golden_answers = [
2026-02-24 15:50:00 +08:00
" \n I am a 20 year old female, and I have been suffering from depression for 3 years now. I have been on medication for 2 " ,
" a man who has been in the public eye for decades. He has been a senator, a governor, and a businessman. He has also been married to the " ,
" Paris, which is also the largest city in the country. The city is located on the River Seine and is known for its beautiful architecture, museums, and art " ,
" here, and it’ s not what you think. \n The future of AI is here, and it’ s not what you think. \n The future of " ,
2026-02-04 21:11:08 +08:00
] ,
)
2026-01-07 20:58:15 +08:00
CASE_QWEN_FULL_DECODE_ONLY = LLMTestCase (
model = " Qwen/Qwen3-0.6B " ,
prompts = PROMPTS_LONG ,
golden_answers = [
2026-02-24 15:50:00 +08:00
" \n \n To solve this problem, we need to use the Law of Sines and Law of Cosines. Let me start by drawing triangle $ABC$ with the " ,
2026-02-11 21:20:53 +08:00
" \n \n To solve this problem, we can use the fact that the expected value of the area of a triangle with vertices on a square can be calculated by integrating over " ,
2026-02-24 15:50:00 +08:00
" \n \n To solve this problem, we can use the following approach: Let $ \\ alpha $ be the common real root of the two equations. Then, we can " ,
] ,
)
2025-11-24 17:22:03 +08:00
2026-01-07 20:58:15 +08:00
CASE_DS_FULL_DECODE_ONLY = LLMTestCase (
model = " vllm-ascend/DeepSeek-V2-Lite-W8A8 " ,
quantization = " ascend " ,
prompts = PROMPTS_LONG ,
golden_answers = [
2026-01-23 21:09:54 +08:00
" \n \n Select an assignment template " ,
" \n \n I ' m not sure how to approach this problem. I ' m not sure if I should use the law of total probability or if I should use " ,
2026-02-24 15:50:00 +08:00
" \n \n ## Answer \n \n $a + b + c = 0$ \n \n Solution \n \n Let $x$ be the common root of the equations " ,
] ,
)
2025-10-10 16:31:20 +08:00
2026-01-07 20:58:15 +08:00
CASE_QWEN_EX = LLMTestCase (
model = " Qwen/Qwen3-0.6B " ,
prompts = PROMPTS_LONG ,
golden_answers = [
2026-02-24 15:50:00 +08:00
" \n \n To solve this problem, we need to use the Law of Sines and Law of Cosines. Let me start by drawing triangle $ABC$ with the " ,
2026-02-11 21:20:53 +08:00
" \n \n To solve this problem, we can use the fact that the expected value of the area of a triangle with vertices on a square can be calculated by integrating over " ,
2026-02-24 15:50:00 +08:00
" \n \n To solve this problem, we can use the following approach: Let $ \\ alpha $ be the common real root of the two equations. Then, we can " ,
] ,
)
CASE_DS_EX = LLMTestCase (
model = " vllm-ascend/DeepSeek-V2-Lite-W8A8 " ,
quantization = " ascend " ,
prompts = PROMPTS_LONG ,
golden_answers = [
" \n \n Select an assignment template " ,
" \n \n I ' m not sure how to approach this problem. I ' m not sure if I should use the law of total probability or if I should use " ,
" \n \n ## Answer \n \n $a + b + c = 0$ \n \n Solution \n \n Let $x$ be the common root of the equations " ,
] ,
)
2026-01-07 20:58:15 +08:00
@pytest.mark.parametrize ( " cur_case " , [ CASE_QWEN_ACLGRAPH , CASE_DS_ACLGRAPH ] )
def test_piecewise_res_consistency ( cur_case : LLMTestCase ) :
runner_kwargs = {
" model_name " : cur_case . model ,
" max_model_len " : 1024 ,
" cudagraph_capture_sizes " : [ 1 , 2 , 4 , 8 ] ,
" quantization " : cur_case . quantization ,
}
2026-02-24 15:50:00 +08:00
gen_and_valid (
runner_kwargs = runner_kwargs ,
prompts = cur_case . prompts ,
sampling_params = cur_case . sampling_params ,
golden_answers = cur_case . golden_answers ,
)
2026-01-07 20:58:15 +08:00
2026-02-24 15:50:00 +08:00
@pytest.mark.parametrize ( " cur_case " , [ CASE_QWEN_FULL , CASE_DS_FULL ] )
2026-02-04 21:11:08 +08:00
def test_full_res_consistency ( cur_case : LLMTestCase , monkeypatch ) :
monkeypatch . delenv ( " HCCL_OP_EXPANSION_MODE " , raising = False )
runner_kwargs = {
" model_name " : cur_case . model ,
" max_model_len " : 1024 ,
2026-02-24 15:50:00 +08:00
" compilation_config " : { " cudagraph_capture_sizes " : [ 4 , 8 , 32 , 64 ] , " cudagraph_mode " : " FULL_DECODE_ONLY " } ,
2026-02-04 21:11:08 +08:00
" quantization " : cur_case . quantization ,
}
2026-02-24 15:50:00 +08:00
gen_and_valid (
runner_kwargs = runner_kwargs ,
prompts = cur_case . prompts ,
sampling_params = cur_case . sampling_params ,
golden_answers = cur_case . golden_answers ,
)
2026-01-07 20:58:15 +08:00
2026-02-24 15:50:00 +08:00
@pytest.mark.parametrize ( " cur_case " , [ CASE_QWEN_FULL_DECODE_ONLY , CASE_DS_FULL_DECODE_ONLY ] )
2026-01-07 20:58:15 +08:00
def test_full_decode_only_res_consistency ( cur_case : LLMTestCase , monkeypatch ) :
monkeypatch . delenv ( " HCCL_OP_EXPANSION_MODE " , raising = False )
runner_kwargs = {
" model_name " : cur_case . model ,
" max_model_len " : 1024 ,
2026-02-24 15:50:00 +08:00
" compilation_config " : { " cudagraph_capture_sizes " : [ 4 , 8 , 32 , 64 ] , " cudagraph_mode " : " FULL_DECODE_ONLY " } ,
2026-01-07 20:58:15 +08:00
" quantization " : cur_case . quantization ,
2026-03-02 17:54:25 +08:00
" additional_config " : { " ascend_compilation_config " : { " enable_npugraph_ex " : False } } ,
2026-01-07 20:58:15 +08:00
}
2026-02-24 15:50:00 +08:00
gen_and_valid (
runner_kwargs = runner_kwargs ,
prompts = cur_case . prompts ,
sampling_params = cur_case . sampling_params ,
golden_answers = cur_case . golden_answers ,
)
2026-01-07 20:58:15 +08:00
2026-01-23 10:46:31 +08:00
@pytest.mark.parametrize ( " cur_case " , [ CASE_QWEN_EX , CASE_DS_EX ] )
2026-01-07 20:58:15 +08:00
def test_npugraph_ex_res_consistency ( cur_case : LLMTestCase , monkeypatch ) :
monkeypatch . delenv ( " HCCL_OP_EXPANSION_MODE " , raising = False )
runner_kwargs = {
" model_name " : cur_case . model ,
" quantization " : cur_case . quantization ,
" max_model_len " : 1024 ,
2026-02-24 15:50:00 +08:00
" compilation_config " : { " cudagraph_capture_sizes " : [ 4 , 8 , 32 , 64 ] , " cudagraph_mode " : " FULL_DECODE_ONLY " } ,
2026-03-02 17:54:25 +08:00
" additional_config " : { " ascend_compilation_config " : { " enable_npugraph_ex " : True } } ,
2026-01-07 20:58:15 +08:00
}
2026-02-24 15:50:00 +08:00
gen_and_valid (
runner_kwargs = runner_kwargs ,
prompts = cur_case . prompts ,
sampling_params = cur_case . sampling_params ,
golden_answers = cur_case . golden_answers ,
)
2026-01-30 16:24:48 +08:00
# The accuracy has already been verified in the previous test case.
# This test case is used to check whether the functionality works properly
# after enabling the static kernel and whether it is uninstalled as expected.
@pytest.mark.parametrize ( " cur_case " , [ CASE_QWEN_EX ] )
def test_npugraph_ex_with_static_kernel ( cur_case : LLMTestCase , monkeypatch ) :
monkeypatch . delenv ( " HCCL_OP_EXPANSION_MODE " , raising = False )
runner_kwargs = {
" model_name " : cur_case . model ,
" quantization " : cur_case . quantization ,
" max_model_len " : 1024 ,
2026-02-24 15:50:00 +08:00
" compilation_config " : { " cudagraph_capture_sizes " : [ 4 , 8 ] , " cudagraph_mode " : " FULL_DECODE_ONLY " } ,
2026-01-30 16:24:48 +08:00
" additional_config " : {
2026-03-02 17:54:25 +08:00
" ascend_compilation_config " : {
" enable_npugraph_ex " : True ,
2026-01-30 16:24:48 +08:00
" enable_static_kernel " : True ,
}
} ,
}
2026-02-24 15:50:00 +08:00
gen_and_valid (
runner_kwargs = runner_kwargs ,
prompts = cur_case . prompts ,
sampling_params = cur_case . sampling_params ,
golden_answers = cur_case . golden_answers ,
)
2026-01-30 16:24:48 +08:00
# Check whether the static kernel is properly uninstall
ascend_home_path = os . environ [ " ASCEND_HOME_PATH " ]
2026-02-24 15:50:00 +08:00
static_kernel_install_path = os . path . join ( ascend_home_path , " opp/static_kernel/ai_core " )
2026-01-30 16:24:48 +08:00
assert not os . path . exists ( static_kernel_install_path )