configuration_dots.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from typing import Any, Optional
  2. from transformers.configuration_utils import PretrainedConfig
  3. from transformers.models.qwen2 import Qwen2Config
  4. from transformers import Qwen2_5_VLProcessor, AutoProcessor
  5. from transformers.models.auto.configuration_auto import CONFIG_MAPPING
  6. class DotsVisionConfig(PretrainedConfig):
  7. model_type: str = "dots_vit"
  8. def __init__(
  9. self,
  10. embed_dim: int = 1536, # vision encoder embed size
  11. hidden_size: int = 1536, # after merger hidden size
  12. intermediate_size: int = 4224,
  13. num_hidden_layers: int = 42,
  14. num_attention_heads: int = 12,
  15. num_channels: int = 3,
  16. patch_size: int = 14,
  17. spatial_merge_size: int = 2,
  18. temporal_patch_size: int = 1,
  19. rms_norm_eps: float = 1e-5,
  20. use_bias: bool = False,
  21. attn_implementation="flash_attention_2", # "eager","sdpa","flash_attention_2"
  22. initializer_range=0.02,
  23. init_merger_std=0.02,
  24. is_causal=False, # ve causal forward
  25. post_norm=True,
  26. gradient_checkpointing=False,
  27. **kwargs: Any,
  28. ):
  29. super().__init__(**kwargs)
  30. self.embed_dim = embed_dim
  31. self.hidden_size = hidden_size
  32. self.intermediate_size = intermediate_size
  33. self.num_hidden_layers = num_hidden_layers
  34. self.num_attention_heads = num_attention_heads
  35. self.num_channels = num_channels
  36. self.patch_size = patch_size
  37. self.spatial_merge_size = spatial_merge_size
  38. self.temporal_patch_size = temporal_patch_size
  39. self.rms_norm_eps = rms_norm_eps
  40. self.use_bias = use_bias
  41. self.attn_implementation = attn_implementation
  42. self.initializer_range = initializer_range
  43. self.init_merger_std = init_merger_std
  44. self.is_causal = is_causal
  45. self.post_norm = post_norm
  46. self.gradient_checkpointing = gradient_checkpointing
  47. class DotsOCRConfig(Qwen2Config):
  48. model_type = "dots_ocr"
  49. def __init__(self,
  50. image_token_id = 151665,
  51. video_token_id = 151656,
  52. vision_config: Optional[dict] = None, *args, **kwargs):
  53. super().__init__(*args, **kwargs)
  54. self.image_token_id = image_token_id
  55. self.video_token_id = video_token_id
  56. self.vision_config = DotsVisionConfig(**(vision_config or {}))
  57. def save_pretrained(self, save_directory, **kwargs):
  58. self._auto_class = None
  59. super().save_pretrained(save_directory, **kwargs)
  60. class DotsVLProcessor(Qwen2_5_VLProcessor):
  61. def __init__(self, image_processor=None, tokenizer=None, chat_template=None, **kwargs):
  62. super().__init__(image_processor, tokenizer, chat_template=chat_template)
  63. self.image_token = "<|imgpad|>" if not hasattr(tokenizer, "image_token") else tokenizer.image_token
  64. AutoProcessor.register("dots_ocr", DotsVLProcessor)
  65. CONFIG_MAPPING.register("dots_ocr", DotsOCRConfig)