|
|
--- |
|
|
license: apache-2.0 |
|
|
--- |
|
|
|
|
|
|
|
|
```py |
|
|
from transformers import AutoConfig, AutoModel, logging |
|
|
from transformers import AutoModel, AutoTokenizer |
|
|
import torch |
|
|
from PIL import Image |
|
|
import os |
|
|
|
|
|
logging.set_verbosity_error() # silence HF info spam |
|
|
|
|
|
MODEL_ID = "openbmb/MiniCPM-o-2_6" |
|
|
|
|
|
device = "cpu" |
|
|
cfg = AutoConfig.from_pretrained(MODEL_ID, trust_remote_code=True) |
|
|
|
|
|
cfg.hidden_size = 24 * 6 |
|
|
#cfg.hidden_size = 128 |
|
|
cfg.num_heads = 1 |
|
|
cfg.num_hidden_layers = 28 |
|
|
cfg.intermediate_size = 16 |
|
|
cfg.num_attention_heads=24 |
|
|
|
|
|
cfg.vision_config.hidden_size = 8 |
|
|
cfg.vision_config.num_hidden_layers = 1 |
|
|
cfg.vision_config.num_attention_heads = 1 |
|
|
cfg.vision_config.intermediate_size = 8 |
|
|
#cfg.vision_config.image_size = 100 |
|
|
|
|
|
cfg.audio_config.encoder_layers = 1 |
|
|
cfg.audio_config.decoder_layers = 1 |
|
|
cfg.audio_config.decoder_ffn_dim = 1024 |
|
|
#cfg.audio_config.d_model = 32 |
|
|
#cfg.audio_config.encoder_ffn_dim = 1024 |
|
|
#cfg.audio_config.use_bfloat16=True |
|
|
|
|
|
cfg.tts_config.llm_dim = 16 |
|
|
cfg.tts_config.hidden_size = 12 |
|
|
|
|
|
cfg.tts_config.llm_dim = 4 # keep small (interface with LM) |
|
|
cfg.tts_config.hidden_size = 8 # shrink internal TTS width |
|
|
cfg.tts_config.intermediate_size = 4 # shrink FFN |
|
|
cfg.tts_config.num_layers = 1 # minimum, keeps a single block |
|
|
cfg.tts_config.num_heads = 1 # avoid multi-head blowup |
|
|
cfg.tts_config.num_hidden_layers = 1 |
|
|
cfg.tts_config.num_mel_bins = 10 |
|
|
cfg.tts_config.num_attention_heads = 1 |
|
|
cfg.tts_config.num_text_tokens = 20 |
|
|
cfg.tts_config.num_audio_tokens = 10 |
|
|
#cfg.tts_config.use_bfloat16=True |
|
|
|
|
|
model = AutoModel.from_config(cfg, trust_remote_code=True) |
|
|
|
|
|
# cast to bfloat16 |
|
|
model = model.to(dtype=torch.bfloat16, device=device) |
|
|
|
|
|
print("Built tiny MiniCPM-o model on", device) |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True) |
|
|
|
|
|
output_dir = "./tiny-random-minicpmo-new-version" |
|
|
os.makedirs(output_dir, exist_ok=True) |
|
|
model.save_pretrained(output_dir, safe_serialization=True) |
|
|
tokenizer.save_pretrained(output_dir) |
|
|
model.processor.save_pretrained(output_dir) |
|
|
``` |