计算化学公社

 找回密码 Forget password
 注册 Register
Views: 176|回复 Reply: 7
打印 Print 上一主题 Last thread 下一主题 Next thread

[虚拟机] WSL用于计算化学环境的初始配置建议

[复制链接 Copy URL]

536

帖子

5

威望

3318

eV
积分
3954

Level 5 (御坂)

本帖最后由 Stardust0831 于 2026-7-8 05:14 编辑

前言:写本帖的动机是我学校HPC部署了免费的deepseek pro,遂想玩玩看能否沉淀下skill并用Hermeus通过飞书算科学计算,于是激情格式化了一台闲置的一体机电脑来准备wsl及相应的科学计算环境,配置过程中顺手发一下wsl的配置注意点。本贴的初稿借助了一些Codex的帮助,我本身是wsl和应用计算的老手,也有大量早年纯手工玩linux和科学计算时期的实际踩坑经历积累的一些经验,我对内容有逐字的审阅(甚至最后由于表达欲过于旺盛、很多地方几乎全重写),故本文可以放心食用。我之前还写过一篇WSL里编译CP2K的经验分享帖,也提到了一些WSL的小技巧,可以一起看看,和本文互为补充。

很多计算化学同学用Windows做日常办公,但又经常需要Linux环境:装程序、跑脚本、编译包、用conda、ssh到服务器。以前常见做法是 VMware 装一个 Ubuntu 虚拟机。现在更推荐先试试 WSL2。
简单说,WSL2像是嵌在Windows里的Linux。它不是远程服务器,也不是完整桌面虚拟机,但对于大多数命令行工作已经很好用:装conda、跑 Python、编译程序、处理轨迹文件、写 shell 脚本、连接集群,都比较顺手。

WSL和VMware怎么选
社长曾在群里多次提到他本人很钟爱VMware这种完整的linux环境。如果你需要一个完整Linux桌面、要折腾图形界面、驱动、内核模块,VMware仍然更像“真虚拟机”。
但如果你的主要需求是:CP2K、ABACUS和PySCF等通过命令行使用的纯linux程序,那WSL2通常更轻便。它启动快,占用少,Windows和Linux文件可以互相访问,实际科学计算效率也会略好一些。

不过,WSL也有坑。科学计算场景里,最常见的坑有三个:
1.默认内存上限不合适。
2.文件放错位置会很慢。
3.WSL使用.vhdx 虚拟硬盘,其特性是占用空间自动增长但不会自动收缩。即使在 WSL 内部删除了文件,Windows 宿主机上的文件体积依然保持峰值大小。


下面说怎么处理。
wsl --install完成wsl的安装并创建好用户后,先迁移到合适的盘:
WSL默认常常装在C盘,随着WSL里数据的增多,有C盘红掉的风险。建议一开始就迁移到空间大的SSD,比如D盘。
先看已有发行版:
  1. wsl -l -v
复制代码

比如我这边看到我的linux发行版叫Ubuntu。这个发行版仍然在跑,所以我们先关闭 WSL:
  1. wsl --shutdown
复制代码
随后导出已有环境:
  1. wsl --export Ubuntu D:\wsl-backup\ubuntu.tar
复制代码
此处的D:\wsl-backup可以换成任何一个非C盘的、空间充足的SSD下已存在的目录(不建议机械硬盘)。
确认导出完成后,注销原来的实例:
  1. wsl --unregister Ubuntu
复制代码
重新导入到 D 盘:
  1. wsl --import Ubuntu-22.04 D:\WSL\Ubuntu D:\wsl-backup\ubuntu.tar --version 2
复制代码
再次启动:
  1. wsl -d Ubuntu
复制代码
如果进去后变成root,可以再设回默认用户。先在WSL里看用户名:
  1. ls /home
复制代码
然后在PowerShell里设置:
  1. wsl --manage Ubuntu --set-default-user 你的用户名
复制代码
最重要的配置:.wslconfig
Windows用户目录下新建这个文件:
  1. C:\Users\你的用户名\.wslconfig
复制代码
对于我手上这台128GB内存的电脑而言,wslconfig可以这样写:
  1. [wsl2]
  2. memory=120GB
  3. maxCrashDumpCount=-1

  4. [experimental]
  5. sparseVhd=true
复制代码
改完.wslconfig后要记得重启WSL:
  1. wsl --shutdown
复制代码
然后重新打开WSL。

