VisionFive2 RISC-V开发板游玩笔记(二、深度学习相关环境的编译和安装)

分享作者:hazeqqice
评测品牌:赛昉科技
评测型号:VF202040-A0
申请理由(产品应用):希望探究RISC-V高性能开发板在深度学习神经网络算法领域的优势
发布时间:2024-11-04 14:44:18
0
概要
VisionFive2 RISC-V开发板游玩笔记
开源口碑分享内容

四阶段:深度学习相关包的尝试

OpenCV

编译过程参考https://github.com/Qengineering/Install-OpenCV-Raspberry-Pi-64-bits/blob/main/OpenCV-4-10-0.sh

安装依赖

sudo apt-get install -y build-essential cmake git unzip pkg-config
sudo apt-get install -y libjpeg-dev libtiff-dev libpng-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgtk2.0-dev libcanberra-gtk* libgtk-3-dev
sudo apt-get install -y libgstreamer1.0-dev gstreamer1.0-gtk3
sudo apt-get install -y libgstreamer-plugins-base1.0-dev gstreamer1.0-gl
sudo apt-get install -y libxvidcore-dev libx264-dev
sudo apt-get install -y python3-dev python3-numpy python3-pip
sudo apt-get install -y libv4l-dev v4l-utils
sudo apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev
sudo apt-get install -y liblapack-dev gfortran libhdf5-dev
sudo apt-get install -y libprotobuf-dev libgoogle-glog-dev libgflags-dev
sudo apt-get install -y protobuf-compiler
sudo apt-get install -y libtbbmalloc2 libtbb-dev libdc1394-dev

clone代码仓库并切换到文件夹内

git clone --depth=1 https://github.com/opencv/opencv.git
git clone --depth=1 https://github.com/opencv/opencv_contrib.git
cd ./opencv
mkdir build
cd build

使用CMake配置编译参数

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=/home/qqice/nvme/opencv_contrib/modules \
#上面这行的路径替换成你opencv_contrib所在的绝对路径
-D ENABLE_NEON=OFF \
#NEON在Arm64上可用,但在RISCV64上编译会报错,所以关掉
-D WITH_OPENMP=ON \
-D WITH_OPENCL=OFF \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D WITH_GSTREAMER=ON \
-D BUILD_TESTS=OFF \
-D WITH_EIGEN=OFF \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_VTK=OFF \
-D WITH_QT=OFF \
-D WITH_PROTOBUF=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF ..

编译安装

make -j4
sudo make install
sudo ldconfig
make clean
sudo apt-get update

测试

PyTorch

编译过程参考https://github.com/xforcevesa/pytorch-riscv64-oe24/blob/2.3.0%2Balpha/docs/tutorial-oe-cn.md

clone代码仓库

git clone -b v2.5.0 --single-branch https://github.com/pytorch/pytorch.git
cd pytorch/
git submodule update --init --recursive

需要在原版代码上做一些修改,删除暂不支持RISCV的sleef编译依赖。我做了一个patch(仅适用于v2.5.0),将下面代码块的内容保存到pytorch目录下,命名为riscv.patch,然后执行git am riscv.patch 应用patch

From 062ebb8954ff8f19678104c64125327f2e87cba6 Mon Sep 17 00:00:00 2001
From: qqice <qqice@srhaze.com>
Date: Tue, 29 Oct 2024 21:01:41 +0800
Subject: [PATCH] Add RISCV support

---
 aten/src/ATen/CMakeLists.txt | 2 +-
 caffe2/CMakeLists.txt        | 2 +-
 test/cpp/api/CMakeLists.txt  | 1 +
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/aten/src/ATen/CMakeLists.txt b/aten/src/ATen/CMakeLists.txt
index 6d9152a4d0..df9f0f6cac 100644
--- a/aten/src/ATen/CMakeLists.txt
+++ b/aten/src/ATen/CMakeLists.txt
@@ -422,7 +422,7 @@ if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x|ppc64le)$")
   list(APPEND ATen_CPU_DEPENDENCY_LIBS cpuinfo)
 endif()
 
-if(NOT EMSCRIPTEN AND NOT INTERN_BUILD_MOBILE)
+if(FALSE)
   if(NOT MSVC)
     # Bump up optimization level for sleef to -O1, since at -O0 the compiler
     # excessively spills intermediate vector registers to the stack
diff --git a/caffe2/CMakeLists.txt b/caffe2/CMakeLists.txt
index 9be7f3732f..ac1eee1669 100644
--- a/caffe2/CMakeLists.txt
+++ b/caffe2/CMakeLists.txt
@@ -1699,7 +1699,7 @@ if(BUILD_TEST)
         if(NOT MSVC)
           add_executable(${test_name}_${CPU_CAPABILITY} "${test_src}" ../aten/src/ATen/native/quantized/AffineQuantizerBase.cpp)
           # TODO: Get rid of c10 dependency (which is only needed for the implementation of AT_ERROR)
