以前就是用华为云的昇腾卡训练模型,今天看到香橙派推出一款 Orange Ai Pro 的板子,他们的口号是:为AI而生,采用昇腾AI技术路线,8T算力,迫不及待的下单入手体验一把,中国芯的家族又迎来了一位重量级嘉宾。点赞!点赞!点赞!
硬件配置参考图给的超级详细,拨码开关这种小细节,都给出了,对新手小白极其友好
我选择tf卡启动,所以将拨码开关滑动到右边
可以到官网
(orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html)直接下载对应的固件
最常规的烧录方式,tf卡插入读卡器,用balenaEtcher工具烧录,等待Success即可
我是通过Micro USB串口调试口登陆的,启动过程需要等待一段时间
用户名: HwHiAiUser,密码:Mind@123,后面需要超级用户时候,也可以root登陆,密码依然是:Mind@123,或者用sudo也可以
可以看到存储容量32G,内存8G,aarch64架构
可以直接把wan口接到路由器,会自动给eth0分配IP,网络环境准备OK
昇思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()"
看到如下输出,[Ascend] successfully!,则说明能正常使用
进入samples目录
cd samples
启动对应服务,192.168.123.119这个IP是我的香橙派AIpro获取的IP地址
./start_notebook.sh 192.168.123.119
这个时候,保证我的电脑和香橙派AIpro在同一个局域网内,则输入对应的ip:192.168.123.119:8888,带上对应token,则可网页访问
现在已经进入Jupyter Lab的环境了,熟悉Jupyter Lab根本不会察觉到现在是在香橙派AIpro还是云端,接下来就是鼠标点点点,愉快的体验MindSpore的强大了
还是蛮快的,7ms就完成了,在香橙派AIpro实现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
模型导入和处理,定义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
这里就是包含了图像预处理、模型推理、以及结果解码的部分
# 导入和处理目标图片
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)
在分辨率为512 * 512 的情况下,266ms完成,效果很明显,图片效果好了很多
npu实时信息
除了昇腾芯片,本身香橙派AIpro也足够强,成功把Qwen0.5B的gguf格式文件的大模型部署
执行命令
git clone https://github.com/ggerganov/llama.cpp.git
进入llama.cpp,执行命令,需要等待一段时间,执行命令的时间比较长
make
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen2-0.5B-Instruct-GGUF')
用 llama-server 工具启动对应的服务 调用对应的服务,在0.5B大模型的情况下,Qwen模型还是可以通过深圳关联到大梅沙、莲花山,效果还是值得认可的
1、第一次在香橙派AIpro使用Jupyter Lab,这种集成环境确实让我惊艳到了,以前都是阿里云PAI上使用,但是这次在香橙派AIpro使用,没有感到区别,这种集成环境的搭建,必须给香橙派AIpro点赞;
2、Micro USB 接口的调试串口,非常利于调试,以前那种杜邦线收发地三个口,不仅容易掉,而且容易插错,这种调试接口,不仅常见,而且易于使用
3、里面提供的基于MindSpore的例子,很容易上手,代码结构也很清晰;
4、感觉美中不足的,虽然8+32已经很大了,但是想要体验一些大模型,还是不够,需要使用swap;
Orange Pi论坛(http://forum.orangepi.cn/)、昇腾社区(hiascend.com)上面也有很多好玩的模型,后面会继续尝试把模型部署到香橙派上,再与大家分享,也希望大家多多给一些建议。