无法将TheBloke/Mistral-7B-v0.1-GGUF模型加载至GPU的求助
问题:GGUF模型无法加载到GPU,始终运行在CPU
我尝试用以下代码将TheBloke/Mistral-7B-v0.1-GGUF模型加载到GPU,但模型始终处于CPU环境:
from ctransformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-v0.1-GGUF", model_file='mistral-7b-v0.1.Q4_K_M.gguf', model_type='mistral', hf=True) tokenizer = AutoTokenizer.from_pretrained(model) device = 'cuda:0' prompt = 'text' model_inputs = tokenizer(prompt, return_tensors="pt") model_inputs.to(device) model.to(device)
我还试过两种调整,问题依旧:
model = model.to(device)device = torch.device('cuda')
解决方法
ctransformers库底层基于llama.cpp,不支持用PyTorch的.to(device)方法切换GPU,必须在模型初始化时配置GPU参数:
from ctransformers import AutoModelForCausalLM, AutoTokenizer # 初始化时通过gpu_layers参数指定GPU加载的层数 model = AutoModelForCausalLM.from_pretrained( "TheBloke/Mistral-7B-v0.1-GGUF", model_file='mistral-7b-v0.1.Q4_K_M.gguf', model_type='mistral', hf=True, gpu_layers=20 # 根据GPU显存调整,显存充足可设更高,比如35 ) # 直接用模型ID加载tokenizer,比传入model对象更稳定 tokenizer = AutoTokenizer.from_pretrained("TheBloke/Mistral-7B-v0.1-GGUF") prompt = 'text' model_inputs = tokenizer(prompt, return_tensors="pt") # ctransformers会自动处理输入的设备,无需手动移到GPU output = model.generate(**model_inputs) print(tokenizer.decode(output[0]))
重要提示
gpu_layers是核心参数:数值越大,越多模型层加载到GPU,推理速度越快,但显存占用越高。如果显存不足,可逐步降低数值(比如10、5)。- 不要用PyTorch的设备切换方法,ctransformers不兼容这种操作,GPU加速必须在初始化时配置。
- tokenizer直接用Hugging Face模型ID加载,避免因传入model对象导致的潜在问题。
内容的提问来源于stack exchange,提问作者Katerina
相关产品推荐
相关产品推荐

