parent
							
								
									d299f108d0
								
							
						
					
					
						commit
						7ed9538b9f
					
				
					 6 changed files with 384 additions and 8 deletions
				
			
		| 
						 | 
					@ -7,6 +7,7 @@ In this directory, you will find examples on how to load GGUF model into `bigdl-
 | 
				
			||||||
- [Mixtral-8x7B-v0.1-GGUF](https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF)
 | 
					- [Mixtral-8x7B-v0.1-GGUF](https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF)
 | 
				
			||||||
- [Baichuan2-7B-Chat-GGUF](https://huggingface.co/second-state/Baichuan2-7B-Chat-GGUF/tree/main)
 | 
					- [Baichuan2-7B-Chat-GGUF](https://huggingface.co/second-state/Baichuan2-7B-Chat-GGUF/tree/main)
 | 
				
			||||||
- [Bloomz-7b1-GGUF](https://huggingface.co/hzjane/bloomz-7b1-gguf)
 | 
					- [Bloomz-7b1-GGUF](https://huggingface.co/hzjane/bloomz-7b1-gguf)
 | 
				
			||||||
 | 
					- [mpt-7b-chat-gguf](https://huggingface.co/maddes8cht/mosaicml-mpt-7b-chat-gguf/tree/main)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Requirements
 | 
					## Requirements
 | 
				
			||||||
To run these examples with BigDL-LLM, we have some recommended requirements for your machine, please refer to [here](../../../README.md#system-support) for more information.
 | 
					To run these examples with BigDL-LLM, we have some recommended requirements for your machine, please refer to [here](../../../README.md#system-support) for more information.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ In this directory, you will find examples on how to load GGUF model into `bigdl-
 | 
				
			||||||
