• 【大模型】大语言模型语料下载


    概述

    模型训练语料是非常重要的,目前公网上有各种各样的语料可以供下载,但是不可能每个用户、每次训练任务都通过公网去拉取语料,因此我们需要在语料平台上为用户提前下载并且注册一些需要的语料,通过语料平台维护一些公用的语料。

    鉴于语料下载的多样性,目前下载公网上的语料一般会先把语料下载到国外的服务器,然后再上传到华为云的 obs,最后再在 IDC 环境的服务器上将 obs 的数据下载到 CephFS 的语料目录(要求这台机器需要有外网以及挂载CephFS的权限)。

    外网动辄上 TB 的语料下载是很费时间的,也很考验网络的可靠程度,因此在下载的时候,不管用什么方法,一定要注意断点续传之类的方案。

    Hugging Face

    下面以下载 Hugging Face 的 cerebras/SlimPajama-627B 为例,下面的脚本前提是需要安装 datasets。

    from datasets import load_dataset
    ds = load_dataset("cerebras/SlimPajama-627B")
    
    • 1
    • 2

    因为数据集是会有低数据量的版本的,因此建议用户可以先用这部分做一些简单的测试,再决定是否全量下载。
    在这里插入图片描述

    # cat test.py
    from datasets import load_dataset
    dataset = load_dataset("neulab/conala", cache_dir="./dataset")
    dataset.save_to_disk('dataset/neulab/conala')
    (chatgpt) [root@ecs-f430 ~]# tree
    .
    ├── dataset
    │         ├── downloads
    │         │         ├── c2f5907d74f66a3a8e62dfbbd17301cd9ac82f7af932353dbd97faa7c5636cfa
    │         │         ├── c2f5907d74f66a3a8e62dfbbd17301cd9ac82f7af932353dbd97faa7c5636cfa.json
    │         │         ├── c2f5907d74f66a3a8e62dfbbd17301cd9ac82f7af932353dbd97faa7c5636cfa.lock
    │         │         ├── c6099a128d3e027c23a9f2e574333bf42e65bd69a531bbbe4ca2a53e6ee93190
    │         │         ├── c6099a128d3e027c23a9f2e574333bf42e65bd69a531bbbe4ca2a53e6ee93190.json
    │         │         └── c6099a128d3e027c23a9f2e574333bf42e65bd69a531bbbe4ca2a53e6ee93190.lock
    │         ├── neulab
    │         │         └── conala
    │         │             ├── dataset_dict.json
    │         │             ├── test
    │         │             │         ├── data-00000-of-00001.arrow
    │         │             │         ├── dataset_info.json
    │         │             │         └── state.json
    │         │             └── train
    │         │                 ├── data-00000-of-00001.arrow
    │         │                 ├── dataset_info.json
    │         │                 └── state.json
    │         └── neulab___conala
    │             └── curated
    │                 └── 1.1.0
    │                     ├── 8557ab15640c382a1db16dca51ee1845bc77bf7c45015a2c095446a8e20ba5d3
    │                     │         ├── conala-test.arrow
    │                     │         ├── conala-train.arrow
    │                     │         └── dataset_info.json
    │                     ├── 8557ab15640c382a1db16dca51ee1845bc77bf7c45015a2c095446a8e20ba5d3_builder.lock
    │                     └── 8557ab15640c382a1db16dca51ee1845bc77bf7c45015a2c095446a8e20ba5d3.incomplete_info.lock
    └── test.py
    
    10 directories, 19 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    obs操作

    curl -LO https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz
    tar zxvf obsutil_linux_amd64.tar.gz
    mv obsutil_linux_amd64_5.5.9/obsutil /usr/local/bin/
    obsutil config -i=<秘钥> -k=<秘钥> -e=obs.cn-north-4.myhuaweicloud.com
    obsutil config -i=MJBDGH3HLXYZERXD2NRE -k=DAIVJcgpeflGzgdXMmA27yatPp1oYfyu707vx3gr -e=obs.ap-southeast-3.myhuaweicloud.com
    
    # 测试
    obsutil cp obs://a800-bj/tmp/llama-2-7b . -f -r
    obsutil cp obs://dok/dok-release-without-app-image.gz . -f -r
    obsutil cp obs://dok/dok-release-without-app-image.gz.md5sum . -f -r
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    下面就是实际操作的时候打印的日志,可以评估一下下载的速度。
    在这里插入图片描述

    git-lfs

    Hugging Face 的语料也可以用 git-lfs 进行下载,但是 git 下载的时候会把 .git 文件下载下来,而这个文件在使用的时候是没什么必要的。

    git lfs install
    git clone https://huggingface.co/datasets/cerebras/SlimPajama-627B
    
    • 1
    • 2

    可以看到,通过 git 下载的数据,是跟 Hugging Face 页面显示的语料格式一样的。
    在这里插入图片描述

    例子

    RedPajama-Data-1T

    比如说下载这个数据集 RedPajama-Data-1T,实际上依靠下面的脚本也可以完成下载,通过分析 urls.txt 可以发现,下载的这些数据文件完全不经过 HF 的服务器,类似这种情况,有时候能是比直接从 HF 的服务器下载语料是快很多的。

    wget 'https://data.together.xyz/redpajama-data-1T/v1.0.0/urls.txt'
    while read line; do
        dload_loc=${line#https://data.together.xyz/redpajama-data-1T/v1.0.0/}
        mkdir -p $(dirname $dload_loc)
        wget "$line" -O "$dload_loc"
    done < urls.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    SlimPajama-627B/

    这个在华为云的新加坡区的机器下载非常慢。

    python -c 'from datasets import load_dataset;dataset = load_dataset("cerebras/SlimPajama-627B")'
    
    • 1

    但是上述这个方法一样会遇到一些网络问题。
    在这里插入图片描述
    通过 git clone 是容易报错的。
    在这里插入图片描述
    可以通过下面的方法实现断点续传。

    from datasets import load_dataset
    import datasets
    import os
    
    # 需要设置一下环境变量
    os.environ["HF_DATASETS_CACHE"] = "/data/hf_dataset/"
    config = datasets.DownloadConfig(resume_download=True, max_retries=100)
    dataset = datasets.load_dataset("cerebras/SlimPajama-627B", cache_dir="/data/hf_dataset/", download_config=config)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    git clone续传

    git clone --recursive --depth 1 <repository_url>
    
    • 1

    数据格式

    1. jsonl: json line格式
    2. jsonl.zst: 用zst压缩json line格式文件

    测试一下。

    (base) [root@ecs-f430 tmp]# unzstd example_holdout_212.jsonl.zst
    example_holdout_212.jsonl.zst: 95993 bytes
    (base) [root@ecs-f430 tmp]# ls
    awesome-chatgpt-prompts  example_holdout_212.jsonl  example_holdout_212.jsonl.zst  obsutil_linux_amd64_5.4.11  systemd-private-a37c64d204184d31a75497db9347d40f-chronyd.service-jMVrVi
    (base) [root@ecs-f430 tmp]# vim ^C
    (base) [root@ecs-f430 tmp]# ll example_holdout_212.jsonl*
    -rw-r--r-- 1 root root 95993 94 14:17 example_holdout_212.jsonl
    -rw-r--r-- 1 root root 39089 94 14:17 example_holdout_212.jsonl.zst
    (base) [root@ecs-f430 tmp]# ll -h example_holdout_212.jsonl*
    -rw-r--r-- 1 root root 94K 94 14:17 example_holdout_212.jsonl
    -rw-r--r-- 1 root root 39K 94 14:17 example_holdout_212.jsonl.zst
    (base) [root@ecs-f430 tmp]# vim example_holdout_212.jsonl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    参考资料

    1. datasets-server
    2. Hugging Face教程 - 5. huggingface的datasets库使用
    3. Datasets 使用小贴士: 探索解决数据集无法下载的问题
    4. huggingface之datasets将数据集下载到本地
    5. datasets.Dataset.save_to_disk
    6. How can I get the original files using the HuggingFace datasets platform?
    7. jsonlines官方网站
  • 相关阅读:
    为什么别人都不主动联系你
    前后端分离的项目——图书管理系统(下)
    Linux常用命令:htop(交互式进程查看器)【后台运行及查看状态命令】【top命令的升级版】
    AOP应用之系统操作日志
    硬核剖析Java锁底层AQS源码,深入理解底层架构设计
    【云原生|Docker系列9】Docker仓库管理使用详解
    JedisPool
    C++ Reference: Standard C++ Library reference: C Library: cwctype: iswgraph
    【Redis】如何保证缓存和数据库的一致性
    ArcgisForJS如何使用ArcGIS Server的缓冲区几何服务?
  • 原文地址:https://blog.csdn.net/oscarun/article/details/134357662