faa909dcc3 | ||
---|---|---|
.. | ||
README.md | ||
convert_w8a8_quant_weights.py | ||
humaneval_python.txt | ||
run_300i_duo.sh | ||
run_800i_a2_pa.sh |
README.md
STARCODER README
StarCoder模型是在The Stack (v1.2)的80+种编程语言上训练的15.5B参数模型,不包括选择退出请求。该模型使用多查询注意力,一个包含8192个令牌的上下文窗口,并在1万亿个令牌上使用填充中间目标进行训练。
- 参考实现:
https://huggingface.co/bigcode/starcoder
特性矩阵
- 此矩阵罗列了各starcoder模型支持的特性
模型及参数量 | 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 | 长序列 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
starcoder-15.5B | 支持world size 1,2,4,8 | 支持world size 2,4 | √ | × | × | √ | √ | × | × | × | × | √ | √ | × |
使用说明
权重下载
- 下载starcoder模型权重,放置到自定义路径下
https://huggingface.co/bigcode/starcoder/tree/main
- 修改
config.json
中的model_type
为starcoder
权重转换
量化权重转换(W8A8)
- 去目标文件目录下执行
python convert_w8a8_quant_weights.py --model_path {浮点权重路径} --save_directory {W8A8量化权重路径}
-
若要测试HumanEval量化精度并符合与浮点精度保持1%差距,可配置回退层
disabled_names
-
配置
量化类型及精度 torch_dtype quantize FP16 "float16" "" BF16 "bfloat16" "" W8A8 "float16" "w8a8" W8A16 "float16" "w8a16" -
示例
- starcoder模型使用FP16精度,W8A8量化
{ "torch_dtype": "float16", "quantize": "w8a8", }
- starcoder模型使用FP16精度,W8A8量化
路径变量解释
变量名 | 含义 |
---|---|
working_dir | 加速库及模型库下载后放置的目录 |
llm_path | 模型仓所在路径。若使用编译好的包,则路径为${working_dir}/MindIE-LLM/ ;若使用gitee下载的代码,则路径为${working_dir}/MindIE-LLM/examples/atb_models |
script_path | 脚本所在路径;starcoder工作脚本所在路径为${llm_path}/examples/models/starcoder |
weight_path | 模型权重路径 |
300I DUO 运行操作说明
对话测试
- 运行启动脚本
- 在${llm_path}目录下执行以下指令
bash ${script_path}/run_300i_duo.sh ${weight_path}
- 在${llm_path}目录下执行以下指令
- 环境变量说明
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}替换为实际路径
对话测试脚本参数说明
--model_path
模型路径--input_text
输入问题--max_input_length
最大输入长度--max_output_length
最大输出长度--max_batch_size
每次运行时固定的batch数量- 所有参数可见run_pa.py文件中
800I A2 运行操作说明
对话测试
运行Flash Attention FP16
- 暂不支持
运行Flash Attention BF16
- 暂不支持
运行Paged Attention FP16
对话测试
- 运行启动脚本
- 在${llm_path}目录下执行以下指令
bash ${script_path}/run_800i_a2_pa.sh ${weight_path}
- 在${llm_path}目录下执行以下指令
- 环境变量说明
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}替换为实际路径
对话测试脚本参数说明
--model_path
模型路径--input_text
输入问题--max_input_length
最大输入长度--max_output_length
最大输出长度--max_batch_size
每次运行时固定的batch数量- 所有参数可见run_pa.py文件中
运行Paged Attention BF16
- 待补充
运行W8A8量化
- 获取量化权重后操作步骤同上
运行KV cache量化
- 待补充
运行稀疏量化
- 待补充
运行MOE量化
- 待补充