【 香橙派 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 osimport time
import argparseimport matplotlib.pyplot as plt
from PIL import Image
import numpy as npfrom 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 + 1self.character = ['[blank]'] + dict_characterself.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 = 0for 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 += lreturn 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 aclimport 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_idself.context = Noneself.stream = Noneself.run_mode = Nonedef init(self):"""初始化资源"""print("init resource stage:")ret = acl.init() # acl初始化ret = acl.rt.set_device(self.device_id) # 指定运算的deviceutils.check_ret("acl.rt.set_device", ret)self.context, ret = acl.rt.create_context(self.device_id) # 创建contextutils.check_ret("acl.rt.create_context", ret)self.stream, ret = acl.rt.create_stream() # 创建streamutils.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) # 销毁streamif self.context:print("acl resource release context")acl.rt.destroy_context(self.context) # 释放contextprint("Reset acl device ", self.device_id)acl.rt.reset_device(self.device_id) # 释放deviceprint("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.0BGR = cv2.resize(BGR, (input_h, input_w))RGB = cv2.cvtColor(BGR, cv2.COLOR_BGR2RGB)return RGB, h, wdef 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_U8def 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)continuepic_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]] # RGBplt.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更加简单和智能化。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法笔记自学】第 10 章 提高篇(4)——图算法专题

10.1图的定义和相关术语 #include <cstdio>const int MAXN 100; int degree[MAXN] {0};int main() {int n, m, u, v;scanf("%d%d", &n, &m);for (int j 0; j < m; j) {scanf("%d%d", &u, &v);degree[u];degree[v];}for (int i…

自学鸿蒙HarmonyOS的ArkTS语言<九>自定义弹窗组件CustomDialog及二次封装自定义弹窗

