1. DeepSeek-R1

DeepSeek-R1是深度求索(DeepSeek)公司推出的开源大语言模型,是一个兼具强推理能力和任务广泛适用性的高效模型。

DeepSeek-R1基于开源模型进行了微调,提供了1.5B、7B等参数版本的DeepSeek-R1-Distill模型,适合部署到边缘设备。

broken

这些蒸馏出的模型的能力也非常强,从论文给出的评测表看,蒸馏出的 qwen-14b 模型的能力完全不输 OpenAI-o1-mini。

broken

Github开源仓库:https://github.com/deepseek-ai/DeepSeek-R1

本章将在鲁班猫板卡上使用rkllm本地部署DeepSeek-R1-Distill模型。

1.1. 模型转换

deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B 获取模型文件, 如果网络不行就尝试去镜像网站:https://hf-mirror.com/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B/tree/main 拉取模型文件。

# 安装git-lfs
git lfs install

# 获取DeepSeek-R1-Distill-Qwen-1.5B
git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
# 从镜像网址获取(可选)
git clone https://hf-mirror.com/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B

# 获取DeepSeek-R1-Distill-Qwen-7B
git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
# 从镜像网址获取(可选)
git clone https://hf-mirror.com/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

获取rkllm工程文件,使用rkllm-toolkit将DeepSeek-R1-Distill模型转为rkllm模型,rkllm-toolkit环境安装参考下 前面 RKLLM章节 或者查看 Rockchip_RKLLM_SDK_CN_xxx.pdf

需要注意rkllm支持rk3588和rk3576平台,请使用lubancat-3/4/5板卡,教程将测试lubancat-3/4/5板卡。

# 获取rknn-llm
git clone https://github.com/airockchip/rknn-llm.git

# 简单创建一个rkllm-toolkit环境
conda create -n rkllm_1.1.4 python=3.10
conda activate rkllm_1.1.4

# 切换到rkllm-toolkit目录,安装rkllm_toolkit
cd rknn-llm/rkllm-toolkit
(rkllm_1.1.4) llh@llh:/xxx/rkllm-toolkit$ pip3 install rkllm_toolkit-1.1.4-cp310-cp310-linux_x86_64.whl
...

使用例程中的generate_data_quant.py生成量化数据,可自行修改量化的校准样本。

# 然后切换到例程目录
cd examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export

# 生成量化数据,可自行修改量化的校准样本
(rkllm_1.1.4) llh@llh:/xxx/rknn-llm$ python generate_data_quant.py  -m ../deepseek-aiDeepSeek-R1-Distill-Qwen-1.5B/
.........

使用export_rkllm.py导出rkllm模型,注意修改模型路径。

# 修改export_rkllm.py中的模型路径为前面拉取的deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B路径
modelpath = '/path/to/DeepSeek-R1-Distill-Qwen-1.5B'

# 鲁班猫4转换DeepSeek-R1-Distill-Qwen-1.5B_Demo
(rkllm_1.1.4) llh@llh:/xxx/rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export$ python export_rkllm.py
INFO: rkllm-toolkit version: 1.1.4
The argument `trust_remote_code` is to be used with Auto classes. It has no effect here and is ignored.
Downloading data files: 100%|████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1236.89it/s]
Extracting data files: 100%|█████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 94.04it/s]
Generating train split: 21 examples [00:00, 1244.50 examples/s]
Optimizing model: 100%|███████████████████████████████████████████████████████████████████████████| 28/28 [00:33<00:00,  1.18s/it]
Building model: 100%|███████████████████████████████████████████████████████████████| 399/399 [00:10<00:00, 36.55it/s]
WARNING: The bos token has two ids: 151646 and 151643, please ensure that the bos token ids in config.json and tokenizer_config.json are consistent!
INFO: The token_id of bos is set to 151646
INFO: The token_id of eos is set to 151643
INFO: The token_id of pad is set to 151643
Converting model: 100%|██████████████████████████████████████████████████| 339/339 [00:00<00:00, 3528211.06it/s]
INFO: Exporting the model, please wait ....
[=================================================>] 597/597 (100%)
INFO: Model has been saved to ./DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm!
# 如果是鲁班猫3,除了修改模型路径还需要修改export_rkllm.py中target_platform,修改quantized_dtype为W4a16或者w8a8
target_platform = "RK3576"
quantized_dtype = "w4a16"
num_npu_core = 2

