在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Deepseek R1大模型離線部署教程

EASY EAI靈眸科技 ? 來源:EASY EAI靈眸科技 ? 2025-02-12 09:37 ? 次閱讀

1. Deepseek簡介

DeepSeek-R1,是幻方量化旗下AI公司深度求索(DeepSeek)研發(fā)的推理模型。DeepSeek-R1采用強化學(xué)習進行后訓(xùn)練,旨在提升推理能力,尤其擅長數(shù)學(xué)、代碼和自然語言推理等復(fù)雜任務(wù)。作為國產(chǎn)AI大數(shù)據(jù)模型的代表,憑借其卓越的推理能力和高效的文本生成技術(shù),在全球人工智能領(lǐng)域引發(fā)廣泛關(guān)注。 本文主要說明DeepSeek-R1如何離線運行在EASY-EAI-Orin-Nano(RK3576)硬件上, RK3576 具有優(yōu)異的端側(cè)AI能效比與極高的性價比,是AI落地的不二之選。

9c88ca24-e85d-11ef-9310-92fbcf53809c.png

9ca06f12-e85d-11ef-9310-92fbcf53809c.png

2. 開發(fā)環(huán)境搭建

2.1RKLLM-Toolkit安裝

本節(jié)主要說明如何通過 pip 方式來安裝 RKLLM-Toolkit,用戶可以參考以下的具體流程說明完成 RKLLM-Toolkit 工具鏈的安裝。

9cd716b6-e85d-11ef-9310-92fbcf53809c.png

2.1.1安裝miniforge3工具

為防止系統(tǒng)對多個不同版本的 Python 環(huán)境的需求,建議使用 miniforge3 管理 Python 環(huán)境。檢查是否安裝 miniforge3 和 conda 版本信息,若已安裝則可省略此小節(jié)步驟。

下載 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.sh
bash Miniforge3-Linux-x86_64.sh
2.1.2創(chuàng)建 RKLLM-Toolkit Conda 環(huán)境


進入 Conda base 環(huán)境:

source ~/miniforge3/bin/activate
創(chuàng)建一個 Python3.8 版本(建議版本)名為 RKLLM-Toolkit 的 Conda 環(huán)境:

conda create -n RKLLM-Toolkit python=3.8


進入 RKLLM-Toolkit Conda 環(huán)境:

conda activate RKLLM-Toolkit

9ce30d54-e85d-11ef-9310-92fbcf53809c.png

2.1.3安裝RKLLM-Toolkit


在 RKLLM-Toolkit Conda 環(huán)境下使用 pip 工具直接安裝所提供的工具鏈 whl 包,在安裝過程 中,安裝工具會自動下載 RKLLM-Toolkit 工具所需要的相關(guān)依賴包。

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

若在安裝的過程中,某些文件安裝很慢,可以登錄python官網(wǎng)單獨下載:
https://pypi.org/

執(zhí)行以下命令沒有報錯,則安裝成功。

9ceae664-e85d-11ef-9310-92fbcf53809c.png



3.Deepseek-R1模型轉(zhuǎn)換

本章主要說明如何實現(xiàn)Deepseek-R1大語言模型如何轉(zhuǎn)換為RKLLM模型。

3.1模型與腳本下載

本節(jié)提供兩種大模型文件,Hugging face的原始模型和轉(zhuǎn)換完成的NPU模型。

9d1e652a-e85d-11ef-9310-92fbcf53809c.png

還有用于模型轉(zhuǎn)換的腳本:

9d2e9ac6-e85d-11ef-9310-92fbcf53809c.png



3.2模型轉(zhuǎn)換

下載完成后模型和腳本放到同一個目錄:

9d47d3b0-e85d-11ef-9310-92fbcf53809c.png

在RKLLM-Toolkit環(huán)境,執(zhí)行以下指令進行模型轉(zhuǎn)換:

9d64c812-e85d-11ef-9310-92fbcf53809c.png

至此模型轉(zhuǎn)換成功,生成deepseek_w4a16.rkllm NPU化的大模型文件:

9d77b0a8-e85d-11ef-9310-92fbcf53809c.png

test.py轉(zhuǎn)換腳本如下所示, 用于轉(zhuǎn)換deepseek-r1模型:

