如何使用共享GPU平台搭建LLAMA3环境(LLaMA-Factory)

0. 简介

最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的[Compshare](https://www.compshare.cn/?
ytag=GPU_lovelyyoshino_Lcsdn_csdn_display)的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡2.6元,月卡只需要1.7元每小时,并附带200G的免费磁盘空间。暂时已经满足我的使用需求了,同时支持访问加速,独立IP等功能,能够更快的完成项目搭建。
在这里插入图片描述
而且在使用后可以写对应的博客,可以完成500元的赠金,完全可以满足个人对GPU的需求。
在这里插入图片描述

1. 账号注册与使用

优刻得平台的注册还是很方便的。普通用户走这个注册渠道就可以,如果是有额外需求的可以联系官方客服来提供制定需求的GPU资源,暂时其实4090已经完全够我们个人使用了。
在这里插入图片描述
在注册完毕后,我们的界面长这样,通过点击创建资源即可完成资源环境的创建
在这里插入图片描述
点进去后,我们可以看到大多数常用的大模型环境已经安装适配完毕。我们点击即可使用这些快速配置好的环境,不需要额外安装CUDA这些比较麻烦的环境配置,注册即可使用。
在这里插入图片描述

2. 如何搭建LLAMA3

之前我们曾经深度解析过LLaMA-Factory这个项目,优刻得平台也已经集成了,这对于我而言非常友善。我完全可以省下大量的环境配置步骤,并专心于项目的二次开发和使用。
在这里插入图片描述

相比于隔壁的autoDL而言,这确实能节省很多时间。独立IP也可以非常便捷的完成ssh远程连接(现挖个坑,后面再说)。这里我们使用的LLaMA-Factory支持很多模型的便捷整合,并可以支持市面上绝大多数的微调或者全量的方法。
在这里插入图片描述

2.1 如何设置 LLaMA-Factory

首先我们在Github上拉取对应的项目,并安装制定的环境

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,metrics]

