caffe适配cudnn9.6.0(ai修改代码踩坑)
caffe适配cudnn:https://github.com/dyc2424748461/caffe
(测试一下,成没成,反正我看到它用gpu了😶)
因为突发奇想,想要玩easymocap,先是简单使用media跑通了一下,然后过了几天,又想使用openpose。在安装openpose的时候发现,caffe版本已经是六七年前了,有人适配了cudnn8.0,但是搜了很久也没有找到适配cudnn9.x的,于是乎咱们就想到现在ai都那么强大了,而且任务还是比较清晰的,就使用了ai试试。
刚开始并不知道现在已经有比较完善的智能体,先是尝试了千问,豆包,感觉不太行,老是让我自己写。很烦,而且报错上的处理真的很潦草。于是乎开始在网络上搜索可以完成这类的ai,然后搜到了智能体,尝试了有
mgx(emmm,因为没充钱老是暂停,体验感上稍弱一点,代码也写了部分,但是老是暂停,太耗时间了于是转移阵地了),
claude3.7(很强但是得我自己试跑运行然后反馈报错),
openhans(免费赠送的额度使用起来很爽)。
然后主要的程序使用openhands修改的,它在它的环境测试完成后,然后自己运行的时候,有部分报错,把报错发给它的话,他给出了解决方案,但是报错的问题是可能多方面导致的,所以它也不确定是为什么。而且重要的一点是,咱们完全是小白啊。不是很懂这里面的运行逻辑。
然后咱把这个点单独摘出来,问了claude,chatgpt,grok,千问,豆包,等等,给出的答案也都是差不多的,然后我就一个一个排错呗,但是可恶的是按照他们给的修改代码,修改后完全不起作用,而且有的给出要修改四五个文件,我都炸了,但是我也可怜兮兮的改了,根本没有效果,还引发了其他的报错。
这一下炸开了,开始自己动手丰衣足食了。一个一个问可能出现的原因,然后自己去排查,排查排查着猛然发现我自己真是个der,直接让它写个脚本帮我检测不就好了,好家伙,这下可来劲了。
最终确定各个版本兼容,好了不是环境的问题了。
这样排查出来那就是代码的问题了,难道openhands欺骗我了,于是在他的虚拟机里运行试了试,确实可以啊,但是看了它之前修改代码和运行的日志,欸,有点不对劲,有点不对劲,它这个版本是cpu版本的,根本不是我想要的gpu版本,还是之前被那几个mgx错误搞混了头脑,openhands行了,就无条件相信他了。好了让它重新写一版吧。
这次紧盯着openhands,虽然它有的操作着实惊呆我了,佛挡杀佛,魔挡杀魔,有的不仅改了自己的文件还删除了一些文件。为了目的不择手段,很好我很喜欢。
过了不知多久,它说好了,我这次很辩证的看着它的修改日志,有点陷入了沉思,这改了cudnn的官方文件,这删除了自己的文件,真的不会报错嘛,但是它说测试成功了,那咱们在他的环境里试试吧。一试,ok,可以运行。
现在在自己的环境里开始测试,这一测试。。。。emmm,报错,,把报错发给openhands,没事,小问题,直接解决,自己环境运行有报错,在发给他,ok,小问题,再发给他,ok,小问题。。。那么缠绵了几个来回,好了有个问题开始多种方案了,它竟然让我降低版本了,好狡猾。
咱们肯定先信他一信,版本安装了将近半个多小时,运行报错,然后丢给他,ok,小问题,出错,再丢给它,小问题,又缠绵了很久。又有个问题卡住了,卡住了。
然后咱们只请出其他的老大哥了,chatgpt,claude,grok。都尝试一遍,似乎没有得到很有用的消息,把全部报错都丢给它们,好的,他们说改咱们就改,很听劝的。改了改去,突然有个版本运行成功了,赶紧保存那个代码,正以为要走向胜利的时候,结果还是当头一棒。
一看这个版本不对啊。虽然也能跑,但是是cuda11.8啊,不行不符合咱们的目标。咱的目标是要适配到cuda12.x的,ok接着改,这种报错这种修改,各种报错各种修改,现在已经把caffe的源码差不多摸得透透的了,已经知道它整个的运行流程了。
突发一个难解决的问题,又问了将近两天,完全没有头绪。有个文件一直显示找不到函数,而且那个函数是在cuda里面的,而且我设置了使用nvcc进行编译了,把错误(只发了error)全都发给ai们,给出解决方案,咱们改!改了改去,那个错误并没有解决,放弃一天休息一下
脑袋开始各种闪回,可能的错误有哪些,还有哪些步骤是不是错了。
结果没想到的是,有个代码ai们都让我往前放,而且我放完还问了他们,都说可以,真的太傻了。不该相信他们的。虽然我也感觉不对,但是这次能找到整个错误完全是因为我自己去读代码的时候,真的感觉不顺 ,用疑问并质疑的语气问的grok,然后给出了答案,有指定了一个文件使用特定的编译器(因为之前编译成功了,根本就没有想到是这个问题)。然后开始验证~~
可以,可以,编译运行成功,进行测试。可以可以,使用了gpu。然后进行了一点点的旧的api的更换,让日志显示正确的版本信息。ok了,然后后面又开始了半个多个小时的新环境中的编译。成功编译。
测试成功。到此为止吧。
也不知道最后成没成,就放这吧。