教你5步学会用Llama2:我见过最简单的大模型教学

在这篇博客中,Meta 探讨了使用 Llama 2 的五个步骤,以便使用者在自己的项目中充分利用 Llama 2 的优势。同时详细介绍 Llama 2 的关键概念、设置方法、可用资源,并提供一步步设置和运行 Llama 2 的流程。

Meta 开源的 Llama 2 包括模型权重和初始代码,参数范围从 7B 到 70B。Llama 2 的训练数据比 Llama 多了 40%,上下文长度也多一倍,并且 Llama 2 在公开的在线数据源上进行了预训练。

图片

Llama2 参数说明图

图片

Llama2 流程说明图

在推理、编码、熟练程度和知识测试等多项外部基准测试中,Llama 2 的表现均优于其他开放式语言模型。Llama 2 可免费用于研究和商业用途。

技术交流

建了技术交流群!想要进交流群、获取如下原版资料的同学,可以直接加微信号:dkl88194。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

方式①、添加微信号:dkl88194,备注:来自CSDN + 技术交流
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

资料1
在这里插入图片描述

资料2
在这里插入图片描述

下一节中将介绍使用 Llama 2 的 5 个步骤。在本地设置 Llama 2 有多种方法,本文讨论其中一种方法,它能让你轻松设置并快速开始使用 Llama。

开始使用 Llama2

步骤 1:前置条件和依赖项

本文将使用 Python 编写脚本来设置并运行 pipeline 任务,并使用 Hugging Face 提供的 Transformer 模型和加速库。

pip install transformers
pip install accelerate

步骤 2:下载模型权重

本文使用的模型可在 Meta 的 Llama 2 Github 仓库中找到。通过此 Github 仓库下载模型需要完成两步:

  • 访问 Meta 网站,接受许可并提交表格。请求通过后才能收到在电子邮件中的预签名 URL;

  • 克隆 Llama 2 知识库到本地。

git clone https://github.com/facebookresearch/llama

启动 download.sh 脚本(sh download.sh)。出现提示时,输入在电子邮件中收到的预指定 URL。

  • 选择要下载的模型版本,例如 7b-chat。然后就能下载 tokenizer.model 和包含权重的 llama-2-7b-chat 目录。

运行 ln -h ./tokenizer.model ./llama-2-7b-chat/tokenizer.model,创建在下一步的转换时需要使用的 tokenizer 的链接。

转换模型权重,以便与 Hugging Face 一起运行:

TRANSFORM=`python -c"import transformers;print ('/'.join (transformers.__file__.split ('/')[:-1])+'/models/llama/convert_llama_weights_to_hf.py')"`
pip install protobuf && python $TRANSFORM --input_dir ./llama-2-7b-chat --model_size 7B --output_dir ./llama-2-7b-chat-hf

Meta 在 Hugging Face 上提供了已转换的 Llama 2 权重。要使用 Hugging Face 上的下载,必须按照上述步骤申请下载,并确保使用的电子邮件地址与 Hugging Face 账户相同。

步骤 3:编写 python 脚本

接下来创建一个 Python 脚本,该脚本将包含加载模型和使用 Transformer 运行推理所需的所有代码。

导入必要的模块

首先需要在脚本中导入以下必要模块:LlamaForCausalLM 是 Llama 2 的模型类,LlamaTokenizer 为模型准备所需的 prompt,pipeline 用于生成模型的输出,torch 用于引入 PyTorch 并指定想要使用的数据类型。

import torch
import transformers
from transformers import LlamaForCausalLM, LlamaTokenizer

加载模型

接下来,用下载好并转换完成的权重(本例中存储在 ./llama-2-7b-chat-hf 中)加载 Llama 模型。

model_dir = "./llama-2-7b-chat-hf"
model = LlamaForCausalLM.from_pretrained (model_dir)

定义并实例化分词器和流水线任务