# 鲁班猫3转换DeepSeek-R1-Distill-Qwen-1.5B_Demo
(rkllm_1.1.4) llh@llh:/xxx/rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export$ python export_rkllm.py
INFO: rkllm-toolkit version: 1.1.4
The argument `trust_remote_code` is to be used with Auto classes. It has no effect here and is ignored.
Optimizing model: 100%|████████████████████████████████████████████████████████████████████████| 28/28 [00:26<00:00,  1.06it/s]
Building model: 100%|██████████████████████████████████████████████████████████████████████████| 399/399 [00:07<00:00, 51.22it/s]
WARNING: The bos token has two ids: 151646 and 151643, please ensure that the bos token ids in config.json and tokenizer_config.json are consistent!
INFO: The token_id of bos is set to 151646
INFO: The token_id of eos is set to 151643
INFO: The token_id of pad is set to 151643
Converting model: 100%|███████████████████████████████████████████████████████████████████| 339/339 [00:00<00:00, 3253704.93it/s]
INFO: Exporting the model, please wait ....
[=================================================>] 398/398 (100%)
INFO: Model has been saved to ./DeepSeek-R1-Distill-Qwen-1.5B_w4a16_RK3576.rkllm!

1.2. 部署测试

通过板端Runtime库API接口函数,在板端部署推理程序。测试例程编译可以交叉编译也可以直接板卡上编译,教程这里测试是直接在板卡上编译。 首先,板卡上获取测试例程:

sudo apt update
sudo apt install gcc g++ cmake

# 板卡上获取测试例程(教程测试lubancat-4)
git clone https://github.com/airockchip/rknn-llm

# 切换到例程目录
cd rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy

板卡上编译例程:

# 修改build-linux.sh中编译为
GCC_COMPILER_PATH=aarch64-linux-gnu

cat@lubancat:~/rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy$ ./build-linux.sh
-- The C compiler identification is GNU 13.3.0
-- The CXX compiler identification is GNU 13.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (0.7s)
-- Generating done (0.0s)
-- Build files have been written to: /home/cat/rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/build/build_linux_aarch64_Release
[ 50%] Building CXX object CMakeFiles/llm_demo.dir/src/llm_demo.cpp.o
[100%] Linking CXX executable llm_demo
[100%] Built target llm_demo
[100%] Built target llm_demo
Install the project...
-- Install configuration: "Release"
-- Installing: /home/cat/rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64/./llm_demo
-- Set non-toolchain portion of runtime path of "/home/cat/rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64/./llm_demo" to ""
-- Up-to-date: /home/cat/rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64/lib/librkllmrt.so

1.2.1. 测试lubancat-3板卡

测试使用8+64(内存8G,emmc存储64G)的lubancat-4板卡,系统是网盘最新的ubunut22.04系统,先测试DeepSeek-R1-Distill-Qwen-1.5B:

# 切换到install/demo_Linux_aarch64目录下,将前面转换出的模型传输到板卡
cat@lubancat:~/.../install/demo_Linux_aarch64$ export LD_LIBRARY_PATH=./lib

# 查看性能
cat@lubancat:~/.../install/demo_Linux_aarch64$ export RKLLM_LOG_LEVEL=1

cat@lubancat:~/install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Qwen-1.5B_w4a16_RK3576.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3576

rkllm init success

**********************可输入以下问题对应序号获取回答/或自定义输入********************

