Featured image of post 机器学习用 Ubuntu WSL 配置记录

机器学习用 Ubuntu WSL 配置记录

怎么快速配置一个能用的 Ubuntu WSL(以及几个包)

某人需要配置环境时做机器学习,这是他配置环境后电脑发生的变化……

头图选择了可爱的小羊,来自 Ruziかねつカーぺット 太太的 ピンクの夢,粉粉的,可爱捏

选曲为 STUDY WITH MIKU -part2- 改编的 さよならプリンセス (再见公主),原作是 P 主 Kai,由初音演唱。俏皮的音乐,好听……

前情提要

参加完刚刚在西安举办的材料基因工程大会之后,某人深受触动:

机器学习真是好东西!我必须立刻启动!

于是他决定在自己的电脑上配置一些做机器学习要用的环境。然而他有一些洁癖…… 不希望因为工作用的环境影响自己的日常使用,于是他决定不在心爱的 Arch Linux 中安装这些环境,而是自己新安装一个 Ubuntu 的 WSL,后续的内容都在 WSL 里完成。

刚刚他算是配好了,我整理了一下他安装的过程以及中间踩的坑,记录在这里,希望能帮到需要的人~

(为了方便起见,后面还是用第一人称吧)

环境状态 & 目标

下面的表格汇总了我目前的环境状态:

项目状态
OSWindows 11 Pro
GPURTX 5060 Laptop
TerminalWindows Terminal
ShellPowershell 7
WSLArch Linux(不使用)
IDEMicrosoft VS Code1
硬盘只有C盘

即便微软罪大恶极,经过一些调教之后,Win11 还是变得能用了起来;Windows Terminal 真的很好用,推荐每个人玩了命地用();很难想象不用美丽优雅 兼容部分 GNU/Linux 命令 的 Powershell 7(pwsh)的样子;我们默认打开科学上网且开启虚拟网卡模式,免得 Shell 笨笨地不走代理。

我们的目标?自然是搞一个 Ubuntu 的 WSL,再在里面装上 Anaconda 以及 CUDA ,最后创建一个 conda 虚拟环境,在虚拟环境里装上测试用的 PyTorch。

那我们开始吧~

安装/配置 Ubuntu WSL

Ubuntu 在某种角度,已经成为了 Linux(GNU/Linux)的代名词了:市占率广,知名度高,还算简单易用,基于 Debian 的特性让它也许也还算稳定。最重要的是,Windows 的 WSL2 使用的默认发行版就是 Ubuntu,而也许也正因如此,CUDA 关于 WSL 的支持是默认用户用的是 Ubuntu。

说实在的,我不是很想在我已经有了一个配置地很不错的 Arch WSL 的前提下再大费周章地搞一个 Ubuntu WSL 来专门跑机器学习,而且 Arch Linux 实际上是有打包好的 CUDA 包的,可以用 pacman 方便地下载下来。然而考虑到我不希望复杂(冗杂)的 Anaconda 污染我的电脑,也不希望后面在跑程序的过程中因为 Arch 和 CUDA 之间的问题而反复调试,所以干脆就再开一个 Ubuntu 好了。

安装 Ubuntu WSL

安装的过程还算简单,因为之前我的电脑已经有了 Arch WSL 了,安装 Ubuntu WSL 也不用等太久的 WSL 初始化过程。使用的命令也算简单:

1wsl --install

没错,一行就可以了,而且甚至不用指明是哪个发行版(没错,因为默认)。当然,想要查询有哪些 WSL 上可用的 Linux 发行版,可以

1wsl -l -o
2# 其实就是 wsl --list --online

然而我这里没有默认安装,本着能装新的就装新的原则,我选择安装了 Ubuntu 24.04 版本:

1wsl --install Ubuntu-24.04

中间需要设置用户名和管理员密码,用户名只能是小写,而且 输入密码时你看不见输入的内容,最重要的是 请保管好你的管理员密码,不然就只能卸掉重装咯,那样就很亏了。不过行文至此,怎么卸载安装好的 WSL 发行版呢?很简单:

