草庐IT

NVIDIA正在“垄断”AI!中国厂商怎么办?

差评君 2023-04-14 原文

​“ 为了计算和人类的未来,我捐出世界上第一台 DGX-1 。 ” 

2016 年 8 月,NVIDIA 创始人黄仁勋,带着一台装载了 8 块 P100 芯片的超级计算机 DGX-1 ,来到了 OpenAI 的办公大楼。

在现场人员到齐后,老黄拿出记号笔,在 DGX-1 的机箱上写下这句话。

与其一同前往的还有特斯拉和 OpenAI 的创始人,埃隆马斯克。

这次 OpenAI 之行,老黄不为别的,就是为了把这台刚出炉的超算送给 OpenAI ,给他们的人工智能项目研究加一波速。

这台 DGX-1 价值超过百万,是 NVIDIA 超过 3000 名员工,花费三年时间打造。

这台 DGX-1 ,能把 OpenAI 一年的训练时间,压缩到短短一个月。

而这,是他对人工智能未来的豪赌,加的一波注。

七年之后,在前不久的 GTC 大会上,老黄穿着皮衣,拿着芯片,整个宣讲不离 AI 。

似乎是在告诉各位, AI 的时代,我 NVIDIA ,就要称王了,当年的豪赌,他赢了!

这么说吧,在去年经历一波矿难之后,不少人都以为曾靠着矿潮狂赚一笔的 NVIDIA ,会在矿难之下市值暴跌,一蹶不振。

但实际情况却有点微妙。

NVIDIA 的股价在跌了大半年之后,从十月份开始,一路上涨。

到现在,整个 NVIDIA 市值已经涨回到了 6500 亿美元,是 AMD 的 4 倍, Intel 的 6 倍。

瞧瞧,这还是当年那个求着各位买显卡的老黄嘛?

让 NVIDIA 的股价疯涨的,那便是他们从十多年前就开始押注的 AI 计算。

给大家一个数据,从 2015 年后, NVIDIA 的 GPU 在超算中心的市场份额就一路上涨,这几年稳居 90% 左右。

在独立 GPU 市场上, NVIDIA 的市场占有率也一度超过 80% 。

另外,包括 YouTube 、Cat Finder 、 AlphaGo 、 GPT-3 、 GPT-4 在内, AI 历史上那些叫得出名的玩意,几乎都是在 NVIDIA 的硬件上整出来的。

NVIDIA 的硬件,仿佛就是新时代的内燃机,载着 AI 时代不断前进。

大家可能会有点疑问,为什么在 AI 爆发的时代,好像就只有老黄有好处,其它的显卡生产商们的显卡不能训练 AI 嘛?

能训练,但只能训练一点点。

为啥?

这就不得不提到 NVIDIA 从 2006 年就开始着手开发一个东西—— CUDA ( 统一计算设备架构 )。

当你想要计算一些比较庞大的运算问题时,通过 CUDA 编程,你就能充分利用 GPU 的并行处理能力,从而大幅提升计算性能。

CPU 就好比是个数学教授, GPU 就是 100 个小学生,放一道高数题下来那 100 个小学生可能会懵逼;但是放 100 道四则口算题下来,那 100 个小学生同时做肯定比数学教授快多了。

深度学习就是上面的例子中那 100 道口算题,那个让 GPU 处理器并行运算的 “ 工具 ” 就叫 CUDA 。

一般来说,使用 CUDA 和不使用 CUDA ,两者在计算速度上往往有数倍到数十倍的差距。

既然 CUDA 这么有用,为什么其它的 GPU 厂商不去搞个竞品呢?

不是不去搞啊,而是他们真的没想到!

在早期, GPU 的作用只是为了加速图形渲染,各大厂商们认为它就是一个图形专用计算芯片,并没有想到把 GPU 用在其它通用计算方面。

至于拿来做深度学习?以那个年代的 AI 能力,一是没有太大的必要,二是也没有人觉得它有用。

NVIDIA 深度学习团队的布莱恩在聊到 CUDA 时这么说道:

 “ 在 CUDA 推出十年以来,整个华尔街一直在问 NVIDIA ,为什么你们做了这项投入,却没有人使用它?他们对我们的市值估值为 0 美元。 ” 

不过说没人用也是过于严重了。

其实早在 2012 年,多伦多大学的 Alex Krizhevsky 就在 ImageNet 计算机视觉挑战赛中,利用 GPU 驱动的深度学习击败了其它对手,当时他们使用的显卡是 GTX580 。

