日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于DeepGPU加速器快速實現Qwen1.5-7B指令微調

本文基于LLaMA-Factory提供了一套Qwen1.5-7B模型在阿里云ECS上進行指令微調的訓練方案,最終可以獲得性能更貼近具體使用場景的語言模型。

背景信息

通義千問為阿里云研發的人工智能大規模語言模型,該模型屬于AI生成內容(AIGC)領域,旨在為用戶提供多樣化的語言理解和生成能力。該項目包含了多個版本的模型,其中Qwen1.5是通義千問系列中的一個重大更新版本,發布于2024年。Qwen1.5系列屬于開源模型,允許任何人訪問和利用這些先進模型來進行二次開發、微調或創建新的應用,促進了人工智能技術的普及和創新。

LLM具有建模大量詞語之間聯系的能力,但是為了讓其強大的建模能力向下游具體任務輸出,需要進行指令微調,根據大量不同指令對模型部分權重進行更新,使模型更善于遵循指令。指令微調中的指令簡單直觀地描述了任務,具體的指令格式如下:

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

LLaMA-Factory是零隙智能(SeamLessAI)開源的低代碼大模型訓練框架,它集成了業界最廣泛使用的微調方法和優化技術,并支持業界眾多的開源模型的微調和二次訓練,開發者可以使用私域數據、基于有限算力完成領域大模型的定制開發。LLaMA-Factory還為開發者提供了可視化訓練、推理平臺,一鍵配置模型訓練,實現零代碼微調LLM。

本文基于LLaMA-Factory提供了一套Qwen1.5-7B模型,基于DeepSpeed進行指令微調訓練,并使用DeepGPU加速訓練。DeepGPU包括DeepNCCL和Deepytorch Training兩個訓練加速器。

加速器

說明

相關文檔

DeepNCCL

DeepNCCL是為阿里云神龍異構產品開發的一種用于多GPU互聯的AI通信加速庫,在AI分布式訓練或多卡推理任務中用于提升通信效率。

什么是AI通信加速庫DeepNCCL

Deepytorch Training

Deepytorch Training是阿里云自研的AI訓練加速器,為傳統AI和生成式AI場景提供訓練加速功能

什么是Deepytorch Training(訓練加速)

重要
  • 阿里云不對第三方模型“Qwen1.5-7B-Chat”的合法性、安全性、準確性進行任何保證,阿里云不對由此引發的任何損害承擔責任。

  • 您應自覺遵守第三方模型的用戶協議、使用規范和相關法律法規,并就使用第三方模型的合法性、合規性自行承擔相關責任。

操作步驟

準備工作

操作前,請先在合適的地域和可用區下創建VPC和交換機。

創建ECS實例

控制臺方式

  1. 前往實例創建頁

  2. 按照向導完成參數配置,創建一臺ECS實例。

    需要注意的參數如下。更多信息,請參見自定義購買實例

    • 實例:規格選擇ecs.ebmgn7ex.32xlarge(必須包含8卡NVIDIA GPU)。

      image

    • 鏡像:公共鏡像CentOS 7.9 64位,并選中安裝GPU驅動,選擇CUDA 版本12.0.1/Driver 版本525.105.17/CUDNN 版本8.9.1.23

      image

    • 系統盤:不小于200 GiB。

    • 公網IP:選中分配公網IPv4地址,按需選擇計費模式和帶寬。本文使用按流量計費,帶寬峰值為100 Mbps。

      image

  3. 使用Workbench連接實例。

    具體操作,請參見通過密碼或密鑰認證登錄Linux實例

FastGPU方式

說明

