010-61934861

首页 > Model Zoo > Deepseek-R1-Distill-Llama-8B
Deepseek-R1-Distill-Llama-8B
推理
2025-04-08 | 734人看过
模型信息

基于知识蒸馏技术构建的高效语言模型,将DeepSeek-R1的先进推理能力迁移至轻量级Llama模型,其中Deepseek-R1-Distill-Llama-8B是其中之一。


资源准备


1. 1台REX1032服务器(卡满插且卡均正常)。

2. 清微docker镜像:TX8100_REX1032_Release_v4.3.8.tar.gz。

3. Conda环境:opt.miniconda.tar.gz。

4. 模型权重准备。

  •     来源1:在魔塔社区直接下载权重,或者使用已经下载好的权重DeepSeek-R1-Distill-Llama-8B.tar.gz。

  •     来源2:重新训练或微调后的模型权重保存为safetensor格式。

5.  kcore.bin:deepseek_llama3_8b_bf16_seq8192_c4.tar.gz,

  •     来源1:如果仅演示官方开源模型,可使用清微提供的该文件。

  •     来源2:如果需要部署经训练或微调后的模型,则需要使用转换工具离线编译生成。

6. 工具链TxNN_convert软件包:txnn_convert_1.3.0.tar.gz。

7. 工具链TxNN软件包:txnn_1.3.0.tar.gz,解压后,内容如下:

    script文件夹,内包含2个子文件夹            

        deploy文件夹为环境部署文件夹,其下install_vllm.sh文件为部署模型执行文件;        

              run_infer文件夹为运行推理文件夹,其下openai_completion_server.py等文件为运行推理文件。

    txnn.1.3.0.tar.gz压缩包为推理引擎版本包。

注意:

1. 根据需要推理的模型准备相应的kcore.bin目录,kore.bin生成方式参见章节离线编译。

2. 清微提供的模型权重压缩包中config.json为适配TX81的修改版本:

- 离线编译阶段依赖的模型config.json与官方下载资源一致, 若使用清微提供的模型权重压缩包,需将config.json替换为官方开源的文件。

- 模型推理阶段则需要依赖清微提供的config.json完成推理。

conda环境准备


1. 使用终端工具ssh登录REX1032服务器

   执行如下命令行:

# HOST_IP为REX1032服务器IP,用户需替换为实际IP地址数值
ssh -X user@HOST_IP

2. 解压压缩包

   将opt.miniconda.tar.gz,TX8100_REX1032_Release_v4.3.8.tar.gz放至登录用户指定目录下,如用户根目录(~/,下文中绝对路径/login_home),并解压:

cd ~/
tar -xvf opt.miniconda.tar.gz

解压后得到miniconda目录。

解压docker镜像压缩包, 执行如下命令行:

sudo tar -zxf TX8100_REX1032_Release_v4.3.8.tar.gz

解压得到文件:

TX8100_REX1032_Release_v4.3.8.tar
Tsm_driver_4.3.8_x86_64_installer.run

3. 加载docker镜像

   执行如下命令行:

sudo docker load -i TX8100_REX1032_Release_v4.3.8.tar

Load完毕可以使用如下命令查看镜像是否load成功:

sudo docker images

4. 创建容器

   执行如下命令创建容器:

sudo docker run -d --name txnn --ipc=host --privileged -v /dev:/dev -v /tmp:/tmp -v /lib/modules:/lib/modules -v /sys:
/sys -v /login_home/xxx/miniconda/:/opt/miniconda -v /login_home/xxx/txnn_convert:/login_home/xxx/txnn_convert -v
/login_home/xxx/txnn_infer/:/login_home/xxx/txnn_infer/ -w /login_home/xxx/txnn_infer hub.tsingmicro.com/tx8/v4.3.8:
kuiper-rex1032-release

注意:章节资源准备中的压缩包均需要放在/login_home/xxx 目录下,挂载至容器内。

5. 配置环境变量

   在容器内export 环境变量

