DeepSeek跳过了CUDA,这是一个误解

部署运行你感兴趣的模型镜像

最近有个炒的很热的话题,就是说DeepSeek跳过了英伟达的CUDA,有助于中国摆脱英伟达,比如这篇文章:传DeepSeek绕过CUDA?业内人士称或为适配国产GPU做准备这个也是导致英伟达股价暴跌的原因之一。

前一篇博文中,我已经简单介绍了CUDA,以及PTX。

让我们看看DeekSeek的论文,它是在关于V3的论文中提到PTX优化的。

这段话翻译出来是这样的:

具体而言,我们采用了线程束专用化技术(鲍尔等人,2014 年),并将 20 个流式多处理器(SM)划分为 10 个通信通道。在数据分发过程中,(1) 无限带宽(IB)发送、(2)IB 到英伟达高速互连(NVLink)转发以及(3)NVLink 接收,分别由各自的线程束处理。分配给每个通信任务的线程束数量会根据所有 SM 上的实际工作负载进行动态调整。同样,在数据合并过程中,(1)NVLink 发送、(2)NVLink 到 IB 转发与累加,以及(3)IB 接收与累加,也由动态调整的线程束处理。此外,数据分发和合并内核都与计算流重叠,因此我们还考虑了它们对其他 SM 计算内核的影响。具体来说,我们采用了定制的并行线程执行(PTX)指令,并自动调整通信块大小,这显著减少了二级缓存(L2 cache)的使用以及对其他 SM 的干扰。 

可以用通俗的话解释上面的内容:

咱们在处理数据通信和计算的时候,用到了一种叫线程束专用化的技术(这是鲍尔他们在2014年提出来的办法)。我们把20个流式多处理器(你可以简单理解成GPU里干活的小工人小组)分成了10组,用来专门做通信方面的事儿。 在分发数据的时候,有三个步骤:一是把数据通过无限带宽网络发出去,二是把数据从无限带宽网络转到英伟达高速互连线上,三是通过英伟达高速互连线接收数据。这三个步骤分别安排不同的线程束(就像是小工人小组里的小团队)去负责。而且啊,每个通信步骤安排多少小团队去做,不是固定的,会根据所有小工人小组的实际工作量来动态调整。 在合并数据的时候,也有三个步骤:一是通过英伟达高速互连线把数据发出去,二是把数据从英伟达高速互连线转到无限带宽网络上,同时把数据加起来,三是通过无限带宽网络接收数据并且加起来。这几个步骤同样也是安排不同的小团队去做,而且小团队的数量也会根据实际情况动态调整。 另外呢,分发数据和合并数据的这些操作,和正常的计算操作是同时进行的。所以我们得考虑,这些通信操作会不会影响到其他小工人小组干计算的活儿。为了解决这个问题,我们用了定制的并行线程执行指令(可以把它想象成给小团队专门定制的工作指令),还自动调整了每次通信的数据块大小。这么做之后,二级缓存(可以当成小仓库)用得就少了,对其他干活小组的干扰也变小啦。  

 从这段话可以看出,其实DS没有脱离开英伟达的平台:

  • DeepSeek 在 GPU 计算中使用 PTX(Parallel Thread Execution)优化的技术细节,说明 PTX 与 CUDA 并非相互排斥的关系,PTX 是 CUDA 架构中的一部分,DeepSeek 对 PTX 的使用实际上是基于 CUDA 体系内的深度优化,并非绕过 CUDA。
  • DeepSeek 对 GPU 的定制化优化(如将部分 SM 用于通信)是在 CUDA 允许和支持的框架下进行的,这些操作是对 CUDA 生态的合理利用和拓展,而非脱离。

事实上DS的工作相当于手工写汇编优化代码,获得比编译器更高的执行效率。一般这很难做到,因为NVCC是英伟达工程师写的,他们对自家产品显然更了解。DS的工程师能做到,说明他们对英伟达架构理解得相当深入,同时结合自身算法的特点做了很细致的优化工作。CUDA 编译器应用的是通用优化,在大多数情况下效果良好,但 PTX 允许进行特定任务的调整。深言科技可以通过手动优化内存访问模式和指令流水线来消除编译器生成的低效问题。

David Sehyeon Baek指出:

深言科技将 PTX 与 CUDA 结合使用,代表了基于 GPU 的人工智能模型优化向前迈出的重要一步。

  • 提高计算效率:对于需要大规模并行处理的大型人工智能模型,PTX 优化能够提高 GPU 的利用率,减少训练和推理时间。
  • 为人工智能基础设施节省潜在成本:通过提高 GPU 效率,深言科技的方法使人工智能公司能够在每个 GPU 上获得更多的计算能力,有可能降低云服务和硬件成本。
  • 鼓励向定制人工智能硬件转变:深言科技的创新表明,人工智能公司可能会越来越倾向于进行底层 GPU 编程,甚至开发定制的人工智能加速器(类似于谷歌的张量处理单元 TPU 或 OpenAI 的定制硬件计划)。
  • 对 CUDA 未来的影响:尽管 CUDA 仍然占据主导地位,但深言科技通过 PTX 驱动的增强取得的成功可能会促使英伟达在 CUDA 生态系统内提供更大的手动调整灵活性。

尽管 PTX 有诸多优势,但将 PTX 优化集成到 CUDA 工作流程中也带来了一些挑战。

  • 更高的开发复杂度:编写和优化 PTX 需要深入了解 GPU 架构,这使得大多数人工智能开发人员难以掌握。
  • 有限的可移植性:PTX 是英伟达特有的,这意味着深言科技的优化在非英伟达硬件上无法使用。
  • 潜在的编译器改进:如果未来 CUDA 编译器更新能够提高性能,手动的 PTX 优化可能就不那么必要了。

深言科技通过 PTX 优化增强 CUDA 的决策标志着人工智能计算领域的一项重大创新。通过利用底层 GPU 控制,深言科技证明了 CUDA 的默认优化可以进一步细化以实现更高的性能。

这一突破表明,在深度学习、科学计算和高性能人工智能工作负载中,对灵活、精细的 GPU 编程的需求日益增长。

 DS的成功会使大家在关注算法的同时,更多关注计算机体系结构的演进。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### 确保 DeepSeek 在本地调用 CUDA 时仅占用少量资源 为了确保 DeepSeek 在本地调用 CUDA 时只占用有限的 GPU 资源,可以考虑以下几个方面: #### 控制批处理大小 调整输入数据的批量大小(batch size),较小的批量能够减少每次迭代所需的显存。这可以通过修改训练脚本中的参数来实现。 ```python # 设置更小的 batch_size 来降低显存消耗 train_loader = DataLoader(dataset, batch_size=8, shuffle=True) ``` #### 使用混合精度训练 采用 FP16 或者 BF16 数据类型代替传统的 FP32 进行计算,这样可以在不显著影响模型性能的情况下大幅节省显存并加速运算过程[^3]。 ```python from torch.cuda import amp scaler = amp.GradScaler() for data, target in train_loader: optimizer.zero_grad() with amp.autocast(): output = model(data) loss = criterion(output, target) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() ``` #### 动态管理 Tensor 的 Chunk 分配 根据描述,在 Manager 中实现了将外部 Tensor 注册到 Chunk 上的功能,并且已经针对 Chunk Size 和选择策略进行了优化。对于希望进一步控制资源使用的场景,可以选择更加保守的方式设置这些参数,比如增大最小内部碎片阈值或者改变 Chunk Select 函数的行为模式为 Best Fit 等更为紧凑的方法。 #### 启动命令配置 当创建特定版本的 DeepSeek 模型实例时,可通过启动命令指定设备选项和其他环境变量以限制其对硬件资源的影响。例如,利用 `CUDA_VISIBLE_DEVICES` 变量限定可用 GPU 数量;通过传递额外参数给 `ollama create` 命令设定最大显存量等[^1]。 ```bash export CUDA_VISIBLE_DEVICES=0 # 仅允许访问第一个GPU ollama create DeepSeek-R1-UD-IQ1_M -f DeepSeekQ1_Modelfile --max-memory=4G ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值