.wslconfig选项解释:
  • memory=120GB是给WSL2虚拟机的内存上限。WSL2默认只给Windows总内存的一部分,官方文档里默认是总内存的50%。对于大内存工作站,这个默认值经常不合适。当前机器有128GB内存,只给一半,跑大体系时很容易莫名其妙不够用。这里直接给到120GB,让WSL可以吃到更多内存,同时给Windows留一点余量。
  • maxCrashDumpCount=-1是控制WSL崩溃转储数量的配置。我之前在wsl算g16的时候发现有时候Ctrl+C完了以后进程迟迟没有退出,C盘还莫名其妙红了(此时我wsl已经迁移到D盘)。最终发现wsl有崩溃转储机制,设置完这个选项后Ctrl+C能秒结束、C盘也不红了。
  • sparseVhd=true是让新建的WSL虚拟硬盘使用sparse VHD。WSL的默认行为是占用空间自动增长但不会自动收缩,所以始终会维持峰值占用;将 VHDX 设置为 sparse 模式后,Windows 会在检测到 WSL 内部删除文件时自动回收空间,无需手动压缩。

注意sparseVhd=true主要影响新建的发行版;已有发行版可以手动开启sparse:
  1. wsl --shutdown
  2. wsl --manage Ubuntu-22.04 --set-sparse true随后可以手动查询这个发行版对应的ext4.vhdx来验证sparse是否生效,比如,对于D:\WSL\Ubuntu\ext4.vhdx,可以用:
  3. [code] fsutil sparse queryflag "D:\WSL\Ubuntu\ext4.vhdx"
复制代码
如果生效,会看到类似:
  1. This file is set as sparse
复制代码


删除文件后,为什么Windows磁盘空间没回来
这是WSL2的经典问题。Linux里删了文件,df -h可能显示空间已经释放,但Windows看到的ext4.vhdx可能还是很大。
开启sparse VHD后,可以在WSL里执行:
  1. sudo fstrim -av
复制代码
再回到PowerShell:
  1. wsl --shutdown
复制代码
然后看Windows文件属性里的“占用空间”,可能会降下来。
文件放哪里很关键:
建议把Linux计算环境、conda环境、源码、临时计算目录放在WSL自己的Linux文件系统里,例如:
  1. /home/你的用户名/project
  2. /home/你的用户名/software
  3. /home/你的用户名/miniconda3
复制代码
不建议长期在这里跑大量小文件读写:
  1. /mnt/c/Users/xxx/Desktop
  2. /mnt/d/some/windows/path
复制代码
/mnt/c、/mnt/d是Windows磁盘挂进WSL的路径,方便互相拷文件,但I/O性能和权限行为都不如WSL自己的ext4文件系统。
像CP2K不会在任务运行目录有频繁I/O,我实测过没有明显效率损失,所以我喜欢在跨文件系统/mnt/d跑CP2K,这样文件直接就在windows下;但是ORCA这种在运行目录产生大量tmp文件的程序在/mnt/d下就会明显比/home/你的用户名/project这种目录下慢了,所以ORCA这种就不建议跨文件系统。
需要把linux下的计算结果拿回Windows时,复制出来即可:
  1. cp result.xyz /mnt/d/results/
复制代码
也可以在命令行中输入下面的命令在windows中直接打开wsl系统下的文件夹
  1. explorer.exe .
复制代码
事实上,wsl原生也会挂载在windows的文件管理器,在这里蓝笔圈出来的地方可以直接打开:

(顺带一提,你会发现图上还有很多挂载的盘,那些其实都是一些公网上的服务器,我的github仓库里有一个跨系统的基于rclone的挂载gui,可以实现像访问本地U盘一样访问云服务器上的文件,并且得益于VFS缓存机制,会比一些纯SFTP的挂载更为丝滑、文件传输性能更好,我后面会单发博文讲)
WSL文件路径通常写做类似这种,图标找不到的时候也可以直接进:
  1. \\wsl.localhost\Ubuntu
复制代码

总结

新机器上可以按这个顺序来:
1.安装WSL2 Ubuntu。
2.迁移到D盘或大容量SSD。
3.写好.wslconfig。
4.把项目目录放在/home/用户名/project。
5.conda、编译工具、计算程序都装在WSL内部。
6.Windows只负责编辑、画图、办公和结果归档。