[0] 现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,求鸡和兔子各有多少只?
[1] 有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?

*************************************************************************

user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28位小朋友。

从左边开始数,第10位是学豆。

这意味着前9位(1到9)都是其他孩子,剩下的28 - 9 = 19位是从第10位开始的。

因此,从右边开始数,第10位对应的左边有19位,右边就是28 - 10 + 1 = 19位。
</think>

**Solution:**

我们有28位小朋友排成一队。我们需要确定从右边数第10位的位置。

1. **总人数:** 282. **左边开始数的第10位是学豆,意味着前9位(1到9)都是其他孩子。**
3. **剩下的位置是从第10位开始的:**
\[
28 - 9 = 19
\]
4. **从右边数,第10位对应的左边有19位,右边就是:**
\[
28 - 10 + 1 = 19
\]

因此,**从右边开始数,第10位是第19位。**

\[
\boxed{19}
\]

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       385.49           33        11.68                    85.61
Generate      26737.97         267       101.39                   9.86
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Qwen-7B:

cat@lubancat:~/install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Qwen-7B_w4a16_RK3576.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3576

rkllm init success

user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28个小朋友排成一行。

已知从左边开始数,第10位是小豆。

要找出小豆的位置,可以使用总人数减去已知位置再加一的方法。即 28 - 10 + 1 = 19。

因此,从右边开始数,小豆是第19位。
</think>

**解答:**

我们有28个小朋友排成一行。根据题意:

- **从左边开始数,第10位是学豆。**

要找出学豆的位置从右边开始数的顺序,可以使用以下方法:

1. **总人数减去已知位置再加一**:
\[
28 - 10 + 1 = 19
\]

因此,从右边开始数,学豆是第\(\boxed{19}\)位。

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       1307.26          33        39.61                    25.24
Generate      70197.04         193       365.11                   2.74
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Llama-8B:

cat@lubancat:~/install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Llama-8B_w4a16_RK3576.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3576

rkllm init success

user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28位同学。

如果第10位是学豆,那么从右边开始数,他的位置也是第10位,因为对称的位置相同。

因此,从右边开始数,他是第10位。
</think>

**解题步骤:**

1. **确定总人数:**
总共有28位同学排成一行。

2. **确定位置关系:**
- 从左边开始数,学豆的位置是第10位。
- 从右边开始数,他所在的位置也是第10位,因为他位于队列的正中间。

3. **得出结论:**
学豆从右边开始数,是第10位。

**答案:**

从右边开始数,学豆是第\boxed{10}位。

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       1421.02          37        38.41                    26.04
Generate      68102.04         177       385.92                   2.59
--------------------------------------------------------------------------------------

1.2.2. 测试lubancat-4板卡

测试使用16+128(内存16G,emmc存储128G)的lubancat-4板卡,系统是网盘最新的ubunut24.04系统,先测试DeepSeek-R1-Distill-Qwen-1.5B:

# 切换到install/demo_Linux_aarch64目录下,将前面转换出的模型传输到板卡
cat@lubancat:~/.../install/demo_Linux_aarch64$ export LD_LIBRARY_PATH=./lib

# 查看性能
cat@lubancat:~/.../install/demo_Linux_aarch64$ export RKLLM_LOG_LEVEL=1

# Usage: ./llm_demo model_path max_new_tokens max_context_len
cat@lubancat:~/.../install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success

**********************可输入以下问题对应序号获取回答/或自定义输入********************

[0] 现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,求鸡和兔子各有多少只?
[1] 有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?

*************************************************************************

user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28位小朋友。
# 省略..........................
    \[
    N - k + 1
    \]
- 这里,\( N = 28 \)(总人数),\( k = 10 \)(学豆的位置)。

3. **代入公式计算:**
\[
28 - 10 + 1 = 19
\]

**结论:**

从右边开始数,学豆是第 **19** 位。