1wsl --unregister Ubuntu-24.04

这行命令就会删掉你的 Ubuntu-24.04 发行版了。顺带,查询电脑上装了什么 WSL 的方式也很简单:

1wsl --list --verbose
2# wsl -l -v

这个命令不止会列出已经安装的 WSL,还会显示它们的状态。想要彻底关闭运行中的 WSL(而不是简单地关掉 Shell),可以

1wsl --shutdown

(这个会关掉 WSL,也就是所有运行中的发行版都会被关掉)

有点啰嗦了,不过这么几个简单的命令就能操作 WSL 的安装、卸载、查询之类的了。

配置新到手的 Ubuntu WSL

刚到手的新系统,怎么能不先设置一下呢?工欲善其事,必先利其器嘛。我装了这些东西:

  • zsh: 替代 bash
  • fd: 替代 find
  • rg: 替代 grep
  • eza: 替代 ls
  • bat: 替代 cat
  • nvim
  • cmake
  • build-essential
  • git
  • gdb
  • tldr: 方便快速了解命令用法

然后给 ZSH 装一些插件,插件管理选择了经典的 oh-my-zsh,一款基于 git clone 仓库到对应文件夹下的插件管理器()安装的插件有:

  • zsh-autosuggestions: 让你的 ZSH 拥有 FISH 那样的补全(既然如此,为什么不直接用 FISH 呢?别问……);
  • zsh-syntax-highlighting: 给正确/错误/特殊命令以多样的颜色,很方便,就像 FISH 那样(既然如此……);
  • zsh-completions: 让你的 ZSH 补全更聪明;
  • conda-zsh-completion: 给你的 ZSH 加上 conda 命令的补全
  • zsh-vi-mode: 按下 ESC,使用 vi mode 来编辑你的命令行!偶尔会用到,但是要注意光标形状……

我们给出用到的命令:

 1# Upgrade the source first
 2sudo apt update && sudo apt upgrade
 3# fd has package name fd-find; rg has package name ripgrep; nvim has package name neovim;
 4# tealdeer for tldr
 5sudo apt install zsh fd-find ripgrep eza bat neovim cmake build-essential git gdb tealdeer
 6# download oh-my-zsh, install and use it
 7sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 
 8# several zsh plugins
 9git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
10git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
11git clone https://github.com/zsh-users/zsh-completions.git ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
12git clone https://github.com/conda-incubator/conda-zsh-completion ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/conda-zsh-completion
13git clone https://github.com/jeffreytse/zsh-vi-mode $ZSH_CUSTOM/plugins/zsh-vi-mode
14# Config for tldr, update the cache
15tldr --update

上面的命令可以复制下来贴在 Shell 里,过程中需要输入几次刚刚设置的密码或者回车确认一些东西,安装好 oh-my-zsh 之后会让你的 Shell 变成 zsh,请输入 exit 命令来退出当前的 zsh 以便继续安装下面的插件)。

接着把之前我一直在用的 .zshrc 配置也同步到 Ubuntu WSL 里:

 1# $HOME/.zshrc
 2export ZSH="$HOME/.oh-my-zsh"
 3
 4ZSH_THEME="robbyrussell"
 5
 6# Use zsh-completions plugin
 7fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src
 8autoload -U compinit && compinit
 9
