当前位置:   article > 正文

香橙派AIpro开发板评测:香橙派AIpro也能MindSpore+Jupyter Notebook开发呀和Qwen2-0.5B-Instruct-GGUF部署_mindspore在orangepi 安装

mindspore在orangepi 安装

香橙派AIpro开发板评测:香橙派AIpro也能MindSpore+Jupyter Notebook开发呀和Qwen2-0.5B-Instruct-GGUF部署

前言

以前就是用华为云的昇腾卡训练模型,今天看到香橙派推出一款 Orange Ai Pro 的板子,他们的口号是:为AI而生,采用昇腾AI技术路线,8T算力,迫不及待的下单入手体验一把,中国芯的家族又迎来了一位重量级嘉宾。点赞!点赞!点赞!

硬件介绍

硬件配置参考图

硬件配置参考图给的超级详细,拨码开关这种小细节,都给出了,对新手小白极其友好

请添加图片描述
在这里插入图片描述

硬件实物图

我选择tf卡启动,所以将拨码开关滑动到右边

3.png

固件烧录

固件下载

可以到官网

(orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html)直接下载对应的固件

4.png

烧录固件

最常规的烧录方式,tf卡插入读卡器,用balenaEtcher工具烧录,等待Success即可

5.png

初步体验

登陆

我是通过Micro USB串口调试口登陆的,启动过程需要等待一段时间

6.png

用户名: HwHiAiUser,密码:Mind@123,后面需要超级用户时候,也可以root登陆,密码依然是:Mind@123,或者用sudo也可以

7.png

基本信息

可以看到存储容量32G,内存8G,aarch64架构

8.png

网络信息

可以直接把wan口接到路由器,会自动给eth0分配IP,网络环境准备OK

9.png

MindSpore测试

昇思MindSpore是由华为于2019年8月推出的新一代全场景AI框架,2020年3月28日,华为宣布昇思MindSpore正式开源。昇思MindSpore是一个全场景AI框架,旨在实现易开发、高效执行、全场景统一部署三大目标。

MindSpore是和PyTorch、TensorFlow同等地位的深度学习框架,同时相比后2者,MindSpore的出发点就是旨在支持从边缘设备到云端的全场景部署,这点对我们嵌入式端更友好。

而且香橙派AIpro采用昇腾技术路线,在底层就支持了CANN框架,和NVIDIA的CUDA框架是同等地位。CANN(Compute Architecture for Neural Networks)是华为为昇腾(Ascend)系列AI处理器设计的全栈AI软硬件协同计算框架,它提供了对昇腾AI处理器的底层访问,CANN 中的算子库(Operator Library)提供了大量预优化的AI算子,可以加速模型的训练和推理过程。

因为深度学习涉及到的模型参数少则千万,多则数以亿计,如果在底层算子方面没有工业级别的优化,会非常浪费内存、计算资源

这也是香橙派AIpro的精华所在,华为MindSpore可以直接部署在上面

执行下面代码,导入Mindspore环境

python -c \
"import mindspore;mindspore.set_context(device_target='Ascend');mindspore.run_check()"
  • 1
  • 2

看到如下输出,[Ascend] successfully!,则说明能正常使用

10.png

启动 Jupyter Lab

进入samples目录

cd samples
  • 1

启动对应服务,192.168.123.119这个IP是我的香橙派AIpro获取的IP地址

 ./start_notebook.sh 192.168.123.119
  • 1

11.png

网页访问

这个时候,保证我的电脑和香橙派AIpro在同一个局域网内,则输入对应的ip:192.168.123.119:8888,带上对应token,则可网页访问

12.png

体验OCR

现在已经进入Jupyter Lab的环境了,熟悉Jupyter Lab根本不会察觉到现在是在香橙派AIpro还是云端,接下来就是鼠标点点点,愉快的体验MindSpore的强大了

13.png

还是蛮快的,7ms就完成了,在香橙派AIpro实现ocr不仅仅能避免因为网络延时影响,而且对用户的隐私更有保障,一些私有的数据不必上云

14.png

OCR代码分析

导入一些基础的库,重点是最后2行,是用于加载和运行在Ascend芯片上部署的机器学习模型,
管理Ascend芯片上的资源,如内存分配、设备初始化等

