LLM入门——在Colab上部署Llama2

张裕  论坛元老 | 2024-9-18 06:52:25 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1553|帖子 1553|积分 4659

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





下载相干库

  1. !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登录

  1. !huggingface-cli login
复制代码


  • 怎样获取口令参考怎样获取HuggingFace的Access Token;怎样获取HuggingFace的API Key

  • shell中后续问你Add token as git credential? (Y/n),直接输入n
  • 假如你选择非官方(无需权限获取)的LLM,这一步应该可以略过
模子下载加载

  1. from langchain_huggingface import HuggingFacePipeline
  2. from transformers import AutoTokenizer
  3. import transformers
  4. import torch
  5. model = "meta-llama/Llama-2-7b-chat-hf"
  6. tokenizer = AutoTokenizer.from_pretrained(model, truncation=True)
  7. pipeline = transformers.pipeline(
  8.     "text-generation",
  9.     model=model,
  10.     tokenizer=tokenizer,
  11.     torch_dtype=torch.bfloat16,
  12.     trust_remote_code=True,
  13.     device_map="auto",
  14.     max_length=1000,
  15.     eos_token_id=tokenizer.eos_token_id
  16. )
复制代码


  • 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上运行

  1. llm = HuggingFacePipeline(pipeline = pipeline, model_kwargs = {'temperature':0})
复制代码


  • 这一步基于pipline创建一个HuggingFacePipeline
  • 在天然语言生成任务中,温度(temperature)参数用于调节生成文本的多样性和随机性。具体来讲,温度 (temperature) 是一个浮点数,用于控制生成模子输出的概率分布。它影响模子对每个词的选择概率,从而调节生成文本的多样性和随机性。

    • 高温度值(比方,temperature=1.0 或更高):

      • 生成的文本更随机,词的选择概率分布更平展。
      • 效果更加多样化,但也可能导致不太连贯或不符合上下文的输出。

    • 低温度值(比方,temperature=0.1 或更低):

      • 生成的文本更确定,模子倾向于选择概率最高的词。
      • 效果更连贯和符合上下文,但多样性降低。

    • 温度为 0:

      • 模子将始终选择概率最高的词,生成的文本完全确定,没有随机性。
      • 这通常用于生成确定性的回答或需要非常高的准确性时,但输出可能会缺乏创意和多样性。


Prompt Template

  1. from langchain import PromptTemplate
  2. template = """
  3.               You are an intelligent chatbot that gives out useful information to humans.
  4.               You return the responses in sentences with arrows at the start of each sentence
  5.               {query}
  6.            """
  7. prompt = PromptTemplate(template=template, input_variables=["query"])
  8. llm_chain = prompt | llm
复制代码


  • Prompt template 是一种可复制的生成提示的方法,可以帮助我们针对差异环境的同类型问题简化prompt设计。它包含一个文本字符串(“template”),可以从终极用户处获取一组参数并生成一个提示。
  • PromptTemplate 类答应用户定义一个模板,该模板包含占位符变量,这些变量将在实际使用时被具体的输入值替换。这样可以确保输入提示的一致性和布局化,使得生成模子可以或许更好地明白和响应输入。

    • 参数 template: 一个字符串模板,包含占位符变量。模板定义了生成模子输入的布局。代码中的占位符变量为 {query}
    • input_variables: 一个字符串列表,列出模板中全部的占位符变量名。这些变量将在生成模子调用时被具体的值替换。

  • 在本文代码中,要求Llama模子回答用户的查询,并以编号的形式回答问题。
  • prompt | llm 是 langchain.PromptTemplate 的新语法特性,替代了原先的 LLMChain 函数。该指令使用提供的输入键值(假如有的话,还包罗内存键值)格式化提示模板,将格式化的字符串传递给LLM并返回LLM输出。
  1. 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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表