Skip to content

Commit 1048ebe

Browse files
♻️ refactor tests as per review comment
Signed-off-by: Prashant Gupta <[email protected]>
1 parent 56ac3a6 commit 1048ebe

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

tests/lora/conftest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ def sql_lora_files(sql_lora_huggingface_id):
168168

169169
@pytest.fixture(scope="session")
170170
def mixtral_lora_files():
171+
# Note: this module has incorrect adapter_config.json to test
172+
# https://github.com/vllm-project/vllm/pull/5909/files.
173+
return snapshot_download(repo_id="SangBinCho/mixtral-lora")
174+
175+
176+
@pytest.fixture(scope="session")
177+
def mixtral_lora_files_all_target_modules():
171178
return snapshot_download(repo_id="dyang415/mixtral-lora-v0")
172179

173180

tests/lora/test_mixtral.py

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,9 @@
99
MODEL_PATH = "mistralai/Mixtral-8x7B-Instruct-v0.1"
1010

1111

12-
def do_sample(llm: vllm.LLM, lora_path: str, lora_id: int) -> List[str]:
13-
prompts = [
14-
"Question: What happens if you touch the eyes of a blind man?\nChoices:\nB: The man's sight will be restored.\nA: Nothing happens if you touch the eyes of a blind man.\nC: The man will get his eyesight back.\nD: The man will no longer be blind.\nAnswer:", # noqa: E501
15-
"Question: Which will increase the energy of motion of water molecules?\nChoices:\nA: add heat\nB: add ice\nC: remove some of the water\nD: place the water in the freezer\nAnswer:", # noqa: E501
16-
"Since Craig threw aluminum cans in the trash and Benjamin recycled, _ was environmentally irresponsible.\nChoices:\n1: Craig\n2: Benjamin\nAnswer:", # noqa: E501
17-
]
12+
def do_sample(llm: vllm.LLM, lora_path: str, lora_id: int,
13+
prompts: List[str]) -> List[str]:
14+
1815
sampling_params = vllm.SamplingParams(temperature=0, max_tokens=256)
1916
outputs = llm.generate(
2017
prompts,
@@ -33,9 +30,50 @@ def do_sample(llm: vllm.LLM, lora_path: str, lora_id: int) -> List[str]:
3330

3431
@pytest.mark.parametrize("tp_size", [4])
3532
def test_mixtral_lora(mixtral_lora_files, tp_size):
33+
"""Original test, the LoRA model has the common target modules, not all"""
3634
if torch.cuda.device_count() < tp_size:
3735
pytest.skip(f"Not enough GPUs for tensor parallelism {tp_size}")
3836

37+
prompts = [
38+
"[system] Given a target sentence construct the underlying meaning representation\nof the input sentence as a single function with attributes and attribute\nvalues. This function should describe the target string accurately and the\nfunction must be one of the following ['inform', 'request', 'give_opinion',\n'confirm', 'verify_attribute', 'suggest', 'request_explanation',\n'recommend', 'request_attribute'].\n\nThe attributes must be one of the following:\n['name', 'exp_release_date', 'release_year', 'developer', 'esrb', 'rating',\n'genres', 'player_perspective', 'has_multiplayer', 'platforms',\n'available_on_steam', 'has_linux_release', 'has_mac_release', 'specifier'] [/system] [user] Here is the target sentence:\nSpellForce 3 is a pretty bad game. The developer Grimlore Games is clearly a bunch of no-talent hacks, and 2017 was a terrible year for games anyway. [/user] [assistant]", # noqa: E501
39+
"[system] Given a target sentence construct the underlying meaning representation\nof the input sentence as a single function with attributes and attribute\nvalues. This function should describe the target string accurately and the\nfunction must be one of the following ['inform', 'request', 'give_opinion',\n'confirm', 'verify_attribute', 'suggest', 'request_explanation',\n'recommend', 'request_attribute'].\n\nThe attributes must be one of the following:\n['name', 'exp_release_date', 'release_year', 'developer', 'esrb', 'rating',\n'genres', 'player_perspective', 'has_multiplayer', 'platforms',\n'available_on_steam', 'has_linux_release', 'has_mac_release', 'specifier'] [/system] [user] Here is the target sentence:\nI wanted to like Grimlore Games' 2017 entry, but in SpellForce 3 they just didn't get anything right. [/user] [assistant]", # noqa: E501
40+
"[system] Given a target sentence construct the underlying meaning representation\nof the input sentence as a single function with attributes and attribute\nvalues. This function should describe the target string accurately and the\nfunction must be one of the following ['inform', 'request', 'give_opinion',\n'confirm', 'verify_attribute', 'suggest', 'request_explanation',\n'recommend', 'request_attribute'].\n\nThe attributes must be one of the following:\n['name', 'exp_release_date', 'release_year', 'developer', 'esrb', 'rating',\n'genres', 'player_perspective', 'has_multiplayer', 'platforms',\n'available_on_steam', 'has_linux_release', 'has_mac_release', 'specifier'] [/system] [user] Here is the target sentence:\nBioShock is a good role-playing, action-adventure, shooter that released for PlayStation, Xbox, and PC in 2007. It is available on Steam, and it has a Mac release but not a Linux release. [/user] [assistant]", # noqa: E501
41+
]
42+
43+
llm = vllm.LLM(
44+
MODEL_PATH,
45+
enable_lora=True,
46+
max_num_seqs=16,
47+
max_loras=4,
48+
distributed_executor_backend="ray",
49+
tensor_parallel_size=tp_size,
50+
)
51+
52+
expected_lora_output = [
53+
"give_opinion(name[SpellForce 3], release_year[2017], developer[Grimlore Games], rating[poor])", # noqa: E501
54+
"give_opinion(name[SpellForce 3], developer[Grimlore Games], release_year[2017], rating[poor])", # noqa: E501
55+
"inform(name[BioShock], release_year[2007], rating[good], genres[action-adventure, role-playing, shooter], platforms[PlayStation, Xbox, PC], available_on_steam[yes], has_linux_release[no], has_mac_release[yes])", # noqa: E501
56+
]
57+
assert do_sample(llm, mixtral_lora_files, lora_id=1,
58+
prompts=prompts) == expected_lora_output
59+
assert do_sample(llm, mixtral_lora_files, lora_id=2,
60+
prompts=prompts) == expected_lora_output
61+
62+
63+
@pytest.mark.parametrize("tp_size", [4])
64+
def test_mixtral_lora_all_target_modules(mixtral_lora_files_all_target_modules,
65+
tp_size):
66+
"""This LoRA model has all supported Mixtral target modules"""
67+
68+
if torch.cuda.device_count() < tp_size:
69+
pytest.skip(f"Not enough GPUs for tensor parallelism {tp_size}")
70+
71+
prompts = [
72+
"Question: What happens if you touch the eyes of a blind man?\nChoices:\nB: The man's sight will be restored.\nA: Nothing happens if you touch the eyes of a blind man.\nC: The man will get his eyesight back.\nD: The man will no longer be blind.\nAnswer:", # noqa: E501
73+
"Question: Which will increase the energy of motion of water molecules?\nChoices:\nA: add heat\nB: add ice\nC: remove some of the water\nD: place the water in the freezer\nAnswer:", # noqa: E501
74+
"Since Craig threw aluminum cans in the trash and Benjamin recycled, _ was environmentally irresponsible.\nChoices:\n1: Craig\n2: Benjamin\nAnswer:", # noqa: E501
75+
]
76+
3977
llm = vllm.LLM(
4078
MODEL_PATH,
4179
enable_lora=True,
@@ -52,7 +90,11 @@ def test_mixtral_lora(mixtral_lora_files, tp_size):
5290
"1: Craig",
5391
]
5492

55-
assert do_sample(llm, mixtral_lora_files,
56-
lora_id=1) == expected_lora_output
57-
assert do_sample(llm, mixtral_lora_files,
58-
lora_id=2) == expected_lora_output
93+
assert do_sample(llm,
94+
mixtral_lora_files_all_target_modules,
95+
lora_id=1,
96+
prompts=prompts) == expected_lora_output
97+
assert do_sample(llm,
98+
mixtral_lora_files_all_target_modules,
99+
lora_id=2,
100+
prompts=prompts) == expected_lora_output

0 commit comments

Comments
 (0)