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模型

相关推荐
春末的南方城市29 分钟前
FLUX的ID保持项目也来了! 字节开源PuLID-FLUX-v0.9.0,开启一致性风格写真新纪元!
人工智能·计算机视觉·stable diffusion·aigc·图像生成
jndingxin1 小时前
OpenCV视频I/O(14)创建和写入视频文件的类:VideoWriter介绍
人工智能·opencv·音视频
_.Switch1 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一个闪现必杀技1 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
小鹿( ﹡ˆoˆ﹡ )1 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
卷心菜小温2 小时前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
陈苏同学2 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
唐家小妹2 小时前
介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
python·pyqt
羊小猪~~3 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm