文章目录
  • 一、引言
  • ⭐1.1下载镜像烧系统
  • ⭐1.2开发板初始化系统配置远程登陆
  • 💖 远程ssh
  • 💖查看ubuntu桌面
  • 💖 远程向日葵
  • 二、部署LLMS大模型&yolov5物体检测
  • ⭐2.1 快速启动LLMS大模型
  • 💖拉取代码
  • 💖下载mode数据
  • 💖启动模型对话
  • ⭐2.2yolov5图片物体检测
  • 三、体验 内置AI 应用样例
  • ⭐3.1运行 jupyterLab
  • 💖进入sample 启动jupyterLab
  • ⭐3.2打开Jupyter Lab页面
  • 💖界面操作
  • ⭐3.3 释放内存
  • 💖 关闭样例
  • ⭐3.4运行目标检测样例
  • ⭐3.5运行图像曝光增强样例
  • 四、总结


一、引言

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter

大家好,我是yma16,在收到香橙派 AIpro 开发版之后开始动手实操,本期分享 【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)

香橙派 AIpro

Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其搭载了昇腾 AI 处理器,可提供 8TOPS INT8 的计算能力,内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算,可广泛用于教育、机器人、无人机等场景。

开发版图解

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_初始化_02


前期的准备工作如下

⭐1.1下载镜像烧系统

官方下载镜像:

 http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html 下载unbuntu系统

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_03

官方的下载烧录镜像软件
 https://etcher.balena.io/#download-etcher 下载昇腾开发一键制卡工具
 点击下载

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter_04


选择镜像、选择挂载的内存卡,等待约10分钟(3.0接口)

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter_05

⭐1.2开发板初始化系统配置远程登陆

将烧好的unbuntu卡放入sd card槽

正面

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter_06

反面

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_开发板_07


输入密码 (操作手册有密码:Mind@123)

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_08


远程ssh配置

sudo vi /etc/ssh/sshd_config
#增加以下配置允许通过ssh登录

#PermitRootLogin prohibit-password
PermitRootLogin yes

#修改完成后需要重启ssh服务命令如下
sudo service ssh restart
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

修改root密码

sudo passwd root
  • 1.

验证看root密码

💖 远程ssh

通过热点查看连接设备名称是 orangepi ai的ip

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_09

输入指令 查看ip地址

ip addr
  • 1.

切换网络会更改ip

ssh 用户名@ip

输入密码

连接 香橙派 AIpro,连接成功!

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_10

💖查看ubuntu桌面

安装的是ubuntu桌面的系统,进入ubuntu 桌面

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter_11

查看磁盘

df -h
  • 1.

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_初始化_12

目录

空间

dev/root

29G

tempfs

3.7G+1.5G

💖 远程向日葵

下载umo的版本即可

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_13

二、部署LLMS大模型&yolov5物体检测

使用开源项目ChatGLM3 ManualReset
在gitee查找32G以内的开源大模型
项目地址: https://gitee.com/wan-zutao/chatglm3-manual-reset

可以gitee搜索,找到ChatGLM3 ManualReset该项目,基于香橙派AIpro部署ChatGLM3-6B大语言模型

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_人工智能_14

⭐2.1 快速启动LLMS大模型
💖拉取代码

创建chatglm/inference目录拉取该仓库的所有代码

cd /
mkdir -p  /chatglm/inference
git clone https://gitee.com/wan-zutao/chatglm3-manual-reset.git chatglm
cd chatglm/inference
  • 1.
  • 2.
  • 3.
  • 4.
💖下载mode数据

运行 脚本下载model数据,中途网络中断可以删除 mode 和 token 目录 重新下载

bash download.sh
  • 1.

拉取仓库过程运行的过程,下载内容超过6G数据量,过程比较慢长

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_初始化_15


【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_初始化_16

💖启动模型对话

python 运行main脚本启动
main脚本调用chatglm.om(6.3G),响应有点慢

python3 main.py
  • 1.

打印出项目的可以访问地址

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_17


访问即可和大模型对话

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_开发板_18


【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_人工智能_19

⭐2.2yolov5图片物体检测

YOLOv5是一种高效的目标检测算法,具有快速、准确、轻量级的特点。

yolov5项目地址: https://github.com/ultralytics/yolov5 拉取开源项目并安装依赖

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_人工智能_20


脚本运行的数据:(运行大约4.7ms,两张图片)

Fusing layers…

YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs

image 1/2 /root/yolov5_demo/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, 657.6ms

image 2/2 /root/yolov5_demo/yolov5/data/images/zidane.jpg: 384x640 2 persons, 2 ties, 511.0ms

