You need to enable JavaScript to run this app.
导航
关于Lambada模型评估的实践指导
最近更新时间:2024.10.09 16:58:59首次发布时间:2024.08.12 14:12:29

本文介绍如何通过困惑度PPL和准确度ACC这两个指标来量化Lambada数据集对模型的评估效能,从而对模型的理解能力进行量化打分。

背景信息

目前的模型在回答一些简单、通用的问题时表现尚佳,但是一旦涉及到需要依托上下文进行深入理解的问题时,就会表现得颇为逊色。例如,有些模型只能处理短文本,无法处理长文本;有些模型只能处理单句,不能处理多句;有些模型只能处理简单的问题,不能处理复杂的问题等等。因此,为了评估模型对长文本处理的精度,研究人员构造了一个唯有通过上下文方可准确作答的数据集——Lambada。Lambada是一组叙述性段落,具有这样一个特点:如果人类处于整个段落的情境之中,他们能够推测出其最后的单词,但如果他们仅目睹目标单词之前的最后一句话,他们则无法做出猜测。要在Lambada上成功,计算模型不能仅仅依赖于局部语境,还必须能够跟踪更广阔的语篇中的信息。

Lambada数据集

  • 语料来源
    Lambada所构建的语料库源自尚未发表的文集,涵盖5325篇文章的4.65亿个单词,旨在最大程度地降低通用知识对答案产生的影响,致使模型难以凭借通用知识推导出答案。此外,语料中每篇文章的两两交集较少,因而模型很难依据一篇文章的背景知识推导另一篇文章的答案,进一步削减了通用知识所带来的影响。

  • 数据筛选过程
    评估分为三个步骤:对于给定的段落(如下图所示),首先由第一个专业评估人员基于整个段落(包括Context和Target sentence)猜测目标词,如果猜测正确,继而由第二个评估人员同样基于整个段落猜测目标词,如果也能够正确猜出目标词,接着邀请更多的评估者去根据Target sentence猜测目标词,直到有人猜中目标词或者不成功的猜测次数达到10次为止。如果没有人能够猜中目标词,该段落将被添加到Lambada数据集中。
    alt

评估指标

为了量化Lambada数据集对模型的评估效能,这里采用困惑度PPL和准确度ACC来对模型的理解能力进行量化打分。

  • PPL
    在自然语言处理(Natural Language Processing,NLP)中,PPL(Perplexity的缩写)是一种用于评估语言模型质量的度量指标。语言模型是一种用来预测下一个单词或一组单词的概率分布的统计模型。PPL用于衡量语言模型在给定一段文本之后,对下一个单词进行预测的困惑程度。在实践中,PPL值越低意味着模型更好地预测了测试数据集中的单词序列,而更高的PPL值则表示模型的预测能力较差。因此PPL常被用作比较和评估不同语言模型的性能。

  • ACC
    表示正确预测的样本数占总体样本数的比例,即ACC = Right / All。

软件要求

  • 操作系统:本文以Ubuntu 20.04为例。
  • NVIDIA驱动:
    • GPU驱动:用来驱动NVIDIA GPU卡的程序。本文以535.129.03为例。
    • CUDA:使GPU能够解决复杂计算问题的计算平台。本文以CUDA 12.1为例。
    • cuDNN:深度神经网络库,用于实现高性能GPU加速。本文以8.9.7.29为例。

使用说明

下载本文所需软件需要访问国外网站,建议您增加网络代理(例如FlexGW)以提高访问速度。您也可以将所需软件下载到本地,参考本地数据上传到GPU实例中。

操作步骤

步骤一:准备环境

  1. 请参考通过向导购买实例创建一台符合以下条件的实例:
    • 基础配置:
      • 计算规格:ecs.g1ve.2xlarge
      • 镜像:Ubuntu 20.04,并勾选“后台自动安装GPU驱动”。
      • 存储:云盘容量在100 GiB以上。
        alt
    • 网络配置:勾选“分配弹性公网IP”。
  2. 登录Linux实例
  3. 查看驱动版本已安装成功。
    1. 执行以下命令,确认GPU驱动是否安装。
      nvidia-smi
      回显如下,表示已成功安装。
      alt
    2. 执行以下命令,查看CUDA驱动。
      /usr/local/cuda/bin/nvcc -V
      回显如下,表示已安装成功。
      alt

步骤二:安装Docker和Nvidia-docker

  1. 执行以下命令,通过官方的便捷脚本安装Docker。

    curl https://get.docker.com | sh \
      && sudo systemctl --now enable docker
    
  2. 安装nvidia-docker2。

    1. 执行以下命令,配置apt仓库。

      distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
        && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
        && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
              sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
              sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
      
    2. 执行以下命令,安装nvidia-docker2。

      sudo apt-get update
      sudo apt-get install -y nvidia-docker2
      
    3. 执行以下命令,重启Docker。

      sudo systemctl restart docker
      
    4. 验证是否安装成功。

      sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
      

      回显如下,表示安装成功。
      alt

