RISC-V公测平台发布 · 在SG2042上配置Jupiter+Octave科学计算环境
简介
JupyterHub是一个开源的共享计算平台,它为每个用户管理一个单独的 Jupyter 环境, 可以用于学生班级、企业数据科学小组或科学研究小组。它是一个多用户中心,可以生成、管理和代理多个单用户Jupyter笔记本服务器的实例。
GNU Octave是一种采用高级编程语言的主要用于数值分析的软件。Octave有助于以数值方式解决线性和非线性问题,并使用与MATLAB兼容的语言进行其他数值实验。它也可以作为面向批处理的语言使用。因为它是GNU计划的一部分,所以它是GNU通用公共许可证条款下的自由软件。
本期,我们就来试试Jupyter和Octave组成一个多用户的科学计算平台。
实验材料:
Python 3(如果没有请先安装python3)
pip(如果没有安装请先安装python3-pip)
Octave源代码
一台HS-2服务器
服务器配置:
CPU:SG2042(64核心)
RAM:32GB
硬盘容量:1TB
操作系统:Ubuntu 22.10 (GNU/Linux 6.1.31 riscv64)
实验步骤:
先通过pip安装JupyterHub、JupyterLab和Jupyter Notebook:
pip3 install jupyterhub jupyterlab notebook
生成配置文件(可以根据实际情况对配置文件进行修改):
jupyterhub --generate-config
然后启动jupyterhub:
jupyterhub
或后台运行:
nohup jupyterhub &
浏览器访问[服务器地址]:8000即可,访问后发现虽然我们看到了JupyerHub在运行,但是只有Python3,并没有Octave选项。

因此,我们还需要安装Octave和相关组件。
安装Octave的方式有两种:编译安装和apt安装。
方式1:直接使用apt安装
sudo apt install octave
方式2:编译安装
下载Octave源码包
wget
https://mirror2.sandyriver.net/pub/software/gnu/octave/octave-8.3.0.tar.gz
(如果下载速度慢,可以先提前在自己的电脑上下载好,然后将文件传到服务器上)
解压Octave源码包
tar -xzvf octave-8.3.0.tar.gz
进入Octave源码文件夹
cd octave-8.3.0/

配置:
./configure
编译:
make -j64(线程数根据实际情况来设置)
安装:
sudo make install
运行octave shell,如果出现版本号及提示,就说明安装成功!

安装octave-kernel
pip3 install octave-kernel
安装gnuplot
sudo apt-get install gnuplot
然后重新启动jupyterhub(如果是后台运行请先确保已杀灭所有jupyterhub相关进程再重启):
jupyterhub
或者:
nohup jupyterhub &(后台运行)
然后再次打开浏览器访问[服务器地址]:8000就可以看到Octave笔记了。

我们选择Octave新建笔记。
画一个正弦函数图:
graphics_toolkit("gnuplot");
gnuplot_binary('/usr/bin/gnuplot'); % 设置gnuplot二进制文件的路径,具体路径可能不同
% 生成一组 x 值(从 0 到 2π,间隔为 0.01)
x = 0:0.01:2*pi;
% 计算对应的正弦值
y = sin(x);
% 绘制正弦函数图
plot(x, y);
title("Sin Function"); % 添加标题
xlabel("x"); % 添加 x 轴标签
ylabel("sin(x)"); % 添加 y 轴标签
grid on; % 添加网格线
效果:

画个心形:

其实Octave不仅可以画图,甚至还可以算斐波那契数列。

甚至是算圆周率:

结果提示缺少库。因此我们需要安装symbolic包。
得益于Octave支持安装扩展包,我们可以利用一些扩展包来实现更多功能,让Octave变得更加强大。

进入Octave Shell后,先更新扩展包源,然后再下载并安装symbolic包:
pkg update
pkg install -forge symbolic
再重新尝试运行就可以了:

然后分别测试10、100、1000、10000和100000位:
10位:1.1531 秒
100位:1.155 秒
1000位:1.1567 秒
10000位:1.2044 秒
100000位:3.2812 秒
接下来就是尝试多用户了,虽然Jupyterhub可以使用多用户单个笔记本管理,但是如果需要实现多用户管理,那就需要root账号了。
首先切换到root账号:
su
输入密码后进入以root用户登录,然后回到家目录:
cd
安装相关包:
pip3 install jupyterhub jupyterlab notebook
新建一个jupyerhub文件夹:
mkdir jupyterhub
复制之前的配置文件(可以根据自身情况适当修改)
cp jupyterhub_config.py jupyterhub
或新建配置文件
jupyterhub --generate-config
启动JupyterHub
jupyterhub
以后台形式启动JupyterHub
nohup jupyterhub &
但是其他用户界面里没有Octave,于是我就直接在root用户下安装octave-kernel了。
pip3 install octave-kernel
同时启动三个用户,并计算Pi,并观察耗时,确保三个用户的Octave都处于Busy状态。
结果如下(精准到10万位小数点):
perfxlab01:6.762秒
python01:6.6159秒
python02:6.9564秒
测试下来只有零点几秒的差距,但是相比于单个用户下算圆周率耗时会久一些。
不仅可以使用Octave笔记,也可以使用Octave命令符(Shift+Enter发送命令)。

