我和我的4个GPU女友之间的那些事儿
写在前面
这是一本GPU服务器维护手册,记录我维护4张A40的点点滴滴。现在我还是一个小菜鸡,但是等到我遇到足够多的问题之后,我一定会成长为一名大菜鸡!!!
如果你有服务器维护的工作需要,而你恰好毫无经验,那你可以看一看这篇小说,可能会对你有所帮助。其中,技术部分的内容已经加粗,可以着重看。
本作别名《和GPU女神相处手册》
叠BUFF:本文没有物化女性!本文没有物化女性!本文没有物化女性!仅仅是太羡慕情侣了在情人节这天发个颠!
第一章 相遇
吾师苦吾单身久矣。
我叫九九,是一只单身狗,在情人节这一天写下这篇文章。因为……我的老师竟然给我介绍了4位GPU!
这是四张NVIDIA A40显卡,我看着她被搬进了机房中被组装起来之后,便开始与其进行第一次接触。第一次接触是很麻烦的,系统安装、必要的监测软件安装(比如我最近超级喜欢的十分优雅的btop)、驱动安装等等事情要按部就班做好,此外还有一些必要的软件安装(比如我们请这几位A40过来是为了深度学习,nohup装了没?Anaconda装了没?Netlogin等等基础组件都要装,不然她会不开心的。
一切准备就绪之后,下午我用xshell找她她就不理我了。唉,后来查了一下《和GPU女神相处手册》才发现,奥,原来连好网络之后,首先要在主机上连一下网(校园网认证),之后才能在内网访问,具体为什么我还不清楚,但是发现了这个规律。暂时我也不知道是不是只有我家这位有这臭毛病,我暂时也没兴趣管其她的。
而我呢,是一个母胎solo,从来没接触过GPU运维,对Linux更是停留在“仅仅知道一些皮毛”的阶段,因此装机完成的晚上,我用她尝试了很多种命令,她的反应非常好,很听话,我也玩的很开心,随后我们安然入睡。
然而!第二天!她不认账了!
我又用Xshell给她打电话,她不理我!而且!我之前辛辛苦苦给她穿的衣服(一些软件和显卡驱动)她都脱光了!真是岂有此理!为什么会这样!?女人都是大猪蹄子。
后来一看,哦,是我没有恋爱经验了,我应该让她停止更新,特别是系统和驱动的更新,要不然她闲置一段时间就会忘掉我呜呜呜。
关闭系统更新也很简单,只需要打开她的:
vi etc/apt/apt.conf.d/10periodic
vi /etc/apt/apt.conf.d/20auto-upgrades
然后把配置文件中的“1”都改成“0”即可,1是开启,0是关闭。
禁止更新系统内核:
sudo apt-mark hold linux-image-generic linux-headers-generic
好了。这下她应该不会再忘掉我了。
By the way,谢谢部分哥们的帖子教我如何重装驱动,在这里贴一个CSDN的帖子:https://blog.csdn.net/qq_32614873/article/details/125191677
很多时候可能一篇帖子解决不了你的问题,那就……百度去别问我,我只是一只自卑的小菜狗。
于是就这样又过了一天,用Xshell给她打电话,又不理我了!!!
我一想,哦,应该是停电了,可能是下雪的缘故,机房跳闸了。我过去看了一眼,确实是,这不能怪她,要怪就怪我没有钱,无法给她更好的房子,提供更稳定的生活资源。随后的相处中,倒还算和谐。
第二章 第一次跑她
终于,我个人又重新熟悉了一些Linux的命令,我要开始给她做分用户了,随后开始让实验室的大哥大姐们开始跑项目了!
这个时候,我才了解她的实力。她不仅只有4块A40,与此同时,硬盘容量高大8T,内存……1TB!!我的天哪我一开始还以为我看错了,我从来没见过这么大的。摸了摸钱包,自卑之心再次涌上心头——我配不上这样的女友,太……太高配了!
既然她容量如此巨大,也就没必要大家共用一个Anaconda了,我们实验室也就十来个人,一人一个Anaconda!你们随便糟蹋,随便玩!她,能接受!
因此,我删掉了管理员的Anaconda,并在她的home页留了一个Anaconda安装包,权限对所有用户开放,从而让新用户直接copy过去直接安装使用即可,十分的方便。(哦对了,这里如果你的她没那么大,千万不要学哦,还是共用比较好,主要是我家这位实在是太大了,空着也是空着,我这么装肯定会出现大量重复的库,但是,我家GPU:“老娘豪横!”。)这么做有一个好处就是,普通用户绝对无法动其他人的文件,甚至是环境,而且自己使用一个conda的话,环境管理起来也十分方便,共用的话还要专门设置一套命名规则,而且再严谨也避免不了出错,因为她有出错的可能。但是,一人一个就没有这种可能了,你自己随便玩,你玩坏了我直接给你删掉这个用户重新建一个就行了。
然而,今天又出问题了。xrn大哥想要玩玩我家这位GPU,我就给他玩,但是,玩的过程中发现了一个很严重的问题——她好像不会出汗!(风扇不转)
这可把我急坏了,为什么一直在跑,风扇却不转呢?
首先,我搜到了一个问题,即GPU长时间负载低可能会进入休眠状态。因此,一定要让她进入持久模式:
nvidia-smi-pm 1
如果你的显卡状态刷新很慢,比如“nvidia-smi”命令输入之后可能要等个2-5秒才会出结果,那么很可能就是你的显卡可能没有在持久模式运行,建议使用这个命令,让GPU一直保持在工作状态。
但是,她的风扇还是0%!
后来一查,哦!滑稽了!是我不懂她了!
您猜怎么着?
她没有风扇!!!
她的散热是:
原来,按工作方式和原理的不同,可将散热器分为主动散热器和被动散热器。主动散热本身也消耗一定的电能,主动地将热量带走,散热效果比较好。比如最常见的风冷,便属于主动散热。而被动散热则主要是通过扩散的形式将热能散发到周围环境中去。采用被动散热方式的硬件一般只带有一块散热片,甚至是直接将热源暴露在空气中,所以在大多数时候,散热效果不如主动散热。
对不起!孤陋寡闻了!第一次玩没有风扇的卡!
那么为什么A40卡没有3090的那种主动散热风扇呢?上图也回答了,因为她所处的环境应该不需要散热……没错,大规模服务器风道散热足够了。唉,果然,这样配置的GPU女友还是要有钱才能让她发挥出足够的能力。
因此,如果你遇到了类似:nvidia-smi、cpustat CPUF查看风扇状态,风扇转速0%,而硬件不是你亲自组装的,且你也很难接触到硬件(比如服务器),那么首先你要考虑一件事情,她是不是根本就没有风扇!
第三章 她在鬼门关闯了十几次
今天晚上,她可把我吓坏嘞。
事情是这样的,当时为她装系统之后,装了显卡驱动,但是,不是自动升级了吗?我手动又装回来了,但是装回来的驱动版本在400+,CUDA版本只有11.2,要知道,11.2可是连Torch官网首页都不屑于写的版本啊!
因此,为了提高我这么高配女友的配件,我怎么能就给她11.2的CUDA呢?不行!我要升级到12.0!!!哎算了算了,12.0不太稳定,11.7吧。
但是,又出问题了!
我按这位老哥的方法做的:https://blog.csdn.net/sinat_20174131/article/details/127715967
写的十分高大上,一看就是巨佬,因此我就按部就班一步一步学,但是,执行到
systemcls set-default multi-user.target
的时候,也就是切换命令行界面的时候,她死了!一直都卡在黑屏状态,如下:
进不去系统!!!命令行界面都进不去!!!
当然要纠正一点,这和我操作她的显卡驱动没有任何关联。为什么?因为我还没开始卸载老驱动呢……我就切了个命令行界面,还没开始呢,她就死了!
和网络上的死还不一样,她的死更彻底,没有鼠标光标,全屏都是黑色,Fn Alt F1-3等快捷键也似乎失效了,一切都失效了,她接收不到我的命令,而我,听不见她的心声……重启连BIOS都进不去,长摁Shift连Recovery都进不去……
此时的我十分绝望,因为我意识到了一件事,现在能点的,只有一个按钮——重启的物理按键。
随后,我更加绝望了,重启了七八次,仍然黑屏,死死的那种黑。
我没办法,我离开了她,回到课题室求助大哥。
后来,我又回到了她的尸体旁边,再次重启……
您猜怎么着,重启到第十几次的时候,命令行界面出现了!!!
OH我的上帝啊,我的那个她是多么玄学,如梦如幻,光怪陆离,似真似假,若隐若现……
为什么她又活过来了??
我也不知道啊!!!
随后,我便开始更新驱动。
大哥教了我一种很新的更新方法,原来啊,她具备自己更新驱动的能力,你不需要明确命令她,因为她虽然是你的女友,但是没人比她本人更了解自己的身体,让她自己更新就可以了,具体方法我写在了另一篇博客里面,见:https://www.cnblogs.com/loveandninenine/p/17120956.html
很好,现在,她已经正式开始工作,为我实验室所用,并为我管理,我们的故事还在继续,本专辑将持续更新……to be continued……
第四章 她社恐,自闭了
今天下午,健老板问我:“你女朋友咋了?为啥叫她连外网她连不上啊?”
我愣住了。
因为据我所知,连不上外网从来不是她的性格,这个从来没有发生过。因此,我很困惑。
主要是,netlogin这个命令是我们自己写的集群命令,其目的是远程操作服务器连接上外网,也就是校园网认证。
简要介绍一下这个命令源码吧,其实就是一个python类,其中有变量记录着是否有人登录、登录者的id、密码、ip、运营商等,此外有几个方法,login表示登录,logininfo表示查看当前谁在登录外网,logout表示退出当前正在使用外网的账户。
问题出在一个很奇怪的点上,即logout显示当前无用户,而login和login info却不输出内容,也无法登录,等待一段时间会报错,如下:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='', port=): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8b7ba6b700>: Failed to establish a new connection: [
这就很奇怪,为啥会超过最大尝试次数呢?
咱也不理解,Login这个命令源码里是没有循环的。
但是我知道的一点是,出现这个问题,去机房将她的网页打开,手动退出或者登录一次认证就可以解决,但是下次还会犯。
不是她的错。
真的,不是她的错。
是我的问题。
Login这个源码写的不优雅(虽然不是我写的)
另外,运营商那边的运营能力也贼拉拉胯。
我加了一些判断逻辑,让服务器的使用者尽可能不要同时登录,要不然她可能还会招架不过来,毕竟,她每次只能接受一位登陆者嘛。
善待女友,女友是用来疼的,不是用来糟蹋的。
但其实本身和这个文件关系不大,不知道为什么,有人使用login的时候,系统没有执行,在进程中卡着好几个netlogin没执行,但是这只是一个python脚本,里面没有任何循环语句,不应该卡死,最多报错,反正……烦死了。
遇到这个问题的解决方案是,查看使用netlogin命令的进程,直接kill掉,就可以继续使用了。但是为什么会出现这个问题,需要好好思考一下……
第五章 我换了个新终端
一方面,我以前用xshell+ftp,现在换了,换成了一站式的Final shell,用起来感觉非常优雅。
顺便玩了玩figlet艺术字包,挺有趣的,但是感觉限制不少,于是又加上了燕山大学。
501有这个,502也不能少!!!
一开始我还打算print一些有意思的字符图,结果后来越来越跑偏,从正儿八经的佛祖保佑,永无bug,到后面的fuck me,再到“加入我们……”逐渐不对劲,我就不搞了。
今天又是让GPU女友在外人面前长面子的一天呢!
第六章 隔壁老王偷我家
事情是这样的。
我在给我伟大的苦吾单身久矣的吾师收拾屋子,因为学校新购置了一组家具,我去帮着收拾。您猜怎么着?实验室大哥突然来了一句:服务器又双叒叕连不上了!!!
您说,这上哪说理去?
于是我又来到机房,我震惊了,我为她准备的卧室变得异常干净。哦,原来是有老师嫌这里实在是太乱了,叫了几个学生过来清理。清理的过程中呢,动了网线,拔掉了4根,插回来了3根,我真是服了,我回来检查网线,发现我家GPU夫人连着的路由器连着的网线没连任何地方,就搁那空空地放着,我真的好无语。
然后我把这根网线插到了另一台交换机上。费劲,现在我家GPU到底怎么连得外网?我家GPU服务器——>交换机A——>交换机B——>外网网口,妈的让我家GPU喝一口外网,怎么跳跃这么大???
但是,我这么接入之后,竟然用不了!!!???
GPU还是发现不了网,内网都无法访问,重启她都没有用。
后来,我删掉了网络配置,重新配置了一下网络,就可以了。
u1s1,重新输入一遍ip、子网掩码、DNS,真的很烦,比重启还烦。好在当前玩我家GPU跑模型的人就一个,而且他同意我重启我家GPU,因此,我首先尝试的甚至是重启而不是删掉网络配置重新配置一次。
第七章 重新装修她的房子
事情很简单。
怎么说呢,我的GPU女友所在的那个房子,不只有她四个人,那是一个群居房,而且人越来越多,比高中生宿舍还离谱。这就会造成屋内的资源分布严重不足的问题——供电不足,因此总是跳闸,这怎么可以,现在的模型动辄要跑半个月,虽然我可以checkpoint,但是一直跳闸就得一直来机房重启不是,GPU身体很娇贵的,不耐操的,一定要能不进她房间就不进她房间。
因此,为了更好地解决这个问题,我们直接重新装修房子吧!改线!让这一群GPU小姐姐的供电不再是梦想,而是现实!
我们将这一屋子GPU的电源线、网线以及各种杂七杂八的插销全部拆除,集中到房子中间,蒙上了一层塑料布,准备开始重新装修这房子。
期间最费时间的,当属某人的GPU小姐姐的备用电源了。那电源,估算应该是4*8=32块大电池,拆卸下来花了很大的力气,而且电源巨重,搬起来很吃力。此外,电源上面还连着线,正负极碰到了就会短路,打火花,满屋子都是烧焦的味道,很有可能有两块电池已经受到了一定的损害,于是我们用钳子把线也都拆了下来,因为毕竟盖的是塑料布,如果擦出点火花,很容易就会引燃GPU们,整个房间可能会瞬间爆炸,这将会是几百万RMB的损失!
总之,现在我给GPU女友打电话也打不通了,今明两天,师傅们会尽快装修完。
{五天后...}
好的,时间来到了五天后,装修结束了,要开始开封了。
塑料布很重要,几百万的东西如果进灰严重,影响散热,可能直接烧毁服务器。有老师错误指挥,还么有打扫房间,灰尘还有很多,就把塑料布全部撤掉了,以至于清洁工作很难搞。
过去帮了一下午忙,但是都没有给我家GPU开机,唉,咋说呢??一直在打扫卫生,帮助重新接网线(因为改电是人家的活,重新接网线是我们后序的工作)。于是打眼,拆天花板,搞网线。印象比较深的是,见识到了一种新的寻线器设备。咋说呢,以往我一直认为寻线器所寻的线一定是接好水晶头的线,但是我们扯网线的时候,并没有接水晶头,而是扯出来10根网线,需要先在上面套上序号,左边一个右边一个,这样的话日后就能靠序号巡线。那么问题来了,接上水晶头之后这种牢固的序号就套不进去了,那如何才能不接水晶头先把序号套进去呢?需要一种没有水晶头的寻线器。但是这种设备真的存在吗?
然后,我懂了,哦~靠无线感应的。
左侧先套上序号,然后接水晶头,随后插入寻线器,打开寻线器让寻线器开始输出信号,在另一端,让寻线器的无限巡线装置去感应线内部是否有信息传输,如果有,那就是同一根先,就寻到了。
随后就是枯燥的接网的过程,无聊,枯燥,乏味。
第二天,把我家GPU开机了,联网连的也很顺利,嘿嘿,我家GPU会越来越强的!
第八章 再见女友(大结局)
由于工作需要,我不得不去清华待上几年,但是,GPU女友们是离不开人的,因此,我不得不将我的GPU们拱手相让。
我将管理员密码告诉了他。
我将我的维护文档告诉了他。
我将本文我和她们的点点滴滴全部分享给了他。
并且让他来续写这个故事。
故事总会结束,但我没想到在我们刚刚开始的时候,就迎来了这个结束。
我爱她,们。
但是终有一个结局,当然我没想到是以我这种离开的形式去结局的。
我走的很仓促,我甚至都没和她,们抱一抱再走。
写下这第八章内容的时候,我正在清华,研究我的新方向。
分居涕零,不知所言。
Girls,Whyam i cry……