atom_crypto

Posted on Mar 20, 2023Read on Mirror.xyz

CFG Labs 对话 Hugging Face: 打造机器学习的Github

Hugging Face:

铁震:前Google工程师,之前TensorFlow团队的。去年十一月加入hugging face,见证了LLM AIGC的变化,今天有幸受到CFG的邀请,想给大家看一下我在hugging face上看到有趣好玩的模型,希望给大家启发。我不是做模型研究的,我会用通俗易懂的语言,用实战的思路帮助大家理解。

 

第一章: Hugging Face的历史

Hugging Face最早是做Chatbot的,做的比较,当时大模型还没有出现,和ChatGPT没法比。后来Google 发布了Bird, Google当时做了TensorFlow, 不过社区已经逐步转向Pytorch. 所以我们就做了Pytorch版的Bird 副线,把weights 经过一些办法转化Pytorch这种方式,并不是我们重新去训练, 结合这个就慢慢形成了Transformers。Transformer是一个模型结构,transformers是我们这个库,涵盖了所有常用的用到transformer结构的这些模型。我们说开发者,researcher可以很容易把新的模型加上来,用户也可以用同样一个接口,用起来有不同种模型,不仅仅是NLP(自然语言处理),  CV (计算机视觉)很多领域都在用基于Transformer 这种架构模型。文生图起来之后呢,我们又对扩散模型做了一个类似的库,叫做diffusers,把扩散模型都收录进来。这是我们库的主要两个产品;另外做的一个产品就是Hugging Face Hub。Hugging face.co。我分享下屏幕。

和Github 比较像,有几个板块。1)模型:有models, 有各种各样的模型,我们现在已经有15万的模型了。大家如果想学习NLP模型,或者想玩什么,就可以在左边filter找一下。这里是按照task分类的。我个人的理解,NLP现在用不太上,现在GPT太强大了,把整个NLP领域都吃掉了。但是audio (音频), computer vision (计算机视觉), multimodal (多模型)这块,还是有些不错的模型。Models, 自己训练了什么模型都可以上传,他和Github最大的不同,上传模型后,我们可以帮你存大文件。举个例子,这个模型GPT-2, OpenAI 一个很早的模型,随便一个文件tflite,有400多兆(MB)。Pytorch 这个文件是500多兆,Github无法储存这么大的文件,我们提供的服务包括大文件的存储和大文件的CDN服务。模型界面右边有hosted inference API。你这个模型传上来之后,他会去猜这个模型正在干嘛。看到GPT-2, 他会知道可能是一个文本生成模型,text generation,会帮你设置weject...你可以在这与你的模型进行交互。这里的例子就是我的名字是什么,后面的蓝色字体就是生成出来。

2)Datasets: 训练模型的时候用了datasets, 或者准备了一些,这里比较有意思的filter就是size。我们这里存储最大的模型是什么样的,最大的是poloclub/diffusiondb,大小是几个T(size categories 大于1T),每个文件都是几百兆,我们提供免费服务。最后一个有意思的模型是Spaces。最后一个也是我觉得最有意思的是Spaces,其实就是可以跑的Github应用。Github把代码开放出来之后,具体怎么跑,装什么dependency 才可以跑,不是特别确定。Spaces可免费提供easy to use instance。 亚马逊的虚拟机,你在上面可以直接跑起来。你也可以挂一些GPU,把大的模型跑起来试下功能。这个OpenChatKit是最近比较火的,不过这个机器人有点傻,我之后会给大家介绍更多更强大的机器人。这个机器人主要目的是提供feedback,你可以给他打分,回复好,不好。这个数据会被汇总,以后再训练openchatkit的时候,Open Kit System就会记录下来。有点像reinforcement learning from human feedback,把这个评分,下次降低他的有限级别,等等。这个就是Space的介绍。 

Chloe: 如果不停喂不好数据,会不会影响模型?怎么解决?

铁震:肯定的。微软推出小冰的时候就被大家玩坏了。喂了一些奇奇怪怪的东西,把小冰心智扰乱了,都会遇到这样的问题。可以做一些数据级的审核,包括feedback,哪些是可以记录到长期记忆中,哪些是食用下就结束了,都需要进行仔细的判断。