sudo docker exec -it txnn /bin/bash
sed -i '$a export PATH="/opt/miniconda/bin:$PATH"' /root/.bashrc
sed -i '$a export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7' /root/.bashrc
sed -i '$a export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH' /root/.bashrc
sed -i '$a export HOME=/opt/miniconda' /root/.bashrc
source /root/.bashrc
# 首次设置需要用source进入conda,后面切换可以直接 conda activate tx8_txnn
source activate tx8_base
# 切换其他环境
conda activate tx8_txnn

此时环境变量即可生效,不同conda环境对应说明如下:

  • tx8_base:用于模型训练;

  • tx8_txnn:用于模型推理;

  • tx8_txnn_trans_4.46:用于模型离线编译,适用于模型Llama3系列模型转换,比如DeepSeek-R1-Distill-Llama-8B;

  • tx8_xla_llama3:用于Llama3-8B-Instruct模型训练;


模型离线编译


开始本章节的操作流程之前,需要完成开发环境准备。该章节主要介绍了模型转换生成kcore.bin的过程,如果已经有预先生成好的kcore.bin文件,该章节可跳过。

 离线编译环境部署

1. 解压工具链TxNN_Convert软件包

   将txnn_convert_1.3.0.tar.gz放至登录用户指定目录下,如用户根目录(~/,下文中绝对路径/login_home),并解压:

cd ~/
tar -xzvf txnn_convert_1.3.0.tar.gz

解压后得到convert_weight目录,需要关注的目录内容如下:

  • toolchain_release文件夹为转换工具依赖的库和环境;

  • convert_weigth.py为模型转换的执行脚本文件夹。

  • whl为模型转换工具依赖的安装包。

2. 进入docker容器,安装依赖包

   执行如下命令进入容器:

sudo docker exec -it txnn /bin/bash
source activate tx8_txnn_trans_4.46

依次安装依赖包,示例如下

cd $HOME_PATH/txnn_convert_1.3.0/convert_weight/whl
pip uninstall torch -y
pip uninstall torch_xla -y
pip install torch-2.0.0a0+gitd8b87bc-cp310-cp310-linux_x86_64.whl
pip install torch_xla-2.0.0+2cfaf58.tf.180e6e1-cp310-cp310-linux_x86_64.whl
cd $HOME_PATH/txnn_convert_1.3.0/convert_weight/install_tx8_quant/
bash install_tx8_cpu.sh


模型转换示例

模型转换脚本convert_weight.py支持以下参数,用户可根据需要选择不同的参数进行执行。

 参数名称 必需/可选 默认值  说明
--input_model必需stringHugging face官网下载的模型权重safetensor所在目录。
--backend-model-type必需string

[“deepseek_qwen2_1.5b_bf16”,

“deepseek_qwen2_7b_bf16”,

“deepseek_qwen2_14b_bf16”,

“qwen2_14b_quant”, 

“deepseek_qwen2_32b_bf16”,

“qwen2_32b_quant”, 

“deepseek_llama3_8b_bf16”, 

“deepseek_llama3_8b_quant”, 

“deepseek_llama3_70b_bf16”,

“deepseek_llama3_70b_quant”, 

“llama2_7b_fp16”,

“llama2_7b_quant”,

 “qwen2_7b_bf16”, 

”qwen2_7b_quant”,]

--q-model-path可选  string量化后模型权重文件路径。


进入模型转换工具目录,执行转换命令。

cd $HOME_PATH/txnn_convert_1.3.0/convert_weight
#设置环境变量
source toolchain_release/scripts/env_set.sh
#执行转换命令
python convert_weight.py --backend-model-type deepseek_llama3_8b_bf16 --input_model $HOME_PATH/DeepSeek-R1-Distill-Llama-8B

执行成功后,输出C代码结果保存在在目录$HOME_PATH/txnn_convert_1.3.0/convert_weight/toolchain_release/codegen_tool/bin/deepseek_llama3_8b_bf16_seq8192_c4/node_0_0中。

RTT 编译示例

执行RTT 编译, 将上一步生成的C代码编译到TX8硬件,需要传入2个参数,分别为:1. toolchain_release 目录;2. 上一步骤的输出C代码目录。

cd $HOME_PATH/txnn_convert_1.3.0/convert_weight/toolchain_release

