今天遇到了几个有意思的问题,折腾了一天,总算是解决了。记录一下,之后如果再遇到,或者大家有类似的问题,可供参考。
安装 pytorch GPU 版本
name: nlp
channels:
- defaults
dependencies:
- python==3.9.0
- numpy>=1.19.2
- tqdm>=4.56.0
- pytorch==1.12.0
- transformers
- datasets
我一开始用上面的 environment.yml
新建一个虚拟环境。但用它跑 pytorch 模型的时候,总感觉很慢。后来发现原来 torch.cuda.is_available()
是 False。得,服务器的 GPU 根本没用上。
于是我开始安装 pytorch GPU 版本。去官网上找,安装命令如下:
conda install pytorch pytorch-cuda=11.7 -c pytorch -c nvidia
此时我才发现,原来 GPU 版本就是 CPU 版本加上 cudatoolkit,stackoverflow 上的讨论也印证了这一点:Can both the GPU and CPU versions of PyTorch be installed in the same Conda environment?
那么如何在 environment.yml
文件里指定安装 pytorch GPU 版本呢?摸索一番并实践后,可以这样写:
name: nlp
channels:
- pytorch
- nvidia
- defaults
dependencies:
- python==3.9.0
- numpy>=1.19.2
- tqdm>=4.56.0
- pytorch==1.12.0
- cudatoolkit=10.2
- transformers
- datasets=2.7.1
有两点变化:
- 指定
pytorch
和nvidia
作为优先级更高的 channels - 在依赖中添加
cudatoolkit
注意 cudatoolkit 的版本号,要根据 GPU 驱动来确定。通过 nvcc --version
查看 Runtime CUDA 的版本。我这里的 CUDA 版本是 11.2,因此选择了版本更低的 cudatoolkit=10.2
如果不了解 CUDA, cudatoolkit 这些概念,可以参考:PyG 安装以及关于 CUDA 的扩展
datasets 的 bug
如果 datasets
的版本是 2.6.1 或 2.7.0,可能会遇到这个 bug,详见 Github issue:
TypeError: can only concatenate str (not “int”) to str
这时需要升级一下:
pip install -U datasets
Linux 空间管理
pytorch GPU 版本占的空间是很大的。今天在安装的时候,服务器的磁盘空间达到了限额。没办法,只能删一些不必要的文件了。
首先,可以使用 conda clean --all
删除一些压缩包、不常用的 packages 以及 conda 的一些缓存文件。通常可以清出几个 GB 的空间,相当可观。参考讨论:Is it safe to manually delete all files in pkgs folder in anaconda python? 特别地,讨论中提到,在 Linux 或者 Windows 下,都可以例行清理 conda 的 pkgs
文件夹,里面只是一些缓存文件 (the ‘pkgs’ directory is only a cache)
注:
conda clean --packages
是conda clean --all
的子命令,前者包含于后者。
然后,查看一些其他的非必要文件。两个很有用的 Linux 命令:
rm -rf dir_name
:强制删除整个(非空)文件夹。
du -h --max-depth=1
: 查看当前目录下磁盘使用情况,隐藏文件也会被列出。如何理解这一命令:linux command explain du -h --max-depth=1
以我的情况来说,.cache
文件夹占的空间不小,可以酌情清理;至于其他的项目文件,就具体情况具体分析了。