You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Transformers正确加载Hugging Face的4-bit量化Ovis1.6-Gemma VLM模型?

问题描述

作为量化技术和视觉语言模型(VLM)新手,尝试用transformers库加载4-bit量化版Ovis1.6-Gemma模型,使用代码如下:

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

# Define the quantization configuration
kwargs = {
    "quantization_config": BitsAndBytesConfig(
        load_in_4bit=True,
        load_in_8bit=False,
        bnb_4bit_compute_dtype="float32",
        bnb_4bit_quant_storage="uint8",
        bnb_4bit_quant_type="fp4",
        bnb_4bit_use_double_quant=False,
        llm_int8_enable_fp32_cpu_offload=False,
        llm_int8_has_fp16_weight=False,
        llm_int8_skip_modules=None,
        llm_int8_threshold=6.0
    )
}

model = AutoModelForCausalLM.from_pretrained(
    "ThetaCursed/Ovis1.6-Gemma2-9B-bnb-4bit",
    trust_remote_code=True,
    **kwargs
).cuda()

运行后出现警告:

warnings.warn(_BETA_TRANSFORMS_WARNING)
Unused kwargs: ['_load_in_4bit', '_load_in_8bit', 'quant_method'].
Loading checkpoint shards: 100%|██████████| 2/2 [00:06<00:00,  3.06s/it]
You shouldn't move a model that is dispatched using accelerate hooks.

尝试获取tokenizer时执行以下代码:

text_tokenizer = model.get_text_tokenizer()
visual_tokenizer = model.get_visual_tokenizer()

触发错误:

AttributeError: 'NoneType' object has no attribute 'get_text_tokenizer'
解决方案

一、消除模型加载警告

问题根源

  1. 配置中包含了与4-bit量化无关的llm_int8系列参数,这类参数属于8-bit量化专属配置,加载预量化4-bit模型时会被判定为无效参数,触发Unused kwargs警告。
  2. 手动调用.cuda()会与accelerate的自动设备调度机制冲突,触发模型移动相关警告。

修改后的加载代码

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

# 仅保留4-bit量化必要配置参数
kwargs = {
    "quantization_config": BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_compute_dtype="float32",
        bnb_4bit_quant_type="fp4",
        bnb_4bit_use_double_quant=False
    ),
    "device_map": "auto"  # 由accelerate自动分配设备,替代手动.cuda()
}

model = AutoModelForCausalLM.from_pretrained(
    "ThetaCursed/Ovis1.6-Gemma2-9B-bnb-4bit",
    trust_remote_code=True,
    **kwargs
)

二、解决Tokenizer获取错误

问题根源

get_text_tokenizer()并非transformers模型的标准方法,模型实例本身不会内置tokenizer对象,需通过专用工具类单独加载。对于VLM,文本tokenizer和视觉tokenizer(图像处理器)需分开加载。

正确加载方式

from transformers import AutoTokenizer, AutoImageProcessor

# 加载文本tokenizer
text_tokenizer = AutoTokenizer.from_pretrained("ThetaCursed/Ovis1.6-Gemma2-9B-bnb-4bit")
# 加载视觉tokenizer(图像预处理工具)
visual_tokenizer = AutoImageProcessor.from_pretrained("ThetaCursed/Ovis1.6-Gemma2-9B-bnb-4bit")

内容的提问来源于stack exchange,提问作者meysam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:13:16