#执行RTT 编译
bash ./scripts/soc_compile.sh $HOME_PATH/txnn_convert_1.3.0/convert_weight/toolchain_release
$HOME_PATH/txnn_convert_1.3.0/convert_weight/toolchain_release/codegen_tool/bin/deepseek_llama3_8b_bf16_seq8192_c4/node_0_0

执行成功后,输出kcore.bin结果保存在在目录$HOME_PATH/txnn_convert_1.3.0/convert_weight/toolchain_release/codegen_tool/bin/deepseek_llama3_8b_bf16_seq8192_c4/

node_0_0中。


推理模型


启动Device

用户在Host端部署执行环境,执行启动Device

拉起TX8 Device并等待ready,新开会话窗口2,执行如下命令:

./Tsm_driver_4.3.8_x86_64_installer.run install silicon

推理环境部署

1. 解压工具链TxNN软件包

   将`txnn_1.3.0.tar.gz`、`DeepSeek-R1-Distill-Llama-8B.tar.gz`、`deepseek_llama3_8b_bf16_seq8192_c4.tar.gz`

   放至登录用户指定目录下,如用户根目录(~/,下文中绝对路径/login_home),并解压:

cd ~/
tar -xvf txnn_1.3.0.tar.gz
tar -xvf deepseek_llama3_8b_bf16_seq8192_c4.tar.gz
tar -xvf DeepSeek-R1-Distill-Llama-8B.tar.gz

解压后得到`txnn_1.3.0`,`DeepSeek-R1-Distill-Llama-8B` 和`deepseek_llama3_8b_bf16_seq8192_c4`目录。

2 进入docker容器

sudo docker exec -it txnn /bin/bash
source activate tx8_txnn

3. 执行环境部署脚本

进入登录用户home目录,带参数执行install_vllm.sh脚本,共需要传入2个参数,分别为:1. HOME_PATH 目录;2. VERSION版本号。示例如下

cd $HOME_PATH/txnn_1.3.0/script/deploy

#带参数运行脚本
bash install_vllm.sh /login_home/xxx txnn.1.3.0

offline 推理

script/run_infer目录下提供有脚本:offline_auto_test.py,供用户在docker内执行,体验推理功能。

运行示例

示例1:在REX1032服务器上,8batch同时推理(适用于满卡满配推理,结合-mt/--max-token、-rn/--repeat-num参数可做压测)

在会话窗口1执行如下命令:

cd $HOME_PATH/txnn_1.3.0/script/run_infer
python offline_auto_test.py -mp $HOME_PATH/DeepSeek-R1-Distill-Llama-8B/ -cd $HOME_PATH/deepseek_llama3_8b_bf16_seq8192_c4/chip_out/node_0_0/ -pp quests_v1.txt -s ./ -mt 2048 -tf True -bs 8 -rn 1

示例2:在REX1032服务器上,指定ID执行1batch推理

在会话窗口1执行如下命令:

python offline_auto_test.py -mp $HOME_PATH/DeepSeek-R1-Distill-Llama-8B/ -cd $HOME_PATH/deepseek_llama3_8b_bf16_seq8192_c4/chip_out/node_0_0/ -pp quests_v1.txt -s ./ -mt 2048 -bs 1 -rn 1 -cn 0..3

$HOME_PATH/ txnn_1.3.0/script/run_infer路径下日志文件 TX8_offline_func_batchsize_$batch_size_$quest_$time.log可追踪查看当前循环轮次以及问题回答情况。

more TX8_offline_func_batchsize_xxx_quest_xxx_$time.log

img1.png

脚本参数

offline_auto_test.py支持以下参数,用户可根据需要选择不同的参数进行执行。

参数名称必需/可选 参数类型默认值说明
 -mp或 --model-path 必需stringInt8/fp 16模型文件路径。 
-pp或--prompt-path必需stringPrompt问题文件路径。
-gp或--golden-path可选string

None

Golden_gpu脚本运行的response回答文件路径,用作相似度对比。

-s或--save-dir必需string

当前脚本运行的response回答保存文件路径,指定路径即可。

-cd或--case-dir必需string

kcore.bin路径。

-lp或--txda-log-path可选string

txda log保存路径,默认打屏显示,指定路径时保存在指定路径下。

-cn或--card-num可选Int

0,1,2,3

当前脚本运行所选用的卡数(..表示区间)。

