AI练中学-调用模型

158 阅读4分钟

调用模型
预训练+微调

●预训练:在大规模无标注文本数据上进行模型的训练,目标是让模型学习自然语言的基础表达、上下文信息和语义知识,为后续任务提供一个通用的、丰富的语言表示基础。
●微调:在预训练模型的基础上,可以根据特定的下游任务对模型进行微调。现在你经常会听到各行各业的人说:我们的优势就是领域知识嘛!我们比不过国内外大模型,我们可以拿开源模型做垂直领域嘛!做垂类模型!—— 啥叫垂类?指的其实就是根据领域数据微调开源模型这件事儿。
用HuggingFace跑开源模型
通过HuggingFace调用Llama

Python复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

导入必要的库

from transformers import AutoTokenizer, AutoModelForCausalLM

加载预训练模型的分词器

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")

加载预训练的模型

使用 device_map 参数将模型自动加载到可用的硬件设备上,例如GPU

model = AutoModelForCausalLM.from_pretrained(

"meta-llama/Llama-2-7b-chat-hf",

device_map = 'auto')

定义一个提示,希望模型基于此提示生成故事

prompt = "请给我讲个玫瑰的爱情故事?"

使用分词器将提示转化为模型可以理解的格式,并将其移动到GPU上

inputs = tokenizer(prompt, return_tensors="pt").to("cuda")

使用模型生成文本,设置最大生成令牌数为2000

outputs = model.generate(inputs["input_ids"], max_new_tokens=2000)

将生成的令牌解码成文本,并跳过任何特殊的令牌,例如[CLS], [SEP]等

response = tokenizer.decode(outputs[0], skip_special_tokens=True)

打印生成的响应

print(response)

●导入AutoTokenizer:这是一个用于自动加载预训练模型的相关分词器的工具。分词器负责将文本转化为模型可以理解的数字格式。
●导入AutoModelForCausalLM:这是用于加载因果语言模型(用于文本生成)的工具。
●使用from_pretrained方法来加载预训练的分词器和模型。其中,device_map = 'auto' 是为了自动地将模型加载到可用的设备上,例如GPU。
●然后,给定一个提示(prompt):"请给我讲个玫瑰的爱情故事?",并使用分词器将该提示转换为模型可以接受的格式,return_tensors="pt" 表示返回PyTorch张量。语句中的 .to("cuda") 是GPU设备格式转换,因为我在GPU上跑程序,不用这个的话会报错,如果你使用CPU,可以试一下删掉它。
●最后使用模型的 .generate() 方法生成响应。max_new_tokens=2000 限制生成的文本的长度。使用分词器的 .decode() 方法将输出的数字转化回文本,并且跳过任何特殊的标记。
LangChain和HuggingFace的接口
通过HuggingFace Hub
第一种集成方式,是通过HuggingFace Hub。HuggingFace Hub 是一个开源模型中心化存储库,主要用于分享、协作和存储预训练模型、数据集以及相关组件。

Python复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

导入HuggingFace API Token

import os

os.environ['HUGGINGFACEHUB_API_TOKEN'] = '你的HuggingFace API Token'

导入必要的库

from langchain import PromptTemplate, HuggingFaceHub, LLMChain

初始化HF LLM

llm = HuggingFaceHub(

repo_id="google/flan-t5-small",

#repo_id="meta-llama/Llama-2-7b-chat-hf",

)

创建简单的question-answering提示模板

template = """Question: {question}

Answer: """

创建Prompt

prompt = PromptTemplate(template=template, input_variables=["question"])

调用LLM Chain --- 我们以后会详细讲LLM Chain

llm_chain = LLMChain(

prompt=prompt,

llm=llm

)

准备问题

question = "Rose is which type of flower?"

调用模型并返回结果

print(llm_chain.run(question))

只需要在HuggingFaceHub类的repo_id中指定模型名称,就可以直接下载并使用模型,模型会自动下载到HuggingFace的Cache目录,并不需要手工下载。
通过HuggingFace Pipeline
HuggingFace 的 Pipeline 是一种高级工具,它简化了多种常见自然语言处理(NLP)任务的使用流程,使得用户不需要深入了解模型细节,也能够很容易地利用预训练模型来做任务。

用LangChain调用自定义语言模型
我们可以创建一个LLM的衍生类,自己定义模型。而LLM这个基类,则位于langchain.llms.base中,通过from langchain.llms.base import LLM语句导入。
这个自定义的LLM类只需要实现一个方法:
●_call方法:用于接收输入字符串并返回响应字符串。
以及一个可选方法:
●_identifying_params方法:用于帮助打印此类的属性。
为了使用llama-2-7b-chat.ggmlv3.q4_K_S.bin这个模型,需要安装 pip install llama-cpp-python 这个包