在 Mac M1 上运行 Llama 2 并进行训练

在 Mac M1 上运行 Llama 2 并进行训练

在这里插入图片描述

Llama 2 是由领先的人工智能研究公司 Meta (前Facebook)开发并发布的下一代大型语言模型 (LLM)。 它基于 2 万亿个公共数据 token 进行了预训练,旨在帮助开发人员和企业组织构建基于人工智能的生成工具和用户体验。Llama 2 在许多外部基准测试中都优于其他开源语言模型,包括推理、编码、熟练程度和知识测试。更关键的是,相比 ChatGPTClaude 等闭源大模型,Llama 2 更加开放友好,可以免费用于研究和商业用途,并且可以方便地从 Meta 网站上下载。因此 Llama 2 是进行大模型研究的理想选择。

然而,Llama 2 对苹果 M1 芯片的支持不太好,如果你想在 Mac M1 设备上运行 Llama 2 并使用自己的数据对其进行训练,需要安装一些额外的依赖和环境,并进行相应的配置。本文将指导你完成在 Mac M1 上设置 Llama 2 的过程,并根据使用你自己的数据对其进行精调。

文章目录

    • 安装依赖
    • 下载 Llama 2 模型重量和代码
    • 精调Llama 2
    • 使用精调 Llama 2 模型
    • 结论

安装依赖

要想在 Mac M1 上运行 Llama 2,你需要安装一些依赖项,例如 PythonPyTorchTensorFlowHugging Face Transformers。你可以使用 HomebrewAnaconda 来安装这些软件包。例如,要使用 Homebrew 安装 Python 3.9,可以在终端中运行以下命令:

brew install python@3.9

要安装 PyTorch for Mac M1,可以按照以下链接中的说明进行操作:https://pytorch.org/get-started/locally/#macos-version;

同样地,要安装 TensorFlow for Mac M1,可以按照以下链接中的说明进行操作:https://developer.apple.com/metal/tensorflow-plugin/。

Hugging Face Transformers 的安装相对简单,只需在终端中运行以下命令:

pip install transformers

完成上述三个依赖项后,环境就搭建好了。

下载 Llama 2 模型重量和代码

环境依赖搭建好后,接下来就要下载 Llama 2 模型权重和代码。你需要在 Meta 网站上填写表格并同意其隐私政策。 提交表格后,会收到一封电子邮件,其中包含下载模型文件的链接。这里有好多个不同参数规模的模型,你可以根据具体需要选择,参数范围从 7B 到 70B。其中 Llama-2-chat 针对对话场景进行了特别优化。

为了方便讲解,本教程中,你将使用 Llama-2-chat-7B 模型作为演示。你也可以从此链接 https://ai.meta.com/llama/llama-2-chat-7B.zip 下载模型权重和代码。下载下来的 zip 文件,可以将其解压缩到任意目录中。解压后应该会看到一个名为 llama-2-chat-7B 的文件夹,其中包含以下文件:

  • config.json: 模型配置文件。
  • pytorch_model.bin: PyTorch 模型权重文件。
  • tokenizer.json: 模型的 tokenizer 文件。
  • vocab.txt: 模型的字典文件。
  • run_generation.py: 使用模型生成文本的 Python 脚本。

精调Llama 2

要使用自己的数据对 Llama 2 进行精调,首先需要准备一个包含训练数据的文本文件。文件中的每一行都应包含对话内容或模型说明。例如,如果你想针对客服机器人场景精调 Llama 2,训练文件可能如下所示:

 USER: 你好,我的订单有问题。
LLAMA: 你好,很高兴为您服务。麻烦您告诉我一下订单号。
 USER: #123456789
LLAMA: 收到。这个订单有什么问题呢?
 USER: 我收到的货物是坏的。
LLAMA: 很抱歉给您带来此困扰。你能发一下订单收据和物品照片给我吗?我帮你走免费换货流程。
 USER: 可以。发给你了。
LLAMA: 感谢您的配合。我会尽快处理您的问题。对于本次货损,再次向您致以歉意。
 USER: 谢谢。
LLAMA: 不客气。还有其他问题吗?
 USER: 没有了。
LLAMA: 那感谢您选择你的服务。祝您生活愉快。

你可以将训练文件另存为 train.txt 与模型文件放在同一目录下。然后,在终端中运行以下命令,使用你的训练数据精调 Llama 2

python run_generation.py --model_type gpt2 --model_name_or_path ./llama-2-chat-7B --train_data_file ./train.txt --output_dir ./llama-2-chat-7B-finetuned --do_train --per_device_train_batch_size 1 --gradient_accumulation_steps 4 --learning_rate 5e-5 --num_train_epochs 3 --save_steps 1000 --save_total_limit 1

