LLaMA-Factory-310P3/mindie/examples/models/internlm/README.md

11 KiB
Raw Blame History

README

  • InternLM开源了InternLM系列的多个基础模型和为实际场景量身定制的聊天模型。该系列模型具有以下特点

    • 它利用数万亿个高质量的代币进行培训,以建立强大的知识库。
    • 一代的internlm-20B支持 8k 上下文窗口长度InternLM2-7B/20B-Chat有效支持200K超长上下文可实现更长的输入序列和更强的推理能力。
    • 它为用户提供了一个多功能的工具集,可以灵活地构建自己的工作流程。
  • 此代码仓中实现了一套基于NPU硬件的Internlm推理模型。配合加速库使用旨在NPU上获得极致的推理性能。

特性矩阵

  • 此矩阵罗列了各Internlm模型支持的特性
模型及参数量 800I A2 Tensor Parallelism 300I DUO Tensor Parallelism FP16 BF16 Flash Attention Paged Attention W8A8量化 W8A16量化 W4A16量化 KV cache量化 稀疏量化 MOE量化 MindIE Service TGI 长序列
internlm-20B 支持world size 2,4,8 支持world size 2,4,8 × × × × × × × × × × ×
intenlm2-7B 支持world size 1,2,4,8 支持world size 1,2,4,8 × × × × × × × × ×
intenlm2-20B 支持world size 2,4,8 支持world size 2,4,8 × × × × × × × × ×

Paged Attention 推理使用说明

路径变量解释

变量名 含义
working_dir 加速库及模型库下载后放置的目录
llm_path 模型仓所在路径。若使用编译好的包,则路径为${working_dir}/ModelLink/若使用gitee下载的代码则路径为${working_dir}/ModelLink/mindie_ref/mindie_llm/atb_models
script_path 脚本所在路径。Internlm系列模型的工作脚本所在路径为${llm_path}/examples/models/internlm
weight_path 模型权重路径
chat 是否启用对话模式

权重

权重下载

权重转换

  • Paged Attention 场景下需要.safetensors 格式的权重,如果没有,参考此README文件转换

量化权重生成

  • 基于原始的FP16的权重生成量化权重

  • W8A8 Antioutlier量化权重请使用以下指令生成

    • 暂不支持
  • W8A8量化权重请使用以下指令生成

    • 暂不支持
  • W8A16量化权重请使用以下指令生成

    • 暂不支持
  • 稀疏量化权重请使用以下指令生成

    • 暂不支持

基础环境变量

推理

对话测试

运行Flash Attention FP16

  • 其余Internlm模型参考以下运行方式
    • 运行启动脚本
      • 在${llm_path}目录下执行以下指令
        bash ${script_path}/run_fa.sh ${weight_path}
        
    • 环境变量说明
      • export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
        • 指定当前机器上可用的逻辑NPU核心多个核心间使用逗号相连
        • 核心ID查阅方式见此README文件的【启动脚本相关环境变量】章节
        • 对于300I DUO卡而言若要使用单卡双芯请指定至少两个可见核心若要使用双卡四芯请指定至少四个可见核心
        • 各模型支持的核心数参考“特性矩阵”
      • export MASTER_PORT=20050
        • 设置卡间通信端口
        • 默认使用20050端口
        • 目的是为了避免同一台机器同时运行多个多卡模型时出现通信冲突
        • 设置时端口建议范围为20000-20050
      • 以下环境变量与性能和内存优化相关,通常情况下无需修改
        export ATB_LAYER_INTERNAL_TENSOR_REUSE=1
        export INF_NAN_MODE_ENABLE=0
        export ATB_OPERATION_EXECUTE_ASYNC=1
        export TASK_QUEUE_ENABLE=1
        export ATB_CONVERT_NCHW_TO_ND=1
        export HCCL_BUFFSIZE=120
        export HCCL_WHITELIST_DISABLE=1
        export ATB_CONTEXT_WORKSPACE_RING=1
        export ATB_CONTEXT_WORKSPACE_SIZE=2629145600
        export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=0
        export ATB_LAUNCH_KERNEL_WITH_TILING=0
        export ATB_OPSRUNNER_KERNEL_CACHE_GLOABL_COUNT=1
        export ATB_OPSRUNNER_KERNEL_CACHE_LOCAL_COUNT=0
        

运行Flash Attention BF16

  • 暂不支持

运行Flash Attention W8A8

  • 暂不支持

运行Flash Attention W8A16

  • 暂不支持