小贴士:
执行配置或编译时,如果提示缺少所需依赖,请先安装所需依赖然后重新执行配置或编译。
运行代码时,如果提示缺少所需依赖,可以先以root身份登录然后安装所需依赖,然后再重新启动该各个用户的Jupyter服务器(或直接重启整个JupyterHub)即可。
实验总结:
有了JupyterHub的加持,现在HS-2服务器可以成为一个优秀的科学计算平台,再配合上Octave,你不仅可以用JupyterHub上用Python跑科学计算,你还可以使用Octave完成科学计算任务,甚至可以多个用户使用同一个JupyterHub服务器。
参考资料:
JupyterHub页面
https://jupyter.org/hub
Octave官网
https://octave.org/
Octave Packages
https://gnu-octave.github.io/packages/
Configuration Reference — JupyterHub documentation
https://jupyterhub.readthedocs.io/en/stable/reference/config-reference.html
正文完
-
About HS-2
HS-2 RISC-V通用主板是澎峰科技与合作伙伴共同研发的一款专为开发者设计的标准mATX主板,它预装了澎峰科技为RISC-V高性能服务器定制开发的软件包,包括各种标准bencmark、支持V扩展的GCC编译器、计算库、中间件以及多种典型服务器应用程序。
HS-2 RISC-V通用主板搭载了一颗国产RISC-V 64核处理器(SG2042)。SG2042是目前已量产的性能最高的RISC-V处理器,主要针对高性能计算领域需求设计,适用于科学计算、工程计算、AI计算、融合计算等大算力应用场景。

关于RISC-V公共测试平台