铁震:另外给大家介绍一个比较有意思的,如果大家想来hugging face玩,注意下Trending这个page。目前很多开源模型都会直接放在hugging face 上面,可以看到哪些模型比较火,比如我们看模型类别,清华的chatglm-6b就比较火,1万多的下载,200多的点赞,这里下载量为两周下载量,而不是Github上所有的下载量,所以看上去数值比较小。另外ControlNet, Stable Diffusion, OrangeMixs, anything我之后会介绍, 非常火的文生图模型。Spaces是非常有意思的,发布模型后,有很多人会写UI界面,我们刚才也看了OpenChatKit。 

这个Spaces大家会看到有前端,有后端,我和他可能还会有一些交互。比如我可以让他生成图片。这个写起来会不会很费力?我输入 A high tech solarpunk utopia in the Amazon rainforest (low quality) 在亚马逊热带雨林高科技太阳朋克乌多邦(不会)。比如我们看Stable Diffusion这个代码, gitattributes,README这些都不用看。看app.py,读一下他的代码,其实非常简单。下面是一堆html,去render这个page。核心的代码就是infer函数(15行)。一旦用户点了bottom之后,然后我们就做点事情,就把image生成出来。Return image, 然后就在UI上展示。这个就是用gradio来做 (gradio.app),如果大家感兴趣可以了解下。核心思想就是说用不了几行代码,就可以写几行前后端分离的页面出来,大大提高了AI app的生产力。这就是Hugging Face的简单介绍。

 

第二章Hugging Face 上有趣的Space

Spaces我自己有awesome Hugging Face Spaces的list, 现在已经不够awesome了,chatGPT真的是太牛了。4出来之后,很多spaces距离商业化的产品还差很多,但是还是有些大家会感兴趣。比如说YOLO, 如果是上一波做CV的话,YOLO是非常常见的做detection的模型。核心的思想就是可以把这个里面的东西找出来,比如说让城市摄像头去数一数街道上有多少辆车。可以跑一个YOLO模型,帮你找Bounding Box(候选框), 帮你把所有的车找出来。这个作者写了一个Space, 很直观的看出来YOLOv8和v7或者其他版本有什么不一样的地方。对于文生图领域,可能更是这样。以前可能看下准确率就够了,就能知道这个模型是好是坏,现在对于很多模型来讲,你需要去试一下,看看和你的手感是否比较配合,或者说在一些使用场景上是否能够满足你的需求。这个结果就跑出来了,因为用了CPU,所以跑起来比较慢,不过效果还是不错的。

 

王翼:咱们用浏览器的计算资源跑吗?

铁震:不是,这个是完全后台跑的。如果你创建了一个space 我们就在后台免费给你instance。我们免费给你一个2核的CPU, 16GB内存,然后其他的版本要升级收费。这个是Large Language Model 的API,你可以调用不同的LLMs,我就给大家展示几个我认为最impressive 的demo。川虎ChatGPT非常有意思。我们知道ChatGPT有个UI界面,同时也提供API,可以用API与他进行交互。很多人说,我对他这个默认的UI界面不是很满意,是不是可以自己写一个完全用API实现的UI界面的功能。我可以写一个flatter 的app, 能够在我手机,电脑上跑。川虎ChatGPT就是这样一个实现,完全用Public API实现了一个UI界面的功能。比如说跑程序的时候大家会看到Queue:1/1 13.5/14.0s 后面的是预估的时间。Queue表示你前面还有几个人,1/1表示你前面还有1个人,等前面的人跑完了就轮到你。因为有人排队,所以读取超时。这时候可以duplicate this space,相当于你为这个Space创建一个副本,完全用你自己的资源去跑。什么意思呢。比如说这个是2核,16GB的虚拟机,你Duplicate之后呢, 有了自己的虚拟机,你自己用,当然你也可以改为public 去和别人分享。我这里已经创建好了,可以给大家找一下。上面写Duplicate from。我就可以和他聊天了。我觉得这个东西最大的价值,如果对于UI界面不满,想设计一些比较好的UI界面,包括把一些比较好的prompt.提示当作template,用这个界面就可以达到这个效果。比如说你可以去看他的代码。这个Key我今天可能流量报表,我是18美金,免费送的Key。代码部分,你可以看这个代码做修改,比如说你需要一个创建Template功能,你改下代码就可以实现这个功能,这就是开源软件最大的魅力所在。你可以根据需求定制化交互界面和交互方式。比如word有个需求,word没有满足你,你希望做个改动,非常困难的,但是在开源世界,尤其是这种比较轻量级的app,你可以随意去发挥创造力,做很多很多事情。

