fix: voxtralprocessor broken (#3255) [skip ci]
* fix: voxtralprocessor broken * chore: add todo * chore: wording
This commit is contained in:
@@ -124,6 +124,8 @@ Please make sure to install audio lib via `pip3 install librosa==0.11.0 'mistral
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
base_model: mistralai/Voxtral-Mini-3B-2507
|
base_model: mistralai/Voxtral-Mini-3B-2507
|
||||||
|
|
||||||
|
processor_type: VoxtralProcessor
|
||||||
```
|
```
|
||||||
|
|
||||||
### Gemma-3 {#sec-gemma-3}
|
### Gemma-3 {#sec-gemma-3}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
base_model: mistralai/Voxtral-Mini-3B-2507
|
base_model: mistralai/Voxtral-Mini-3B-2507
|
||||||
processor_type: AutoProcessor
|
processor_type: VoxtralProcessor
|
||||||
|
|
||||||
# Automatically upload checkpoint and final model to HF
|
# Automatically upload checkpoint and final model to HF
|
||||||
# hub_model_id: username/custom_model_name
|
# hub_model_id: username/custom_model_name
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
"""Processor loading functionality for multi-modal models"""
|
"""Processor loading functionality for multi-modal models"""
|
||||||
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
import transformers
|
import transformers
|
||||||
from transformers import (
|
from transformers import (
|
||||||
AutoProcessor,
|
AutoProcessor,
|
||||||
@@ -15,13 +13,33 @@ LOG = get_logger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
def load_processor(cfg: DictDefault, tokenizer: PreTrainedTokenizerBase):
|
def load_processor(cfg: DictDefault, tokenizer: PreTrainedTokenizerBase):
|
||||||
processor_kwargs: dict[str, Any] = {} # Do we actually need this?
|
|
||||||
|
|
||||||
processor_cls = AutoProcessor
|
processor_cls = AutoProcessor
|
||||||
if cfg.processor_type:
|
if cfg.processor_type:
|
||||||
processor_cls = getattr(transformers, cfg.processor_type)
|
processor_cls = getattr(transformers, cfg.processor_type)
|
||||||
|
|
||||||
if cfg.tokenizer_use_mistral_common:
|
if cfg.tokenizer_use_mistral_common:
|
||||||
|
|
||||||
|
def _patch_mistralcommontokenizer():
|
||||||
|
"""
|
||||||
|
Transformers v5 stops reading the sub-processor.
|
||||||
|
|
||||||
|
We need to patch this, so both processors use this.
|
||||||
|
"""
|
||||||
|
import transformers.tokenization_mistral_common as tokenization_mistral_common
|
||||||
|
|
||||||
|
from axolotl.utils.mistral import HFMistralTokenizer
|
||||||
|
|
||||||
|
tokenization_mistral_common.MistralCommonTokenizer = HFMistralTokenizer
|
||||||
|
|
||||||
|
_patch_mistralcommontokenizer()
|
||||||
|
|
||||||
|
from transformers import VoxtralProcessor
|
||||||
|
|
||||||
|
if processor_cls == VoxtralProcessor:
|
||||||
|
return VoxtralProcessor.from_pretrained(
|
||||||
|
cfg.processor_config,
|
||||||
|
)
|
||||||
|
|
||||||
from axolotl.utils.mistral import Mistral3Processor
|
from axolotl.utils.mistral import Mistral3Processor
|
||||||
|
|
||||||
return Mistral3Processor(
|
return Mistral3Processor(
|
||||||
@@ -32,7 +50,6 @@ def load_processor(cfg: DictDefault, tokenizer: PreTrainedTokenizerBase):
|
|||||||
cfg.processor_config,
|
cfg.processor_config,
|
||||||
trust_remote_code=cfg.trust_remote_code or False,
|
trust_remote_code=cfg.trust_remote_code or False,
|
||||||
tokenizer=tokenizer,
|
tokenizer=tokenizer,
|
||||||
**processor_kwargs,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Attempt to load image size from processor if available
|
# Attempt to load image size from processor if available
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ class Mistral3Processor(ProcessorMixin):
|
|||||||
Wraps HFMistralTokenizer and adds image processing capabilities.
|
Wraps HFMistralTokenizer and adds image processing capabilities.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# TODO(nano): This should be removed in transformers V5
|
||||||
attributes = ["tokenizer"]
|
attributes = ["tokenizer"]
|
||||||
tokenizer_class = "HFMistralTokenizer"
|
tokenizer_class = "HFMistralTokenizer"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user