RISC-V高性能处理器公共测试云平台 ·快速使用指南,下载链接:https://www.kdocs.cn/l/cmnYcyFIlVRx
-
RISC-V公共测试云平台系列文章
-
RISC-V公测平台发布 ·Stream带宽完整测试
-
RISC-V公测平台发布 · 我的世界MohistMC
-
RISC-V公测平台发布 · 第一个WEB Server“Hello RISC-V world!”
-
RISC-V公测平台发布 ·如何在SG2042上玩转k3s
-
“RISC-V成长日记” blog发布,第一个运行在RISC-V服务器上的blog?
-
RISC-V公测平台发布:如何在SG2042上玩转OpenMPI
-
RISC-V公测平台发布:Compiling The Fedora Linux Kernel Natively on RISC-V
-
RISC-V公测平台发布 · Unix Bench完整测试
-
RISC-V公测平台发布 · 使用YCSB测试SG2042上的MySQL性能
-
RISC-V公测平台发布 · 7-zip 测试
-
RISC-V公测平台发布 · CoreMark测试报告
-
RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估
-
RISC-V公测平台发布 · 在SG2042上配置Jupiter+Octave科学计算环境(本篇)
相关文章:
RISC-V公测平台发布 · 在SG2042上配置Jupiter+Octave科学计算环境
简介 JupyterHub是一个开源的共享计算平台,它为每个用户管理一个单独的 Jupyter 环境, 可以用于学生班级、企业数据科学小组或科学研究小组。它是一个多用户中心,可以生成、管理和代理多个单用户Jupyter笔记本服务器的实例。 GNU Octave是一…...
初识Sentinel
目录 1.解决雪崩的方式有4种: 1.1.2超时处理: 1.1.3仓壁模式 1.1.4.断路器 1.1.5.限流 1.1.6.总结 1.2.服务保护技术对比 1.3.Sentinel介绍和安装 1.3.1.初识Sentinel 1.3.2.安装Sentinel 1.4.微服务整合Sentinel 2.流量控制 2.1.簇点链路 …...
【官方中文文档】Mybatis-Spring #注入映射器
注入映射器 与其在数据访问对象(DAO)中手工编写使用 SqlSessionDaoSupport 或 SqlSessionTemplate 的代码,还不如让 Mybatis-Spring 为你创建一个线程安全的映射器,这样你就可以直接注入到其它的 bean 中了: <bea…...
UG\NX 二次开发 相切面、相邻面的选择控件
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗?” 这个用Block UI的"面收集器"就可以,ufun函数是不行的。 效果: C++语言在UG二次开发中的应用及综合分析 C++ …...
Quartz任务调度框架介绍和使用
一、Quartz介绍 Quartz [kwɔːts] 是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: 1.持久性作业 …...
drools8尝试
drools7升级到drools8有很大很大的变更.几乎不能说是一个项目了. 或者说就是名字相同的不同项目, 初看下来变化是这样 两个最关键的东西都retired了 https://docs.drools.org/8.42.0.Final/drools-docs/drools/migration-guide/index.html business central变成了一个VS code…...
【机器学习】python基础实现线性回归
手写梯度下降的实现ykxb的线性回归 算法步骤: (1)构造数据,y3*x5; (2)随机初始化和,任意数值,例如9,10; (3)计算,,并计算 (4&…...
vue table合并行 动态列名
需求: 1.合并行,相同数据合并 2,根据后端返回数据动态显示列名, 我这个业务需求是,每年增加一列,也就是列名不是固定的,后端返回数据每年会多一条数据,根据返回数据显示列名 实现: html <el-table v-loading"loading" :data"dataList" :span-metho…...
Spring Cloud Alibaba-Nacos Discovery--服务治理
1 服务治理介绍 先来思考一个问题 通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中,这种做法存在许多问题: 一旦服务提供者地址变化&am…...
【C++】unordered_map和unordered_set的使用 及 OJ练习
文章目录 前言1. unordered系列关联式容器2. map、set系列容器和unordered_map、unordered_set系列容器的区别3. unordered_map和unordered_set的使用4. set与unordered_set性能对比5. OJ练习5.1 在长度 2N 的数组中找出重复 N 次的元素思路分析AC代码 5.2 两个数组的交集思路分…...
初识 JVM 01
JVM JRE JDK的关系 JVM 的内存机构 程序计数器 java指令的执行流程: 1 右侧的java源代码编译为左侧的java字节码(右侧第一个方块对应左侧第一个方块) 2 字节码 经过解释器 变为机器码 3 机器码就可以被cpu来执行 程序计数器的作用就…...
FPGA应用学习笔记----I2S和总结
时序一致在慢时序方便得多 增加了时序分布和分析的复杂性 使用fifo会开销大量资源...
归并排序之从微观看递归
前言 这次,并不是具体讨论归并排序算法,而是利用归并排序算法,探讨一下递归。归并排序的特点在于连续使用了两次递归调用,这次我们将从微观上观察递归全过程,从本质上理解递归,如果能看完,你一…...
Pytorch-day07-模型保存与读取
PyTorch 模型保存&读取 模型存储模型单卡存储&多卡存储模型单卡读取&多卡读取 1、模型存储 PyTorch存储模型主要采用pkl,pt,pth三种格式,就使用层面来说没有区别PyTorch模型主要包含两个部分:模型结构和权重。其中模型是继承n…...
【C语言每日一题】01. Hello, World!
题目来源:http://noi.openjudge.cn/ch0101/01/ 01. Hello, World! 总时间限制: 1000ms 内存限制: 65536kB 问题描述 对于大部分编程语言来说,编写一个能够输出“Hello, World!”的程序往往是最基本、最简单的。因此,这个程序常常作为一个初…...
arm: day8
1.中断实验:按键控制led灯 流程: key.h /*************************************************************************> File Name: include/key.h> Created Time: 2023年08月21日 星期一 17时03分20秒***************************************…...
k8s容器加入host解析字段
一、通过edit或path来修改 kubectl edit deploy /xxxxx. x-n cattle-system xxxxx为你的资源对象名称 二、添加字段 三、code hostAliases:- hostnames:- www.rancher.localip: 10.10.2.180...
浅谈开发过程中完善的注释的重要性
第一部分:引言 1.1 简述编程注释的定义和功能 编程注释是一种在源代码中添加的辅助性文字,它不参与编译或执行,但对于理解源代码起着至关重要的作用。注释可以简单地描述代码的功能,也可以详细地解释算法的工作原理、设计决策的…...
Docker 微服务实战
1. 通过IDEA新建一个普通微服务模块 1.1 建Module docker_boot 1.2 改写pom <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&…...
JupyterHub实战应用
一、JupyerHub jupyter notebook 是一个非常有用的工具,我们可以在浏览器中任意编辑调试我们的python代码,并且支持markdown 语法,可以说是科研利器。但是这种情况适合个人使用,也就是jupyter notebook以我们自己的主机作为服务器…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
