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

无GPU的Windows环境下用Transformers运行LLM速度慢问题排查

问题描述

我没有GPU,但通过Ollama运行openbuddy-llama3-8b-v21.1-8k模型时速度约为1t/s。但使用以下代码运行时,model.generate的速度比Ollama慢很多,且进程仅占用25%的CPU,请问问题出在哪里?

from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    GenerationConfig,
)
import torch

new_model = "openbuddy/openbuddy-llama3-8b-v21.1-8k"
model = AutoModelForCausalLM.from_pretrained(
    new_model,
    device_map="auto",
    trust_remote_code=True,
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
)


tokenizer = AutoTokenizer.from_pretrained(
    new_model,
    max_length=2048,
    trust_remote_code=True,
    use_fast=True,
)

tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"


prompt = """<|im_start|>system
You are a helpful AI assistant.<|im_end|>
<|im_start|>user
Как открыть брокерский счет?<|im_end|>
<|im_start|>assistant
"""

inputs = tokenizer.encode(
    prompt, return_tensors="pt", add_special_tokens=False
).cpu() 

generation_config = GenerationConfig(
    max_new_tokens=700,
    temperature=0.5,
    top_p=0.9,
    top_k=40,
    repetition_penalty=1.1, 
    do_sample=True,
    pad_token_id=tokenizer.eos_token_id,
    eos_token_id=tokenizer.eos_token_id,
)
outputs = model.generate(
    generation_config=generation_config,
    input_ids=inputs,
)
print(tokenizer.decode(outputs[0], skip_special_tokens=False))
问题原因及解决方法

核心原因

  1. 缺少CPU加速优化:Ollama默认集成OpenBLAS、MKL等CPU加速库,且启用多线程并行计算;你的transformers代码未配置任何加速参数,仅低线程运行,导致CPU利用率不足。
  2. 未使用量化模型:8B参数的原生bfloat16模型在CPU上推理时内存占用大、计算效率低;Ollama使用的是量化后的GGUF格式模型,体积更小、计算速度更快。

具体修复方案

方案一:为transformers启用量化与CPU加速

  • 启用4-bit量化:通过bitsandbytes库对模型做量化处理,降低内存占用并提升速度:
    from transformers import (
        AutoModelForCausalLM,
        AutoTokenizer,
        GenerationConfig,
    )
    import torch
    import os
    
    # 设置CPU多线程数(根据你的CPU核心数调整,比如8核设为8)
    os.environ["OMP_NUM_THREADS"] = "8"
    os.environ["MKL_NUM_THREADS"] = "8"
    
    new_model = "openbuddy/openbuddy-llama3-8b-v21.1-8k"
    model = AutoModelForCausalLM.from_pretrained(
        new_model,
        device_map="cpu",  # 明确指定CPU设备
        trust_remote_code=True,
        torch_dtype=torch.bfloat16,
        low_cpu_mem_usage=True,
        load_in_4bit=True,  # 开启4-bit量化
        bnb_4bit_use_double_quant=True,
        bnb_4bit_quant_type="nf4",
        bnb_4bit_compute_dtype=torch.bfloat16
    )
    
    # 后续tokenizer和生成代码保持不变
    
  • 确保PyTorch带加速库:若你的PyTorch未集成MKL,建议重新安装带MKL支持的官方版本。

方案二:使用GGUF格式模型(与Ollama底层一致)

直接使用llama-cpp-python库加载对应模型的GGUF量化版本,可获得和Ollama接近的推理速度:

from llama_cpp import Llama

# 加载GGUF格式的量化模型(需自行下载对应模型文件)
llm = Llama(
    model_path="./openbuddy-llama3-8b-v21.1-8k.Q4_K_M.gguf",
    n_ctx=8192,
    n_threads=8,  # 线程数匹配CPU核心数
    n_threads_batch=8
)

prompt = """<|im_start|>system
You are a helpful AI assistant.<|im_end|>
<|im_start|>user
Как открыть брокерский счет?<|im_end|>
<|im_start|>assistant
"""

output = llm(
    prompt,
    max_tokens=700,
    temperature=0.5,
    top_p=0.9,
    top_k=40,
    repeat_penalty=1.1,
    stop=["<|im_end|>"]
)

print(output["choices"][0]["text"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:20:08