-          target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 sleef gtest_main nlohmann)
+          target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 gtest_main nlohmann)
           if(USE_FBGEMM)
             target_link_libraries(${test_name}_${CPU_CAPABILITY} fbgemm)
           endif()
diff --git a/test/cpp/api/CMakeLists.txt b/test/cpp/api/CMakeLists.txt
index ceeb607d52..3df38efcde 100644
--- a/test/cpp/api/CMakeLists.txt
+++ b/test/cpp/api/CMakeLists.txt
@@ -49,6 +49,7 @@ if(USE_CUDA OR USE_ROCM)
 endif()
 
 add_executable(test_api ${TORCH_API_TEST_SOURCES})
+target_compile_options(test_api PUBLIC -Wno-nonnull)
 target_include_directories(test_api PRIVATE ${ATen_CPU_INCLUDE})
 target_link_libraries(test_api PRIVATE torch gtest)
 
-- 
2.43.0

建议创建一个venv,在venv中编译并安装pytorch。否则会遇到安装权限问题,用sudo执行编译指令会导致重新编译(编译这玩意要十多个小时,非常非常慢)

export USE_CUDA=0 # RISC-V架构服务器无法使用CUDA
export USE_DISTRIBUTED=0 # 不支持分布式
export USE_MKLDNN=0 # 并非英特尔处理器,故不支持MKL
export MAX_JOBS=2 # 编译进程数,在4GB+2GB Zram的VisionFive2上编译只能开这么高,再高就会爆内存死机
python3 setup.py develop --cmake

测试

Mamba(部分成功)

其实这是一次失败的尝试。本来是想装conda来着,毕竟一般我习惯在开发板上用conda管理不同的python环境;咕噜咕噜了一圈发现无论是anaconda、miniconda还是miniforge、mambaforge这些安装程序都不提供RISCV版本的安装包。conda的源码仓库咱也不会编译,遂转战mamba。编译过程及依赖参考https://gist.github.com/dtcxzyw/9fe5a3d7404d4234bc675a7847a3fa48

sudo apt install bison
wget http://web.mit.edu/kerberos/dist/krb5/1.20/krb5-1.20.1.tar.gz
tar xvf krb5-1.20.1.tar.gz
cd krb5-1.20.1/src
./configure LDFLAGS="-Wl,--allow-multiple-definition" --build=riscv64-linux-gnu --enable-static --disable-shared
make -j4
sudo make install

sudo apt-get install libfmt-dev
sudo apt-get install libarchive-dev libkrb5-dev liblz4-dev libnghttp2-dev libssh2-1-dev
sudo apt-get install libcli11-dev

git clone https://github.com/TartanLlama/expected.git
cd expected
mkdir build
cd build
cmake ..
make
sudo make install

git clone https://github.com/DaanDeMeyer/reproc.git
cd reproc
#修改CMakeLists.txt,添加一行set(CMAKE_POSITION_INDEPENDENT_CODE ON)
mkdir build
cd build
cmake -DREPROC++=ON ..
CFLAGS="-fPIC" make
sudo make install

git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=OFF ..
#理论上上面这行-DBUILD_SHARED_LIBS=OFF可以删掉,直接cmake ..即可
make
sudo make install

git clone https://github.com/openSUSE/libsolv.git
cd libsolv
mkdir build
cd build
cmake .. -DENABLE_STATIC=ON -DENABLE_CONDA=ON
make
sudo make install

sudo apt install ninja-build
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_LIBMAMBA=ON -DBUILD_MAMBA=ON
cmake --build . -j4
sudo cmake --install .

省流一下:编译成功了,但是由于conda-forge的risc-v channel目前是空的,里面啥也没有,所以不能使用mamba create -n pytorch python=3.12创建新环境,等于用不了。

结语

RV 的软件环境还有很长的路要走,但这也正是赛昉科技通过 ICEasy 平台向我们开发者提供 VisionFive2 开发板进行评测的初衷。如果没有赛昉科技和 ICEasy 的支持,以及各领域对 RV 的不懈探索,RISCV 的未来将难以触及。正因为有大家的共同努力,我们坚信,正如《流浪地球2》中的台词所说:“我相信会再次看到蓝天,鲜花挂满枝头。” 在不久的将来,RV 生态必将蓬勃发展,各类 RV 开发板如雨后春笋般涌现,形成一个充满活力与创新的技术生态。这不仅会开启更多应用场景,还将引领全球科技的进步,带来无尽的可能和希望。我们对未来满怀期待,正因为有你们的付出,RISCV 的蓝图才愈加清晰。




全部评论
暂无评论
0/144