首页 > 其他分享 >基于AIACC加速器快速实现LLaMA-7B指令微调

基于AIACC加速器快速实现LLaMA-7B指令微调

时间:2024-10-26 14:47:44浏览次数:10  
标签:llama 7B 训练 -- 实例 ECS LLaMA AIACC

本文基于Alpaca提供了一套LLaMA-7B模型在阿里云ECS上进行指令微调的训练方案,最终可以获得性能更贴近具体使用场景的语言模型。

背景信息

LLaMA(Large Language Model Meta AI )是Meta AI在2023年2月发布的开放使用预训练语言模型(Large Language Model, LLM),其参数量包含7B到65B的集合,并仅使用完全公开的数据集进行训练。LLaMA的训练原理是将一系列单词作为“输入”并预测下一个单词以递归生成文本。

LLM具有建模大量词语之间联系的能力,但是为了让其强大的建模能力向下游具体任务输出,需要进行指令微调,根据大量不同指令对模型部分权重进行更新,使模型更善于遵循指令。指令微调中的指令简单直观地描述了任务,具体的指令格式如下:

{
  "instruction": "Given the following input, find the missing number",
  "input": "10, 12, 14, __, 18",
  "output": "16"
}

Alpaca是一个由LLaMA-7B模型进行指令微调得到的模型,其训练过程中采用的通过指令对LLaMA-7B模型进行小规模权重更新的方式,实现了模型性能和训练时间的平衡。

本文基于Alpaca提供了一套LLaMA-7B模型,基于DeepSpeed进行指令微调训练,并使用AIACC加速训练。AIACC包括ACSpeed和AGSpeed两个加速器。

加速器

说明

相关文档

ACSpeed

AIACC-ACSpeed(简称ACSpeed)是阿里云自研的AI训练加速器,在AI框架层、集合算法层和网络层上分别实现了与开源主流分布式框架的充分兼容,并实现了软硬件结合的全面优化。ACSpeed具有其显著的性能优势,在提高训练效率的同时能够降低使用成本,可以实现无感的分布式通信性能优化。

什么是AI分布式训练通信优化库AIACC-ACSpeed

AGSpeed

AIACC-AGSpeed(简称AGSpeed)是阿里云推出的一个基于PyTorch深度学习框架研发的计算优化编译器,用于优化PyTorch深度学习模型在阿里云GPU异构计算实例上的计算性能,可以实现计算优化。

什么是计算优化编译器AIACC-AGSpeed

重要

  • 阿里云不对第三方模型“llama-7b-hf”的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。

  • 您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。

操作步骤

准备工作

操作前,请先在合适的地域和可用区下创建VPC和交换机。

创建ECS实例

控制台方式

FastGPU方式

  1. 前往实例创建页

  2. 按照向导完成参数配置,创建一台ECS实例。

    需要注意的参数如下。更多信息,请参见自定义购买实例

    • 实例:规格选择ecs.gn7i-c32g1.32xlarge(包含4卡NVIDIA A10 GPU)。

      实例

    • 镜像:使用云市场镜像,名称为aiacc-train-solution,该镜像已部署好训练所需环境。您可以直接通过名称搜索该镜像,版本可选择最新版本。

      选择镜像..png

      说明

      您也可以选择公共镜像(如CentOS 7.9 64位),后续手动部署环境

    • 公网IP:选中分配公网IPv4地址,按需选择计费模式和带宽。本文使用按流量计费,带宽峰值为5 Mbps。

      5 Mbps..png

  3. 添加安全组规则。

    在ECS实例所需安全组的入方向添加一条规则,开放7860端口,用于访问WebUI。具体操作,请参见添加安全组规则

    以下示例表示向所有网段开放7860端口,开放后所有公网IP均可访问您的WebUI。您可以根据需要将授权对象设置为特定网段,仅允许部分IP地址访问WebUI。

    安全组

  4. 使用Workbench连接实例。

    如果使用示例的云市场镜像进行测试,由于环境安装在/root目录下,连接实例时需使用root用户。关于如何连接ECS实例,请参见通过密码或密钥认证登录Linux实例

(可选)手动部署环境

