0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

速看!EASY-EAI教你离线部署Deepseek R1大模型

广州灵眸科技有限公司 2025-07-25 15:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. Deepseek简介

DeepSeek-R1,是幻方量化旗下AI公司深度求索(DeepSeek)研发的推理模型。DeepSeek-R1采用强化学习进行后训练,旨在提升推理能力,尤其擅长数学、代码和自然语言推理等复杂任务。作为国产AI大数据模型的代表,凭借其卓越的推理能力和高效的文本生成技术,在全球人工智能领域引发广泛关注。本文主要说明DeepSeek-R1如何离线运行在EASY-EAI-Orin-Nano(RK3576)硬件上, RK3576 具有优异的端侧AI能效比与极高的性价比,是AI落地的不二之选。

1942cc72-6928-11f0-a486-92fbcf53809c.png

198e94fe-6928-11f0-a486-92fbcf53809c.png

演示视频:
2. 开发环境搭建
2.1RKLLM-Toolkit安装本节主要说明如何通过 pip 方式来安装 RKLLM-Toolkit,用户可以参考以下的具体流程说明完成 RKLLM-Toolkit 工具链的安装。

工具安装包链接: https://pan.baidu.com/s/1y5ZN5sl4e3HJI5d9Imt4pg?pwd=1234(提取码: 1234)

19ce5a44-6928-11f0-a486-92fbcf53809c.png

2.1.1安装miniforge3工具

为防止系统对多个不同版本的 Python 环境的需求,建议使用 miniforge3 管理 Python 环境。检查是否安装 miniforge3 和 conda 版本信息,若已安装则可省略此小节步骤。

下载 miniforge3 安装包:

wget -c https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh

安装miniforge3:

chmod 777 Miniforge3-Linux-x86_64.shbash Miniforge3-Linux-x86_64.sh

2.1.2创建 RKLLM-Toolkit Conda 环境进入 Conda base 环境:

source ~/miniforge3/bin/activate

创建一个 Python3.8 版本(建议版本)名为 RKLLM-Toolkit 的 Conda 环境:

conda create -n RKLLM-Toolkit python=3.8

进入 RKLLM-Toolkit Conda 环境:

conda activate RKLLM-Toolkit

19f509c8-6928-11f0-a486-92fbcf53809c.png

2.1.3安装RKLLM-Toolkit

在 RKLLM-Toolkit Conda 环境下使用 pip 工具直接安装所提供的工具链 whl 包,在安装过程 中,安装工具会自动下载 RKLLM-Toolkit 工具所需要的相关依赖包。

pip3 install nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whlpip3 install torch-2.1.0-cp38-cp38-manylinux1_x86_64.whlpip3 install rkllm_toolkit-1.1.4-cp38-cp38-linux_x86_64.whl

若在安装的过程中,某些文件安装很慢,可以登录python官网单独下载:

https://pypi.org/

执行以下命令没有报错,则安装成功。

1a1e0062-6928-11f0-a486-92fbcf53809c.png

3.Deepseek-R1模型转换
本章主要说明如何实现Deepseek-R1大语言模型如何转换为RKLLM模型。

3.1模型与脚本下载

本节提供两种大模型文件,Hugging face的原始模型和转换完成的NPU模型。

1a61cc2a-6928-11f0-a486-92fbcf53809c.png

还有用于模型转换的脚本:

1a7f8a76-6928-11f0-a486-92fbcf53809c.png

3.2模型转换下载完成后模型和脚本放到同一个目录:

1a99893a-6928-11f0-a486-92fbcf53809c.png

在RKLLM-Toolkit环境,执行以下指令进行模型转换:

1abaffa2-6928-11f0-a486-92fbcf53809c.png

至此模型转换成功,生成deepseek_w4a16.rkllm NPU化的大模型文件:

1ae4d1ba-6928-11f0-a486-92fbcf53809c.png

test.py转换脚本如下所示, 用于转换deepseek-r1模型:

