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

诗林  高级会员 | 2024-7-30 03:07:10 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 227|帖子 227|积分 681

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上拉取对应的项目,并安装订定的环境
  1. git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
  2. cd LLaMA-Factory
  3. pip install -e .[torch,metrics]
复制代码
如果需要隔离环境并本身手动安装环境可以尝试(必须要执行pip install -e .[torch,metrics])
  1. # Create and activate a virtual environment
  2. python -m venv llama-env
  3. source llama-env/bin/activate
  4. # Install required packages by LlaMA-Factory
  5. pip install -r requirements.txt
  6. pip install -e .[torch,metrics]
复制代码
2.2 准备数据

LLaMA-Factory 在 data 文件夹中提供了多个训练数据集,您可以直接利用它们。如果您计划利用自界说数据集,请按照以下方式准备您的数据集。
请将您的数据以 json 格式举行构造,并将数据放入 data 文件夹中。LLaMA-Factory 支持以 alpaca 或 sharegpt 格式的数据集。
alpaca 格式的数据集应遵循以下格式:
  1. [
  2.   {
  3.     "instruction": "user instruction (required)",
  4.     "input": "user input (optional)",
  5.     "output": "model response (required)",
  6.     "system": "system prompt (optional)",
  7.     "history": [
  8.       ["user instruction in the first round (optional)", "model response in the first round (optional)"],
  9.       ["user instruction in the second round (optional)", "model response in the second round (optional)"]
  10.     ]
  11.   }
  12. ]
复制代码
sharegpt 格式的数据集应遵循以下格式:
  1. [
  2.   {
  3.     "conversations": [
  4.       {
  5.         "from": "human",
  6.         "value": "user instruction"
  7.       },
  8.       {
  9.         "from": "gpt",
  10.         "value": "model response"
  11.       }
  12.     ],
  13.     "system": "system prompt (optional)",
  14.     "tools": "tool description (optional)"
  15.   }
  16. ]
复制代码
在 data/dataset_info.json 文件中提供您的数据集界说,并采用以下格式:
对于 alpaca 格式的数据集,其 dataset_info.json 文件中的列应为:
  1. "dataset_name": {
  2.   "file_name": "dataset_name.json",
  3.   "columns": {
  4.     "prompt": "instruction",
  5.     "query": "input",
  6.     "response": "output",
  7.     "system": "system",
  8.     "history": "history"
  9.   }
  10. }
复制代码
对于 sharegpt 格式的数据集,dataset_info.json 文件中的列应该包括:
  1. "dataset_name": {
  2.     "file_name": "dataset_name.json",
  3.     "formatting": "sharegpt",
  4.     "columns": {
  5.       "messages": "conversations",
  6.       "system": "system",
  7.       "tools": "tools"
  8.     },
  9.     "tags": {
  10.       "role_tag": "from",
  11.       "content_tag": "value",
  12.       "user_tag": "user",
  13.       "assistant_tag": "assistant"
  14.     }
  15.   }
复制代码
2.3 数据下载

LLaMA-Factory项目内置了丰富的数据集,同一存储于data目录下。您可以跳过本步骤,直接利用内置数据集。您也可以准备自界说数据集,将数据处理为框架特定的格式,放在data下,而且修改dataset_info.json文件。
在本教程中,PAI提供了一份多轮对话数据集,执行以下下令下载数据。
  1. cd LLaMA-Factory
  2. wget https://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/llama_factory/data.zip
  3. 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(增量)预训练

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_pretrain.yaml
复制代码
3.3 指令监督微调

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_sft.yaml
复制代码
3.4 多模态指令监督微调

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llava1_5_lora_sft.yaml
复制代码
3.5 奖励模型训练

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_reward.yaml
复制代码
3.6 PPO 训练

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_ppo.yaml
复制代码
3.7 DPO/ORPO/SimPO 训练

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_dpo.yaml
复制代码
3.8 KTO 训练

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_kto.yaml
复制代码
3.9 预处理数据集

对于大数据集有帮助,在设置中利用 tokenized_path 以加载预处理后的数据集。
  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_preprocess.yaml
复制代码
3.10 在 MMLU/CMMLU/C-Eval 上评估

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval examples/lora_single_gpu/llama3_lora_eval.yaml
复制代码
3.11 批量猜测并计算 BLEU 和 ROUGE 分数

  1. 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 量化举行指令监督微调(推荐)

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_bitsandbytes.yaml
复制代码
3.12.2 基于 4/8 比特 GPTQ 量化举行指令监督微调

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_gptq.yaml
复制代码
3.12.3 基于 4 比特 AWQ 量化举行指令监督微调

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_awq.yaml
复制代码
3.12.4 基于 2 比特 AQLM 量化举行指令监督微调

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/qlora_single_gpu/llama3_lora_sft_aqlm.yaml
复制代码
3.13 多 GPU LoRA 微调

3.13.1 在单机上举行指令监督微调

  1. CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/lora_multi_gpu/llama3_lora_sft.yaml
复制代码
3.13.2 在多机上举行指令监督微调

  1. 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
  2. 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 均匀分配显存

  1. 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 举行指令监督微调

  1. 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 在单机上举行指令监督微调

  1. CUDA_VISIBLE_DEVICES=0,1,2,3 llamafactory-cli train examples/full_multi_gpu/llama3_full_sft.yaml
复制代码
3.15.2 在多机上举行指令监督微调

  1. 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
  2. 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 分数

  1. 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 适配器。
  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml
复制代码
3.16.2 利用 AutoGPTQ 量化模型

  1. 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 利用下令行接口

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
复制代码
3.17 利用欣赏器界面

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat examples/inference/llama3_lora_sft.yaml
复制代码
3.17.1 启动 OpenAI 风格 API

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli api examples/inference/llama3_lora_sft.yaml
复制代码
3.18 杂项

3.18.1 利用 GaLore 举行全参数训练

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/galore/llama3_full_sft.yaml
复制代码
3.18.2 利用 BAdam 举行全参数训练

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/badam/llama3_full_sft.yaml
复制代码
3.18.3 LoRA+ 微调

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/loraplus/llama3_lora_sft.yaml
复制代码
3.18.4 深度混合微调

  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/mod/llama3_full_sft.yaml
复制代码
3.18.5 LLaMA-Pro 微调

  1. bash examples/extras/llama_pro/expand.sh
  2. CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/extras/llama_pro/llama3_freeze_sft.yaml
复制代码
3.18.6 FSDP+QLoRA 微调

  1. bash examples/extras/fsdp_qlora/single_node.sh
复制代码
我们这里演示的就是对话实例
  1. CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
复制代码
运行后出现以下问题:
  1. OSError: You are trying to access a gated repo.
  2. Make sure to have access to it at https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct.
  3. 401 Client Error. (Request ID: Root=1-665eec65-4bc590735915f5561f42d963;3d28d986-a6df-42b5-83d3-5483ef4d2e9f)
复制代码
这代表部分数据集的利用需要确认,这里推荐利用下述下令登录您的 Hugging Face 账户
  1. pip install --upgrade huggingface_hub
  2. huggingface-cli login
复制代码
将token填入

然后我们将meta-llama/Meta-Llama-3-8B-Instruct替换为NousResearch/Meta-Llama-3-8B-Instruct,在 examples/inference/llama3_lora_sft.yaml中。

这里我们会发现仍然抱错,这里需要我们sft预训练一下。然后经过一系列下载后,很快就可以举行预训练了。
  1. 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

诗林

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表