刚刚,英伟达发布新规:其他硬件禁止使用CUDA!
bigegpt 2024-12-08 12:20 3 浏览
编辑:alan 好困
【新智元导读】最近,英伟达在CUDA 11.6的用户许可中明确表示,禁止其他硬件平台上通过翻译层运行CUDA!这一招震惊了AI圈,也让AMD和Intel支持的ZLUDA这样的项目面临法律风险
英伟达终于对竞争者下了死手!
在安装CUDA 11.6及更高版本时,最终用户许可协议(EULA)中明确表示:禁止在其他硬件平台上通过翻译层运行基于CUDA的软件!
英伟达这个意义明显的举动马上引起了各大媒体的关注:
事实上,自2021年起,英伟达在网上发布的许可条款中就有关于CUDA的这项警告,但它从未出现在安装过程中提供的文档里。
而今,英伟达摊牌了、不装了,明确表示,护城河是我的,AI计算的果子是我的!
某些友商啊,不要耍一些小聪明,在自家的硬件上用我的CUDA。
对此,我们首先想到的可能就是像ZLUDA这样的项目,能够让Intel和AMD的GPU,无需修改即可运行CUDA应用程序。
对于这样的项目,以及表现出的性能,个人开发者是惊讶的,而英伟达更是震惊的。
2月18号,软件工程师Longhorn在推上表示自己发现了CUDA新增的条款:
也就是下面英伟达提供的官方条款的最后一条:
不得对使用SDK生成的输出的任何部分进行逆向工程、反编译或反汇编,以便将此类输出转换为面向非英伟达平台。
这一条款在CUDA 11.4和11.5版本的安装文档中是没有的,可以推测之前的所有版本中也没有,应该是从11.6版本开始新加的。
当然了,作为行业领导者,英伟达也有自己的难处。
一方面,大家都依赖你;另一方面,每个人都想利用你的成就。
CUDA就是一个例子——由于它与英伟达GPU搭配使用非常高效,因此备受相关应用开发者的青睐;但随着更有性价比的硬件层出不穷,越来越多的用户倾向于在其他平台上运行CUDA程序。
目前,有两种方法可以实现:重新编译代码(适用于相应程序的开发者)或使用翻译层。
使用像ZLUDA这样的翻译层是在非英伟达硬件上运行CUDA程序最简单的方式——只需使用已编译的二进制文件,通过ZLUDA或其他翻译层运行即可。
尽管ZLUDA目前遇到了困难,AMD和Intel已经放弃了进一步开发的机会,但这并不意味着翻译层不再是一个可行的方案。
显然,使用翻译层挑战了英伟达在加速计算领域,特别是AI应用中的主导地位。这可能是英伟达决定禁止在其他硬件平台上使用翻译层运行其CUDA应用程序的主要原因。
不过,重新编译现有的CUDA程序仍然是合法的。为了简化这一过程,AMD和Intel分别提供了将CUDA程序移植到他们的ROCm和OpenAPI平台的工具。
随着AMD、Intel等公司开发出更好的硬件,更多的软件开发者将倾向于为这些平台设计,而英伟达在CUDA领域的主导地位可能会逐渐减弱。
此外,专门为特定处理器开发和编译的程序肯定会比通过翻译层运行的软件表现得更好,这意味着其他公司将在与英伟达的竞争中占据更有利的位置——如果他们能够吸引软件开发者的话。
CUDA
说了这么多,CUDA到底有什么神奇的作用,让大家趋之若鹜?
CUDA的全称是计算统一设备架构(Compute Unified Device Architecture),是英伟达开发的一种异构编程语言,它为通用程序提供了调用GPU的接口。
异构编程的意思是分开编写CPU和GPU的代码,各自负责自己有利的部分(比如CPU的逻辑控制能力和GPU的并行计算能力)。
而且,通过英伟达自己的不断优化,可以最大限度利用GPU的优势,这一点对自己很重要,对用户也很重要。
CUDA基于C和C++,允许开发人员控制计算的分配,充分利用GPU的多线程能力来加速计算任务。
开发人员可以将程序划分为可独立执行的子任务,分给GPU的不同线程,显著提高了程序的性能。
世界各地的公司都在日常运营中采用了CUDA,并产生了巨大的收益。
例如,特斯拉和其他汽车行业巨头利用CUDA来训练自动驾驶汽车;Netflix在GPU上运行自己的神经网络模型,利用CUDA的功能来增强自己的推荐引擎。
为什么这些大型科技公司不约而同地选择了CUDA,而不是其他的方法?
答案是速度。CUDA加快了神经网络模型的预测速度,快速给出输出结果,满足了企业和产品对快速执行的需求。
除了速度之外,CUDA还提供可扩展性,可以毫不费力地处理大量数据,以执行实时、高需求的任务。
从本质上讲,是否使用CUDA取决于任务的需求。对于较轻的工作负载,可以选择不同的方法。
然而,当涉及到生产级性能和实时输出需求时,CUDA仍然是大公司的首选解决方案,将大型模型转换为无缝、高效的体验。
如果不使用CUDA,处理时间会慢多少?
以Netflix为例,他们的NRE(Netflix的推荐引擎)模型的训练,一开始需要花费20多个小时,
然而,通过利用CUDA内核的优化,这个时间大大缩短到47分钟。
这也正是利用GPU的大公司选择CUDA来增强其应用程序的原因。
CUDA 编程模型基于网格、块和线程(grids, blocks, and threads)的概念。
网格是块的集合,块是线程的集合。每个线程都有一个唯一的标识符,用于确定它正在执行的数据。
每个英伟达显卡都有一定数量的内核,内核决定了GPU的功率和处理速度。
内核数量越多,意味着我们可以并行处理的数据越多。
将任务划分为更小的计算,分配给线程来执行操作,并且使用同步块组合来获得最终结果,这相比于CPU可以达到至少50倍的加速。
我们当前使用的神经网络正是并行计算的代表,因为每个节点的计算通常独立于所有其他节点,可以很容易地应用于GPU。
借助CUDA,可以开发在GPU上运行的,数千或数十万个并行线程加速的高性能算法。
CUDA遵循以下原则:并行性、计算、同步。
cuDNN(CUDA Deep Neural Networks)是一个GPU加速库,彻底改变了深度学习框架的世界。它与PyTorch、TensorFlow、MxNet、Caffe2等兼容,是增强这些框架性能的基石。
cuDNN拥有对基本操作的微调实现,包括前向和后向卷积、池化、归一化和激活层。它的真正实力在于能够快速执行通用矩阵乘法(GEMM),同时节省宝贵的内存资源,这是传统方法难以实现的壮举。
大型语言和计算机视觉模型,严重依赖CUDA和cuDNN进行GPU加速。从本质上讲,CUDA和cuDNN是推动下一代深度学习模型的催化剂。
ZLUDA
上文提到的ZLUDA,能够让Intel和AMD的GPU,无需修改即可运行CUDA应用程序,并且运行性能接近原生。
用法也很简单,只用像往常一样运行程序,同时确保已加载替换CUDA的ZLUDA库即可。
项目地址:https://github.com/vosen/ZLUDA?tab=readme-ov-file#faq
目前ZLUDA还处于alpha版本,但它已经被证实能够支持多种原生CUDA应用程序,如Geekbench、3DF Zephyr、Blender、Reality Capture、LAMMPS、NAMD、waifu2x、OpenFOAM、Arnold(概念验证)等。
软件工程师Michael Larabel在经过几天的试用之后表示:支持CUDA的软件确实能够在ROCm上无缝运行,即便是专有渲染器等也能够配合这种「Radeon版CUDA」实现工作。
不过,ZLUDA也有一些缺陷,例如它还不完全支持英伟达OptiX,同时也还没能处理不使用PTX汇编代码的软件。
但总体而言,考虑到这是一位独立开发者的成果,这种实现的能力还是相当出色的。
网友热议
对于英伟达这个看上去有点严重的警告,网友们众说纷纭。
这位网友表示:在Java/Android诉讼中已经确定,API不能受版权保护。一些司法管辖区甚至明确允许出于互操作性的目的进行逆向工程。
「这意味着,英伟达在EULA中的警告条款,不会使ZLUDA或任何其他不包含英伟达代码的解决方案成为非法使用。」
但另一位网友回应道,「我认为这不适用于这种特殊情况。我调查了一下,似乎裁决是针对不能受版权保护的概念,而不是实际的API本身。」
「Google基于概念创建了自己的API,这与创建翻译层以利用英伟达现有的API不同。」
「例如,ZLUDA实际上确实包含CUDA代码,并在运行时或预编译时直接翻译代码,这与概念的实现不同。」
「也就是说,法庭的裁决会倾向于英伟达。AMD和微软似乎不愿意挑战它,至少目前是这样。」
说到打官司,网友表示:这不就是任天堂嘛!
「被英伟达起诉绝对不是什么好事」。
有网友认为,现在唯一的问题是,许多应用程序都与CUDA完全绑定,别无选择。
当然了,这还要看英伟达到底怎么想的,「这完全取决于公司的心态。例如,微软让破解的Windows永远存在。」
网友表示,「英伟达希望保护自己的知识产权,并将客户与他们的生态系统联系起来,这是一个有利于企业本身的商业决策。这是可以理解的。」
相关推荐
- 悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)
-
新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...
- 高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源
-
凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...
- 微服务架构实战:商家管理后台与sso设计,SSO客户端设计
-
SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...
- 还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑
-
在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...
- Seata源码—6.Seata AT模式的数据源代理二
-
大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...
- 30分钟了解K8S(30分钟了解微积分)
-
微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...
- SpringBoot条件化配置(@Conditional)全面解析与实战指南
-
一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...
- 一招解决所有依赖冲突(克服依赖)
-
背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...
- 你读过Mybatis的源码?说说它用到了几种设计模式
-
学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...
- golang对接阿里云私有Bucket上传图片、授权访问图片
-
1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...
- spring中的资源的加载(spring加载原理)
-
最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...
- Android资源使用(android资源文件)
-
Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...
- 如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)
-
深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...
- @Autowired与@Resource原理知识点详解
-
springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...
- java的redis连接工具篇(java redis client)
-
在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)