在这之后又经过了 4 年,那些搞深度学习的人才突然意识到, GPU 的这种设计结构方式,在训练 AI 的速度上,真的是 CPU 不能比的。

拥有了 CUDA 原生支持的 NVIDIA GPU ,更是首要之选。

到现在,资本们已经看到了 AI 的重要之处,为什么大家都还在卷 AI 模型,而不去卷老黄的市场呢?

原因在于,它们已经很难再拿到 AI 加速芯片的入场券了。

在人工智能产业上,整个深度学习的框架已经是老黄的形状了。

AI 发展的数十年间, NVIDIA 通过对 CUDA 开发和社区的持续投入, CUDA 和各类 AI 框架深度绑定。

当今使用排行靠前的各类 AI 框架,就没有不支持 CUDA 的,也就是说你想要让你的深度学习跑的快?

买张支持 CUDA 的高性能卡是最好的选择,说人话就是——买 N 卡吧。

当然,在 CUDA 大力发展期间,也有其它公司在尝试着打破 NVIDIA 这种接近垄断的局面。

2008 苹果就提过出 OpenCL 规范,这是一个统一的开放 API ,旨在为各种不同的 GPU 型号提供一个规范,用以开发类似 CUDA 的通用计算软件框架。

但是,通用就意味着不一定好用。

因为各大厂商 GPU 的型号繁而复杂,为了适应各种硬件,驱动版本也多如牛毛,质量参差不齐,而且缺少对应的厂商进行针对性的优化。

所以,无论是哪一个版本的 OpenCL ,在同等算力下,都比不过使用 CUDA 的速度。

恰恰是因为 OpenCL 的通用性,想要开发支持 OpenCL 的框架,要比开发CUDA 的复杂不少。

原因还是同一个,缺少官方的支持。

看看 NVIDIA 对CUDA开发的工具支持吧,CUDA Toolkit,NVIDIA GPU Computing SDK以及NSight等等。

OpenCL这边,就略显寒酸了。

这就导致如今能支持 OpenCL 的深度学习框架寥寥无几。

举个很简单的例子,当下最火的框架 PyTorch ,就连官方都没有专门对OpenCL进行支持,还得靠着第三方开源项目才能用。

那同为显卡供应商的 AMD ,在面对老黄如日中天的 CUDA 时,除了 OpenCL ,有没有自己的解决办法呢?

方法确实是有,但效果也确实不咋的。

2016 年 AMD 发布了全新的开放计算平台—— ROCm ,对标的就是 NVIDIA 的 CUDA ,最关键的一点是,它还在源码级别上对 CUDA 程序进行支持。

你看,就算是老黄的死对头 AMD ,想的也不是另起炉灶,而是降低自己适配 CUDA 的门槛。

但是,时至今日, ROCm 依然还是只支持 Linux 平台,可能也是用的人太少了,有点摆烂的味道,毕竟,既然你支持 CUDA ,那我为什么要费尽心力去给你的 ROCm 专门编写一套支持框架呢?

同年,谷歌也有了行动,但毕竟不是芯片制造商,谷歌只是推出了自己的 TPU 平台,专门针对自家的 TensorFlow 框架进行优化,当然原生支持的最好的也只有 TensorFlow 了。

至于 Intel 那边,也推出了一个 OneAPI ,对标老黄的 CUDA ,不过由于起步较晚,现在还处于发展生态的环节,未来会怎样还不太好说。

所以靠着先发优势还有原生支持,导致现在的深度学习,基本上离不开 NVIDIA 的 GPU 和他的 CUDA 。

最近大火的 ChatGPT ,就用了老黄的 HGX 主板和 A100 芯片,而老黄对此也是很有自信的说道:

 “ 现在唯一可以实际处理 ChatGPT 的 GPU ,那就只有我们家的 HGX A100 。 ” 

没错,没有其它可用的了,这就是老黄的有恃无恐。

而随着 OpenAI 对大模型 AI 的成功验证,各家巨头对大模型 AI 的纷纷入局, NVIDIA 的卡已经立马成了抢手货。

所以如今的 AI 创业公司,出现了一件很有意思的现象,在他们的项目报告上,往往会搭上一句我们拥有多少块 NVIDIA 的 A100 。

当大家在 AI 行业纷纷投资淘金时, NVIDIA 就这样靠着给大家卖水——提供 AI 加速卡,大赚特赚,关键还在于,只有它卖的水能解渴。

因为它的硬件以及工具集,已经能影响到整个 AI 产业的战局和发展速度了。

更可怕的是, NVIDIA 的优势已经形成了一种壁垒,这壁垒厚到就连全球第二大 GPU 厂商 AMD 都没有办法击穿。

