Files
nixos-cn-meetup-presentation/main.typ
2025-08-05 19:55:29 +08:00

123 lines
5.3 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#import "@preview/minimal-presentation:0.6.0": *
#import "@preview/xarrow:0.3.1": xarrow, xarrowSquiggly, xarrowTwoHead
// 中文使用思源宋体,英文使用 Times New Roman
#set text(font: ("Times New Roman", "Source Han Serif SC"))
#show raw: set text(font: "Fira Code")
#show: project.with(
title: "在科学计算中使用Nix",
sub-title: "实战经验与挑战",
author: "陈浩南",
date: "2025-08-09",
index-title: "目录",
logo: image("./nix-snowflake-colours.svg"),
logo-light: image("./nix-snowflake-white.svg"),
cover: image("./DSC_0210.JPG"),
main-color: rgb("#3e5c98"),
lang: "zh"
)
// 默认的字体太小
#show raw: set text(size: 18pt)
= 自我介绍
== 使用过的发行版
- 桌面用于日常工作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上用来绕过学校多设备检测的内核模块。
- 科学计算2020年硕士入组开始接触Gentoo + Ubuntu #sym.arrow NixOS (2023-09)
== 科研方向
- 组内主要研究宽禁带半导体AlGaInN/SiC 等)。
- 我个人主要做第一性原理计算,兼职管理组里服务器和超算环境。
- 第一性原理:从最基础的物理原理(量子力学)出发,原则上不引入经验值,计算材料的结构、物理性质、特定条件下的变化,等。
= 科学计算在实践中面临的困难与基于Nix的解决方案
== 科学计算特点
- 相比于个人电脑的桌面环境或个人服务器,科学计算的环境有*两个特殊需求*
- 计算量大、经费有限,需要尽可能#text(red)[*高性能*]
- 使用者非CS专业或爱好者缺少相关技能需要#text(green)[*易于使用和维护*]
- 矛盾:#text(red)[*高性能*] 导致需要特殊的硬/软件配置,进一步导致难以实现 #text(green)[*易于使用和维护*]
== 科学计算现状
#columns-content(colwidths: (2.3fr, 1fr))[
#text(red)[*高性能*] #text(green)[*易于使用和维护*] 的矛盾,导致通常的实践中充满了妥协与历史遗留……
#set text(18pt)
- *复古*的包管理手动收集依赖手动修改Makefile指定编译器/参数/库路径。
- *随意*的编程习惯无视标准、能用就行C/C++不分Fortran只有特定编译器能编译。
- *闭源*的编译器Intel (OneAPI)Nvidia (HPC SDK)。
- *混乱*的用户权限:多人共用一个账户,一人负责配置环境、多人使用。
#text(15pt, gray)[\*仅身边统计学没有diss别的组的意思]
][
#figure(
image("meme.jpg", width: 120%),
)
]
== 我们需要更多的可复现!
#figure(image("更多的.png", width: 90%))
如果能够一次编程、到处部署,该多好!
== Nix / NixOS的优势
- 编译软件超方便
- 远超其它发行版的软件包数量Nix: 100k+, Arch: 70k+, Ubuntu: 39k+, CentOS: 2k+
- 方便打新包/打补丁,多机器、多版本,不需要手动重复构建。
- 配置服务不易错
- SLURM、NFS 等都有现成模块。
- 配置文件可跨服务/软件、跨用户、跨机器联动,不需要担心配置修改不同步。
== 我们的配置
- 在小组内、有完整权限的小集群上,使用 NixOS
- 使用 NFS 在多节点间共享 `/home`;下层使用 Btrfs 透明压缩/RAID1。
- 队列系统使用 SLURM。MPI 尽量使用 OpenMPI、尽量用 `srun` 启动,以正确绑定 MPI进程/OpenMP线程到CPU核心。
- 打包 Nvidia HPC SDKIntel OneAPI 编译器取自 bscpkgs 并略作修改。
- 针对特定 CPU 优化(`hostPlatform.gcc.arch`。nixpkgs 半年更新一次,期间 cherry-pick 个别提交。
- 在没有 root 权限的集群上:
- 使用特别的 store path例如`~/.nix/store`),在 NixOS 上编译好再上传。
= 开放性问题与展望
== 闭源编译器和 stdenv
- 闭源编译器是必需的,但在 nixpkgs 中没有打包。现有的打包能工作,但质量还不足以合并到 nixpkgs 中。
- Nvidia HPC SDKcc wrapper 中有许多传递给 gcc 的参数 nvfortran 不识别,报警告;与现有 CUDA 兼容性不清楚。
- Intel OneAPIbscpkgs 里只有老版本;简单替换源无法更新到新版本。
- OpenMPInixpkgs 中的打包需要略作修改才能与闭源编译器兼容。还没有提pr
- Call for help我的能力有限需要更了解 stdenv / CUDA 的同学的帮忙。
== 无root权限安装nix
- 尝试过 nix-portablebwrap 模式在老内核上不支持proot 严重影响性能。最后决定修改store路径。
- 不使用profile通过 symlink join 得到一个 package与其它机器的配置写在一个 flake 里。
- 在编译机上需要建立同样的目录作为store路径。若使用`real`参数将store路径指向`/nix/store`会导致编译机的nix数据库损坏。
```
# this will break the build machine's nix database
sudo nix build --store 'local?store=/nix/store&real=/nix/store' .#jykang
# this is safe
sudo nix build --store 'local?store=/data/gpfs01/jykang/.nix/store&state=/data/gpfs01/jykang/.nix/state&log=/data/gpfs01/jykang/.nix/log' .#jykang
```
== impermanence / home-manager 与共享文件系统
== FHSStdenv构建时FHS环境