在最终使用之前确保为模型准备好输入,这可以通过加载与模型相关的 tokenizer 来实现。在脚本中添加以下内容,以便从同一模型目录初始化 tokenizer:

tokenizer = LlamaTokenizer.from_pretrained (model_dir)

接下来还需要一种方法来赋予模型推理的能力。pipeline 模块能指定 pipeline 任务运行所需的任务类型(text-generation)、推理所需的模型(model)、定义使用该模型的精度(torch.float16)、pipeline 任务运行的设备(device_map)以及其他各种配置。

在脚本中添加以下内容,以实例化用于运行示例的流水线任务:

pipeline = transformers.pipeline (
"text-generation",
model=model,
tokenizer=tokenizer,
torch_dtype=torch.float16,
device_map="auto",
)

运行 pipeline 任务

在定义了 pipeline 任务后,还需要提供一些文本提示,作为 pipeline 任务运行时生成响应(序列)的输入。下面示例中的 pipeline 任务将 do_sample 设置为 True,这样就可以指定解码策略,从整个词汇表的概率分布中选择下一个 token。本文示例脚本使用的是 top_k 采样。

通过更改 max_length 可以指定希望生成响应的长度。将 num_return_sequences 参数设置为大于 1,可以生成多个输出。在脚本中添加以下内容,以提供输入以及如何运行 pipeline 任务的信息:

sequences = pipeline (
'I have tomatoes, basil and cheese at home. What can I cook for dinner?\n',
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=400,
)
for seq in sequences:
print (f"{seq ['generated_text']}")

步骤 4:运行 Llama

现在,这个脚本已经可以运行了。保存脚本,回到 Conda 环境,输入

python < 脚本名称 >.py 

并按回车键来运行脚本。

如下图所示,开始下载模型,显示 pipeline 任务的进展,以及输入的问题和运行脚本后生成的答案:

图片

本地运行 2-7b-chat-hf

现在可以在本地设置并运行 Llama 2。通过在字符串参数中提供不同的提示来尝试不同的提示。你还可以通过在加载模型时指定模型名称来加载其他 Llama 2 模型。下一节中提到的其他资源可以帮你了解更多 Llama 2 工作原理的信息,以及可用于帮助入门的各种资源。

步骤 5:能力拔高

要了解有关 Llama 2 工作原理、训练方法和所用硬件的更多信息,请参阅 Meta 的论文《Llama 2: Open Foundation and Fine-Tuned Chat Models》,其中对这些方面进行了更详细的介绍。

论文地址:https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/

从 Meta 的 Llama 2 Github repo 获取模型源代码,源代码展示了模型的工作原理以及如何加载 Llama 2 模型和运行推理的最简单示例。在这里还可以找到下载、设置模型的步骤以及运行文本补全和聊天模型的示例。

repo 地址:https://github.com/facebookresearch/llama

