From 2cefd1f11f539463db416e8c17483130a0093efa Mon Sep 17 00:00:00 2001 From: chn Date: Mon, 4 Aug 2025 22:16:01 +0800 Subject: [PATCH] --- main.typ | 84 +++++++++++++++++++++++++++++++++++++------------------- meme.jpg | 4 +-- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/main.typ b/main.typ index 38f98e6..1e6e195 100644 --- a/main.typ +++ b/main.typ @@ -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年起主力使用Linux,Deepin #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年起主力使用Linux,Deepin #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上用来绕过学校多设备检测的内核模块。 - 科学计算(HPC):2020年硕士入组开始接触,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环境) diff --git a/meme.jpg b/meme.jpg index 1f2c87d..770edd7 100644 --- a/meme.jpg +++ b/meme.jpg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22b0648ef36c09fc9dfbd02af7821168600bd7c6fea9f8bbad4d9907fdf3b6ba -size 109768 +oid sha256:118f7966e39243b6c188dd0d7e54f8d1bc21c1bd9f5b33580275a4dae7125942 +size 107396