llm config_error ai_generated true

ValueError: You have to provide either 'max_length' or 'padding' and 'truncation' to use padding side 'left' with batch size > 1

ID: llm/huggingface-tokenizer-padding-side-mismatch

Also available as: JSON · Markdown · 中文
85%Fix Rate
88%Confidence
1Evidence
2023-08-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
transformers 4.30.0 active — — —
transformers 4.31.0 active — — —
transformers 4.35.0 active — — —
Python 3.9 active — — —
Python 3.10 active — — —
Python 3.11 active — — —

Root Cause

Hugging Face tokenizer requires explicit padding and truncation configuration when using left padding (common for decoder-only LLMs) in batched inference, otherwise it cannot determine the sequence length alignment.

generic

中文

Hugging Face分词器在使用左侧填充(解码器专用LLM常见设置)进行批量推理时,需要显式配置填充和截断参数,否则无法确定序列长度对齐方式。

Official Documentation

https://huggingface.co/docs/transformers/main/en/main_classes/tokenizer#transformers.PreTrainedTokenizer.__call__.padding

Workarounds

  1. 95% success Configure tokenizer with explicit padding=True, truncation=True, and max_length=model_max_length before tokenizing batched inputs: tokenizer = AutoTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf') tokenizer.pad_token = tokenizer.eos_token tokenizer.padding_side = 'left' encoded = tokenizer(texts, padding=True, truncation=True, max_length=512, return_tensors='pt')
    Configure tokenizer with explicit padding=True, truncation=True, and max_length=model_max_length before tokenizing batched inputs:
    
    tokenizer = AutoTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf')
    tokenizer.pad_token = tokenizer.eos_token
    tokenizer.padding_side = 'left'
    encoded = tokenizer(texts, padding=True, truncation=True, max_length=512, return_tensors='pt')
  2. 90% success Set tokenizer.pad_token_id explicitly and use DataCollatorWithPadding from transformers for dynamic batching: from transformers import DataCollatorWithPadding data_collator = DataCollatorWithPadding(tokenizer, padding='max_length', max_length=512)
    Set tokenizer.pad_token_id explicitly and use DataCollatorWithPadding from transformers for dynamic batching:
    
    from transformers import DataCollatorWithPadding
    data_collator = DataCollatorWithPadding(tokenizer, padding='max_length', max_length=512)

中文步骤

  1. 在分词前显式配置padding=True, truncation=True和max_length=model_max_length:
    
    tokenizer = AutoTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf')
    tokenizer.pad_token = tokenizer.eos_token
    tokenizer.padding_side = 'left'
    encoded = tokenizer(texts, padding=True, truncation=True, max_length=512, return_tensors='pt')
  2. 显式设置tokenizer.pad_token_id,并使用transformers的DataCollatorWithPadding进行动态批处理:
    
    from transformers import DataCollatorWithPadding
    data_collator = DataCollatorWithPadding(tokenizer, padding='max_length', max_length=512)

Dead Ends

Common approaches that don't work:

  1. 70% fail

    Decoder-only models (e.g., LLaMA, GPT) expect left padding for causal attention masking; right padding causes misalignment and incorrect generation.

  2. 50% fail

    Bypasses the error but prevents batching, leading to poor throughput and increased latency in production.