from rkllm.api import RKLLMfrom datasets import load_datasetfrom transformers import AutoTokenizerfrom tqdm import tqdmimport torchfrom torch import nnimport os# os.environ['CUDA_VISIBLE_DEVICES']='1'

modelpath = '/home/developer/RKLLM-Toolkit/DeepSeek-R1-Distill-Qwen-1.5B'llm = RKLLM()
# Load model# Use 'export CUDA_VISIBLE_DEVICES=2' to specify GPU device# options ['cpu', 'cuda']ret = llm.load_huggingface(model=modelpath, model_lora = None, device='cpu')# ret = llm.load_gguf(model = modelpath)if ret != 0: print('Load model failed!') exit(ret)
# Build modeldataset = "./data_quant.json"# Json file format, please note to add prompt in the input,like this:# [{"input":"Human: 你好!\nAssistant: ", "target": "你好!我是人工智能助手KK!"},...]
qparams = None# qparams = 'gdq.qparams' # Use extra_qparamsret = llm.build(do_quantization=True, optimization_level=1, quantized_dtype='w4a16', quantized_algorithm='normal', target_platform='rk3576', num_npu_core=2, extra_qparams=qparams, dataset=None)
if ret != 0: print('Build model failed!') exit(ret)
# Chat with modelmessages = "<|im_start|>system You are a helpful assistant.<|im_end|><|im_start|>user你好!\n<|im_end|><|im_start|>assistant"kwargs = {"max_length": 128, "top_k": 1, "top_p": 0.8, "temperature": 0.8, "do_sample": True, "repetition_penalty": 1.1}# print(llm.chat_model(messages, kwargs))

# Export rkllm modelret = llm.export_rkllm("./deepseek_r1_rk3576_w4a16.rkllm")if ret != 0:print('Export model failed!')

4.Deepseek-R1模型部署
本章主要说明RKLLM格式的NPU模型如何运行在EASY-EAI-Orin-Nano硬件上。

1b05e800-6928-11f0-a486-92fbcf53809c.png

下载链接:https://pan.baidu.com/s/1B-DZTI-Q6i__b6Tdsrk_Ow?pwd=1234(提取码: 1234)然后把例程【复制粘贴】到nfs挂载目录中。(不清楚目录如何构建的,可以参考《入门指南/开发环境准备/nfs服务搭建与挂载》)。特别注意:源码目录和模型最好cp到板子上,如/userdata,否则在nfs目录执行大模型会导致模型初始化过慢。

1b25cfa8-6928-11f0-a486-92fbcf53809c.png

进入到开发板对应的例程目录执行编译操作,具体命令如下所示:

cd /userdata/deepseek-demo/./build.sh

1b427338-6928-11f0-a486-92fbcf53809c.png4.1例程运行及效果进入例程的deepseek-demo/deepseek-demo_release目录,执行下方命令,运行示例程序:

cd deepseek-demo_release/ulimit -HSn 102400 ./deepseek-demo deepseek_w4a16.rkllm 256 512

1b6d847e-6928-11f0-a486-92fbcf53809c.png

至此可以进行对话测试了,试着输入“直角三角形两直角边是3和4,斜边是多少?”。回答如下所示:

1b88600a-6928-11f0-a486-92fbcf53809c.png

4.2RKLLM算法例程例程目录为rkllm-demo/src/main.cpp,操作流程如下。

1ba204ec-6928-11f0-a486-92fbcf53809c.png具体代码如下所示:

#include #include #include #include "rkllm.h"#include #include #include #include
#define PROMPT_TEXT_PREFIX "<|im_start|>system You are a helpful assistant. <|im_end|> <|im_start|>user"#define PROMPT_TEXT_POSTFIX "<|im_end|><|im_start|>assistant"

