"ssh:/git@developer.sourcefind.cn:2222/OpenDAS/vllm_cscc.git" did not exist on "ee212918250ab5aa33a2968c027d71ffd6048ae4"
Commit 3bda0405 authored by zhuwenwen's avatar zhuwenwen
Browse files

[Bugfix] TypeError: ChatGLMTokenizer._pad() got an unexpected keyword argument 'padding_side'

parent 91577443
import os import os
import warnings import warnings
from pathlib import Path from pathlib import Path
from types import MethodType
from typing import Optional, Union from typing import Optional, Union
import huggingface_hub import huggingface_hub
...@@ -10,8 +11,7 @@ from transformers import (AutoTokenizer, PreTrainedTokenizer, ...@@ -10,8 +11,7 @@ from transformers import (AutoTokenizer, PreTrainedTokenizer,
from vllm.envs import VLLM_USE_MODELSCOPE from vllm.envs import VLLM_USE_MODELSCOPE
from vllm.logger import init_logger from vllm.logger import init_logger
from vllm.lora.request import LoRARequest from vllm.lora.request import LoRARequest
from vllm.transformers_utils.tokenizers import (BaichuanTokenizer, from vllm.transformers_utils.tokenizers import MistralTokenizer
MistralTokenizer)
from vllm.transformers_utils.utils import check_gguf_file from vllm.transformers_utils.utils import check_gguf_file
from vllm.utils import make_async from vllm.utils import make_async
...@@ -59,6 +59,26 @@ def get_cached_tokenizer(tokenizer: AnyTokenizer) -> AnyTokenizer: ...@@ -59,6 +59,26 @@ def get_cached_tokenizer(tokenizer: AnyTokenizer) -> AnyTokenizer:
return tokenizer return tokenizer
def patch_padding_side(tokenizer: PreTrainedTokenizer) -> None:
"""Patch _pad method to accept `padding_side` for older tokenizers."""
orig_pad = tokenizer._pad
def _pad(
self: PreTrainedTokenizer,
*args,
padding_side: Optional[str] = None,
**kwargs,
):
if padding_side is not None and padding_side != self.padding_side:
msg = ("`padding_side` argument is not supported by "
f"{type(tokenizer).__name__} and will be ignored.")
warnings.warn(msg, stacklevel=2)
return orig_pad(*args, **kwargs)
tokenizer._pad = MethodType(_pad, tokenizer)
def get_tokenizer( def get_tokenizer(
tokenizer_name: Union[str, Path], tokenizer_name: Union[str, Path],
*args, *args,
...@@ -138,19 +158,12 @@ def get_tokenizer( ...@@ -138,19 +158,12 @@ def get_tokenizer(
raise RuntimeError(err_msg) from e raise RuntimeError(err_msg) from e
else: else:
raise e raise e
except AttributeError as e:
if "BaichuanTokenizer" in str(e): # NOTE: We can remove this after https://github.com/THUDM/ChatGLM3/issues/1324
# This is for the error "'BaichuanTokenizer' object has no if type(tokenizer).__name__ in ("ChatGLMTokenizer",
# attribute 'sp_model'". "ChatGLM4Tokenizer"):
tokenizer = BaichuanTokenizer.from_pretrained( assert isinstance(tokenizer, PreTrainedTokenizer)
tokenizer_name, patch_padding_side(tokenizer)
*args,
trust_remote_code=trust_remote_code,
revision=revision,
**kwargs,
)
else:
raise e
if not isinstance(tokenizer, PreTrainedTokenizerFast): if not isinstance(tokenizer, PreTrainedTokenizerFast):
logger.warning( logger.warning(
...@@ -167,7 +180,7 @@ def get_lora_tokenizer(lora_request: LoRARequest, *args, ...@@ -167,7 +180,7 @@ def get_lora_tokenizer(lora_request: LoRARequest, *args,
return None return None
try: try:
tokenizer = get_tokenizer(lora_request.lora_path, *args, **kwargs) tokenizer = get_tokenizer(lora_request.lora_path, *args, **kwargs)
except OSError as e: except Exception as e:
# No tokenizer was found in the LoRA folder, # No tokenizer was found in the LoRA folder,
# use base model tokenizer # use base model tokenizer
logger.warning( logger.warning(
...@@ -177,4 +190,4 @@ def get_lora_tokenizer(lora_request: LoRARequest, *args, ...@@ -177,4 +190,4 @@ def get_lora_tokenizer(lora_request: LoRARequest, *args,
return tokenizer return tokenizer
get_lora_tokenizer_async = make_async(get_lora_tokenizer) get_lora_tokenizer_async = make_async(get_lora_tokenizer)
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment