手把手教你用算能云空间搭建PyTorch-RISC-V开发环境(附性能对比)
在算能云空间实战构建与优化RISC-V原生PyTorch环境最近几年RISC-V架构以其开放、灵活的特性在嵌入式、边缘计算乃至数据中心领域都激起了不小的波澜。对于从事人工智能和机器学习开发的我们来说一个绕不开的问题是主流的AI框架能否在这片新兴的架构土壤上顺畅运行性能表现又如何这不仅仅是技术好奇心的驱使更关乎未来技术栈的选型和架构迁移的可行性评估。今天我们就以算能云空间提供的RISC-V服务器为实战平台进行一次从零开始的PyTorch环境搭建深度探索。这不仅仅是一次简单的“安装指南”我们将深入编译过程的细节剖析在非x86/ARM架构上构建复杂软件栈可能遇到的“坑”并最终通过实际的基准测试对比不同架构下的性能表现为你的技术决策提供一手参考。无论你是云计算架构师、AI框架研究者还是对异构计算充满兴趣的开发者这篇文章都将提供一条清晰的实践路径。1. 算能云空间环境初探与基础准备算能云空间为开发者提供了宝贵的RISC-V硬件访问入口这让我们无需自备昂贵的开发板就能进行实验。申请并通过后你会获得一个纯净的Linux服务器环境。与我们熟悉的x86_64或ARM64环境不同第一步就是认清“战场”。登录后首先通过几条命令了解系统概况uname -a cat /etc/os-release lscpu输出会明确告诉你这是一个运行着某版本Linux的RISC-V 64位机器。处理器核心数、缓存大小等信息是后续编译时决定并行任务数-j参数的重要依据。通常云服务器可能预装的基础软件有限我们的搭建之旅就从这里开始。注意全程操作建议在普通用户下进行并使用sudo提权而非直接使用root账户这符合生产环境的安全最佳实践。下文命令如无特殊说明均假设已具备sudo权限。基础依赖的安装是确保编译流程畅通的基石。RISC-V架构的软件源可能不如主流架构丰富但常见的开发工具大多可用。# 更新软件包列表并升级现有软件 sudo apt update sudo apt upgrade -y # 安装Python3及必要的符号链接 sudo apt install -y python3 python3-pip python-is-python3 # 安装版本控制与核心编译工具链 sudo apt install -y git build-essential cmake m4 ccache ninja-build # 安装数学库与Python开发依赖 sudo apt install -y libopenblas-dev libblas-dev liblapack-dev cython3这里可能会遇到第一个挑战某些软件包如特定版本的libopenblas-dev在仓库中不可用或安装冲突。如果apt安装libopenblas-dev失败不必惊慌我们可以从源码编译这个高性能数学库这往往能获得更好的兼容性。git clone https://github.com/xianyi/OpenBLAS.git cd OpenBLAS make -j$(nproc) NO_STATIC1 sudo make PREFIX/usr/local install sudo ldconfig编译安装完成后需要让系统知道到哪里找到这个库。将OpenBLAS的库路径添加到动态链接器的搜索路径中echo export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc至此一个支持RISC-V的基础开发环境就准备就绪了。接下来我们将进入核心环节——获取并编译PyTorch源码。2. PyTorch源码获取与针对性修改PyTorch是一个庞大的项目包含众多子模块submodule。在RISC-V架构上确保所有子模块正确获取是成功编译的第一步。# 选择一个工作目录克隆主仓库 git clone --recursive https://github.com/pytorch/pytorch.git cd pytorch由于网络问题递归克隆可能不完整。执行以下命令来同步和更新所有子模块是至关重要的一步git submodule sync --recursive git submodule update --init --recursive --progress这个过程可能会比较耗时需要耐心等待。完成后我们就拥有了一份完整的PyTorch源码树。PyTorch的构建系统CMake需要针对RISC-V架构进行一些特定的调整。这些修改主要是为了规避某些在当前架构上不支持的编译选项或测试用例。请务必理解每一处修改的意图而不是盲目复制。修改一调整ATen库的编译条件文件路径aten/src/ATen/CMakeLists.txt我们需要找到一行关于特定编译条件判断的语句。其目的是在非Windows、非WebAssembly且非移动端构建时启用某些特性。但在RISC-V上其中依赖的某个底层库如SLEEF向量数学库可能尚未完全适配导致链接错误。一个稳妥的做法是暂时关闭这个条件分支。 找到类似if(NOT MSVC AND NOT EMSCRIPTEN AND NOT INTERN_BUILD_MOBILE)的行将其替换为if(FALSE)。这相当于注释掉了该if块内的所有内容避免引入不兼容的依赖。修改二链接器参数调整文件路径caffe2/CMakeLists.txt在链接某些测试可执行文件时可能会显式链接sleef库。由于上述原因我们可以将其从链接列表中移除。 找到包含target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 sleef gtest_main)的语句将其中的sleef移除改为target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 gtest_main)。修改三抑制特定编译警告文件路径test/cpp/api/CMakeLists.txtRISC-V的GCC编译器可能对某些代码指针检查更为严格。为了避免将警告视为错误导致编译中断我们可以为特定的测试目标添加编译选项。 在add_executable(test_api ${TORCH_API_TEST_SOURCES})语句之后添加一行target_compile_options(test_api PUBLIC -Wno-nonnull)。这些修改是特定于环境和编译器版本的。如果未来PyTorch官方或社区完善了RISC-V支持这些步骤可能就不再需要。3. 配置环境变量与执行编译编译前的配置主要通过环境变量来完成它们告诉构建系统启用或禁用哪些功能模块。对于RISC-V平台尤其是当前没有GPU加速的情况配置可以简化。# 设置关键环境变量 export USE_CUDA0 # 禁用CUDANVIDIA GPU export USE_ROCM0 # 禁用ROCmAMD GPU export USE_DISTRIBUTED0 # 禁用分布式训练简化首次编译 export USE_MKLDNN0 # 禁用Intel MKL-DNN加速库 export USE_NNPACK0 # 禁用NNPACK export USE_QNNPACK0 # 禁用QNNPACK export MAX_JOBS$(nproc) # 使用所有CPU核心并行编译将这些变量写入你的shell配置文件如~/.bashrc可以避免每次重新设置。其中MAX_JOBS设置为你的CPU核心数可以极大加快编译速度。接下来是核心的编译命令。PyTorch提供了几种构建方式我们使用develop模式它会在源码目录进行“就地”构建和安装便于后续的修改和调试。# 进入pytorch源码根目录 cd /path/to/your/pytorch # 执行编译安装 python3 setup.py develop --cmake这个命令会触发CMake配置和漫长的编译过程。在算能云空间的RISC-V服务器上由于处理器主频和核心数可能与高端x86服务器有差距整个过程可能需要数小时。期间控制台会输出大量的编译信息。编译过程中常见问题与解决方案子模块缺失错误Could not find any of CMakeLists.txt, Makefile, setup.py...原因git submodule update未完全成功某些第三方依赖目录为空。解决进入报错提示的第三方目录如third_party/pthreadpool删除空文件夹然后回到PyTorch根目录重新执行git submodule update --init --recursive。原子操作链接错误/usr/bin/ld: ... undefined reference to __atomic_exchange_1原因编译器在链接时找不到某些硬件原子操作的软件实现libatomic。解决安装patchelf工具并手动将libatomic.so库添加到有问题的共享对象中。sudo apt install patchelf # 找到编译生成的libtorch_cpu.so文件路径通常在build/lib/下 patchelf --add-needed libatomic.so.1 /path/to/pytorch/build/lib/libtorch_cpu.so之后需要重新执行部分链接步骤有时重新运行python3 setup.py develop --cmake即可。cpuinfo架构不支持错误编译成功但在Python中import torch时报错Error in cpuinfo: processor architecture is not supported in cpuinfo。原因PyTorch依赖的cpuinfo库的子模块版本较旧未包含RISC-V架构检测代码。解决替换为支持RISC-V的cpuinfo版本。算能社区提供了适配后的版本。# 进入第三方目录移除旧的cpuinfo cd /path/to/pytorch/third_party rm -rf cpuinfo # 克隆适配后的仓库请确认该仓库持续维护 git clone https://github.com/sophgo/cpuinfo.git # 返回根目录重新编译这次通常很快只涉及重新链接 cd /path/to/pytorch python3 setup.py develop --cmake当编译最终顺利完成且import torch不再报错时恭喜你一个原生运行在RISC-V架构上的PyTorch环境就已经构建成功了。4. 功能验证与简易性能基准测试环境搭建完成我们必须验证其基本功能是否正常并建立一个初步的性能认知。让我们从一个经典的简单神经网络开始。创建一个测试脚本test_riscv.pyimport torch import torch.nn as nn import torch.optim as optim import time print(fPyTorch version: {torch.__version__}) print(fRunning on RISC-V: {torch.__file__}) print(fCUDA available: {torch.cuda.is_available()}) # 应为False # 定义一个简单的全连接网络 class SimpleNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleNN, self).__init__() self.fc1 nn.Linear(input_size, hidden_size) self.relu nn.ReLU() self.fc2 nn.Linear(hidden_size, output_size) def forward(self, x): x self.fc1(x) x self.relu(x) x self.fc2(x) return x # 设置超参数 batch_size 64 input_size 1000 hidden_size 100 output_size 10 num_epochs 100 # 创建模型、损失函数和优化器 model SimpleNN(input_size, hidden_size, output_size) criterion nn.MSELoss() optimizer optim.SGD(model.parameters(), lr0.01) # 生成随机数据 device torch.device(cpu) X torch.randn(batch_size, input_size, devicedevice) y torch.randn(batch_size, output_size, devicedevice) # 训练循环与计时 model.train() start_time time.time() for epoch in range(num_epochs): optimizer.zero_grad() outputs model(X) loss criterion(outputs, y) loss.backward() optimizer.step() if (epoch1) % 20 0: print(fEpoch [{epoch1}/{num_epochs}], Loss: {loss.item():.4f}) end_time time.time() print(f\nTraining completed on RISC-V.) print(fTotal time for {num_epochs} epochs: {end_time - start_time:.2f} seconds) print(fAverage time per epoch: {(end_time - start_time)/num_epochs:.4f} seconds)运行这个脚本python3 test_riscv.py。如果能看到损失值逐渐下降并输出训练时间说明PyTorch的基本前向传播、反向传播和优化器功能都是正常的。性能对比的维度与思考单纯的运行时间数字意义有限。一个更有价值的实践是在算能云空间的RISC-V服务器和另一台x86_64架构的云服务器例如相同内存配置的通用计算型实例上运行完全相同的测试脚本。你需要控制变量软件环境尽可能使用相同版本的Linux发行版、Python、PyTorch在x86上通过pip安装官方预编译版。测试脚本完全一致。运行状态确保服务器在测试期间没有其他重负载。你可以设计一个更全面的微基准测试集涵盖不同操作测试操作描述目的张量创建与运算大规模矩阵乘法、逐元素运算测试基础算力和BLAS库效率小规模前向传播运行一个轻量级CNN或Transformer层测试框架算子调度的开销数据加载与预处理使用DataLoader加载虚拟数据集测试CPU与内存交互效率训练循环吞吐量固定批次大小下的平均每轮迭代时间综合性能指标在x86服务器上你可能需要安装对应的OpenBLAS或使用Intel MKL以获得最佳性能。将两边结果记录在表格中进行对比测试项RISC-V 平台 (算能云)x86_64 平台 (对比云)备注 (如核心数、主频)矩阵乘法 (1024x1024)耗时 X 秒耗时 Y 秒RISC-V: 核心A, 频率B GHz简单NN训练 (100轮)耗时 X 秒耗时 Y 秒x86: 核心C, 频率D GHz内存带宽测试速率 X GB/s速率 Y GB/s使用torch.randn等测试这样的对比能直观地揭示在当前发展阶段RISC-V在通用AI计算任务上与成熟架构的差距所在——可能是主频、内存带宽、矢量指令集扩展的支持程度或者是编译器优化的成熟度。更重要的是它能帮助你判断对于特定的边缘推理或特定负载RISC-V方案是否已具备可行性。整个环境搭建和测试过程最耗时的部分往往是首次编译和问题排查。一旦成功你就拥有了一个宝贵的RISC-V原生AI开发与测试环境。这个环境可以用来验证模型在RISC-V上的正确性探索针对该架构的算子优化或者评估未来将AI负载迁移到RISC-V集群的潜在收益与挑战。

