compile _resolve_spec_extras gather kernels (#26129)
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from typing import TYPE_CHECKING, Union
|
from typing import TYPE_CHECKING, Optional, Union
|
||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
@@ -33,6 +33,25 @@ def _assert_nonneg_and_invalidate(
|
|||||||
buf[indices] = -1
|
buf[indices] = -1
|
||||||
|
|
||||||
|
|
||||||
|
@torch.compile(dynamic=True)
|
||||||
|
def _gather_spec_extras(
|
||||||
|
indices: torch.Tensor,
|
||||||
|
topk_p_buf: torch.Tensor,
|
||||||
|
topk_index_buf: torch.Tensor,
|
||||||
|
output_tokens_buf: torch.Tensor,
|
||||||
|
hidden_states_buf: Optional[torch.Tensor],
|
||||||
|
):
|
||||||
|
"""Compiled gather of spec extras. `hidden_states_buf` is None when the
|
||||||
|
build does not capture hidden states."""
|
||||||
|
topk_p = topk_p_buf[indices]
|
||||||
|
topk_index = topk_index_buf[indices]
|
||||||
|
bonus_tokens = output_tokens_buf[indices]
|
||||||
|
hidden_states = (
|
||||||
|
hidden_states_buf[indices] if hidden_states_buf is not None else None
|
||||||
|
)
|
||||||
|
return topk_p, topk_index, bonus_tokens, hidden_states
|
||||||
|
|
||||||
|
|
||||||
def _resolve_future_token_ids_native(input_ids, future_token_ids_map):
|
def _resolve_future_token_ids_native(input_ids, future_token_ids_map):
|
||||||
input_ids[:] = torch.where(
|
input_ids[:] = torch.where(
|
||||||
input_ids < 0,
|
input_ids < 0,
|
||||||
@@ -135,15 +154,27 @@ class FutureMap:
|
|||||||
# FIXME: indices = batch.req_pool_indices, pinned 2 iters via
|
# FIXME: indices = batch.req_pool_indices, pinned 2 iters via
|
||||||
# record_batch_in_overlap; record_stream here is redundant.
|
# record_batch_in_overlap; record_stream here is redundant.
|
||||||
indices.record_stream(torch.get_device_module(self.device).current_stream())
|
indices.record_stream(torch.get_device_module(self.device).current_stream())
|
||||||
draft_input.topk_p = self.topk_p_buf[indices]
|
hidden_states_buf = (
|
||||||
draft_input.topk_index = self.topk_index_buf[indices]
|
self.hidden_states_buf if spec_need_hidden_states() else None
|
||||||
draft_input.bonus_tokens = self.output_tokens_buf[indices]
|
)
|
||||||
|
(
|
||||||
|
draft_input.topk_p,
|
||||||
|
draft_input.topk_index,
|
||||||
|
draft_input.bonus_tokens,
|
||||||
|
hidden_states,
|
||||||
|
) = _gather_spec_extras(
|
||||||
|
indices,
|
||||||
|
self.topk_p_buf,
|
||||||
|
self.topk_index_buf,
|
||||||
|
self.output_tokens_buf,
|
||||||
|
hidden_states_buf,
|
||||||
|
)
|
||||||
|
if hidden_states is not None:
|
||||||
|
draft_input.hidden_states = hidden_states
|
||||||
if _DEBUG_ASSERT:
|
if _DEBUG_ASSERT:
|
||||||
_assert_nonneg_and_invalidate(
|
_assert_nonneg_and_invalidate(
|
||||||
draft_input.bonus_tokens, self.output_tokens_buf, indices
|
draft_input.bonus_tokens, self.output_tokens_buf, indices
|
||||||
)
|
)
|
||||||
if spec_need_hidden_states():
|
|
||||||
draft_input.hidden_states = self.hidden_states_buf[indices]
|
|
||||||
|
|
||||||
def set_input_ids_sentinel(
|
def set_input_ids_sentinel(
|
||||||
self, batch: ScheduleBatch, future_indices: torch.Tensor
|
self, batch: ScheduleBatch, future_indices: torch.Tensor
|
||||||
|
|||||||
Reference in New Issue
Block a user