配置 Python 环境复现 Github 项目
一篇论文公开了自己的代码和数据集。怎么在本地复现呢?
前期准备
首先要获得代码的环境,如果提供了环境,那就比较简单了。比如,我现在就有如下的环境要求:
1 | networkx==3.1 |
1 | cuda 11.5 |
前者是 requirements.txt
的内容,下面是对 CUDA
和 Python
版本的要求。
Python
我们很清楚,但什么是 CUDA
?
CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的 GPU 通用并行计算平台和编程模型。
它让你可以用像 C/C++ 或 Python(通过 PyTorch、TensorFlow 等)这样的语言,把原本只能在 CPU 上运行的程序搬到 GPU 上加速运行。
所以许多 AI 深度学习有关的项目都需要 CUDA 才能工作。
不过幸运的是,如果要让深度学习的代码在我们的电脑跑起来,我们不需要额外安装 CUDA,只需要两件事:
- 有显卡驱动;
- 有 CUDA runtime。
第一个很简单,一般来讲,电脑出厂的时候都会自动安装。
使用
1 | C:\Users\summe>nvidia-smi |
可以查看支持的最高 CUDA runtime
版本。
什么是 CUDA runtime
呢?有点类似于虚拟环境,PyTorch
等框架运行的时候会自动安装。
总结一下,有了支持 CUDA runtime
的显卡驱动和 CUDA runtime
的存在,我们的深度学习框架就可以运行了。
环境配置
环境配置有两条路子,venv
或者 conda
。
venv
venv
比较适合轻量级的环境配置,像课程作业那种依赖结构比较简单的项目通常使用这种方法,比较方便快捷。
一般来说,为了管理方便,项目的创建者会把项目所有的依赖写入到一个 requirements.txt
文件中,方便其他人了解项目需要的依赖,便于安装。
比如,有一个项目需要用到 PIL
库进行画图,就会把
1 | pillow |
写到 requirements.txt
中。
我们常见虚拟环境的方法一般是:
1 | # 创建环境 -m 必须有, 表示导入 Python 标准模块 |
不知道读者注意了没有,我们该如何指定安装的 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 | C:\ProgramData\anaconda3\Library\bin |
然后,激活环境:
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 | -f https://example.com |
细节问题
有的项目会给出运行的参数,其中就可以指定 GPU 的数量。CPU 的数量是从 0 开始计数的,所以,如果看到某个项目的默认参数是 1,别高兴的太早,还是需要手动指定一下 --cpu 0
的。