上个月帮课题组同事在新买的 Win11 笔记本上搭 MLatom 计算环境,前后折腾了大半天才把环境理顺。回头看,大部分时间其实都耗在 Windows 原生环境下的 Python 依赖冲突、路径分隔符、权限问题这些烂事上。后来干脆全部迁移到 WSL2 里重装,连下载带配置不到一小时就跑通了。这篇就是把那次完整的落地过程记录下来:Window11 上启用 WSL2、安装 Ubuntu 22.04、配置 conda 环境,最后把 MLatom 装好并验证可用。
这篇文章适合两类人:一是刚接触 WSL2 想搭科学计算环境的新手,照着一步步做基本不会卡;二是已经在 Windows 上装过 MLatom 或其他计算化学包、被各种版本问题折磨过的人。读完你能清楚地知道每个环节为什么要这么操作,遇到报错时怎么定位,以及哪些坑是完全可以提前避开的。
1. 为什么我会坚持在 WSL2 里搭 MLatom,而不是 Windows 原生环境
1.1 Windows 原生环境跑科学计算的三层烦恼
先说最直观的路径问题。Windows 用反斜杠\和盘符C:,Linux 用正斜杠/和挂载点,很多 Python 包会在内部拼接路径,一旦遇到硬编码的路径分隔符就直接崩。比如跑 MLatom 的 example 脚本时,有时候报错信息里出现C:\Users\xxx和/home/xxx混在一起,排查起来非常头疼。
其次是编译链问题。PyTorch、ASE、SciPy 这些科学计算包在 Linux 下基本是官方优先支持,Windows 侧的安装则经常需要本地编译。本地编译意味着你必须装好 MSVC、CMake、gfortran,还要指望它们版本匹配。我在一台干净的新机器上试过,光是让一个老版本的扩展包在 Windows 上编译通过,就折腾了半个晚上。而在 Linux 下,大部分预编译 wheel 直接装,几秒钟的事。
第三是权限模型。Windows 的文件夹权限、杀毒软件实时扫描、只读属性这些问题,会让某些科学计算工具产生很奇怪的副作用。比如一个需要写临时文件的脚本,在 Linux 下一切都是文件、权限清晰,在 Windows 下可能因为杀毒软件锁定了文件导致程序挂起。这类问题不是不能解决,但每次都要多花时间去排查。
1.2 WSL2 是"真 Linux 内核",不是虚拟机软件
WSL2 和 WSL1 有本质区别。WSL1 是一个系统调用翻译层,兼容性有限,很多 Linux 特有的行为不一致。WSL2 则是在轻量虚拟机里跑一个真正的 Linux 内核,这意味着你在 Ubuntu 里执行的每一条命令、装的每一个包,行为都和一台真实的 Linux 服务器基本一致。
相比传统虚拟机,WSL2 的启动是秒级的,内存占用也小,还能直接访问 Windows 文件系统。日常打开终端就进 Linux,不用经历完整的开机启动流程。对于做计算的人来说,WSL2 的性能损失很小,CPU 密集任务基本接近原生水平。
1.3 MLatom 的依赖生态决定了 Linux 是第一优先
MLatom 是一个 AI 增强的量子化学与分子模拟工具包,大量依赖 PyTorch、NumPy、SciPy、ASE 这些生态。PyTorch 在 Linux 上的 CUDA 支持最完整、更新最快,很多针对科学计算的扩展库也都优先保证 Linux 兼容性。更关键的是,绝大多数超算集群和高性能计算节点都是 Linux 系统,你在本地 WSL2 里跑通的计算流程,迁移到服务器上几乎是无缝的。
这也是我特别推荐在 WSL2 里搭建的原因之一:本地开发环境和生产环境同构,能少踩很多"本地能跑,服务器跑不了"的坑。
2. 装 WSL2 之前先解决三个老问题:虚拟化、功能开关、内核更新卡住
2.1 先确认 CPU 虚拟化已经打开
WSL2 依赖虚拟化技术。如果你的 CPU 虚拟化没启用,后面会直接报错"此计算机上未启用虚拟化,请确保计算机固件设置中已启用虚拟机平台"。
检查方法很简单:打开任务管理器,切到"性能"选项卡,点 CPU,右下角会显示"虚拟化:已启用"或"已启用"。如果显示"未启用",就需要进 BIOS/UEFI 开启。
Intel 平台一般是找Intel Virtualization Technology、Intel VT-x,AMD 平台找SVM Mode,部分主板也直接叫Virtualization、Virtualization Technology。不同主板按键不一样,常见的有 Del、F2、F1、F10,进去之后在 Advanced 或 Security 菜单下找。启用后保存重启,再回来确认。
这一步千万别跳过,我见过太多人在软件层面折腾半天,最后发现只是 BIOS 里没开虚拟化。
2.2 Win11 家庭版没有 Hyper-V 开关?其实你根本不需要它
网上搜索"window11家庭版没有hyper-v开关"会出现很多帖子。这里说清楚:WSL2 依赖的不是完整的 Hyper-V 角色,而是两个更底层的 Windows 功能——"适用于 Linux 的 Windows 子系统"和"虚拟机平台"。家庭版的可选功能列表里确实没有 Hyper-V 的管理界面,但这不影响装 WSL2。
直接在管理员 PowerShell 里执行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart或者用:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux,VirtualMachinePlatform执行完重启电脑。重启后可以用下面命令确认功能确实生效:
Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatformState 显示 Enabled 就说明没问题。这一步做完,家庭版和 WSL2 之间的最大障碍就清除了。
2.3 wsl --update 卡住怎么办
Win11 安装 WSL2 的内核更新时,wsl --update命令如果一直卡住,大概率是网络问题,因为内核更新包通常从微软或 GitHub 下载。这时候不要死等,有两个替代方案。
第一个方案是去微软官方商店安装 WSL 应用。商店版 WSL 自带较新的内核,装完后在 PowerShell 里执行wsl --version能看到版本信息。
第二个方案是去 Microsoft/WSL 的 GitHub Releases 页面手动下载内核安装包(.msi 或 .msixbundle),下载完双击安装,再执行wsl --update,一般就能正常识别。
如果你之前用的是 WSL1,装完新内核后需要把发行版迁移到 WSL2:
wsl --set-version Ubuntu-22.04 2迁移完成后用wsl -l -v查看,VERSION 列显示 2 就是成功了。
3. 从 wsl --install 到 Ubuntu 22.04:安装、搬家、初始化一整套
3.1 一条命令装好 WSL2 和 Ubuntu 22.04
在管理员 PowerShell 里执行:
wsl --install -d Ubuntu-22.04这个命令会自动启用必要的 Windows 功能、下载 WSL2 内核、安装 Ubuntu 22.04 发行版。如果系统提示需要重启,先重启再继续。
第一次启动 Ubuntu 时会让你设置 Linux 用户名和密码。这个用户名不要求跟 Windows 用户名一致,密码输入时终端不显示字符是正常的,别以为键盘坏了。
装完后回到 PowerShell,执行:
wsl -l -v确认 Ubuntu-22.04 的 VERSION 是 2。如果是 1,执行前面提到的wsl --set-version迁移。
顺带设置默认版本为 2:
wsl --set-default-version 2这样以后安装其他发行版时都会走 WSL2。
3.2 别让 C 盘爆掉:把整个 WSL 搬到 D 盘
Miniconda 加上科学计算依赖,轻松吃掉 20 到 30GB 空间。如果你的 Windows 系统盘比较紧张,建议一开始就把 WSL 系统搬走。步骤其实就是导出、注销、导入三步。
先在 PowerShell 里:
wsl --shutdown wsl --export Ubuntu-22.04 D:\wsl\ubuntu.tar导出完成后:
wsl --unregister Ubuntu-22.04 wsl --import Ubuntu-22.04 D:\wsl\ubuntu D:\wsl\ubuntu.tar需要注意:wsl --unregister会删除原系统里的所有文件,所以执行前一定要确认 tar 包完整导出。导入后系统默认会用 root 用户登录,这不符合我们的使用习惯。进入 Ubuntu 后,编辑/etc/wsl.conf:
[user] default = 你的用户名保存后重启 WSL,再进入就是自己的用户了。
3.3 进系统后的基础初始化
进入 Ubuntu 后先做两件事:换源和装基础工具。Ubuntu 22.04 的软件源配置在/etc/apt/sources.list。先备份再替换:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo sed -i 's|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo apt update然后装基础工具:
sudo apt install -y build-essential git curl wget unzipbuild-essential包含 gcc、g++、make 等编译工具,后面装一些需要编译的 Python 包会用到。顺手确认一下系统信息:
cat /etc/os-release uname -a看到 Ubuntu 22.04 和 Linux 内核版本号,基础系统就算就位了。
4. 配置 conda:先理解环境隔离,再动手安装 Miniconda
4.1 为什么坚持用 conda 而不是直接 pip 一把梭
MLatom 依赖的 PyTorch、SciPy、ASE 这些包之间经常有版本联动,如果你把所有东西都装在系统 Python 或 conda 的 base 环境里,今天装这个项目、明天装那个项目,很快就会出现版本冲突。conda 的核心价值就是环境隔离:每个项目一个独立环境,互不干扰。
打个比方,系统 Python 是一个公共厨房,大家都在里面做饭,调料混着用;conda 虚拟环境是每人一个独立小厨房,你的姜葱蒜和别人的互不串味。做计算化学的人手上很可能同时有好几个项目,环境隔离不是可选项,是刚需。
Anaconda 和 Miniconda 的区别也很简单:Anaconda 是一个大礼包,预装了很多数据科学包,体积大;Miniconda 只带 conda 本身和 Python,需要什么装什么。做 MLatom 环境搭建,用 Miniconda 就够了。
4.2 Miniconda 下载与安装
进入 Ubuntu 终端,用清华镜像下载安装脚本:
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh如果镜像下载速度不理想,也可以直接用官方源:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh然后执行:
bash Miniconda3-latest-Linux-x86_64.sh安装过程中一直回车阅读协议,输入 yes 同意,安装位置默认在~/miniconda3。最后会问你是否运行conda init,输入 yes,它会自动把 conda 写进~/.bashrc。
安装完重新加载配置:
source ~/.bashrc验证:
conda --version如果每次打开终端不想自动激活 base 环境,可以关闭自动激活:
conda config --set auto_activate_base false我个人的习惯是关闭自动激活,需要时手动conda activate进入某个环境,避免 base 被无意中污染。
4.3 conda 换源,让创建环境不再等到天荒地老
默认 conda 使用的官方源在国外,国内网络环境下创建环境经常卡住。修改~/.condarc配置清华源:
channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud保存后执行:
conda clean -i同时把 pip 源也换掉:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这样后续用 pip 安装 Python 包时速度也会快很多。
5. MLatom 安装实战:独立环境、依赖处理与首次验证
5.1 MLatom 是什么,以及为什么单独建环境
MLatom 是一款开源的 AI 增强量子化学与分子模拟软件,支持机器学习势能、光谱预测、分子动力学、QM/MM 结合等多种计算任务。它通过命令行和 Python API 两种方式使用,对计算化学研究者来说是一个衔接"传统量子化学"和"机器学习"的实用工具。
MLatom 的依赖链比较复杂,涉及 NumPy、SciPy、ASE、PyTorch 等,不同版本之间兼容性敏感。所以务必为它单独创建一个 conda 环境,不要跟 base 或者其他项目混用。
5.2 创建 mlatom 环境并安装
创建独立环境,Python 版本选择 3.11,这个版本在 MLatom 当前版本下兼容性比较好:
conda create -n mlatom python=3.11 -y conda activate mlatom激活后确认一下当前解释器:
which python然后安装 MLatom。稳定版用 PyPI:
pip install mlatom如果想要最新开发版,可以从 GitHub 安装:
pip install git+https://github.com/dralgroup/mlatom.git安装完成后验证:
mlatom -v或者用 Python 导入测试:
python -c "import mlatom; print(mlatom.__version__)"能正确输出版本号,就说明核心安装成功。如果 pip 在安装过程中因为缺少某些本地库报编译错误,先把 numpy、scipy、pandas 手动装好再重试:
pip install numpy scipy pandas pip install mlatom5.3 首次运行的认证、PyTorch 后端和 GPU 怎么取舍
MLatom 第一次运行时会提示你进行免费注册,完成学术许可确认。具体流程按官方 README 的提示操作即可,一般只需要注册一个账号并填写 token,整个过程几分钟。
MLatom 的机器学习模块可以通过 PyTorch 作为后端运行。默认安装的 PyTorch 是 CPU 版,刚开始接触时 CPU 完全足够跑一些小分子的示例。等需要训练大规模机器学习势能或者做大批量计算时,再考虑 GPU。
如果你确认要上 GPU,先保证 Windows 侧装的是支持 WSL 的 NVIDIA 驱动,然后在 mlatom 环境里按 PyTorch 官方给出的命令安装 CUDA 版。比如:
pip install torch --index-url https://download.pytorch.org/whl/cu121具体 CUDA 版本号建议去 PyTorch 官网用生成配置工具选择,因为不同时期推荐的版本不一样。装完用下面命令验证能否正常调用 GPU:
python -c "import torch; print(torch.cuda.is_available())"输出 True 说明 WSL2 里的 GPU 透传已经接通。
6. 把 VS Code 和 PyCharm 接上 WSL 里的 conda 环境
6.1 VS Code Remote-WSL:最省事的开发方式
VS Code 的 Remote-WSL 功能可以理解为:编辑器界面跑在 Windows 上,但所有代码运行、终端、调试都在 WSL 里完成。使用方式非常简单,在 Ubuntu 终端里进入你的项目目录:
cd ~/mlatom-tests code .VS Code 会自动打开并连接 WSL。接着安装 Python 扩展,按 Ctrl+Shift+P 打开命令面板,选择 Python: Select Interpreter,然后选中mlatom环境。这个环境的 Python 路径一般是:
/home/你的用户名/miniconda3/envs/mlatom/bin/python你会发现 conda 管环境、VS Code 管编辑,两者各司其职。很多人问 conda 和 VS Code 的区别,其实根本不冲突:conda 负责提供隔离的 Python 运行时,VS Code 负责让你愉快地写代码。
6.2 PyCharm 配置 WSL 解释器
如果你习惯 PyCharm,配置也不复杂。打开 Settings → Project → Python Interpreter,点击 Add Interpreter,选择 WSL,然后选择对应的 Linux 发行版。
关键点是填对 Python 解释器路径。可以先在 WSL 终端里执行which python拿到完整路径,一般是:
/home/你的用户名/miniconda3/envs/mlatom/bin/python把路径填进去后,PyCharm 会自动识别这个环境的包列表,然后你就拥有了一个完整的 Linux 开发环境,还能直接右键运行 Python 脚本。
6.3 文件互通怎么用才合理
WSL2 和 Windows 之间的文件可以互相访问。Windows 盘在 WSL 里挂载在/mnt/c,而 WSL 的系统文件夹也可以从 Windows 的文件资源管理器地址栏输入\\wsl$访问。
但这里有个重要的性能经验:如果你把大量小文件放在/mnt/c下运行计算或训练,速度会明显变慢,因为跨文件系统的 I/O 开销很大。建议代码、conda 环境、以及频繁读写的临时文件全部放在 WSL 的 Linux 文件系统里,比如/home/你的用户名/。体积大、不频繁读写的输入数据集可以留在 Windows 盘,通过/mnt/c/...路径访问。
7. 踩坑实测记录:我整理了一份可以直接对着排查的清单
7.1 高频问题对照表
| 现象 | 根因 | 解决办法 |
|---|---|---|
| WSL2 无法启动,提示未启用虚拟化 | BIOS 里虚拟化被关闭 | 进 BIOS 开启 Intel VT-x / AMD SVM |
| Win11 家庭版找不到 Hyper-V 开关 | 家庭版不提供 Hyper-V 图形界面 | 不需要,用 dism 命令启用虚拟机平台功能 |
| wsl --update 一直卡住 | 内核更新包下载受限 | 商店版 WSL 或 GitHub Releases 手动下载安装 |
| 在 PowerShell 里输入 conda 提示"conda 不是内部或外部命令" | conda 装进了 WSL,Windows 侧当然找不到 | 进入 Ubuntu 终端里用 conda,或者配置 WSL 环境变量 |
| Ubuntu 启动后 apt 更新非常慢 | 使用官方软件源 | 换成清华或中科大镜像 |
| conda 创建环境很慢 | conda 默认源在国外 | 配置 ~/.condarc 清华源 |
| pip 安装很慢 | pip 默认 PyPI 源 | pip config set global.index-url换源 |
| C 盘空间迅速减少 | WSL 虚拟磁盘放在 C 盘 | wsl --export/--import整体迁移 |
| import mlatom 报找不到模块 | 没有在正确的 conda 环境里安装 | 先conda activate mlatom,再用which python确认 |
| 绘图窗口无法弹出 | 缺少图形显示环境 | Win11 自带 WSLg 可直接弹窗,必要时设置MPLBACKEND=Agg保存 PNG |
| 内存被 WSL 占满 | WSL2 默认占用一半物理内存 | 在 Windows 用户目录写入.wslconfig限制内存 |
.wslconfig示例,放在 Windows 的用户目录下,比如C:\Users\你的用户名\.wslconfig:
[wsl2] memory=8GB processors=4 swap=8GB修改后执行wsl --shutdown再重新进入,配置生效。这样 WSL 不会在后台无节制地吃内存,日常使用 Windows 也不受影响。
7.2 给第一次配置的人几条实用建议
第一,不要什么事都往 conda 的 base 环境里塞。环境隔离的价值在于:即使你把一个环境搞崩了,其他项目完全不受影响。我为 MLatom 单独建环境,也是为了将来可以放心地升级 PyTorch 或者换 Python 版本。
第二,养成备份环境的习惯。配好一套可用的环境后,顺手导出一份清单:
conda env export > mlatom_env.yml以后要重建环境,一行命令搞定:
conda env create -f mlatom_env.yml第三,遇到报错先判断是 Windows 层问题还是 Linux 层问题。比如 WSL2 无法启动,多半是虚拟化或内核问题;conda 命令找不到,多半是 PATH 或 Shell 配置问题。分清楚边界再去网上搜,效率高很多。
第四,建议用一个最简单的 MLatom 示例作为整个环境的验收标准。跑通一个单点能计算,能正常输出能量数值,就说明从 WSL2 到 conda 到 MLatom 的整条链路都通了。后面要接 GPU、要调用外部量子化学程序,都是在这个底座上继续加料。
我自己配完这套环境后最直观的感受是,后续再到服务器上部署 MLatom,几乎就是重复同样的步骤。WSL2 让我把本机和超算之间的距离缩小到几乎可以忽略,这比任何单独的工具优化都更有价值。希望这篇记录能帮你少走一点弯路,把更多时间留给计算本身。