所以在 AI 大浪滔天的现在,能整出属于自己的 AI 大模型固然重要,但啥时候能有自己的 NVIDIA 和 CUDA 也同样不可小觑。

当然,这条路也更难。

在未来,我们需要抓紧突破的,绝对不只是对人工智能大模型相关的研究,更为重要的是整个计算芯片的设计,制造,以及 AI 生态的建设。

新的工业革命已经到来, AI 技术的发展不仅加速了人类生产力的发展,也加速了那些落后产能的淘汰,现在各行各业都处在变革的前夕。

强者越强,弱者无用。虽然这句话很残酷,但在AI 领域,如果不奋力追上,可能真的已经不需要 “ 弱者 ” 了。​

有关NVIDIA正在“垄断”AI!中国厂商怎么办?的更多相关文章

  1. ruby - Ruby 中的隐式返回值是怎么回事? - 2

    所以我开始关注ruby​​,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出

  2. ruby - 怎么来的(a_method || :other) returns :other only when assigning to a var called a_method? - 2

    给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R

  3. ruby-on-rails - 我该怎么办 :remote location validation with CarrierWave? - 2

    我在我的Rails3示例应用程序上使用CarrierWave。我想验证远程位置上传,因此当用户提交无效URL(空白或非图像)时,我不会收到标准错误异常:CarrierWave::DownloadErrorinImageController#createtryingtodownloadafilewhichisnotservedoverHTTP这是我的模型:classPaintingtrue,:length=>{:minimum=>5,:maximum=>100}validates:image,:presence=>trueend这是我的Controller:classPaintingsC

  4. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  5. ruby - EventMachine - 你怎么知道你是否落后了? - 2

    我正在研究使用EventMachine支持的twitter-streamruby​​gem来跟踪和捕获推文。我对整个事件编程有点陌生。我如何判断我在事件循环中所做的任何处理是否导致我落后?有没有简单的检查方法? 最佳答案 您可以通过使用周期性计时器并打印出耗时来确定延迟。如果您使用的是1秒的计时器,您应该已经过了大约1秒,如果它更长,您就知道您正在减慢react器的速度。@last=Time.now.to_fEM.add_periodic_timer(1)doputs"LATENCY:#{Time.now.to_f-@last}"@

  6. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  7. ruby - 如果它是标点符号,我怎么能从字符串中删除最后一个字符,在 ruby​​ 中? - 2

    啊,正则表达式有点困惑。我正在尝试删除字符串末尾所有可能的标点符号:ifstr[str.length-1]=='?'||str[str.length-1]=='.'||str[str.length-1]=='!'orstr[str.length-1]==','||str[str.length-1]==';'str.chomp!end我相信有更好的方法来做到这一点。有什么指点吗? 最佳答案 str.sub!(/[?.!,;]?$/,'')[?.!,;]-字符类。匹配这5个字符中的任何一个(注意,。在字符类中并不特殊)?-前一个字符或组

  8. ruby - 如何测试正在使用 RSpec 和 Mocha 调用的混合类方法? - 2

    我有一个模块:moduleMyModuledefdo_something#...endend由类使用如下:classMyCommandextendMyModuledefself.execute#...do_somethingendend如何验证MyCommand.execute调用了do_something?我已经尝试使用mocha进行部分模拟,但是当未调用do_something时它不会失败:it"callsdo_something"doMyCommand.stubs(:do_something)MyCommand.executeend 最佳答案

  9. ruby - Ruby 中 <=> 运算符的名称是什么?他们怎么调用它? - 2

    在Ruby中有运算符(operator)。在API中,他们没有命名它的名字,只是:Theclassmustdefinetheoperator...Comparableusestoimplementtheconventionalcomparison......theobjectsinthecollectionmustalsoimplementameaningfuloperator...它叫什么名字? 最佳答案 参见上面的@Tony。然而,它也被称为(俚语)“宇宙飞船运算符(operator)”。

  10. ruby - Ruby 脚本如何检测到它正在 irb 中运行? - 2

    我有一个定义类的Ruby脚本。我希望脚本执行语句BoolParser.generate:file_base=>'bool_parser'仅当脚本作为可执行文件被调用时,而不是当它被irbrequire(或通过-r在命令行上传递)时。我可以用什么来包装上面的语句,以防止它在我的Ruby文件加载时执行? 最佳答案 条件$0==__FILE__...!/usr/bin/ruby1.8classBoolParserdefself.generate(args)p['BoolParser.generate',args]endendif$0==_

随机推荐