这样用起来比较接近一台本地Linux小工作站:Windows保持干净,Linux环境也不乱。
WSL不是万能的。真要长时间大规模生产计算,还是建议上服务器或集群;真要完整Linux桌面和底层驱动,VMware也仍然有价值。但对于计算化学日常的“装环境、跑脚本、后处理”,WSL2已经足够好用,而且折腾成本低很多。

参考:
1.Microsoft WSL 官方配置文档https://learn.microsoft.com/en-us/windows/wsl/wsl-config
2.WSL2 磁盘瘦身与空间自动回收指南https://zhuanlan.zhihu.com/p/2001292650641367095

尾声:
最后我把装好了WSL的一体机垫高到我显示屏后面,也是解锁四屏幕,不得不拍照记录这一临时起意的搞怪画面了:



评分 Rate

参与人数
Participants 3
威望 +1 eV +10 收起 理由
Reason
wal + 5
ABetaCarw + 5 谢谢
sobereva + 1

查看全部评分 View all ratings

1400

帖子

6

威望

3122

eV
积分
4642

Level 6 (一方通行)

傻傻的木瓜

2#
发表于 Post on yesterday 09:39 | 只看该作者 Only view this author
结合我自己安装全新WSL的经验补充几点:

WSL默认常常装在C盘,随着WSL里数据的增多,有C盘红掉的风险。建议一开始就迁移到空间大的SSD,比如D盘。
用wsl --install时--location选项可以直接指定安装到D盘去。

sparseVhd=true是让新建的WSL虚拟硬盘使用sparse VHD。WSL的默认行为是占用空间自动增长但不会自动收缩,所以始终会维持峰值占用;将 VHDX 设置为 sparse 模式后,Windows 会在检测到 WSL 内部删除文件时自动回收空间,无需手动压缩。
比起空间浮动、可大可小的虚拟硬盘,我更喜欢哪怕庞大一点但空间固定可控的虚拟硬盘,wsl --install的--vhd-size {尺寸}结合--fixed-vhd指令可以设置。

maxCrashDumpCount=-1是控制WSL崩溃转储数量的配置。我之前在wsl算g16的时候发现有时候Ctrl+C完了以后进程迟迟没有退出,C盘还莫名其妙红了(此时我wsl已经迁移到D盘)。最终发现wsl有崩溃转储机制,设置完这个选项后Ctrl+C能秒结束、C盘也不红了。
这里提到的崩溃转储在Windows系统的C:\Users\{username}\AppData\Local\Temp\wsl-crashes目录下面,设置该选项之前可以清一清。

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
Stardust0831 + 5 好物!

查看全部评分 View all ratings

√546=23.36664289109

3

帖子

0

威望

55

eV
积分
58

Level 2 能力者

3#
发表于 Post on yesterday 10:06 | 只看该作者 Only view this author
本帖最后由 xiaolinziya 于 2026-7-8 10:08 编辑

物理内存不够的可以在.wslconfig里添加这一部分提供额外的虚拟内存
  1. swap=%nGB  
复制代码
一般设置成内存的1-2倍
修改设置后记得重启wsl
在wsl中free -h
看到类似这样的输出就是设置成功了
               total        used        free      shared  buff/cache   available
Mem:            23Gi       758Mi        22Gi        11Mi       428Mi        22Gi
Swap:           32Gi          0B        32Gi

543

帖子

1

威望

2501

eV
积分
3064

Level 5 (御坂)

4#
发表于 Post on yesterday 10:12 | 只看该作者 Only view this author
我一般把WSL装在非系统盘,有时候我会从网上找Linux发行版的qcow2镜像文件,然后仿照 https://teddysun.com/646.html 把里面部分文件制作成压缩包,再通过 https://github.com/yuk7/wsldl 进行安装。

536

帖子

5

威望

3318

eV
积分
3954

Level 5 (御坂)

5#
 楼主 Author| 发表于 Post on yesterday 13:30 | 只看该作者 Only view this author
Uus/pMeC6H4-/キ 发表于 2026-7-8 09:39
结合我自己安装全新WSL的经验补充几点:

用wsl --install时--location选项可以直接指定安装到D盘去。