启动训练

  1. 下载tmux并创建一个tmux session。

    yum install tmux
    tmux

    说明

    训练耗时较长,建议在tmux session中启动训练,以免ECS断开连接导致训练中断。

  2. 进入Conda环境。

    conda activate llama_train
  3. 获取llama-7b-hf预训练权重。

    1. 下载llama-7b权重。

      cd /root/LLaMA
      git lfs install
      git clone https://huggingface.co/decapoda-research/llama-7b-hf
    2. 修复官方代码Bug。

      sed -i "s/LLaMATokenizer/LlamaTokenizer/1" ./llama-7b-hf/tokenizer_config.json
  4. 创建并设置DeepSpeed配置文件。

    cd LLaMA/stanford_alpaca

    cat << EOF | sudo tee ds_config.json
    {
      "zero_optimization": {
        "stage": 3,
        "contiguous_gradients": true,
        "stage3_max_live_parameters": 0,
        "stage3_max_reuse_distance": 0,
        "stage3_prefetch_bucket_size": 0,
        "stage3_param_persistence_threshold": 1e2,
        "reduce_bucket_size": 1e2,
        "sub_group_size": 1e8,
        "offload_optimizer": {
          "device": "cpu",
          "pin_memory": true
        },
        "offload_param": {
          "device": "cpu",
          "pin_memory": true
        },
        "stage3_gather_16bit_weights_on_model_save": true
      },
      "communication":{
        "prescale_gradients": true
      },
      "fp16": {
        "enabled": true,
        "auto_cast": false,
        "loss_scale": 0,
        "initial_scale_power": 32,
        "loss_scale_window": 1000,
        "hysteresis": 2,
        "min_loss_scale": 1
      },
      "train_batch_size": "auto",
      "train_micro_batch_size_per_gpu": "auto",
      "wall_clock_breakdown": false,
      "zero_force_ds_cpu_optimizer": false
    }
    EOF
  5. (可选)如果使用多台ECS实例进行训练,需配置hostfile。

    本文使用一台ECS实例进行训练,可跳过此步骤。

    如下示例表示配置两台ECS实例(GPU总数为8)时,需要填入每台ECS实例的内网IP和slots,其中slots表示进程数(即GPU数量)。

    cat > hostfile <<EOF
    {private_ip1} slots=4
    {private_ip2} slots=4
    EOF
  6. 启动训练。

    启动训练的命令脚本如下,alpaca_data.json为指令数据集文件,$MASTER_PORT请替换为2000-65535之间的随机端口号。

    deepspeed --master_port=$MASTER_PORT --hostfile hostfile \
    train.py \
    --model_name_or_path ../llama-7b-hf \
    --data_path ./alpaca_data.json \
    --output_dir ./output \
    --report_to none \
    --num_train_epochs 1 \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 400 \
    --save_total_limit 2 \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --deepspeed ./ds_config.json \
    --tf32 False \
    --bf16 False \
    --fp16

    启动训练后预期返回如下:

    启动训练新-1..png

    说明

    训练完成大概需要7小时左右,在tmux session中进行训练的过程中,如果断开了ECS连接,重新登录ECS实例后执行tmux attach命令即可恢复tmux session,查看训练进度。

效果展示

查看WebUI推理效果
  1. 查看原生预训练模型的推理效果。

    1. 进入Conda环境。

      conda activate llama_train
    2. 使用原生checkpoint文件进行推理。

      cd /root/LLaMA/text-generation-webui
      ln -s /root/LLaMA/llama-7b-hf ./models/llama-7b-hf
    3. 启动WebUI服务。

      python /root/LLaMA/text-generation-webui/server.py --model llama-7b-hf --listen

      预期返回:

      webui-0..png

    4. 打开本地浏览器,访问ECS实例的公网IP地址加7860端口,如101.200.XX.XX:7860

    5. Input框中输入问题(建议输入英语),单击Generate,在Output框获取结果。

      原生的预训练模型不能很好理解指令。示例如下:

      训练前结果..png

  2. 等待训练完成后,查看指令微调后模型的推理效果。

    1. 重新连接ECS实例。

    2. 进入Conda环境。

      conda activate llama_train
    3. 使用训练完成的checkpoint文件进行推理。

      cd /root/LLaMA/text-generation-webui
      ln -s /root/LLaMA/stanford_alpaca/output/checkpoint-800 ./models/llama-7b-hf-800
    4. 启动WebUI服务。

      python /root/LLaMA/text-generation-webui/server.py --model llama-7b-hf-800 --listen

      预期返回:

      webui-1..png

    5. 打开本地浏览器,访问ECS实例的公网IP地址加7860端口,如101.200.XX.XX:7860

    6. 单击Model页签,在Model模型列表中,选择指令微调后模型(如本文的llama-7b-hf-800)。

      当页面右下角显示Successfully loaded llama-7b-hf-800时,说明该模型已加载完成。

      说明

      llama-7b-hf-***后面的数字代表微调的step数,一般情况下,选择微调step数越大的模型,效果越好。

      切换llama-7b-hf-800

    7. Input框中输入问题(建议输入英语),单击Generate,在Output框获取结果。

      指令微调后的模型能更好地理解指令,并生成更合理的答案。示例如下:

      训练后结果..png

