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

文章目录

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

一、引言

在这里插入图片描述

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

香橙派 AIpro

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

开发版图解

前期的准备工作如下

⭐1.1下载镜像烧系统

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

官方的下载烧录镜像软件
https://etcher.balena.io/#download-etcher
下载昇腾开发一键制卡工具
点击下载
官方的sd卡配置文件可以提前查看内容

################################################################################
# 特别注意!!!
# 该文件用于设置开发板ip,请勿编辑任何无关内容,否则可能导致开发板无法启动
# 建议在两个网口均能直连时再根据需要将一个网口设置为"自动获得ip地址"
#   此时,一个网口连接路由,由路由分配ip,另一个网口直连电脑,用以调试

# 生效标志位:设置为true,则该配置文件生效一次后会自动改成false
# 若修改该文件并希望下次开机重新配置ip,将标志位改成true
setting_flag=true

################################################################################
# 网口0-由路由器分配ip地址(若设置为yes,则该网口的路由和ip不会生效)
eth0_dhcp4=yes

# 网口0-ip地址
eth0_address=192.168.1.100

# 网口0-掩码位数
eth0_mask=24

# 网口0-路由(多个ip配置路由,仅有首个会生效)
eth0_route=

# 网口0-域名地址-首选域名
eth0_dns_pre=8.8.8.8

# 网口0-域名地址-备选域名
eth0_dns_alter=114.114.114.114

################################################################################
# 网口0-由路由器分配ip地址(若设置为yes,则该网口的路由和ip不会生效)
eth1_dhcp4=no

# 网口1-ip地址
eth1_address=192.168.137.100

# 网口1-掩码位数
eth1_mask=24

# 网口1-路由(多个ip配置路由,仅有首个会生效)
eth1_route=192.168.137.1

# 网口1-域名地址-首选域名
eth1_dns_pre=8.8.8.8

# 网口1-域名地址-备选域名
eth1_dns_alter=114.114.114.114

################################################################################
# 网口0-由路由器分配ip地址(若设置为yes,则该网口的路由和ip不会生效)
usb0_dhcp4=no

# typeC-ip地址
usb0_address=192.168.0.2

# typeC-掩码位数
usb0_mask=24

# typeC-路由(多个ip配置路由,仅有首个会生效)
usb0_route=

# typeC-域名地址-首选域名
usb0_dns_pre=

# typeC-域名地址-备选域名
usb0_dns_alter=

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

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

将烧好的unbuntu卡放入sd card槽
正面
在这里插入图片描述

反面
在这里插入图片描述
输入密码 (操作手册有密码:Mind@123)
open
远程ssh配置

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

#PermitRootLogin prohibit-password
PermitRootLogin yes

#修改完成后需要重启ssh服务命令如下
sudo service ssh restart

修改root密码

sudo passwd root

验证看root密码

💖 远程ssh

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

输入指令 查看ip地址

ip addr

切换网络会更改ip
ssh 用户名@ip
输入密码
连接 香橙派 AIpro,连接成功!
ssh

💖查看ubuntu桌面

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

查看磁盘

df -h

df-h

目录空间
dev/root29G
tempfs3.7G+1.5G
💖 远程向日葵

下载umo的版本即可

SUN-remote

二、部署LLMS大模型

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

可以gitee搜索,找到ChatGLM3 ManualReset该项目,基于香橙派AIpro部署ChatGLM3-6B大语言模型
在这里插入图片描述

2.1 快速启动
💖拉取代码

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

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

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

bash download.sh

拉取仓库过程运行的过程,下载内容超过6G数据量,过程比较慢长
run
在这里插入图片描述

💖启动模型对话

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

python3 main.py

打印出项目的可以访问地址
在这里插入图片描述
访问即可和大模型对话
在这里插入图片描述
在这里插入图片描述

三、体验 内置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

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

3.3 释放内存
💖 关闭样例

选择kernel下的shut down allkernets,即可关闭所有运行的样例,避免空间不足
在这里插入图片描述

3.4运行目标检测样例

运动目标检测样例
park-demo
样例代码

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

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

3.5运行图像曝光增强样例

选择04-HDR 的demo样例
run-img定义资源管理类

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")

推理功能

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()

结果

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

生成的图像增强效果如下:
消耗时间316ms,响应极快
在这里插入图片描述

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

cd out

res-hdr

四、总结

