集群配置torch踩雷记录
随着期末考试结束,本人重启了被四大原理stall了很久很久的复现工程,首先便是我们最喜欢的配环境啦
第一次尝试
环境环境,conda create
,往里塞能看得见的requirements.txt
,大胜,于是乎开始下载学长写的代码pip install -e .
,再次大胜,遂骄傲,开始复现,大败
定睛一看,TypeError:unsupported operand type(s) for |: ...
?什么玩意,或运算符用错了吗?进调用栈一看,椅子电脑虾,怎么把类型标注里面的|
当成或运算符了啊
上网一查,发现是python版本过低导致的,直接升版本,干到3.10,再次复现,依旧大败
定睛一看,哎哟老熟人deepspeed
找不到卡,开始翻找之前的博客,找到啦!
解决之后开始井喷ModuleNotFound
,于是疯狂pip
,直到……
被apex打败
遇到了报错No module named 'apex.multi_tensor_apply'
,我一条pip install apex
,毫无作用
上网查询,告诉我apex
需要从源码手动编译下载,而不能直接下载,于是clone下来一切顺利,跟着readme
走呀走呀走呀,还剩最后一步之时,报错啦Torch did not find available GPUs on this system
?怎么又找不到卡,你****
研究torch
研究一顿之后发现,我的torch
是在某一个requirements.txt
里面被偷偷安装的,然后下成了cpu
的版本,这一项可以通过以下几种方式来确定:
pip list
查看torch
的版本,如果后面没有+cuxxx
则是CPU,反之其中的xxx
则为CUDA版本(这个不是说加粗!)python -c "import torch; print(torch.cuda.is_available())"
,如果是False
则代表是CPU版本的python -c "import torch; print(torch.version.cuda)"
,如果是None
则代表是CPU版本的
既然如此,由于我现在的这个环境断断续续往里拉了好几天(中间经历了美妙的信号处理原理考试和编译原理考试),我决定直接开一个新环境来装
在脚本中首先通过module load
加载cuda/12.1
,再按照官网指示运行命令
1 | conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia |
之后确实开始下载了,恰逢我腹中绞痛,头晕脑胀,只能休息等待(没想到这窜窜病持续了两天半呜呜呜)
一天之后,待到身体略微恢复了些力气的时候,上服务器看了一下节点状态,懵了
?不是你一个conda install
跑了28小时?源在火星吗?
遂鲨掉这个进程,开始询问学长,在学长的悉心指导下,终于弄明白了torch的安装流程
战胜torch
首先需要知道的是,这个服务器是由slurm集群管理的,同时是linux_aarch64架构,因此很多情况下,直接pip install
并不能够安装带有cuda版本的包,或者根本不能安装到包,可能因为:
- 登录节点上没有GPU资源
pip install
没法指定包兼容的处理器版本
因此这种情况下,我们需要下载whl文件之后手动编译,whl文件可以理解为一个python
安装包的压缩包,直接利用pip install xxx.whl
就可以编译安装对应的包,通常whl文件的文件名有以下规范:
1 | torch-2.3.0+cu121-cp310-cp310-linux_aarch64.whl |
按照-
来进行划分,从前到后分别为:包名、包版本、python版本(cpxxx
表示包含了C语言扩展的Python)、ABI标签(代表二进制兼容性)、支持的平台架构
仔细查看集群使用手册之后发现,这个集群已经帮助我们下好了很多很多版本的轮子,于是直接跑到对应文件夹下开始下载,下载完成后测试,大败
报错为
1 | libcudart.so.12: cannot open shared object file: No such file or directory |
上网查询,发现是没有cuda或者版本不对,于是通过module load
加载对应版本的cuda,解决了这个问题,结果出现:
1 | ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by xxx/lib/python3.10/site-packages/torch/lib/libtorch_python.so) |
和学长一起奋力思考之后决定,重装一遍!
这次留了个心眼,在pip install
和测试之前,分别跑了module load
对应版本的cuda cudnn gcc
,大胜利!
终于成功装上了带cuda的torch了呜呜呜
注
注意每次import torch
之前都需要module load