华为大模型演示翻车现场:time.sleep(6)真的值得大惊小怪吗?老程序员深度解析代码背后的真相!睡6秒不是什么大问题,不过图像RAG,到底是个什么坑?
5 月 17
AIGC, 华为很厉害 AI, Bolan, bug, contranite, DOS攻击, e latch, HUAWEI, image list, in bedding, inviting, LLM, MindSpore, MindX, Python, RAG, Retry, rpm限制, sleep 6, stable diffusion, stream输出, time.sleep, YouTube, 人工智能, 代码, 企业用户, 升腾大模型, 华为, 华为大模型, 史量化, 后台进程, 图像生成, 图片 RAG, 大模型, 字节跳动, 安卓, 客观中立, 嵌入, 拉玛, 拉玛3, 提示搜工程, 提示词, 政府用户, 昇腾, 欺骗, 流式输出, 游戏, 演示, 状态监控, 电商, 真相, 矢量空间, 翻车, 老范, 老范讲故事, 职业编程, 萝卜急了不稀泥, 解读, 谷歌, 谷歌IO, 豆包, 通义千问, 锁定状态, 零一万物, 骑士 华为大模型演示翻车现场:time.sleep(6)真的值得大惊小怪吗?老程序员深度解析代码背后的真相!睡6秒不是什么大问题,不过图像RAG,到底是个什么坑?已关闭评论
大家好,
欢迎收听老范讲故事的YouTube频道。今天咱们来讲一讲华为大模型演示翻车现场。
近期呢,非常多的AI相关的项目都在进行演示和发布,特别是国内。为什么它?因为时间到了。通常每年在这个时候也会有很多发布,因为每年在这个时候会开谷歌IO,大家喜欢在谷歌IO的前后进行信息的发布啊。因为谷歌IO算是全世界程序员或者开发者的一个盛会吧。那这个前后进行信息发布的话,如果它被安卓采用了,或者再跟谷歌搭上一点关系的这种技术会有更好的发展空间。
那今年呢,还有另外一个事情,就是拉玛3发布。前面其实国产很多大模型都是跟拉玛2有千丝万缕的联系。其实当时就已经预言过,我说拉玛3出来看多长时间之后,国内的大模型会争先恐后的再更新换代一波。现在呢,这个时间点就到了。前面阿里的通1,000问2.5发布,这两天还有几个,一个是零一万物的啊,叫e latch大模型发布,然后字节跳动的豆包大模型前两天也发布了啊。这豆包大模型主打的一个便宜,对别人的价格都便宜非常多,因为大模型的价格一般是按TOKEN算的啊,一般一个汉字是一个TOKEN,大概四个字母,还是几个字母的英文单词,是一个TOKEN啊,它这个算法比较奇怪。
华为呢,也在发布他们的升腾大模型。结果现场演示的一段视频就爆火了。现场演示什么呢?就是一个Python代码,啊而且是正在写的Python代码,他们还很神奇,直接在底下的命令行窗口里边就输入信息了,说请帮我输出一个什么什么图片,还号称是REG的一个图片生成。一开始啊,这位小哥输出的时候呢,就写错了,先写了请帮,然后啪打了一个回车。其实我们在做各种大模型实验的时候,这个事是很常见的啊,因为呢都是对话系统嘛。你一打回车,他就开始干活去了。所以呢,一开始写请帮,他打了一回车,打一回车呢,后边那个程序就开始跑了。他就打了个Ctrl-c,就是把这个程序中断掉。
将一般我们使用的,像Python这种解释性语言,或脚本语言的程序,都可以靠Ctrl-c把它中断下来。中断完了以后呢,大家就看到了一些信息,写的是输出到,叫做output点洁癖器,是调用的XMINDX的一个库。然后呢,大家真正关注的是,里头有一句话,叫time.sleep(6)这样的一个话在里面。
那么大家说说你这个到底在干啥啊?你是不是要等着6秒钟以后,再给我看图片就完事了呢?啊,因为大家也确实是呃,测试了一下视频啊,就是他正确的输入了以后,等了6秒钟,然后这个图片就生成出来了。大家就觉得你是不是在这骗傻子呢?
很多人在知乎啊,在很多地方就开始讨论了,说华为是不是又遥遥领先了呢?跟大家稍微解释一下这个事啊。啊,我个人是专门做职业的编程演示的,可能在国内比我更职业的人不多啊。为什么这么讲,我是原来Bolan的公司,大中华区的image list,就是每天就出去给人做演示啊,我的工作就干这事。这个事呢,我干了四年啊,大概是在全国各地演示了,应该有可能几百场啊,就各种新特性演示。
因为这次,其实你基本上把它认为是一种,叫做授权工程师,每一次Boland出什么新的编程特性了,然后我就出去给人演示去。所以这个事,我相对来说还是比较熟练的。那么他这一次演示呢,为什么会出这样的事情啊?我们也尝试帮他洗一洗,对吧咱们别老说老范,你是不是很讨厌华为,没有啊怎么可能呢,对吧咱们稍微讲一下,这事到底是发生了什么。
首先呢,我们要先想清楚他到底在掩饰什么,这个其实是比这个sleep(6)这个事更重要的。
要更奇葩的一个事。为什么呢?因为他演示了一个非常不常见的功能,叫做图片RA器。这个功能其实用的人不是没有,有人在用,但是呃,很少人用。
咱们先讲讲什么是reg啊。reg这个东西呢,叫检索辅助生成。为什么要做reg呢?因为我们知道,这个大模型经常会一本正经胡说八道。那我们怎么避免大模型一本正经的胡说八道呢?很简单,就是我们先给他准备好小抄啊,或者说准备好一堆的小纸条,说请把这些都背下来啊,请按照这个小纸条上的内容去给我回答啊,不允许自己瞎编啊。我们通常会通过这样的方式,来让大模型按照我们要求的方式去输出啊,这就是做Rag。
然后Rag的这个原理其实也很简单。我们先给他一大堆的这种小纸条啊,就是基础内容吧,然后呢让他去做嵌入啊,in bedding inviting的过程是什么呢?就是他把你给他的一段话啊,这段话通常还挺长,一般是可能500多字,有的有1,000多字,把这个话呢啊,变成一个数组啊,或者说变成一个矢量空间。但是呢他这个矢量空间不是二维的,不是三维的啊,而是可能 102四维,就是一个很高维度的一个矢量空间上的一个点。就是你给他一堆文字,然后这堆文字说哎,我认为这个文字在这个点上,然后再给他下一堆文字的时候,他再给他标注一个点啊,这个叫史量化。然后呢你再说我现在要问问题了,他呢把你的问题也做一次质量化啊,也在这个质量空间里头,1024维或者有的有4096维的这样的一个高维的空间里头啊,把你的问题做一个点,然后再下一步是什么呢?找到在这个更高维空间里头,离你的问题最近的5个点或者几个点,都是谁相对来说,就可以找到跟你提的问题模糊相关的内容信息。但是大家听到了我讲的这个过程没有?就是RAG整个干的活,其实基本上都是在文字基础上干的。他不是在图片基础上干的啊。所以他做图片RAG这件事,确实是比较奇葩。
通常我们做RAG演示都是什么呢?我们先把用户手册输进去,把各种报表把这些东西输进去,然后呢我们就问,大模型说哎,这个用户手册上说啊,这个按钮按了以后该怎么办啊,或者说这个报错了,然后出现哪个哪个报错码了,该怎么办啊?然后他先到这个史兰库里去搜,搜完了以后呢,找到四五条跟他相关的信息,然后呢去做一个事,叫提示搜工程。这个提示词工程一般这么写啊,说我们现在有一个问题啊,问题是这个用户提的,然后呢,我们通过RAG去找到了5条相关的答案,现在请对这5条答案进行总结输出,所有这个答案里头没有相关的内容,请不要去加编啊,我们一般会给他写一个这样的提示词,最前的是问题,后边是5条答案,下边是提示词,然后给你生成一个你想要的结果。通常还是要把这5条相关的信息,也都在后边备注下来,说你看啊啊,这个是我们当时搜到的这5个节点啊,你看看跟他是不是一致,因为他有的时候编的时候,还会总结的有问题嘛,他一般这样工作的。
但是图片RAG一般是怎么工作的,你们知道吗?啊他一般这样,就是说你先给他一堆图片,拿着这些图片以后啊,先要干什么叫做图片识别,我们先把图片都识别成文字,比如说这是一个男人长成什么样,然后如何如何,先识别一大堆这样东西出来,识别了以后呢,再把这个已经识别好的文字,再去做实量化,然后你说,我现在想要画一个什么样的图啊,照这个图片再去做rag生成的时候啊,也是可以做的啊,你比如说我现在,已经把一堆的这个图片放进去了啊,比如说中世纪的铠甲的,汉服的和服的啊,西装的休闲装的,我生成了一堆这玩意进去,生成完了以后呢。我现在给他一个新的人说,现在请给我把他换成一身这个什么样的衣服出来。这个其实就有点像RAG的过程啊,但是通常我们不这么干。通常干的过程呢,是直接用Ctrl night模型做端到端的处理啊。啊但是我们比如说就是做图片RAG了,那么你确实是可以这么来处理的啊。他最后能够保证什么呢?保证就是说哎,你输出里头有一部分是一致性的啊,这个人长得跟你输进来那个人还挺像的啊,中世纪铠甲跟你原来输进去的中世纪铠甲长得也挺像的,对吧这两个凑在一起还可以,这个就可以达到做图像rag的目的啊。但是呢呃,这种用途其实并不是那么常见了,可能用的更多的还是啊,直接在stable diffusion里面去呃做contranite,做一个换装,做这块的会做的稍微多一点点。现在他这个演示呢,就啊相对来说比较奇怪了。为什么奇怪呢?就是他演示的,是他最后底子说了一句话,前面的部分我们没看到,因为我们只看到最后翻车这一块嘛。啊前面到底是怎么演示的,如何入库的部分,我们没看到。通常情况下,这个RAG的完整演示,是要先给人演示入库的部分,然后呢,再演示这个检索和输出的部分。最后RAG真正给人看的是什么呢?就是你的输入跟输出之间的一致性,你看没有胡说八道啊,这个确实是原来我输入的东西,直接给他做出来了呀。一般是给人看这种东西,而不是说我给你一句话,然后你就给我输出一个图片,这个呢一般是做纹身图,会给人演示这个啊,所以他这个演示相对来说比较奇怪。当然也有可能是呃,我们前面的没看到前面有输入的部分,因为演示出了一些问题,然后导致这位做演示的小朋友呢,啊比较紧张,后边应该演示的部分没有演示出来,这个可能性是存在的。但是可能性没有那么大啊。待会我们再想为什么。那么,什么情况下会出现sleep(6)呢?这个sleep(6)其实很简单,就是停6秒钟啊,就是让这个程序什么也别干,等6秒钟以后再干活。大家甭管懂不懂编程的,会不会Python的sleep(6),这个跟大家想象的是一样的啊,就按语意意思去理解,没有任何毛病。
那么首先要想清楚一个问题,control c的时候,99.99999%的可能性会停在sleep(6)上。大家知道为什么吗?其实很简单啊,就是在正常程序运行的时候,每一个语句执行的速度都是很快的,你是没有办法说,我确定他停在什么地方。但是sleep(6),你想这6秒钟,他实际上就执行了这一句话。像其他的每一句话执行,可能只是零点几毫秒,或者是有一个毫秒,我估计一毫秒都不会有,只有一句话,是做了这个6秒钟的执行啊。那你打Ctrl-c,你想它停在这个sleep(6)上的概率有多大?所以你如果里头有sleep语句,你打control c的时候,99.999%的这个概率都会停在这句上。
第二个呢,有很多人就在猜了,说你是不是啥都没干,停了6秒钟,然后直接在后台哪学,不张图就扔出来了。现在很多人在猜测这件事啊。呃,我觉得这种可能性倒没有那么大啊。这个可能性没有那么大,为什么呢?有点太忽悠人了啊。虽然人家很遥遥领先,但是你想去华为上班也没有那么容易。像我现在这样的水平,要简历到华为,华为人还不要我呢。所以呢,我们不要随便小看天下人啊。
正常情况下,写这个sleep(6)呢,啊是两种情况啊。第一种情况呢,就是做大模型这个输出的时候,没有做状态监控,这个事呢,是很常见的。为什么呢?就是大模型输出啊,通常情况下,他是要等一会,不是说我在这头啪一回车,那头就出来了。一般情况下,我们执行一个程序,执行一个语句的时候,他如果是很快就可以出来,我们就让他锁在那跑,就完了。啊,什么叫锁在那他跑?就是说,当他需要进行长时间等待的时候,这个计算机是锁定状态。你在这个时候再输入任何信息进去啊,再动鼠标或者再做任何点击,他是不理你的啊。但是这个呢,很危险啊,因为有的时候他就锁死在里头,就出不来了。那所以很多呢,我们会让他在后台执行,就是他是前后台进程嘛,后台进程。
那么后台进行的时候呢,正常是什么呢?正常我们要监控他执行的结果。后台执行了哎,执行完了,你要告诉他说哎,现在执行完了,现在请展示出来。咱们经常看大模型执行的时候,那个字是一个字一个字出来的,对吧?你问他一个什么话,嘣嘣嘣嘣嘣,一个字往下跳。这种呢,叫stream输出,或者叫流式输出。那干嘛呢?就是说我这边命令你去回答问题了,然后呢我在那等啊,你出一个字了,我就赶快把这个字拿出来,给大家展示出来。再出一个字了哎,再赶快再把这事哎提出来,再给大家展示。然后一直到出完了啊,我知道哎,这句话出完了,再去执行后面的程序。正常情况下他是这么干活的。
但是呢,有些人说,我为了省事啊,我就不费这劲了,我也不监控你的结果了。我认为你大概6秒钟能跑完,我先背着他跑,然后另外一头呢,我等6秒钟啊,等完6秒钟以后直接去取结果,大概率不会出问题啊。有人这么干啊,不是说没有,特别是一些叫萝卜急了不稀泥的这种程序啊,就是我很着急写一个,我就不用写那么细致了。因为你要知道,从这个监控和后台这件事来说,是挺麻烦的,不是那么容易的。你可能需要现场写个,可能十几句,至少得写个三五句吧,你才能把后台进程的状态监控起来。这是一种情况。然后另外一种情况是什么呢?就是啊,他所调用的大模型是有RPM限制的。什么叫RPM限制?就是每分钟调用多少次是有限制的啊。因为现在大家知道算力很贵,对吧?那么大模型这些厂商为了不要让大家快速的、高频的去调用自己的大模型,他们会给这些调用方设置每分钟限制的次数。因为我自己的一个程序里头,也是写了sleep play啊。我调用的是谁家的?就灵异万物他们家的大模型。我是充了200块钱在里头,他给我设的是什么呢?是一分钟十次啊。就是我每分钟最多可以钓10次。那做个sleep(6)呗。我这头钓,钓完了以后停6秒钟,然后我再钓下一次。这样就肯定不会有什么问题嘛。这个是比较常见的啊。因为这种东西,你没法去监控服务器运转状态,然后说我是不是可以掉下一次了,这个事只能是自己sleep啊。当然也有一种这个更精确的方式是什么呢?就是我先钓了,钓完了以后啊,然后我去呃等一会啊,再钓一次,然后发现错了以后呢,等再等一会再去钓对吧。他有的时候会去做我们管他叫Retry吧,也有这么干的。但是这个呢,属于是非常不友好的钓用方式啊,因为虽然最后人家可能还是啊,6秒钟替你服务了一次,但是你在不停的去刷他的服务器啊,这类似于一种低DOS攻击,所以这种方式不是那么友好。所以这种sleep(6)也是很常见的啊。我们现场到底看到了什么?这是一个前端演示的程序员啊,大家一定要注意,他并没有给大家去做这种完整的客户端演示,而是告诉大家说哎,我怎么通过简单的编程,就可以看到一个什么样的效果。而这位朋友写的呢,也不是很熟练至少像我们以前出去给人演示,你各种演示的demo还要练几次,然后各种容易出的错误,你可能平时练习的时候都出过。各种预案:
我们会留的比较足,所以不会现场出这样的问题。这是第一个。
第二个呢,就是他这种代码正常应该是现场写的。就是他不可能说哎,我这个代码是已经写好了,然后呢我给大家看一下。这个绝不是这样啊,因为如果是工程里边,这个代码就写成这样的话,华为早就挂菜了啊,不可能啊。混了这么多天,被这么多人讨厌,还在这活的好好的。
为什么这么讲呢?time.sleep(6)这个事儿啊,其实不算过分。然后后边儿有一个叫写到output点儿洁癖记里头。大家有没有看到这一行代码?这个才是真正比较过分的。这叫什么东西?这叫呃,我们把输出文件名儿直接写死了,对吧?这个实在是很奇葩的一种玩法。
正常情况下,我们应该怎么办呢?应该询问用户叫什么文件名,对吧?这是第一种方式。第二种呢,我们一般会采用一个叫文件名生成的一个程序。我们会生成一个保证不重复的文件名,啊比如说我这个是用日期时间戳,再加上一个哈息数,再加上一定的啊表意的信息,然后生成一个完整的文件名啊,或者是说我再加上什么特定的路径啊,这样能够保证这个文件名随时都可以生成,而且不重名,甚至我们还会去写程序说,我保证啊,文件输出的时候,去进行文件名存在判断啊,说是不是有这个文件,如果有的话,我怎么再去换一个跟他不一样的文件名。这个是正常的工程里边的写法,而不是把这个文件名直接写死在里面。
所以通过这个来看呢,这个代码大概率是现场写的啊。那什么时候需要现场写代码?就是告诉大家说,这个他们叫做升腾大模型啊,因为上面有一个叫MINDX啊,有这样的一个提示出来,也是说我们在调这个库的时候啊,发生了这样的问题啊。这个MNDX呢,就是升腾大模型的意思啊,就是你吊这个东西的时候很方便。你不需要很强的工程能力。你也不需要很强的技术的门槛。你就随便就可以吊啊,随便写两句就能把它吊出来啊。他实际上在演示这种东西。
在这个里头,你出现各种不规范的代码,什么sleep(6)啊,什么写死了文件名儿啊,哪怕是重复了文件名儿,重名儿的,我直接把原来的覆盖掉。这个都不是什么大毛病啊。我们以前也经常这么干。
像我以前去做演示的时候,现场演示,虽然我那个代码都会提前练好啊,但是我一定要到现场敲。你一定不能是从一个文档里头,口碑出来,或者说你看我这有一个程序,我直接调用一下就完了啊。这个现场看的人是不买账的。
你万一后头藏了个几十万行代码,你说我我一调用,我一贴贴上去了,我就可以跑了,那人家说我学不会。你一定是你看啊,我就写了三句啊,5句第一句什么,第二句的什么,然后写到第五句,啪一回车,哎结果出来了。呃然后让人下边一看哇,是这样的。对一定是这么一个过程啊。
像我们以前经常干什么,叫什么A1 A2 A3 A4 B1 B2 B3 B4,这是干嘛呢,起这个变量名。大家知道,正常写程序,你按工程的要求来说,你是不可能这么起变量名的。你这么起变量名,这个程序大了以后,你根本没法改错误。
但是我们在现场演示的时候,都是这样的文件名啊。这个其实是蛮正常的,因为为什么你在现场,你再去想说,我到底按一个什么样的命名规则,去命名哪个大写,哪个小写,英文怎么拼写,然后拼对了,拼错了这个烦死了,对吧你还不如叫A1A2呢,这个多省事啊。然后最后你就直接把结果出来了啊。这个才是大家想要看到的啊。
所以啊,不要因为说他写了个sleep(6),你就觉得他在骗人了。跟后边那个right,什么output点GPG那个差远了。有这两句。只能说明,我们大家现在看到的这段代码,是在现场写的,而不是按照华为标准的工程要求去写的啊。只能说明这件事,这件事情,你说就不是在骗傻子吗?大概率还真是。为什么呢?虽然我刚才解释了,这个代码并没有什么大的问题,但是大家要想清楚,他在演示什么东西。他在演示RAG图像生成啊。其实华为的用户里头,做Rag图像生成这种需求的人,应该没有几个,对吧?什么人干这事?电商的人啊,我去做换装。而且通常情况下,人家也不是做reg图像生成,人家直接是stable diffusion做换装就完了啊。没有人去做这个。甚至还有一些人是干嘛呢?是去做这个游戏对吧。比如说我现在要去啊,做一个游戏工作室,然后我要保证说我输出的所有的骑士,所有的什么东西啊,这些要有一定的一致性。反正就是这个类目是存在的啊,但是真正实际用起来的人,本身是非常少的。而且你想,他最后写了这么一句话,写完了以后,那头就直接给你画出来了啊。我的感觉是什么呢?就是他喊了RAG的名字,因为现在特别是对于华为的用户,他的用户一般是企业用户,或者是政府用户,他们不可能去做电商,也不可能去做游戏啊。对于他们来说呢,你不给他讲RAG,不给他讲知识库呢,他们就不买单。所以,一定要把这个高大上的词给你讲上。然后呢,我如果直接给你看一下,我检索了啊,谁谁谁的讲话,谁谁谁的路线指导思想这个事呢,这又容易翻车。那怎么办呢?咱就现场给你画个画啊。这个画呢,还比较震撼,让你觉得啊,这个事情很有趣对吧。所以呢,你看哎,我也RAG了,最后我还画出一幅画来。所以这个演示的过程啊,可能有一定的欺骗性吧。我们觉得讲成这样,算是比较呃客观中立的一个讲法啊。这个呢,就是这一次华为升腾大模型展示。里边出现的bug啊,我们进行的一个解读啊,希望你甭管懂不懂编程啊,懂不懂这个RAG到底是干什么,懂不懂这个大模型怎么回事。啊,通过我的讲解呢,啊你能够对这个事情,有一个更深刻的理解。
好啊,这一期就讲到这里,感谢大家收听。请帮忙点赞点小铃铛,参加disco讨论群,也欢迎有兴趣、有能力的朋友加入我们的付费频道。再见。