Banana Pi BPI-M7 RK3588开发板运行RKLLM软件堆AI大模型部署

news2024/11/19 4:45:31

关于Banana Pi BPI-M7

Banana Pi BPI-M7 采用Rockchip RK3588,板载8/16/32G RAM内存和 64/128G eMMC存储,支持无线wifi6和蓝牙5.2。2x2.5G网络端口,1个HDMIout标准 输出口,2x USB3.0,2xTYPE-C,2x MIPI CSI接口和1x MIPI DSI接口,1x M.2 KEY M接口,40 PIN GPIO,迷你尺寸仅92x62mm

香蕉派BPI-M7采用睿芯最新旗舰RK3588八核64位处理器,最高频率为2.4GHz, 6 TOPS NPU,最高内存为32GB。

Banana Pi BPI-M7开源硬件开发板

RKLLM 简介

RKLLM 软件堆栈可以帮助用户快速将 AI 模型部署到 Rockchip 芯片上。 整体框架如下:

1.1 RKLLM 工具链介绍​

RKLLM-Toolkit 功能介绍​

RKLLM-Toolkit 是为用户提供在计算机上进行大语言模型的量化、转换的开发套件。通过该 工具提供的 Python 接口可以便捷地完成以下功能:

  1. 模型转换:支持将 Hugging Face 格式的大语言模型(Large Language Model, LLM)转换为 RKLLM 模型,目前支持的模型包括 LLaMA、Qwen/Qwen2、Phi2 等,转换后的 RKLLM 模型能 够在 Rockchip NPU 平台上加载使用。
  2. 量化功能:支持将浮点模型量化为定点模型,目前支持的量化类型包括 w4a16 和 w8a8。

RKLLM Runtime 功能介绍​

RKLLM Runtime 主 要 负 责 加 载 RKLLM-Toolkit 转换得到的 RKLLM 模型,并在 RK3576/RK3588 板端通过调用 NPU 驱动在 Rockchip NPU 上实现 RKLLM 模型的推理。在推理 RKLLM 模型时,用户可以自行定义 RKLLM 模型的推理参数设置,定义不同的文本生成方式, 并通过预先定义的回调函数不断获得模型的推理结果。

1.2 RKLLM 开发流程介绍​

RKLLM 的整体开发步骤主要分为 2 个部分:模型转换和板端部署运行。

  1. 模型转换: 在这一阶段,用户提供的 Hugging Face 格式的大语言模型将会被转换为 RKLLM 格式, 以便在 Rockchip NPU 平台上进行高效的推理。这一步骤包括:
  • a. 获取原始模型:获取 Hugging Face 格式的大语言模型;或是自行训练得到的大语言模 型,要求模型保存的结构与 Hugging Face 平台上的模型结构一致。
  • b. 模型加载:通过 rkllm.load_huggingface()函数加载原始模型。
  • c. 模型量化配置:通过 rkllm.build() 函数构建 RKLLM 模型,在构建过程中可选择是否 进行模型量化来提高模型部署在硬件上的性能,以及选择不同的优化等级和量化类型。
  • d. 模型导出:通过 rkllm.export_rkllm() 函数将 RKLLM 模型导出为一个.rkllm 格式文件, 用于后续的部署。
  1. 板端部署运行: 这个阶段涵盖了模型的实际部署和运行。它通常包括以下步骤:
  • a. 模型初始化:加载 RKLLM 模型到 Rockchip NPU 平台,进行相应的模型参数设置来 定义所需的文本生成方式,并提前定义用于接受实时推理结果的回调函数,进行推理前准备。
  • b. 模型推理:执行推理操作,将输入数据传递给模型并运行模型推理,用户可以通过预 先定义的回调函数不断获取推理结果。
  • c. 模型释放:在完成推理流程后,释放模型资源,以便其他任务继续使用 NPU 的计算 资源。 这两个步骤构成了完整的 RKLLM 开发流程,确保大语言模型能够成功转换、调试,并最终 在 Rockchip NPU 上实现高效部署。

1.3 适用的硬件平台​

本文档适用的硬件平台主要包括:RK3576RK3588

2. 开发环境准备​

在发布的 RKLLM 工具链压缩文件中,包含了 RKLLM-Toolkit 的 whl 安装包、RKLLM Runtime 库的相关文件以及参考示例代码,具体的文件夹结构如下:

doc
└──Rockchip_RKLLM_SDK_CN.pdf # RKLLM SDK 说明文档
rkllm-runtime
├──example
│ └── src
│ └── main.cpp
│ └── build-android.sh
│ └── build-linux.sh
│ └── CMakeLists.txt
│ └── Readme.md
├──runtime
│ └── Android
│ └── librkllm_api
│ └──arm64-v8a
│ └── librkllmrt.so # RKLLM Runtime 库
│ └──include
│ └── rkllm.h # Runtime 头文件
│ └── Linux
│ └── librkllm_api
│ └──aarch64
│ └── librkllmrt.so
│ └──include
│ └── rkllm.h
rkllm-toolkit
├──examples
│ └── huggingface
│ └── test.py
├──packages
│ └── md5sum.txt 
│ └── rkllm_toolkit-1.0.0-cp38-cp38-linux_x86_64.whl
rknpu-driver
└──rknpu_driver_0.9.6_20240322.tar.bz2