在模型卡片(中了解模型的更多信息,包括模型架构、预期用途、硬件和软件要求、训练数据、结果和许可证。

卡片地址:https://github.com/facebookresearch/llama/blob/main/MODEL_CARD.md

在 Meta 的 llama-recipes Github repo 中提供了如何快速开始微调以及如何为微调模型运行推理的示例。

repo 地址:https://github.com/facebookresearch/llama-recipes/

查阅 Meta 最近发布的编码人工智能工具 Code Llama,这是一个建立在 Llama 2 基础上的人工智能模型,针对生成和分析代码的能力进行了微调。

Code Llama 地址:https://about.fb.com/news/2023/08/code-llama-ai-for-coding/

阅读《负责任使用指南》,它提供了以负责任的方式构建由大语言模型 (LLM) 支持的产品的最佳实践和注意事项,涵盖了从开始到部署的各个开发阶段。

指南地址:https://ai.meta.com/llama/responsible-use-guide/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/212804.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣每日一题day24[150. 逆波兰表达式求值]

给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算对象&#xff09;都可以是一个整数或者另一个表达式。两个…

oracle sql相关语法

SQL*PLUS 在SQL*PLUS执行&#xff0c;会在执行后显示查询的执行计划和统计信息 SET AUTOTRACE ON;SELECT * FROM your_table WHERE column_name value;SET AUTOTRACE OFF;PLSQL PLSQL查询sql界面&#xff0c;鼠标右键&#xff0c;点击执行计划&#xff0c;会出现sql的执行计…

非功能关键知识总结(一)

文章目录 一、稳定性(一)、服务级别协议1、SLA2、OLA3、UC (二)、可用性指标(三)、突发事件等级 三、质量(一)、千行代码缺陷数量(二)、软件质量模型的发展(三)、产品质量模型 四、安全(一)、网络安全 五、灾备(一)、灾备指标(二)、灾难恢复等级(三)、容灾技术分类 一、稳定性 …

V8引擎类型转换(VIP课程)

这一章是源于一道面试题 完成以下条件并且输出console if(a 1 && a 2 && a 3) {console.log(true) }好家伙 乍一看一个变量怎么可能等于三个值&#xff1f;带着疑问我们去深入了解 类型系统 在JavaScript中类型系统不同于别的语言&#xff0c;例如JavaSc…

【1】基于多设计模式下的同步异步日志系统-项目介绍

1. 项目介绍 本项⽬主要实现⼀个日志系统&#xff0c; 其主要支持以下功能: • 支持多级别日志消息 • 支持同步日志和异步日志 • 支持可靠写⼊日志到控制台、文件以及滚动文件中 • 支持多线程程序并发写日志 • 支持扩展不同的日志落地⽬标地 2. 开发环境 • CentOS 7 • vs…

免费网站快速收录工具,2023最新网站收录方法

在当今数字化时代&#xff0c;拥有一个被搜索引擎快速收录的网站对于个人、企业或机构而言至关重要。网站的快速收录意味着更广泛的曝光和更多的访问流量&#xff0c;这对于网络存在的任何实体都是非常有价值的。 网站快速收录的重要性 在庞大的互联网世界中&#xff0c;一切…

汇编学习记录

前言 这篇文章是自己在专升本录取~本科开学前学习记录&#xff0c;破解软件的学习在2022年4月 - 2022年5月&#xff0c;汇编学习时间大约为2022年7月 - 2022年9月&#xff0c;我将往期上传的博文整理为一篇文章&#xff0c;作为归纳总结。 以后若继续学习相关领域&#xff0c;此…

003、应用程序框架-UIAbility

之——UIAbility 目录 之——UIAbility 杂谈 正文 1.UIAbility 2.基本使用 2.1 创建Ability工程 2.2 添加基础功能 2.3 新建页面 2.4 页面间的跳转 3.生命周期 总结 杂谈 UIAbility&#xff0c;其中的页面创建、页面间的跳转、数据传递、生命周期。 正文 1.UIAbil…

【Android】MMKV实现本地持久化

引入 (测试操作机器是华为Mate 20 Pro 128G&#xff0c;Android 10&#xff0c;每组重复1k次&#xff0c;时间单位是ms) 可以看出MMKV的耗时比其他耗时少的离谱。再看多进程下的性能&#xff1a; 不必多说。再看和DataStore的对比&#xff1a; 简介 根据MMKV官方文档所言 MM…

波奇学C++:智能指针(二):auto_ptr, unique_ptr, shared_ptr,weak_ptr

C98到C11&#xff1a;智能指针分为auto_ptr, unique_ptr, shared_ptr&#xff0c;weak_ptr,这几种智能都是为了解决指针拷贝构造和赋值的问题 auto_ptr&#xff1a;允许拷贝&#xff0c;但只保留一个指向空间的指针。 管理权转移&#xff0c;把拷贝对象的资源管理权转移给拷贝…

深度学习记录--计算图(前向后向传播)

什么是计算图&#xff1f; 从一个例子入手&#xff1a; 将函数J的计算用流程图表示出来&#xff0c;这样的流程图被称为计算图 简单来说&#xff0c;计算图是用来显示每个变量间的关系的一种图 两种传播方式 计算图有两种传播方式&#xff1a;前向传播 和 后向传播 什么是前…

手写VUE后台管理系统7 - 整合Less样式

整合LESS 安装使用 Less&#xff08;Leaner Style Sheets&#xff09;&#xff0c;是一门向后兼容的 CSS 扩展语言。 Less 官网&#xff1a;https://less.bootcss.com/ 安装 yarn add less安装完成就可以直接使用了 使用 以文件形式定义全局样式 在 assets 目录下创建 less …

精准长尾关键词批量挖掘工具,长尾关键词挖掘正确使用方法

互联网时代&#xff0c;SEO已然成为网站推广的关键一环。而在SEO的世界里&#xff0c;长尾关键词无疑是一块被广泛忽视却蕴含着巨大潜力的宝地。 什么是长尾关键词 长尾关键词&#xff0c;指的是那些相对不那么热门、搜索量较低但更为具体、更贴近用户真实需求的关键词。与短…

JAVAEE 初阶 多线程基础(五)

可重入锁 死锁 内存可见性问题 一 可重入锁二.死锁场景1. 一个线程一把锁场景2. 两个线程两把锁场景3. n个线程m把锁(哲学家就餐问题) 三.Java库中的标准类四.内存可见性问题 一 可重入锁 谈到可重入锁,需要再次回顾线程安全问题原因 1.根本原因:线程的抢占式执行,随机调度 2.多…

【Erlang进阶学习】2、匿名函数

受到其它一些函数式编程开发语言的影响&#xff0c;在Erlang语言中&#xff0c;将函数作为一个对象&#xff0c;赋予其“变量”的属性&#xff0c;即为我们的匿名函数 或 简称 fun&#xff0c;它具有以下特性&#xff1a; &#xff08;匿名函数&#xff1a;不是定义在Erlang模…

基于单片机的多功能视力保护器(论文+源码)

1.系统设计 多功能视力保护器在设计过程中能够对用户阅读过程中的各项数据信息进行控制&#xff0c;整体设计分为亮种模式&#xff0c;分别是自动模式&#xff0c;手动模式。在自动模式的控制下&#xff0c;当单片机检测当前光照不强且有人时就开启LED灯&#xff0c;并且会根据…

uView ui 1x uniapp 表格table行内容长度不一导致高度不统一而出现的不对齐问题

问题 因为td单元格内空长度不定导致行单元格未对齐 解决&#xff1a; 重置td的高度&#xff1a;height:100% 改为height:auto !import <u-table><u-tr v-for"(item,index) in Lineinfo.Cust_Name" ><u-td style"height: auto !important;back…

C++ day49 买卖股票的最佳时机

题目1&#xff1a;121 买卖股票的最佳时机 题目链接&#xff1a;买卖股票的最佳时机 对题目的理解 prices[i]表示一支股票在第i天的价格&#xff0c;只能在某一天买入这支股票&#xff0c;并在之后的某一天卖出该股票&#xff0c;从而获得最大利润&#xff0c;返回该最大值&…

Git中如何按日期进行checkout

Git的checkout命令 在Git中&#xff0c;checkout命令是常用的操作之一。它允许我们切换到不同的分支或指定的提交。通过checkout命令&#xff0c;我们可以在代码库中切换到特定的提交版本&#xff0c;这也意味着我们可以按日期进行checkout。 按日期进行checkout的方法 要按…

Mysql之数据处理增删改

Mysql之数据处理增删改查 插入数据INSERT INTO语句的使用INSERT 与子查询结合 更新数据(修改数据)UPDATE SET语句 删除数据DELETE FROM语句 Mysql8新特性&#xff1a;计算列 插入数据 INSERT INTO语句的使用 用 INSERT INTO 语句&#xff0c;向表中插入数据 方式一&#xff1a;…