这个命令参数比较多,你逐个解析一下:

  • model_type: 模型的类型,Llama 2gpt2
  • model_name_or_path: 模型目录的路径,在本例中为 ./llama-2-chat-7B
  • train_data_file: 训练数据文件的路径,本例中为 ./train.txt
  • output_dir: 输出目录的路径,精调后的模型将保存在这里,在本例中为 ./llama-2-chat-7B-finetuned
  • do_train: 表明你要训练模型。
  • per_device_train_batch_size: 每个设备用于训练的批大小,在本例中为 1
  • gradient_accumulation_steps: 执行向后/更新过程之前累积梯度的步数,在本例中为 4
  • Learning_rate: 训练的学习率,本例中为 5e-5
  • num_train_epochs: 训练模型的轮数,本例中为 3
  • save_steps: 每个多少步保存一次检查点,本例中为 1000
  • save_total_limit: 要保留的检查点的最大数量,本例中为 1

你可以根据需要和可用资源调整这些参数。请注意,精调 Llama 2 可能需要很长时间,并且需要大量内存和算力,尤其是对于较大的模型。你可以通过查看终端中打印的日志来监控训练过程的进度。

使用精调 Llama 2 模型

使用你自己的数据对 Llama 2 进行精调后,就可以通过在终端中运行以下命令来使用精调后的模型:

python run_generation.py --model_type gpt2 --model_name_or_path ./llama-2-chat-7B-finetuned --length 100 --prompt "USER: 你好,我想取消我的订单。"

参数说明如下:

  • model_type: 模型的类型,Llama 2gpt2
  • model_name_or_path: 精调模型目录的路径,在本例中为 ./llama-2-chat-7B-finetuned
  • length: 生成文本的最大长度,在本例中为 100 个token。
  • prompt: 模型的文本输入,例如示例中的“USER: 你好,我想取消我的订单。”

你可以根据需要和偏好更改这些参数。你还可以使用 --no_cuda 标志并在终端中输入文本来与模型进行交互。 例如:

python run_generation.py --model_type gpt2 --model_name_or_path ./llama-2-chat-7B-finetuned --length 100 --no_cuda
 USER: 你好,我想取消我的订单。
LLAMA: 你好,感谢您联系你。我能问一下您为什么要取消订单吗?
 USER: 我不需要了。
LLAMA: 明白了解。很遗憾你的产品和服务没有让您满意。您可以自助式取消订单,只要在订单列表中找到要取消的订单,然后点击查看详情,在页面最下方有取消按钮。
 USER: 谢谢。
LLAMA: 不客气。祝您生活愉快。

结论

Llama 2 是一种功能强大且多样的大型语言模型,可用于各种生成式和对话式 AI 应用。通过使用你自己的数据对其进行精调,你可以根据你的特定场景和用例对其进行自定义,并提高其性能和生成质量。希望本文对你有所帮助。

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

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

相关文章

Spring Boot + EasyUI 创建第一个项目(一)

创建一个Spring Boot和EasyUI相结合的项目。 一、构建一个Spring Boot项目 Spring Boot之创建一个Spring Boot项目(一)-CSDN博客 二、配置Thymeleaf Spring Boot Thymeleaf(十一)_thymeleaf 设置字体_人……杰的博客-CSDN博客…

程序员们平时都喜欢逛什么论坛呢?

网站不在多,好用就行;技术不求精,好摸鱼就行。是时候祭出我收藏夹里的这15个网站了! 求职必备:牛客网 https://www.nowcoder.com/ 年少不知牛客好,等到要面试的时候才发现是神器。 你可以在牛客上搜索到一…

NetCore IIS Redis JMeter 登录压力测试

近期,由于某项目验收需要,需要登录接口同时满足至少400个账号同时并发登录,于是开始编写测试代码,以满足项目业务需要。首先,安装jdk,由于本机已安装jdk8: 如果你机器上没有安装jdk,…

第6周 .NET

好嘛!本来以为上周SQL Server环境配置等已经够恶心了,没想到这周又得去搞所谓的Microsoft Visual Studio 2005了。 首先非常离谱的是,这个Microsoft Visual Studio 2005如果就是指Visual Studio 2005,那么已经是8年前的老的不行的…

SpringCloud复习:(2)@LoadBalanced注解的工作原理

LoadBalanced注解标记了一个RestTemplate或WebClient bean使用LoadBalancerClient来进行负载均衡。 LoadBalancerAutoConfiguration类给带注解的RestTemplate添加了拦截器:LoadBalancerInterceptor. 具体流程如下: 首先定义一个LoadBalancerInterceptor…

大语言模型(LLM)综述(三):大语言模型预训练的进展

