92 Star 1.3K Fork 878

GVPMindSpore/mindformers

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

通义千问

模型描述

Qwen2是Qwen系列的新的大型语言模型。Qwen2发布了许多基本语言模型和指令调整的语言模型,参数范围从5亿到720亿,包括专家混合模型。 与最先进的开源语言模型(包括之前发布的Qwen1.5)相比,Qwen2总体上超越了大多数开源模型,并在一系列针对语言理解,语言生成,多语言能力,编码,数学,推理等的基准测试中表现出对专有模型的竞争力。

@article{qwen2,
  title={Qwen2 Technical Report},
  year={2024}
}

模型性能

以下模型性能均由Atlas 800T A2硬件环境下测试得出。

Config Task Datasets SeqLength Phase Performance
qwen2-0.5b text_generation - 4096 Predict 1907 tokens/s
qwen2-1.5b text_generation - 4096 Predict 1160 tokens/s
qwen2-7b text_generation - 4096 Predict 645 tokens/s
qwen2-72b text_generation - 8192 Predict 252 tokens/s

以下模型性能均由Atlas 900 A2 PoDc硬件环境下测试得出。

Config Task Datasets SeqLength Phase Performance
qwen2-0.5b text_generation alpaca 32768 Finetune 9555 tokens/s/p
qwen2-1.5b text_generation alpaca 32768 Finetune 4363 tokens/s/p
qwen2-57b-a14b text_generation alpaca 32768 Finetune 288 tokens/s/p
qwen2-72b text_generation alpaca 32768 Finetune 2026 tokens/s/p

模型文件

Qwen2 基于 MindFormers 实现,主要涉及的文件有:

  1. 模型具体实现:

    research/qwen2
      └── qwen2_tokenizer.py                        # tokenizer
    
  2. 模型配置:

    research/qwen2
      ├── qwen2_0_5b                                        # qwen2 0.5B 配置文件
      │   ├── finetune_qwen2_0.5b_32k.yaml                  # 0.5B 32k 全参微调启动配置
      │   └── predict_qwen2_0_5b_instruct.yaml              # 0.5B 在线推理启动配置
      ├── qwen2_1_5b                                        # qwen2 1.5B 配置文件
      │   ├── finetune_qwen2_1.5b_32k.yaml                  # 1.5B 32k 全参微调启动配置
      │   └── predict_qwen2_1_5b_instruct.yaml              # 1.5B 在线推理启动配置
      ├── qwen2_7b                                          # qwen2 7B 配置文件
      │   ├── finetune_qwen2_7b.yaml                        # 7B 全参微调启动配置
      │   └── predict_qwen2_7b_instruct.yaml                # 7B 在线推理启动配置
      ├── qwen2_57b                                         # qwen2 57B 配置文件
      │   ├── finetune_qwen2_57b.yaml                       # 57B 全参微调启动配置
      │   ├── predict_qwen2_57b_a14b_instruct.yaml          # 57B 在线推理启动配置
      │   └── pretrain_qwen2_57b.yaml                       # 57B 训练启动配置
      ├── qwen2_72b                                         # qwen2 72B 配置文件
      │   ├── finetune_qwen2_72b_32k.yaml                   # 72B 32k 全参微调启动配置
      │   ├── predict_qwen2_72b_instruct.yaml               # 72B 在线推理启动配置
      └── └── predict_qwen2_72b_instruct_128k.yaml          # 72B 128k 在线推理启动配置
    
  3. 环境准备和任务启动脚本:

    research/qwen2
      ├── convert_weight.py                         # 权重转换脚本
      └── convert_moe_weight.py                     # 针对Qwen2-57B-A14B的MoE模型权重转换脚本
    

环境及数据准备

安装环境

MindFormers软硬件配套关系以及安装参考环境安装指南版本匹配关系

数据及权重准备

数据集下载

MindFormers提供alpaca作为微调数据集。

