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