代码拉取完成,页面将自动刷新
星辰语义大模型TeleChat是由中国电信人工智能科技有限公司研发训练的大语言模型,采用1.5万亿 Tokens中英文高质量语料进行训练。
https://github.com/Tele-AI/Telechat
该模型需要以下插件与驱动
表 1 版本配套表
配套 | 版本 | 下载链接 |
---|---|---|
固件与驱动 | 23.0.0 | 固件与驱动 |
CANN(toolkit+kernels) | 7.0.0 | CANN |
FrameworkPTAdapter (pytorch2.0.1) | 5.0.0 | PTA |
Python | 3.9.18 | - |
下载安装配套表中驱动固件
根据芯片型号选择相应的安装包安装
# 安装驱动,以arm为例
chmod +x ./Ascend-hdk-{型号}-npu-driver_23.0.0_linux-aarch64.run
./Ascend-hdk-{型号}-npu-driver_23.0.0_linux-aarch64.run --full
# 安装固件
chmod +x ./Ascend-hdk-{型号}-npu-firmware_7.1.0.3.220.run
./Ascend-hdk-{型号}-npu-firmware_7.1.0.3.220.run --full
下载安装cann-toolkit和cann-kernels
# 安装toolkit,以arm为例
chmod +x ./Ascend-cann-toolkit_7.0.0_linux-aarch64.run
./Ascend-cann-toolkit_7.0.0_linux-aarch64.run --full
# 安装kernels
chmod +x ./Ascend-cann-kernels-{型号}_7.0.0_linux.run
./Ascend-cann-kernels-{型号}_7.0.0_linux.run --install
# 激活环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
下载安装PytorchAdapter及配套python依赖
首先安装torch,其次安装torch_npu,版本为2.0.1
# 安装torch_npu,以arm为例
pip3 install torch_npu-2.0.1.post1-cp39-cp39-linux_aarch64.whl
# 安装requirements
pip3 install -r requirements.txt
下载安装AscendTransformerBoost
具体使用cxx11abi0还是cxx11abi1,可通过python命令查询
import torch
torch.compiled_with_cxx11_abi()
若返回True,则使用cxx11abi1,否则相反
# 安装atb,以arm为例
chmod +x Ascend-cann-atb_7.0.0_linux-aarch64_abi0.run
./Ascend-cann-atb_7.0.0_linux-aarch64_abi0.run --install
# 激活环境变量
source /usr/local/Ascend/atb/set_env.sh
编译ModelLink代码仓
# clone代码仓
git clone https://gitee.com/ascend/ModelLink.git
# 编译
cd ModelLink/mindie_ref/mindie_llm/atb_models
bash scripts/build.sh
# 激活环境变量
source output/atb_speed/set_env.sh
# 打开性能优化和内存优化开关
export TASK_QUEUE_ENABLE=1 # 开启TaskQueue
export ATB_OPERATION_EXECUTE_ASYNC=1 # Operation异步运行
export ATB_USE_TILING_COPY_STREAM=1 # 开启多stream功能
export ATB_LAYER_INTERNAL_TENSOR_REUSE=1 # 中间tensor内存复用
下载权重
权重类型 | 下载目录 | 提取码 |
---|---|---|
开源FP16权重 | Telechat_float_path | - |
anti outlier调优后的FP16权重 | Telechat_anti_float_path | lm089j |
int8量化权重 | Telechat_quant_path | xf9jl2 |
开始精度验证。
场景一:使用提供的fp16权重,自行量化
该模型在昇腾适配使用的技术栈为anti_outlier + ptq
cd ModelLink/mindie_ref/mindie_llm/atb_models/pytorch/examples/telechat
patch -p0 /usr/local/Ascend/ascend-toolkit/latest/tools/modelslim/pytorch/llm_ptq/anti_outlier/dag_utils/model_structure_process.py < model_structure_process.patch
cp modeling_telechat_torch_npu.py $Telechat_float_path/modeling_telechat.py
python3 quant_calib_anti_outlier.py --level=xx --jsonl_path=xx --checkpoint_path=xx
--level
:量化回退等级,默认为L5--jsonl_path
:量化校准集路径--checkpoint_path
:开源FP16权重路径,即$Telechat_float_path场景二:使用提供的int8量化权重
新建test.jsonl文件,按以下格式写入您想要提问的问题
# example
{"input": "编写一首与春天有关的诗歌。"}
{"input": "根据给定的故事情节编写结局。以下是一篇故事的示例,故事情节应该具有足够的信息以使参与者编写自己的结局。“小明和小红是俩好朋友,他们一起长大,彼此之间的友谊非常稳固。他们的家庭都住在同一个小区,而且也是邻居。自从小明的父亲因为工作原因要外派到国外,小明便非常的寂寞。夜里,小明会偷偷地默默地流泪,每当他想起小红时,他就更加难过。小红察觉到小明的变化之后,决定在小明的父亲离开之前做点什么来让他感到开心一些。"}
{"input": "以下是一段两人的对话内容:小明:老师李,我这次数学考试考了多少分?老师李:小明,你考了60分。小明:60分?我怎么可能考这么低分啊!老师李:你平时上课不认真,不做作业,只顾着玩游戏,这是应得的结果。小明:可是我可以补考吗?老师李:可以,但是你必须得用这段时间好好复习,不能再浪费时间了。根据这段对话内容回答问题:小明为什么会考这么低的分数?"}
执行推理脚本
ModelLink/mindie_ref/mindie_llm/atb_models/pytorch/examples/telechat/run.sh
脚本中
FLOAT_MODEL_PATH
FLOAT_PART_MODEL_PATH
QUANT_MODEL_PATH
QUANT_PART_MODEL_PATH
INPUT_JSON_PATH
OUTPUT_JSON_PATH
DEVICE
# 单卡量化推理
bash run.sh --run_performance=0 --run_parallel=0 --run_quant=1
# 多卡量化切分并推理
bash run.sh --run_performance=0 --run_parallel=1 --run_quant=1 --cut_quant
# 多卡量化推理(跳过切分)
bash run.sh --run_performance=0 --run_parallel=1 --run_quant=1
# 单卡浮点推理
bash run.sh --run_performance=0 --run_parallel=0 --run_quant=0
# 多卡浮点切分并推理
bash run.sh --run_performance=0 --run_parallel=1 --run_quant=0 --cut_float
# 多卡浮点推理(跳过切分)
bash run.sh --run_performance=0 --run_parallel=1 --run_quant=0
--run_performance
:为0时运行精度测试,为1时运行性能测试--run_parallel
:为0时单卡运行,为1时双卡运行--run_quant
:为0时运行浮点模型,为1时运行量化模型--cut_quant
: 将antioutlier浮点权重切分,并同时切分量化权重效果方面,完成了和基于A10卡模型量化效果对齐
开始性能验证
a. 修改ModelLink/mindie_ref/mindie_llm/atb_models/pytorch/examples/telechat/run.sh
脚本中
FLOAT_MODEL_PATH
FLOAT_PART_MODEL_PATH
QUANT_MODEL_PATH
QUANT_PART_MODEL_PATH
INPUT_JSON_PATH
OUTPUT_JSON_PATH
DEVICE
# 单卡量化推理
bash run.sh --run_performance=1 --run_parallel=0 --run_quant=1
# 多卡量化切分并推理
bash run.sh --run_performance=1 --run_parallel=1 --run_quant=1 --cut_quant
# 多卡量化推理(跳过切分)
bash run.sh --run_performance=1 --run_parallel=1 --run_quant=1
# 单卡浮点推理
bash run.sh --run_performance=1 --run_parallel=0 --run_quant=0
# 多卡浮点切分并推理
bash run.sh --run_performance=1 --run_parallel=1 --run_quant=0 --cut_float
# 多卡浮点推理(跳过切分)
bash run.sh --run_performance=1 --run_parallel=1 --run_quant=0
--run_performance
:为0时运行精度测试,为1时运行性能测试--run_parallel
:为0时单卡运行,为1时双卡运行--run_quant
:为0时运行浮点模型,为1时运行量化模型--cut_quant
: 将antioutlier浮点权重切分,并同时切分量化权重脚本中一共测试了25组case,其中部分case具体比对效果如下:
输入输出信息 | NPU (tokens/s) |
---|---|
输入100输出100 | 15 |
输入1000输出100 | 13 |
输入2000输出100 | 11 |
25组case平均 | 13 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。