数据集名称 适用模型 适用阶段 下载链接
alpaca qwen2-7b Finetune Link

数据预处理中所用的vocab.jsonmerges.txt可以参考模型权重下载进行下载。

  • alpaca 数据预处理

    1. 执行research/qwen2/alpaca_converter.py,将原始数据集转换为指定格式。(静态shape)
    2. 执行research/qwen2/alpaca_converter_json.py,将原始数据集转换为指定格式。(动态shape)
    python alpaca_converter.py \
     --data_path path/alpaca_data.json \
     --output_path /path/alpaca-data-messages.json
    
    # 参数说明
    data_path:   输入下载的文件路径
    output_path: 输出文件的保存路径
    

    执行research/qwen2/qwen2_preprocess.py文件,进行数据预处理和Mindrecord数据生成。

    python qwen2_preprocess.py \
     --dataset_type 'qa' \
     --input_glob /path/alpaca-data-messages.json \
     --vocab_file /path/vocab.json \
     --merges_file /path/merges.txt \
     --seq_length 32768 \
     --output_file /path/alpaca-messages.mindrecord
    
    # 参数说明
    dataset_type: 预处理数据类型
    input_glob:   转换后的alpaca的文件路径
    vocab_file:   vocab.json文件路径
    merges_file:  merges.txt文件路径
    seq_length:   输出数据的序列长度
    output_file:  输出文件的保存路径
    

模型权重下载

用户可以从HuggingFace官方下载预训练权重,经过模型权重转换后进行使用,vocab.jsonmerges.txt文件也在链接中下载。

词表下载链接:vocab.jsonmerges.txt

模型名称 Base权重(建议训练和微调使用) Instruct权重(建议推理使用)
qwen2-72b-Instruct Link Link
qwen2-57b-A14B-Instruct Link Link
qwen2-7b-Instruct Link Link

模型权重转换

下载完成后,运行如下转换脚本,将huggingface的权重转换为完整的ckpt权重。

# 稠密模型
python convert_weight.py --model qwen2 --input_path TORCH_CKPT_DIR --output_path {path}/MS_CKPT_NAME --dtype bf16

# 参数说明
model:       模型名称
input_path:  下载HuggingFace权重的文件夹路径
output_path: 转换后的MindSpore权重文件保存路径
dtype:       转换权重的精度

# MoE模型
cd mindformers/research/qwen2
python convert_moe_weight.py --torch_ckpt_dir TORCH_CKPT_DIR --mindspore_ckpt_path {path}/MS_CKPT_NAME --dtype bf16 --config_path predict_qwen2_57b_a14b_instruct.yaml

# 参数说明
torch_ckpt_dir:      下载HuggingFace权重的文件夹路径
mindspore_ckpt_path: 转换后的MindSpore权重文件保存路径
dtype:               转换权重的精度
config_path:         推理yaml文件路径
  • 模型权重切分与合并

    从hugging face或官方github仓库转换而来的权重通常是单卡权重,基于该权重进行多卡微调,评测,推理,涉及ckpt从单机策略到分布式策略的切换。

    通常训练采用分布式训练,基于该权重进行评测,推理多采用单卡,涉及ckpt从分布式策略到单机策略的切换。

    以上涉及到ckpt的单卡,多卡转换,详细教程请参考特性文档模型权重切分与合并

微调

注意事项:

  1. 当前支持模型已提供推理相关配置文件,请根据实际使用模型更改配置文件。

  2. 运行下面的代码需要在mindformers/目录下,或者先将mindformers/目录所在路径加入到PYTHONPATH环境变量中。