王翼:我能不能理解你的这个事情很像wordpress, 域名和服务器这个事情。Hugging face.co帮助你管好,你可以做增量定制。

 

铁震:可以这么理解,不过他比word presss功能强大很多。定制化能力还是很强的。你可以用我刚才说的Gradio,甚至可以直接上传一个Docker profile 上来,直接在虚拟机上执行,所以扩展性还是蛮好的。

第三章:AIGC和Demos

AIGC和空耳这种现象非常相近,给大家举个例子。当你去听韩语或者印度歌, 第一次听的时候你可能觉得他是噪音,讲什么听不懂,你可能知道他有点韵律,他说什么你不清楚。一旦你看了字幕,这个字幕实际上是有人把他听出来,用中文的,发音非常像的词语描述一下,再去听的时候,你可能觉得这个就是讲的这个歌词,虽然歌词非常无厘头,比如说的我说你别介意不洗澡。一旦你接受了歌词的设定,再去听这首歌的时候,你就会发现他好像唱的就是这个东西,再也不是一个噪声了,而是一个字幕在说的事情。对于AIGC讲的是同样的事情。

扩散模型是怎么回事呢,实际上一个降噪的过程。我们想象加噪声是什么样的过程。原来是一张图,一点点加噪声,一点点加噪声,慢慢的图是什么我们就看不清了。和我们刚才听歌一样,一开始是非常清晰的声音,经过麦克风录制一次声音就变差一次,经过我把喇叭放出来,经过我电脑麦克风收进去,再到喇叭放出的时候,可能就是噪音了。Diffuison model做的是反向的过程,需要把噪音里面的信息提取出来,如何提取呢,如果你完全不给他方向,韩语歌你让他听100遍,还是听不懂是什么,永远都是在这个状态,让他往左边走的模式就是我给他一个prompt, control, imbedding,给他额外的信息,让他去空耳,让他感觉我好像看到的是右数第二张图,就会一点点从最右边的图片往左边移动。这里我好像看到一只猫。其实我看了右数第二张图,再看右数第一张图,我是依稀能看到有个猫出来的。走完第一步,就可以走第二部,最后完全还原出猫。认为杂乱无章的图片是一只猫,他就会一点点看出一只猫。至于原来是什么不重要,韩语唱的是什么不重要,我满脑子就是不洗澡。

