| 70 | |
| 71 | |
| 72 | class LogprobsTensors(NamedTuple): |
| 73 | """ """ |
| 74 | |
| 75 | # [num_reqs, max_num_logprobs + 1] |
| 76 | logprob_token_ids: paddle.Tensor |
| 77 | # [num_reqs, max_num_logprobs + 1] |
| 78 | logprobs: paddle.Tensor |
| 79 | # [num_reqs] |
| 80 | selected_token_ranks: paddle.Tensor |
| 81 | |
| 82 | def tolists(self): |
| 83 | """Convert to lists.""" |
| 84 | return LogprobsLists( |
| 85 | self.logprob_token_ids.tolist(), |
| 86 | self.logprobs.tolist(), |
| 87 | self.selected_token_ranks.tolist(), |
| 88 | ) |
| 89 | |
| 90 | @staticmethod |
| 91 | def empty_cpu(num_positions: int, num_tokens_per_position: int) -> "LogprobsTensors": |
| 92 | """Create empty LogprobsTensors on CPU.""" |
| 93 | |
| 94 | logprob_token_ids = paddle.empty([num_positions, num_tokens_per_position], device="cpu", dtype=paddle.int64) |
| 95 | logprobs = paddle.empty_like(logprob_token_ids, device="cpu", dtype=paddle.float32) |
| 96 | selected_token_ranks = paddle.empty([num_positions], device="cpu", dtype=paddle.int64) |
| 97 | return LogprobsTensors( |
| 98 | logprob_token_ids=logprob_token_ids, |
| 99 | logprobs=logprobs, |
| 100 | selected_token_ranks=selected_token_ranks, |
| 101 | ) |
| 102 | |
| 103 | @staticmethod |
| 104 | def empty(num_positions: int, num_tokens_per_position: int) -> "LogprobsTensors": |
| 105 | """Create empty LogprobsTensors on default device.""" |
| 106 | |
| 107 | logprob_token_ids = paddle.empty([num_positions, num_tokens_per_position], dtype=paddle.int64) |
| 108 | logprobs = paddle.empty_like(logprob_token_ids, dtype=paddle.float32) |
| 109 | selected_token_ranks = paddle.empty([num_positions], dtype=paddle.int64) |
| 110 | return LogprobsTensors( |
| 111 | logprob_token_ids=logprob_token_ids, |
| 112 | logprobs=logprobs, |
| 113 | selected_token_ranks=selected_token_ranks, |
| 114 | ) |
| 115 | |
| 116 | def slice_rows(self, start: int, end: int): |
| 117 | """ |
| 118 | Slice rows. |
| 119 | Keeps the number of max_num_logprobs unchanged. |
| 120 | """ |
| 121 | with paddle.no_grad(): |
| 122 | return LogprobsTensors( |
| 123 | paddle.to_tensor(self.logprob_token_ids.cpu()[start:end], place="cpu"), |
| 124 | paddle.to_tensor(self.logprobs.cpu()[start:end], place="cpu"), |
| 125 | paddle.to_tensor(self.selected_token_ranks.cpu()[start:end], place="cpu"), |
| 126 | ) |
| 127 | |
| 128 | |
| 129 | PromptLogprobs = LogprobsTensors | list[dict[int, Logprob] | None] |
no outgoing calls