from rkllm.api import RKLLM
from datasets import load_dataset
from transformers import AutoTokenizer
from tqdm import tqdm
import torch
from torch import nn
import 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 model
dataset = "./data_quant.json"
# Json file format, please note to add prompt in the input,like this:
# [{"input":"Human: 你好!
Assistant: ", "target": "你好!我是人工智能助手KK!"},...]


qparams = None
# qparams = 'gdq.qparams' # Use extra_qparams
ret = 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 model
messages = "<|im_start|>system You are a helpful assistant.<|im_end|><|im_start|>user你好!
<|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 model
ret = llm.export_rkllm("./deepseek_r1_rk3576_w4a16.rkllm")
if ret != 0:
print('Export model failed!')
4.Deepseek-R1模型部署

本章主要說明RKLLM格式的NPU模型如何運行在EASY-EAI-Orin-Nano硬件上。

9d9122fe-e85d-11ef-9310-92fbcf53809c.png



然后把例程【復(fù)制粘貼】到nfs掛載目錄中。(不清楚目錄如何構(gòu)建的,可以參考《入門指南/開發(fā)環(huán)境準備/nfs服務(wù)搭建與掛載》)。

特別注意:源碼目錄和模型最好cp到板子上,如/userdata,否則在nfs目錄執(zhí)行大模型會導(dǎo)致模型初始化過慢。

9daa1804-e85d-11ef-9310-92fbcf53809c.png

進入到開發(fā)板對應(yīng)的例程目錄執(zhí)行編譯操作,具體命令如下所示:

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

9dc31fa2-e85d-11ef-9310-92fbcf53809c.png

4.1例程運行及效果

進入例程的deepseek-demo/deepseek-demo_release目錄,執(zhí)行下方命令,運行示例程序:

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

9de3bfaa-e85d-11ef-9310-92fbcf53809c.png

至此可以進行對話測試了,試著輸入“直角三角形兩直角邊是3和4,斜邊是多少?”。回答如下所示:

9e019c1e-e85d-11ef-9310-92fbcf53809c.png

4.2RKLLM算法例程

例程目錄為rkllm-demo/src/main.cpp,操作流程如下。