在本章中将会对 RKLLM-Toolkit 工具及 RKLLM Runtime 的安装进行详细的介绍,具体的使 用方法请参考第 3 章中的使用说明。

2.1 RKLLM-Toolkit 安装​

本节主要说明如何通过 pip 方式来安装 RKLLM-Toolkit,用户可以参考以下的具体流程说明 完成 RKLLM-Toolkit 工具链的安装。

通过 pip 方式安装​

安装 miniforge3 工具​

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

conda -V
# 提示 conda: command not found 则表示未安装 conda
# 提示 例如版本 conda 23.9.0

下载 miniforge3 安装包

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

安装 miniforge3

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

创建 RKLLM-Toolkit Conda 环境​

进入 Conda base 环境

source ~/miniforge3/bin/activate # miniforge3 为安装目录
# (base) xxx@xxx-pc:~$

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

conda create -n RKLLM-Toolkit python=3.8

进入 RKLLM-Toolkit Conda 环境

conda activate RKLLM-Toolkit
# (RKLLM-Toolkit) xxx@xxx-pc:~$

安装 RKLLM-Toolkit​

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

pip3 install rkllm_toolkit-1.0.0-cp38-cp38-linux_x86_64.whl

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

python
from rkllm.api import RKLLM

2.2 RKLLM Runtime 库的使用​

在所公开的的 RKLLM 工具链文件中,包括包含 RKLLM Runtime 的全部文件:

  • lib/librkllmrt.so: 适用于 RK3576/RK3588 板端调用进行 RKLLM 模型部署推理的 RKLLM Runtime 库;
  • include/rkllm_api.h: 与 librkllmrt.so 函数库相对应的头文件,其中包含相关结构体及 函数定义的说明; 在通过 RKLLM 工具链构建 RK3576/RK3588 板端的部署推理代码时,需要注意对以上头文 件及函数库的链接,从而保证编译的正确性。当代码在 RK3576/RK3588 板端实际运行的过程中, 同样需要确保以上函数库文件成功推送至板端,并通过以下环境变量设置完成函数库的声明:
ulimit -Sn 50000
export LD_LIBRARY_PATH=./lib
./llm_demo qwen.rkllm

2.3 RKLLM Runtime 的编译要求​

在使用 RKLLM Runtime 的过程中,需要注意 gcc 编译器的版本问题。推荐使用交叉编译工具 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu;具体的下载路径为:GCC_10.2 交叉编译工 具下载地址。

请注意,交叉编译工具往往向下兼容而无法向上兼容,因此不要使用 10.2 以下的版本。

若是选择使用 Android 平台,需要进行 Android 可执行文件的编译,推荐使用 Android NDK 工具进行交叉编译,下载路径为:Android_NDK 交叉编译工具下载地址,推荐使用 r18b 版本。

具体的编译方式也可以参考 RKLLM-Toolkit 工具链文件中的 example/build_demo.sh。

2.4 芯片内核更新 由于当前公开的固件内核驱动版本不支持 RKLLM 工具,因此需要更新内核。rknpu 驱动包支持两 个主要内核版本:kernel-5.10 和 kernel-6.1。对于 kernel-5.10,建议使用具体版本号 5.10.198,repo: GitHub - rockchip-linux/kernel at develop-5.10;对于 kernel-6.1,建议使用具体版本号 6.1.57。可在 内核根目录下的 Makefile 中确认具体版本号。 更新步骤如下: a. 下载压缩包 rknpu_driver_0.9.6_20240322.tar.bz2。 b. 解压该压缩包,将其中的 rknpu 驱动代码覆盖到当前内核代码目录。 c. 重新编译内核。 d. 将新编译的内核烧录到设备中。

Banana P BPI-M7开发板:https://docs.banana-pi.org/zh/BPI-M7/BananaPi_BPI-M7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1594053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python botos s3 aws

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html AWS是亚马逊的云服务,其提供了非常丰富的套件,以及支持多种语言的SDK/API。本文针对其S3云储存服务的Python SDK(boto3)的使用进行介绍。 …

云仓酒庄综合品酒师培训盛大开幕,数名爱好者共襄盛举

春意盎然的四月,广东顺德保利假日酒店迎来了一场特殊的盛宴——云仓酒庄首届《综合品酒师》培训盛大开幕。来自全国各地的品酒爱好者齐聚一堂,共襄此次品酒文化的盛宴。此次培训不仅是对品酒文化的深度挖掘,更是酒类销售行业专业化、规范化发…

LeetCode 热题 100 题解(二):双指针部分(2)| 滑动窗口部分(1)

题目四:接雨水(No. 43) 题目链接:https://leetcode.cn/problems/trapping-rain-water/description/?envTypestudy-plan-v2&envIdtop-100-liked 难度:困难 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&am…

程序员见了走不动道!十几款封装好的界面炫酷的登录页组件,太酷了(文末有项目源码)

