RK3588安装TVM-GPU版本

1.前言

        RK3588还有相应的GPU可以使用,我们也可以配置相关的环境,进行GPU的使用

2. RK3588的GPU介绍

        Mali-G610 是 Arm 公司开发的第三代 Valhall 架构的 GPU。它于 2022 年 7 月发布,面向中端和高端移动设备。

        Mali-G610 采用 Armv9 架构,具有 10 个核心,每个核心都有 128 个 FP32 ALU。它还支持 FP16、INT8 和 INT4 计算,以及硬件加速的 AI 功能。

        Mali-G610 的性能比前代 Mali-G57 提高了 20%。它能够在 1080p 分辨率下以 60fps 的帧率运行复杂的游戏和应用程序。

        Mali-G610 的具体参数如下:

  • 核心数:10 个
  • 每个核心的 FP32 ALU 数量:128
  • 架构:Armv9
  • 支持的计算类型:FP32、FP16、INT8、INT4
  • 支持的 AI 功能:硬件加速

        Mali-G610 已被多家移动设备制造商采用,包括 OPPO、vivo、Realme、Redmi 等。它将在未来几年内成为中端和高端移动设备的常用 GPU。

        以下是 Mali-G610 的一些优势:

  • 性能强大:比前代 Mali-G57 提高了 20%
  • 支持最新的计算类型:FP16、INT8、INT4
  • 支持硬件加速的 AI 功能

Mali-G610 将为中端和高端移动设备带来更出色的图形性能和 AI 功能。

3.安装

        参考之前的文章RK3588安装TVM-CPU版本,从step1~step3都是一样的,接下来配置不一样的内容

1.安装opencl

sudo apt install ocl-icd-* opencl-headers

sudo apt install clinfo

# 查看信息

clinfo

2.安装Mali-G610的驱动

        资源下载链接RK3588-Mali-G610驱动

        拷贝到RK3588中后安装deb文件

        sudo dpkg -i ***.deb

3.配置opencl

修改文件build/config.cmake 

set(USE_OPENCL /usr/lib/aarch64-linux-gnu/libmali.so)

4.cmake设置

cd build
cmake -DOpenCL_LIBRARY=/usr/lib/aarch64-linux-gnu/libmali.so -DOpenCL_INCLUDE_DIR=/usr/include/ .. -G Ninja
ninja

5:安装Python版本的tvm


        如果相关的库没有安装,根据提示进行安装即可,我将我的贴出来

sudo vim ~/.bashrc

export TVM_HOME=/path/to/tvm # 编译的python/tvm路径

# export TVM_HOME=/home/ubuntu/apache-tvm-src-v0.14.0/python/tvm
# export PYTHONPATH=$TVM_HOME/python3.7:${PYTHONPATH}
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

source ~/.bashrc

cd /home/ubuntu/apache-tvm-src-v0.10.0/python 
python3.7 setup.py install --user # 我的是3.7,根据自己的修改

4.验证

        代码参考https://zhuanlan.zhihu.com/p/584849555

import onnx
import numpy as np
from scipy.special import softmax
from PIL import Image
import tvm
import tvm.relay as relay
from tvm.contrib import graph_executor
import tvm.contrib.graph_executor as runtime
from tvm.contrib.download import download_testdata
import timeit#ONNX model path
model_path = "/home/firefly/myscripts/my_model.onnx"
onnx_model = onnx.load(model_path)
np.random.seed(0)img_url = "https://s3.amazonaws.com/model-server/inputs/kitten.jpg"
img_path = download_testdata(img_url, "imagenet_cat.png", module="data")# Resize it to 224x224
resized_image = Image.open(img_path).resize((224, 224))
img_data = np.asarray(resized_image).astype("float32")# Our input image is in HWC layout while ONNX expects CHW input, so convert the array
img_data = np.transpose(img_data, (2, 0, 1))# Normalize according to the ImageNet input specification
imagenet_mean = np.array([0.485, 0.456, 0.406]).reshape((3, 1, 1))
imagenet_stddev = np.array([0.229, 0.224, 0.225]).reshape((3, 1, 1))
norm_img_data = (img_data / 255 - imagenet_mean) / imagenet_stddev# Add the batch dimension, as we are expecting 4-dimensional input: NCHW.
img_data = np.expand_dims(norm_img_data, axis=0)target = tvm.target.mali(model='rk3588')
target_host = tvm.target.arm_cpu(model='rk3588')input_name = "data"
shape_dict = {input_name: img_data.shape}mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)with tvm.transform.PassContext(opt_level=3):lib = relay.build(mod, target=tvm.target.Target(target, host=target_host), params=params)dev = tvm.device(str(target), 0)
module = runtime.GraphModule(lib["default"](dev))dtype = "float32"
module.set_input(input_name, img_data)ftimer = module.module.time_evaluator("run", dev, number=1, repeat=30)
prof_res = np.array(ftimer().results) * 1000  # multiply 1000 for converting to millisecond
print("%-20s %-19s (%s)" % ("resnet50", "%.2f ms" % np.mean(prof_res), "%.2f ms" % np.std(prof_res))
)module.run()
output_shape = (1, 1000)
tvm_output = module.get_output(0, tvm.nd.empty(output_shape)).numpy()# Download a list of labels
labels_url = "https://s3.amazonaws.com/onnx-model-zoo/synset.txt"
labels_path = download_testdata(labels_url, "synset.txt", module="data")with open(labels_path, "r") as f:labels = [l.rstrip() for l in f]# Open the output and read the output tensor
scores = softmax(tvm_output)
scores = np.squeeze(scores)
ranks = np.argsort(scores)[::-1]
for rank in ranks[0:5]:print("class='%s' with probability=%f" % (labels[rank], scores[rank]))

        这里的onnx模型就是安装cpu版本时候的测试的onnx模型

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c jpeg 理论霍夫曼 DC AC表,c程序实现正向逆向转换