感谢补充~
—location选项确实会方便许多。
虚拟硬盘容量设固定值感觉也是个很不错的补充,不知道您有没有测过wsl默认的随用随变大和这种固定容量之间的科学计算性能差别是否明显,orca跑post-HF或许就是个补充的测试用例(毕竟其他计算场景的效率瓶颈往往是在内存和cpu而非硬盘)。我直觉上这俩模式性能应该差别不明显,一直没测过对实际计算速率的影响。我一直把wsl当成一种更轻便小巧的在windows的命令行下就可以获取到的linux环境,所以我还蛮享受这种wsl存储大小跟着实际占用大小走的感觉、感觉可以更为灵活些。
转储我想表达的其实是设完那个选项以后c盘也不再被转储出来的文件占空间了,才发现当时的文字有点过于简略hhh
我当时查为什么C盘红的时候是直接在evergthing里翻文件的,看到有带wsl字样的异常过大的文件,确认是崩溃转储的产物后直接从everything进去相应目录删了。

536

帖子

5

威望

3318

eV
积分
3954

Level 5 (御坂)

6#
 楼主 Author| 发表于 Post on yesterday 13:50 | 只看该作者 Only view this author
xiaolinziya 发表于 2026-7-8 10:06
物理内存不够的可以在.wslconfig里添加这一部分提供额外的虚拟内存
一般设置成内存的1-2倍
修改设置后记 ...

补充一些我的经验:
用Swap需要小心,本质上是那SSD当内存用。存些不频繁读写的系统内存没事(行为也是优先存没被频繁读写的内存)、也能让物理内存容量更充分服务于科学计算。但如果是科学计算本身对内存的读写就需要超过了物理内存、要频繁读写swap的时候,SSD的读写速率往往是远不满足科学计算对内存速率的要求的,此时swap读写速率是计算速率的瓶颈,一些场景下可能会让计算效率低1-2个数量级。
我之前还因为开Swap让节点整个都掉线过一次,当时甚至是物理机装linux。那个节点是个么得BMC用的9950X节点,没办法、我装了NanoKVM带外管理帮我在崩溃后远程重启电脑,重启以后把端口转发回本地看netdata,发现用Swap的这种情况会让cpu阻塞明显变多,CPU需要等I/O导致c0空置率过高,可能是硬盘换页的实际出现问题,最终让整个计算节点掉线。
让计算对内存的使用本身不超过物理内存是很重要的,比如orca的并行是让每个OpenMPI进程都拿一份完整的内存(至少计算部分的内存是每个进程都完整拿一份的)。这种时候可以少用几个进程(少用几个核)来换取整体更小的不超过物理内存的内存需求,这样的最终计算效率会远比大规模用Swap导致的效率暴跌更好一些。

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
xiaolinziya + 1 赞!

查看全部评分 View all ratings

1400

帖子

6

威望

3122

eV
积分
4642

Level 6 (一方通行)

傻傻的木瓜

7#
发表于 Post on yesterday 14:27 | 只看该作者 Only view this author
Stardust0831 发表于 2026-7-8 13:30
感谢补充~
—location选项确实会方便许多。
虚拟硬盘容量设固定值感觉也是个很不错的补充,不知道您有 ...

我这边暂时没机会测试,一个是本身没有大型后HF计算的现成输入文件,再一个真有高硬盘读写要求的任务的话我这电脑的Intel大小核CPU也多半带不动了,偏偏WSL本身并不区分逻辑核心与物理核心的对应关系,也不确定从外部设置CPU亲和性的工具是否适用……

顺便问一句,目前WSL对docker的支持如何,和其他虚拟化方案/实体Linux机一样吗?
√546=23.36664289109

536

帖子

5

威望

3318

eV
积分
3954

Level 5 (御坂)

8#
 楼主 Author| 发表于 Post on yesterday 18:54 | 只看该作者 Only view this author
Uus/pMeC6H4-/キ 发表于 2026-7-8 14:27
我这边暂时没机会测试,一个是本身没有大型后HF计算的现成输入文件,再一个真有高硬盘读写要求的任务的话 ...

我用来跑科学计算的cpu基本上都是AMD的,没有关注这个大小核的问题。
wsl的docker倒是挺成熟的,不过设计理念上和传统虚拟机有差别,WSL的定位是子系统,旨在促进Windows和Linux环境之间的互操作性,或许更应该认为这是一种轻量化的、windows原生的linux命令行环境。
或许值得参考一下官方文档:
Docker Desktop WSL2 backend:https://docs.docker.com/desktop/features/wsl/
Docker Desktop Windows 安装与 WSL/Hyper-V 说明:https://docs.docker.com/desktop/setup/install/windows-install/

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
Uus/pMeC6H4-/キ + 2 好物!

查看全部评分 View all ratings

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-7-9 11:24 , Processed in 0.254163 second(s), 26 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list