🚀 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圖像輸入) |