FastGPU方式僅支持在Linux系統或macOS系統中使用。如果您使用Windows系統,請采用控制臺方式。

  1. 安裝FastGPU軟件包并配置環境變量。

    1. 安裝FastGPU軟件包。

      pip3 install --force-reinstall https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/fastgpu/fastgpu-1.1.6-py3-none-any.whl
    2. 配置環境變量。

      配置環境變量前,請獲取阿里云賬號AccessKey(AccessKey ID和AccessKey Secret),以及您希望創建ECS實例的地域等信息。關于如何獲取AccessKey,請參見創建AccessKey

      export ALIYUN_ACCESS_KEY_ID=****         #填入您的AccessKey ID
      export ALIYUN_ACCESS_KEY_SECRET=****     #填入您的AccessKey Secret
      export ALIYUN_DEFAULT_REGION=cn-beijing  #填入您希望使用的地域(Region)
  2. 創建一臺ECS實例。

    以下操作將會創建1臺ecs.ebmgn7ex.32xlarge實例。

    fastgpu create --name deepgpu_solution -i ecs.ebmgn7vx.32xlarge --machines 1 --image_type centos_7_9
  3. 添加本機公網IP的22端口到默認安全組中。

    fastgpu addip -a
  4. 通過SSH連接ECS實例。

    您可以通過fastgpu ssh {instance_name}命令連接ECS實例。示例如下:

    fastgpu ssh deepgpu_solution
說明

更多關于FastGPU的命令,請參見命令行使用說明

