STARCODER2 README
- StarCoder2是一系列代码生成模型(3B、7B 和 15B),在 The Stack v2 的 600+ 种编程语言和一些自然语言文本(如 Wikipedia、Arxiv 和 GitHub 问题)上进行了训练
- 此代码仓目前支持StarCoder2-7B、StarCoder2-15B
支持特性
模型及参数量 |
800I A2 Tensor Parallelism |
300I DUO Tensor Parallelism |
FP16 |
BF16(仅800I A2支持) |
Flash Attention |
Paged Attention |
W8A8量化 |
W8A16量化 |
KV cache量化 |
稀疏量化(仅300I DUO支持) |
MOE |
MindIE |
TGI |
长序列 |
StarCoder2-7B |
支持world size 1,2,4,8 |
× |
√ |
× |
× |
√ |
× |
× |
× |
× |
× |
× |
× |
× |
StarCoder2-15B |
支持world size 2,4,8 |
× |
√ |
× |
× |
√ |
√ |
× |
× |
× |
× |
√ |
× |
× |
使用说明
路径变量解释
变量名 |
含义 |
working_dir |
加速库及模型库下载后放置的目录 |
llm_path |
模型仓所在路径。若使用编译好的包,则路径为${working_dir}/MindIE-LLM/ ;若使用gitee下载的代码,则路径为${working_dir}/MindIE-LLM/examples/atb_models |
script_path |
脚本所在路径;StarCoder2的工作脚本所在路径为${llm_path}/examples/models/starcoder2 |
weight_path |
模型权重路径 |
权重
权重下载
- 下载starcoder2模型权重,放置到
${weight_path}
下
权重转换
- 当前仅支持加载safetensor格式的权重文件,若权重文件为bin格式,请参考此README文件
量化权重生成(W8A8)
- 当前仅StarCoder2-15B支持W8A8量化
- 到
${script_path}
路径下,运行convert_w8a8_quant_weights.py
cd ${script_path}
python convert_w8a8_quant_weights.py --model_path {浮点权重路径} --save_directory {W8A8量化权重路径}
- 权重生成后确认模型配置文件,确认
${weight_path}/config.json
文件中的torch_dtype
和quantize
torch_dtype
和quantize
类型用于标识量化类型和精度
量化类型及精度 |
torch_dtype |
quantize |
FP16 |
"float16" |
"" |
BF16 |
"bfloat16" |
"" |
W8A8 |
"float16" |
"w8a8" |
W8A16 |
"float16" |
"w8a16" |
- 示例
- 若要测试HumanEval量化精度并符合与浮点精度保持1%差距,可配置中
convert_w8a8_quant_weights.py
的回退层disabled_names
disabled_names = [
"model.layers.0.mlp.c_proj",
"model.layers.1.mlp.c_proj",
"model.layers.2.mlp.c_proj",
"model.layers.3.mlp.c_proj",
"model.layers.4.mlp.c_proj",
"model.layers.5.mlp.c_proj",
"model.layers.6.mlp.c_proj",
"model.layers.7.mlp.c_proj",
"model.layers.8.mlp.c_proj",
"model.layers.9.mlp.c_proj",
"model.layers.10.mlp.c_proj",
"model.layers.11.mlp.c_proj",
"model.layers.12.mlp.c_proj",
"model.layers.13.mlp.c_proj",
"model.layers.14.mlp.c_proj",
"model.layers.15.mlp.c_proj",
"model.layers.16.mlp.c_proj",
"model.layers.17.mlp.c_proj",
"model.layers.18.mlp.c_proj",
"model.layers.19.mlp.c_proj",
"model.layers.20.mlp.c_proj",
"model.layers.21.mlp.c_proj",
"model.layers.22.mlp.c_proj",
"model.layers.23.mlp.c_proj",
"model.layers.24.mlp.c_proj",
"model.layers.25.mlp.c_proj",
"model.layers.26.mlp.c_proj",
"model.layers.27.mlp.c_proj",
"model.layers.28.mlp.c_proj",
"model.layers.29.mlp.c_proj",
"model.layers.30.mlp.c_proj",
"model.layers.31.mlp.c_proj",
"model.layers.32.mlp.c_proj",
"model.layers.33.mlp.c_proj",
"model.layers.34.mlp.c_proj",
"model.layers.35.mlp.c_proj",
"model.layers.36.mlp.c_proj",
"model.layers.37.mlp.c_proj",
"model.layers.38.mlp.c_proj",
"model.layers.39.mlp.c_proj",
]
800I A2 运行操作说明
对话测试
运行Paged Attention FP16
- 运行启动脚本
- 环境变量说明
export BIND_CPU=1
- 绑定CPU核心开关
- 默认进行绑核
- 若当前机器未设置NUMA或绑核失败,可将 BIND_CPU 设为 0
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
- 指定当前机器上可用的逻辑NPU核心,多个核心间使用逗号相连
- 核心ID查阅方式见此README文件的【启动脚本相关环境变量】章节
- 若要使用单卡双芯,请指定至少两个可见核心;若要使用双卡四芯,请指定至少四个可见核心
export TP_WORLD_SIZE=2
- 指定模型运行时的TP数,即world size
- 默认为单卡双芯
- 各模型支持的TP数参考“特性矩阵”
- “单卡双芯”运行请指定
TP_WORLD_SIZE
为2,“双卡四芯”运行请指定TP_WORLD_SIZE
为4
export MASTER_PORT=20030
- 设置卡间通信端口
- 默认使用20030端口
- 目的是为了避免同一台机器同时运行多个多卡模型时出现通信冲突
- 设置时端口建议范围为:20000-20050
export PYTHONPATH=${llm_path}:$PYTHONPATH
- 将模型仓路径加入Python查询模块和包的搜索路径中
- 将
${llm_path}
替换为实际路径
运行W8A8量化
对话测试脚本参数说明
--model_path
模型路径
--input_text
输入问题
--max_input_length
最大输入长度
--max_output_length
最大输出长度
--max_batch_size
每次运行时固定的batch数量
- 所有参数可见run_pa.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
bash run.sh pa_fp16 full_HumanEval 1 starcoder2 ${weight_path} 4
- 运行量化权重时需注意
${weight_path}/config.json
中的quantize
字段和torch_dtype
字段是否与权重匹配,参考此README文件
性能测试
- 参考此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 starcoder2 ${weight_path} 4
- 运行量化权重时需注意
${weight_path}/config.json
中的quantize
字段和torch_dtype
字段是否与权重匹配,参考此README文件