Speed: 4.7ms pre-process, 584.3ms inference, 14.8ms NMS per image at shape (1, 3, 640, 640)

Results saved to runs/detect/exp

运行截图:

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_人工智能_21

识别图片结果,生成目录位置为 runs/detect/exp

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter_22

三、体验 内置AI 应用样例

香橙派 AIpro中预装了 Jupyter Lab 软件。Jupyter Lab 软件是一个基于 web
的交互式开发环境,集成了代码编辑器、终端、文件管理器等功能,使得开发者可以在一个界面中完成各种任务。并且我们在镜像中也预置了一些可以在Jupyter Lab 软件中运行的 AI 应用样例。这些样例都是使用 Python 编写的,并调用了 Python 版本的AscendCL 编程接口

⭐3.1运行 jupyterLab
💖进入sample 启动jupyterLab

进入目录运行sh

cd ~
cd samples
./start_nontebook.sh
  • 1.
  • 2.
  • 3.

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_开发板_23

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_开发板_24

⭐3.2打开Jupyter Lab页面
💖界面操作

左侧是ai体验的实例,点击进入目录下的ipynb后缀文件会执行python实例,markdown是可执行的,酷

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_开发板_25

⭐3.3 释放内存
💖 关闭样例

选择kernel下的shut down allkernets,即可关闭所有运行的样例,避免空间不足

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_26

⭐3.4运行目标检测样例

运动目标检测样例

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_27


样例代码

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
# 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.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.

运行时间8ms左右:输出parking文字和图片内容一致,符合预期

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter_28

⭐3.5运行图像曝光增强样例

选择04-HDR 的demo样例

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_人工智能_29

定义资源管理类

import sys
import cv2
import numpy as np
import os
import time
import matplotlib.pyplot as plt
import acl

import acllite_utils as utils
import constants as constants
from acllite_model import AclLiteModel
from acllite_resource import resource_list
class AclLiteResource:
    """
    AclLiteResource类
    """
    def __init__(self, device_id=0):
        self.device_id = device_id
        self.context = None
        self.stream = None
        self.run_mode = None
        
    def init(self):
        """
        初始化资源
        """
        print("init resource stage:")
        ret = acl.init() # acl初始化

        ret = acl.rt.set_device(self.device_id) # 指定运算的device
        utils.check_ret("acl.rt.set_device", ret)

        self.context, ret = acl.rt.create_context(self.device_id) # 创建context
        utils.check_ret("acl.rt.create_context", ret)

        self.stream, ret = acl.rt.create_stream() # 创建stream
        utils.check_ret("acl.rt.create_stream", ret)

        self.run_mode, ret = acl.rt.get_run_mode() # 获取运行模式
        utils.check_ret("acl.rt.get_run_mode", ret)

        print("Init resource success")

    def __del__(self):
        print("acl resource release all resource")
        resource_list.destroy()
        if self.stream:
            print("acl resource release stream")
            acl.rt.destroy_stream(self.stream) # 销毁stream

        if self.context:
            print("acl resource release context")
            acl.rt.destroy_context(self.context) # 释放context

        print("Reset acl device ", self.device_id)
        acl.rt.reset_device(self.device_id) # 释放device
        
        print("Release acl resource success")
  • 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.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.

推理功能

path = os.getcwd()
input_w = 512   # 推理输入width
input_h = 512   # 推理输入height
INPUT_DIR = os.path.join(path, 'data/') # 输入路径
OUTPUT_DIR = os.path.join(path, 'out/') # 输出路径

def pre_process(dir_name, input_h, input_w):
    """
    预处理
    """
    BGR = cv2.imread(dir_name).astype(np.float32)
    h = BGR.shape[0]
    w = BGR.shape[1]
    # 进行归一化、缩放、颜色转换
    BGR = BGR / 255.0
    BGR = cv2.resize(BGR, (input_h, input_w))
    RGB = cv2.cvtColor(BGR, cv2.COLOR_BGR2RGB)
    return RGB, h, w

def post_process(input_img, result_list, pic, input_h, input_w):
    """
    后处理
    """
    o_w, o_h = input_img.shape[:2]
    # 获取推理结果,进行形状变换
    data = result_list[0].reshape(input_h, input_w, 3)
    # 进行缩放、颜色转换
    output = (cv2.resize(data, (o_w, o_h)) * 255.0).astype(np.uint8)
    output_img = cv2.cvtColor(output, cv2.COLOR_RGB2BGR)
    # 保存增强后图像
    file_name = os.path.join(OUTPUT_DIR, pic)
    cv2.imwrite(file_name, output_img)
    # 拼接输入图像和增强后图像,返回进行显示
    BGR_U8 = np.concatenate([input_img, output_img], axis=1)
    return BGR_U8