License:其实做文生图很少关注license, 做开源软件也很少关注license,这个领域处于灰色地带,但是在某些地区比如美国,已经有些lawsuit,已经有些影响。一旦第一个判例法出来,对后面可能有比较大的影响。没有人知道这个东西是什么,发布软件的还是想一下license。Stable Diffusion这个license 还是比较general。我的这个模型,或者任何我模型的变体(用我模型任何一点东西的变体,微调出来的模型也好,修改过的模型也好,你都不能做illegal, harmful或者discrimination的事情。举个例子,你没有经过任何人的同意,画了一幅他的肖像画,手画的在我们看来应该不是一个问题。但是如果你未经过任何人同意,用AIGC的工具,用Stable Diffusion去创作了人像,根据我对license的理解,可能就是违反license的行为。为什么我觉得比较宽容,因为可以用作commercial use。 和她做对比,MJ有个限制,免费的用户只能把生成的图片做个人使用,不能把他做commercial use。只有成为付费的用户,才能在商业场合用MJ给你生成的图片,并且MJ这个公司是有权使用你生成的这些图片的。这个和Stable Diffusion有比较大的区别。为什么说这个东西还是在灰色地带呢,因为虽然有这个license,美国的版权法按照他现在这个这个法律,只适用于人创作的作品,AI创作的作品没有owner, 没有这个copyright,后面如何发展我不清楚。这个事情影响越来越大,不仅仅是艺术家会遇到这样的问题,代码生成,chatgpt都会遇到这样的问题,我能不能用任意的东西去训练,没有版权许可的东西去做训练。训练出的模型,生成的内容究竟归谁所有。这是一个比较大的问题,我没有答案,我只是给大家FBI warning。用任何一个模型之前,要看一下license是怎么样的。

王翼:这个版权 我的理解是训练数据肯定是有版权的,只要把训练数据的版权解决了,有两种解决方式,第一种买断,竟然训练数据归你,那么通过训练数据再创作,再生成仍然归你。第二个就是你只有使用权,你只使用元数据进行训练,那你没有所有权,那你生成的这个东西,你也只有使用权,你没有无限权力商业制作,商业权应该归元数据所有人所有,只不过需要确认,因为这个是间接的。如果找到了途径,比如通过图片对比发现你和他图片某些很相近,他认为这个是属于training, 而不是inference,就可以起诉。

铁震:有可能。我不是律师,但是我个人觉得会稍微复杂,不同利益相关的人不一样。首先是最原始的创作者,人类艺术家,然后是数据集创作者,比如Laion, the Pile (eleuther.ai),把数据收集起来,成为一个数据集的人,还有Stable Diffusion这种训练模型的人,拿这些数据集是用有版权的数据,然后把这些模型训练出来的人。训练出来的人,还有做推理的人,比如说我用Stable Diffusion做一个推理,实际上借由我版权的相关,也有Stable Diffusion相关。甚至说用AIGC生成图片之后,我又做了一些改动,或者说别人拿我的图片做些什么。所以这中间蛮长的链条,不是说我只要训练,推理就好。最近有几个官司可以关注下。简单做下展示。

大家知道Stable Diffusion有自己的模型,比如说Stable Diffusion v1-5, 我们用原始模型去生成一些东西,大家可以去对比下效果。再拿比anything v4 (Fantasy.ai) 微调过的模型去看下效果。Anything v4有点动漫风格。不同模型,训练集,训练方法,训练权重,都不一样,风格也不一样。

王翼:现在可以通过prompt做animation吗?固定一个角色,GPTCHAT, 生成这个角色不同的动作,场景,生成animation 动画,还有一些短电影。

铁震:我觉得这涉及到两个问题,我是否能够生成一个角色,给他照不同的照片。你看这个anything v4这个模型,就是同一个人像,进行不同形式的生成。叠加ControlNet之后,你就可以给她摆姿势。第二个问题,我是否能让这个图动起来,这三张图中间插无数张图,导致这个系列动起来,这个技术目前还不成熟。针与针之间就会发生不一样的变化。比如说,第一针有手表,第二针没有,第三针背景亮度会有变化。这是目前比较有挑战的。但是也有很多技术攻克这个东西。Stable Diffusion到目前也就半年时间,说不定再过半年就有另外模型出来。

Frank: To 3D的Netflix也在做。德国的一家公司Runway也是。 

铁震:我在一些AIGC群里,完全分不清是AI生成还是真人,专业认识可以用AIGC做一些以假乱真的图片,还是非常厉害的。我们Diffusers Gallery就有AIGC的模型和图。有些模型用LoRA,过会儿会提到,可以把这个当成工具,相当于一个LoRA模型就是一个concept或者几个concept,在自己AIGC生成的时候,把这个东西用在AIGC生成的图片里。

刚才提到,如何让我的模型学到concept。比如说标准模型有狗的形态,但是你说画一个狗的图片。但是这个狗和你家的狗还是不一样。每条狗都有独特的地方,通过DreamBooth技术, 可以让模型学会这一条狗是什么样子,学会之后,我可以在不同场景生成这个狗的照片,我们可以观察到训练集有不同的狗的角度。

DreamBooth是一个微调技术,讲究用少数几张照片就可以达到这样的效果。如果你有更多的照片去调参数,可能有更好的效果。如果3-5张照片,如果能实现不错的效果,其实就是很好的结果了。这个技术最早是Google发明的。但是这不是唯一植入芯的concept技术,还有texing模式等。我们之前围绕这个技术做了比赛。这里是大家上传的DreamBooth模型,获奖的是国潮风,他训练的不是具体的东西,训练的是国朝的风格。

模型训练出来就认识这个咒语:尖括号guo-chao尖括号,只要你输入,就意识到你要这个风格。DreamBooth的问题在于这个模型太大了,训练出来4-5G。所以后面有个新的技术,两个叠加在一起,就可以把微调的模型变得非常小,比如说LoRA+DreamBooth。

王翼:Diffusion模型1个11G的GPU都能够放下,如果再训练的话可能就是A30,24G的A30就能搞定了吧。

铁震:是的。我觉得Stable Diffusion之所以这么火,1)开源 2)巨大的原因,它可以让家用显卡可以跑起来(rather than A100)。DreamBooth+LoRA叠加起来,模型可以做到3.3兆。好处是什么?你可以把你个LoRA模型拼在一起,做你想做的效果。时间关系,就不多讲了,欢迎大家参加我们的黑客松。