支持以下场景配置:

1. 单卡单batch场景,配置0;

2. 四卡单batch场景,有以下8种配置组合:0..3/4..7/8..11/…/28..31。

N batch场景:上述8种配置组合可以同时任选N组,N最大为8。

-bs或--batch-size可选Int

None

指定当前脚本需要运行的batch数

,最大支持8。

注:

1. 需要和traversal-flag参数搭配使用;

2. 支持列表输入,eg:-bs [1,5,6];

3. 与--card-num参数同时使用时,以batch-size为准。

-rn或--repeat-num可选Int

1

当前脚本运行循环次数。

-mt或--max-tokens可选Int

1024

支持最大输出token数,最大支持8192。


online 推理

online推理兼容OpenAI API接口,script/run_infer目录下提供有脚本:

        openai_completion_server.py,server端,适用于非多轮对话;(deepseek、llama需要指定不同的模型路径以及kcore.bin路径)

        openai_completion_server_mul_conversations.py,server端,适用于多轮对话;

        openai_chat_completion_client.py,client端,供用户在docker内执行,体验推理功能;

        mul_process_online_client.py,client多进程启动方式,供用户在docker内执行,体验online_openai场景的8batch同时推理的功能。

运行示例

示例1:在REX1032服务器8卡上,在8卡中指定1卡ID进行1batch推理

Server端:在会话窗口1执行如下命令,启动server服务:

cd $HOME_PATH/txnn_1.3.0/script/run_infer
python openai_completion_server.py --model=$HOME_PATH/DeepSeek-R1-Distill-Llama-8B/ --device=txnpu --load_format=tx --num_gpu_blocks_override=512 --block_size=16 --model-dtype bfloat16 -cd $HOME_PATH/deepseek_llama3_8b_bf16_seq8192_c4/chip_out/node_0_0/ --port 8000 -cn 0..3 --max-model-len=8192 -ts=4

当前窗口会打印log信息,出现如下log后表示server ready。

img3.png

Client端:新开会话窗口3,进入docker容器

sudo docker exec -it txnn /bin/bash
source activate tx8_txnn

在docker容器内,执行如下命令,开始client请求:

cd $HOME_PATH/txnn_1.3.0/script/run_infer
python openai_chat_completion_client.py -sp 8000 -pp quests_v1.txt -s ./ -mt 2048

示例2:在REX1032服务器32卡上,8batch同时推理

Server端:在会话窗口1执行如下命令,启动server服务:

cd $HOME_PATH/txnn_1.3.0/script/run_infer
python openai_completion_server.py --model=$HOME_PATH/DeepSeek-R1-Distill-Llama-8B/ --device=txnpu --load_format=tx --num_gpu_blocks_override=512 --block_size=16 --model-dtype bfloat16 -cd $HOME_PATH/deepseek_llama3_8b_bf16_seq8192_c4/chip_out/node_0_0/ --port 8000 -cn 0..31 --max-model-len=8192 -ts=4

当前窗口会打印log信息,出现如下log后表示server ready。

图片1.png

Client端:新开会话窗口3,进入docker容器

sudo docker exec -it txnn /bin/bash
source activate tx8_txnn

在docker容器内,执行如下命令,开始client请求:

cd $HOME_PATH/txnn_1.3.0/script/run_infer
python mul_process_online_client.py -pp quests_v1.txt -sp 8000,8000,8000,8000,8000,8000,8000,8000 -s ./ -mt 2048

img4.png

Client端所有问题集推理结束后,client端脚本会自动无痕退出,server端脚本需要手动ctrl+c中断。txnn_1.3.0/script/run_infer路径下TX8_online_batchsize_xxx_quest_xxx_bid_xxx_$time.log日志文件可追踪查看当前循环轮次以及问题回答情况

img5.png

脚本参数

openai_completion_server.py支持以下参数,用户可根据需要选择不同的参数进行执行。

参数名称必需/可选 参数类型默认值说明
--model必需string

None

Int8/fp 16模型文件路径。 
--device必需string

None

使用TX NPU卡进行推理。

--load_format必需string

None

加载TX加载器;加载safetensors权重。

--num_gpu_blocks_override必需

