|
5 | 5 | import numpy as np |
6 | 6 | import torch |
7 | 7 |
|
| 8 | +from vllm.config.model import LogprobsMode |
8 | 9 | from vllm.sampling_params import SamplingParams |
9 | 10 | from vllm.triton_utils import tl, triton |
10 | 11 | from vllm.v1.outputs import LogprobsTensors |
11 | 12 | from vllm.v1.worker.gpu.input_batch import InputBatch |
12 | | -from vllm.v1.worker.gpu.sample.logprob import compute_topk_logprobs |
| 13 | +from vllm.v1.worker.gpu.sample.logprob import compute_topk_scores |
13 | 14 |
|
14 | 15 |
|
15 | 16 | class PromptLogprobsWorker: |
16 | | - def __init__(self, max_num_reqs: int): |
| 17 | + def __init__(self, max_num_reqs: int, logprobs_mode: LogprobsMode = "raw_logprobs"): |
17 | 18 | self.max_num_reqs = max_num_reqs |
| 19 | + self.logprobs_mode = logprobs_mode |
18 | 20 |
|
19 | 21 | self.uses_prompt_logprobs = np.zeros(self.max_num_reqs, dtype=bool) |
20 | 22 | self.num_prompt_logprobs = np.zeros(self.max_num_reqs, dtype=np.int32) |
@@ -82,6 +84,7 @@ def compute_prompt_logprobs( |
82 | 84 | hidden_states[: input_batch.num_tokens], |
83 | 85 | logits_fn, |
84 | 86 | max_num_prompt_logprobs, |
| 87 | + self.logprobs_mode, |
85 | 88 | ) |
86 | 89 | ) |
87 | 90 |
|
@@ -206,33 +209,36 @@ def compute_prompt_logprobs_with_chunking( |
206 | 209 | prompt_hidden_states: torch.Tensor, |
207 | 210 | logits_fn: Callable[[torch.Tensor], torch.Tensor], |
208 | 211 | num_prompt_logprobs: int, |
| 212 | + logprobs_mode: LogprobsMode = "raw_logprobs", |
209 | 213 | ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: |
210 | 214 | # Since materializing the full prompt logits can take too much memory, |
211 | 215 | # we compute it in chunks. |
212 | 216 | CHUNK_SIZE = 1024 |
213 | 217 | token_ids = [] |
214 | | - logprobs = [] |
| 218 | + scores = [] |
215 | 219 | ranks = [] |
| 220 | + logits_mode = logprobs_mode in ("raw_logits", "processed_logits") |
216 | 221 | prompt_token_ids = prompt_token_ids.to(torch.int64) |
217 | 222 | for start_idx in range(0, prompt_token_ids.shape[0], CHUNK_SIZE): |
218 | 223 | end_idx = start_idx + CHUNK_SIZE |
219 | 224 | # NOTE(woosuk): logits_fn can be slow because it involves all-gather. |
220 | 225 | prompt_logits = logits_fn(prompt_hidden_states[start_idx:end_idx]) |
221 | | - requested_num_prompt_logprobs = ( |
| 226 | + requested_num = ( |
222 | 227 | prompt_logits.shape[-1] |
223 | 228 | if num_prompt_logprobs == -1 |
224 | 229 | else num_prompt_logprobs |
225 | 230 | ) |
226 | | - prompt_logprobs = compute_topk_logprobs( |
| 231 | + result = compute_topk_scores( |
227 | 232 | prompt_logits, |
228 | | - requested_num_prompt_logprobs, |
| 233 | + requested_num, |
229 | 234 | prompt_token_ids[start_idx:end_idx], |
| 235 | + logits_mode=logits_mode, |
230 | 236 | ) |
231 | | - token_ids.append(prompt_logprobs.logprob_token_ids) |
232 | | - logprobs.append(prompt_logprobs.logprobs) |
233 | | - ranks.append(prompt_logprobs.selected_token_ranks) |
| 237 | + token_ids.append(result.logprob_token_ids) |
| 238 | + scores.append(result.logprobs) |
| 239 | + ranks.append(result.selected_token_ranks) |
234 | 240 |
|
235 | 241 | token_ids = torch.cat(token_ids, dim=0) if len(token_ids) > 1 else token_ids[0] |
236 | | - logprobs = torch.cat(logprobs, dim=0) if len(logprobs) > 1 else logprobs[0] |
| 242 | + scores = torch.cat(scores, dim=0) if len(scores) > 1 else scores[0] |
237 | 243 | ranks = torch.cat(ranks, dim=0) if len(ranks) > 1 else ranks[0] |
238 | | - return token_ids, logprobs, ranks |
| 244 | + return token_ids, scores, ranks |
0 commit comments