我们和飞桨做了一个比赛,百度飞桨提供算力,提供代码。大家只需要准备几张照片,去参加,选一个GPU。把照片拖到飞桨的计算中心,跑一下,就可以做出这个模型。

这是一个行星发动机, WonderingEarth。我们看一下这个参赛选手,a man looking at the WonderingEarth。 因为是LoRA, 可以把不同的concept串到一起。假象有个人做了concept叫做月球轨道车,prompt a man looking at the WonderingEarth+月球轨道车,这里就会出现月球轨道车,你可以把不同的concept组合到一起,达到效果,甚至你可以说,国朝风格的行星发动机。当然里面有很多技术细节,大体的思路是这样的。

接下来我讲下我个人比较看好的技术,Elite。刚才我们说我让模型学会一个新的概念,我需要有一个训练的过程。对于传统机器学习,fewshot这个概念,我有没有可能做到zeroshot。我给你几张照片,你不需要重新微调,微调需要十分钟二十分钟。你能否看到我这张照片就知道我要做什么,直接画出来。举个例子,我选了小猫这张照片,给了他一个mask,告诉他小猫的这个位置是我想让他在新图片中生成的。这个示例就默认这个概念叫S, 之前的概念叫做国潮,或者Wonderingearth,这里叫做S。我的指令S在一个杯子中的(S in jar)照片。我们看到效果还是不错的。如果用DreamBooth,和LoRA, 效果会更好。毕竟训练这么久,又有那么多张照片。这个一张照片就可以生成这样的效果。

 另外一个是ControlNet, 刚才我们说空耳的时候给你歌词,然后你根据这个歌词去想象歌曲在唱什么。现在我不给你歌词,我给你画,给你其他的Control, 是不是可以呢,实际上在模型,其实在模型种都是不同的control,给你算proseattention。在图像里,你可以给他一个边缘,告诉他,你从这个虚无中看到一个边缘,你能看到什么,然后再额外给你一个prompt, 然后生成效果。我给他的Prompt是一个男孩,有几张照片还是能看出来的,虽然左边是个女孩,但是右边的照片形态上满足了我的要求。他在边缘上也满足了黑白边缘照片的要求。我如果可以画张素描,和他说这个素描画的是什么,他就可以把这个素描填色,修改,光影,都处理好,还可以叠加像LoRA这种新技术。把一些concept也加进来。

 这是另外一种Control, 刚才我们运用的是边缘,这里是pose estimation,调用的是另一个AI模型去识别,识别骨头关键点,头在哪,手在哪。识别完,再给上prompt,比如男孩,手没有处理好,头,脚的位置都是不错的。同时给我们生成了四张。这就是ControlNet, 给他更多Control, 让他按照你的思路去生成。

 