部署環境

  1. 部署訓練所需環境。

    1. 安裝Docker。

      sudo yum install -y yum-utils device-mapper-persistent-data lvm2
      sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      sudo yum install -y docker-ce
      sudo systemctl enable docker
      sudo systemctl restart docker
    2. 安裝NVIDIA Docker鏡像。

      source /etc/os-release
      export distribution=$ID$VERSION_ID
      curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
      sudo yum clean expire-cache
      sudo yum install -y nvidia-docker2
      sudo systemctl restart docker
    3. 構建鏡像。

      本文以構建llama-factory-test鏡像為例,您可以根據業務需求自行調整。

      1. 創建llama_factory.dockerfile文件。

        FROM nvidia/cuda:11.8.0-cudnn8-devel-centos7
        
        LABEL org.opencontainers.image.authors="ALIBABA DEEPGPU"
        
        
        SHELL ["/bin/bash", "-c"]
        
        # install common tools
        RUN yum -y install wget curl bzip2 openssl openssl-devel openssh-server openssh-clients vim unzip git git-lfs tmux
        
        WORKDIR /examples
        ARG EXAMPLES_NAME="LLaMA-Factory-0.6.1"
        RUN wget https://github.com/hiyouga/LLaMA-Factory/archive/refs/tags/v0.6.1.zip -O ${EXAMPLES_NAME}.zip && \
          unzip ${EXAMPLES_NAME}.zip && mv ${EXAMPLES_NAME} LLaMA-Factory && \
          rm -rf ${EXAMPLES_NAME}.zip
        
        WORKDIR /workspace
        # install gcc g++
        RUN yum install -y centos-release-scl && \
          yum install -y devtoolset-8-gcc* && \
          scl enable devtoolset-8 bash && \
          source /opt/rh/devtoolset-8/enable && \
          echo "source /opt/rh/devtoolset-8/enable" >>~/.bashrc && \
          ln -sf /opt/rh/devtoolset-8/root/usr/bin/gcc /usr/local/bin/gcc && \
          ln -sf /opt/rh/devtoolset-8/root/usr/bin/g++ /usr/local/bin/g++
        
        RUN yum install -y epel-release && yum install -y pdsh libaio-devel
        
        # install erdma driver
        RUN echo "[erdma]" > /etc/yum.repos.d/erdma.repo && \
          echo "name = ERDMA Repository" >> /etc/yum.repos.d/erdma.repo && \
          echo "baseurl = https://mirrors.aliyun.com/erdma/yum/redhat/\$releasever/erdma/x86_64" >> /etc/yum.repos.d/erdma.repo && \
          echo "gpgcheck = 1" >> /etc/yum.repos.d/erdma.repo && \
          echo "enabled = 1" >> /etc/yum.repos.d/erdma.repo && \
          echo "gpgkey = https://mirrors.aliyun.com/erdma/GPGKEY" >> /etc/yum.repos.d/erdma.repo && \
          yum makecache && \
          yum install -y libibverbs rdma-core librdmacm libibverbs-utils
        
        # install conda
        ARG CONDA_PATH=/opt/conda
        ARG	ANACONDA_FILE=Miniconda3-py310_23.5.2-0-Linux-x86_64.sh
        RUN wget -q -c -O ~/miniconda.sh https://repo.anaconda.com/miniconda/$ANACONDA_FILE || wget -q -c -O ~/miniconda.sh https://ali-perseus-build-dep.oss-cn-huhehaote.aliyuncs.com/$ANACONDA_FILE && \
          chmod +x ~/miniconda.sh && \
          ~/miniconda.sh -b -p ${CONDA_PATH} && \
          rm ~/miniconda.sh
        RUN source /opt/conda/etc/profile.d/conda.sh && \
          echo ". /opt/conda/etc/profile.d/conda.sh" >>/etc/bashrc && \
          conda init bash && \
          conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \
          conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
          conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \
          conda config --set show_channel_urls yes && \
          mkdir -p ~/.pip && \
          echo "[global]" >~/.pip/pip.conf && \
          echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >>~/.pip/pip.conf && \
          echo "[install]" >>~/.pip/pip.conf && \
          echo "trusted-host = https://pypi.tuna.tsinghua.edu.cn" >>~/.pip/pip.conf && \
          conda update --all -y
        
        ENV PATH ${CONDA_PATH}/bin:$PATH
        SHELL ["conda", "run", "-n", "base", "/bin/bash", "-c"]
        
        RUN pip install --upgrade pip && \
          pip install setuptools==69.5.1 && \
          pip install torch==2.1.0+cu118 torchvision==0.16.0+cu118 -f https://download.pytorch.org/whl/torch_stable.html && \
          pip install datasets evaluate accelerate -i https://pypi.tuna.tsinghua.edu.cn/simple/
          
        
        RUN DS_SKIP_CUDA_CHECK=1 DS_BUILD_UTILS=1 DS_BUILD_FUSED_ADAM=1 pip install deepspeed && \
          pip install -U accelerate trl peft && \
          pip install diffusers==0.24.0 gradio==3.50.2
        
        RUN pip install transformers[sentencepiece]==4.37.2 && \
          pip install flash-attn --no-build-isolation && \
          pip install --no-deps https://download.pytorch.org/whl/cu118/xformers-0.0.22.post7%2Bcu118-cp310-cp310-manylinux2014_x86_64.whl && \
          rm -rf /root/.cache/*
        
      2. 構建鏡像。

        image_url="mydocker.hub/llama:llama-factory-test" && \
        sudo docker build -f llama_factory.dockerfile -t ${image_url} .

        出現如下圖所示時,說明鏡像已構建完成。

        image

    4. 啟動并登錄容器。

      sudo docker run -itd --rm --gpus all --ipc host --network host --privileged --workdir /workspace --name mytest mydocker.hub/llama:llama-factory-test
      sudo docker exec -it mytest bash

      若命令行首部出現(base)標識,表示已進入容器。

      image

  2. 使用DeepGPU加速訓練。

    1. 安裝DeepGPU。

      pip3 install deepgpu -i https://pypi.tuna.tsinghua.edu.cn/simple
    2. 使用DeepGPU。

      以本方案為例,需要在訓練文件train_bash.py(默認在/examples/LLaMA-Factory/src目錄下)中加入以下代碼:

      import deepytorch

      image

啟動訓練

  1. 下載tmux并創建一個tmux session。

    tmux
    說明

    訓練耗時較長,建議在tmux session中啟動訓練,以免ECS斷開連接導致訓練中斷。

  2. 獲取Qwen1.5-7B預訓練權重。

    yum install -y git-lfs
    git lfs install
    mkdir /models && cd /models
    git clone https://www.modelscope.cn/qwen/Qwen1.5-7B-Chat.git
  3. 創建并設置DeepSpeed配置文件。

    cd LLaMA/stanford_alpaca
    cat << EOF | tee ds_config.json
    {
      "train_batch_size": "auto",
      "train_micro_batch_size_per_gpu": "auto",
      "gradient_accumulation_steps": "auto",
      "gradient_clipping": "auto",
      "zero_allow_untested_optimizer": true,
      "fp16": {
        "enabled": "auto",
        "loss_scale": 0,
        "loss_scale_window": 1000,
        "initial_scale_power": 16,
        "hysteresis": 2,
        "min_loss_scale": 1
      },
      "bf16": {
        "enabled": "auto"
      },
      "zero_optimization": {
        "stage": 2,
        "allgather_partitions": true,
        "allgather_bucket_size": 5e8,
        "overlap_comm": true,
        "reduce_scatter": true,
        "reduce_bucket_size": 5e8,
        "contiguous_gradients": true,
        "round_robin_gradients": true
      }
    }
    EOF
    
  4. 啟動訓練。

    單臺訓練

    DEEPGPU_DISABLE_AGSPEED=1 \
    DEEPGPU_DISABLE_ACSPEED=1 \
    deepspeed --master_port=$MASTER_PORT \
    src/train_bash.py \
    --deepspeed='./ds_config.json' \
    --model_name_or_path='/models/Qwen1.5-7B-Chat' \
    --use_fast_tokenizer \
    --flash_attn \
    --template='qwen' \
    --dataset='alpaca_gpt4_en' \
    --overwrite_cache \
    --output_dir='/workspace/output' \
    --overwrite_output_dir \
    --do_train \
    --per_device_train_batch_size=12 \
    --gradient_accumulation_steps=1 \
    --learning_rate=5e-05 \
    --num_train_epochs=1.0 \
    --max_steps=500 \
    --lr_scheduler_type='cosine' \
    --logging_steps=10 \
    --save_steps=500 \
    --fp16 \
    --gradient_checkpointing \
    --stage='sft' \
    --finetuning_type='full' \
    --plot_loss

    多臺訓練

    1. 配置hostfile。

      如下示例表示配置兩臺ECS實例(GPU總數為8)時,需要填入每臺ECS實例的內網IP和slots,其中slots表示進程數(即GPU數量)。

      cat > hostfile <<EOF
      {private_ip1} slots=8
      {private_ip2} slots=8
      EOF
    2. 啟動訓練。

      啟動訓練的命令腳本如下,$MASTER_PORT請替換為2000~65535的隨機端口號。

      DEEPGPU_DISABLE_AGSPEED=1 \
      DEEPGPU_DISABLE_ACSPEED=1 \
      deepspeed --master_port=$MASTER_PORT --hostfile hostfile \
      src/train_bash.py \
      --deepspeed='./ds_config.json' \
      --model_name_or_path='/models/Qwen1.5-7B-Chat' \
      --use_fast_tokenizer \
      --flash_attn \
      --template='qwen' \
      --dataset='alpaca_gpt4_en' \
      --overwrite_cache \
      --output_dir='/workspace/output' \
      --overwrite_output_dir \
      --do_train \
      --per_device_train_batch_size=12 \
      --gradient_accumulation_steps=1 \
      --learning_rate=5e-05 \
      --num_train_epochs=1.0 \
      --max_steps=500 \
      --lr_scheduler_type='cosine' \
      --logging_steps=10 \
      --save_steps=500 \
      --fp16 \
      --gradient_checkpointing \
      --stage='sft' \
      --finetuning_type='full' \
      --plot_loss

    啟動訓練后預期返回如下:

    image

    說明

    訓練完成大概需要30分鐘左右,在tmux session中進行訓練的過程中,如果斷開了ECS連接,重新登錄ECS實例后執行tmux attach命令即可恢復tmux session,查看訓練進度。

查看DeepGPU加速效果

以下是使用2臺ecs.ebmgn7ex.32xlarge規格的ECS實例(2*8 NVIDIA GPU),基于DeepSpeed進行訓練時,是否啟動DeepGPU的性能對比。train_samples_per_second值越大代表訓練速度越快。由下圖可以看出啟動DeepGPU后相比原生DeepSpeed提速49%左右。

說明

訓練完成后,您可以在容器的/workspace/output/train_results.json文件中了解性能。

  • 使用DeepSpeed進行訓練

    image

  • 使用DeepSpeed+DeepGPU+DeepNCCL進行訓練

    image