应用场景
香橙派 AIpro 开发板因为比较小巧轻量,内部集合Jupyter Lab 页面,非常方便,对于入门人工智能的开发者非常友好。

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

  1. 原型开发:开发板是原型开发的理想工具。通过连接传感器、执行器和其他外设,开发人员可以快速验证和迭代他们的想法,并评估其可行性。

  2. 学习和教育:开发板可以作为学生和初学者学习编程和电子技术的工具。它们提供了一个实践的平台,让学习者通过实际操作来理解电子原理和编程概念。

  3. 项目演示:开发板可以用于演示和展示技术项目。无论是在学术会议上还是在公司内部会议上,通过展示实际的硬件和软件成果,可以增强演示和沟通的效果。

  4. 物联网应用:开发板是物联网应用开发的重要工具。它们可以用于构建和测试各种物联网设备和传感器网络。

  5. 自动化控制:开发板可以用于构建自动化控制系统。通过连接和控制传感器和执行器,可以实现各种自动化任务,如智能家居控制、工业自动化等。
    香橙派 AIpro的性能体验
    散热:开发板的散热性能良好,持续运行8个小时整个板子的温度都比较低。
    噪音:开发板的噪音产生主要来自于风扇,开机过程中存在一点噪音,开机之后噪音就降下来了,影响不大。

负载:开发板的内存和cpu的使用情况状态处于健康状态,能够同时处理的任务或数据量。
在这里插入图片描述
烧录系统部署项目过程体验
从拿到板子,然后通过sd卡烧镜像系统,再把sd卡放入香橙派 AIpro,开机之后系统已经安装好了,直接输入密码就可以进入。比以往的安装系统方便快捷不少,不需要一步一步去配置网卡和dns用户名等。
进入开发板有内置的Jupyter Lab 可以在界面上运行ai应用实例,更方便调试运行和对比数据集的结果,相比于传统开发板 香橙派 AIpro更加简单和智能化。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud02_consul概述、功能及下载、服务注册与发现、配置与刷新

文章目录 ①. Euraka为什么被废弃②. consul简介、如何下载③. consul功能及下载④. 服务注册与发现 - 8001改造⑤. 服务注册与发现 - 80改造⑥. 服务配置与刷新Refresh ①. Euraka为什么被废弃 ①. Eureka停更进维 ②. Eureka对初学者不友好,下图为自我保护机制 ③. 阿里巴巴…

多个版本JAVA切换(学习笔记)

多个版本JAVA切换 很多时候,我们电脑上会安装多个版本的java版本,java8,java11,java17等等,这时候如果想要切换java的版本,可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…

Kafka基础入门-代码实操

Kafka是基于发布/订阅模式的消息队列,消息的生产和消费都需要指定主题,因此,我们想要实现消息的传递,第一步必选是创建一个主题(Topic)。下面我们看下在命令行和代码中都是如何创建主题和实现消息的传递的。…

MySql性能调优04-[MySql事务与锁机制原理]

MySql事务与锁机制原理 从undo与redo日志,理解事务底层ACID底层原理事务四大隔离级别事务底层锁机制和MVCC并发优化机制串行化底层实现机制读已提交和可重复读底层实现MVCC机制详解脏写问题(重要)读已提交?实现机制 BufferPool缓存与redo日志是如何提升事…

【AI大模型】李彦宏从“卷模型”到“卷应用”的深度解析:卷用户场景卷能给用户解决什么问题

文章目录 一、理解李彦宏的发言1.1 李彦宏的核心观点1.2 背景分析 二、技术发展:从辨别式到生成式2.1 辨别式AI技术2.2 生成式AI技术2.3 技术发展的挑战 三、“卷应用”:聚焦实际应用与价值3.1 应用为王3.2 技术落地的关键 四、“卷场景”:多…

007-端口隔离

端口隔离配置 端口隔离简介 为了实现报文之间的二层隔离,可以将不同的端口加入不同的VLAN,但会浪费有限的VLAN资源。采用端口隔离特性,可以实现同一VLAN内端口之间的隔离。 设备支持以下方式进行端口隔离: 基于隔离组的端口隔…

idea中打开静态网页端口是63342而不是8080

