了不起的学习生产板OrangePiAiPro

news2024/12/23 11:17:49

一. OrangePi AiPro介绍和初始化配置

  1. 介绍

香橙派 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日常生产工具的使用

  1. 先把我的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

  1. 更新下载源, 下载必须的软件

(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

  1. 担心内存不足, 先搞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

  1. 部署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 即可

  1. 既然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即可

  1. 那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的流畅度真的很不错

  1. 试试整个网络性能吧, 看看当一个NAS合格不

最近有个大模型, 正想存到OrangePi AIPro, 那就一边从Windows上给班子传数据, 一边在下载docker, 看看nvme, 网络, 主板的契合度怎么样

scp -r 文件 HwHiAiUser@192.168.31.69:/share/m

实验结果还真的不错, 加起来100MB/s, 完全够用了!!!

三. OrangePi AiPro大学生入门AI的第一款板子怎么样?

  1. 安装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进行训练暂时还没想好训练什么, 当前先把环境搞定了已经算成功一大半了!

  1. 查看NPU信息

NPU的常用命令和指南 https://support.huawei.com/enterprise/zh/doc/EDOC1100079287/10dcd668#ZH-CN_TOPIC_0000001264656717

从显示结果上看, 这款OrangePi AIPro板子底层NPU用的是Ascend 310B4, 那么就可以用来做CANN训练了, 网上能搜到很多相关的操作方案, 这里就不做进一步实践了.

【CANN训练营笔记】OrangePI AIPro 体验手写体识别模型训练与推理

  1. 具体的业务应用 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

  1. 具体的业务应用之语言大模型工具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 的应用前景将更加广阔。

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

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

相关文章

【C++练级之路】【Lv.22】C++11——右值引用和移动语义

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、右值引用1.1 左值和右值1.2 左值引用和右值引用的范围1.3 左值引用的意义 二、移动语义2.1 移动构造…

感觉是通俗易懂的大模型入门(一)

最近人工智能非常火爆,大家可能经常听到AI、深度学习、大语言模型等名词。但真正能够将它们拆开来细致讲解的内容并不多。我大学就是学这个的,毕业后一直从事这个领域的工作。所以我打算今年陆续做一些这方面的科普,也借此机会复习巩固一下自己的知识体系。 今天就算是第一期,…

C语言之指针详解(5)(含有易错笔试题)

文章目录 一、sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof 和 strlen 的对比 二、数组和指针笔试题2.1 一维数组2.2 字符数组2.3 二维数组 三、指针运算笔试题3.1 题目13.2 题目23.3 题目33.4 题目43.5 题目53.6 题目63.7 题目7 一、sizeof和strlen的对比 有一个很神…

操作系统 - 输入/输出(I/O)管理

输入/输出(I/O)管理 考纲内容 I/O管理基础 设备:设备的基本概念,设备的分类,I/O接口 I/O控制方式:轮询方式,中断方式,DMA方式 I/O软件层次结构:中断处理程序,驱动程序,…

汇编:比较跳转

在16位汇编语言(如x86汇编)中,比较指令用于比较两个操作数的大小,通常用于条件跳转、循环控制等逻辑操作,比较指令(如CMP)会根据操作数的比较结果设置标志寄存器中的相关标志位 比较指令影响的…

KAN(Kolmogorov-Arnold Network)的理解 2

系列文章目录 第一部分 KAN的理解——数学背景 第二部分 KAN的理解——网络结构 文章目录 系列文章目录前言KAN网络结构:Kolmogorov-Arnold Network 前言 这里记录我对于KAN的探索过程,每次会尝试理解解释一部分问题。欢迎大家和我一起讨论。 KAN tuto…

Spring Boot集成六大常用中间件,附集成源码,亲测有效

目录 万字论文,从0到1,只需1小时获取途径1、Spring Boot如何集成Spring Data JPA?2、Spring Boot如何集成Spring Security?3、Spring Boot如何集成Redis?4、Spring Boot如何集成RabbitMQ?5、Spring Boot如何…

Dream

好像很多人梦寐以求的都是别人已经拥有的,多少人奋斗一生的目标,却只是别人的起点,人生而自由,只是不在枷锁之中,生活中没有人不遗憾,只是没有人喊疼,时间不会重来,已经过去了就让它…

day16--集合进阶(Set、Map集合)

day16——集合进阶&#xff08;Set、Map集合&#xff09; 一、Set系列集合 1.1 认识Set集合的特点 Set集合是属于Collection体系下的另一个分支&#xff0c;它的特点如下图所示 下面我们用代码简单演示一下&#xff0c;每一种Set集合的特点。 //Set<Integer> set ne…

软考 系统架构设计师系列知识点之SOME/IP与DDS(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之SOME/IP与DDS&#xff08;2&#xff09; 本文内容参考&#xff1a; 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#…

AS加密技术的实战应用与解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、AS加密技术简介 二、AS加密技术的实现过程 1. 生成公钥和私钥 2. 使用公钥加密数据 …

Java从坚持到精通-SpringBoot项目-多来米云客(持续更新中)

1.项目介绍 该项目模仿动力云客制作&#xff0c;是一款商业的集营销销售为一体的客户关系管理系统&#xff0c;其采用信息化、数字化方式来进行营销销售及客户管理。 云客指的是海量客户&#xff0c;通过技术方式实现的这一套系统&#xff0c;可用于自动化分析销售、市场营销…

【Python】 探索Python中的“命名元组”

基本原理 在Python中&#xff0c;元组&#xff08;tuple&#xff09;是一种不可变序列&#xff0c;它允许我们存储一系列的元素&#xff0c;并且这些元素一旦被创建就不能被修改。元组的这种不可变性使得它们在多线程编程中非常安全&#xff0c;因为不需要担心数据被意外修改。…

【VTKExamples::Utilities】第九期 FrameRate

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例FrameRate,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. FrameRate 该样例介绍 如…

详细分析 tar: xx:无法 open: 没有那个文件或目录 的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法 1. 问题所示 对于此问题处理起来比较简易&#xff0c;对此放置在运维的专栏模块 在执行解压的时候出现如下问题&#xff1a; (pgm37) l228l228:~/huoyanhao/pytorch-glow-master/pytorch-glow-master$ tar -xvf celeb-tfr.tar tar: …

“提升人工智能大模型智能:策略与挑战“

文章目录 每日一句正能量前言算法创新数据质量与多样性模型架构优化后记 每日一句正能量 失败时可以称为人生财富&#xff0c;成功时可以称为财富人生。 前言 随着人工智能技术的飞速发展&#xff0c;大模型已经成为推动多个领域创新的关键力量。从自然语言处理到图像识别&…

ssm145基于java的电脑硬件库存管理系统+jsp

电脑硬件库存管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对电脑硬件库存信息管理混乱&…

开源远程协助:分享屏幕,隔空协助!

&#x1f5a5;️ 星控远程协助系统 &#x1f5b1;️ 一个使用Java GUI技术实现的远程控制软件&#xff0c;你现在就可以远程查看和控制你的伙伴的桌面&#xff0c;接受星星的指引吧&#xff01; 支持系统&#xff1a;Windows / Mac / Linux &#x1f31f; 功能导览 &#x1f…

AI分析SP和pk进行sk分析

SP原始表行标题代表题目序号&#xff0c;列代表学生&#xff0c;如果学生答对题目为1&#xff0c;否则为0。问题知识点矩阵这个文件横轴代表每个知识点&#xff0c;列标题代表每个题目序号&#xff0c;如果题目包含这个知识点则该处值为1。通过两个文件判断学生对于每个知识点的…

行为设计模式之职责链模式

文章目录 概述原理代码实现小结 概述 职责链模式(chain of responsibility pattern) 定义: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求.将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止. 在职责链模式中&…