\boxed{19}

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       196.76           33        5.96                     167.71
Generate      29769.22         380       79.34                    12.60
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Qwen-7B:

# Usage: ./llm_demo model_path max_new_tokens max_context_len
cat@lubancat:~/xxx/deploy/install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Qwen-7B_W8A8_RK3588.rkllm 2048  4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success

user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28个小朋友排成一行。
# 省略..........................

**求解过程:**

1. **理解位置关系:**
- 如果一个位置在队列中,从左数的位置为 \( P \),那么从右数的位置可以通过以下公式计算:
    \[
    \text{从右边开始的位置} = 总人数 - 从左边开始的位置 + 1
    \]

2. **代入数值:**
\[
\text{从右边开始的位置} = 28 - 10 + 1 = 19
\]

**最终答案:**

\[
\boxed{19}
\]

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       930.83           33        28.21                    35.45
Generate      87289.02         277       316.18                   3.16
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Llama-8B:

cat@lubancat:~/xxx/install/demo_Linux_aarch64$ ./llm_demo  ~/DeepSeek-R1-Distill-Llama-8B_W8A8_RK3588.rkllm  2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success
user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28个小朋友排成一行。

从左边开始数,第10位是学豆。

为了确定从右边开始的位置,我们需要计算从右边数到学豆所需的步数。因为总人数是偶数,所以中间的位置是14.5。

由于学豆位于第10位,从右边数起就是28 - 10 + 1 = 19位。
</think>

要确定从右边开始数学豆的位置,我们可以按照以下步骤进行:

1. **总人数**:共有28位小朋友排成一行。

2. **左边开始的位置**:学豆位于第10位。

3. **计算右边的位置**:
- 总人数为偶数,中间的位置是第14.5位。
- 学豆在左边第10位,那么从右边开始数到它需要跨越28 - 10 + 1 = 19位。

因此,从右边开始数学豆是第\(\boxed{19}\)位。

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       1006.98          37        27.22                    36.74
Generate      79901.06         237       338.03                   2.96
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Qwen-14B:

# Usage: ./llm_demo model_path max_new_tokens max_context_len
cat@lubancat:~/xxx/deploy/install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Qwen-14B_W8A8_RK3588.rkllm  2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success

user:
1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28位小朋友排成一行。

从左边开始数,学豆位于第10位。

为了确定他从右边开始数的位置,可以使用公式:位置 = 总人数 - 左边的序号 + 1。

代入数值计算,得到位置 = 28 - 10 + 1 = 19。
</think>

解答:

有28位小朋友排成一行。学豆从左边数是第10位,那么他从右边数的位置可以通过以下步骤计算:

1. **总人数**:28人
2. **左边的序号**:第10位
3. **右边的序号** = 总人数 - 左边的序号 + 1

\[
右边的序号 = 28 - 10 + 1 = 19
\]

因此,学豆从右边开始数是第\(\boxed{19}\)位。

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       2219.08          33        67.24                    14.87
Generate      131929.57        211       626.30                   1.60
--------------------------------------------------------------------------------------

1.2.3. 测试lubancat-5板卡

测试使用16+128(内存16G,emmc存储128G)的lubancat-5板卡,系统是网盘最新的ubunut24.04系统,先测试DeepSeek-R1-Distill-Qwen-1.5B:

# 切换到install/demo_Linux_aarch64目录下,将前面转换出的模型传输到板卡
cat@lubancat:~/.../install/demo_Linux_aarch64$ export LD_LIBRARY_PATH=./lib

# 查看性能
cat@lubancat:~/.../install/demo_Linux_aarch64$ export RKLLM_LOG_LEVEL=1

# Usage: ./llm_demo model_path max_new_tokens max_context_len
cat@lubancat:~/.../install/demo_Linux_aarch64$ ./llm_demo /home/cat/DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success

**********************可输入以下问题对应序号获取回答/或自定义输入********************