A Survey of Large Language Models 前言4. PRE-TRAINING4.1数据收集4.1.1 数据源4.1.2 数据预处理4.1.3 预训练数据对LLM的影响 4.2 模型架构4.2.1 典型架构4.2.2 详细配置4.2.3 预训练任务4.2.4 解码策略4.2.5 总结和讨论 4.3 模型训练4.3.1 优化设置4.3.2 可扩展的训练技术 …

SpringMVC Day 03 : 处理静态资源

前言 欢迎来到第三天的 SpringMVC 学习系列!在前两天的教程中,我们已经学习了如何搭建 SpringMVC 环境、创建控制器和处理请求等基础知识。今天,我们将继续探索 SpringMVC 的功能,并学习如何处理静态资源。 在现代 Web 应用程序…

Apifox创建团队 项目 接口 邀请成员步骤演示

我们打开Apifox 找到 个人空间 然后 点击新建团队 然后这里 我们输入名字 点击确定 我们的团队就出来了 然后 我们点击新建项目 然后肯定是 http 项目名称输入一下 然后 语言 我们中国肯定是中文的 然后点击确定 建好之后 我们就会进入自己的项目啦 然后 我们可以新建个接…

【机器学习合集】人脸表情分类任务Pytorch实现TensorBoardX的使用 ->(个人学习记录笔记)

人脸表情分类任务 注意:整个项目来自阿里云天池,下面是开发人员的联系方式,本人仅作为学习记录!!!该文章原因,学习该项目,完善注释内容,针对新版本的Pytorch进行部分代码…

R与Python结合,在安装tensorflow时遇到了报错--尚未解决

在服务器上安装tensorflow时,遇到了一个报错信息: 在网上找到一个类似的错误(TensorFlow_error),见下图,但是博主没有给出解决办法。

解决javascript报错:SyntaxError: Invalid Unicode escape sequence

在处理cookie时报这个错: 网上搜了一圈都说是反斜杠问题,要把\替换成/ 但是试了网上的replace替换: replace(/\\/g, /) 结果没有用!!! 然后我干脆直接做了一个最简单字符串赋值,再打印出来。…

macOS鼠标管理操作增强BetterMouse简体中文

BetterMouse是一款专为Mac用户设计的鼠标增强工具,旨在帮助用户更好地掌握和管理鼠标操作。它提供了全局鼠标手势、高度可定制的鼠标设置选项以及一些有用的鼠标增强功能,如鼠标放大镜、鼠标轨迹和应用程序切换功能。这些功能可以大大提高用户的工作效率…

单例模式及其使用场景

单例模式(Singleton):指在一个系统中某个类只存在一个实例,类中自行实例化,实例向该系统提供统一的访问接口。 单例模式有两种表现形式,饿汉式:类加载时,就进行实例化;懒…

23款奔驰E300L升级几何多光束大灯 车辆自检等功能

奔驰几何多光束大灯核心特点就是通过内部的84颗可独立控制的LED光源,行车远光灯会甄别对向驶来的车辆或者行人,并且动态的跟随目标,之后阴影话该区域,避免晃到车辆和行人。 奔驰升级几何多光束 LED 大灯(MULTIBEAM LED…

nu1l-死亡ping命令攻略

book-nu1l docker 虚拟化技术 把传统的虚拟机堪称容器 依赖镜像启动容器,镜像可以理解为模板克隆的虚拟机,删除容器,对镜像没有影响 镜像在云端 本地要使用某个镜像,根据地址,直接从云端拉取 基本命令 # 查看系统…

【unity3D】Rect Transform组件

💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的Rect Transform组件 Rect Transform组件 基础知识详细介绍补充 基础知识 Rect Transform是Unity中的一个UI组件,用于…

适用于物联网的UI设计工具都有哪些?

随着科学技术的飞速发展,“万物相连的互联网”时代逐渐成为现实。如今,物联网已经不是什么新词了。事实上,早在各种屏幕设备诞生之前,人们就与物理世界交织在一起,产生了无数的互动。如何将人们多年积累的互动经验与物…

BurpSuite安装

下载 BurpSuite 下载 Java17 下载后确定版本 java -version获取启动器 密钥生成器 破解 将下载的 BurpSuite、启动器、密钥生成器,放入同一个目录 打开 CMD 进入该目录 启动密钥生成器 java -jar burp-keygen-scz.jar开启新的CMD,进入该目录 启动…

理解什么是接口测试?怎样做接口测试?

一 什么是接口? 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。接口测试主要用于外部系统与系统之…

微信小程序学习(02)

页面导航 - 声明式导航 1. 导航到 tabBar 页面 tabBar 页面指的是被配置为 tabBar 的页面。 在使用<navigator> 组件跳转到指定的 tabBar 页面时&#xff0c;需要指定 url 属性和 open-type 属性&#xff0c;其中&#xff1a; ⚫ url 表示要跳转的页面的地址&#xff0…