如何使用 HuggingFace 跑开源模型 | 豆包MarsCode AI 刷题

496 阅读4分钟

如何使用 HuggingFace 跑开源模型

本文将从大语言模型的发展历史入手,介绍预训练和微调模式,然后以 HuggingFace 平台为例,展示如何运行开源模型,包括 Meta 的 Llama2 模型。通过本文,读者将全面了解 HuggingFace 的使用方法,并掌握结合 LangChain 调用自定义语言模型的基本操作。

大语言模型发展史

大语言模型(LLM, Large Language Model)指的是基于海量文本数据训练出的深度学习模型。其发展经历了以下几个阶段:

  • 早期阶段:NLP 模型以传统方法为主,如 TF-IDF、n-gram 等,模型仅能处理有限上下文。
  • 深度学习阶段:基于 RNN 和 LSTM 的语言模型出现,这些模型能理解较长的文本序列。
  • Transformer 引领革命:2017 年提出的 Transformer 架构(Attention Is All You Need)极大提升了训练效率,为 GPT、BERT 等模型奠定了基础。
  • 大模型时代:GPT-3、Llama、Claude 等模型利用超大规模数据和参数,具备生成能力,支持多轮对话、文本摘要等任务。

如今,开源模型如 Meta 的 Llama 系列已逐渐成为主流,降低了使用大模型的门槛。


预训练 + 微调的模式

  • 预训练:在海量的无标签数据上训练模型,使其学习通用的语言知识。预训练的目标通常是完成某些自监督任务,如掩码预测(Masked Language Model)。
  • 微调:在特定任务的数据上对预训练模型进行优化,使其在特定场景中表现更佳。例如,使用 QA 数据集微调模型以提升问答能力。

这种两阶段模式的优势是:

  1. 可迁移性:预训练好的模型能快速适配不同任务。
  2. 高效性:微调只需较少的标注数据即可获得高质量结果。

注册并安装 HuggingFace

HuggingFace 是当前最流行的 NLP 开源平台之一,提供丰富的模型库和工具链。要开始使用:

  1. 注册 HuggingFace 账号:HuggingFace 官网

  2. 安装 HuggingFace 库:

      bash
      ​
      ​
      复制代码
      pip install transformers datasets
    

申请使用 Meta 的 Llama2 模型

Llama2 是 Meta 发布的开源大语言模型,支持多个参数规模(7B、13B 和 70B)。由于 Llama2 的授权协议,需先申请使用权限。

  1. 前往 Llama2 官网
  2. 填写申请表格,等待审核通过后即可访问。
  3. 一旦授权通过,模型会出现在 HuggingFace 的账户中。

通过 HuggingFace 调用 Llama2

HuggingFace 提供了多种方法调用开源模型。以下是直接使用 Llama2 的基本示例:

  
  python
  ​
  ​
  复制代码
  from transformers import AutoModelForCausalLM, AutoTokenizer
  ​
  # 加载模型和分词器
  model_name = "meta-llama/Llama-2-7b-chat-hf"
  tokenizer = AutoTokenizer.from_pretrained(model_name)
  model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
  ​
  # 编码输入并生成输出
  inputs = tokenizer("Tell me a joke.", return_tensors="pt")
  outputs = model.generate(inputs["input_ids"], max_length=50, temperature=0.7)
  ​
  # 解码输出
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
  print(response)

通过 HuggingFace Hub

HuggingFace Hub 是一个在线平台,提供了数以万计的模型库、数据集和 demo 工具。调用 HuggingFace Hub 的步骤:

  1. 登录账户并生成 API Token。
  2. 在代码中配置 Token 并调用模型。

示例:

  
  python
  ​
  ​
  复制代码
  from huggingface_hub import login
  from transformers import pipeline
  ​
  # 登录 HuggingFace Hub
  login("your_huggingface_api_token")
  ​
  # 调用 Llama2 模型进行文本生成
  generator = pipeline("text-generation", model="meta-llama/Llama-2-7b-chat-hf")
  response = generator("What's the capital of France?", max_length=20, temperature=0.5)
  print(response[0]["generated_text"])

通过 HuggingFace Pipeline

HuggingFace Pipeline 是快速调用模型的高层 API,支持文本生成、分类、翻译等任务。以下是使用 Pipeline 生成文本的示例:

  
  python
  ​
  ​
  复制代码
  from transformers import pipeline
  ​
  # 使用 pipeline 加载 Llama2
  text_generator = pipeline("text-generation", model="meta-llama/Llama-2-7b-chat-hf")
  ​
  # 文本生成
  response = text_generator("Tell me something interesting about space.", max_length=50)
  print(response[0]["generated_text"])

用 LangChain 调用自定义语言模型

LangChain 是一个强大的框架,用于构建复杂的语言模型应用程序。它支持将 HuggingFace 模型集成到自定义的 Chain 中,以处理复杂任务。

示例代码:

  
  python
  ​
  ​
  复制代码
  from langchain.llms import HuggingFaceHub
  from langchain.prompts import PromptTemplate
  from langchain.chains import LLMChain
  ​
  # 初始化 HuggingFace 模型
  llm = HuggingFaceHub(repo_id="meta-llama/Llama-2-7b-chat-hf", model_kwargs={"temperature": 0.7})
  ​
  # 定义 Prompt 模板
  prompt = PromptTemplate(input_variables=["question"], template="Question: {question}\nAnswer:")
  ​
  # 创建 LLM Chain
  chain = LLMChain(llm=llm, prompt=prompt)
  ​
  # 使用链条生成回答
  response = chain.run("What are the benefits of AI?")
  print(response)

总结

HuggingFace 提供了强大的工具链来运行和管理开源语言模型,从简单的文本生成到复杂的定制应用都非常便捷。本笔记总结了 Llama2 的调用方法,以及结合 LangChain 扩展 HuggingFace 模型的实际操作。

通过 HuggingFace 平台,你可以快速上手大语言模型,轻松地将其应用到实际项目中。未来,结合 HuggingFace 的社区资源与框架支持,将会在 AI 开发中发挥更重要的作用。

4o