[0] 现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,求鸡和兔子各有多少只?
[1] 有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?

*************************************************************************

user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
#省略...............
**解答过程:**

1. **确定学豆的位置:**
- 从左边开始数,第10位是学豆。因此,学豆位于第10位小朋友的位置。

2. **计算从右边开始数的对应位置:**
- 在一个有 **N** 个元素的序列中,第 **k** 个元素从右边开始数的位置为:
    \[
    N - k + 1
    \]
- 这里,\( N = 28 \)(总人数),\( k = 10 \)(学豆的位置)。

3. **代入公式计算:**
\[
28 - 10 + 1 = 19
\]

**结论:**

从右边开始数,学豆是第 **19** 位。

\boxed{19}

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       203.94           33        6.18                     161.81
Generate      30844.06         380       82.20                    12.57
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Qwen-7B:

cat@lubancat:~/.../install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Qwen-7B_W8A8_RK3588.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success

user: 1
# 省略.................

**求解过程:**

1. **理解位置关系:**
- 如果一个位置在队列中,从左数的位置为 \( P \),那么从右数的位置可以通过以下公式计算:
    \[
    \text{从右边开始的位置} = 总人数 - 从左边开始的位置 + 1
    \]

2. **代入数值:**
\[
\text{从右边开始的位置} = 28 - 10 + 1 = 19
\]

**最终答案:**

\[
\boxed{19}
\]

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       954.18           33        28.91                    34.58
Generate      89596.44         277       324.54                   3.08
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Llama-8B:

cat@lubancat:~/.../install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Llama-8B_W8A8_RK3588.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success

user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28个小朋友排成一行。

从左边开始数,第10位是学豆。

为了确定从右边开始的位置,我们需要计算从右边数到学豆所需的步数。因为总人数是偶数,所以中间的位置是14.5。

由于学豆位于第10位,从右边数起就是28 - 10 + 1 = 19位。
</think>

要确定从右边开始数学豆的位置,我们可以按照以下步骤进行:

1. **总人数**:共有28位小朋友排成一行。

2. **左边开始的位置**:学豆位于第10位。

3. **计算右边的位置**:
- 总人数为偶数,中间的位置是第14.5位。
- 学豆在左边第10位,那么从右边开始数到它需要跨越28 - 10 + 1 = 19位。

因此,从右边开始数学豆是第\(\boxed{19}\)位。

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       1030.87          37        27.86                    35.89
Generate      82051.87         237       347.13                   2.88
--------------------------------------------------------------------------------------

测试DeepSeek-R1-Distill-Qwen-14B:

# Usage: ./llm_demo model_path max_new_tokens max_context_len
cat@lubancat:~/xxx/deploy/install/demo_Linux_aarch64$ ./llm_demo ~/DeepSeek-R1-Distill-Qwen-14B_W8A8_RK3588.rkllm  2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588

rkllm init success
user: 1
有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
robot: <think>
首先,总共有28位小朋友排成一行。

从左边开始数,学豆位于第10位。

为了确定他从右边开始数的位置,可以使用公式:位置 = 总人数 - 左边的序号 + 1。

代入数值计算,得到位置 = 28 - 10 + 1 = 19。
</think>

解答:

有28位小朋友排成一行。学豆从左边数是第10位,那么他从右边数的位置可以通过以下步骤计算:

1. **总人数**:28人
2. **左边的序号**:第10位
3. **右边的序号** = 总人数 - 左边的序号 + 1

\[
右边的序号 = 28 - 10 + 1 = 19
\]

因此,学豆从右边开始数是第\(\boxed{19}\)位。

--------------------------------------------------------------------------------------
Stage         Total Time (ms)  Tokens    Time per Token (ms)      Tokens per Second
--------------------------------------------------------------------------------------
Prefill       2223.62          33        67.38                    14.84
Generate      133877.24        211       635.56                   1.57
--------------------------------------------------------------------------------------