10# Update when available
11zstyle ':omz:update' mode reminder 
12
13plugins=(
14	git
15	colored-man-pages
16	zsh-vi-mode
17	zsh-autosuggestions
18	zsh-syntax-highlighting
19	conda-zsh-completion
20)
21
22source "$ZSH/oh-my-zsh.sh"
23
24# Source everything in the custom env folder
25if [ -d $ZSH_CUSTOM/env ]; then
26    for f in $ZSH_CUSTOM/env/*; do
27        source $f
28    done
29fi
30
31# Set ~win as the windows user home folder
32hash -d win=/mnt/c/Users/AMoment
33# Disable pipe override (>)
34set -o noclobber

这里的 .zshrc 文件是删掉了很多没用到的注释的。这些注释实际上是 oh-my-zsh 自动提供的,为的是方便用户自己调整,如果你有需要的话请只修改和添加上面的内容到特定的行就可以了。注意要保持顺序,特别是 zsh-completion 是特别要求要保持顺序的。

最底下的两个小段是我自己常用的一些配置。第一段是我把所有和环境相关的内容都会以 程序名.zsh 脚本的形式放在 $ZSH_CUSTOM/env 这个文件夹里,这里就依次 source 应用一遍。第二段里第一行是方便去 Windows 宿主机下的家目录(没错我的家目录在这里),这样 ~win 就会被解析为这个路径,还是有点方便的;第二行是关掉了向有内容的文件里使用 > 重定向的操作,避免犯傻。

最后就是添加几个好用的别名,我们可以直接写在 $ZSH_CUSTOM/aliases.zsh 这个文件里,我用到的是这些:

1alias ls="eza --icons=auto"
2alias ll="eza -lh --icons=auto"
3alias la="eza -A --icons=auto"
4alias la="eza -lAh --icons=auto"
5alias vim="nvim"
6alias fd="fdfind"
7alias bat="batcat"

修改好之后使用 exec zsh 来应用这些改动,就完成啦。不过 Windows 宿主机上还可以做一点简单改动。

Windows 宿主机的简单配置

由于我使用的是 Windows Terminal,在安装好 Ubuntu WSL 之后关掉 Windows Terminal 再打开,Profiles 里面就出现刚刚设置好的 Ubuntu WSL 了:

安装好的 WSL

可能你的 Windows Terminal 里有很多别的选项,或者默认的 Shell 等不是 PowerShell,没关系,我们可以进入设置修改。比如让 PowerShell 成为默认 profile2,把常用的 profile 顺序提前等等。

这里主要想聊一下下面这些设置,请注意要记得保存,用的 GUI 的话右下角有保存按钮,使用 JSON 文件的话要保存文件:

  • 调整 profile 顺序: 实际上 Windows Terminal 会把所有的 Profile 信息都存在一个 JSON 文件里,可以从设置页面的左下角打开,我们手动改一下需要的 Profile 顺序就可以了;
  • 隐藏 profile: 可以直接在 GUI 中修改,有个 Hide profile from dropdown,或者在 JSON 文件中找到对应的 profile,添加 "hidden": true 即可;
  • 如果你不希望在运行程序时 Shell 的标签页变成在执行程序的名字,请在底下的 Terminal Emulation 中选择 Suppress title changes。这样就可以一直显示 profile 的名称。在安装了若干个同类 profile(比如两个 Ubuntu)的时候会很好用。

大概就是这么些内容,实际上 Windows Terminal 的默认配置已经很不错了,上手只需要简单设置一点点东西就很好用了。这也是我喜欢它的原因。微软,你做得好口牙(赞赏)。


那么到此,就配好了一个(我个人觉得)很好用的一个操作环境。接下来要做的自然就是进行安装了。虽然 CUDA 和 Anaconda 安装顺序也没那么严格,我们这里还是先装 Anaconda。

Anaconda

在正式安装之前,我觉得还是可以:

Anaconda 的简单介绍

所以,Anaconda 是什么?它是 Python 吗?Python 是什么?我已经有 Python 之后还需要装 Anaconda 吗?如果你了解这些概念,请直接跳过吧()

我们先来说说 Python 和包管理。Python 作为一门比较现代的语言,它使用解释器实现逐行的代码运行,且通过包管理器来管理代码中使用到的模块、库之类的东西。然而 Python 其本身只是一个语言,我们常说的 “下载 Python” 实际上是下载了包含 Python 的解释器、包管理器以及运行环境的一个发行版。我们从 官网 下载到的 Python 安装包实际上包括了使用 C 语言实现的 CPython 解释器,从 PyPI,即 Python Package Index 来下载安装对应的包的包管理器 pip,以及它们的运行所需的环境(如果你勾选了 IDLE 的选项,你还会安装一个小小的 Python IDE)。我们称这样下载到的是 Python 官方发行版。

除了 Python 官方的发行版外,由于 CPython 采用的开源协议,它允许任何人自由地打包并发行自己基于 CPython 的 Python 发行版,实际上也确实有很多不同的基于 CPython 的发行版。其中一个非常出名的发行版即为本次的主角,Anaconda。Anaconda 的 Python 发行版包含了由自己打包的 CPython 解释器,不同于 pip 的另一款包管理器 conda,以及由 Anaconda 提供的,预包含了许多科学计算、数据统计库的运行环境。

Anaconda 的特点在于 conda 这款包管理器,它可以选择对应的频道(channel)来安装不同来源的库,且更重要的是,它的库不局限于 Python 使用:它不仅管理 Python 使用的库,还会管理这些库所需要的可能的其他语言的库,进行必要的依赖求解。另外它还集成了虚拟环境管理,不似 Python 官方提供的 venv 这个环境管理工具,这让 conda 成为了一个 All In One 的管理工具。当然,它还直接地提供了一些做科学计算时常需要的库,如 Numpy, Matplotlib,Pandas 等。如果你只是想享受最纯粹的 conda,可以考虑安装 Miniconda,不过因为我们就是要做机器学习,所以干脆安装 Anaconda 就挺好的。

所以,为什么我们需要 Anaconda?做机器学习没有说必须要用 Anaconda 呀?而且大部分 Python 包都会优先考虑使用 PyPI 分发,而不会先考虑 Anaconda 的包源。使用 Anaconda 的主要原因,除了我看的教程是用的 Anaconda 管理环境之外,还有很重要的一点就是 conda 管理的不只是包,还有包自身的依赖,以及能直接管理环境。这解决了一个很棘手的问题:依赖地狱。假如你要的包 A 和包 B 都依赖同一个库 C,而 A 要求用老版本的 C 库,B 要求用更新版本的 C 库,而你的电脑已经安装了老 C 库,这时候要怎么办?把这个老 C 库卸载,重装一个新的吗?conda 提供了一个优雅的方法:虚拟出一个环境,在这个环境中重新安装相容的 A, B 和 C。更重要的是,这个环境不会影响到其他的环境,不用担心装上什么软件之后会毁掉整个电脑上的库。事实上,在机器学习这个较新的,正在发展的领域,机器学习用到的库很有可能发生奇怪的依赖问题。而使用 conda 就能更方便地解决这类问题。

听我啰嗦了这么多,是时候开始安装了。

安装 Anaconda

其实安装它还是比较简单的。只需要获取到安装脚本,然后运行就好了。我们使用命令:

1wget https://repo.anaconda.com/archive/Anaconda3-2025.06-1-Linux-x86_64.sh

就可以把它的安装脚本下载下来。说实在的这个脚本挺大的:它有 1G 的大小,因为脚本之外应该还集成了一些压缩包。下载好之后我们可以使用 sha256sum 来检查下载到的文件是否完整:

1echo 82976426a2c91fe1453281def386f9ebebd8fdb45dc6c970b54cfef4e9120857 ./Anaconda3-2025.06-1-Linux-x86_64.sh | sha256sum --check

一般来讲都没什么问题,会显示 ./Anaconda3-2025.06-1-Linux-x86_64.sh: OK,此时我们就可以执行安装,即运行这个脚本了。但是此时这个脚本还不能直接执行,因为这个文件的所有执行权限都默认关闭了。我们使用 chmod +x 来给这个命令以执行权限并执行:

1chmod +x ./Anaconda3-2025.06-1-Linux-x86_64.sh
2./Anaconda3-2025.06-1-Linux-x86_64.sh

这样就进入安装流程了,首先要先同意它们的协议,我们回车,它会讲我们得同意协议条款,此时我们得明确打出 yes 并回车,否则:

Type yes here!

接下来就是安装位置,默认是安装在家目录的 anaconda3 这个位置,我们可以选择接受这个位置,或者手打换一个位置安装,这里就直接默认了。然后就是一阵强力的安装,就进入了最后的环节,是否要将 conda 添加进 Shell 的配置中,每次进入 Shell 就自动启动 conda。默认是 no,我们接受默认,待会儿我们手动添加相关内容。

这样就完成安装了。不过因为没有在 Shell 中初始化 conda,我们需要先执行初始化。我们安装好的 conda 位于 ~/anaconda3/bin/conda,因此我们可以使用命令:

1$HOME/anaconda3/bin/conda init zsh

它会更改 .zshrc 的内容,在最后添上一段:

 1# >>> conda initialize >>>
 2# !! Contents within this block are managed by 'conda init' !!
 3__conda_setup="$('/home/amoment/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
 4if [ $? -eq 0 ]; then
 5    eval "$__conda_setup"
 6else
 7    if [ -f "/home/amoment/anaconda3/etc/profile.d/conda.sh" ]; then
 8        . "/home/amoment/anaconda3/etc/profile.d/conda.sh"
 9    else
10        export PATH="/home/amoment/anaconda3/bin:$PATH"
11    fi
12fi
13unset __conda_setup
14# <<< conda initialize <<<

其实就是将 conda 加入环境变量 $PATH 中。我们可选地将这部分挪到我们留出来的 $ZSH_CUSTOM/env 中:

1mkdir $ZSH_CUSTOM/env
2vim $ZSH_CUSTOM/env/conda_env.zsh

然后把刚刚的内容贴进去,然后重启 Shell,就好啦。你应该能看到 Shell 的显示中,左侧有一个 (base) 的字样,这样就说明我们已经成功启动 condabase 环境了。

Base Environment


我们先不介绍 Anaconda 的具体操作,因为对我们而言,我们还没有完全完成环境配置。接下来要配置的则是所谓的 CUDA。

CUDA

我刚刚收到了一个坏消息:在我刚写好 CUDA 安装部分的瞬间,鬼使神差地,我看到了 CUDA 官网文档上关于 “conda” 的部分:Conda Installation

Conda Installation

何意味…… 在 conda activate pytorch-test(我的环境名叫 pytorch-test)之后使用 where nvcc,得到了这样的结果:

1/home/amoment/.conda/envs/pytorch/bin/nvcc
2/usr/local/cuda-13.0/bin/nvcc

难道说!?

算了,写都写了,我们还是介绍一下怎么安装,以及怎么卸载吧……

CUDA 的简单介绍

CUDA 是 Nvidia 推出的 GPU 计算框架,是 Compute Unified Device Architecture 的缩写,即 计算统一设备架构 (神秘机翻)。这里的 Device 主要指的就是 Nvidia 家的各系显卡了。由于进行机器学习需要对大量(存疑)的数据进行计算,而计算需求也没有特别复杂(相较于 CPU 更适合执行复杂计算任务),使用显卡这样处理图像的设备进行加速计算几乎成了刚需。

虽然说 Nvidia 家的显卡对 Linux 的支持也许没有 Windows 端那么好(F**k you Nvidia!),但是毕竟做计算这行 Linux 还是主力,微软与 Nvidia 也很识相的给普通开发者一个很不错的选项:使用 WSL 来借助 Windows 的显卡驱动进行 CUDA 开发,且有专门适配 WSL 的包与文档供下载使用,所以我们干脆就这么做,使用支持情况最好的 Ubuntu 来进行相应的开发。

安装 CUDA

在开始之前,我们最好先确认我们的设备可以使用 CUDA。首先我们使用 nvidia-smi 命令,它会显示设备上的 Nvidia 显卡的信息:

nvidia-smi

可以看到有一大堆的信息在这里,包括我这台设备的显卡,以及对应的 CUDA 版本。如果是比较老的显卡,需要去 CUDA GPU Compute Capability 这里查一下显卡的 Compute Capability,大于等于 3.0 的就是可以正常使用 CUDA 的了。一般来讲只要不是上古显卡都应该是没问题的吧(逃)

接下来就是正式安装,根据 官方文档 的描述,第一步应该删掉老旧的 GPG 密钥:

1sudo apt-key del 7fa2af80

接下来我们就可以直接下载 CUDA Toolkit 了。目前最新版本的 Toolkit 是 13.1 版本,下载页面实际上提供的是一串脚本:

1wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
2sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
3wget https://developer.download.nvidia.com/compute/cuda/13.1.0/local_installers/cuda-repo-wsl-ubuntu-13-1-local_13.1.0-1_amd64.deb
4sudo dpkg -i cuda-repo-wsl-ubuntu-13-1-local_13.1.0-1_amd64.deb
5sudo cp /var/cuda-repo-wsl-ubuntu-13-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
6sudo apt-get update
7sudo apt-get -y install cuda-toolkit-13-1

从上面的脚本中可以看到,实际上是首先用 wget 下载好 cuda-wsl-ubuntu.pin 文件并挪到对应位置用来设置待会儿下载好的 CUDA-Toolkit 的优先级,然后下载 .deb 包并安装,再把密钥复制一份进系统的钥匙环之后更新 apt 源,最后安装 CUDA-Toolkit。

在安装好之后,我们需要把 /usr/local/cuda-13.0/bin 加入环境变量 $PATH 中。我们可以在 .zshrc,或者 $ZSH_CUSTOM/env/cuda_env.zsh 中写上:

1export PATH=/usr/local/cuda-13.0/bin:$PATH
2export LD_LIBRARY_PATH=/usr/local/cuda-13.0/lib64:$LD_LIBRARY_PATH

这样我们再刷新 Shell,就可以直接在命令行中使用 nvcc 了。

卸载 CUDA

唉,刚刚安装好,就要说再见,我们卸载它也很简单,因为 apt-get 的包管理也很方便:

1sudo apt-get purge "cuda-*"
2sudo apt-get autoremove
3sudo apt-get autoclean

这三行分别是让 apt-get 删掉以 cuda- 开头的所有包以及相关的配置文件,自动清理不需要的软件包依赖,自动清理本地的 .deb 包。

然后把我们刚刚加进来的环境变量删掉,就算是彻底删除了。欢乐的时光总是短暂,再见,所有的 Global Installation。

配置开发环境

最后一步其实相对是简单很多的。我们只需要用几行命令创建一个虚拟环境,安装需要的包,然后等待漫长的时间之后,就可以在 VS Code 里跑一段代码来看看结果了。

我们先来创建虚拟环境。

创建虚拟环境

一行命令就可以创建好基础环境了:

1conda create -n pytorch-test python=3.12

这里 -n 代表的是我们要给这个环境起的名字;python=3.12 是我们让 conda 安装的第一个东西:python 解释器,并且要求它的版本是 3.12。为什么不用较新的 3.13 甚至 $\pi$thon(3.14) 呢?主要是因为 PyTorch 对较新版本的支持没有那么好。创建好环境之后应该能看到提示如何启用这个环境:

1conda activate pytorch-test

我们进去之后就可以试试 python --version 了,结果大概是这样:

1Python 3.12.12

然后我们继续用 conda 安装别的需要的库。我们主要需要的库就是 torch 了。我们需要它的基础款以及 GPU 款,在 conda 里分别叫 pytorchpytorch-gpu

1conda install pytorch pytorch-gpu -c anaconda -c nvidia

这行命令里的 -c--channel,意为指定下载安装渠道,我们要求首先搜索 anaconda 这个频道,然后搜索 nvidia 频道,最后保底还有 default 这个默认的频道。运行这个命令之后应该会看到这些频道会被列出来,并让你按回车确定。随后就是漫长的等待,而在等待过程中,我们还可以做点别的事:配置一个待会儿用来跑测试代码的 VS Code 环境。

由于创建环境时就可以安装需要的包,我们实际上可以

1conda create -n pytorch-test python=3.12 pytorch pytorch-gpu -c anaconda -c nvidia

然后在创建好之后 conda activate pytorch-test 就可以了。要检查有哪些环境可用,可以 conda env list 来列出所有的环境。而要删除环境,可以使用 conda env remove -n pytorch-test 或者 conda remove -n pytorch-test --all

配置 VS Code 环境

首先第一步便是进入 WSL 里启动 code 了。我们既可以在 Windows 下启动 VS Code 然后点左下角的按钮来连接到需要的 WSL 上,也可以在 WSL 的 Shell 中输入 code 来直接在 WSL 里启动 code。关键是插件的下载。

这里我们推荐下载安装这些插件:

  • Jupyter: 这是一个扩展包,里面包含了 Jupyter 需要的所有插件;
  • Python: 虽然这是一个单独的包,但是安装它也会自动安装上一系列的扩展,包括环境管理、代码调试、语法检查等;
  • Black Formatter: 一个代码格式化工具,好用,不过有时候很倔……
  • autoDocstring:自动帮你生成 Docstring 来说明你的函数在干嘛
  • Even Better TOML: 由于 Python 使用 pyproject.toml 文件作为项目描述文件,而 VS Code 并没有 TOML 的官方支持,所以如果你要用/写 Python 为主的项目的话,你可能需要它

安装也不是很麻烦,点点点就是了。如果你比较懒,还可以使用 VS Code 比较新的 Profile(怎么又是这个词)功能。我们电极左下角那个很像设置的按钮,里面就有 Profile (Default),我们选择里面的 Profiles 进入 Profile 设置页面,我们伟大的 Python 是有 Profile 模板的。我们可以直接应用这个模板。简单方便,基本就是上面我说的这些个插件。

经过漫长的等待……

你应该就下载好环境中需要的所有库了。此时我们打开刚刚配好的 VS Code,进入一个空的文件夹,Ctrl+Shift+P 调出 VS Code 命令界面,搜索 Jupyter,就会出现创建新 Notebook 的选项。点它,就会打开一个 Jupyter Notebook 的界面,我们可以在右上角选择要用的 Kernel,它会自动检测我们 WSL 里都有哪些虚拟环境,选择我们刚刚花大功夫配好的 pytorch-test,随后在代码块里测试一下环境配置情况:

1import torch
2
3print(f'PyTorch version: {torch.__version__}')
4print("CUDA available:", torch.cuda.is_available())
5if torch.cuda.is_available():
6    print("GPU:", torch.cuda.get_device_name(0))
7    print("CUDA version:", torch.version.cuda) # type: ignore

如果成功运行,这几行代码会一五一十地告诉你当前使用的 PyTorch 版本,CUDA 状态,使用的 GPU 等。至此,大功告成。

如果你收到了这样一个神秘的错误:

1libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent

不要惊慌:大概率是因为 mkl 这个库的版本太新以至于你用的 PyTorch 版本没匹配上对应的版本。可以用 conda search mkl 来查看有哪些 mkl 库可以安装,选择一个老一点的就行了。网上搜到的大多是叫安装 mkl=2024.0 这个版本,然而可能是 conda 版本问题,又可能是频道没选对,我搜索到的结果只有 mkl=2023.1 的版本,因此我安装的是这个版本,结果没啥问题,能正常使用。

后记

这篇文章从开写到现在已经过了两周了。磨磨蹭蹭,最后还是写出来了,即便中间走了一些弯路就是了。从结果上来看,conda 是相当不错的一个包管理器:它可以直接用自己带的 cuda-toolkit,不用让用户自己配置 CUDA 环境。大胆一些,我们甚至可以让 conda 来管理 C/C++ 环境,因为我搜到 conda 是可以安装 g++ 的,搭配 安装 pytorch-gpu 所提供的 nvcc,也许真的能实现用一个包管理器来管理需要的开发环境。

然而安装过程还是挺慢的,最大的问题在于下载时间。libtorch 相当大,没记错的话有 1.x GB,有需要的话可以给 conda 配置国内的镜像源,比如阿里源、清华源等。这里就不多提了。

那么,感谢您看我啰嗦到这里,一如既往地,祝您身心健康,happy coding~


  1. 我知道它不是 IDE,只是编辑器,但是配置一下之后真的就相当于 IDE 了,原谅我吧() ↩︎

  2. 实在是不知道怎么翻译这个词比较好…… ↩︎

Licensed under CC BY-NC-SA 4.0
最后更新于 Dec 28, 2025 15:46 UTC