跳到主要内容

DeepSeek 环境搭建

1. DeepSeek 简介

DeepSeek是一家迅速崛起的初创公司,最近因其推出的 DeepSeek-V3 大型语言模型而引起了广泛关注。经过多次技术迭代与优化,DeepSeek-V3 的性能已经达到了与 OpenAI-O1 模型相媲美的水平,甚至在某些方面有所超越。最为吸引人的是,DeepSeek R1 模型已经完全开源,并且可以免费使用。

2. DeepSeek 部署

在 Luckfox omni3576 Debian12上部署 Deepseek 有两种方法,分别是使用 Ollama 工具部署和使用瑞芯微官方的 RKLLM 量化部署。下面分别对这两种部署方式进行介绍。

名称下载地址
ollama 软件包(linux-arm64)百度网盘下载
DeepSeek 示例程序百度网盘下载
rkllm模型百度网盘下载
交叉编译工具:gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu百度网盘下载

2.1 使用 Ollama 工具部署

Ollama 是一个开源的本地大语言模型运行框架,旨在让用户能够轻松地在本地机器上部署和运行大型语言模型(LLM),支持最新的 DeepSeek 模型。

  1. 下载 Linux-arm64 版本的 Ollama 软件包。(如果无法科学上网且下载速度过慢,可直接使用上面的百度网盘链接进行下载)

    curl  -L https://ollama.com/download/ollama-linux-arm64.tgz  -o ollama-linux-arm64.tgz
  2. 将文件解压到 /usr 目录下。

    sudo  tar -C /usr -xzf ollama-linux-arm64.tgz
  3. 创建 ollama 用户和用户组,并将当前用户加入到 ollama 用户组。

    sudo  useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
    sudo usermod -a -G ollama $(whoami)
  4. 配置ollama为系统启动服务。

    sudo vim /etc/systemd/system/ollama.service
    [Unit]
    Description=Ollama Service
    After=network-online.target

    [Service]
    ExecStart=/usr/bin/ollama serve
    User=ollama
    Group=ollama
    Restart=always
    RestartSec=3
    Environment="PATH=$PATH"

    [Install]
    WantedBy=default.target
    # 重新加载  systemd 配置并启用 ollama 服务
    sudo systemctl daemon-reload
    sudo systemctl enable ollama
    sudo systemctl start ollama

    # 安装成功后会打印出对应的版本
    luckfox@luckfox:~$ ollama -v
    ollama version is 0.5.11
  5. 启动 ollama 运行 Deepseek R1 1.5B 模型大模型。

    ollama  run deepseek-r1:1.5b
  6. 初次启动模型,需要从ollama网站下载模型文件。

2.2 使用 RKLLM量化部署(PC ubuntu22.04)

RKLLM-Toolkit 是一个开发套件,旨在帮助用户在计算机上进行大语言模型的量化和转换。其功能类似于之前章节中介绍的 RKNN-Toolkit2,都是通过在 PC 平台上提供 Python 接口来简化模型的部署和运行。为了使用 RKNPU,用户需要首先在计算机上运行 RKLLM-Toolkit,将训练好的模型转换为 RKLLM 格式,然后通过 RKNN C API 或 Python API 在开发板上进行部署。对于模型训练和模型转换需要用户自己完成,模型转换可参考 rknn-llm 仓库下 rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/Readme.md 文档。本节我们主要使用瑞芯微转换好的 rkllm 进行演示。

  1. 克隆 rknn-llm 仓库。

    git  clone https://github.com/airockchip/rknn-llm.git  --depth 1
  2. 下载完成后,检查目录结构。

    doc
    └── Rockchip_RKLLM_SDK_CN.pdf # RKLLM SDK 中文说明文档
    └── Rockchip_RKLLM_SDK_EN.pdf # RKLLM SDK 英文说明文档
    examples
    ├── DeepSeek-R1-Distill-Qwen-1.5B_Demo # 板端 API 推理调用示例工程
    ├── Qwen2-VL-2B_Demo # 多模态推理调用示例工程
    └── rkllm_server_demo # RKLLM-Server 部署示例工程
    rkllm-runtime
    ├── runtime
    │ └── Android
    │ └── librkllm_api
    │ └── arm64-v8a
    │ └── librkllmrt.so # RKLLM Runtime 库
    │ └── include
    │ └── rkllm.h # Runtime 头文件
    │ └── Linux
    │ └── librkllm_api
    │ └── aarch64
    │ └── librkllmrt.so # RKLLM Runtime 库
    │ └── include
    │ └── rkllm.h # Runtime 头文件
    rkllm-toolkit
    ├── rkllm_toolkit-x.x.x-cp38-cp38-linux_x86_64.whl
    └── rkllm_toolkit-x.x.x-cp310-cp310-linux_x86_64.whl
    rknpu-driver
    └── rknpu_driver_x.x.x_xxxxxxx.tar.bz2
    scripts
    ├── fix_freq_rk3576.sh # RK3576 定频脚本
    └── fix_freq_rk3588.sh # RK3588 定频脚本
  3. 进入示例程序目录。

    cd  rknn-llm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy
  4. 配置交叉编译器路径,修改 build-linux.sh 文件。

    GCC_COMPILER_PATH=~/opts/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
    修改为:
    GCC_COMPILER_PATH=<sdk path>/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
    • 注意:交叉编译工具通常支持向下兼容,但不支持向上兼容。因此,建议使用 10.2 版本及以上的编译器。交叉编译器可以从官网下载安装,也可以使用 SDK 中自带的版本。
  5. 运行运行 build-linux.sh 脚本,交叉编译示例程序。

    ./build-linux.sh
  6. 编译完成后, 会在 deploy 目录下产生 install 文件夹, 其中有编译好的可执行文件, 以及 RKLLM Runtime 库。

    install/
    └── demo_Linux_aarch64
    ├── lib
    │ └── librkllmrt.so
    └── llm_demo
  7. 将生成的 demo_Linux_aarch64 文件夹传输到开发板。

    scp -r luckfox@192.168.9.185:/home/luckfox
  8. 开发板端运行可执行文件。

    cd  /userdata/demo_Linux_aarch64/

    # 设置依赖库环境
    export LD_LIBRARY_PATH=./lib

    # 板端推理性能查看:
    export RKLLM_LOG_LEVEL=1

    # 运行可执行文件
    # 用法: ./llm_demo <model_path> <max_new_tokens> <max_context_len>
    ./llm_demo DeepSeek-R1-Distill-Qwen-1.5B_W4A16_RK3576.rkllm 2048 4096
  9. 运行之后如下图所示,接下来向该模型提出问题即可: