* Prepare for transformers v5 upgrade * fix hf cli * update for hf hub changes * fix tokenizer apply_chat_template args * remap include_tokens_per_second * fix tps * handle migration for warmup * use latest hf hub * Fix scan -> ls * fix import * fix for renaming of mistral common tokenizer -> backend * update for fixed tokenziation for llama * Skip phi35 tests for now * remove mistral patch fixed upstream in huggingface/transformers#41439 * use namespacing for patch * don't rely on sdist for e2e tests for now * run modal ci without waiting too * Fix dep for ci * fix imports * Fix fp8 check * fsdp2 fixes * fix version handling * update fsdp version tests for new v5 behavior * Fail multigpu tests after 3 failures * skip known v5 broken tests for now and cleanup * bump deps * unmark skipped test * re-enable test_fsdp_qlora_prequant_packed test * increase multigpu ci timeout * skip broken gemma3 test * reduce timout back to original 120min now that the hanging test is skipped * fix for un-necessary collator for pretraining with bsz=1 * fix: safe_serialization deprecated in transformers v5 rc01 (#3318) * torch_dtype deprecated * load model in float32 for consistency with tests * revert some test fixtures back * use hf cache ls instead of scan * don't strip fsdp_version more fdsp_Version fixes for v5 fix version in fsdp_config fix aliasing fix fsdp_version check check fsdp_version is 2 in both places * Transformers v5 rc2 (#3347) * bump dep * use latest fbgemm, grab model config as part of fixture, un-skip test * import AutoConfig * don't need more problematic autoconfig when specifying config.json manually * add fixtures for argilla ultrafeedback datasets * download phi4-reasoning * fix arg * update tests for phi fast tokenizer changes * use explicit model types for gemma3 --------- Co-authored-by: Wing Lian <wing@axolotl.ai> * fix: AutoModelForVision2Seq -> AutoModelForImageTextToText * chore: remove duplicate * fix: attempt fix gemma3 text mode * chore: lint * ga release of v5 * need property setter for name_or_path for mistral tokenizer * vllm not compatible with transformers v5 * setter for chat_template w mistral too --------- Co-authored-by: NanoCode012 <nano@axolotl.ai> Co-authored-by: salman <salman.mohammadi@outlook.com>
86 lines
3.3 KiB
Python
86 lines
3.3 KiB
Python
"""
|
|
Monkeypatch to fix inefficient tensor conversion in MistralCommonBackend.apply_chat_template
|
|
"""
|
|
|
|
import importlib
|
|
import inspect
|
|
|
|
from axolotl.monkeypatch.utils import detab_code
|
|
from axolotl.utils.logging import get_logger
|
|
|
|
LOG = get_logger(__name__)
|
|
|
|
|
|
def apply_mistral_tokenizer_image_patch():
|
|
"""Apply patch to MistralCommonBackend.apply_chat_template to fix image tensor conversion."""
|
|
from transformers.tokenization_mistral_common import MistralCommonBackend
|
|
|
|
# Get original source
|
|
original_source = inspect.getsource(MistralCommonBackend.apply_chat_template)
|
|
original_source, _ = detab_code(original_source)
|
|
|
|
# Define the replacement
|
|
original_tensor_conversion = (
|
|
" pixel_values = torch.tensor(images)"
|
|
)
|
|
|
|
patched_tensor_conversion = """ if isinstance(images, list) and len(images) > 0 and isinstance(images[0], np.ndarray):
|
|
pixel_values = torch.tensor(np.array(images))
|
|
else:
|
|
pixel_values = torch.tensor(images)"""
|
|
|
|
# Apply the replacement
|
|
if original_tensor_conversion in original_source:
|
|
patched_source = original_source.replace(
|
|
original_tensor_conversion, patched_tensor_conversion
|
|
)
|
|
patched_source = patched_source.replace(
|
|
"def apply_chat_template(",
|
|
"def patched_apply_chat_template(",
|
|
1,
|
|
)
|
|
|
|
# Load necessary imports from the module
|
|
module_name = MistralCommonBackend.__module__
|
|
module = importlib.import_module(module_name)
|
|
|
|
# Detect what needs to be imported
|
|
items_to_import = []
|
|
for item in dir(module):
|
|
if item in patched_source and not item.startswith("_"):
|
|
items_to_import.append(item)
|
|
|
|
# Execute imports in global scope
|
|
if items_to_import:
|
|
exec( # nosec B102
|
|
f"from {module_name} import ({', '.join(items_to_import)})",
|
|
globals(),
|
|
)
|
|
|
|
# Also need standard imports that might be used
|
|
exec("import numpy as np", globals()) # nosec B102
|
|
exec("import torch", globals()) # nosec B102
|
|
exec("from typing import Union, Optional, List, Dict, Any, Callable", globals()) # nosec B102
|
|
exec("from pathlib import Path", globals()) # nosec B102
|
|
|
|
# Import other dependencies that might be needed
|
|
try:
|
|
exec("from transformers.utils import is_torch_available", globals()) # nosec B102
|
|
exec(
|
|
"from transformers.tokenization_utils_base import BatchEncoding, PaddingStrategy, TensorType",
|
|
globals(),
|
|
) # nosec B102
|
|
exec("from transformers.utils import logging", globals()) # nosec B102
|
|
exec("logger = logging.get_logger(__name__)", globals()) # nosec B102
|
|
except ImportError as e:
|
|
LOG.warning(f"Could not import some dependencies: {e}")
|
|
|
|
# Execute the patched source
|
|
exec(patched_source, globals()) # nosec B102
|
|
|
|
# Replace the method
|
|
MistralCommonBackend.apply_chat_template = patched_apply_chat_template
|
|
LOG.info("Successfully applied MistralCommonBackend tensor conversion patch")
|
|
else:
|
|
LOG.warning("Could not find target code for MistralCommonBackend patching")
|