此4张表是理论表,不是针对某张图片的特定表。如程序不统计生成某图片的专用霍夫曼表,应该也可用理论表代用。 1.亮度DC表 左边第一列是二进制位数,就是对此位数编码 中间一列是生成比特流的位数,右边是生成的比特流。 2.色度DC…

KSP音频抓包

1. 按照网上其他教程&#xff0c;安装KSP抓音频 Biu~笔记&#xff1a;高通蓝牙ADK&#xff08;38&#xff09;-- KSP in MDE - 大大通(简体站) Biu~笔记&#xff1a;高通蓝牙ADK&#xff08;22&#xff09;--DSP音频链路监听 - 大大通(简体站) <<Biu~笔记&#xff1a;高…

《volatile使用与学习总结:2023-12-17》多层面分析学习java关键字--volatile

一、简介 volatile是java中提供的一种轻量级的同步机制&#xff0c;相比于synchronized更加轻量&#xff0c;因为volatile避免了线程频繁的上下文切换和调度&#xff0c;但是也有缺点&#xff0c;同步性差并且使用起来易出错。 二、并发编程的三个概念 原子性 原子性即一个操…

抖店不出单,看看是不是这几个方面出了问题?

我是电商珠珠 很多人在开了抖店之后&#xff0c;原本预想的销量跟实际的有很大差别&#xff0c;以为每天可以出上百单甚至上千单&#xff0c;实际上一周还出不了五十单。 有人就会疑惑说我明明都按照网上的说法做了&#xff0c;怎么结果还是这样&#xff1f;我做店已经有三年…

直播预约丨《实时湖仓实践五讲》第五讲:实时湖仓领域的最佳实践解析

如今&#xff0c;大规模、高时效、智能化数据处理已是“刚需”&#xff0c;企业需要更强大的数据平台&#xff0c;来应对数据查询、数据处理、数据挖掘、数据展示以及多种计算模型并行的挑战&#xff0c;湖仓一体方案应运而生。 《实时湖仓实践五讲》是袋鼠云打造的系列直播活…

域架构下的功能安全思考

来源&#xff1a;联合电子 随着整车电子电气架构的发展&#xff0c;功能域控架构向整车集中式区域控制演进。新的区域控制架构下&#xff0c;车身控制模块(BCM)&#xff0c;整车控制单元&#xff08;VCU&#xff09;&#xff0c;热管理系统&#xff08;TMS&#xff09;和动力底…

docker 限制ip访问端口

需求限制外网访问 docker的某个服务 经过查找 发现 ubuntu的 ufw 防火墙是无效的 技术交流http://idea.coderyj.com/ 1.查看docker的 路由 iptables --line -nvL DOCKER-USER默认是允许所有的访问不限制 2.添加限制规则 iptables 是从上往下匹配的所以我们限制规则要在第一条 …

手机备忘录怎么备份 手机备忘录备份方法

作为现代人&#xff0c;手机几乎成了我们生活中不可或缺的一部分。而备忘录&#xff0c;更是手机中承载着我们重要信息和日常琐事的小助手。想象一下&#xff0c;你在超市购物时&#xff0c;依靠备忘录记下所需物品&#xff1b;或者在工作会议中&#xff0c;用备忘录快速记录关…

2-以太坊虚拟机

以太坊虚拟机&#xff0c;简称EVM&#xff0c;是用来执行以太坊上的交易的。业务流程如下图&#xff1a; 输入一笔交易&#xff0c;内部会转换成一个Message对象&#xff0c;传入EVM执行。 如果是一笔普通转账交易&#xff0c;那么直接修改StateDB中对应的账户余额即可。如果…

智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社会群体算法4.实验参数设定5.算法结果6.…

【git学习笔记 01】打标签学习

文章目录 一、声明二、对标签的基本认知什么是标签&#xff1f;为什么要打标签&#xff1f;如何生成类似github中readme的图标 三、标签相关命令四、示例操作 一、声明 本帖持续更新中如有纰漏&#xff0c;望批评指正&#xff01;参考视频链接&#xff0c;非常感谢原作者&…

芯片高科技制造业如何实现高效且安全的文件数据传输

随着工业4.0的快速发展&#xff0c;制造行业作为一个长产业链且高度集中复杂的领域&#xff0c;数据与信息传输管理变得尤为重要&#xff0c;成为提高生产效率的关键因素。从研发、设计、采购、生产、库存、销售到售后等各个环节&#xff0c;整个业务流程都需要高效传递信息&am…