相关新闻

Python办公自动化:openpyxl如何准确获取Excel数据列数(附真实案例代码)

Python办公自动化:openpyxl如何准确获取Excel数据列数(附真实案例代码)

Python办公自动化:openpyxl如何准确获取Excel数据列数(附真实案例代码) 你是否曾满怀信心地用Python脚本处理一个Excel文件,结果却发现ws.max_column返回的列数远大于实际有数据的列数?这并非个例,而是许多…

2026/5/17 9:01:36 阅读更多 →
西门子S7-1200模拟量模块实战:从选型到编程的完整避坑指南

西门子S7-1200模拟量模块实战:从选型到编程的完整避坑指南

西门子S7-1200模拟量模块实战:从选型到编程的完整避坑指南 在工业自动化现场,模拟量信号的处理常常是项目成败的关键细节之一。它不像数字量那样非0即1,而是充满了“灰度地带”——一个微小的电压波动、一段不规范的接线、一次错误的量程选择…

2026/7/6 3:13:24 阅读更多 →
RISC-V函数调用实战:如何用s0-s11寄存器优化你的嵌入式代码?

RISC-V函数调用实战:如何用s0-s11寄存器优化你的嵌入式代码?

RISC-V嵌入式开发实战:巧用保留寄存器提升代码性能与稳定性 在资源受限的嵌入式系统中,每一字节内存、每一个时钟周期都弥足珍贵。RISC-V架构以其精简、模块化的设计理念,为嵌入式开发提供了极佳的灵活性,但同时也对开发者的寄存器…