运行Paged Attention FP16

  • 运行启动脚本
    • 在${llm_path}目录下执行以下指令
      bash ${script_path}/run_pa.sh ${weight_path}
      
  • 环境变量说明
    • export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
      • 指定当前机器上可用的逻辑NPU核心多个核心间使用逗号相连
      • 核心ID查阅方式见此README文件的【启动脚本相关环境变量】章节
      • 对于300I DUO卡而言若要使用单卡双芯请指定至少两个可见核心若要使用双卡四芯请指定至少四个可见核心
      • 各模型支持的核心数参考“特性矩阵”
    • export MASTER_PORT=20050
      • 设置卡间通信端口
      • 默认使用20050端口
      • 目的是为了避免同一台机器同时运行多个多卡模型时出现通信冲突
      • 设置时端口建议范围为20000-20050
    • 以下环境变量与性能和内存优化相关,通常情况下无需修改
      export ATB_LAYER_INTERNAL_TENSOR_REUSE=1
      export INF_NAN_MODE_ENABLE=0
      export ATB_OPERATION_EXECUTE_ASYNC=1
      export TASK_QUEUE_ENABLE=1
      export ATB_CONVERT_NCHW_TO_ND=1
      export LCCL_ENABLE_FALLBACK=1
      export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
      export ATB_CONTEXT_WORKSPACE_SIZE=0
      

运行Paged Attention BF16

  • 暂不支持

运行Paged Attention W8A8

  • 暂不支持

运行Paged Attention W8A16

  • 暂不支持

运行KV cache量化

  • 暂不支持

运行稀疏量化

  • 暂不支持

运行MOE量化

  • 暂不支持

200K长序列

  • 修改模型权重下的config.json
    intenlm2-7B改为
    "rope_scaling": {
        "factor": 2.0,
        "type": "dynamic"
    },
    intenlm2-20B改为
    "rope_scaling": {
        "factor": 3.0,
        "type": "dynamic"
    },
    
  • 修改run_pa.py文件 parse_arguments()函数的参数max_input_length必须大于文本token数。因为分词原因文本长度不等于文本token数通常文本字符数大于文本token数。
  • --input_texts
    --input_file
    --max_input_length
    --max_output_length
    
    
    parser.add_argument(
        '--input_texts',
        type=str,
        nargs='+',
        default="text_200K") 
    parser.add_argument(
        '--input_file',
        type=str,
        help='CSV or Numpy file containing tokenized input. Alternative to text input.',
        default="./text_200K.jsonl")
    parser.add_argument('--max_input_length', type=int, default=210000)
    parser.add_argument('--max_output_length', type=int, default=256)
    
  • 输入32K/64K/128K/192K长序列
    • 使用 --input_texts 参数或者 --input_file 参数。
    • --input_texts
      • 必须为 str 或 List[str]格式的对话数据
      """
      这里是10万字的小说内容   \n总结以上文本内容。
      """
      
    • --input_file (推荐)
      • 目前仅支持jsonl格式文件每一行必须为List[Dict]格式的按时间顺序排序对话数据
      • 每个Dict字典中需要至少包含"role"和"content"两个字段
      [{"role": "user", "content": "这里是10万字的小说内容   \n总结以上文本内容。"}]
      
  • 运行启动脚本
    • 在${llm_path}目录下执行以下指令(后面加一个chat参数)
      bash ${script_path}/run_pa.sh ${weight_path} chat
      

精度测试

  • 参考此README文件
    • 示例
      cd ${llm_path}/tests/modeltest
      export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
      export MAX_MEMORY_GB=29
      bash run.sh pa_fp16 full_BoolQ 1 internlm ${internlm系列模型权重路径} 8
      bash run.sh pa_fp16 full_CEval 5 1 internlm ${internlm系列模型权重路径} 8
      
      internlm_20b, internlm2_7b, internlm2_20b, 已合并为 internlm模型名称都是 internlm
      对应于 tests/modeltest/core/internlm_test.py。
      

性能测试

  • 参考此README文件
    • 示例
      cd ${llm_path}/tests/modeltest
      export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
      export MAX_MEMORY_GB=29
      export ATB_LLM_BENCHMARK_ENABLE=1
      bash run.sh pa_fp16 performance [[256,256],[512,512],[1024,1024],[2048,2048]] 1 internlm ${internlm系列模型权重路径} 8
      
      bash run.sh pa_fp16 performance_maxbs [[256,256],[512,512],[1024,1024],[2048,2048]] [[1,2048],[1,2048],[1,2048],[1,2048]] 50 internlm ${internlm系列模型权重路径} 8
      

FAQ

  • 更多环境变量见此README文件
  • 对话测试实际执行的Python文件为${llm_path}/examples/run_fa.py${llm_path}/examples/run_pa.py;这两个文件的参数说明见此README文件
  • 运行时需要通过指令pip listgrep protobuf确认protobuf版本如果版本高于3.20.x请运行指令pip install protobuf==3.20.0进行更新
  • 如果模型生成了 [UNUSED_TOKEN_146]、[UNUSED_TOKEN_145]等特殊字符升级transformers版本到4.37.1以上。
  • Internlm2模型使用bfloat16完成训练使用float16进行推理会有一些精度波动如果logits输出在fp16数据类型1个ulp的最小波动范围内是正常现象。