一篇论文公开了自己的代码和数据集。怎么在本地复现呢?

前期准备

首先要获得代码的环境,如果提供了环境,那就比较简单了。比如,我现在就有如下的环境要求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
networkx==3.1
numba==0.58.1
numpy==1.24.4
pandas==2.0.3
pillow==10.4.0
prompt_toolkit==3.0.43
tokenizers==0.20.3
torch==1.10.0+cu113
torch-cluster==1.6.0
torch_geometric==2.2.0
torch-scatter==2.0.9
torch-sparse==0.6.12
torch-spline-conv==1.2.1
torchaudio==0.10.0+cu113
torchvision==0.11.1+cu113
tqdm==4.67.1
traitlets==5.14.3
transformers==4.46.3
1
2
cuda 11.5
python 3.8.20

前者是 requirements.txt 的内容,下面是对 CUDAPython 版本的要求。

Python 我们很清楚,但什么是 CUDA

CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的 GPU 通用并行计算平台和编程模型。

它让你可以用像 C/C++ 或 Python(通过 PyTorch、TensorFlow 等)这样的语言,把原本只能在 CPU 上运行的程序搬到 GPU 上加速运行

所以许多 AI 深度学习有关的项目都需要 CUDA 才能工作。

不过幸运的是,如果要让深度学习的代码在我们的电脑跑起来,我们不需要额外安装 CUDA,只需要两件事:

  1. 有显卡驱动;
  2. 有 CUDA runtime。

第一个很简单,一般来讲,电脑出厂的时候都会自动安装。

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\summe>nvidia-smi
Sat Apr 12 20:12:26 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.94 Driver Version: 560.94 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 ... WDDM | 00000000:01:00.0 Off | N/A |
| N/A 37C P0 11W / 76W | 0MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+

可以查看支持的最高 CUDA runtime 版本。

什么是 CUDA runtime 呢?有点类似于虚拟环境,PyTorch 等框架运行的时候会自动安装。

总结一下,有了支持 CUDA runtime 的显卡驱动和 CUDA runtime 的存在,我们的深度学习框架就可以运行了。

环境配置

环境配置有两条路子,venv 或者 conda

venv

venv 比较适合轻量级的环境配置,像课程作业那种依赖结构比较简单的项目通常使用这种方法,比较方便快捷。

一般来说,为了管理方便,项目的创建者会把项目所有的依赖写入到一个 requirements.txt 文件中,方便其他人了解项目需要的依赖,便于安装。

比如,有一个项目需要用到 PIL 库进行画图,就会把

1
pillow

写到 requirements.txt 中。

我们常见虚拟环境的方法一般是:

1
2
3
4
5
6
7
8
9
# 创建环境 -m 必须有, 表示导入 Python 标准模块
python -m venv .venv

# 激活环境
.\.venv\Scripts\activate # Windows
source .venv/bin/activate # Linux or Mac

# 安装依赖, -r 表示 --requirement, 从某个文件中安装依赖
pip install -r requirements.txt

不知道读者注意了没有,我们该如何指定安装的 Python 版本呢?毕竟,直接用 python 运行,使用的是终端在 PATH 中(当然也可能是当前目录)找到的第一个 Python

一个问题是,比如我本地 Python 的版本是 3.12,然而一个项目需要 3.11 的版本才能运行,我该怎么办?

一种解决方法是,在 Python 的官网下载 3.11 版本的 Python,然后在创建虚拟环境的时候显式指定那个版本 Python 所在的位置,来创建虚拟环境。

如:

1
C:\Users\cirno\Python311\...\python -m venv .venv

版本一多,哪里还顾得过来。因此,另外一种解决方式是用 conda

conda

conda 最大的优势就是可以指定不同版本的 Python,再也不需要手动一个个下载了。

安装的话,懒人法是安装 Anaconda Distribution,啥都有咯。不过如果只安装 conda,是不是没法使用多个 Python 版本呢?还需要再研究。

现在假设我们已经有 conda 了,如何安装依赖呢?

还是要先创建一个 Python 环境:

1
conda -n foo python=3.8.20

-n 是指定环境名字的意思。和 venv 不一样,我们不需要在意到底是在什么文件夹内调用的 conda 命令,因为并不会有一个 venv 文件夹创建在当前文件夹中,而是由 conda 统一来管理。

如果运行过后,发现提示找不到 conda,可能需要把 conda 加入环境变量的 PATH 里。

一般是加这三个:

1
2
3
C:\ProgramData\anaconda3\Library\bin
C:\ProgramData\anaconda3\Scripts
C:\ProgramData\anaconda3

然后,激活环境:

1
conda activate foo

之后要么用 conda 来安装依赖,要么仍然可以用 pip 来安装。

指定下载源

在深度学习领域,有一些包并没有发布到 PyPI 上,那么就需要指定源,才能下载下来。

就好像,下载手机软件默认用的是系统的”小米应用商店”,然而有的应用并没有发布在应用商店中。这时候就需要从 Google Play 或者一些其他地方下载。

如果要安装单独一个依赖,这样就可以了:

1
pip install foo -f https://example.com

-f 表示 --find-links

If a URL or path to an html file, then parse for links to archives such as sdist (.tar.gz) or wheel (.whl) files.
If a local path or file:// URL that’sa directory, then look for archives in the directory listing. Links to VCS project URLs are not supported.
(ref: pip docs)

如果在 requirements.txt 文件中,该如何指定呢?

一般在文件的开头加上 -f 和参考的链接,虽然放在后面也可以,但是一般在前面,更醒目。

1
2
-f https://example.com
torch==1.10.0+cu113

细节问题

有的项目会给出运行的参数,其中就可以指定 GPU 的数量。CPU 的数量是从 0 开始计数的,所以,如果看到某个项目的默认参数是 1,别高兴的太早,还是需要手动指定一下 --cpu 0 的。