Int

512

在内存中分配的block_table的block大小,用于KV_Cache使用。

--block_size必需

Int

16

Block_table中每一个block的大小。

-ts或

--tp-size

必需Int

4

使用NPU卡数量。

-cd或

--case-dir

必需

string

kcore.bin路径。

--port必需

Int

8000

Serve端口号。

-cn或

--card-num

必需

string

0,1,2,3

当前脚本运行所选用的卡数。

--max-model-len必需

int

None

模型支持最大文本长度。

--model-dtype

可选

string

bfloat16

模型以及kcore精度类型。[bfloat16, int8]


openai_chat_completion_client.py支持以下参数,用户可根据需要选择不同的参数进行执行。

参数名称必需/可选 参数类型默认值说明

-sp或

--server-port

必需

Int

12000

Server端口号。

 

-pp或

--prompt-path

必需stringPrompt问题文件路径。

-gp或

--golden-path

可选string

None

Golden_gpu脚本运行的response回答文件路径,用作相似度对比。

-s或

--save-dir

必需string

当前脚本运行的response回答保存文件路径,指定路径即可。

-rn或

--repeat-num

可选

Int

1

当前脚本运行循环次数。

-mt或

--max-tokens

可选Int

1024

支持最大输出token数,最大支持8192。


mul_process_online_client.py

参数名称必需/可选 参数类型默认值说明

-sp或

--server-port

必需

Int

None

Serve端口号,多进程支持多参数传入

8batch场景下需传入 12000,13000,14000,15000,16000,17000,18000,19000

-pp或

--prompt-path

必需stringPrompt问题文件路径。

-gp或

--golden-path

可选string

None

Golden_gpu脚本运行的response回答文件路径,用作相似度对比。

-s或

--save-dir

必需string

当前脚本运行的response回答保存文件路径,指定路径即可。

-rn或

--repeat-num

可选

Int

1

当前脚本运行循环次数。

-mt或

--max-tokens

可选Int

1024

支持最大输出token数,最大支持8192。



性能测试工具

性能测试工具用于评估大语言模型在TX8服务器上的性能。版本包目录benchmark提供以下脚本:

        benchmark_serving.py为执行脚本;

        backend_request_func.py为依赖脚本。

运行示例

示例:在REX1032服务器上,指定卡ID进行1batch推理

Server端:在会话窗口1执行如下命令,启动server服务:

cd $HOME_PATH/txnn_1.3.0/script/run_infer
python openai_completion_server.py --model=$HOME_PATH/DeepSeek-R1-Distill-Llama-8B/ --device=txnpu --load_format=tx --num_gpu_blocks_override=512 --block_size=16 --model-dtype bfloat16 -cd $HOME_PATH/deepseek_llama3_8b_bf16_seq8192_c4/chip_out/node_0_0/ --port 8000 -cn 0..3 --max-model-len=8192 -ts=4

当前窗口会打印log信息,出现如下log后表示server ready。

image.png

Client端:新开会话窗口2,进入docker容器

sudo docker exec -it txnn  /bin/bash
source activate tx8_txnn


在benchmark目录下,执行如下命令,开始性能测试:

python benchmark_serving.py --model=$HOME_PATH/DeepSeek-R1-Distill-Llama-8B/ --random-input-len=1024 --random-output-len=1024 --port 8000 --seed 20

image.png

性能测试结束后,窗口2会输出当前测试场景的性能指标,其中性能指标参数包括:

        吞吐量:Output token throughput (tokens/s)

        首token时延:TTFT (ms)

        每token耗时:TPOT (ms)

        词间时延:TBT或ITL  (ms)

脚本参数

benchmark_serving.py支持以下参数,用户可根据需要选择不同的参数进行执行。

参数名称必需/可选 参数类型默认值说明

--model

必需

string

None

int8/fp 16模型文件路径。


 

--random-input-len


必需intNone

每个请求的输入token长度。

 

--random-output-len


必需int

None

每个请求的输出token长度。


--seed


必需int

None

控制随机生成token的id,用作调整测试的随机性。



版本说明

2025/3/21 第一版

2025/4/2 第二版,更新版本号1.3.0



发表评论
全部评论(0)
    0.133488s