基于RISC-V架构的AI框架(Pytorch)适配

这篇具有很好参考价值的文章主要介绍了基于RISC-V架构的AI框架(Pytorch)适配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在RISC-V平台上进行Pytorch源码编译

此次适配的环境是在算能的云空间中(可通过 https://www.sophon.cn/ 申请),适配流程参考了山东大学智研院的博客(原文链接 https://zhuanlan.zhihu.com/p/655277146)并进行了一定的补充。

算能云空间的服务器配置如下所示:
基于RISC-V架构的AI框架(Pytorch)适配,学习笔记,人工智能,risc-v,pytorch
由于算能云空间中缺少基础的python环境以及一些包,因此在适配pytorch框架前需要一些预先的准备工作。

预先准备

由于笔者全程在root下配置,因此命令可不用添加sudo,若未在root下请在命令行前加上sudo,如:sudo apt …

python环境配置

apt install python3
apt install python-is-python3 python-dev-is-python3
apt autoremove
# 下载好python3后发现没有pip、yaml等工具
apt install python3-pip
pip install pyyaml

git安装

apt install git

编译工具链安装

apt install libopenblas-dev libblas-dev m4 cmake cython3 ccache

# 若执行过程中有以下报错,则杀死10198进程:Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 10198 (apt)
kill -9 10198

# 安装过程中,若发现libopenblas-dev无法正常安装,则跳过其直接安装libblas-dev m4 cmake cython3 ccache
apt install libblas-dev m4 cmake cython3 ccache

# libopenblas-dev无法安装的替代方案:手动安装OpenBLAS
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make -j8
sudo make PREFIX=/usr/local/OpenBLAS install
# 进入/etc,用vim打开profile
[在最后一行添加]: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/OpenBLAS/lib/
source /etc/profile

源码获取

# 首先进入/root/yourname目录,再克隆pytorch源码
# 由于网络问题可能无法下载好所有的包,但执行之后的git submodule update --init --recursive会将未下好的包重新clone
git clone --recursive https://github.com/pytorch/pytorch.git
cd pytorch
# 确保子模块的远程仓库URL与父仓库中的配置一致
git submodule sync
# 确保获取并更新所有子模块的内容,包括初始化尚未初始化的子模块并递归地处理嵌套的子模块
git submodule update --init --recursive

Commit 文件修改

本节中需要用到Vim对一些文件进行修改,涉及到的Vim操作主要有:

  • Vim打开文件:vim filename
  • Vim搜索:使用 / 向前搜索,使用 ? 向后搜索,搜索后按 Enter 定位
  • Vim编辑:使用 shift+i 进入编辑模型,使用 Esc 退出编辑模式
  • Vim保存:使用 :wq 保存并退出
  1. aten/src/ATen/CMakeLists.txt
将语句:if(NOT MSVC AND NOT EMSCRIPTEN AND NOT INTERN_BUILD_MOBILE)
替换为:if(FALSE)
  1. caffe2/CMakeLists.txt
将语句:target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 sleef gtest_main)
替换为:target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 gtest_main)
  1. test/cpp/api/CMakeLists.txt
在语句下:add_executable(test_api ${TORCH_API_TEST_SOURCES})
添加:target_compile_options(test_api PUBLIC -Wno-nonnull)

环境变量配置

# 直接在终端中输入即可,重启需要重新输入
export USE_CUDA=0
export USE_DISTRIBUTED=0
export USE_MKLDNN=0
export MAX_JOBS=16

编译

python3 setup.py develop --cmake

编译及引用过程可能会遇到的问题

  • Could not find any of CMakeLists.txt, Makefile, setup.py, LICENSE, LICENSE.md, LICENSE.txt in /root/xxx/pytorch/third_party/pthreadpool

问题来源:编译过程

问题分析:由于网络的问题,clone仓库时有部分包未成功下载,导致文件夹为空

解决方法:重新下载对应包

  1. 进入third_party目录
  2. 在终端执行以下指令
