nano-prefill-inputs
nano-vllm/nanovllm/engine/model_runner.py · bb823b3 · L129–170 · 固定 commit 上游
这是固定版本源码的只读摘录;可在线阅读,也可通过上游链接查看原文件。
129 def prepare_prefill(self, seqs: list[Sequence]):
130 input_ids = []
131 positions = []
132 cu_seqlens_q = [0]
133 cu_seqlens_k = [0]
134 max_seqlen_q = 0
135 max_seqlen_k = 0
136 slot_mapping = []
137 block_tables = None
138 for seq in seqs:
139 start = seq.num_cached_tokens
140 seqlen_q = seq.num_scheduled_tokens
141 end = start + seqlen_q
142 seqlen_k = end
143 input_ids.extend(seq[start:end])
144 positions.extend(range(start, end))
145 cu_seqlens_q.append(cu_seqlens_q[-1] + seqlen_q)
146 cu_seqlens_k.append(cu_seqlens_k[-1] + seqlen_k)
147 max_seqlen_q = max(seqlen_q, max_seqlen_q)
148 max_seqlen_k = max(seqlen_k, max_seqlen_k)
149 if not seq.block_table: # warmup
150 continue
151 start_block = start // self.block_size
152 end_block = (end + self.block_size - 1) // self.block_size
153 for i in range(start_block, end_block):
154 slot_start = seq.block_table[i] * self.block_size
155 if i == start_block:
156 slot_start += start % self.block_size
157 if i != end_block - 1:
158 slot_end = seq.block_table[i] * self.block_size + self.block_size
159 else:
160 slot_end = seq.block_table[i] * self.block_size + end - i * self.block_size
161 slot_mapping.extend(range(slot_start, slot_end))
162 if cu_seqlens_k[-1] > cu_seqlens_q[-1]: # prefix cache
163 block_tables = self.prepare_block_tables(seqs)
164 input_ids = torch.tensor(input_ids, dtype=torch.int64, pin_memory=True).cuda(non_blocking=True)
165 positions = torch.tensor(positions, dtype=torch.int64, pin_memory=True).cuda(non_blocking=True)
166 cu_seqlens_q = torch.tensor(cu_seqlens_q, dtype=torch.int32, pin_memory=True).cuda(non_blocking=True)
167 cu_seqlens_k = torch.tensor(cu_seqlens_k, dtype=torch.int32, pin_memory=True).cuda(non_blocking=True)
168 slot_mapping = torch.tensor(slot_mapping, dtype=torch.int32, pin_memory=True).cuda(non_blocking=True)
169 set_context(True, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_k, slot_mapping, None, block_tables)
170 return input_ids, positions