一. OrangePi AiPro介绍和初始化配置
- 介绍
香橙派 orangePiAIpro这个板子其实早在一年前就已经有了大面积推广且应用于各种真实的智能场景中了,比如图像识别,大文本语义解析,语音识别等,今日我也终于下手啦。
因为本人本科是一个嵌入式爱好者做了一些机器人机器车等,但当时AI智能还没有火起来;后来上了研究生,开示搞深度学习,可惜当时主要的工作是AI编译器优化或者说深度学习编译器优化,比如TVM,LLVM-IR等,又与真实的人工智能擦肩而过,直到23年人工智能火起来,又重新唤醒了我对人工智能机器人的热情,所以趁着520之际,送给自己一个小小的礼物,希望能够通过这款OrangePiAIPRO板子完成我的一些人工智能机器人的idea。
正式介绍一下这个板子
8TOPS、8GB内存,大拇哥!
所以懂了吧,与其买个3060做训练,不如买个AIpro做训练,小巧、闭环、平时还能用来当个NAS或者小主机,最不要脸还能all in one,训练生活生产各不耽误。
这里有详细介绍就不多说了
https://www.hiascend.com/forum/thread-0285140173361311056-1-1.html
2. 实际安装和使用
我想用来做实验机的, 所以简单的连上我家的路由器, 通过路由器的客户端就能识别到新增的设备IP, 在通过ssh访问这个开发板非常简单
ssh HwHiAiUser@192.168.31.69 密码是Mind@123
登录后可以通过passwd修改密码的吼!
二. OrangePi AiPro日常生产工具的使用
- 先把我的nvme的板子搞上去
有一块年久不用的nvme256, 翻箱倒柜的终于找到了, 赶紧装上去再说. 这里不得不说一下OrangePi AIPro这块板子好像对nvme不太友好, 正常的想法是怎么将系统烧到tf卡中, 就怎么把系统烧到nvme应该就可以了吧, 但是我烧了, 根本没反应, 我也匹配了拨码开关到ssd的模式, 完全没有用, 看了操作手册也没有说明为啥不行, 所以只能将nvme当成一块普通的硬盘挂载OrangePi AIPro上了, 系统依然在tf卡中吧!
下面是实际操作, 将nvme挂载到路径/share/m2中
cat /proc/partitions
# 259 0 125034840 nvme0n1 # 这个就是ssd盘符
# 分区
(echo o; echo n; echo p; echo 1; echo ""; echo ""; echo w; echo q) | fdisk /dev/nvme0n1
# 格式化为ext4格式
mkfs.ext4 /dev/nvme0n1p1
# 查看分区的block ID
(base) HwHiAiUser@orangepiaipro:~$ sudo blkid /dev/nvme0n1p1
[sudo] password for HwHiAiUser:
/dev/nvme0n1p1: UUID="e774b04e-8436-4ade-8aa1-5f63e62801d1" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="9ea454a9-01"
# 设置开机自动挂载
HwHiAiUser@orangepiaipro:~$ vi /etc/fstab
# 新增
UUID="e774b04e-8436-4ade-8aa1-5f63e62801d1" /share/m2 ext4 defaults 0 0
# 重启生效
sudo reboot
- 更新下载源, 下载必须的软件
(base) HwHiAiUser@orangepiaipro:~$ cat /etc/apt/sources.list
# 添加下面的下载源
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://repo.huaweicloud.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://repo.huaweicloud.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# 更新和下载
sudo apt update -y && sudo apt upgrade -y
- 担心内存不足, 先搞16G的共享内存再说
# 创建文件
mdkir -p /share/m2/.swap && cd /share/m2/.swap
# 下载创建swap文件的工具
git clone https://github.com/jetsonhacks/postFlashTX1.git && cd postFlashTX1/
# 利用工具创建swap空间, 挂载的位置是/share/m2/.swap/swapfile文件中
sudo ./createSwapfile.sh -d /share/m2/.swap -s 16
# 打开swap
sudo swapon -a
# 挂载到/home/swap
sudo swapon swapfile
# 卸载 /swap
sudo swapoff swapfile
# 产看swap
(base) HwHiAiUser@orangepiaipro:.swap$ free -h
total used free shared buff/cache available
Mem: 7.4Gi 1.5Gi 1.0Gi 33Mi 4.9Gi 5.6Gi
Swap: 15Gi 300Mi 15Gi
sudo blkid swapfile
(base) HwHiAiUser@orangepiaipro:.swap$ cat /etc/fstab
UUID="27803c0f-6cd2-4d03-b0ff-8d576c0fc4d6" none swap sw 0 0
/share/m2/.swap/swapfile swap swap defaults 0 0
- 部署casaos: 远程服务器管理的最佳软件
每拿到一个板子, 我一般第一个服务都会部署casaos, 之所以会部署casaos, 原因有三个:
第一, 他可以让我们清晰地监控到OrangePi AiPro的常规信息, 内存, CPU, 存储信息, 如下图所示
第二, 因为一键安装, wget -qO- https://get.casaos.io | sudo bash, 安装过程中会把常见的软件都自动安装了, 比如git, vim, docker, sambd等等, 最重要的就是docker会安装上, 对后续做项目有非常大的帮助
第三, casaos占用资源非常低, 比起宝塔低上10个量级也不为过
浏览器访问 192.168.31.69 即可
- 既然sambd已经安装了, 就用OrangePiAIPro先做一个存储服务(假NAS)
因为我挂载了nvme256, 所以我把这个分区share出来没问题吧
sudo vi /etc/samba/smb.conf
[share]
comment = share folder
#共享文件的服务器所在文件路径
path = /share/m2
# 允许浏览
browseable = yes
# 设置允许的访问的用户, 必须是系统包含的人
valid user = HwHiAiUser
#共享开放
public = no
#可写
writable = yes
# 可直接读写使用, 比如视频可以直接播放
available = yes
create mask = 0777
directory mask = 0777
force user = nobody
force group = nogroup
sudo smbpasswd -a HwHiAiUser
# 重启服务
sudo /etc/init.d/samba-ad-dc restart
# 注意 不用设置开机自动启动, 因为是默认的
# 启动nmbd服务:
sudo service nmbd restart
# 启动smbd服务:
sudo service smbd restart
到这里, 无论是通过浏览器监控主板性能, 还是通过ssh访问后台,, 还是通过文件管理器访问/share/m2都搞定了, 此时的板子已经具备了日常使用的条件和功能了.
文件夹访问\\192.168.31.69\share\m2即可
- 那docker都安装完了, 必然要挂点服务啦
首先要修改docker的默认存储路径, 毕竟tf卡才32G, 要把docker路径改为nvme256上面
sudo docker run hello-world
sudo groupadd docker
sudo usermod -aG docker $USER
sudo gpasswd -a $USER docker
newgrp docker
(base) HwHiAiUser@orangepiaipro:swap$ cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"data-root": "/share/m2/swap/docker"
}
sudo systemctl restart docker
cat docker info
Docker Root Dir: /share/m2/docker
第一个服务是docker监控, 你以为是命令行嘛? 显然, casaos就行了, 这里有个感叹, 啥时候docker也能识别NPU设备就好了, 当前还是停留在GPU的时代....
其他的服务都是雷同, 整体来开盒, OrangePi AIPro的流畅度真的很不错
- 试试整个网络性能吧, 看看当一个NAS合格不
最近有个大模型, 正想存到OrangePi AIPro, 那就一边从Windows上给班子传数据, 一边在下载docker, 看看nvme, 网络, 主板的契合度怎么样
scp -r 文件 HwHiAiUser@192.168.31.69:/share/m
实验结果还真的不错, 加起来100MB/s, 完全够用了!!!
三. OrangePi AiPro大学生入门AI的第一款板子怎么样?
- 安装TVM, 试试模型训练效果如何(未完待续...)
TVM
下载llvm和clang
https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.2/clang+llvm-17.0.2-aarch64-linux-gnu.tar.xz
git clone --recursive https://github.com/mlc-ai/relax.git tvm_unity && cd tvm_unity/
mkdir -p build && cd build
cp ../cmake/config.cmake .
vi config.cmake
set(USE_LIBBACKTRACE OFF)
set(CMAKE_BUILD_TYPE RelWithDebInfo) #这一项在文件中没有,需要添加
set(USE_OPENCL ON) #这一项在文件中可以找到,需要修改
set(HIDE_PRIVATE_SYMBOLS ON) #这一项在文件中没有,需要添加
#这一项在文件中可以找到,需要修改
set(USE_LLVM 路径clang+llvm-17.0.2-aarch64-linux-gnu/bin/llvm-config)
cmake .. && make -j8
编译完成后, 就可以插入到python环境中了, 整个编译过程大约用了1个小时, 后续需要用TVM进行训练暂时还没想好训练什么, 当前先把环境搞定了已经算成功一大半了!
- 查看NPU信息
NPU的常用命令和指南 https://support.huawei.com/enterprise/zh/doc/EDOC1100079287/10dcd668#ZH-CN_TOPIC_0000001264656717
从显示结果上看, 这款OrangePi AIPro板子底层NPU用的是Ascend 310B4, 那么就可以用来做CANN训练了, 网上能搜到很多相关的操作方案, 这里就不做进一步实践了.
【CANN训练营笔记】OrangePI AIPro 体验手写体识别模型训练与推理
- 具体的业务应用 yolo图像识别
yolo图像识别其实在商业上有很多应用和成果, 比如海康威视做监控摄像实时识别路人老人宠物等或者根据动态信息行为进行告警, 在或者智能家具通过手势识别在做不同的智能场景.
用这个OrangePi AIPro部署一下yoloV8, 一方面校验一下部署的复杂程度, 另一方面考研一下下OrangePi AIPro的性能, 如下图所示, 识别一张640x480像素的图片, 其中包含四个人和一辆车, 用时8.9ms; 想来如果用yoloV8的模型, 完成视频流的图片识别也是轻轻松松的.
conda create -n tvm python=3.10
conda activate tvm
pip install ultralytics
yolo predict model=yolov8n.pt bus.jpg
# 参考 git clone https://github.com/ultralytics/yolov8.git
在给一个代码测试吧
from ultralytics import YOLO
# Load a model
# model = YOLO("yolov8n.yaml") # build a new model from scratch
model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
# Use the model
model.train(data="coco8.yaml", epochs=3) # train the model
metrics = model.val() # evaluate model performance on the validation set
results = model("bus.jpg") # predict on an image
path = model.export(format="onnx") # export the model to ONNX format
- 具体的业务应用之语言大模型工具ollama部署测试
最近一年里其实大语言模型火的一塌糊涂, 尤其是chatgpt简直是YYDS. 这就引爆了市场, 思考通过大模型训练一些专用场景的AI工具变得可能, 比如常见的辅助程序员写写代码, 辅助医生做做病人病人的健康诊断, 辅助运维人员识别识别老bug等
ollama是开源语言大模型的一个服务化工具, 能够让本地的大模型运行起来, 并且提供了很多模型库用来使用, 如果能将ollama部署到orangePi AIPro这块板子上, 这个板子完全就可以用来做日常沟通的趣味机器人, 并且随着未来大模型的演进, 只会实现更精准的语言回答, 让这个板子的未来应用更加有意义.
下面介绍具体是怎么部署的吧, 模型和框架这里都用docker部署, 绝对十分钟部署完成
# 这里安装大模型的UI服务端(用来使用大模型)
(base) HwHiAiUser@orangepiaipro:~$ docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:mainv
# 这里安装大模型的服务端(用来下载大模型)
(tvm) HwHiAiUser@orangepiaipro:yolov8$ docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
(tvm) HwHiAiUser@orangepiaipro:yolov8$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d821d2d4861 ollama/ollama "/bin/ollama serve" 22 seconds ago Up 21 seconds 0.0.0.0:11434->11434/tcp, :::11434->11434/tcp ollama
2f3c561f6662 ghcr.io/open-webui/open-webui:main "bash start.sh" 12 minutes ago Up 12 minutes (unhealthy) 0.0.0.0:3000->8080/tcp, :::3000->8080/tcp open-webui
docker完成后, 需要访问浏览器IP:3000, 创建个人账号, 右上角的图标中有一个setting, 在通用中修改中文, 然后在连接中输入http://IP:11434, 然后在模型中输入要拉取的模型名称, 比如下面这俩, 分分钟下载完成后, 就可以在主页面上正式的玩耍了.
llama3:8b
gpt-3.5-turbo
这是结果, 真的给人很大的惊喜, 现在的大模型已经基本满足一个普通人的日常使用了, 虽然加载的速度比较慢, 但是还是能接受的, 所以非常肯定这块板子的性能完全够用了, 后续计划使用这个板子的NPU进行大模型的训练, 比如增加一些专用的知识库, 做一些专用的训练, 从最大程度上发挥该板子的性能.
四. 最后Orange Pi AIpro 总结
1. 简介
Orange Pi AIpro 是一款基于昇腾技术的 AI 开发板,具备 8TOPS 的算力和 8GB 内存,适合用于图像识别、大文本语义解析、语音识别等智能场景。它小巧、闭环,除了可以作为 AI 训练设备,还能充当 NAS 或小主机,实现训练、生活、生产的多场景应用。
2. 安装和使用
- SSH 访问:通过家庭路由器分配的 IP 地址,使用默认用户名和密码(HwHiAiUser/Mind@123)进行 SSH 连接,并建议修改默认密码。
- 硬件扩展:尝试将 NVMe SSD 作为存储设备挂载到 AIpro 上,尽管遇到了一些兼容性问题,但最终通过将 SSD 作为普通硬盘使用,成功扩展了存储空间。
3. 系统配置
- 更换下载源:更新了系统的软件源,使用了中国科学技术大学的镜像,提高了软件包的下载速度。
- 内存扩展:创建了 16GB 的 Swap 分区,以缓解物理内存的压力,并通过 Docker 的配置调整,将 Docker 的数据存储路径更改到了 NVMe SSD 上。
4. 服务部署
- CasaOS:部署了 CasaOS,用于监控系统状态和简化常用软件的安装。
- Samba 服务:配置了 Samba 服务,将 NVMe 分区作为网络共享存储使用。
- Docker 服务:利用 Docker 部署了多种服务,包括监控系统和大模型服务。
5. 性能测试
- 网络性能:通过 SCP 命令和 Docker 的使用测试了网络性能,达到了 100MB/s 的传输速率,表现令人满意。
- AI 性能:尝试安装成功TVM,同时部署了 YOLOv8 进行图像识别测试。
6. 大模型部署
- Ollama 部署:成功部署了开源语言大模型服务化工具 Ollama,通过 Docker 容器化部署,提供了丰富的模型库,并通过 Web UI 进行交互。
7. 结论
Orange Pi AIpro 作为一款性价比高的 AI 开发板,不仅在 AI 学习和研究领域表现出色,而且在实际应用中也展现出了良好的性能和扩展性。无论是作为入门学习的工具,还是用于特定的业务场景,它都能够提供足够的支持。随着技术的不断进步和社区的发展,Orange Pi AIpro 的应用前景将更加广阔。