Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 29 additions & 3 deletions dlinfer/framework/lmdeploy_ext/device/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
import importlib
import torch
from functools import lru_cache
from lmdeploy.pytorch.model_inputs import ModelInputs
from lmdeploy.pytorch.strategies.base.model_agent import ExtraInputs
from dlinfer.vendor import vendor_name

vendor = ["camb", "ascend"]
Expand Down Expand Up @@ -73,9 +75,24 @@ def patch_async_sampling_logits():
)

async def async_sampling_logits(
self, logits: torch.Tensor, sampling_inputs: SamplingInputs
self,
logits: torch.Tensor,
inputs: ModelInputs,
extra_inputs: ExtraInputs,
sampling_inputs: SamplingInputs,
):
"""Sampling logits."""
if self.spec_agent.is_enabled():
extra_inputs.target_logits = extra_inputs.target_logits.to(torch.float32)
extra_inputs = await self.spec_agent.async_sampling_logits(
inputs, extra_inputs, sampling_inputs
)
return (
extra_inputs.next_token_ids,
extra_inputs.logprobs,
extra_inputs.output_token_ids,
extra_inputs,
)
# record function does not support async function
# so we can not decorate it on async_sampling_logits
with record_function("sampling_logits"):
Expand All @@ -88,14 +105,18 @@ async def async_sampling_logits(
origin_logits = logits
logits, raw_logprobs = await logits_processor(origin_logits)
next_token_ids = logits_processor.sampling(logits)
await logits_processor.accept_guided_tokens(next_token_ids)
logprobs = logits_processor.compute_logprobs(raw_logprobs, next_token_ids)
if logprobs is not None:
logprobs = BatchedLogProbs(
vals=logprobs[0],
indices=logprobs[1],
)

return next_token_ids, logprobs
# post sampling
next_token_ids, extra_inputs = self.agent_strategy.post_sampling(
inputs, logits, next_token_ids, extra_inputs
)
return next_token_ids, logprobs, next_token_ids, extra_inputs

BaseModelAgent.async_sampling_logits = async_sampling_logits

Expand Down Expand Up @@ -608,6 +629,11 @@ def custom_prepare_inputs_for_generation(
pixel_values is not None or context.is_chunk_multimodal
)

# return input embeds for spec decoding
return_input_embeds = self.is_spec_decoding and (
pixel_values is not None or context.is_chunk_multimodal
)

# inputs of forward
return dict(
input_ids=input_ids,
Expand Down
Loading