- [Mixtral-8x7B-v0.1-GGUF](https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF)
 | 
					- [Mixtral-8x7B-v0.1-GGUF](https://huggingface.co/TheBloke/Mixtral-8x7B-v0.1-GGUF)
 | 
				
			||||||
- [Baichuan2-7B-Chat-GGUF](https://huggingface.co/second-state/Baichuan2-7B-Chat-GGUF/tree/main)
 | 
					- [Baichuan2-7B-Chat-GGUF](https://huggingface.co/second-state/Baichuan2-7B-Chat-GGUF/tree/main)
 | 
				
			||||||
- [Bloomz-7b1-GGUF](https://huggingface.co/hzjane/bloomz-7b1-gguf)
 | 
					- [Bloomz-7b1-GGUF](https://huggingface.co/hzjane/bloomz-7b1-gguf)
 | 
				
			||||||
 | 
					- [mpt-7b-chat-gguf](https://huggingface.co/maddes8cht/mosaicml-mpt-7b-chat-gguf/tree/main)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Requirements
 | 
					## Requirements
 | 
				
			||||||
To run these examples with BigDL-LLM, we have some recommended requirements for your machine, please refer to [here](../../../README.md#system-support) for more information.
 | 
					To run these examples with BigDL-LLM, we have some recommended requirements for your machine, please refer to [here](../../../README.md#system-support) for more information.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -502,14 +502,15 @@ def _optimize_post(model, lightweight_bmm=False):
 | 
				
			||||||
                            chatglm_attention_forward
 | 
					                            chatglm_attention_forward
 | 
				
			||||||
                            )
 | 
					                            )
 | 
				
			||||||
    elif "mpt" in model.config.model_type:
 | 
					    elif "mpt" in model.config.model_type:
 | 
				
			||||||
        modeling_module_name = model.__class__.__module__
 | 
					        if model.config.architectures is not None:
 | 
				
			||||||
        attention_module_name = '.'.join(modeling_module_name.split('.')[:-1]) + ".attention"
 | 
					            modeling_module_name = model.__class__.__module__
 | 
				
			||||||
        module = importlib.import_module(attention_module_name)
 | 
					            attention_module_name = '.'.join(modeling_module_name.split('.')[:-1]) + ".attention"
 | 
				
			||||||
        from bigdl.llm.transformers.models.mpt import mpt_multihead_attention_forward
 | 
					            module = importlib.import_module(attention_module_name)
 | 
				
			||||||
        convert_forward(model,
 | 
					            from bigdl.llm.transformers.models.mpt import mpt_multihead_attention_forward
 | 
				
			||||||
                        module.MultiheadAttention,
 | 
					            convert_forward(model,
 | 
				
			||||||
                        mpt_multihead_attention_forward
 | 
					                            module.MultiheadAttention,
 | 
				
			||||||
                        )
 | 
					                            mpt_multihead_attention_forward
 | 
				
			||||||
 | 
					                            )
 | 
				
			||||||
    elif "gptj" in model.config.model_type:
 | 
					    elif "gptj" in model.config.model_type:
 | 
				
			||||||
        # dolly-v1-6b
 | 
					        # dolly-v1-6b
 | 
				
			||||||
        modeling_module_name = model.__class__.__module__
 | 
					        modeling_module_name = model.__class__.__module__
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,6 +57,9 @@ def load_gguf_model(fpath: str, dtype: torch.dtype = torch.float):
 | 
				
			||||||
        elif model_family == "bloom":
 | 
					        elif model_family == "bloom":
 | 
				
			||||||
            from .models.bloom import load_gguf_bloom
 | 
					            from .models.bloom import load_gguf_bloom
 | 
				
			||||||
            model, tokenizer = load_gguf_bloom(loader, dtype)
 | 
					            model, tokenizer = load_gguf_bloom(loader, dtype)
 | 
				
			||||||
 | 
					        elif model_family == "mpt":
 | 
				
			||||||
 | 
					            from .models.mpt import load_gguf_mpt
 | 
				
			||||||
 | 
					            model, tokenizer = load_gguf_mpt(loader, dtype)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            invalidInputError(False, f"Unsupported model family: {model_family}")
 | 
					            invalidInputError(False, f"Unsupported model family: {model_family}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,282 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    "version": "1.0",
 | 
				
			||||||
 | 
					    "truncation": null,
 | 
				
			||||||
 | 
					    "padding": null,
 | 
				
			||||||
 | 
					    "added_tokens": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 0,
 | 
				
			||||||
 | 
					            "content": "<|endoftext|>",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": false,
 | 
				
			||||||
 | 
					            "special": true
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 1,
 | 
				
			||||||
 | 
					            "content": "<|padding|>",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": false,
 | 
				
			||||||
 | 
					            "special": true
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50254,
 | 
				
			||||||
 | 
					            "content": "                        ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50255,
 | 
				
			||||||
 | 
					            "content": "                       ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50256,
 | 
				
			||||||
 | 
					            "content": "                      ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50257,
 | 
				
			||||||
 | 
					            "content": "                     ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50258,
 | 
				
			||||||
 | 
					            "content": "                    ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50259,
 | 
				
			||||||
 | 
					            "content": "                   ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50260,
 | 
				
			||||||
 | 
					            "content": "                  ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50261,
 | 
				
			||||||
 | 
					            "content": "                 ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50262,
 | 
				
			||||||
 | 
					            "content": "                ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50263,
 | 
				
			||||||
 | 
					            "content": "               ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50264,
 | 
				
			||||||
 | 
					            "content": "              ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50265,
 | 
				
			||||||
 | 
					            "content": "             ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50266,
 | 
				
			||||||
 | 
					            "content": "            ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50267,
 | 
				
			||||||
 | 
					            "content": "           ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50268,
 | 
				
			||||||
 | 
					            "content": "          ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50269,
 | 
				
			||||||
 | 
					            "content": "         ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50270,
 | 
				
			||||||
 | 
					            "content": "        ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50271,
 | 
				
			||||||
 | 
					            "content": "       ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50272,
 | 
				
			||||||
 | 
					            "content": "      ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50273,
 | 
				
			||||||
 | 
					            "content": "     ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50274,
 | 
				
			||||||
 | 
					            "content": "    ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50275,
 | 
				
			||||||
 | 
					            "content": "   ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50276,
 | 
				
			||||||
 | 
					            "content": "  ",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": true,
 | 
				
			||||||
 | 
					            "special": false
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50277,
 | 
				
			||||||
 | 
					            "content": "<|im_start|>",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": false,
 | 
				
			||||||
 | 
					            "special": true
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "id": 50278,
 | 
				
			||||||
 | 
					            "content": "<|im_end|>",
 | 
				
			||||||
 | 
					            "single_word": false,
 | 
				
			||||||
 | 
					            "lstrip": false,
 | 
				
			||||||
 | 
					            "rstrip": false,
 | 
				
			||||||
 | 
					            "normalized": false,
 | 
				
			||||||
 | 
					            "special": true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "normalizer": {
 | 
				
			||||||
 | 
					        "type": "NFC"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pre_tokenizer": {
 | 
				
			||||||
 | 
					        "type": "ByteLevel",
 | 
				
			||||||
 | 
					        "add_prefix_space": false,
 | 
				
			||||||
 | 
					        "trim_offsets": true,
 | 
				
			||||||
 | 
					        "use_regex": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "post_processor": {
 | 
				
			||||||
 | 
					        "type": "ByteLevel",
 | 
				
			||||||
 | 
					        "add_prefix_space": false,
 | 
				
			||||||
 | 
					        "trim_offsets": true,
 | 
				
			||||||
 | 
					        "use_regex": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "decoder": {
 | 
				
			||||||
 | 
					        "type": "ByteLevel",
 | 
				
			||||||
 | 
					        "add_prefix_space": false,
 | 
				
			||||||
 | 
					        "trim_offsets": true,
 | 
				
			||||||
 | 
					        "use_regex": true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "model": {
 | 
				
			||||||
 | 
					        "type": "BPE",
 | 
				
			||||||
 | 
					        "dropout": null,
 | 
				
			||||||
 | 
					        "unk_token": null,
 | 
				
			||||||
 | 
					        "continuing_subword_prefix": null,
 | 
				
			||||||
 | 
					        "end_of_word_suffix": null,
 | 
				
			||||||
 | 
					        "fuse_unk": false,
 | 
				
			||||||
 | 
					        "byte_fallback": false,
 | 
				
			||||||
 | 
					        "vocab": null,
 | 
				
			||||||
 | 
					        "merges": null
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										88
									
								
								python/llm/src/bigdl/llm/transformers/gguf/models/mpt.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								python/llm/src/bigdl/llm/transformers/gguf/models/mpt.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,88 @@
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright 2016 The BigDL Authors.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					# you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					# You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					# distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					# See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					# limitations under the License.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import torch
 | 
				
			||||||
 | 
					from accelerate import init_empty_weights
 | 
				
			||||||
 | 
					from accelerate.utils import set_module_tensor_to_device
 | 
				
			||||||
 | 
					from transformers import MptConfig, MptForCausalLM, GPTNeoXTokenizerFast
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from ..gguf import GGUFFileLoader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def load_gguf_mpt(loader: GGUFFileLoader, dtype: torch.dtype = torch.float):
 | 
				
			||||||
 | 
					    config = loader.config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mpt_config = MptConfig(
 | 
				
			||||||
 | 
					        vocab_size=len(config['tokenizer.ggml.tokens']),
 | 
				
			||||||
 | 
					        d_model=config['mpt.embedding_length'],
 | 
				
			||||||
 | 
					        n_layers=config['mpt.block_count'],
 | 
				
			||||||
 | 
					        n_heads=config['mpt.attention.head_count'],
 | 
				
			||||||
 | 
					        max_position_embeddings=config['mpt.context_length'],
 | 
				
			||||||
 | 
					        layer_norm_epsilon=config['mpt.attention.layer_norm_epsilon'],
 | 
				
			||||||
 | 
					        bos_token_id=config['tokenizer.ggml.bos_token_id'],
 | 
				
			||||||
 | 
					        eos_token_id=config['tokenizer.ggml.eos_token_id'],
 | 
				
			||||||
 | 
					        unknown_token_id=config['tokenizer.ggml.unknown_token_id'],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ckpt = loader.tensors(dtype)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    state_dict = {}
 | 
				
			||||||
 | 
					    state_dict['transformer.wte.weight'] = ckpt['token_embd.weight']
 | 
				
			||||||
 | 
					    state_dict['transformer.norm_f.weight'] = ckpt['output_norm.weight']
 | 
				
			||||||
 | 
					    state_dict['lm_head.weight'] = ckpt['output.weight']
 | 
				
			||||||
 | 
					    for i in range(config['mpt.block_count']):
 | 
				
			||||||
 | 
					        state_dict[f'transformer.blocks.{i}.attn.Wqkv.weight'] = \
 | 
				
			||||||
 | 
					            ckpt[f'blk.{i}.attn_qkv.weight']
 | 
				
			||||||
 | 
					        state_dict[f'transformer.blocks.{i}.attn.out_proj.weight'] = \
 | 
				
			||||||
 | 
					            ckpt[f'blk.{i}.attn_output.weight']
 | 
				
			||||||
 | 
					        state_dict[f'transformer.blocks.{i}.norm_2.weight'] = \
 | 
				
			||||||
 | 
					            ckpt[f'blk.{i}.ffn_norm.weight']
 | 
				
			||||||
 | 
					        state_dict[f'transformer.blocks.{i}.ffn.up_proj.weight'] = \
 | 
				
			||||||
 | 
					            ckpt[f'blk.{i}.ffn_up.weight']
 | 
				
			||||||
 | 
					        state_dict[f'transformer.blocks.{i}.ffn.down_proj.weight'] = \
 | 
				
			||||||
 | 
					            ckpt[f'blk.{i}.ffn_down.weight']
 | 
				
			||||||
 | 
					        state_dict[f'transformer.blocks.{i}.norm_1.weight'] = \
 | 
				
			||||||
 | 
					            ckpt[f'blk.{i}.attn_norm.weight']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with init_empty_weights():
 | 
				
			||||||
 | 
					        model = MptForCausalLM(mpt_config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for name, weight in state_dict.items():
 | 
				
			||||||
 | 
					        set_module_tensor_to_device(model, name, "cpu", weight, dtype=dtype)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    model = model.cpu()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pieces, merges = loader.tokenizer_pieces()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    current_directory = os.path.dirname(os.path.abspath(__file__))
 | 
				
			||||||
 | 
					    token_file = current_directory + "/model_implement/mpt/tokenizer.json"
 | 
				
			||||||
 | 
					    import json
 | 
				
			||||||
 | 
					    with open(token_file, 'r') as file:
 | 
				
			||||||
 | 
					        data = json.load(file)
 | 
				
			||||||
 | 
					    vocab = {}
 | 
				
			||||||
 | 
					    # load and replace vocab and merges
 | 
				
			||||||
 | 
					    for i in range(len(pieces)):
 | 
				
			||||||
 | 
					        token = pieces[i].piece
 | 
				
			||||||
 | 
					        score = int(pieces[i].score)
 | 
				
			||||||
 | 
					        vocab[token] = score
 | 
				
			||||||
 | 
					    data['model']['merges'] = merges
 | 
				
			||||||
 | 
					    data['model']['vocab'] = vocab
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with open(token_file, 'w') as file:
 | 
				
			||||||
 | 
					        json.dump(data, file, indent=4)
 | 
				
			||||||
 | 
					    tokenizer = GPTNeoXTokenizerFast(tokenizer_file=token_file)
 | 
				
			||||||
 | 
					    return model, tokenizer
 | 
				
			||||||
		Loading…
	
		Reference in a new issue