rm -rf pthreadpool
# 执行下列指令前回退到pytorch目录
git submodule update --init --recursive

  • /usr/bin/ld: /root/xxx/pytorch/build/lib/libtorch_cpu.so: undefined reference to `__atomic_exchange_1’
    collect2: error: ld returned 1 exit status

问题来源:编译过程

问题分析:对__atomic_exchange_1的未定义引用

解决方法:使用patchelf添加需要的动态库

# path为存放libtorch_cpu.so的路径
patchelf --add-needed libatomic.so.1 /path/libtorch_cpu.so
# 若提示无patchelf命令,则执行下列语句
apt install patchelf

  • Error in cpuinfo: processor architecture is not supported in cpuinfo

问题来源:编译完成后,使用python时“import torch”报错

问题分析:git clone时下载的cpuinfo不支持Risc-V架构

解决方法:删除当前存在的cpuinfo并重新下载最新支持Risc-V架构的cpuinfo

  1. cpuinfo路径为pytorch/third_party/cpuinfo,因此先进入pytorch/third_party目录
  2. 在终端执行以下指令
rm -rf cpuinfo
git clone https://github.com/sophgo/cpuinfo.git
# clone完成后需要重新编译
python3 setup.py develop --cmake

深度学习模型实例

本节提供了一个简单的全连接神经网络模型的实例,可用于测试环境是否能正常运行并输出损失值

运行前置文章来源地址https://www.toymoban.com/news/detail-812866.html

  1. 在pytorch目录下创建一个文件:touch sample.py
  2. 使用vim打开touch sample.py并将以下代码复制进文件中并保存
import torch
import torch.nn as nn
import torch.optim as optim
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

N,D_in,H,D_out = 64, 1000, 100, 10 # N: batch size, D_in:input size, H:hidden size, D_out: output size
x = torch.randn(N,D_in) # x = np.random.randn(N,D_in)
y = torch.randn(N,D_out) # y = np.random.randn(N,D_out)
w1 = torch.randn(D_in,H) # w1 = np.random.randn(D_in,H)
w2 = torch.randn(H,D_out) # w2 = np.random.randn(H,D_out)
learning_rate = 1e-6
for it in range(200):
    # forward pass
    h = x.mm(w1) # N * H      h = x.dot(w1)
    h_relu = h.clamp(min=0) # N * H     np.maximum(h,0)
    y_pred = h_relu.mm(w2) # N * D_out     h_relu.dot(w2)  
    # compute loss
    loss = (y_pred - y).pow(2).sum() # np.square(y_pred-y).sum()
    print(it,loss.item()) #  print(it,loss)    
    # BP - compute the gradient
    grad_y_pred = 2.0 * (y_pred-y)
    grad_w2 = h_relu.t().mm(grad_y_pred) # h_relu.T.dot(grad_y_pred)
    grad_h_relu = grad_y_pred.mm(w2.t())  # grad_y_pred.dot(w2.T)
    grad_h = grad_h_relu.clone() # grad_h_relu.copy()
    grad_h[h<0] = 0
    grad_w1 = x.t().mm(grad_h) # x.T.dot(grad_h)    
    # update weights of w1 and w2
    w1 -= learning_rate * grad_w1
    w2 -= learning_rate * grad_w2
  1. 运行文件:python3 touch sample.py

到了这里,关于基于RISC-V架构的AI框架(Pytorch)适配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RISC-V架构的开源处理器分析

    摘要: RISC-V架构本身面积小、性能较高,最为关键的是这一架构本身功耗较低且作为全新的开源精简指令集,无论是技术还是产品都得到了迅速的发展,效果突出。基于此,本文深入研究RISC-V架构开源处理器内部情况,明确不同模块的功能以及运行方式,并且围绕着实际案例

    2024年02月06日
    浏览(44)
  • RISC-V/ARM mcu OpenOCD 调试架构解析

    最近有使用到risc-v的单片机,所以了解了下risc-v单片机的编译与调试环境的搭建,面试时问到risc-v的调试可参看以下内容。 risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上调试器)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫

    2024年04月28日
    浏览(40)
  • cpu架构(x86、ARM、RISC-V、MIPS、loongarch)

    CPU架构(也称为处理器架构)是指计算机处理器的设计和组织结构。不同的 CPU 架构由不同的指令集架构和执行方式组成,影响了其性能、功耗、兼容性和适用场景。同时不同的 CPU 架构适用于不同的场景和需求,在选择 CPU 时,需要考虑到性能、功耗、成本和应用兼容性等因

    2024年04月08日
    浏览(46)
  • 【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

    核心板:GW2A-LV18PG256C8IC8I7 底板:Dock底板 有关核心板和底板相关资料的参考网址:Tang Primer 20K - Sipeed Wiki  FPGA硬件设计软件:高云云源软件;下载地址:广东高云半导体科技股份有限公司 PicoRV32描述,以及文档介绍详情见网址PicoRV32 - 高云 - 广东高云半导体科技股份有限公司

    2023年04月09日
    浏览(41)
  • 主流的芯片架构x86,Arm,MIPS,Power,RISC-V

    x86架构: 特点:x86架构是一种 复杂指令集计算机(CISC)架构 ,具有广泛的软件和生态系统支持。它在个人计算机和服务器领域占据主导地位,提供高性能和广泛的兼容性。X86和ARM架构最本质的区别在于复杂指令集和精简指令集。主要面向家用、商用领域,在 性能和兼容性

    2024年02月07日
    浏览(45)
  • 6.S081——补充材料——RISC-V架构中的异常与中断详解

    我在阅读Xv6源码过程中对很多概念感到困惑,想到也许会有其他人对此秉持同样的困惑,所以我将我的研究和学习过程总结下来并编篡成如下的博客。本篇博客想对RISC-V标准中有关中断和异常的概念进行一个梳理,考虑RISC-V标准的实现灵活性,我们必须结合一个具体的平台来

    2024年02月12日
    浏览(40)
  • 从零学习开发一个RISC-V操作系统(四)丨RISC-V汇编语言编程

       本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记,计划从RISC-V的底层汇编指令学起,结合C语言,在Ubuntu 20.04上开发一个简易的操作系统。一个目的是通过实践操作学习和了解什么是操作系统,第二个目的是为之后学习RISC-V的集成电路设计打下一定基础

    2024年01月25日
    浏览(53)
  • RISC-V指令集架构------RV32F/RV32D浮点扩展指令集

        RV32D和RV32F是RISC-V指令集架构中的浮点扩展指令,用于支持浮点运算。其中,RV32D是双精度浮点扩展指令,而RV32F是单精度浮点扩展指令。在RISC-V中,浮点扩展指令是可选的,需要根据具体应用场景来选择是否使用。如果应用场景需要进行浮点运算,那么就需要使用RV32D和

    2024年02月08日
    浏览(38)
  • 【【萌新编写risc-v之软件的学习使用】】

    对于vscode我其实没什么好说的 就是先配置好环境 其实vscde作为一个编译器的软件 其实并不需要指望能往里面加载多少功能 我们需要做的就是赋予编辑器更好用的功能和体验 有些人会在vscode里面甚至加入波形 仿真 我觉得不如交给 vivado来用 在vscode里面需要完成的通过暂时的

    2024年02月08日
    浏览(33)
  • 基于硬件隔离增强risc-v调试安全2_安全提议

    安全之安全(security²)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明:本文参考RISC-V 2023中国峰会如下议题,版权归原作者所有。

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包