使用ExLlamaV2在现代消费级GPU上高效运行大型语言模型

引言

随着人工智能技术的发展,越来越多的开发者希望在本地运行大型语言模型(LLM),而不依赖云环境。ExLlamaV2是一个高效的推理库,它允许用户在现代消费级GPU上本地运行GPTQ和EXL2量化模型。本篇文章将介绍如何在LangChain中使用ExLlamaV2,以及提供相关的代码示例。

主要内容

安装

要开始使用ExLlamaV2,您需要满足以下环境需求:

  • Python 3.11
  • LangChain 0.1.7
  • CUDA: 12.1.0
  • Torch: 2.1.1+cu121
  • ExLlamaV2: 0.0.12+cu121

如果使用pip安装,可以使用以下命令:

pip install https://github.com/turboderp/exllamav2/releases/download/v0.0.12/exllamav2-0.0.12+cu121-cp311-cp311-linux_x86_64.whl

对于使用Conda的用户,依赖如下:

  • conda-forge::ninja
  • nvidia/label/cuda-12.1.0::cuda
  • conda-forge::ffmpeg
  • conda-forge::gxx=11.4

使用概述

ExLlamaV2允许用户在本地运行LLM,因此不需要API_TOKEN。选择适合的模型至关重要,您可以在Hugging Face上找到模型的RAM需求。以下是一个本地运行模型的代码示例。

代码示例

import os
from huggingface_hub import snapshot_download
from langchain_community.llms.exllamav2 import ExLlamaV2
from langchain_core.callbacks import StreamingStdOutCallbackHandler
from langchain_core.prompts import PromptTemplate
from libs.langchain.langchain.chains.llm import LLMChain

def download_GPTQ_model(model_name: str, models_dir: str = "./models/") -> str:
    """下载指定模型"""
    if not os.path.exists(models_dir):
        os.makedirs(models_dir)

    _model_name = model_name.split("/")
    _model_name = "_".join(_model_name)
    model_path = os.path.join(models_dir, _model_name)
    if _model_name not in os.listdir(models_dir):
        snapshot_download(
            repo_id=model_name, local_dir=model_path, local_dir_use_symlinks=False
        )
    else:
        print(f"{model_name} 已在模型目录中")

    return model_path

settings = ExLlamaV2Sampler.Settings()
settings.temperature = 0.85
settings.top_k = 50
settings.top_p = 0.8
settings.token_repetition_penalty = 1.05

model_path = download_GPTQ_model("TheBloke/Mistral-7B-Instruct-v0.2-GPTQ")

callbacks = [StreamingStdOutCallbackHandler()]

template = """Question: {question}

Answer: Let's think step by step."""

prompt = PromptTemplate(template=template, input_variables=["question"])

llm = ExLlamaV2(
    model_path=model_path,
    callbacks=callbacks,
    verbose=True,
    settings=settings,
    streaming=True,
    max_new_tokens=150,
)

llm_chain = LLMChain(prompt=prompt, llm=llm)

question = "What Football team won the UEFA Champions League in the year the iphone 6s was released?"
output = llm_chain.invoke({"question": question})
print(output)

常见问题和解决方案

模型无法加载

确保所有依赖项正确安装,并检查CUDA与Torch的兼容性。

性能问题

选择合适的量化模型,并根据硬件资源调整推理参数,如temperaturetop_k等。

总结和进一步学习资源

ExLlamaV2提供了一种高效运行LLM的方法,适合有GPU硬件支持的开发者。推荐查看以下资源以深入学习:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值