using namespace std;LLMHandle llmHandle = nullptr;
void exit_handler(int signal){ if (llmHandle != nullptr) { { cout << "程序即将退出" << endl; LLMHandle _tmp = llmHandle; llmHandle = nullptr; rkllm_destroy(_tmp); } } exit(signal);}
void callback(RKLLMResult *result, void *userdata, LLMCallState state){ if (state == RKLLM_RUN_FINISH) { printf("\n"); } else if (state == RKLLM_RUN_ERROR) { printf("\\run error\n"); } else if (state == RKLLM_RUN_GET_LAST_HIDDEN_LAYER) { /* ================================================================================================================ 若使用GET_LAST_HIDDEN_LAYER功能,callback接口会回传内存指针:last_hidden_layer,token数量embd_size 通过这三个参数可以取得last_hidden_layer中的数据 注:需要在当前callback中获取,若未及时获取,下一次callback会将该指针释放 ===============================================================================================================*/ if (result->last_hidden_layer.embd_size != 0 && result->last_hidden_layer.num_tokens != 0) { int data_size = result->last_hidden_layer.embd_size * result->last_hidden_layer.num_tokens * sizeof(float); printf("\ndata_size:%d",data_size); std::ofstream outFile("last_hidden_layer.bin", std::binary); if (outFile.is_open()) { outFile.write(reinterpret_cast(result->last_hidden_layer.hidden_states), data_size); outFile.close(); std::cout << "Data saved to output.bin successfully!" << std::endl; } else { std::cerr << "Failed to open the file for writing!" << std::endl; } } } else if (state == RKLLM_RUN_NORMAL) { printf("%s", result->text); }}
int main(int argc, char **argv){ if (argc < 4) { std::cerr << "Usage: " << argv[0] << " model_path max_new_tokens max_context_len\n"; return 1; }
signal(SIGINT, exit_handler); printf("rkllm init start\n");
//设置参数及初始化 RKLLMParam param = rkllm_createDefaultParam(); param.model_path = argv[1];
//设置采样参数 param.top_k = 1; param.top_p = 0.95; param.temperature = 0.8; param.repeat_penalty = 1.1; param.frequency_penalty = 0.0; param.presence_penalty = 0.0;
param.max_new_tokens = std::atoi(argv[2]); param.max_context_len = std::atoi(argv[3]); param.skip_special_token = true; param.extend_param.base_domain_id = 0;
int ret = rkllm_init(&llmHandle, ¶m, callback); if (ret == 0){ printf("rkllm init success\n"); } else { printf("rkllm init failed\n"); exit_handler(-1); }
string text; RKLLMInput rkllm_input;
// 初始化 infer 参数结构体 RKLLMInferParam rkllm_infer_params; memset(&rkllm_infer_params, 0, sizeof(RKLLMInferParam)); // 将所有内容初始化为 0
// 1. 初始化并设置 LoRA 参数(如果需要使用 LoRA) // RKLLMLoraAdapter lora_adapter; // memset(&lora_adapter, 0, sizeof(RKLLMLoraAdapter)); // lora_adapter.lora_adapter_path = "qwen0.5b_fp16_lora.rkllm"; // lora_adapter.lora_adapter_name = "test"; // lora_adapter.scale = 1.0; // ret = rkllm_load_lora(llmHandle, &lora_adapter); // if (ret != 0) { // printf("\nload lora failed\n"); // }
// 加载第二个lora // lora_adapter.lora_adapter_path = "Qwen2-0.5B-Instruct-all-rank8-F16-LoRA.gguf"; // lora_adapter.lora_adapter_name = "knowledge_old"; // lora_adapter.scale = 1.0; // ret = rkllm_load_lora(llmHandle, &lora_adapter); // if (ret != 0) { // printf("\nload lora failed\n"); // }
// RKLLMLoraParam lora_params; // lora_params.lora_adapter_name = "test"; // 指定用于推理的 lora 名称 // rkllm_infer_params.lora_params = &lora_params;
// 2. 初始化并设置 Prompt Cache 参数(如果需要使用 prompt cache) // RKLLMPromptCacheParam prompt_cache_params; // prompt_cache_params.save_prompt_cache = true; // 是否保存 prompt cache // prompt_cache_params.prompt_cache_path = "./prompt_cache.bin"; // 若需要保存prompt cache, 指定 cache 文件路径 // rkllm_infer_params.prompt_cache_params = &prompt_cache_params;
// rkllm_load_prompt_cache(llmHandle, "./prompt_cache.bin"); // 加载缓存的cache
rkllm_infer_params.mode = RKLLM_INFER_GENERATE;
while (true) { std::string input_str; printf("\n"); printf("user: "); std::getline(std::cin, input_str); if (input_str == "exit") { break; } for (int i = 0; i < (int)pre_input.size(); i++) { if (input_str == to_string(i)) { input_str = pre_input[i]; cout << input_str << endl; } }
//text = PROMPT_TEXT_PREFIX + input_str + PROMPT_TEXT_POSTFIX; text = input_str; rkllm_input.input_type = RKLLM_INPUT_PROMPT; rkllm_input.prompt_input = (char *)text.c_str(); printf("robot: ");
// 若要使用普通推理功能,则配置rkllm_infer_mode为RKLLM_INFER_GENERATE或不配置参数 rkllm_run(llmHandle, &rkllm_input, &rkllm_infer_params, NULL); } rkllm_destroy(llmHandle);
return 0;}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    89

    文章

    38085

    浏览量

    296329
  • 大模型
    +关注

    关注

    2

    文章

    3440

    浏览量

    4960
  • DeepSeek
    +关注

    关注

    2

    文章

    824

    浏览量

    2799
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    部署DeepSeek R1于AX650N与AX630C平台

    适配 DeepSeek R1 系列模型的最新进展,向业界对端侧大模型部署的开发者提供一种新的思路,促进社区对端侧大
    的头像 发表于 02-09 09:32 1896次阅读
    <b class='flag-5'>部署</b><b class='flag-5'>DeepSeek</b> <b class='flag-5'>R1</b>于AX650N与AX630C平台

    了解DeepSeek-V3 和 DeepSeek-R1两个大模型的不同定位和应用选择

    ); 二者均支持API调用,可根据业务需求混合部署(如用V3处理前端交互,R1负责后端计算)。 在电子工程领域选用哪个模型最合适,有其他更好的模型推荐吗? 在电子工程领域的电路设计与
    发表于 02-14 02:08

    RK3588开发板上部署DeepSeek-R1模型的完整指南

    DeepSeek作为国产AI大数据模型的代表,凭借其卓越的推理能力和高效的文本生成技术,在全球人工智能领域引发广泛关注。DeepSeek-R1作为该系列最新迭代版本,实现了长文本处理效能跃迁、多模态
    发表于 02-27 16:45

    EASY EAI Orin Nano开发板试用体验】EASY-EAI-Toolkit人脸识别

    本篇使用算法组件实现人脸检测。 一.准备工作 1.首先使用到EASY-EAI-Toolkit组件,ubuntu挂载目录下克隆git clone https://github.com/EASY-EAI
    发表于 07-20 14:40

    EASY EAI Nano人工智能开发套件试用体验】EASY EAI Nano人工智能开发套件开发环境的准备和架设

    编译环境准备与更新]() Easy-Eai编译环境准备与更新 1. 部署EASY-EAI编译环境 1.1 EASY-EAI编译环境简介
    发表于 06-10 10:32

    EASY EAI Nano人工智能开发套件试用体验】EASY EAI Nano人工智能开发套件开箱及最快上手教程

    / 执行命令,启动门禁机程序: ./qSolu-facialGate 运行效果: 好了,至此已经完成了开发环境的搭建,并跑通了第一个Demo,恭喜你顺利上手了EASY EAI Nano人工智能开发套件的开发,接下来可以探索其他Demo,
    发表于 06-11 13:34

    EASY-EAI携手Hailo推出高性能、高算力的边缘AI硬件组合

    EASY-EAI与Hailo建立合作关系,共同推出高算力的边缘AI产品组合。
    的头像 发表于 02-21 09:56 1653次阅读

    云天励飞上线DeepSeek R1系列模型

    -Distill-Llama-70B大模型DeepSeek V3/R1 671B MoE大模型也在有序适配中。适配完成后,DeepEdge10芯片平台将在端、边、云全面支持
    的头像 发表于 02-06 10:39 1071次阅读
    云天励飞上线<b class='flag-5'>DeepSeek</b> <b class='flag-5'>R1</b>系列<b class='flag-5'>模型</b>

    扣子平台支持DeepSeek R1与V3模型

    近日,新一代AI应用搭建平台“扣子”宣布了一项重要更新,即正式支持DeepSeekR1和V3模型,并向广大用户开放免费体验。 扣子平台一直以来都致力于为用户提供便捷、高效的AI应用搭建服务,帮助
    的头像 发表于 02-08 13:42 1854次阅读

    Deepseek R1模型离线部署教程

    。作为国产AI大数据模型的代表,凭借其卓越的推理能力和高效的文本生成技术,在全球人工智能领域引发广泛关注。 本文主要说明DeepSeek-R1如何离线运行在EASY-EAI-Orin-
    的头像 发表于 02-12 09:37 2426次阅读
    <b class='flag-5'>Deepseek</b> <b class='flag-5'>R1</b>大<b class='flag-5'>模型</b><b class='flag-5'>离线</b><b class='flag-5'>部署</b>教程

    研华边缘AI Box MIC-ATL3S部署Deepseek R1模型

    随着深度求索(DeepSeek)大模型的发布引发行业热议,研华科技基于昇腾Atlas平台边缘AI Box MIC-ATL3S正式发布与Deepseek R1
    的头像 发表于 02-14 16:08 2617次阅读
    研华边缘AI Box MIC-ATL3S<b class='flag-5'>部署</b><b class='flag-5'>Deepseek</b> <b class='flag-5'>R1</b><b class='flag-5'>模型</b>

    研华发布昇腾AI Box及Deepseek R1模型部署流程

    近日,随着深度求索(DeepSeek)大模型的发布在行业内掀起热议,研华科技正式推出了基于昇腾Atlas平台的边缘AI Box MIC-ATL3S,并同步发布了与Deepseek R1
    的头像 发表于 02-19 10:41 1078次阅读

    ORinNano离线部署Deepseek R1模型教程

    ORinNano离线部署Deepseek R1模型教程
    的头像 发表于 04-10 15:32 1025次阅读
    ORinNano<b class='flag-5'>离线</b><b class='flag-5'>部署</b><b class='flag-5'>Deepseek</b> <b class='flag-5'>R1</b>大<b class='flag-5'>模型</b>教程

    瑞萨RZ/V2H平台支持部署离线DeepSeek -R1大语言模型

    瑞萨RZ/V2H平台支持部署离线DeepSeek -R1大语言模型
    的头像 发表于 05-13 17:07 1373次阅读
    瑞萨RZ/V2H平台支持<b class='flag-5'>部署</b><b class='flag-5'>离线</b>版<b class='flag-5'>DeepSeek</b> -<b class='flag-5'>R1</b>大语言<b class='flag-5'>模型</b>

    EASY-EAI携手Hailo,推出高性能、高算力的边缘AI硬件组合

    导读EASY-EAI与Hailo建立合作关系,共同推出高算力的边缘AI产品组合。此次合作,EASY-EAI将采用Hailo公司的AI加速芯片,并与我司硬件相结合,打造一款性能优异、性价比高的边缘人
    的头像 发表于 07-25 15:22 911次阅读
    <b class='flag-5'>EASY-EAI</b>携手Hailo,推出高性能、高算力的边缘AI硬件组合