Mac MPS环境运行LeoLM-7B-Chat模型遇BFloat16不支持错误的解决方法
问题修复方案
核心错误原因
- MPS不支持BFloat16:Apple Silicon的MPS设备无法处理
bfloat16数据类型,当前配置中指定的bnb_4bit_compute_dtype=bfloat16触发了类型不兼容错误。 - Bitsandbytes 4bit量化不支持MPS:该量化方案仅针对CUDA设备开发,MPS环境下无法初始化FP4量化层,导致第二个报错。
- 代码遗漏torch导入:原代码使用
torch.device但未导入完整torch模块,会引发隐性错误。
具体修改步骤
1. 补充必要导入
在代码开头添加完整的torch导入:
import torch from torch import cuda, bfloat16, float16 import transformers
2. 调整量化与设备配置
根据你的Mac内存情况选择以下方案:
方案A:无量化加载(适合16GB+统一内存)
移除Bitsandbytes的4bit量化配置,改用MPS支持的float16加载模型,并手动迁移到MPS设备:
device = torch.device("mps") model_id = 'LeoLM/leo-hessianai-7b-chat' hf_auth = 'HF_KEY' # 直接加载模型,指定float16数据类型 model = transformers.AutoModelForCausalLM.from_pretrained( model_id, trust_remote_code=False, torch_dtype=float16, device_map='auto', use_auth_token=hf_auth ) # 手动将模型迁移到MPS model.to(device) model.eval() print(f"Model loaded on {device}")
方案B:8bit量化加载(适合内存紧张的情况)
尝试使用Bitsandbytes的8bit量化(MPS兼容性有限,需测试),同时替换计算数据类型为float16:
device = torch.device("mps") model_id = 'LeoLM/leo-hessianai-7b-chat' hf_auth = 'HF_KEY' # 调整量化配置为8bit,使用float16计算 bnb_config = transformers.BitsAndBytesConfig( load_in_8bit=True, bnb_8bit_compute_dtype=float16 ) model_config = transformers.AutoConfig.from_pretrained( model_id, use_auth_token=hf_auth ) model = transformers.AutoModelForCausalLM.from_pretrained( model_id, trust_remote_code=False, config=model_config, quantization_config=bnb_config, device_map='auto', use_auth_token=hf_auth ) model.to(device) model.eval() print(f"Model loaded on {device}")
3. 其余代码保持不变
Tokenizer和文本生成Pipeline部分无需修改,直接沿用原代码即可。
内容的提问来源于stack exchange,提问作者Maxl Gemeinderat
相关产品推荐
相关产品推荐