查看AIACC加速效果

以下是使用2台ecs.gn7i-c32g1.32xlarge规格的ECS实例(2*4 NVIDIA A10 GPU),基于DeepSpeed进行训练时,是否启动AIACC的性能对比。s/it代表训练每个iteration的时间,时间越短代表训练速度越快。由下图可以看出启动AIACC后相比原生DeepSpeed提速35%左右。

说明

训练完成后,您可以在/root/LLaMA/stanford_alpaca/wandb/latest-run/files/output.log文件中了解性能。

  • 使用DeepSpeed进行训练

    训练加速前..png

  • 使用DeepSpeed+AIACC进行训练

    训练加速后..png

标签:llama,7B,训练,--,实例,ECS,LLaMA,AIACC
From: https://blog.csdn.net/segwyang/article/details/143107284

相关文章

  • 【007B】基于51单片机超声波测距
    ☆、设计硬件组成:51单片机最小系统+HC-SR04超声波传感器+LCD1602液晶显示+AT24C02存储芯片+按键设置+蜂鸣器+LED灯1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片,LCD1602作为显示;2、采用HC-SR04超声波模块进行测距,测距范围:2~300CM,并通过LCD1602液晶实时......
  • .NET使用OllamaSharp实现大模型推理对话的简单演示
    https://www.cnblogs.com/weskynet/p/18497936 前提条件:请确保你本地已经安装了ollama以及有关本地离线模型。或者已有远程模型环境等。如果没有,请自行部署。如果需要帮助,可以文末获取联系方式咨询。由于部署离线大模型过于简单,在线资料也很多,我就省略这个步骤了。 创建一个......
  • Springboot 使用langchain4j 访问qwen2:7b模型
    一、模型部署1、官网下载Ollama:https://ollama.com,选择自己系统对应的安装包进行下载安装 2、配置模型下载路径1、一般默认情况安装位置:Linux:/var/lib/ollama/models  Windows:C:\Usersx用户名>.o11ama\models2、windows改变下载位置环......
  • 开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现离线推理-CPU版本
    一、前言   离线推理能够在模型训练完成后,特别是在处理大规模数据时,利用预先准备好的输入数据进行批量推理,从而显著提高计算效率和响应速度。通过离线推理,可以在不依赖实时计算的情况下,快速生成预测结果,从而优化决策流程和提升用户体验。此外,离线推理还可以降低云计算成本......
  • .NET使用OllamaSharp实现大模型推理对话的简单演示
     前提条件:请确保你本地已经安装了ollama以及有关本地离线模型。或者已有远程模型环境等。如果没有,请自行部署。如果需要帮助,可以文末获取联系方式咨询。由于部署离线大模型过于简单,在线资料也很多,我就省略这个步骤了。 创建一个项目,添加使用MIT开源协议的一个nuget包OllamaS......
  • 使用Llama Index与Streamlit实现一个从文本中提取专业术语和定义网页小程序
    LlamaIndex有很多文档完备的用例(语义搜索、摘要等)。然而,这并不意味着我们不能将LlamaIndex应用到非常具体的用例中!在本教程中,我们将介绍使用LlamaIndex从文本中提取术语和定义的设计过程,同时允许用户稍后查询这些术语。使用Streamlit,我们可以提供一种简单的方法来构建用......
  • 使用ollama本地部署qwen2并api调用
    目录一、下载ollama二、安装qwen大模型 三、Api调用四、尝试apifox调用一、下载ollamaOllama是一个开源的、本地运行的AI聊天模型,允许在自己的设备上运行LLM,无需依赖云服务。它支持多种LLM。目前Ollamalibrary已经支持Qwen2,可以直接使用。首先安装ollama,访问官......
  • Llama Factory :百种以上语言模型的统一高效微调框架
     人工智能咨询培训老师叶梓转载标明出处大模型适应到特定下游任务时,传统的全参数微调方法成本高昂,因此,研究者们一直在探索更高效的微调技术。由北京航空航天大学和北京大学的研究团队提出了一个名为LlamaFactory的统一框架,旨在解决大模型高效微调的问题。该框架整合了一系......
  • 使用 Ollama 部署本地 LLM:构建 AI REST API 的简易指南
    最近已有不少大厂都在秋招宣讲,也有一些已在Offer发放阶段了。节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。总结链......
  • Kubernetes运行 Llama3
    引言Ollama是一个运行大模型的工具,可以看成是大模型领域的Docker,可以下载所需的大模型并暴露API。OpenWebUI是一个大模型的WebUI交互工具,支持Ollama,即调用Ollama暴露的API实现与大模型交互。本文将详细介绍如何在Kubernetes上部署Ollama和OpenWebUI,以运行......