把这个思路往下扩展,可以做更多事情,比如说是否可以把所有possibilities 全部列出来,我自己去选需要什么。比如说腾讯最近做的T2-Adapter, 它可以把Style & Color, Structure, sketch, pose, 深度,边缘全部都用起来。这个例子就是我拿呐喊的图作为Style, 我要用我的Pose, 我要画一个和尚。同样手有点诡异。如果我给的全身照,包括手,效果应该会更好。这个有趣的地方你可以把这些东西各种combination。ControlNet也可以做,multicontrolNet, 不过UI没有这么好,腾讯这个你可以直接选择。

阿里有个新的工作就是Composer。可以从一张图片中拿到Sketch,色阶,mask等等。根据不同组合方式,可以生成不同的图片。目前还没有开源。

接下来介绍一下非模型的,前沿生产力工具。第一个是Robust Face Restoration和upscale的模式。场景是Stable diffusion 默认生成512*512的图,用upscale可以生成2048*2048的图。这是upscaler的其中一种。可以通过这种方式,看效果如何,如果不错,可以再选择慢一点的upscale,把图片效果做到更好。

刚才上述介绍的都是单一工具,如果大家以这个谋生或者发展兴趣,需要做Webui UI这个开源工具,很多人在Hugging Face上去部署。提供了很多功能,这只是阉割版本,有些插件没有安装,但是可以做text 2 image. 给他prompt,甚至negative prompt,很多参数可以选择,随后生成了山水画。局部编辑,指示他在某个位置画飞机,他就可以画飞机,云山雾罩中有个飞机。感觉要从画中飞出来一样。还有image2image, 大家可以研究。

最后给大家看些声音生成的例子。这里可以用原神人物的风格,生成说的话。唱歌的,帮你生成歌曲。改音高,duration,像我只会改歌词,你有不同的歌曲风格可以去换。现在歌曲的风格,或者说人物的声音,都是需要很多数据去训练,未来或许也会出现类似LoRA这种技术,我们可以去选,把不同的风格叠加起来,比如说让邓紫棋唱周杰伦的歌,加上我们自己的歌词。或者未来或出现zeroshot, 类似于Elite风格,我给他一首歌,现场就学了这种风格,分解出不同的维度,根据我的需求选择性拼贴,变成新的歌曲。

Chloe: 之前看的很多paper聊了很多训练参数,训练方法,数据集,硬件要求等等。但是你的分享让我感觉AI这一波真的是将触达到我们所有的人,每个人都应该学习如何使用这些模型工具。微软CEO在一次也说过,如果未来你不会使用这些AI工具,就像你现在不会使用智能手机。你把一些比较复杂,学术的东西讲的很深入浅出。对于我们投资人来说,尤其重要的是如何把这些晦涩难懂的东西,去让一些原来对于AI没有太多了解,毕竟AI行业的门槛比较高,我记得身边所有学习AI的都是博士,数学系博士毕业的。现在其实生成式AI大大降低了行业门槛,未来掌握了这些核心技巧和功能,所有的人都可以训练自己的模型,自己的数据,我觉得未来的target就是触达十亿级别,甚至上百亿用户的新机会。包括现在英国政府也打算斥资数十亿英镑建立超级算力中心,不管是个人,国家,宗教,文化都是需要自己的特质化的模型。铁震作为一线的创业者,解除了大量的创业公司,科技公司,AI模型,我们发现迭代速度非常快,这几个月AI的发展速度超过了过去几年的发展速度。15年的时候,当时AllphaGo Progamme出现的时候,很多业界的人已经有人判定十年后AI(2024,2025)会迎来巨大的发展机会,这也是我们为会提前布局的原因。

王翼:我现在在GraphCore负责算法,我们在做芯片,支撑各种模型的训练。你的这个研究让我了解Stable Diffusion以及应用层面的了解。我们之前也跑过Stable Diffusion model。Hugging face的工具链,如何控制生成的内容,符合我们的预期,我相信未来会有更多control,更加自然,通过prompt,交互式工具。

注明:背景图为Stable Diffusion生成的Cyber Punk