This commit is contained in:
@@ -0,0 +1,518 @@
|
||||
# Copyright (c) ModelScope Contributors. All rights reserved.
|
||||
import inspect
|
||||
import torch
|
||||
import transformers
|
||||
from packaging import version
|
||||
from transformers import AutoTokenizer, PretrainedConfig, PreTrainedModel, PreTrainedTokenizerBase
|
||||
from transformers.dynamic_module_utils import get_class_from_dynamic_module
|
||||
from transformers.models.auto.tokenization_auto import get_tokenizer_config
|
||||
from typing import Any, Dict, Type
|
||||
|
||||
from swift.template import TemplateType
|
||||
from swift.utils import Processor, get_device_count, get_dist_setting, get_logger, safe_snapshot_download
|
||||
from ..constant import LLMModelType, MLLMModelType
|
||||
from ..model_arch import ModelArch
|
||||
from ..model_meta import Model, ModelGroup, ModelMeta
|
||||
from ..patcher import patch_get_input_embeddings, patch_output_to_input_device
|
||||
from ..register import ModelLoader, register_model
|
||||
|
||||
logger = get_logger()
|
||||
|
||||
|
||||
def remove_property(tokenizer_cls: Type[PreTrainedTokenizerBase], tokenizer_config: Dict[str, Any]) -> None:
|
||||
for k, v in tokenizer_cls.__dict__.items():
|
||||
if k.endswith('_token') and isinstance(v, property) and k in tokenizer_config:
|
||||
setattr(tokenizer_cls, k, tokenizer_config[k])
|
||||
|
||||
|
||||
def _patch_tokenizer(tokenizer):
|
||||
tokenizer_cls = tokenizer.__class__
|
||||
if hasattr(tokenizer_cls, '_origin_pad'):
|
||||
return
|
||||
tokenizer_cls._origin_pad = tokenizer_cls._pad
|
||||
parameters = inspect.signature(tokenizer_cls._origin_pad).parameters
|
||||
|
||||
def _pad(self, *args, **kwargs):
|
||||
if 'padding_side' in kwargs and kwargs['padding_side'] is None and 'padding_side' not in parameters:
|
||||
kwargs.pop('padding_side')
|
||||
return tokenizer_cls._origin_pad(self, *args, **kwargs)
|
||||
|
||||
tokenizer_cls._pad = _pad
|
||||
|
||||
|
||||
class ChatGLMLoader(ModelLoader):
|
||||
|
||||
def get_model(self, model_dir: str, config, processor, model_kwargs) -> PreTrainedModel:
|
||||
if model_kwargs.get('quantization_config') is not None:
|
||||
model_kwargs['quantization_config'].llm_int8_skip_modules = ['output_layer']
|
||||
model = super().get_model(model_dir, config, processor, model_kwargs)
|
||||
from torch.nn import CrossEntropyLoss
|
||||
__old_forward = CrossEntropyLoss.forward
|
||||
|
||||
def cross_entropy_forward(self, inputs: torch.Tensor, target: torch.Tensor) -> torch.Tensor:
|
||||
target = target.to(device=inputs.device)
|
||||
return __old_forward(self, inputs, target)
|
||||
|
||||
CrossEntropyLoss.forward = cross_entropy_forward
|
||||
return model
|
||||
|
||||
def get_processor(self, model_dir: str, config: PretrainedConfig) -> Processor:
|
||||
# fix transformers>=4.34 bug
|
||||
if version.parse(transformers.__version__) >= version.parse('4.34'):
|
||||
tokenizer_config = get_tokenizer_config(model_dir)
|
||||
class_ref = tokenizer_config['auto_map']['AutoTokenizer'][0]
|
||||
tokenizer_cls: Type[PreTrainedTokenizerBase] = get_class_from_dynamic_module(class_ref, model_dir)
|
||||
tokenizer_cls._auto_class = 'AutoTokenizer'
|
||||
remove_property(tokenizer_cls, tokenizer_config)
|
||||
tokenizer = tokenizer_cls.from_pretrained(model_dir, trust_remote_code=True)
|
||||
else:
|
||||
tokenizer = super().get_processor(model_dir, config)
|
||||
_patch_tokenizer(tokenizer)
|
||||
return tokenizer
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.chatglm2, [
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/chatglm2-6b', 'zai-org/chatglm2-6b'),
|
||||
Model('ZhipuAI/chatglm2-6b-32k', 'zai-org/chatglm2-6b-32k')
|
||||
],
|
||||
requires=['transformers<4.42']),
|
||||
ModelGroup(
|
||||
[Model('ZhipuAI/codegeex2-6b', 'zai-org/codegeex2-6b')],
|
||||
requires=['transformers<4.34'],
|
||||
tags=['coding'],
|
||||
),
|
||||
],
|
||||
ChatGLMLoader,
|
||||
template=TemplateType.chatglm2,
|
||||
architectures=['ChatGLMModel', 'ChatGLMForConditionalGeneration'],
|
||||
model_arch=ModelArch.chatglm))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.chatglm3, [
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/chatglm3-6b', 'zai-org/chatglm3-6b'),
|
||||
Model('ZhipuAI/chatglm3-6b-base', 'zai-org/chatglm3-6b-base'),
|
||||
Model('ZhipuAI/chatglm3-6b-32k', 'zai-org/chatglm3-6b-32k'),
|
||||
Model('ZhipuAI/chatglm3-6b-128k', 'zai-org/chatglm3-6b-128k'),
|
||||
])
|
||||
],
|
||||
ChatGLMLoader,
|
||||
template=TemplateType.chatglm4,
|
||||
architectures=['ChatGLMModel', 'ChatGLMForConditionalGeneration'],
|
||||
requires=['transformers<4.42'],
|
||||
model_arch=ModelArch.chatglm))
|
||||
|
||||
|
||||
class ChatGLM4Loader(ChatGLMLoader):
|
||||
|
||||
def get_processor(self, model_dir: str, config: PretrainedConfig) -> Processor:
|
||||
tokenizer = super().get_processor(model_dir, config)
|
||||
if len(tokenizer.encode('<|user|>', add_special_tokens=False)) > 1:
|
||||
for k in tokenizer.special_tokens.keys():
|
||||
tokenizer.add_tokens(k)
|
||||
return tokenizer
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.chatglm4,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/glm-4-9b-chat', 'zai-org/glm-4-9b-chat'),
|
||||
Model('ZhipuAI/glm-4-9b', 'zai-org/glm-4-9b'),
|
||||
Model('ZhipuAI/glm-4-9b-chat-1m', 'zai-org/glm-4-9b-chat-1m'),
|
||||
]),
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/LongWriter-glm4-9b', 'zai-org/LongWriter-glm4-9b'),
|
||||
])
|
||||
],
|
||||
ChatGLM4Loader,
|
||||
template=TemplateType.chatglm4,
|
||||
architectures=['ChatGLMModel', 'ChatGLMForConditionalGeneration'],
|
||||
model_arch=ModelArch.chatglm,
|
||||
requires=['transformers>=4.42'],
|
||||
))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.glm4,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-4-9B-0414', 'zai-org/GLM-4-9B-0414'),
|
||||
Model('ZhipuAI/GLM-4-32B-0414', 'zai-org/GLM-4-32B-0414'),
|
||||
Model('ZhipuAI/GLM-4-32B-Base-0414', 'zai-org/GLM-4-32B-Base-0414'),
|
||||
Model('ZhipuAI/GLM-Z1-9B-0414', 'zai-org/GLM-Z1-9B-0414'),
|
||||
Model('ZhipuAI/GLM-Z1-32B-0414', 'zai-org/GLM-Z1-32B-0414'),
|
||||
], TemplateType.glm4),
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-Z1-Rumination-32B-0414', 'zai-org/GLM-Z1-Rumination-32B-0414'),
|
||||
], TemplateType.glm4_z1_rumination)
|
||||
],
|
||||
requires=['transformers>=4.51'],
|
||||
architectures=['Glm4ForCausalLM'],
|
||||
))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.codegeex4,
|
||||
[ModelGroup([
|
||||
Model('ZhipuAI/codegeex4-all-9b', 'zai-org/codegeex4-all-9b'),
|
||||
])],
|
||||
ChatGLM4Loader,
|
||||
template=TemplateType.codegeex4,
|
||||
requires=['transformers<4.42'],
|
||||
architectures=['ChatGLMModel', 'ChatGLMForConditionalGeneration'],
|
||||
model_arch=ModelArch.chatglm,
|
||||
tags=['coding'],
|
||||
))
|
||||
|
||||
|
||||
class ChatGLM4vLoader(ChatGLMLoader):
|
||||
|
||||
def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel:
|
||||
model = super().get_model(model_dir, *args, **kwargs)
|
||||
# fix device_map 4
|
||||
n_gpu = get_device_count()
|
||||
local_world_size = get_dist_setting()[3]
|
||||
if n_gpu // local_world_size >= 4:
|
||||
for layer in model.transformer.vision.transformer.layers:
|
||||
patch_output_to_input_device(layer.mlp)
|
||||
patch_output_to_input_device(layer.post_attention_layernorm)
|
||||
device = next(model.transformer.vision.linear_proj.parameters()).device
|
||||
model.transformer.vision.boi.data = model.transformer.vision.boi.to(device)
|
||||
model.transformer.vision.eoi.data = model.transformer.vision.eoi.to(device)
|
||||
return model
|
||||
|
||||
def get_processor(self, model_dir: str, config: PretrainedConfig) -> Processor:
|
||||
processor = super().get_processor(model_dir, config)
|
||||
processor.init_kwargs['image_size'] = 1120
|
||||
return processor
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.chatglm4v,
|
||||
[
|
||||
ModelGroup(
|
||||
[
|
||||
Model('ZhipuAI/glm-4v-9b', 'zai-org/glm-4v-9b'),
|
||||
],
|
||||
requires=['transformers>=4.42,<4.45'],
|
||||
),
|
||||
ModelGroup(
|
||||
[
|
||||
Model('ZhipuAI/cogagent-9b-20241220', 'zai-org/cogagent-9b-20241220'),
|
||||
],
|
||||
requires=['transformers>=4.42'],
|
||||
)
|
||||
],
|
||||
ChatGLM4vLoader,
|
||||
template=TemplateType.chatglm4v,
|
||||
architectures=['ChatGLMModel', 'ChatGLMForConditionalGeneration'],
|
||||
model_arch=ModelArch.chatglm4v,
|
||||
))
|
||||
|
||||
|
||||
class GLM4vLoader(ModelLoader):
|
||||
|
||||
def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel:
|
||||
from transformers import Glm4vForConditionalGeneration
|
||||
self.auto_model_cls = self.auto_model_cls or Glm4vForConditionalGeneration
|
||||
model = super().get_model(model_dir, *args, **kwargs)
|
||||
if hasattr(model, 'visual'):
|
||||
patch_get_input_embeddings(model.visual, 'patch_embed')
|
||||
return model
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.glm4v,
|
||||
[
|
||||
ModelGroup(
|
||||
[
|
||||
Model('ZhipuAI/GLM-4.1V-9B-Base', 'zai-org/GLM-4.1V-9B-Base'),
|
||||
Model('ZhipuAI/GLM-4.1V-9B-Thinking', 'zai-org/GLM-4.1V-9B-Thinking'),
|
||||
Model('ZhipuAI/AutoGLM-Phone-9B', 'zai-org/AutoGLM-Phone-9B')
|
||||
],
|
||||
template=TemplateType.glm4v,
|
||||
requires=['transformers>=4.53'],
|
||||
),
|
||||
ModelGroup(
|
||||
[
|
||||
Model('ZhipuAI/Glyph', 'zai-org/Glyph'),
|
||||
],
|
||||
template=TemplateType.glm4_5v,
|
||||
requires=['transformers>=4.57'],
|
||||
),
|
||||
ModelGroup(
|
||||
[
|
||||
Model('ZhipuAI/GLM-4.6V-Flash', 'zai-org/GLM-4.6V-Flash'),
|
||||
],
|
||||
template=TemplateType.glm4_5v,
|
||||
requires=['transformers>=5.0.0.dev'],
|
||||
),
|
||||
],
|
||||
GLM4vLoader,
|
||||
model_arch=ModelArch.glm4v,
|
||||
architectures=['Glm4vForConditionalGeneration'],
|
||||
))
|
||||
|
||||
|
||||
class CogVLMLoader(ModelLoader):
|
||||
|
||||
def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel:
|
||||
logger.warning('CogAgent with FusedLayerNorm will cause an training loss of NAN, '
|
||||
'to avoid this, please uninstall apex.')
|
||||
logger.info('Please ignore the unimported warning.')
|
||||
return super().get_model(model_dir, *args, **kwargs)
|
||||
|
||||
def get_processor(self, model_dir: str, config: PretrainedConfig) -> Processor:
|
||||
tokenizer_dir = safe_snapshot_download('AI-ModelScope/vicuna-7b-v1.5', download_model=False, check_local=True)
|
||||
tokenizer = AutoTokenizer.from_pretrained(tokenizer_dir, trust_remote_code=True)
|
||||
return tokenizer
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.cogvlm, [
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/cogvlm-chat', 'zai-org/cogvlm-chat-hf'),
|
||||
]),
|
||||
],
|
||||
CogVLMLoader,
|
||||
template=TemplateType.cogvlm,
|
||||
architectures=['CogVLMForCausalLM'],
|
||||
requires=['transformers<4.42'],
|
||||
model_arch=ModelArch.cogvlm))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.cogagent_chat, [
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/cogagent-chat', 'zai-org/cogagent-chat-hf'),
|
||||
]),
|
||||
],
|
||||
CogVLMLoader,
|
||||
template=TemplateType.cogagent_chat,
|
||||
architectures=['CogAgentForCausalLM'],
|
||||
requires=['transformers<4.42', 'timm'],
|
||||
model_arch=ModelArch.cogvlm))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.cogagent_vqa, [ModelGroup([
|
||||
Model('ZhipuAI/cogagent-vqa', 'zai-org/cogagent-vqa-hf'),
|
||||
])],
|
||||
CogVLMLoader,
|
||||
template=TemplateType.cogagent_vqa,
|
||||
architectures=['CogAgentForCausalLM'],
|
||||
requires=['transformers<4.42'],
|
||||
model_arch=ModelArch.cogvlm))
|
||||
|
||||
|
||||
class CogVLM2Loader(ModelLoader):
|
||||
|
||||
def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel:
|
||||
model = super().get_model(model_dir, *args, **kwargs)
|
||||
# fix device map 4
|
||||
for layer in model.model.vision.transformer.layers:
|
||||
patch_output_to_input_device(layer.mlp)
|
||||
patch_output_to_input_device(layer.post_attention_layernorm)
|
||||
|
||||
device = next(model.model.vision.linear_proj.parameters()).device
|
||||
model.model.vision.boi.data = model.model.vision.boi.to(device)
|
||||
model.model.vision.eoi.data = model.model.vision.eoi.to(device)
|
||||
return model
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.cogvlm2, [
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/cogvlm2-llama3-chat-19B', 'zai-org/cogvlm2-llama3-chat-19B'),
|
||||
Model('ZhipuAI/cogvlm2-llama3-chinese-chat-19B', 'zai-org/cogvlm2-llama3-chinese-chat-19B'),
|
||||
]),
|
||||
],
|
||||
CogVLM2Loader,
|
||||
template=TemplateType.cogvlm2,
|
||||
architectures=['CogVLMForCausalLM'],
|
||||
requires=['transformers<4.42'],
|
||||
model_arch=ModelArch.cogvlm))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.cogvlm2_video,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/cogvlm2-video-llama3-chat', 'zai-org/cogvlm2-video-llama3-chat'),
|
||||
]),
|
||||
],
|
||||
CogVLM2Loader,
|
||||
template=TemplateType.cogvlm2_video,
|
||||
architectures=['CogVLMVideoForCausalLM'],
|
||||
requires=['decord', 'pytorchvideo', 'transformers>=4.42'],
|
||||
model_arch=ModelArch.cogvlm,
|
||||
tags=['video'],
|
||||
))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.glm_edge,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/glm-edge-1.5b-chat', 'zai-org/glm-edge-1.5b-chat'),
|
||||
Model('ZhipuAI/glm-edge-4b-chat', 'zai-org/glm-edge-4b-chat'),
|
||||
]),
|
||||
],
|
||||
template=TemplateType.chatglm4,
|
||||
architectures=['GlmForCausalLM'],
|
||||
requires=['transformers>=4.46'],
|
||||
))
|
||||
|
||||
|
||||
class GLMEdgeVLoader(ModelLoader):
|
||||
|
||||
def get_processor(self, model_dir: str, config: PretrainedConfig) -> Processor:
|
||||
from transformers import AutoImageProcessor
|
||||
self.auto_tokenizer_cls = AutoImageProcessor
|
||||
return super().get_processor(model_dir, config)
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.glm_edge_v,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/glm-edge-v-2b', 'zai-org/glm-edge-v-2b'),
|
||||
Model('ZhipuAI/glm-edge-4b-chat', 'zai-org/glm-edge-4b-chat'),
|
||||
]),
|
||||
],
|
||||
GLMEdgeVLoader,
|
||||
template=TemplateType.glm_edge_v,
|
||||
architectures=['GlmForCausalLM'],
|
||||
requires=['transformers>=4.46'],
|
||||
model_arch=ModelArch.glm_edge_v,
|
||||
tags=['vision'],
|
||||
))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.glm4_moe,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-4.5-Air-Base', 'zai-org/GLM-4.5-Air-Base'),
|
||||
Model('ZhipuAI/GLM-4.5-Air', 'zai-org/GLM-4.5-Air'),
|
||||
Model('ZhipuAI/GLM-4.5-Air-FP8', 'zai-org/GLM-4.5-Air-FP8'),
|
||||
Model('ZhipuAI/GLM-4.5-Base', 'zai-org/GLM-4.5-Base'),
|
||||
Model('ZhipuAI/GLM-4.5', 'zai-org/GLM-4.5'),
|
||||
Model('ZhipuAI/GLM-4.5-FP8', 'zai-org/GLM-4.5-FP8'),
|
||||
], TemplateType.glm4_5),
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-4.6', 'zai-org/GLM-4.6'),
|
||||
Model('ZhipuAI/GLM-4.6-FP8', 'zai-org/GLM-4.6-FP8'),
|
||||
], TemplateType.glm4_5),
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-4.7', 'zai-org/GLM-4.7'),
|
||||
Model('ZhipuAI/GLM-4.7-FP8', 'zai-org/GLM-4.7-FP8'),
|
||||
], TemplateType.glm4_7),
|
||||
],
|
||||
requires=['transformers>=4.54'],
|
||||
architectures=['Glm4MoeForCausalLM'],
|
||||
))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.glm4_moe_lite,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-4.7-Flash', 'zai-org/GLM-4.7-Flash'),
|
||||
], TemplateType.glm4_7),
|
||||
],
|
||||
requires=['transformers>=5.0.0.dev'],
|
||||
architectures=['Glm4MoeLiteForCausalLM'],
|
||||
))
|
||||
|
||||
|
||||
class Glm4vMoeLoader(ModelLoader):
|
||||
|
||||
def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel:
|
||||
from transformers import Glm4vMoeForConditionalGeneration
|
||||
self.auto_model_cls = self.auto_model_cls or Glm4vMoeForConditionalGeneration
|
||||
model = super().get_model(model_dir, *args, **kwargs)
|
||||
patch_get_input_embeddings(model.visual, 'patch_embed')
|
||||
return model
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.glm4v_moe,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-4.5V', 'zai-org/GLM-4.5V'),
|
||||
Model('ZhipuAI/GLM-4.5V-FP8', 'zai-org/GLM-4.5V-FP8'),
|
||||
]),
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-4.6V', 'zai-org/GLM-4.6V'),
|
||||
Model('ZhipuAI/GLM-4.6V-FP8', 'zai-org/GLM-4.6V-FP8'),
|
||||
],
|
||||
requires=['transformers>=5.0.0.dev']),
|
||||
],
|
||||
Glm4vMoeLoader,
|
||||
template=TemplateType.glm4_5v,
|
||||
model_arch=ModelArch.glm4v,
|
||||
architectures=['Glm4vMoeForConditionalGeneration'],
|
||||
requires=['transformers>=4.56'],
|
||||
))
|
||||
|
||||
|
||||
class GLMOCRLoader(ModelLoader):
|
||||
|
||||
def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel:
|
||||
from transformers import AutoModelForImageTextToText
|
||||
self.auto_model_cls = self.auto_model_cls or AutoModelForImageTextToText
|
||||
model = super().get_model(model_dir, *args, **kwargs)
|
||||
if hasattr(model, 'visual'):
|
||||
patch_get_input_embeddings(model.visual, 'patch_embed')
|
||||
return model
|
||||
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
MLLMModelType.glm_ocr,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-OCR', 'zai-org/GLM-OCR'),
|
||||
]),
|
||||
],
|
||||
GLMOCRLoader,
|
||||
template=TemplateType.glm_ocr,
|
||||
model_arch=ModelArch.glm4v,
|
||||
architectures=['GlmOcrForConditionalGeneration'],
|
||||
requires=['transformers>=5.0.1dev0'],
|
||||
))
|
||||
|
||||
register_model(
|
||||
ModelMeta(
|
||||
LLMModelType.glm_moe_dsa,
|
||||
[
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-5', 'zai-org/GLM-5'),
|
||||
], template=TemplateType.glm4_7),
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-5.1', 'zai-org/GLM-5.1'),
|
||||
Model('ZhipuAI/GLM-5.1-FP8', 'ZhipuAI/GLM-5.1-FP8'),
|
||||
],
|
||||
template=TemplateType.glm5_1),
|
||||
ModelGroup([
|
||||
Model('ZhipuAI/GLM-5.2', 'ZhipuAI/GLM-5.2'),
|
||||
Model('ZhipuAI/GLM-5.2-FP8', 'ZhipuAI/GLM-5.2-FP8'),
|
||||
],
|
||||
template=TemplateType.glm5_2),
|
||||
],
|
||||
architectures=['GlmMoeDsaForCausalLM'],
|
||||
requires=['transformers>=5.2.0'],
|
||||
))
|
||||
Reference in New Issue
Block a user