9e11f6d6-e85d-11ef-9310-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("
");
    } else if (state == RKLLM_RUN_ERROR) {
        printf("\run error
");
    } else if (state == RKLLM_RUN_GET_LAST_HIDDEN_LAYER) {
        /* ================================================================================================================
        若使用GET_LAST_HIDDEN_LAYER功能,callback接口會回傳內(nèi)存指針:last_hidden_layer,token數(shù)量:num_tokens與隱藏層大小:embd_size
        通過這三個參數(shù)可以取得last_hidden_layer中的數(shù)據(jù)
        注:需要在當前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("
data_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
";
        return 1;
    }


    signal(SIGINT, exit_handler);
    printf("rkllm init start
");


    //設(shè)置參數(shù)及初始化
    RKLLMParam param = rkllm_createDefaultParam();
    param.model_path = argv[1];


    //設(shè)置采樣參數(shù)
    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
");
    } else {
        printf("rkllm init failed
");
        exit_handler(-1);
    }


    string text;
    RKLLMInput rkllm_input;


    // 初始化 infer 參數(shù)結(jié)構(gòu)體
    RKLLMInferParam rkllm_infer_params;
    memset(&rkllm_infer_params, 0, sizeof(RKLLMInferParam));  // 將所有內(nèi)容初始化為 0


    // 1. 初始化并設(shè)置 LoRA 參數(shù)(如果需要使用 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("
load lora failed
");
    // }


    // 加載第二個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("
load lora failed
");
    // }


    // RKLLMLoraParam lora_params;
    // lora_params.lora_adapter_name = "test";  // 指定用于推理的 lora 名稱
    // rkllm_infer_params.lora_params = &lora_params;


    // 2. 初始化并設(shè)置 Prompt Cache 參數(shù)(如果需要使用 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("
");
        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或不配置參數(shù)
        rkllm_run(llmHandle, &rkllm_input, &rkllm_infer_params, NULL);
    }
    rkllm_destroy(llmHandle);


    return 0;
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1803

    文章

    48351

    瀏覽量

    244153
  • 大模型
    +關(guān)注

    關(guān)注

    2

    文章

    2897

    瀏覽量

    3628
  • rk3576
    +關(guān)注

    關(guān)注

    1

    文章

    84

    瀏覽量

    440
  • DeepSeek
    +關(guān)注

    關(guān)注

    1

    文章

    734

    瀏覽量

    854

原文標題:速看!EASY-EAI教你離線部署Deepseek R1大模型

文章出處:【微信號:easy-eai-AIoT,微信公眾號:EASY EAI靈眸科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    部署DeepSeek R1于AX650N與AX630C平臺

    適配 DeepSeek R1 系列模型的最新進展,向業(yè)界對端側(cè)大模型部署的開發(fā)者提供一種新的思路,促進社區(qū)對端側(cè)大
    的頭像 發(fā)表于 02-09 09:32 ?690次閱讀
    <b class='flag-5'>部署</b><b class='flag-5'>DeepSeek</b> <b class='flag-5'>R1</b>于AX650N與AX630C平臺

    了解DeepSeek-V3 和 DeepSeek-R1兩個大模型的不同定位和應(yīng)用選擇

    ); 二者均支持API調(diào)用,可根據(jù)業(yè)務(wù)需求混合部署(如用V3處理前端交互,R1負責后端計算)。 在電子工程領(lǐng)域選用哪個模型最合適,有其他更好的模型推薦嗎? 在電子工程領(lǐng)域的電路設(shè)計與
    發(fā)表于 02-14 02:08

    RK3588開發(fā)板上部署DeepSeek-R1模型的完整指南

    DeepSeek作為國產(chǎn)AI大數(shù)據(jù)模型的代表,憑借其卓越的推理能力和高效的文本生成技術(shù),在全球人工智能領(lǐng)域引發(fā)廣泛關(guān)注。DeepSeek-R1作為該系列最新迭代版本,實現(xiàn)了長文本處理效能躍遷、多模態(tài)
    發(fā)表于 02-27 16:45

    云天勵飛上線DeepSeek R1系列模型

    -Distill-Llama-70B大模型DeepSeek V3/R1 671B MoE大模型也在有序適配中。適配完成后,DeepEdge10芯片平臺將在端、邊、云全面支持
    的頭像 發(fā)表于 02-06 10:39 ?495次閱讀
    云天勵飛上線<b class='flag-5'>DeepSeek</b> <b class='flag-5'>R1</b>系列<b class='flag-5'>模型</b>

    扣子平臺支持DeepSeek R1與V3模型

    近日,新一代AI應(yīng)用搭建平臺“扣子”宣布了一項重要更新,即正式支持DeepSeekR1和V3模型,并向廣大用戶開放免費體驗。 扣子平臺一直以來都致力于為用戶提供便捷、高效的AI應(yīng)用搭建服務(wù),幫助
    的頭像 發(fā)表于 02-08 13:42 ?776次閱讀

    壁仞科技順利部署DeepSeek R1千問蒸餾模型

    DeepSeek 的國內(nèi)算力支持隊伍進一步壯大:來自上海的壁仞科技順利部署DeepSeek-R1-Distill千問蒸餾模型(1.5B/7B/14B/32B),并已上線 Gitee A
    的頭像 發(fā)表于 02-08 16:56 ?1081次閱讀

    Gitee AI 聯(lián)合沐曦首發(fā)全套 DeepSeek R1 千問蒸餾模型,全免費體驗!

    模型相比,較小尺寸的 DeepSeek 蒸餾版本模型 更適合企業(yè)內(nèi)部實施部署,可以極大的降低落地成本 。 同時,這次 Deepseek
    的頭像 發(fā)表于 02-10 09:56 ?345次閱讀
    Gitee AI 聯(lián)合沐曦首發(fā)全套 <b class='flag-5'>DeepSeek</b> <b class='flag-5'>R1</b> 千問蒸餾<b class='flag-5'>模型</b>,全免費體驗!

    超星未來驚蟄R1芯片適配DeepSeek-R1模型

    日前,超星未來研發(fā)團隊成功完成了驚蟄R1芯片對DeepSeek-R1模型的適配工作,實現(xiàn)了與用戶之間的流暢對話。這一成果標志著超星未來在人工智能芯片和模型優(yōu)化方面取得了重要進展
    的頭像 發(fā)表于 02-13 14:05 ?395次閱讀

    IBM在watsonx.ai平臺推出DeepSeek R1蒸餾模型

    ,進一步增強企業(yè)在安全、治理以及規(guī)模化部署方面的能力。 DeepSeek R1是IBM在AI領(lǐng)域的一項重要創(chuàng)新,它采用了蒸餾模型技術(shù),能夠在保持模型
    的頭像 發(fā)表于 02-14 10:21 ?343次閱讀

    研華邊緣AI Box MIC-ATL3S部署Deepseek R1模型

    隨著深度求索(DeepSeek)大模型的發(fā)布引發(fā)行業(yè)熱議,研華科技基于昇騰Atlas平臺邊緣AI Box MIC-ATL3S正式發(fā)布與Deepseek R1
    的頭像 發(fā)表于 02-14 16:08 ?807次閱讀
    研華邊緣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>

    OpenAI O3與DeepSeek R1:推理模型性能深度分析

    OpenAI剛推出的O3和DeepSeekR1代表了推理模型領(lǐng)域的重大進步。這兩種模型都因在各種基準測試中的出色表現(xiàn)而備受關(guān)注,引發(fā)了人們對人工智能的未來及其對各個行業(yè)的潛在影響的討
    的頭像 發(fā)表于 02-18 11:07 ?531次閱讀

    研華發(fā)布昇騰AI Box及Deepseek R1模型部署流程

    近日,隨著深度求索(DeepSeek)大模型的發(fā)布在行業(yè)內(nèi)掀起熱議,研華科技正式推出了基于昇騰Atlas平臺的邊緣AI Box MIC-ATL3S,并同步發(fā)布了與Deepseek R1
    的頭像 發(fā)表于 02-19 10:41 ?353次閱讀

    9.9萬元用上“滿血”DeepSeek R1一體機,本地部署成新商機?引發(fā)外媒熱議

    與本地部署的熱潮 DeepSeek R1作為一款強大的AI大模型,其本地部署能夠帶來諸多優(yōu)勢,如保護數(shù)據(jù)安全和隱私、避免核心數(shù)據(jù)傳輸至第三方
    的頭像 發(fā)表于 02-27 09:20 ?1120次閱讀

    兆芯全面部署DeepSeek R1模型

    近日,基于兆芯高性能通用處理器的PC終端、工作站以及服務(wù)器成功實現(xiàn)DeepSeek-R1-Distill模型(1.5B/7B/32B/70B/671B等)的本地部署,在保證推理效率的同時,能夠提供靈活的算力選擇,以滿足不同規(guī)模和
    的頭像 發(fā)表于 02-25 13:45 ?318次閱讀

    ORinNano離線部署Deepseek R1模型教程

    ORinNano離線部署Deepseek R1模型教程
    的頭像 發(fā)表于 04-10 15:32 ?127次閱讀
    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>教程
    主站蜘蛛池模板: 国产午夜精品理论片免费观看 | 在线视频网址 | 老司机色网 | 午夜小视频免费 | 91视频色 | 欧美极品一区 | 免费看黄在线观看 | 九色国产在视频线精品视频 | 天天色天天 | 久久国产影视 | 一级毛片一级毛片 | 色综合天天综合网站中国 | 久操成人 | 51国产午夜精品免费视频 | 精品视频一区二区三区 | 国产高清视频在线播放www色 | 欧美成人免费午夜全 | 国产干美女 | 添人人躁日日躁夜夜躁夜夜揉 | 午夜影院官网 | 在线看视频你懂的 | 成人免费看片视频色多多 | 成人窝窝午夜看片 | 亚洲欧美一区二区三区图片 | 久久精品99| 4399一级成人毛片 | 在线观看免费视频片 | 日本最猛黑人xxxx猛交 | 日韩在线视频一区二区三区 | 五月婷婷激情网 | 免费看特级淫片日本 | 成人青草亚洲国产 | 国产资源视频在线观看 | 很黄的网站在线观看 | 人人干在线 | yy4080一级毛片免费观看 | 日本伊人网 | 亚洲午夜久久久久久噜噜噜 | 国产欧美精品午夜在线播放 | 国产精品久久国产三级国不卡顿 | 色视频在线观看完整免费版 |