faa909dcc3 | ||
---|---|---|
.. | ||
README.md | ||
convert_quant_weights.py | ||
run_pa.sh |
README.md
README
-
Llama3(Large Language Model Meta AI 3),是由 Meta AI 发布的一个开放且高效的大型基础语言模型,可以通过自然语言交互的方式提供知识、文本生成、语言翻译、语言理解、代码编写和解释等任务。
-
Llama3当前包含两个参数版本:Llama3-8B和Llama3-70B。相较于Llama2,Llama3支持8K长文本,改进的tokenizer具有128K token的词汇量,可实现更好的性能;同时,Llama3在代码生成等任务上实现了领先,能够进行复杂的推理,更遵循指令并解决很多微妙的问题。
-
此代码仓中实现了一套基于NPU硬件的Llama3推理模型。配合加速库使用,旨在NPU上获得极致的推理性能。
特性矩阵
- 此矩阵罗列了Llama3模型支持的特性
模型及参数量 | 800I A2 Tensor Parallelism | 300I DUO Tensor Parallelism | FP16 | BF16 | Flash Attention | Paged Attention | W8A8量化 | W8A16量化 | W4A16量化 | KV cache量化 | 稀疏量化 | MindIE Service | TGI | 长序列 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Llama3-8B | 支持world size 1,2,4,8 | 支持world size 2,4 | √ | √ | √ | √ | √ | × | × | × | × | √ | × | × |
Llama3-70B | 支持world size 8 | × | √ | √ | √ | √ | √ | √ | √ | × | × | √ | × | × |
使用说明
路径变量解释
变量名 | 含义 |
---|---|
working_dir | MindIE加速库及模型库下载后放置的目录 |
llm_path | 模型仓所在路径。若使用编译好的包,则路径为${working_dir}/MindIE-LLM/ ;若使用gitee下载的代码,则路径为${working_dir}/MindIE-LLM/examples/atb_models |
script_path | 脚本所在路径;Llama3的工作脚本所在路径为${llm_path}/examples/models/llama3 |
weight_path | 模型权重路径 |
权重
权重下载
环境准备
基础环境配置
- 参考此README文件
- 检查python依赖库中transformers版本的配置,Llama3要求transformers库最低版本为4.38.2
pip show transformers # 若transformers版本低于4.38.2,请将transformers更新至4.38.2 pip install transformers==4.38.2
- 300I DUO硬件不支持BF16推理,执行推理前需要将模型配置文件
config.json
中的torch_dtype
修改为float16
量化权重生成
- 基于原始的FP16的权重,生成量化权重
- W8A8 Antioutlier量化权重请使用以下指令生成
- Llama3-8B推荐使用W8A8 Antioulier量化
- 执行量化脚本
# 设置CANN包的环境变量 source /usr/local/Ascend/ascend-toolkit/set_env.sh cd ${llm_path} python examples/models/llama3/convert_quant_weights.py --model_path {浮点权重路径} --save_directory {W8A8量化权重路径} --w_bit 8 --a_bit 8 --disable_level L0 --device_type cpu --anti_method m2 --act_method 1 --calib_file ${llm_path}/examples/convert/model_slim/boolq.jsonl
- W8A16量化权重请使用以下指令生成
- 当前仅LLaMa3-70B支持W8A16量化
# 设置CANN包的环境变量 source /usr/local/Ascend/ascend-toolkit/set_env.sh cd ${llm_path} python examples/models/llama3/convert_quant_weights.py --model_path {浮点权重路径} --save_directory {W8A16量化权重路径} --w_bit 8 --a_bit 16 --act_method 3 --w_sym False --mm_tensor False --calib_file ${llm_path}/examples/convert/model_slim/boolq.jsonl --anti_method 'm3'
- 当前仅LLaMa3-70B支持W8A16量化
- W4A16量化权重请使用以下指令生成
- 当前仅LLaMa3-70B支持W4A16量化
# 设置CANN包的环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
cd ${llm_path}
python examples/models/llama3/convert_quant_weights.py --model_path {浮点权重路径} --save_directory {W8A16量化权重路径} --w_bit 4 --a_bit 16 --w_sym True --mm_tensor False --is_lowbit True --group_size=128 --open_outlier False
推理
对话测试
运行Paged Attention BF16
- 环境变量说明
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
- 指定当前机器上可用的逻辑NPU核心,多个核心间使用逗号相连
- 核心ID查阅方式见此README文件的【启动脚本相关环境变量】章节
export MASTER_PORT=20030
- 设置卡间通信端口
- 默认使用20030端口
- 目的是为了避免同一台机器同时运行多个多卡模型时出现通信冲突
- 设置时端口建议范围为: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 export ATB_LAUNCH_KERNEL_WITH_TILING=0
- 运行启动脚本
- 在${llm_path}目录下执行以下指令
# 执行单卡推理 export ASCEND_RT_VISIBLE_DEVICES=0 bash ${script_path}/run_pa.sh ${weight_path} ${max_output_length} # 执行4卡推理 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 bash ${script_path}/run_pa.sh ${weight_path} ${max_output_length} # 执行8卡推理 export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash ${script_path}/run_pa.sh ${weight_path} ${max_output_length}
- 在${llm_path}目录下执行以下指令
运行Paged Attention FP16
- 环境变量说明
- 参见“运行Paged Attention BF16”中的环境变量说明
- 相比于BF16,运行FP16时需修改${weight_path}/config.json中的
torch_dtype
字段,将此字段对应的值修改为float16
- 运行启动脚本
- 与“运行Paged Attention BF16”的启动方式相同
精度测试
- 参考此README文件
- 示例
# 测试8卡精度 cd ${llm_path}/tests/modeltest export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash run.sh pa_fp16 full_BoolQ 1 llama ${llama3-8b权重路径} 8 bash run.sh pa_fp16 full_BoolQ 1 llama ${llama3-70b权重路径} 8
- 示例
性能测试
- 参考此README文件
- 示例
# 测试8卡性能 cd ${llm_path}/tests/modeltest export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash run.sh pa_fp16 performance [[2048,2048],[1024,1024],[512,512],[256,256]] 1 llama ${llama3-8b权重路径} 8 bash run.sh pa_fp16 performance [[2048,2048],[1024,1024],[512,512],[256,256]] 1 llama ${llama3-70b权重路径} 8 # 测试长序列性能(800I A2 32G支持32k、64k序列长度, 800I A2 64G支持32k、64k、128k、192k、256k序列长度) export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 bash run.sh pa_fp16 performance [[32768,1024],[65536,1024],[131072,1024],[196608,1024],[262144,1024]] 1 llama ${llama3-70b权重路径} 8
- 示例