import os
import time
import argparse
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
from acllite_model import AclLiteModel as Model
from acllite_resource import AclLiteResource as AclResource
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

模型导入和处理,定义CTCLabelConverter类,用于文本和数据编码,这个类使用了CTC(Connectionist Temporal Classification)损失函数的特性

# om模型和图片的位置
MODEL_PATH = './cnnctc.om'
IMAGE_PATH = './predict.png'
# 初始化acl资源
acl_resource = AclResource()
acl_resource.init()
#导入本地om模型
print('load model....')
model = Model(MODEL_PATH)
print('load model finished....')
# 文本与数据编码
class CTCLabelConverter():
    def __init__(self, character):
        dict_character = list(character)
        self.dict = {}
        for i, char in enumerate(dict_character):
            self.dict[char] = i + 1
        self.character = ['[blank]'] + dict_character
        self.dict['[blank]'] = 0
    #将文本转换为数字编码
    def encode(self, text):
        length = [len(s) for s in text]
        text = ''.join(text)
        text = [self.dict[char] for char in text]
        return np.array(text), np.array(length)
    # 将数字编码转换为文本
    def decode(self, text_index, length):
        texts = []
        index = 0
        for l in length:
            t = text_index[index:index + l]
            char_list = []
            for i in range(l):
                if t[i] != self.dict['[blank]'] and (
                        not (i > 0 and t[i - 1] == t[i])):
                    char_list.append(self.character[t[i]])
            text = ''.join(char_list)
            texts.append(text)
            index += l
        return texts
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

这里就是包含了图像预处理、模型推理、以及结果解码的部分

# 导入和处理目标图片
img_PIL = Image.open(IMAGE_PATH).convert('RGB')
img = img_PIL.resize((100, 32), resample=3)
img = np.array(img, dtype=np.float32)
img = np.expand_dims(img, axis=0)
img = np.transpose(img, [0, 3, 1, 2])
# 定义推理的时间
start = time.time()
model_predict = model.execute([img])[0]
end = time.time()
print(f'infer use time:{(end-start)*1000}ms')
# 初始化文本编码函数
character = '0123456789abcdefghijklmnopqrstuvwxyz'
converter = CTCLabelConverter(character)
# 推理过程
preds_size = np.array([model_predict.shape[1]])
preds_index = np.argmax(model_predict, 2)
preds_index = np.reshape(preds_index, [-1])
preds_str = converter.decode(preds_index, preds_size)
print('Predict: ', preds_str)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

体验曝光增强

在分辨率为512 * 512 的情况下,266ms完成,效果很明显,图片效果好了很多

15.png

npu实时信息

16.png

Qwen-GGUF部署

除了昇腾芯片,本身香橙派AIpro也足够强,成功把Qwen0.5B的gguf格式文件的大模型部署

下载llama.cpp

执行命令

git clone https://github.com/ggerganov/llama.cpp.git
  • 1

17.png

进入llama.cpp,执行命令,需要等待一段时间,执行命令的时间比较长

make
  • 1

下载大模型

from modelscope import snapshot_download 
model_dir = snapshot_download('qwen/Qwen2-0.5B-Instruct-GGUF')
  • 1
  • 2

18.png

用 llama-server 工具启动对应的服务
调用对应的服务,在0.5B大模型的情况下,Qwen模型还是可以通过深圳关联到大梅沙、莲花山,效果还是值得认可的

19.png

使用总结

1、第一次在香橙派AIpro使用Jupyter Lab,这种集成环境确实让我惊艳到了,以前都是阿里云PAI上使用,但是这次在香橙派AIpro使用,没有感到区别,这种集成环境的搭建,必须给香橙派AIpro点赞;

2、Micro USB 接口的调试串口,非常利于调试,以前那种杜邦线收发地三个口,不仅容易掉,而且容易插错,这种调试接口,不仅常见,而且易于使用

3、里面提供的基于MindSpore的例子,很容易上手,代码结构也很清晰;

4、感觉美中不足的,虽然8+32已经很大了,但是想要体验一些大模型,还是不够,需要使用swap;

Orange Pi论坛(http://forum.orangepi.cn/)、昇腾社区(hiascend.com)上面也有很多好玩的模型,后面会继续尝试把模型部署到香橙派上,再与大家分享,也希望大家多多给一些建议。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号