以``qwen2-7b` 8卡微调为例,执行如下命令进行微调,微调前请参考权重转换切分权重。

  1. 主要参数配置参考:
  • 基本配置:

     load_checkpoint: '/path/qwen2_7b.ckpt' # 权重转换后的文件
     train_dataset: &train_dataset
       data_loader:
         type: MindDataset
         dataset_dir: "/path/alpaca-data.mindrecord" # 实际微调数据集
         shuffle: True
     # parallel config
     parallel_config:
       data_parallel: 2
       model_parallel: 4
       pipeline_stage: 1
       use_seq_parallel: True
       micro_batch_num: 1
       vocab_emb_dp: False
       gradient_aggregation_group: 4
     micro_batch_interleave_num: 2
     # processor config
     processor:
       return_tensors: ms
       tokenizer:
         model_max_length: 32768
         vocab_file: "./path/vocab.json" # 参考qwen2-7b官网下载的词表
         merges_file: "./path/merges.txt" # # 参考qwen2-7b官网下载的merge文件
    
  • 动态shape配置:

# model config
model:
  model_config:
    is_dynamic: True
# dataset
train_dataset: &train_dataset
  data_loader:
    type: SFTDataLoader
    dataset_dir: "./path/alpaca-data-json.json"
    tokenizer:
      unk_token: '<|endoftext|>'
      eos_token: '<|endoftext|>'
      pad_token: '<|endoftext|>'
      type: Qwen2Tokenizer
      vocab_file: "./path/vocab.json"
      merges_file: "./path/merges.txt"
    max_length: 32768
    file_format: json
    dataset_name: multi-round-chat-dyn-alpaca
    shuffle: False
    map_function_kwargs: {"user_prompt":"system\nYou are a helpful assistant.", "user_prompt_role":"user\n", "assistant_prompt_role":"assistant\n"}
    num_samples: 20000
  pad_token_id: 151643
  divisor: 4
  remainder: 1
  input_columns: ["input_ids", "labels"]
  num_parallel_workers: 8
  python_multiprocessing: False
  drop_remainder: True
  batch_size: 1
  repeat: 1
  numa_enable: False
  prefetch_size: 1
  dynamic_batch: True
  1. 启动微调:

    bash scripts/msrun_launcher.sh "run_mindformer.py \
     --config research/qwen2/qwen2_7b/finetune_qwen2_7b.yaml \
     --run_mode finetune \
     --register_path research/qwen2"
    

推理

大模型推理升级训推一体架构,实现脚本、分布式策略和运行时的统一,通过融合大算子降低推理时延,有效提升网络吞吐量。

注意事项:

  1. 当前支持模型已提供推理相关配置文件,请根据实际使用模型更改配置文件。

  2. 运行下面的代码需要在mindformers/目录下,或者先将mindformers/目录所在路径加入到PYTHONPATH环境变量中。

基于高阶接口的推理

多卡推理

qwen2_7b4卡推理为例,执行如下命令进行推理, 推理前先参考权重转换切分权重。

  1. 主要参数配置参考:

    parallel_config:
      data_parallel: 1
      model_parallel: 4
      pipeline_stage: 1
      micro_batch_num: 1
      vocab_emb_dp: False
      gradient_aggregation_group: 4
    model:
      model_config:
        qkv_concat: False
    processor:
      tokenizer:
        vocab_file: "/path/vocab.json" # 参考qwen2-7b官网下载的词表
        merges_file: "/path/merges.txt" # # 参考qwen2-7b官网下载的merge文件
    
  2. 启动多卡推理:

    # 推理命令中参数会覆盖yaml文件中的相同参数
    bash scripts/msrun_launcher.sh "run_mindformer.py \
     --config research/qwen2/qwen2_7b/predict_qwen2_7b_instruct.yaml \
     --load_checkpoint /path/model_dir \
     --register_path research/qwen2 \
     --run_mode predict \
     --use_parallel True \
     --auto_trans_ckpt False \
     --predict_data 帮助我制定一份去上海的旅游攻略" 4
    # 帮助我制定一份去上海的旅游攻略,包括景点、美食、住宿等信息...
    
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/mindspore/mindformers.git
git@gitee.com:mindspore/mindformers.git
mindspore
mindformers
mindformers
r1.5.0

搜索帮助