如果需要隔离环境并自己手动安装环境可以尝试(必须要执行pip install -e .[torch,metrics]

# Create and activate a virtual environment
python -m venv llama-env 
source llama-env/bin/activate# Install required packages by LlaMA-Factory
pip install -r requirements.txt
pip install -e .[torch,metrics]

2.2 准备数据

LLaMA-Factory 在 data 文件夹中提供了多个训练数据集,您可以直接使用它们。如果您打算使用自定义数据集,请按照以下方式准备您的数据集。

请将您的数据以 json 格式进行组织,并将数据放入 data 文件夹中。LLaMA-Factory 支持以 alpacasharegpt 格式的数据集。

alpaca 格式的数据集应遵循以下格式:

[{"instruction": "user instruction (required)","input": "user input (optional)","output": "model response (required)","system": "system prompt (optional)","history": [["user instruction in the first round (optional)", "model response in the first round (optional)"],["user instruction in the second round (optional)", "model response in the second round (optional)"]]}
]

sharegpt 格式的数据集应遵循以下格式:

[{"conversations": [{"from": "human","value": "user instruction"},{"from": "gpt","value": "model response"}],"system": "system prompt (optional)","tools": "tool description (optional)"}
]

在 data/dataset_info.json 文件中提供您的数据集定义,并采用以下格式:

对于 alpaca 格式的数据集,其 dataset_info.json 文件中的列应为:

"dataset_name": {"file_name": "dataset_name.json","columns": {"prompt": "instruction","query": "input","response": "output","system": "system","history": "history"}
}

对于 sharegpt 格式的数据集,dataset_info.json 文件中的列应该包括:

"dataset_name": {"file_name": "dataset_name.json","formatting": "sharegpt","columns": {"messages": "conversations","system": "system","tools": "tools"},"tags": {"role_tag": "from","content_tag": "value","user_tag": "user","assistant_tag": "assistant"}}

2.3 数据下载

LLaMA-Factory项目内置了丰富的数据集,统一存储于data目录下。您可以跳过本步骤,直接使用内置数据集。您也可以准备自定义数据集,将数据处理为框架特定的格式,放在data下,并且修改dataset_info.json文件。

在本教程中,PAI提供了一份多轮对话数据集,执行以下命令下载数据。

cd LLaMA-Factory
wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama_factory/data.zip
mv data rawdata && unzip data.zip -d data

在这里插入图片描述

3. LLAMA3对话体验

由于我们是控制台没有办法用网页用户界面,所以没有办法使用:CUDA_VISIBLE_DEVICES=0 GRADIO_SHARE=1 llamafactory-cli webui完成微调。所以我们直接用快捷指令微调。这里提供了多样化的大模型微调示例脚本。

3.1单 GPU LoRA 微调

3.2(增量)预训练
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_pretrain.yaml
3.3 指令监督微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_sft.yaml
3.4 多模态指令监督微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llava1_5_lora_sft.yaml
3.5 奖励模型训练
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_reward.yaml
3.6 PPO 训练
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_ppo.yaml
3.7 DPO/ORPO/SimPO 训练
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_dpo.yaml
3.8 KTO 训练
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_kto.yaml
3.9 预处理数据集

对于大数据集有帮助,在配置中使用 tokenized_path 以加载预处理后的数据集。

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_preprocess.yaml
3.10 在 MMLU/CMMLU/C-Eval 上评估
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval examples/lora_single_gpu/llama3_lora_eval.yaml
3.11 批量预测并计算 BLEU 和 ROUGE 分数
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_predict.yaml

3.12 单 GPU QLoRA 微调

3.12.1 基于 4/8 比特 Bitsandbytes 量化进行指令监督微调(推荐)
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_bitsandbytes.yaml
3.12.2 基于 4/8 比特 GPTQ 量化进行指令监督微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_gptq.yaml
3.12.3 基于 4 比特 AWQ 量化进行指令监督微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_awq.yaml
3.12.4 基于 2 比特 AQLM 量化进行指令监督微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_aqlm.yaml

3.13 多 GPU LoRA 微调

3.13.1 在单机上进行指令监督微调
CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/lora_multi_gpu/llama3_lora_sft.yaml
3.13.2 在多机上进行指令监督微调
CUDA_VISIBLE_DEVICES=0,1,2,3 NNODES=2 RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/lora_multi_gpu/llama3_lora_sft.yaml
CUDA_VISIBLE_DEVICES=0,1,2,3 NNODES=2 RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/lora_multi_gpu/llama3_lora_sft.yaml
3.13.3 使用 DeepSpeed ZeRO-3 平均分配显存
CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/lora_multi_gpu/llama3_lora_sft_ds.yaml

3.14 多 NPU LoRA 微调

3.14.1 使用 DeepSpeed ZeRO-0 进行指令监督微调
ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/lora_multi_npu/llama3_lora_sft_ds.yaml

3.15 多 GPU 全参数微调

3.15.1 在单机上进行指令监督微调
CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/full_multi_gpu/llama3_full_sft.yaml
3.15.2 在多机上进行指令监督微调
CUDA_VISIBLE_DEVICES=0,1,2,3 NNODES=2 RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/full_multi_gpu/llama3_full_sft.yaml
CUDA_VISIBLE_DEVICES=0,1,2,3 NNODES=2 RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/full_multi_gpu/llama3_full_sft.yaml
3.15.3 批量预测并计算 BLEU 和 ROUGE 分数
CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/full_multi_gpu/llama3_full_predict.yaml

3.16 合并 LoRA 适配器与模型量化

3.16.1 合并 LoRA 适配器

注:请勿使用量化后的模型或 quantization_bit 参数来合并 LoRA 适配器。

CUDA_VISIBLE_DEVICES=0 llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml
3.16.2 使用 AutoGPTQ 量化模型
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export examples/merge_lora/llama3_gptq.yaml

3.16.3 推理 LoRA 模型

使用 CUDA_VISIBLE_DEVICES=0,1 进行多卡推理。

3.16.4 使用命令行接口
CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
3.17 使用浏览器界面
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat examples/inference/llama3_lora_sft.yaml
3.17.1 启动 OpenAI 风格 API
CUDA_VISIBLE_DEVICES=0 llamafactory-cli api examples/inference/llama3_lora_sft.yaml

3.18 杂项

3.18.1 使用 GaLore 进行全参数训练
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/galore/llama3_full_sft.yaml
3.18.2 使用 BAdam 进行全参数训练
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/badam/llama3_full_sft.yaml
3.18.3 LoRA+ 微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/loraplus/llama3_lora_sft.yaml
3.18.4 深度混合微调
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/mod/llama3_full_sft.yaml
3.18.5 LLaMA-Pro 微调
bash examples/extras/llama_pro/expand.sh
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/llama_pro/llama3_freeze_sft.yaml
3.18.6 FSDP+QLoRA 微调
bash examples/extras/fsdp_qlora/single_node.sh

我们这里演示的就是对话实例

CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/llama3_lora_sft.yaml

运行后出现以下问题:

OSError: You are trying to access a gated repo.
Make sure to have access to it at https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct.
401 Client Error. (Request ID: Root=1-665eec65-4bc590735915f5561f42d963;3d28d986-a6df-42b5-83d3-5483ef4d2e9f)

这代表部分数据集的使用需要确认,这里推荐使用下述命令登录您的 Hugging Face 账户

pip install --upgrade huggingface_hub
huggingface-cli login

将token填入
在这里插入图片描述
然后我们将meta-llama/Meta-Llama-3-8B-Instruct替换为NousResearch/Meta-Llama-3-8B-Instruct,在 examples/inference/llama3_lora_sft.yaml中。
在这里插入图片描述

这里我们会发现仍然抱错,这里需要我们sft预训练一下。然后经过一系列下载后,很快就可以进行预训练了。

CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_sft.yaml

在这里插入图片描述

然后经过一系列下载后,很快就可以进行对话了
在这里插入图片描述
在这里插入图片描述

4. 参考链接

https://help.aliyun.com/zh/pai/use-cases/fine-tune-a-llama-3-model-with-llama-factory

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达梦数据库(DMDB)基本使用

达梦数据库(DMDB)作为一款高性能的国产关系型数据库管理系统,其丰富的功能和灵活的操作为用户提供了强大的数据管理支持。以下是对达梦数据库基础操作的详细介绍: 1. 模式(Schema)管理 在达梦数据库中&am…

Docker:镜像命令和容器命令

文章目录 镜像命令docker imagesdocker image inspeactdocker tag 容器命令docker rundocker ps 下面进入到关于镜像命令的学习中 镜像命令 docker images 这个命令的功能是列出本地的镜像 语法: docker images [options] [repository[:tag]]别名: …

计算机视觉中的low-level与 high-level任务

文章目录 low-level任务high-level任务区别联系others参考在计算机视觉领域中,low-level任务和high-level任务是两个重要的概念,他们分别涉及图像处理和分析的不同的层次。 low-level任务 low-level任务主要关注的是图像的底层特征,如颜色、纹理、边缘、形状等。通常涉及对…

js中-null不是基本类型

在JavaScript中,null 也不是基本类型(也称作原始类型或简单数据类型),但它被归类为一种特殊的对象类型。这是一个历史遗留问题,也是JavaScript语言设计上的一些独特之处。在早期版本的ECMAScript规范中,typ…

【安装笔记-20240608-Linux-动态域名更新服务之YDNS】

安装笔记-系列文章目录 安装笔记-20240608-Linux-动态域名更新服务之YDNS 文章目录 安装笔记-系列文章目录安装笔记-20240608-Linux-动态域名更新服务之YDNS 前言一、软件介绍名称:YDNS主页官方介绍 二、安装步骤测试版本:openwrt-23.05.3-x86-64注册填…

Linux基础指令网络管理003

本章主要讲述如何进行网络诊断。 操作系统: CentOS Stream 9 操作步骤: 操作指令 ping: 测试网络连接的连通性和延迟。 [rootlocalhost ~]# ping 192.168.80.111 PING 192.168.80.111 (192.168.80.111) 56(84) 比特的数据。 64 比特&a…

从0~1开发财务软件

1.获取图形验证码接口 功能要求 1、随机生成6位字符 2、将字符生成base64位格式的图片,返回给前端 3、将生成的字符存储到redis中,用匿名身份id(clientId)作为key,验证码作为value。 clientId通过/login/getClien…

Python怎么调用JAR包:揭秘跨语言交互的奥秘

Python怎么调用JAR包:揭秘跨语言交互的奥秘 在编程领域,跨语言交互一直是一个热门话题。当Python需要调用Java编写的JAR包时,这种跨语言交互的需求就显得尤为突出。那么,Python究竟是如何调用JAR包的呢?本文将从四个方…

Angular知识概览

Angular 是一个由 Google 维护的开源前端框架,用于构建动态网页应用。以下是对 Angular 主要概念和特性的概览: 1. Angular 的核心概念 - 组件 (Component):Angular 应用的基本构建块。每个组件包括一个 TypeScript 类,用于处理数…

1-5 C语言操作符

C语言提供了非常丰富的操作符,使得C语言使用起来非常的方便 算数操作符: 加 减 乘 除 取模 【 - * / %】 注:除号的两端都是整数的时候执行的是整数的除法,如果…

MATLAB基础应用精讲-【数模应用】主成分(pca)分析(附python代码实现)

目录 前言 知识储备 降维概述 算法原理 什么是PCA PCA降维过程 PCA算法数学步骤 选择主成分个数(即k的值) sklearn中参数的解释 数学模型 协方差 协方差矩阵 ​编辑 ​编辑 原理推导 ​编辑​编辑​编辑​编辑 实际操作 主成分分析的计算方法 方法1. 协方差+…

65. UE5 RPG 实现远程攻击

前面,我们实现了敌人的近战普通攻击,还兼容了对于没有武器的敌人的攻击。有近战就要有远程,这一篇,我们实现一下敌人的远程攻击。 首先,由于创建的资源增多,我们将GA和GE按敌人和英雄的类别分开&#xff0c…

MySQL—多表查询—联合查询

一、引言 之前学习了连接查询。现在学习联合查询。 union:联合、联盟 对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集 涉及到两个关键字:union 和 union all 注意: union 会把上面两个SQL查询…

C++的STL 中 set.map multiset.multimap 学习使用详细讲解(含配套OJ题练习使用详细解答)

目录 一、set 1.set的介绍 2.set的使用 2.1 set的模板参数列表 2.2 set的构造 2.3 set的迭代器 2.4 set的容量 2.5 set的修改操作 2.6 set的使用举例 二、map 1.map的介绍 2.map的使用 2.1 map的模板参数说明 2.2 map的构造 2.3 map的迭代器 2.4 map的容量与元…

深圳中赢娱乐控股集团至江西省宜春市袁州区访问交流

2024年6月7日,深圳中赢娱乐控股集团受邀来到江西省宜春市袁州区就“短剧文旅”项目展开深度座谈,并与飞剑潭乡达成合作意向。 下午2:30,深圳中赢控股集团董事李平进带团队一行12人,访问宜春市袁州区,宜春市副市长谢萍、…

嵌入式学习——4——C++中的动态内存分配和回收(堆区)

1、内存的分配与回收 C语言中使用的是malloc和free函数进行动态内存分配和回收的。 C中依然可以使用上述的两个函数来完成动态内存分配和回收的。 C也给用户提供了两个关键字new、delete来完成动态内存分配和回收的 单个分配、回收 //在堆区申请了int类型的大小空间&#xff0c…

html--圣诞树

将以下代码保存到txt文件中&#xff0c;并改名为xx.html <html> <head> <title>圣诞树</title> <meta charset"utf-8" > <style> html, body { width: 100%; height: 100%; margin: 0; padding: 0; border: 0; } div { margin: …

【嵌入式DIY实例】-OLED显示LM35传感器数据

OLED显示LM35传感器数据 文章目录 OLED显示LM35传感器数据1、LM35传感器介绍2、硬件准备与接线2、代码实现本文将介绍如何将 ESP8266 NodeMCU 开发板(ESP12-E 模块)与 LM35 模拟温度传感器和 SSD1306 OLED 显示屏连接。 在本次实例中,SSD1306 OLED 显示屏(12864 像素)用于…

Java--命令行传参

1.有时你希望运行一个程序时再传递给它消息&#xff0c;这要靠传递命令行参数给main&#xff08;&#xff09;函数实现 2.选中文件右键找到如图选项并打开 3.在文件地址下输入cmd空格符号&#xff0c;再按回车调出命令窗口 4.如图一步步进行编译&#xff0c;在向其传入参数&…

echarts柱状图的背景动态效果

这里的动态效果实现原理&#xff0c;就是相当于柱状图多了一组同系列数据&#xff0c;其值与数组展示数据一致&#xff08;类似下图&#xff09; 即&#xff0c;柱形图的每一个柱体都有它对应的另外一个柱体 其中白色柱体要与展示柱体重合&#xff0c;效果类似与给柱体做背景…