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
相关产品推荐
相关产品推荐

