配置 Python 环境复现 Github 项目
一篇论文公开了自己的代码和数据集。怎么在本地复现呢?
前期准备
首先要获得代码的环境,如果提供了环境,那就比较简单了。比如,我现在就有如下的环境要求:
1 | |
1 | |
前者是 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 | |
可以查看支持的最高 CUDA runtime 版本。
什么是 CUDA runtime 呢?有点类似于虚拟环境,PyTorch 等框架运行的时候会自动安装。
总结一下,有了支持 CUDA runtime 的显卡驱动和 CUDA runtime 的存在,我们的深度学习框架就可以运行了。
环境配置
环境配置有两条路子,venv 或者 conda。
venv
venv 比较适合轻量级的环境配置,像课程作业那种依赖结构比较简单的项目通常使用这种方法,比较方便快捷。
一般来说,为了管理方便,项目的创建者会把项目所有的依赖写入到一个 requirements.txt 文件中,方便其他人了解项目需要的依赖,便于安装。
比如,有一个项目需要用到 PIL 库进行画图,就会把
1 | |
写到 requirements.txt 中。
我们常见虚拟环境的方法一般是:
1 | |
不知道读者注意了没有,我们该如何指定安装的 Python 版本呢?毕竟,直接用 python 运行,使用的是终端在 PATH 中(当然也可能是当前目录)找到的第一个 Python。
一个问题是,比如我本地 Python 的版本是 3.12,然而一个项目需要 3.11 的版本才能运行,我该怎么办?
一种解决方法是,在 Python 的官网下载 3.11 版本的 Python,然后在创建虚拟环境的时候显式指定那个版本 Python 所在的位置,来创建虚拟环境。
如:
1 | |
版本一多,哪里还顾得过来。因此,另外一种解决方式是用 conda。
conda
conda 最大的优势就是可以指定不同版本的 Python,再也不需要手动一个个下载了。
安装的话,懒人法是安装 Anaconda Distribution,啥都有咯。不过如果只安装 conda,是不是没法使用多个 Python 版本呢?还需要再研究。
现在假设我们已经有 conda 了,如何安装依赖呢?
还是要先创建一个 Python 环境:
1 | |
-n 是指定环境名字的意思。和 venv 不一样,我们不需要在意到底是在什么文件夹内调用的 conda 命令,因为并不会有一个 venv 文件夹创建在当前文件夹中,而是由 conda 统一来管理。
如果运行过后,发现提示找不到 conda,可能需要把 conda 加入环境变量的 PATH 里。
一般是加这三个:
1 | |
然后,激活环境:
1 | |
之后要么用 conda 来安装依赖,要么仍然可以用 pip 来安装。
指定下载源
在深度学习领域,有一些包并没有发布到 PyPI 上,那么就需要指定源,才能下载下来。
就好像,下载手机软件默认用的是系统的”小米应用商店”,然而有的应用并没有发布在应用商店中。这时候就需要从 Google Play 或者一些其他地方下载。
如果要安装单独一个依赖,这样就可以了:
1 | |
-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 | |
细节问题
有的项目会给出运行的参数,其中就可以指定 GPU 的数量。CPU 的数量是从 0 开始计数的,所以,如果看到某个项目的默认参数是 1,别高兴的太早,还是需要手动指定一下 --cpu 0 的。
