This commit is contained in:
2025-08-04 22:16:01 +08:00
parent e401ebbfef
commit 2cefd1f11f
2 changed files with 57 additions and 31 deletions

View File

@@ -6,7 +6,7 @@
#show: project.with(
title: "在科学计算中使用Nix",
sub-title: "非CS专业人士的使用经验与困难",
sub-title: "实战经验与挑战",
author: "陈浩南",
date: "2025-08-09",
index-title: "目录",
@@ -17,56 +17,82 @@
lang: "zh",
)
= 背景介绍
// 默认的字体太小
#show raw: set text(font: "Fira Code", size: 18pt)
== 个人Linux使用经验
= 自我介绍与背景介绍
- 桌面2018年起主力使用LinuxDeepin #sym.arrow Arch #sym.arrow Gentoo #sym.arrow NixOS (2023-05-28)
- 服务器VPS差不多时间OpenWRT #sym.arrow Ubuntu #sym.arrow Arch #sym.arrow Gentoo #sym.arrow NixOS
== 使用过的发行版
- 桌面用于日常工作2018年起主力使用LinuxDeepin #sym.arrow Arch #sym.arrow Gentoo #sym.arrow NixOS (2023-05-28)
- 服务器VPS用于运行个人网站/服务差不多时间OpenWRT #sym.arrow Ubuntu #sym.arrow Arch #sym.arrow Gentoo #sym.arrow NixOS
- xmurp-ua: OpenWRT上用来绕过学校多设备检测的内核模块。
- 科学计算HPC2020年硕士入组开始接触Gentoo + Ubuntu #sym.arrow NixOS (2023-09)
== 科学计算现状
== 科研方向与HPC特点
- 组内主要研究宽禁带半导体,我个人主要做*第一性原理计算*
- 仅利用最基础的物理原理(量子力学)计算材料物理性质,原则上不引入经验值。
- 核心步骤是求解一些很大的矩阵的特征值(矩阵行列大约几万),*计算量大*
- 相比于个人电脑或个人服务器要使用的HPC高性能计算集群环境有以下特点
- 多节点*共享文件系统*我们使用NFS
- 用户不直接运行科学计算程序,而是提交任务到*队列系统*我们使用SLURM队列系统视情况在合适的时机分配计算资源CPU/GPU/内存等)并执行计算。
- 用户不懂Linux由一个人准备好环境之后的操作尽量做到*有手就行*
- 需要针对特定CPU优化`march=xxx`),自己编译不可避免。
== 科学计算现状(仅身边统计学)
#columns-content(colwidths: (1fr, 1.8fr))[
#figure(
image("meme.jpg", width: 100%)
)
- *复古*的包管理手动修改Makefile指定编译器/参数/库路径。
- *随意*编程无视标准、能用就行C/C++不分Fortran/MPI只有特定编译器能编译
][
- *复古*包管理手动收集依赖手动修改Makefile指定编译器/参数/库路径
- *随意*的编程习惯无视标准、能用就行C/C++不分Fortran只有特定编译器能编译。
- *闭源*的编译器Intel OneAPI / NVIDIA HPC SDK。
- *混乱*的用户权限:超算共用账户,小组随意`sudo make install`
- *混乱*的用户权限:多人共用一个账户
]
== 我们需要更多的可复现
== 科学计算需要Nix来拯救
// #columns-content(
// figure(image("nix-snowflake-colours.svg", width: 10%)),
// figure(image("nix-snowflake-colours.svg", width: 10%)),
// figure(image("nix-snowflake-colours.svg", width: 10%))
// )
#figure(
image("更多的.png", width: 120%)
)
#figure(image("更多的.png", width: 120%))
= 切换到Nix/NixOS解决的问题
= Nix / NixOS解决的问题
== 切换到Nix/NixOS后解决的问题
== 编译软件更方便
- 方便打补丁、魔改软件,无需研究具体软件的编译流程:
- 远超其它发行版的软件包数量。
- Nix: 100k+, Arch: 70k+, Ubuntu: 39k+, CentOS: 2k+
- 数据来自 repology.org
- 即使没有,只要上游代码标准,也可以方便地打包。
- 需要打补丁?一句代码就行了。
```
xxx = prev.xxx.overrideAttrs (prev: patches = prev.patches or [] ++ [ ./my.patch ])
some-package = prev.some-package.overrideAttrs (prev: patches = prev.patches or [] ++ [ ./my.patch ])
```
- 编译/运行环境可复现:
- “你遇到的问题网上肯定也有人遇到过。Gentoo除外。”
- 再也不会忘记自己去年配置的服务是怎么配置的了。
- 跨服务/跨机器共享配置
- 多机器、多版本,不需要手动重复构建。
// TODO举个例子
== 配置环境和服务更简单仅NixOS
// TODO: highlight code
- SLURM、NFS 等都有模块。
- 配置文件可跨服务/软件、跨用户、跨机器联动不需要担心配置修改不同步。e.g.:
- 多台机器的 SLURM 配置文件均由一个 Nix 文件生成SLURM 和其它相关程序的配置由一个模块生成。
- 多用户共用 home-manager 配置文件。
- 多台机器之间 wireguard VPN 的配置文件由一个 Nix 文件生成。
= 困难与挑战
== 闭源编译器和 stdenv
= 尚待解决的问题
== 尚待解决的问题
== 无root权限安装nix
- 闭源编译器和 stdenv
- 无root权限安装nix
- FHSStdenv
- impermanence /home-manager 与共享文件系统
== impermanence / home-manager 与共享文件系统
== FHSStdenv构建时FHS环境

BIN
meme.jpg LFS

Binary file not shown.