AIGC(AI-Generated Content,AI生成内容)是指基于GAN(Generative Adversarial Network,生成对抗网络)、大型预训练模型等人工智能技术的方法,通过对已有数据进行学习和模式识别,以适当的泛化能力生成相关内容的技术。AIGC继承了PGC(Professional-generated Content,专业生产内容)和UGC(User-generated Content,用户生成内容)的优点,并充分发挥其技术优势,打造了全新的数字内容生成与交互形态。
随着AIGC技术的不断发展,AI写作、AI配乐、AI视频生成、AI代码生成以及最近非常热门的AI绘画等技术在创作领域引起了广泛讨论。
下面,就由泛联信息的技术大牛,以第一人称视角、通俗易懂的叙述方式,和大家一起聊聊AIGC技术实现和存储要求那些事儿。
其实吧,这AIGC也不是啥新鲜事儿。2003年我才接触到AI,满心好奇地试着和一个AI网站的聊天机器对话,在一个弹出的对话框里,对方不温不火地用英文有问有答,也许是非母语的原因,我也看不出啥端倪,只是觉得对方所有的回答都模棱两可,我甚至怀疑就是个网站雇了几个人在回答问题,赚取流量。
一晃20年过去了,这期间,AI在许多领域早就实用了,比如图像识别等领域都已经非常成熟。但是对于日常生活的人们来说,AI技术始终藏在某个对话框和摄像头的背后,还只是些冷冰冰的抽象术语,和自己的生活还是有很大的距离。这种状况一直持续到ChatGPT出现之前。最开始当我被很多人问及ChatGPT的时候,我的感知还是停留在这不就是种AI应用的认知上,说实话也就是20年前的感觉。于是乎,我不厌其烦地回答朋友们:“这没有啥啊,就是AI的一种应用而已啊!”
然而一天,当一个非IT朋友眉飞色舞地谈起他的使用体验后,我觉得还是有必要关注一下,看看今天的情况到底和20年前的那个看起来漫不经心的对话框有啥区别。
于是乎,用了个最简单的方法,访问了下Bing的Image Creator,试着生成了几幅图像看看效果,速度很快,结果很快便出来了……
“哟!还行!”
我没有测试文字输出,而特意选择了图片。这么做是有原因的,这其一,是几十年前和那个网站的对话让我觉得语言本来就不准确,有很大的模糊空间,是否是答非所问,也主要和阅读者的感受相关,不太客观,因为,也许用不太智能的代码也能达到相同的效果。二是,既然是AIGC,那么至少这AI能理解我输入的文字,并且能输出比较逻辑的图像,而人类对图像的逻辑鉴别能力是与生俱来的,好坏一眼便知。这三幅图不能说是很理想,但是也好到使我相信这样的事实,这AI应用的拐点确实到了!
从左到右,三个输入文字依次为:机器人管家和孩子们在后院里游戏、机器人和人类踢球、机器人管理的动物园。
其实在这些描述中隐藏一个含义,那就是:“这AI会平和地和人类共处吗?” 还好哈,除了人类的手的细节描述不太精细之外,没有极端的场景出现,一切都挺祥和,动物园那张的构图、透视和配色还相当优美……客观地说,这几幅图远比许多自媒体的涂鸦要精美上许多。
那么问题来了,这些图像到底是怎样产生的呢?别急,且容我略花些许篇幅,简单地介绍下这AIGC到底是咋工作的。
AIGC 生成的有许多种技术,我就不一一例举了,这里就重点说说Diffusion(扩散模型)和GAN吧,以及它们生成原理之间的比较,GAN的历史要早点,Diffusion在其后才出现,但是Diffusion的风头很劲。
先来谈谈GAN,它的原理比较直观,容易理解些。GAN的全称是Generative Adversarial Network,中文翻译过来就是生成对抗网络。生成对抗网络其实是两个网络的组合:
- 生成网络(Generator)负责生成模拟数据。生成网络要不断优化自己生成的数据让判别网络判断不出来。
- 判别网络(Discriminator)负责判断输入的数据是真实的还是生成的。判别网络也要优化自己让自己判断得更准确。
二者关系形成对抗,因此叫对抗网络,它们之间的关系可以用竞争或敌对关系来描述。虽然这么说,但是我愿意用更温馨的一个故事来解释,这里面可没有敌对的双方哈。在这里GAN就像是一个孩子自学成才成画家的过程,我们这里假设,一个妈妈拿一幅画让孩子照着画,在这个场景下,孩子就是Generator,而妈妈则是Discriminator。
于是这孩子不管三七二十一,拿起笔动手就乱画,而妈妈也没闲着,她在一旁猜哪张是孩子画的,孩子只管涂鸦,妈妈只管评论。
画出第一幅后(最开始时,孩子肯定不知道咋画啊,于是这画出的画面几乎等同于噪声),妈妈一看就说到“呵呵,一点都不像!”
于是孩子再改;“不像 ,比上回更不像了!” 孩子一听就不按上回的方法涂了,他改变了一些画法再试。
“嗯,这回好点!” 有门!于是孩子就这沿着这回的方向又往前进了一点。
“哎,不错,比刚才更像了!”孩子好像发现点门道了,于是更卖力往这个方向画下去……
母子之间就这么互动下去(你发现没,这母子的角色实际上是竞争性的)……
直到某个时刻,妈妈欣喜地说道:“哎,真像!我都看不出来哪张是你画的了!”于是这幅画就算是画好了,当然,这孩子也学会画这幅画了,简单明了吧,这GAN就是这么个方法论!
如果说GAN的思路比较直接,那么Diffusion模型咋一看就显得有点匪夷所思了!为什么这么说呢,因为Diffusion模型会分成两步来完成,第一步看起来是在学习如何搞破坏,而第二步则是再学习如何恢复被破坏的东西。
Diffusion最早是2015年的一篇文章提出的,但当时并不完善,直到2020年时才真正落地。从2021年底到今天,这Diffusion大大地火了,OpenAI和Google Image都是用的这个模型来生成内容。
Diffusion Model(扩散模型)是另一类生成模型,和GAN生成网络不同的是,扩散模型分成两个阶段,首先是 “前向阶段”,然后是“逆向阶段”。
我们还是以上面的故事举例,孩子在妈妈的监督下学画画,但是这回方法变了,在这个新的方式就是,先把原来的图像逐步用笔乱画(即添加噪声),直至图像被破坏变成完全无法识别的状态(高斯噪声)。
当然,这孩子也得记下来刚才是咋把画弄成这样的,然后呢,他再倒回来,逐步取消这些乱画的笔触,再把画从无法分辨的状态(高斯噪声)还原为原始图像。这样他也能学会如何画这幅画。
以上两个小故事,尽管虽然简单,也算是大概描述了当前AIGC如何生成内容的原理。实际上的AI训练过程其实也很类似,但是要比孩子学画画要烧钱、烧时间多了。
人工智能的成功应用除了需要选择合适的模型外,更为重要的是海量数据的训练,这涉及到大量GPU、内存和存储的使用。对于GPU和内存我们就不深入讨论了,这里我们重点看看AI对存储有哪些需求。简单地说,对于存储而言,AI的需求就是“容量”和“性能”。
任何AI模型在训练到成功应用前,其过程都可以想象成一个一边吞噬数据,一边吐出结果的“怪兽”。越多数据的“喂食”,这“怪兽”吐出的结果就越准确。
所以,存储得要有个“大肚子”,首先要解决海量数据的诉求,不论是对文件还是对象,AI应用的原始的数据集而以达到几十亿甚至上百亿的规模。
除了能存储海量的数据外,AI还需要存储能迅速地把数据送到GPU的内存里去,这就要求和AI适配的存储有个大嘴巴,即高速的读写性能和极低时延。但对于存储而言,大段连续数据的读写并不是瓶颈,反而小的I/O请求是个挑战。
对于卫星云图或者是地质勘探的数据来说有可能较大,但是更多的数据是一些小图片、音频和视频片段,他们可能都只有几十K,几M的大小;而数据的标签、特征则可能就是使用CSV或者TXT格式,大小仅有几十个字节的文件。并且,在数据处理分析计算的过程中,还会产生大量的过程文件,它们大部分都是小文件。因此,AI场景下也十分强调针对小文件访问的优化。
不论使用什么AI平台,在训练阶段,都是把数据集放在某些目录下,AI代码则从这些目录下按批量读取,这些目录会被频繁访问从而成为数据热点。
总结起来就是,在AI的场景下,存储设备需要体现出三个特点:
- 大肚能容
- 大嘴吞吐
- 快慢分区
这大肚能容就是容量大,性价比高,比如说原始数据存在容量型的空间。大嘴吞吐是指存储到GPU的速度要快,时延要低,在AI训练的场景下,GPU应该一直保持高速运行以提高效能,而不应老是出现GPU等待数据送达的现象。快慢分区是指数据清洗和标识,以及最重要的训练数据集,需要放在快速访问的介质空间,而原始数据可以先暂存在经济性能较合适的介质中,这样,在保证AI训练速度的同时也降低数据存储的成本,提升经济性。
结束语
泛联信息的分布式存储UbiScale 12000和UbiPower 18000,就是这样一种容量和性能的理想搭配,是特别为AI、HPC/HPDA场景而设计的产品组合,满足AI、HPC/HPDA场景下大容量、高性能的需求,并且提供海量文件访问,小文件加速等特性,以满足客户不同阶段的需求,助力客户在AI、HPC/HPDA领域不断获得成功。