一、自定义弹窗 CustomDialog struct CustomDialogBuilder {controller: CustomDialogController new CustomDialogController({ // 注意写法builder: CustomDialogBuilder({})})// controller: CustomDialogController // 这种预览会报错cancel?: () > voidconfirm?: (…

微信小游戏 彩色试管 倒水游戏 逻辑

最近开始研究微信小游戏&#xff0c;有兴趣的 可以关注一下 公众号&#xff0c; 记录一些心路历程和源代码。 定义一个 Cup类&#xff1a; 主要功能 初始化水杯&#xff1a;根据传入的颜色信息初始化水杯中的水层。 倒水&#xff1a;模拟水杯倾斜并倒出水的过程。 加水&…

Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery

目录 开始 为什么需要服务发现机制 File Service Discovery&#xff08;file_sd&#xff09; 基本概念 配置方式 使用案例 HTTP Service Discovery&#xff08;http_sd&#xff09; 基本概念 配置方式 使用案例 开始 为什么需要服务发现机制 我们知道在 Prometheus …

【链表】算法题(一) ---- 力扣 / 牛客

一、移除链表元素 移除链表中值为val的元素&#xff0c;并返回新的头节点 思路&#xff1a; 题目上这样说&#xff0c;我们就可以创建一个新的链表&#xff0c;将值不为val的节点&#xff0c;尾插到新的链表当中&#xff0c;最后返回新链表的头节点。 typedef struct ListNo…

[安洵杯 2019]easy_web1

知识点&#xff1a; 1.base64加解密 2.md5加解密 3.md5碰撞绕过强类型比较 4.Linux命令绕过 进入页面发现url地址中存在 img参数和一个cmd参数&#xff0c;img参数看上去像是base64编码&#xff0c;可以去尝试一下解码. 进行了两次base64解密得到3535352e706e67看着像16进制那么…

员工聊天记录监控方法大全(五种方法你自己选择)

在现代企业中&#xff0c;为了保障业务安全、防止数据泄露和促进工作效率&#xff0c;很多公司会采用各种方法监控员工的聊天记录。虽然听起来有点“大哥哥在看着你”的感觉&#xff0c;但只要在合法和透明的前提下进行&#xff0c;这其实是为了构建一个更加健康、安全的工作环…

网络流问题-Min-cut

文章目录 1. 网络流问题基础1.1 概述1.2 常规算法1.3 总结 2. Ford-Fulkerson Algorithm2.1 概述2.2 Ford 算法2.3 Ford 算法小结 链接&#xff1a; B站学习视频 1. 网络流问题基础 1.1 概述 最大流问题主要是关于有向图问题。有向图中有m个边&#xff0c; n个节点,其中有一个…

怎么用PPT录制微课?详细步骤解析!

随着信息技术的不断发展&#xff0c;微课作为一种新型的教学形式&#xff0c;因其短小精悍、针对性强等特点&#xff0c;在教育领域得到了广泛的应用。而PPT作为一款常用的演示工具&#xff0c;不仅可以用来制作课件&#xff0c;还可以利用其内置的录屏功能或结合专业的录屏软件…

Dify中的经济索引模式实现过程

当索引模式为经济时&#xff0c;使用离线的向量引擎、关键词索引等方式&#xff0c;降低了准确度但无需花费 Token。 一.提取函数**_extract** 根据不同文档类型进行内容的提取&#xff1a; def _extract(self, index_processor: BaseIndexProcessor, dataset_document: Data…

FastAPI 学习之路(四十三)路径操作的高级配置

在实际开发中&#xff0c;可能我们有些接口不能在接口文档中与其他业务接口一样开放给前端或者其他对接人&#xff0c;那么我们肯定会想着在接口文档中对其进行屏蔽隐藏操作&#xff0c;那么可以实现吗&#xff1f; 接口文档中隐藏接口 当然&#xff0c;还很简单&#xff0c;…

【CSS in Depth 2 精译】2.6 CSS 自定义属性(即 CSS 变量)+ 2.7 本章小结

文章目录 2.6 自定义属性&#xff08;即 CSS 变量&#xff09;2.6.1 动态变更自定义属性 2.7 本章小结 当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性 …

PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南

小编特将PostgreSQL证书申报个税退税流程&#xff0c;编辑成文&#xff0c;供大家申报参考哦~ 1.申报专项附加扣除 第一步&#xff1a;打开个人所得税APP&#xff0c;选择“专项附加扣除填报”&#xff1a; 第二步&#xff1a;“扣除年度”选择您要申报的年度&#xff0c;并…

Windows 默认以管理员运行打开CMD

winr 默认以管理员打开运行CMD 需求&#xff1a;在运行页面输入cmd 希望是可以直接通过管理员方式打开的。 winr 打开运行 输入secpol.msc 打开本地安全策略&#xff08;注意家庭版是没有这个的&#xff09; 找到本地策略–安全选项–用户帐户控制: 以管理员批准模式运行所有管…

基于Python thinker GUI界面的股票评论数据及投资者情绪分析设计与实现

1.绪论 1.1背景介绍 Python 的 Tkinter 库提供了创建用户界面的工具&#xff0c;可以用来构建股票评论数据及投资者情绪分析的图形用户界面&#xff08;GUI&#xff09;。通过该界面&#xff0c;用户可以输入股票评论数据&#xff0c;然后通过情感分析等技术对评论进行情绪分析…

JavaScript 中 await 永远不会 resolve 的 Promise 会导致内存泄露吗?

前言 在 JavaScript 中&#xff0c;await 关键字用于等待一个 Promise 完成&#xff0c;它只能在异步函数&#xff08;async function&#xff09;内部使用。当 await 一个永远不会 resolve 的 Promise 时&#xff0c;它确实会阻塞异步函数的进一步执行&#xff0c;但不会直接…

C1W1.Assignment: Logistic Regression

理论课&#xff1a;C1W1.Sentiment Analysis with Logistic Regression 文章目录 前期准备导入包导入数据处理推文文本 Part 1: Logistic regressionPart 1.1: Sigmoid实现 sigmoid 函数Logistic regression: regression and a sigmoid Part 1.2 Cost function and GradientUp…

Python 使用proto 发送socket数据

import socket import binascii import struct from SensingMonitoring_pb2 import Command, CommandNamesif __name__ "__main__":client socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.connect(("192.168.1.100", 22295))# 发送数据comman…

软件模块的初始化

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