今天给大家推荐一个漂亮的 React 登录页组件。内含十几款封装好的登录页,界面炫酷、即插即用,用来快速构建登录页的 React 组件,简直不要太酷了! React Login Pages React Login Pages 提供基于基础组件的封装登录页面组件&#…

【通信原理笔记】【三】——3.8 载波同步

文章目录 前言一、正弦信号二、载波同步2.1、平方环法2.2、科斯塔斯环法(castas)2.3 相位模糊 总结 前言 不管是幅度调制还是角度调制,都离不开正弦信号,其中相干解调都要求恢复发送端使用的正弦载波信号,这一节就来深…

Win11 使用 WSL2 安装 linux 子系统 ubuntu,删除 linux 子系统 ubuntu

Win11 使用 WSL2 安装 linux 子系统 ubuntu,删除 linux 子系统 ubuntu 1、用 部署映像服务和管理工具 dism.exe 命令,开启 WSL2 按【WIN R】,打开【运行】,输入:【cmd】,管理员打开【命令行提示符】。 …

无人机/飞控--ArduPilot、PX4学习记录(5)

这几天看dronekit,做无人机失控保护。 PX4官网上的经典案例,我做了很多注解,把代码过了一遍。 无人机具体执行了: 先起飞,飞至正上空10m->向北移动10m->向东移动10m->向南移动10m->向西移动10m->回到初…

【日常记录】【CSS】SASS循环的使用

文章目录 1、引言2、安装3、举例4、参考链接 1、引言 目前在任何项目框架中,都会有css 预处理器,目前一般使用 sass、less 这俩其中之一,它可以简化css的书写 Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (v…

内网渗透-Earthworm的简单使用(内网穿透工具)

Earthworm的简单介绍(一) 文章目录 EarthWorm下载地址1. 普通网络 1.1 跳板机存在公网IP 1.1.1 网络环境1.1.2 使用方法1.1.3 流量走向 1.2 跳板机不存在公网IP,可出网 1.2.1 网络环境1.2.2 使用方法1.2.3 流量走向 2. 二级网络 2.1 一级跳…

【随笔】Git 基础篇 -- 远程仓库 git clone(二十五)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

刷题之Leetcode707题(超级详细)

707.设计链表 力扣题目链接(opens new window)https://leetcode.cn/problems/design-linked-list/ 题意: 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val)&#x…

【数据库】加 Redis 就无懈可击? —— 缓存雪崩、击穿、穿透的破解之道

一般来说,目前的系统设计上为了缓解数据库峰值压力,都会增加 Redis 作为第一道屏障,但是其依然存在一些不足。总结起来是三大问题,分别是缓存雪崩、缓存击穿和缓存穿透。本文旨在说清楚三个问题的原因及相应的防范策略。 以 Redis…

计算机基础知识-第9章-存储的本质(2)——硬盘和文件系统基础知识

一、机械硬盘的原理 概括来说,硬盘的工作原理是利用特定的磁粒子的极性来记录数据。磁头在读取数据时,将磁力子的不同极性转换成不同的电脉冲信号,再利用数据转换器将这些原始信号变成电脑可以使用的数据,写的操作正好与此相反。…

react 初学增删改查购物车案例

界面 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>react-购物车案例</title><…

gpt在线网页版最全收录

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

我的新书,在西西弗书店上架了!

大家好&#xff0c;我是程序员小灰。今天告诉大家一个好消息&#xff0c;我的新书在西西弗书店上架了&#xff01; 熟悉小灰的朋友都知道&#xff0c;我以前是京东的一名程序员&#xff0c;现在全职投入到IT领域的自媒体创作。在2019年&#xff0c;我出版了人生中的第一本书《漫…

eclipse 取消生成注释 TODO Auto-generated method stub

eclipse 取消生成注释 // TODO Auto-generated method stub 基本步骤 windows -> preferencesJava -> Code Style -> Code TemplatesCode -> Method body -> 编辑删除 // ${todo} Auto-generated method stub参考材料 Eclipse 中取消生成 TODO Auto-generated…

Unity类银河恶魔城学习记录12-14 p136 Merge Skill Tree with Sword skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections.…

RTC的基本概念以及相关例程

实时时钟(RTC) 北京时间跟伦敦时间错8个小时 BKP简介 BKP本质上是RAM存储器&#xff0c;没有掉电不丢失的能力。 VBAT的作用就是&#xff0c;当VDD断电时&#xff0c;BKP会切换到VBAT供电&#xff0c;这样可以继续维持BKP里面的数据&#xff0c;如果VDD断电&#xff0c;VBAT也…

《猎灵online》游戏完整源码(源码+客户端+服务端+文档+工具),云盘下载

《猎灵》是一款由国内知名开发运营开发的大型3D魔幻网游&#xff0c;《猎灵》研发团队突破诸多瓶颈&#xff0c;首创“全自由无限制PK”&#xff0c;让玩家拒绝无意义等待&#xff0c;自由作战不受任何束缚&#xff0c;真正的实现想战就战&#xff0c;游戏创建了六界神魔乱斗的…