# Copyright (c) ModelScope Contributors. All rights reserved. import os import sys from transformers import PreTrainedModel from swift.template import TemplateType from swift.utils import get_device, git_clone_github from ..constant import LLMModelType, MLLMModelType from ..model_arch import ModelArch from ..model_meta import Model, ModelGroup, ModelMeta from ..register import ModelLoader, register_model class LlamaLoader(ModelLoader): def get_config(self, model_dir): config = super().get_config(model_dir) if getattr(config, 'pretraining_tp', 1) > 1: config.pretraining_tp = 1 return config register_model( ModelMeta( LLMModelType.llama, [ # llama2 ModelGroup( [ # base Model('modelscope/Llama-2-7b-ms', 'meta-llama/Llama-2-7b-hf'), Model('modelscope/Llama-2-13b-ms', 'meta-llama/Llama-2-13b-hf'), Model('modelscope/Llama-2-70b-ms', 'meta-llama/Llama-2-70b-hf'), # chat Model('modelscope/Llama-2-7b-chat-ms', 'meta-llama/Llama-2-7b-chat-hf'), Model('modelscope/Llama-2-13b-chat-ms', 'meta-llama/Llama-2-13b-chat-hf'), Model('modelscope/Llama-2-70b-chat-ms', 'meta-llama/Llama-2-70b-chat-hf'), ], TemplateType.llama, ignore_patterns=[r'.+\.bin$']), # chinese-llama2 ModelGroup( [ # base Model('AI-ModelScope/chinese-llama-2-1.3b', 'hfl/chinese-llama-2-1.3b'), Model('AI-ModelScope/chinese-llama-2-7b', 'hfl/chinese-llama-2-7b'), Model('AI-ModelScope/chinese-llama-2-7b-16k', 'hfl/chinese-llama-2-7b-16k'), Model('AI-ModelScope/chinese-llama-2-7b-64k', 'hfl/chinese-llama-2-7b-64k'), Model('AI-ModelScope/chinese-llama-2-13b', 'hfl/chinese-llama-2-13b'), Model('AI-ModelScope/chinese-llama-2-13b-16k', 'hfl/chinese-llama-2-13b-16k'), # chat Model('AI-ModelScope/chinese-alpaca-2-1.3b', 'hfl/chinese-alpaca-2-1.3b'), Model('AI-ModelScope/chinese-alpaca-2-7b', 'hfl/chinese-alpaca-2-7b'), Model('AI-ModelScope/chinese-alpaca-2-7b-16k', 'hfl/chinese-alpaca-2-7b-16k'), Model('AI-ModelScope/chinese-alpaca-2-7b-64k', 'hfl/chinese-alpaca-2-7b-64k'), Model('AI-ModelScope/chinese-alpaca-2-13b', 'hfl/chinese-alpaca-2-13b'), Model('AI-ModelScope/chinese-alpaca-2-13b-16k', 'hfl/chinese-alpaca-2-13b-16k'), ], TemplateType.llama), # base quant ModelGroup([ Model('AI-ModelScope/Llama-2-7b-AQLM-2Bit-1x16-hf', 'ISTA-DASLab/Llama-2-7b-AQLM-2Bit-1x16-hf'), ], TemplateType.llama, requires=['transformers>=4.38', 'aqlm', 'torch>=2.2.0']), ModelGroup([ Model('FlagAlpha/Atom-7B', 'FlagAlpha/Atom-7B'), Model('FlagAlpha/Atom-7B-Chat', 'FlagAlpha/Atom-7B-Chat'), ], template=TemplateType.atom), ModelGroup([ Model('langboat/Mengzi3-13B-Base', 'Langboat/Mengzi3-13B-Base'), ], template=TemplateType.mengzi), ModelGroup([ Model('AI-ModelScope/NuminaMath-7B-TIR', 'AI-MO/NuminaMath-7B-TIR'), ], template=TemplateType.numina, tags=['math']), ModelGroup([ Model('Fengshenbang/Ziya2-13B-Base', 'IDEA-CCNL/Ziya2-13B-Base'), Model('Fengshenbang/Ziya2-13B-Chat', 'IDEA-CCNL/Ziya2-13B-Chat'), ], template=TemplateType.ziya), ModelGroup([ Model('InfiniAI/Megrez-3b-Instruct', 'Infinigence/Megrez-3B-Instruct'), ], TemplateType.megrez), # deepseek ModelGroup([ Model('deepseek-ai/deepseek-llm-7b-base', 'deepseek-ai/deepseek-llm-7b-base'), Model('deepseek-ai/deepseek-llm-7b-chat', 'deepseek-ai/deepseek-llm-7b-chat'), Model('deepseek-ai/deepseek-llm-67b-base', 'deepseek-ai/deepseek-llm-67b-base'), Model('deepseek-ai/deepseek-llm-67b-chat', 'deepseek-ai/deepseek-llm-67b-chat'), ], TemplateType.deepseek), ModelGroup( [ Model('deepseek-ai/deepseek-math-7b-base', 'deepseek-ai/deepseek-math-7b-base'), Model('deepseek-ai/deepseek-math-7b-instruct', 'deepseek-ai/deepseek-math-7b-instruct'), Model('deepseek-ai/deepseek-math-7b-rl', 'deepseek-ai/deepseek-math-7b-rl'), ], TemplateType.deepseek, tags=['math'], ), ModelGroup( [ Model('deepseek-ai/deepseek-coder-1.3b-base', 'deepseek-ai/deepseek-coder-1.3b-base'), Model('deepseek-ai/deepseek-coder-1.3b-instruct', 'deepseek-ai/deepseek-coder-1.3b-instruct'), Model('deepseek-ai/deepseek-coder-6.7b-base', 'deepseek-ai/deepseek-coder-6.7b-base'), Model('deepseek-ai/deepseek-coder-6.7b-instruct', 'deepseek-ai/deepseek-coder-6.7b-instruct'), Model('deepseek-ai/deepseek-coder-33b-base', 'deepseek-ai/deepseek-coder-33b-base'), Model('deepseek-ai/deepseek-coder-33b-instruct', 'deepseek-ai/deepseek-coder-33b-instruct'), ], TemplateType.deepseek, tags=['coding'], ), # MiniMind2 ModelGroup( [ # MiniMind2 Model('gongjy/MiniMind2', 'jingyaogong/MiniMind2'), # MiniMind2-Small Model(None, 'jingyaogong/MiniMind2-Small'), ], TemplateType.minimind, requires=['transformers>=4.57.1']), # llama3 ModelGroup( [ # chat Model('LLM-Research/Meta-Llama-3-8B-Instruct', 'meta-llama/Meta-Llama-3-8B-Instruct'), Model('LLM-Research/Meta-Llama-3-70B-Instruct', 'meta-llama/Meta-Llama-3-70B-Instruct'), # base Model('LLM-Research/Meta-Llama-3-8B', 'meta-llama/Meta-Llama-3-8B'), Model('LLM-Research/Meta-Llama-3-70B', 'meta-llama/Meta-Llama-3-70B'), ], TemplateType.llama3), # llama3-quant ModelGroup([ Model('swift/Meta-Llama-3-8B-Instruct-GPTQ-Int4', 'study-hjt/Meta-Llama-3-8B-Instruct-GPTQ-Int4'), Model('swift/Meta-Llama-3-8B-Instruct-GPTQ-Int8', 'study-hjt/Meta-Llama-3-8B-Instruct-GPTQ-Int8'), Model('swift/Meta-Llama-3-8B-Instruct-AWQ', 'study-hjt/Meta-Llama-3-8B-Instruct-AWQ'), Model('swift/Meta-Llama-3-70B-Instruct-GPTQ-Int4', 'study-hjt/Meta-Llama-3-70B-Instruct-GPTQ-Int4'), Model('swift/Meta-Llama-3-70B-Instruct-GPTQ-Int8', 'study-hjt/Meta-Llama-3-70B-Instruct-GPTQ-Int8'), Model('swift/Meta-Llama-3-70B-Instruct-AWQ', 'study-hjt/Meta-Llama-3-70B-Instruct-AWQ'), ], TemplateType.llama3), # chinese-llama3 ModelGroup([ Model('ChineseAlpacaGroup/llama-3-chinese-8b-instruct', 'hfl/llama-3-chinese-8b-instruct'), Model('ChineseAlpacaGroup/llama-3-chinese-8b', 'hfl/llama-3-chinese-8b'), ], TemplateType.llama3), # llama3.1 ModelGroup( [ # chat Model('LLM-Research/Meta-Llama-3.1-8B-Instruct', 'meta-llama/Meta-Llama-3.1-8B-Instruct'), Model('LLM-Research/Meta-Llama-3.1-70B-Instruct', 'meta-llama/Meta-Llama-3.1-70B-Instruct'), Model('LLM-Research/Meta-Llama-3.1-405B-Instruct', 'meta-llama/Meta-Llama-3.1-405B-Instruct'), # base Model('LLM-Research/Meta-Llama-3.1-8B', 'meta-llama/Meta-Llama-3.1-8B'), Model('LLM-Research/Meta-Llama-3.1-70B', 'meta-llama/Meta-Llama-3.1-70B'), Model('LLM-Research/Meta-Llama-3.1-405B', 'meta-llama/Meta-Llama-3.1-405B'), # fp8 Model('LLM-Research/Meta-Llama-3.1-70B-Instruct-FP8', 'meta-llama/Meta-Llama-3.1-70B-Instruct-FP8'), Model('LLM-Research/Meta-Llama-3.1-405B-Instruct-FP8', 'meta-llama/Meta-Llama-3.1-405B-Instruct-FP8'), ], TemplateType.llama3_2, requires=['transformers>=4.43']), # llama3.1-quant ModelGroup( [ # bnb-nf4 Model('LLM-Research/Meta-Llama-3.1-8B-Instruct-BNB-NF4', 'hugging-quants/Meta-Llama-3.1-8B-Instruct-BNB-NF4'), Model('LLM-Research/Meta-Llama-3.1-70B-Instruct-bnb-4bit', 'unsloth/Meta-Llama-3.1-70B-Instruct-bnb-4bit'), Model('LLM-Research/Meta-Llama-3.1-405B-Instruct-BNB-NF4', 'hugging-quants/Meta-Llama-3.1-405B-Instruct-BNB-NF4'), # gptq-int4 Model('LLM-Research/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4', 'hugging-quants/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4'), Model('LLM-Research/Meta-Llama-3.1-70B-Instruct-GPTQ-INT4', 'hugging-quants/Meta-Llama-3.1-70B-Instruct-GPTQ-INT4'), Model('LLM-Research/Meta-Llama-3.1-405B-Instruct-GPTQ-INT4', 'hugging-quants/Meta-Llama-3.1-405B-Instruct-GPTQ-INT4'), # awq-int4 Model('LLM-Research/Meta-Llama-3.1-8B-Instruct-AWQ-INT4', 'hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4'), Model('LLM-Research/Meta-Llama-3.1-70B-Instruct-AWQ-INT4', 'hugging-quants/Meta-Llama-3.1-70B-Instruct-AWQ-INT4'), Model('LLM-Research/Meta-Llama-3.1-405B-Instruct-AWQ-INT4', 'hugging-quants/Meta-Llama-3.1-405B-Instruct-AWQ-INT4'), ], TemplateType.llama3_2, requires=['transformers>=4.43']), # nvidia Nemotron ModelGroup([ Model('AI-ModelScope/Llama-3.1-Nemotron-70B-Instruct-HF', 'nvidia/Llama-3.1-Nemotron-70B-Instruct-HF'), ], TemplateType.llama3_2, requires=['transformers>=4.43']), ModelGroup([ Model('AI-ModelScope/Skywork-o1-Open-Llama-3.1-8B', 'Skywork/Skywork-o1-Open-Llama-3.1-8B'), ], TemplateType.skywork_o1, requires=['transformers>=4.43']), ModelGroup([ Model('LLM-Research/Llama-3.2-1B', 'meta-llama/Llama-3.2-1B'), Model('LLM-Research/Llama-3.2-3B', 'meta-llama/Llama-3.2-3B'), Model('LLM-Research/Llama-3.2-1B-Instruct', 'meta-llama/Llama-3.2-1B-Instruct'), Model('LLM-Research/Llama-3.2-3B-Instruct', 'meta-llama/Llama-3.2-3B-Instruct'), ], template=TemplateType.llama3_2, requires=['transformers>=4.43']), ModelGroup([ Model('LLM-Research/Llama-3.3-70B-Instruct', 'meta-llama/Llama-3.3-70B-Instruct'), Model('unsloth/Llama-3.3-70B-Instruct-bnb-4bit', 'unsloth/Llama-3.3-70B-Instruct-bnb-4bit'), ], template=TemplateType.llama3_2, requires=['transformers>=4.43']), ModelGroup([ Model('ZhipuAI/LongWriter-llama3.1-8b', 'zai-org/LongWriter-llama3.1-8b'), ], TemplateType.longwriter_llama, requires=['transformers>=4.43']), ModelGroup([ Model('deepseek-ai/DeepSeek-R1-Distill-Llama-8B', 'deepseek-ai/DeepSeek-R1-Distill-Llama-8B'), Model('deepseek-ai/DeepSeek-R1-Distill-Llama-70B', 'deepseek-ai/DeepSeek-R1-Distill-Llama-70B'), ], TemplateType.deepseek_r1), # MiniCPM5 ModelGroup([ Model('OpenBMB/MiniCPM5-1B', 'openbmb/MiniCPM5-1B'), Model('OpenBMB/MiniCPM5-1B-Base', 'openbmb/MiniCPM5-1B-Base'), Model('OpenBMB/MiniCPM5-1B-SFT', 'openbmb/MiniCPM5-1B-SFT'), ], TemplateType.minicpm5, requires=['transformers>=5.6']), ModelGroup([ Model('LLM-Research/Reflection-Llama-3.1-70B', 'mattshumer/Reflection-Llama-3.1-70B'), ], TemplateType.reflection, requires=['transformers>=4.43']), ], LlamaLoader, model_arch=ModelArch.llama, architectures=['LlamaForCausalLM'], )) class Llama3_2VisionLoader(ModelLoader): def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel: from transformers import MllamaForConditionalGeneration self.auto_model_cls = self.auto_model_cls or MllamaForConditionalGeneration return super().get_model(model_dir, *args, **kwargs) register_model( ModelMeta( MLLMModelType.llama3_2_vision, [ ModelGroup([ Model('LLM-Research/Llama-3.2-11B-Vision-Instruct', 'meta-llama/Llama-3.2-11B-Vision-Instruct'), Model('LLM-Research/Llama-3.2-90B-Vision-Instruct', 'meta-llama/Llama-3.2-90B-Vision-Instruct'), Model('LLM-Research/Llama-3.2-11B-Vision', 'meta-llama/Llama-3.2-11B-Vision'), Model('LLM-Research/Llama-3.2-90B-Vision', 'meta-llama/Llama-3.2-90B-Vision'), ]) ], Llama3_2VisionLoader, template=TemplateType.llama3_2_vision, requires=['transformers>=4.45'], architectures=['MllamaForConditionalGeneration'], model_arch=ModelArch.llama3_2_vision, tags=['vision'], )) class Llama4Loader(ModelLoader): def get_model(self, model_dir: str, *args, **kwargs) -> PreTrainedModel: from transformers import Llama4ForConditionalGeneration self.auto_model_cls = self.auto_model_cls or Llama4ForConditionalGeneration return super().get_model(model_dir, *args, **kwargs) register_model( ModelMeta( MLLMModelType.llama4, [ ModelGroup([ Model('LLM-Research/Llama-4-Scout-17B-16E', 'meta-llama/Llama-4-Scout-17B-16E'), Model('LLM-Research/Llama-4-Maverick-17B-128E', 'meta-llama/Llama-4-Maverick-17B-128E'), Model('LLM-Research/Llama-4-Scout-17B-16E-Instruct', 'meta-llama/Llama-4-Scout-17B-16E-Instruct'), Model('LLM-Research/Llama-4-Maverick-17B-128E-Instruct-FP8', 'meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8'), Model('LLM-Research/Llama-4-Maverick-17B-128E-Instruct', 'meta-llama/Llama-4-Maverick-17B-128E-Instruct'), ]) ], Llama4Loader, template=TemplateType.llama4, requires=['transformers>=4.51'], model_arch=ModelArch.llama4, architectures=['Llama4ForConditionalGeneration'], tags=['vision'], )) class Llama3OmniLoader(ModelLoader): def get_model(self, model_dir: str, config, processor, model_kwargs) -> PreTrainedModel: local_repo_path = self.local_repo_path if not local_repo_path: local_repo_path = git_clone_github('https://github.com/ictnlp/LLaMA-Omni') sys.path.append(self.local_repo_path) import whisper from omni_speech.model import OmniSpeech2SLlamaForCausalLM, OmniSpeechLlamaForCausalLM config.speech_encoder = os.path.join(model_dir, 'large-v3.pt') if not os.path.exists(config.speech_encoder): whisper.load_model('large-v3', download_root=model_dir) self.auto_model_cls = self.auto_model_cls or OmniSpeech2SLlamaForCausalLM for key in ['forward', 'generate']: try: delattr(OmniSpeech2SLlamaForCausalLM, key) delattr(OmniSpeechLlamaForCausalLM, key) except AttributeError: pass # not support device_map='auto' device_map = model_kwargs['device_map'] model_kwargs['device_map'] = None model = super().get_model(model_dir, config, processor, model_kwargs) model.to(get_device() if device_map == 'auto' else device_map) return model register_model( ModelMeta( MLLMModelType.llama3_1_omni, [ModelGroup([ Model('ICTNLP/Llama-3.1-8B-Omni', 'ICTNLP/Llama-3.1-8B-Omni'), ], )], Llama3OmniLoader, template=TemplateType.llama3_1_omni, architectures=['OmniSpeech2SLlamaForCausalLM'], model_arch=ModelArch.llama3_1_omni, requires=['openai-whisper'], tags=['audio'], ))