DeepSeek-R1-Distill-Qwen-7B-OrangePi
Usage
Using the reasoning data generated by DeepSeek-R1, DeepSeek AI fine-tuned several dense models that are widely used in the research community, slightly changing their configs and tokenizers. DeepSeek-R1-Distill-Qwen-7B is one of them.
约束条件
- 在20t24g 香橙派aipro上部署DeepSeek-R1-Distill-Qwen-7B模型
- 需要修改权重目录下的config.json文件,"torch_dtype"字段改为"float16", "max_position_embedding"字段改为4096
- 由于此硬件为单卡,仅支持TP=1
权重
权重下载
量化权重生成(可选,二选一)
魔乐社区下载量化权重(推荐)
量化权重下载
本地部署w8a8量化
使用此方法需要另外准备一台Atlas 800I A2或Atlas 300I DUO,转换成功后需把权重转移至香橙派上
生成量化权重依赖msModelSlim工具,安装方式见此README
W8A8量化权重请使用以下指令生成
# 设置CANN包的环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 关闭虚拟内存
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False
# 进入atb-models目录
cd ${ATB_SPEED_HOME_PATH}
# DeepSeek-R1-Distill-Qwen-7B量化,无回退层,antioutlier使用m1算法配置,使用min-max量化方式,校准数据集使用50条BoolQ数据,在NPU上进行运算
python3 msit/msmodelslim/example/Qwen/quant_qwen.py --model_path $ORG --save_directory $MODEL --calib_file msit/msmodelslim/example/common/boolq.jsonl --w_bit 8 --a_bit 8 --device_type npu --disable_names "lm_head" --anti_method m4
- 再执行以下python脚本把deq_scale转换成int64
import os
import numpy as np
import torch
from safetensors.torch import load_file
from safetensors.torch import save_file
def deqscale2int64(scale):
scale = scale.numpy()
scale = np.frombuffer(scale.tobytes(), dtype=np.int32).astype(np.int64)
scale = torch.tensor(scale)
return scale
MODEL_PATH = "" # 在此处添加模型路径
safetensor_path = os.path.join(MODEL_PATH, 'quant_model_weight_w8a8.safetensors')
safetensor_weight = load_file(safetensor_path)
for key in safetensor_weight.keys():
if 'deq_scale' in key:
safetensor_weight[key] = deqscale2int64(safetensor_weight[key])
save_file(safetensor_weight, safetensor_path)
- 把转换成功的权重转移至香橙派
新建环境
1.1 安装CANN
1.1.1 安装toolkit
- 下载
cpu | 包名(其中${version} 为实际版本) |
---|---|
aarch64 | Ascend-cann-toolkit_${version}_linux-aarch64.run |
- 安装
# 安装toolkit 以arm为例 chmod +x Ascend-cann-toolkit_${version}_linux-aarch64.run ./Ascend-cann-toolkit_${version}_linux-aarch64.run --install source /usr/local/Ascend/ascend-toolkit/set_env.sh
1.1.2 安装kernel
- 下载
包名 |
---|
Ascend-cann-kernels-310b*_${version}_linux.run |
根据芯片型号选择对应的安装包
安装
chmod +x Ascend-cann-kernels-*_${version}_linux.run ./Ascend-cann-kernels-*_${version}_linux.run --install
1.1.3 安装加速库
- 下载加速库
- 下载链接。
包名(其中${version} 为实际版本) |
---|
Ascend-cann-nnal_${version}_linux-aarch64.run |
将文件放置在${working_dir}路径下
安装
chmod +x Ascend-cann-nnal_*_linux-*.run ./Ascend-cann-nnal_*_linux-*.run --install --install-path=${working_dir} source ${working_dir}/nnal/atb/set_env.sh
可以使用
uname -a
指令查看服务器是x86还是aarch架构可以使用以下指令查看abi是0还是1
python -c "import torch; print(torch.compiled_with_cxx11_abi())"
- 若输出结果为True表示abi1,False表示abi0
1.2 安装PytorchAdapter
先安装torch 再安装torch_npu
1.2.1 安装torch
下载
包名 torch-2.1.0-cp310-cp10-linux_aarch64.whl ... - 根据所使用的环境中的python版本以及cpu类型,选择对应版本的torch安装包。
安装
# 安装torch 2.1.0 的python 3.10 的arm版本为例 pip install torch-2.1.0-cp310-cp310-linux_aarch64.whl
1.2.2 安装torch_npu
下载PyTorch Adapter,安装方法:
包名 |
---|
pytorch_v2.1.0_py38.tar.gz |
pytorch_v2.1.0_py39.tar.gz |
pytorch_v2.1.0_py310.tar.gz |
... |
- 安装选择与torch版本以及python版本一致的npu_torch版本
# 安装 torch_npu,以 torch 2.1.0,python 3.10 的版本为例
tar -zxvf pytorch_v2.1.0_py310.tar.gz
pip install torch*_aarch64.whl
1.3 安装开源软件依赖
| 默认依赖 | requirement.txt |
- 开源软件依赖请使用下述命令进行安装:
pip install -r ./requirements.txt
1.4 安装模型仓
使用编译好的包进行安装
下载编译好的包
包名 Ascend-mindie-atb-models_1.0.RC1_linux-aarch64_torch1.11.0-abi0.tar.gz Ascend-mindie-atb-models_1.0.RC1_linux-aarch64_torch2.1.0-abi1.tar.gz ... 将文件放置在${working_dir}路径下
解压
cd ${working_dir} mkdir MindIE-LLM cd MindIE-LLM tar -zxvf ../Ascend-mindie-atb-models_*_linux-*_torch*-abi*.tar.gz
安装atb_llm whl包
cd ${working_dir}/MindIE-LLM # 首次安装 pip install atb_llm-0.0.1-py3-none-any.whl # 更新 pip install atb_llm-0.0.1-py3-none-any.whl --force-reinstall
纯模型推理
对话测试
进入llm_model路径
cd $ATB_SPEED_HOME_PATH
执行对话测试
python -m examples.run_fa_edge \
--model_path ${权重路径} \
--input_text 'What is deep learning?' \
--max_output_length 20 \
声明
- 本代码仓提到的数据集和模型仅作为示例,这些数据集和模型仅供您用于非商业目的,如您使用这些数据集和模型来完成示例,请您特别注意应遵守对应数据集和模型的License,如您因使用数据集或模型而产生侵权纠纷,华为不承担任何责任。
- 如您在使用本代码仓的过程中,发现任何问题(包括但不限于功能问题、合规问题),请在本代码仓提交issue,我们将及时审视并解答。