🚀 Molmo-7B-D-0924 4Bit量化
本项目是对Molmo-7B-D-0924模型进行4Bit量化,通过特定的量化策略,在降低模型大小和显存占用的同时,尽可能保证模型性能,适用于对显存要求较高的场景,如无服务器托管。
🚀 快速开始
运行代码示例
以下是如何运行量化后模型的示例代码:
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from PIL import Image
import requests
import torch
MODEL_PATH = "Scoolar/Molmo-7B-D-0924-NF4"
processor = AutoProcessor.from_pretrained(
MODEL_PATH,
trust_remote_code=True,
device_map='auto'
)
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH,
trust_remote_code=True,
device_map='auto',
)
inputs = processor.process(
images=[Image.open(requests.get("https://picsum.photos/id/237/536/354", stream=True).raw)],
text="Describe this image."
)
inputs = {k: v.to(model.device).unsqueeze(0) for k, v in inputs.items()}
with torch.autocast(device_type="cuda", enabled=True, dtype=torch.float16):
output = model.generate_from_batch(
inputs,
GenerationConfig(max_new_tokens=200, stop_strings="<|endoftext|>"),
tokenizer=processor.tokenizer
)
generated_tokens = output[0, inputs['input_ids'].size(1):]
generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True)
print(generated_text)
✨ 主要特性
- 量化策略:采用NF4量化,同时在关键模块保留FP16,避免性能下降。
- 显存占用小:相比全4位量化,对显存的影响相对较小,在推理时能有效减少显存使用。
- 加载速度快:模型加载速度比原始模型显著加快,适合无服务器托管。
- 适配性好:可以在12GB的GPU上运行,并且允许在T4(16GB)上进行批处理。
📦 安装指南
文档中未提及具体安装步骤,可参考transformers
库的官方安装指南进行安装。
💻 使用示例
基础用法
上述“快速开始”中的代码示例展示了如何使用量化后的模型对图像进行描述生成。
高级用法
文档中未提及高级用法示例。
📚 详细文档
模型转换为NF4的方法
为了将模型转换为NF4,你需要按照以下步骤操作:
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch
MODEL_PATH = "allenai/Molmo-7B-D-0924"
YOUR_OUTPUT_PATH = "enter_local_model_output_path"
DEFAULT_DTYPE = torch.float16
nf4_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=DEFAULT_DTYPE,
llm_int8_skip_modules=[
"model.vision_backbone", "model.transformer.ff_out", "model.transformer.ln_f"
]
)
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH,
trust_remote_code=True,
device_map='auto',
torch_dtype=DEFAULT_DTYPE,
quantization_config=nf4_config,
)
model.save_pretrained(
save_directory=YOUR_OUTPUT_PATH,
safe_serialization=True,
max_shard_size="4GB"
)
具体步骤如下:
- 加载具有所需数据类型/量化设置的权重。
- 再次保存模型,此过程将生成SafeTensor文件和一些配置文件。
- 所有缺失的文件可以从原始模型仓库复制,只需在
config.json
中删除文件路径。
- 应用的量化策略也可以在
config.json
(quantization_config)中查看。
模型转换细节
受SeanScripts/Molmo-72B-0924-nf4的启发,在转换模型时,对某些模块保留FP16,特别是vision_backbone
。因为vision_backbone
的参数相对较少,但在NF4量化时性能会显著下降。此外,还发现变压器输出层很关键,而变压器堆栈中的其他层归一化层影响不大。可以在model.safetensors.index.json
中轻松检查各层,或在modeling_molmo.py
中进行更详细的分析。
🔧 技术细节
量化策略
采用NF4量化,在大多数权重使用NF4的同时,在关键模块保留FP16,以避免性能下降。这种策略在降低显存占用的同时,尽可能保证模型的性能。
显存优化
通过合理选择量化模块和数据类型,减少了模型在加载和推理过程中的显存占用。例如,模型加载时占用约7GB显存,推理时最多占用约10GB(4K图像输入),相比原始模型的30GB有了显著的减少。
📄 许可证
本项目使用apache-2.0
许可证。
模型信息表格
属性 |
详情 |
模型类型 |
Molmo-7B-D-0924 4Bit量化模型 |
基础模型 |
AllenAI - Molmo-7B-D-0924 |
模型大小(磁盘) |
从30GB原始大小压缩至6.2GB |
显存使用 |
加载模型约7GB,推理时最多约10GB(4K图像输入) |