探索本地运行Hugging Face Pipelines:释放模型的真正潜力

78 阅读2分钟
# 探索本地运行Hugging Face Pipelines:释放模型的真正潜力

## 引言

Hugging Face Model Hub是一个集中托管超过12万模型、2万数据集和5万演示应用的平台,供人们开源协作、构建机器学习模型。本文的目的是介绍如何在本地使用Hugging Face Pipelines,通过LangChain进行调用,使开发者能够在脱离网络的情况下高效运行模型。

## 主要内容

### 1. 环境准备

使用Hugging Face Pipelines需要安装`transformers``pytorch`包。如果需要内存优化,还可以安装`xformer````bash
pip install --upgrade --quiet transformers torch xformers

2. 模型加载

可以通过from_model_id方法或者直接使用现有的transformers管道加载模型。

from langchain_huggingface.llms import HuggingFacePipeline

# 方法1:通过模型ID加载
hf = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    pipeline_kwargs={"max_new_tokens": 10},
)

# 方法2:通过现有管道加载
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加速推理

通过指定device=n参数可以将模型放在GPU上。如果模型太大,可以使用device_map="auto"来自动分配。

gpu_llm = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    device=0,  # 0表示GPU
    pipeline_kwargs={"max_new_tokens": 10},
)

5. 使用OpenVINO进行推理

可以使用OpenVINO作为后端推理框架,从而提升推理性能。

pip install --upgrade-strategy eager "optimum[openvino,nncf]" --quiet
ov_llm = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    backend="openvino",
    model_kwargs={"device": "CPU", "ov_config": {"PERFORMANCE_HINT": "LATENCY"}},
    pipeline_kwargs={"max_new_tokens": 10},
)

ov_chain = prompt | ov_llm

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

常见问题和解决方案

  • 模型加载过慢或失败: 检查网络连接或尝试使用API代理。
  • GPU内存不足: 使用device_map="auto"或减小max_new_tokens

总结和进一步学习资源

在本地运行Hugging Face Pipelines可以在保障数据隐私的同时,充分发挥硬件性能。更多学习资源可以参考OpenVINO LLM指南Hugging Face文档

参考资料

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

---END---