LLM入门——在Colab上部署Llama2
2024/07/09
本文属于“LLM入门”系列,该系列是笔者自学LLM时记载的一些实践记载与心得,可能存在错误或过时的部分,请读者体贴。
对于LLM入门学者,我推荐从Large Language Model Course开始,这是一份优秀的学习路径引导。
本文为笔者二次整理的资料,重点关注在Colab上用根本方法部署Llama的指令过程。如有其他需求请参考对应博客:
- 可视化调用Llama2 / 在线试用 Llama2 / colab 一键部署:Llama2 部署及试用
- 跳过笔者的碎碎念,直接阅读笔者参考的原始资料:Getting Started with LlaMA 2: A Beginner’s Guide
Llama2
Llama2是meta最新开源的语言大模子,训练数据集2万亿token,上下文长度是由llama的2048扩展到4096,可以明白和生成更长的文本,包罗7B、13B和70B三个模子。
其中其中B是Billion,代表十亿参数
以Llama2为代表的开源LLM根本都能在huggingface下载。Hugging Face 是一个旨在推动天然语言处置惩罚(NLP)技能和工具发展的开源社区和公司。他们致力于提供各种NLP任务中的最新技能、模子和工具,以及为开发者提供便捷的方式来使用、微调和部署这些技能。
当然你也别着急去下载,个人PC的性能在LLM方向能做的事有限,我推荐初学者先在Colab上练练手。
Colab
Colaboratory(简称为Colab)是由Google开发的一种基于云端的交互式笔记本环境。它提供了免费的计算资源(包罗CPU、GPU和TPU),可让用户在欣赏器中编写和实行代码,而无需进行任何配置和安装。
怎样用Colab创建代码请参考【呆板学习 | 深度学习】Colab是什么?以及怎样使用它?
Llama2 访问
获取Llama的两种方式:
- 官方申请:
- 官网申请下载
- huggingface获取官方库访问权限
- huggingface第三方下载
具体方式请参考Llama2 部署及试用。假如后续有继续使用Llama做研究的需求,建议官方申请,实测一两小时内即可乐成。官方申请有几点注意事项:
- 官网/huggingface官方库申请时地区请选择"China"以外的恣意选项
- 优先huggingface官方库,官网提供的下载方式过于麻烦
Colab部署
参考:Getting Started with LlaMA 2: A Beginner’s Guide
LangChain 是一个用于开发由语言模子驱动的应用步伐的框架。接下来基于LangChain在Colab上部署使用meta-llama/Llama-2-7b-chat-hf。
总体来看,部署一个LLM可以归纳为以下步骤:
- Install required packages
- Import required libraries
- Download the model
- Load the model
- Create a prompt template
- Generate a response
Colab选择T4 GPU
下载相干库
- !pip install -q transformers einops accelerate langchain bitsandbytes langchain-community langchain-core langchain-huggingface
复制代码
- 在下令 pip install -q 中,-q 一个选项,表示“quiet”(安静模式)。这个选项的作用是镌汰下令输出的冗长信息,只表现错误和警告信息。
- Colab提供的代码编辑界面是Jupyter Notebook,Jupyter Notebook中输入下令行指令需要在指令前多放一个!
- transformers:由 Hugging Face 开发的一个广泛使用的开源库,主要用于天然语言处置惩罚(NLP)任务。后续代码中有以下几点作用:
- transformers.pipeline 是 Hugging Face transformers 库中的一个焦点函数,提供了一个统一的接口,可以轻松地加载预训练模子,并在差异的NLP任务中使用。
- AutoTokenizer 是 Hugging Face transformers 库中的一个重要工具,用于自动选择和加载与特定预训练模子相匹配的分词器。分词器的作用是将输入的文本转化为模子可以处置惩罚的形式(如token ID)。AutoTokenizer 提供了简化的接口,使用户可以方便地加载恰当某个模子的分词器,而不必手动指定具体的分词器类。
- einops einops是一个简洁优雅使用张量的库,而且支持对numpy,pytorch,tensorflow中的张量进行使用。
- accelerate 是由 Hugging Face 开发的一个库,旨在简化和优化深度学习模子的训练和推理过程。
- langchain 是一个用于构建和使用大语言模子(LLM)的库,旨在简化创建、管理和部署各种天然语言处置惩罚(NLP)任务的流程。
- 只调用 langchain 出现报错langchain : ModuleNotFoundError: No module named ‘langchain_community’,还需要下载 langchain-community langchain-core langchain-huggingface。后续代码中有以下几点作用:
- HuggingFacePipeline 是抽象的对象,但网上缺乏相干的介绍
- PromptTemplate: Prompt template 是一种可复制的生成提示的方法。要创建 prompt template,可以使用 PromptTemplate 类创建一个简单的硬编码提示。Prompt template 可以接受恣意数目的输入变量,并可以格式化以生成一个 prompt。
Hugging Face登录
- 怎样获取口令参考怎样获取HuggingFace的Access Token;怎样获取HuggingFace的API Key
- shell中后续问你Add token as git credential? (Y/n),直接输入n
- 假如你选择非官方(无需权限获取)的LLM,这一步应该可以略过
模子下载加载
- from langchain_huggingface import HuggingFacePipeline
- from transformers import AutoTokenizer
- import transformers
- import torch
- model = "meta-llama/Llama-2-7b-chat-hf"
- tokenizer = AutoTokenizer.from_pretrained(model, truncation=True)
- pipeline = transformers.pipeline(
- "text-generation",
- model=model,
- tokenizer=tokenizer,
- torch_dtype=torch.bfloat16,
- trust_remote_code=True,
- device_map="auto",
- max_length=1000,
- eos_token_id=tokenizer.eos_token_id
- )
复制代码
- AutoTokenizer.from_pretrained 是 Hugging Face 的 transformers 库中一个便捷的方法,用于根据模子名称或路径加载预训练分词器(Tokenizer)。
- truncation=True 的意思是答应截断。当我们使用 tokenizer 处置惩罚输入文本时,假如输入文本的长度超过我们设定的 max_length,那么就需要进行截断。
- 这里重点关注下pipeline = transformers.pipeline:
- 网上有不少教程使用model = AutoModelForCausalLM.from_pretrained(model_name, token=True)加载模子,默认环境下,这种方式加载模子会使用 float32(32位浮点数)作为其张量的数据类型。但是Colab提供的T4 GPU资源受限,实践中会出现ran out of RAM报错。
- torch_dtype=torch.bfloat16 通过使用较低精度的浮点数,明显镌汰了内存使用,从而可以在Colab上运行
- llm = HuggingFacePipeline(pipeline = pipeline, model_kwargs = {'temperature':0})
复制代码
- 这一步基于pipline创建一个HuggingFacePipeline
- 在天然语言生成任务中,温度(temperature)参数用于调节生成文本的多样性和随机性。具体来讲,温度 (temperature) 是一个浮点数,用于控制生成模子输出的概率分布。它影响模子对每个词的选择概率,从而调节生成文本的多样性和随机性。
- 高温度值(比方,temperature=1.0 或更高):
- 生成的文本更随机,词的选择概率分布更平展。
- 效果更加多样化,但也可能导致不太连贯或不符合上下文的输出。
- 低温度值(比方,temperature=0.1 或更低):
- 生成的文本更确定,模子倾向于选择概率最高的词。
- 效果更连贯和符合上下文,但多样性降低。
- 温度为 0:
- 模子将始终选择概率最高的词,生成的文本完全确定,没有随机性。
- 这通常用于生成确定性的回答或需要非常高的准确性时,但输出可能会缺乏创意和多样性。
Prompt Template
- from langchain import PromptTemplate
- template = """
- You are an intelligent chatbot that gives out useful information to humans.
- You return the responses in sentences with arrows at the start of each sentence
- {query}
- """
- prompt = PromptTemplate(template=template, input_variables=["query"])
- llm_chain = prompt | llm
复制代码
- Prompt template 是一种可复制的生成提示的方法,可以帮助我们针对差异环境的同类型问题简化prompt设计。它包含一个文本字符串(“template”),可以从终极用户处获取一组参数并生成一个提示。
- PromptTemplate 类答应用户定义一个模板,该模板包含占位符变量,这些变量将在实际使用时被具体的输入值替换。这样可以确保输入提示的一致性和布局化,使得生成模子可以或许更好地明白和响应输入。
- 参数 template: 一个字符串模板,包含占位符变量。模板定义了生成模子输入的布局。代码中的占位符变量为 {query}
- input_variables: 一个字符串列表,列出模板中全部的占位符变量名。这些变量将在生成模子调用时被具体的值替换。
- 在本文代码中,要求Llama模子回答用户的查询,并以编号的形式回答问题。
- prompt | llm 是 langchain.PromptTemplate 的新语法特性,替代了原先的 LLMChain 函数。该指令使用提供的输入键值(假如有的话,还包罗内存键值)格式化提示模板,将格式化的字符串传递给LLM并返回LLM输出。
- print(llm_chain.run('What are the 3 causes of glacier meltdowns?'))
复制代码
- 至此,模子已经部署并对查询给出了响应:
- 可以看到,模子的输入查询已经按照 Prompt Template 规范化。
参考
- 收藏 | 看懂llama2 原理、模子和训练
- HuggingFace 介绍
- LangChain 介绍
- langchain_community.llms.huggingface_pipeline.HuggingFacePipeline
- Langchain(十)进阶之prompt template的使用
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |