From d19c768cb80abe48d3763b55cf4602a3b820cbe8 Mon Sep 17 00:00:00 2001 From: Nicolas Patry Date: Mon, 19 Feb 2024 15:23:12 +0100 Subject: [PATCH] Fix mistral with length > window_size for long prefills (rotary doesn't create long enough cos, sin). (#1571) # What does this PR do? Fixes # (issue) ## Before submitting - [ ] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case). - [ ] Did you read the [contributor guideline](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md#start-contributing-pull-requests), Pull Request section? - [ ] Was this discussed/approved via a Github issue or the [forum](https://discuss.huggingface.co/)? Please add a link to it if that's the case. - [ ] Did you make sure to update the documentation with your changes? Here are the [documentation guidelines](https://github.com/huggingface/transformers/tree/main/docs), and [here are tips on formatting docstrings](https://github.com/huggingface/transformers/tree/main/docs#writing-source-documentation). - [ ] Did you write any new necessary tests? ## Who can review? Anyone in the community is free to review the PR once the tests have passed. Feel free to tag members/contributors who may be interested in your PR. --- server/text_generation_server/models/flash_mistral.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/text_generation_server/models/flash_mistral.py b/server/text_generation_server/models/flash_mistral.py index 70669c8d..5df4e214 100644 --- a/server/text_generation_server/models/flash_mistral.py +++ b/server/text_generation_server/models/flash_mistral.py @@ -460,7 +460,10 @@ class BaseFlashMistral(FlashCausalLM): max_s = batch.max_seqlen lm_head_indices = batch.prefill_head_indices - if self.model.max_past is not None: + if cu_seqlen_prefill is None and self.model.max_past is not None: + # In decode, not prefill, we're actually overwriting the KV-cache + # in a circular buffer mode. + # This makes sure the max_s for the decode pass is correct. max_s = min(self.model.max_past, max_s) bs = input_ids.shape[0]