| """ |
| the script will use bitandbytes to quantize the MiniCPM-Llama3-V-2_5 model. |
| the be quantized model can be finetuned by MiniCPM-Llama3-V-2_5 or not. |
| you only need to set the model_path 、save_path and run bash code |
| |
| cd MiniCPM-V |
| python quantize/bnb_quantize.py |
| |
| you will get the quantized model in save_path、quantized_model test time and gpu usage |
| """ |
|
|
|
|
| import torch |
| from transformers import AutoModel, AutoTokenizer, BitsAndBytesConfig |
| from PIL import Image |
| import time |
| import torch |
| import GPUtil |
| import os |
|
|
| assert torch.cuda.is_available(),"CUDA is not available, but this code requires a GPU." |
|
|
| device = 'cuda' |
| model_path = '/root/ld/ld_model_pretrained/MiniCPM-Llama3-V-2_5' |
| save_path = '/root/ld/ld_model_pretrain/MiniCPM-Llama3-V-2_5_int4' |
| image_path = './assets/airplane.jpeg' |
|
|
|
|
| |
| quantization_config = BitsAndBytesConfig( |
| load_in_4bit=True, |
| load_in_8bit=False, |
| bnb_4bit_compute_dtype=torch.float16, |
| bnb_4bit_quant_storage=torch.uint8, |
| bnb_4bit_quant_type="nf4", |
| bnb_4bit_use_double_quant=True, |
| llm_int8_enable_fp32_cpu_offload=False, |
| llm_int8_has_fp16_weight=False, |
| llm_int8_skip_modules=["out_proj", "kv_proj", "lm_head"], |
| llm_int8_threshold=6.0 |
| ) |
|
|
| tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) |
| model = AutoModel.from_pretrained( |
| model_path, |
| device_map=device, |
| quantization_config=quantization_config, |
| trust_remote_code=True |
| ) |
|
|
| gpu_usage = GPUtil.getGPUs()[0].memoryUsed |
| start=time.time() |
| response = model.chat( |
| image=Image.open(image_path).convert("RGB"), |
| msgs=[ |
| { |
| "role": "user", |
| "content": "What is in this picture?" |
| } |
| ], |
| tokenizer=tokenizer |
| ) |
| print('Output after quantization:',response) |
| print('Inference time after quantization:',time.time()-start) |
| print(f"GPU memory usage after quantization: {round(gpu_usage/1024,2)}GB") |
|
|
| """ |
| Expected output: |
| |
| Output after quantization: This picture contains specific parts of an airplane, including wings, engines, and tail sections. These components are key parts of large commercial aircraft. |
| The wings support lift during flight, while the engines provide thrust to move the plane forward. The tail section is typically used for stabilizing flight and plays a role in airline branding. |
| The design and color of the airplane indicate that it belongs to Air China, likely a passenger aircraft due to its large size and twin-engine configuration. |
| There are no markings or insignia on the airplane indicating the specific model or registration number; such information may require additional context or a clearer perspective to discern. |
| Inference time after quantization: 8.583992719650269 seconds |
| GPU memory usage after quantization: 6.41 GB |
| """ |
|
|
| |
| os.makedirs(save_path, exist_ok=True) |
| model.save_pretrained(save_path, safe_serialization=True) |
| tokenizer.save_pretrained(save_path) |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|