def main():
    # 创建推理结果存放路径
    if not os.path.exists(OUTPUT_DIR):
        os.mkdir(OUTPUT_DIR)
    # acl初始化
    acl_resource = AclLiteResource()
    acl_resource.init()
    # 加载模型
    model_path = os.path.join(path, "model/image_HDR_enhance.om")
    model = AclLiteModel(model_path)
    # 遍历数据集进行推理
    src_dir = os.listdir(INPUT_DIR)
    for pic in src_dir:
        if not pic.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')):
            print('it is not a picture, %s, ignore this file and continue,' % pic)
            continue
        pic_path = os.path.join(INPUT_DIR, pic)
        input_img = cv2.imread(pic_path)
        # 进行预处理
        RGB_image, o_h, o_w = pre_process(pic_path, input_h, input_w)
        # 计算推理耗时
        start_time = time.time()
        # 执行推理
        result_list = model.execute([RGB_image, ])
        end_time = time.time()
        # 打印推理的图片信息和耗时
        print('pic:{}'.format(pic))
        print('pic_size:{}x{}'.format(o_h, o_w))
        print('time:{}ms'.format(int((end_time - start_time) * 1000)))
        print('\n')
        # 进行后处理
        img_result = post_process(input_img, result_list, pic, input_h, input_w)      
        # 显示输入图像和增强后图像
        img_RGB = img_result[:, :, [2, 1, 0]] # RGB
        plt.axis('off')
        plt.xticks([])
        plt.yticks([])
        plt.imshow(img_RGB)
        plt.show()
  • 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.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.

结果

acl resource release all resource
AclLiteModel release source success
acl resource release stream
acl resource release context
Reset acl device  0
Release acl resource success
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

生成的图像增强效果如下:

消耗时间316ms,响应极快。

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_开发板_30

查看生成的out目录下的结果图片,十分清晰

cd out
  • 1.

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_jupyter_31

四、总结

香橙派 AIpro有良好的生态和入门的技术文档,网上也有相关的视频教程,对新人很友好。
http://www.orangepi.cn应用场景
香橙派 AIpro 开发板因为比较小巧轻量,内部集合Jupyter Lab 页面,非常方便,对于入门人工智能的开发者非常友好。

试用场景也不仅仅局限于本文的操作,还有以下的多个方向等:

  1. 原型开发:开发板是原型开发的理想工具。通过连接传感器、执行器和其他外设,开发人员可以快速验证和迭代他们的想法,并评估其可行性。
  2. 学习和教育:开发板可以作为学生和初学者学习编程和电子技术的工具。它们提供了一个实践的平台,让学习者通过实际操作来理解电子原理和编程概念。
  3. 项目演示:开发板可以用于演示和展示技术项目。无论是在学术会议上还是在公司内部会议上,通过展示实际的硬件和软件成果,可以增强演示和沟通的效果。
  4. 物联网应用:开发板是物联网应用开发的重要工具。它们可以用于构建和测试各种物联网设备和传感器网络。
  5. 自动化控制:开发板可以用于构建自动化控制系统。通过连接和控制传感器和执行器,可以实现各种自动化任务,如智能家居控制、工业自动化等。

香橙派 AIpro的性能体验
散热:开发板的散热性能良好,持续运行8个小时整个板子的温度都比较低。
噪音:开发板的噪音产生主要来自于风扇,开机过程中存在一点噪音,开机之后噪音就降下来了,影响不大。

负载:开发板的内存和cpu的使用情况状态处于健康状态,能够同时处理的任务或数据量。

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)_ide_32


烧录系统部署项目过程体验

香橙派AIpro是一款简化了硬件开发过程的智能开发板。它的优势在于用户无需复杂的安装步骤,只需要通过SD卡加载预配置好的镜像系统,插入设备后就能直接登录并开始使用。这种预先装好的系统大大节省了新手入门的时间,尤其是对于网络配置这类细节,不再需要手动设置。

此外,它配备了内置的Jupyter Lab环境,这使得开发者可以直接在界面上编写、运行和测试人工智能应用程序,极大地提高了开发效率。由于其设计简洁易用,即使是不熟悉底层操作的开发者也能快速上手,无论是调试还是比较数据集结果都变得更加直观和高效。

相比传统的开发板,香橙派AIpro凭借其智能化的特点,为开发者提供了一站式解决方案,不仅减少了繁琐的工作环节,而且在性能稳定性以及交互体验上都有着显著提升。这对于那些寻求快速原型制作和便捷开发环境的工程师来说,无疑是一个理想的选择。