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

macOS M1环境下用LlmFactory加载GGUF模型报错求助(仅用CPU)

解决M1 macOS上llmflex加载GGUF模型强制CPU运行的问题

问题分析

报错日志显示即使设置use_metal=False,底层的llama-cpp-python仍尝试初始化Metal,找不到ggml-metal.metal文件导致失败。核心原因:

  • llama-cpp-python在M1环境下默认编译时包含Metal支持,即使禁用也会尝试加载相关资源文件
  • llmflex的use_metal参数可能未正确传递到底层的llama-cpp-python实例

解决方案

1. 重新安装CPU-only版本的llama-cpp-python

在你的独立Python环境中执行以下命令,强制编译时禁用Metal支持:

CMAKE_ARGS="-DLLAMA_METAL=OFF" pip install llama-cpp-python --force-reinstall --no-cache-dir

2. 调整代码参数,强制CPU运行

修改llmflex的模型初始化代码,同时传递n_gpu_layers=0(llama-cpp-python中该参数设为0表示完全使用CPU),并确保底层参数正确传递:

from llmflex import LlmFactory
import os

# 强制禁用Metal环境变量
os.environ["GGML_METAL"] = "0"

try:
    model = LlmFactory("TheBloke/OpenHermes-2.5-Mistral-7B-GGUF")
    # 显式指定CPU运行参数
    llm = model(
        temperature=0.7,
        max_new_tokens=512,
        use_metal=False,
        # 传递底层llama-cpp-python参数,强制GPU层数为0
        llama_cpp_kwargs={"n_gpu_layers": 0}
    )
    response = llm.generate("Hello, how are you?")
    print(response)
except AttributeError as e:
    print(f"Attribute error: {e}")
except AssertionError as e:
    print(f"Assertion error: {e}")
except Exception as e:
    print(f"An error occurred: {e}")

3. 终端运行时强制禁用Metal

如果不想修改代码,可以在运行脚本前设置环境变量:

GGML_METAL=0 python your_script_name.py

4. 验证底层llama-cpp-python是否正常

先跳过llmflex,直接用llama-cpp-python测试CPU运行:

from llama_cpp import Llama

# 替换为你下载的具体模型文件路径(比如Q2_K版本的.gguf文件)
llm = Llama(
    model_path="openhermes-2.5-mistral-7b.Q2_K.gguf",
    use_metal=False,
    n_gpu_layers=0
)
output = llm.create_completion("Hello, how are you?", max_tokens=50)
print(output["choices"][0]["text"])

如果这段代码能正常运行,说明底层环境没问题,问题出在llmflex的参数传递,需要确保llama_cpp_kwargs正确传递参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:23:12