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

Llama-3微调模型部署SageMaker遇.half()量化模型不支持错误求助

Llama-3 8B 量化模型SageMaker部署错误解决方案

问题描述

微调Llama-3 8B模型后,使用DeepSpeed镜像在AWS SageMaker部署时触发以下错误:

.half() is not supported for quantized model. Please use the model as it is, since the model has already been casted to the correct dtype.

错误栈核心逻辑:

deepspeed.inference.engine.py -> _convert_to_dtype -> model.half() -> transformers.modeling_utils.py -> ValueError

根因:模型已通过BitsAndBytesConfig加载为4bit量化模型,DeepSpeed初始化时指定dtype=model.dtype(即float16),导致DeepSpeed尝试对量化模型执行.half()类型转换,而量化模型不支持该操作。

解决方案

1. 移除DeepSpeed初始化中的dtype参数

修改get_model函数内的deepspeed.init_inference调用,去掉dtype=model.dtype参数,让DeepSpeed自动适配模型的现有 dtype,避免强制转换:

修改后的get_model函数片段:

def get_model(properties):
    tensor_parallel = properties["tensor_parallel_degree"]
    local_rank = int(os.getenv("LOCAL_RANK", "0"))

    model, tokenizer = init_model(model_name="cs_model")
    # 移除dtype参数,避免DeepSpeed强制转换量化模型类型
    model = deepspeed.init_inference(
        model,
        mp_size=tensor_parallel,
        replace_method="auto",
        replace_with_kernel_inject=True,
    )
    generator = pipeline(
        task="text-generation", model=model, tokenizer=tokenizer, device=local_rank
    )
    return generator

2. 验证模型加载配置

确保init_model中的量化配置正确,模型加载后保持量化状态,无需额外类型转换:

  • load_in_4bit=True已启用4bit量化
  • bnb_4bit_compute_dtype=torch.float16仅用于计算时的 dtype,模型本身仍为4bit量化状态

3. 确认DeepSpeed兼容性

使用的DeepSpeed版本(0.12.6)支持4bit量化模型的推理加速,replace_method="auto"会自动适配模型结构进行内核注入优化。

修改后的完整代码

from djl_python import Input, Output
import os
import deepspeed
import torch
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
    TrainingArguments,
    pipeline,
    logging,
)

predictor = None

def init_model(model_name="cs_model"):
    compute_dtype = getattr(torch, "float16")
    bnb_config = BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_quant_type="nf4",
        bnb_4bit_compute_dtype=compute_dtype,
        bnb_4bit_use_double_quant=False,
    )
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        device_map="auto",
        quantization_config=bnb_config,
        trust_remote_code=True,
    )
    model.config.use_cache = False
    model.config.pretraining_tp = 1
    tokenizer = AutoTokenizer.from_pretrained(
        model_name,
        trust_remote_code=True,
    )
    tokenizer.pad_token = tokenizer.eos_token
    tokenizer.padding_side = "right"
    return model, tokenizer

def get_model(properties):
    tensor_parallel = properties["tensor_parallel_degree"]
    local_rank = int(os.getenv("LOCAL_RANK", "0"))

    model, tokenizer = init_model(model_name="cs_model")
    model = deepspeed.init_inference(
        model,
        mp_size=tensor_parallel,
        replace_method="auto",
        replace_with_kernel_inject=True,
    )
    generator = pipeline(
        task="text-generation", model=model, tokenizer=tokenizer, device=local_rank
    )
    return generator


def handle(inputs: Input) -> None:
    global predictor
    if not predictor:
        predictor = get_model(inputs.get_properties())

    if inputs.is_empty():
        # Model server makes an empty call to warmup the model on startup
        return None

    data = inputs.get_as_string()
    result = predictor(data, do_sample=True, max_new_tokens=256)
    return Output().add(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:52:06