2026/7/5 4:30:28 阅读更多 →

最新新闻

实战解析:高效构建Suno AI音乐生成API的完整指南

实战解析:高效构建Suno AI音乐生成API的完整指南

实战解析:高效构建Suno AI音乐生成API的完整指南 【免费下载链接】Suno-API Create Music in Seconds with SunoAPI. 项目地址: https://gitcode.com/GitHub_Trending/su/Suno-API Suno-API是一个基于Python和FastAPI的非官方音乐生成API服务,专…

2026/7/6 18:40:19 阅读更多 →
Docker Compose部署docker-http-https-echo最佳实践:完整配置指南

Docker Compose部署docker-http-https-echo最佳实践:完整配置指南

Docker Compose部署docker-http-https-echo最佳实践:完整配置指南 【免费下载链接】docker-http-https-echo Docker image that echoes request data as JSON; listens on HTTP/S, useful for debugging. 项目地址: https://gitcode.com/gh_mirrors/do/docker-htt…

2026/7/6 18:38:17 阅读更多 →
Docker管理新革命:Dockge可视化容器编排完整指南

Docker管理新革命:Dockge可视化容器编排完整指南

Docker管理新革命:Dockge可视化容器编排完整指南 【免费下载链接】dockge A fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager 项目地址: https://gitcode.com/GitHub_Trending/do/dockge 厌倦了复杂的Docker命令行…

