[software development] 【RISC-V】VisionFive2简单折腾(第二弹)
Tofloor
poster avatar
fuuko
deepin
2023-12-10 00:08
Author

上回说到我的vf2小板子启动deepin失败,最终投入了debian的怀抱,本帖就记录一下这周后续的折腾情况。

这周的主要目标如下:

  • 搭建一个基于vue3的前端
  • 搭建一个基于python3的后端
  • 允许用户从局域网访问该网页
  • 主功能是为分析用户上传的图片的场景

网页前后端的代码我均在上周写完并在我的x86笔记本电脑上测试通过,目前的问题主要在如何把这些东西部署到开发板。

首先网页前端托管非常简单,直接扔给nginx即可。只是如果你是用的老版本vf2镜像,那么nginx是有可能起不来的,需要更新镜像到最新版本。而对于这类简单静态网页而言,在debian镜像里,nginx的部署也非常简单:

  • apt install nginx
  • 查看nginx的配置文件,找到网页根目录
  • 将构建好的html文件和其它的资源包复制过去

不出意外,复制完成后就能从局域网内访问它了,比如直接在手机或者PC上打开浏览器输入http://192.168.0.15,再回车,就能看到之前写的网页了。

由于我采用的是前后端分离策略,单独一个网页并不能分析图片的内容(如果配置了wasm就可以),于是这个时候开始折腾python后端。

这里需要注意的是,pypi上绝大部分的python包是没有risc-v版的,我所使用的推理框架ncnn就属于这类情况。如果直接执行pip3 install ncnn,在x86机器的risc-v docker里将会遭遇无穷无尽的编译地狱,而在vf2这种板子上,将会遭遇无法从pip安装cmake的问题,我折腾了两天,终于明白了最佳的处理方式:

  • 对于常见包:opencv,numpy等,debian的risc-v仓库内已经有对应的包了,它们均为python3开头,使用apt直接安装后,pip3和python3内部均可识别和使用
  • 对于冷门包:比如ncnn,建议就通过apt装好依赖,直接拉源码然后sudo python3 setup.py install吧,当然如果能搭建好交叉构建环境,在高性能的x86机器上完成wheel包制作则更好
  • 对于cmake这个奇葩:如果非要在python里面使用它,则:
    • 直接去pypi下载源码
    • 禁用cmake文件中的单元测试项
    • 在它解压源码并准备编译的时候暂停,然后将源码中的 std::atomic替换为 std::atomic_uint 以规避某个符号问题(对应的true,false,逻辑运算等也要修改,C++萌新可能会懵逼),又或者在cmake文件中设置额外链接到 libatomic这个库也行(增加链接库的方法未测试,我用修改源码的方式解决的)
    • 执行sudo python3 setup.py install,或者在交叉构建环境中制作wheel包

最后的最后,我终于在我手机上看到了结果:

7F67204A95C7AB82F6FF3ADEBCF8A610.jpg

至此第二阶段折腾完毕,我的vf2不仅运行了网页,而且还跑了一个基于深度学习的图片识别应用(虽然模型就10MB不到=。=)

Reply Favorite View the author
All Replies
fuuko
deepin
2023-12-10 00:20
#1

其实这次折腾它还是蛮感慨的,debian社区的东西是真的大又全,不仅有numpy,opencv等计算、图像方面的python库,而且连pytorch这个庞然大物也给打包进去了(虽然使用它的最佳方式是拉docker =。=)。

是的,只要你的risc-v小板子内存够大,理论上是可以直接通过这个pytorch包启动一个stable diffusion或者llama模型的,虽然有点慢就是了。

Reply View the author
deepin
2023-12-10 01:03
#2

支持折腾,希望deepin能够适配的更加稳定。

Reply View the author