问题: 安装了tomcat 并且也配置了环境,但是在tomcat下运行,总是在63342下面显示。这也就意味着,并没有运行到tomcat环境下。 找了好几个教程(中间还去学习了maven,因为跟的教程里面,没有maven,但…

LabVIEW心电信号自动测试系统

开发了一种基于LabVIEW的心电信号自动测试系统,通过LabVIEW开发的上位机软件,实现对心电信号的实时采集、分析和自动化测试。系统包括心电信号采集模块、信号处理模块和自动化测试模块,能够高效、准确地完成心电信号的测量与分析。 硬件系统…

EmlogPro资源博客主题assets源码_仿ripro日主题

EmlogPro资源博客主题assets源码,有点像ripro日主题,做资源网非常合适,首页支持幻灯片,分类展示,本月热门资源。 源码下载:assets.zip 需要按照安装说明使用! 我看了一下很多地方还有点问题&…

Open3d入门 一文读懂三维点云

三维点云技术的发展始于20世纪60年代,随着激光雷达和三维扫描技术的进步,在建筑、考古、地理信息系统和制造等领域得到了广泛应用。20世纪90年代,随着计算机处理能力的提升,点云数据的采集和处理变得更加高效,推动了自…

[数仓]十二、离线数仓(Atlas元数据管理)

第1章 Atlas入门 1.1 Atlas概述 Apache Atlas为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能。 Atlas的具体功能如下: 元数据分类 支持对元数据进行分类管理,例…

深入探讨:CPU问题的深度分析与调优

引言 你是否曾经遇到过这样的情况:系统运行突然变慢,用户抱怨不断,检查后发现CPU使用率居高不下?这时候,你会如何解决?本文将详细解析CPU问题的分析与调优方法,帮助你在面对类似问题时游刃有余。 案例分析:一次CPU性能瓶颈的解决过程 某知名互联网公司在一次促销活动…

Jenkins中Node节点与构建任务

目录 节点在 Jenkins 中的主要作用 1. 分布式构建 分布式处理 负载均衡 2. 提供不同的运行环境 多平台支持 特殊环境需求 3. 提高资源利用率 动态资源管理 云端集成 4. 提供隔离和安全性 任务隔离 权限控制 5. 提高可扩展性 横向扩展 高可用性 Jenkins 主服务…

<数据集>绝缘子缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2139张 标注数量(xml文件个数):2139 标注数量(txt文件个数):2139 标注类别数:8 标注类别名称:[insulator, broken disc, pollution-flashover, Two glass, Glassdirt…

Flexcel学习笔记

1.引用的单元 FlexCel.Core 始终需要使用的一个单元。 多系统运行时。{$IFDEF LINUX}SKIA.FlexCel.Core{$ELSE}{$IFDEF FIREMONKEY}FMX.FlexCel.Core{ $ELSE}VCL.FlexCel.Core{$ENDIF}{$ENDIF} FlexCel.XlsAdapter这是FlexCel的xls/x引擎。如果您正在处理xls或xlsx文件&#x…

软件模块的初始化

什么是初始化? 软件的初始化(Initialization)是指软件启动或重新配置时执行的一系列步骤和过程,旨在准备软件运行环境、加载必要的配置信息、检查系统依赖项、分配资源(如内存、文件句柄等),以及…

小白学python(第七天)

哈哈,这个系列的文章也有一段时间没更新,主要是最近在忙c嘎嘎,不过没事接下来会优先更python啦,那么我们先进入正题吧 函数的定义及调用 函数定义 格式:def 函数名(形参列表): 语…

ctfshow-web入门-php特性(web100-web103)is_numeric 函数绕过

目录 1、web100 2、web101 3、web102 4、web103 1、web100 提示:flag in class ctfshow,我们只需要构造输出 ctfshow 这个类即可。 代码分析: $v0is_numeric($v1) and is_numeric($v2) and is_numeric($v3); if($v0){ 虽然逻辑运算符的…

Web浏览器485通讯读取RFID卡号js JavaScript

本示例使用设备&#xff1a;485通讯液显带键盘RFID打菲计件读卡器工位机串口可二次开发编程-淘宝网 (taobao.com) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> …

C++知识点:C和C++(自用)

C和C 1.类和结构体的关系&#xff1a;2.面向对象和面向过程3.头文件和标准命名空间4.cin和cout5. const在C中和C中的区别6.const全局作用域7 new和delete8 内联函数9 函数重载10. 函数重载的匹配 引用&#xff1a; [1]C语言中文网 1.类和结构体的关系&#xff1a; 类是结构体的…