Mac M2 CPU环境下用Transformers运行StarCoder模型报错求助
解决Mac M2 CPU环境下StarCoder 8bit加载失败问题
问题根源
- 你安装的bitsandbytes未编译GPU支持,在Apple Silicon的CPU环境下无法启用GPU量化逻辑;同时
device_map="auto"会自动尝试将模块分配到GPU,与你指定的CPU运行环境冲突。 - 错误提示明确要求启用
load_in_8bit_fp32_cpu_offload=True并指定自定义device_map——因为当前CPU环境无法直接运行8bit量化模块,需允许CPU上的模块以32bit形式加载。
修复后的代码
from transformers import AutoModelForCausalLM, AutoTokenizer import torch checkpoint = "bigcode/starcoder" device = "cpu" tokenizer = AutoTokenizer.from_pretrained(checkpoint) model = AutoModelForCausalLM.from_pretrained( checkpoint, device_map="cpu", # 强制所有模块加载到CPU,避免GPU分配冲突 load_in_8bit=True, load_in_8bit_fp32_cpu_offload=True, # 允许CPU上的模块以32bit运行 torch_dtype=torch.float32 # 适配CPU环境,避免float16兼容性问题 ) print(f"Memory footprint: {model.get_memory_footprint() / 1e6:.2f} MB") inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device) outputs = model.generate(inputs) print(tokenizer.decode(outputs[0], clean_up_tokenization_spaces=False))
额外说明
- Intel MKL警告可忽略:Mac M2为ARM架构,MKL的SSE4.2支持警告不影响实际运行。
- 若仍遇内存不足:可添加
offload_folder="./offload"参数,将部分模块临时存到磁盘缓解内存压力。
内容的提问来源于stack exchange,提问作者Exploring
相关产品推荐
相关产品推荐