步骤三:下载NEMO镜像

  1. 登录NVIDIA NGC网站
  2. 在左侧选择Catalog下的的“Containers”。
  3. 在Containers页面搜索NEMO,单击“NEMO Framework”的“Learn More”按钮。
    alt
  4. 进入NEMO Framework页面,选择“Tags”页签复制下载命令,本文以24.01.framework为例。
    alt
  5. 在GPU实例中执行以下命令,下载NEMO镜像。
    docker pull nvcr.io/nvidia/nemo:24.01.framework
    

步骤四:准备模型及数据集

  1. 依次执行以下命令,配置 packagecloud 存储库并安装git-lfs。

    curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
    apt-get install git-lfs
    
  2. 依次执行以下命令,安装git。

    apt-get update  # 更新安装包列表
    apt-get install git  # 安装git
    apt-get install git-lfs  # 安装git-lfs
    
  3. 执行以下命令,初始化git-lfs。

    git lfs install
    

    回显如下,表示初始化完成。
    alt

  4. 执行以下命令,下载Lambada模型的权重文件模型到指定目录,本文以下载到 gpt3_dataset为例。

    git clone https://huggingface.co/ayrnb/megatron_nemo gpt3_dataset
    

    说明

    您可以使用训练好的nemo模型或者ckpt文件,例如megatron_gpt_te_true_bf16.nemo、 megatron_gpt-*last.ckpt等。也可以使用提供的模型,可前往huggingface获取模型地址(已包含需要的数据集及分词文件)。

  5. 执行以下命令,启动容器。

    docker run -it --gpus=all --privileged --shm-size=100g -v /gpt3_dataset/:/gpt3_dataset/ nvcr.io/nvidia/nemo:24.01.framework bash
    

步骤三:模型参数修改

修改环境配置文件

  1. 执行以下命令,打开环境配置文件。
    vim /opt/NeMo-Megatron-Launcher/launcher_scripts/conf/config.yaml
    
  2. 参考下表说明,设置参数取值。其它参数根据使用设备和实际情况进行配置。
    参数名称设置值
    defaults下的evaluationNeMo提供了多种不同类型任务的数据集进行评估,这里设置为gpt3/evaluate_lambada,来使用lambada进行评估
    stages注释除evaluation以外的参数
    cluster_typeinteractive
    launcher_scripts_path/opt/NeMo-Megatron-Launcher/launcher_scripts
    data_dir/gpt3_dataset/lambada_test.jsonl
    TRANSFORMERS_OFFLINE0
  3. esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。

修改评估配置文件

  1. 执行以下命令,打开评估配置文件。
    vim /opt/NeMo-Megatron-Launcher/launcher_scripts/conf/evaluation/gpt3/evaluate_lambada.yaml
    
  2. 参考下表说明,设置参数取值。其它参数根据使用设备和实际情况进行配置。
    参数名称参数说明设置值
    tasks进行评估的任务lambada
    nemo_model预训练的nemo模型地址/gpt3_dataset/megatron_gpt_te_false_bf16.nemo
    vocab_file分词文件目录/gpt3_dataset/vocab.json
    merge_file/gpt3_dataset/merges.txt
    hparams_file/gpt3_dataset/hparams.yaml
    pipeline_model_parallel_size流水线并行数量,与训练时相同2
  3. esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。

步骤五:评估实验

  1. 运行评估。
    1. 执行以下命令,在/opt/NeMo-Megatron-Launcher/launcher_scripts/路径下新建运行脚本exec.sh
      cd /opt/NeMo-Megatron-Launcher/launcher_scripts/
      vi exec.sh
      
    2. 输入以下内容。
      #!/bin/bash
      export NVTE_FUSED_ATTN=1
      export NVTE_FLASH_ATTN=1
      rm -rvf /megatron_nemo/results/
      HYDRA_FULL_ERROR=1  python3 main.py
      
    3. esc退出编辑模式,输入:wq并按Enter键,保存并退出文件。
    4. 执行以下命令,为exec.sh文件添加可执行权限。
      chmod +x exec.sh
      
    5. 执行以下命令,进行评估。
      ./exec.sh
      
  2. 结果展示。
    这里我们分别对在FP8、TEBF16和BF16精度下预训练的GPT3-1B模型进行Lamabada任务评估,评估结果如下表所示。
    alt
    TPPPMBSGBSTEdtypeLambada
    PPL(越低越好)ACC(越高越好)
    2112048TRUEFP8927.85580.1265
    211TRUETEBF161035.13850.1244
    211FALSEBF161133.3390.1098