2026/7/6 18:36:14 阅读更多 →
终极指南:如何用Serial-Studio让串行数据“开口说话“?[特殊字符]

终极指南:如何用Serial-Studio让串行数据“开口说话“?[特殊字符]

终极指南:如何用Serial-Studio让串行数据"开口说话"?🚀 【免费下载链接】Serial-Studio Open-source telemetry dashboard. Supports UART, BLE, MQTT, Modbus, CAN Bus and more. 项目地址: https://gitcode.com/GitHub_Trendi…

2026/7/6 18:36:14 阅读更多 →
【Java毕业设计】基于 SpringBoot 的大学生运动会报名成绩管理系统的设计与实现 基于前后端分离的高校体育赛事组织管理系统(源码+文档+远程调试,全bao定制等)

【Java毕业设计】基于 SpringBoot 的大学生运动会报名成绩管理系统的设计与实现 基于前后端分离的高校体育赛事组织管理系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/6 18:34:13 阅读更多 →
Halcon 像素当量标定:5个常见误区与3步精度验证方案

Halcon 像素当量标定:5个常见误区与3步精度验证方案

Halcon 像素当量标定:5个常见误区与3步精度验证方案在工业视觉检测项目中,像素当量标定的准确性直接影响着尺寸测量的精度。许多工程师完成标定后,常对结果可靠性存疑——标定板倾斜5会带来多大误差?标定参数在不同位置能否保持一…

2026/7/6 18:32:10 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