快速上手

按照如下步骤操作,即可实现Megatron-LM在昇腾设备上的高效运行,且无缝集成并充分发挥MindSpeed所提供的丰富加速与优化技术。

  1. “Megatron-LM”目录下修改pretrain_gpt.py文件,在“import torch”下新增一行“import mindspeed.megatron_adaptor”代码,如下黑体加粗部分。
    import os
    import torch
    import mindspeed.megatron_adaptor
    from functools import partial
    from typing import Union
  2. “Megatron-LM”目录下修改pretrain_gpt.py文件,在“model_provider”函数中删除“assert(args.context_parallel_size == 1), "Context parallelism is only supported with Megatron Core!"”代码,如下黑体加粗部分。
        else:
            assert(args.context_parallel_size == 1), "Context parallelism is only supported with Megatron Core!"
    
            model = megatron.legacy.model.GPTModel(
                config,
                num_tokentypes=0,
                parallel_output=True,
                pre_process=pre_process,
                post_process=post_process
            )
  3. 数据准备,参考Megatron-LM官方文档准备训练数据。
    1. 下载Tokenizer

      新建“Megatron-LM/gpt-tokenizer”目录,并将vocab.json和merges.txt文件下载至该目录。

    2. 下载数据集。

      以Alpaca数据集为例,可单击Link获取。

    用户需要自行设置代理,以便访问或下载数据集。

  4. 配置环境变量,当前以root用户安装后的默认路径为例,请用户根据set_env.sh的实际路径执行如下命令。
    source /usr/local/Ascend/ascend-toolkit/set_env.sh
  5. 数据处理,详情可单击对应分支core_r0.6.0core_r0.7.0进行参考。
    1. 语料格式转换。

      数据处理依赖于多个第三方库,请确保已正确安装如下依赖:

      pip3 install nltk pyarrow pandas
      以下代码段展示了如何读取Parquet格式的原始语料,并将其转换为JSON格式,以便后续处理。
      1
      2
      3
      4
      5
      6
      7
      8
      import json
      import pandas as pd
      data_df = pd.read_parquet("train-00000-of-00001-a09b74b3ef9c3b56.parquet")
      data_df['text'] = data_df['text'].apply(lambda v: json.dumps({"text": v}))
      with open("alpaca_json.json", encoding='utf-8', mode='w') as f:
          for i, row in data_df.iterrows():
              f.write(row['text'])
              f.write('\n')
      
    2. 预训练数据集生成。
      若在昇腾设备上使用preprocess_data.py脚本处理数据,须在“Megatron-LM”目录下修改“tools/preprocess_data.py”脚本,在“import torch”下新增一行“import mindspeed.megatron_adaptor”代码,如下黑体加粗部分。
      import torch
      import mindspeed.megatron_adaptor
      import numpy as np

      新建“Megatron-LM/gpt_pretrain_data”目录,通过运行preprocess_data.py脚本,可以将转换后的JSON文件进一步处理为适合Megatron-LM预训练的二进制格式。

      python tools/preprocess_data.py \
         --input alpaca_json.json \
         --output-prefix ./gpt_pretrain_data/alpaca  \
         --tokenizer-type GPT2BPETokenizer \
         --vocab-file ./gpt-tokenizer/vocab.json \
         --merge-file ./gpt-tokenizer/merges.txt \
         --append-eod \
         --log-interval 1000 \
         --workers 8

      执行成功后,将在gpt_pretrain_data目录下生成两个文件:alpaca_text_document.bin和alpaca_text_document.idx,代表预处理完成的预训练数据集。

  6. 配置路径。请编辑示例脚本“examples/pretrain_gpt_distributed.sh”,并设置如下环境变量以指定必要的路径:
    1
    2
    3
    4
    CHECKPOINT_PATH=./ckpt
    VOCAB_FILE=./gpt-tokenizer/vocab.json
    MERGE_FILE=./gpt-tokenizer/merges.txt
    DATA_PATH=./gpt_pretrain_data/alpaca_text_document
    

    注意,上述路径需根据您的实际情况进行适当调整。

  7. 执行如下命令启动预训练。
    bash examples/pretrain_gpt_distributed.sh

更多模型开发实例请参见模型开发实践