大模型训练难于上青天?效率超群、易用的“李白”模型库来了

c923559721f7f6ba7e5ae446fec89b31.png

来源|机器之心

大模型多了去了,告诉我怎么加速?自 2018 年 BERT 诞生,到 GPT-3、ViT 等拥有数以亿计的参数规模的模型不断涌现,AI 模型参数量的爆发式增长已不足为奇,让炼丹师无暇顾及甚至感到麻木。

69aedf5cf3af074adf209f09fc57a09f.png

与此同时,大模型对计算和内存资源提出了巨大的挑战。训练成本急剧上升,比如用一块非常先进的 NVIDIA A100 GPU 训练千亿参数模型的 GPT-3,需要用时 100 多年。

大模型对显存的需求增长远超过 GPU 显存增长的速度,根据 OpenAI 的报告,模型大小的增长速度是每 3.5 月翻一倍,而 GPU 显存则需要 18 个月才能翻倍。受限于 GPU 显存,单个 GPU 无法再容纳大规模模型参数。

因此,业内不得不将计算扩展到多个 GPU 设备上,分布式训练则成为广大开发者的必然选择。

但是分布式训练的门槛太高,即便拥有充足的计算资源,也可能因为搞不定分布式训练而望洋兴叹。分布式并行编程通常需要工程师了解计算机系统和架构的专业知识,再加上相关的实践经验,这进一步增加了探索前沿算法和新模型的难度。凡此种种,使得大模型成为部分科技巨头的特权。如何加速模型训练效率,让更多工程师可以使用、研究大模型成为当务之急。

问题是,市面上那么多支持分布式训练的模型库,选哪个最合适?

近期,由一流科技团队研发的以高效性起家的国产开源深度学习框架 OneFlow 上线了 LiBai(李白)模型库,这个新生代模型库覆盖了 Hugging Face、Megatron-LM、DeepSpeed、FairSeq 这些所有主流 Transformer 库的优点,分布式训练性能一如既往地力压群雄,更重要的是,全局视角编程最大程度降低了分布式使用门槛,让大模型训练飞入寻常百姓家。

LiBai 模型库地址:https://github.com/Oneflow-Inc/libai

那么,它具体是怎么做到的?以下还将从训练性能、易用性等方面对上述分布式训练工具做对比,为你在下一次做分布式训练时的工具选择提供参考指南。

1

一键自动分布式训练,性能超越 Megatron-LM 和 DeepSpeed

作为一个简单高效的分布式模型训练工具箱,具体而言,LiBai 有如下六大特点:

  • 支持单卡代码平滑地扩展到分布式。LiBai 内置的模型与 PyTorch 保持一致风格,大大降低学习和使用成本,只需要简单配置,就可以便捷地扩展至任意规模的并行。这意味着,你可以在单卡上增加新功能,进行模型调试,跑通代码后再丝滑地迁移到分布式上进行训练。如果完全不想配置分布式训练,或是觉得手动配置的分布式训练太慢,那可以试用分布式托管特性,只需安装自动并行的包(https://libai.readthedocs.io/en/latest/tutorials/basics/Auto_Parallel.html),并在 LiBai 里配置一行 graph.auto_parallel=True,就可以专注于模型本身,在完全不用操心分布式的同时获得较快的训练速度。

  • 兼容 Hugging Face。OneFlow 和 PyTorch 在 API 层次高度兼容,可以通过简单的代码修改就可以导入 Hugging Face 模型,只须 import oneflow as torch ,基于 LiBai 的数据并行、自动混合精度、Activation Checkpoint、ZeRO 等机制进行一个大规模模型的训练。如果把模型的个别层次替换为 LiBai 内置的 layers ,就可以使用 3D 并行来训练一个大模型。

  • 模块化设计。在 LiBai 的实现中,不仅为模型构建提供可复用的基础计算模块,也针对数据加载、训练逻辑、指标计算等做了抽象和模块化处理,方便用户根据自己的需求重写,然后作为插件集成到 LiBai 的训练系统中进行训练。

  • 开箱即用。大模型训练通常需要依赖一些技术,LiBai 提供了混合精度训练、梯度重计算、梯度累加、ZeRO 等特性,可以轻松与数据并行、模型并行、流水并行组合使用。

  • 快速复现实验。OneFlow 团队参考了 Detectron2 LazyConfig(https://github.com/facebookresearch/detectron2/blob/main/docs/tutorials/lazyconfigs.md) 来构建 LiBai 的配置系统,相比于传统的 argparse 和 yacs-based 配置方式,LiBai 的配置系统更加灵活,使用 Python 语法完成整体构建,所以添加新的参数和模块非常方便,只需要 import 对应的模块即可完成新模块的添加。同时,训练配置还可以序列化成 yaml 文件进行保存,方便直接在文件中进行关键字搜索来查找配置项,如果用户想要复现之前的实验的结果,也直接传入保存的 config.yaml 作为训练配置,保留非常多脚本的文件既不利于查看有效修改,在复现实验的同时也容易弄混实验配置。

  • 高效性能。通过和 Megatron-LM 进行严格的 kernel 对齐,实现了多种 kernel fusion 操作,同时得益于 OneFlow 静态图的设计,不管是单卡性能还是各种组合并行的效率,LiBai 都优于英伟达深度优化的 Megatron-LM 和微软的 DeepSpeed。

得益于 OneFlow SBP 原生支持各种并行技术,LiBai 实现了算法描述和并行系统的解耦,仅用 3 万多行代码,它就实现了英伟达 Megatron-LM 和微软 DeepSpeed 两大流行方案共计 10 万行代码才能涵盖的功能 。

数据最具说服力,以下的所有实验数据均在相同的硬件环境、相同的第三方依赖(CUDA、 cuDNN 等)、使用相同的参数和网络结构下,全面对比了 LiBai 和 Megatron-LM 在不同模型下的性能表现(所有性能结果均公开且可复现,https://libai.readthedocs.io/en/latest/tutorials/get_started/Benchmark.html)。未来,OneFlow 团队会公布更大规模集群上 LiBai 的表现。

  • Megatron-LM 固定 commit:https://github.com/NVIDIA/Megatron-LM/commit/e156d2fea7fc5c98e645f7742eb86b643956d840 

  • LiBai commit: https://github.com/Oneflow-Inc/libai/commit/9fc504c457da4fd1e92d854c60b7271c89a55222 

  • OneFlow commit: https://github.com/Oneflow-Inc/oneflow/commit/55b822e4d3c88757d11077d7546981309125c73f 

数据并行

注:以下每组参数的含义:

DP 数据并行、MP 模型并行、PP 流水并行、2D 并行、3D 并行

fp16:打开混合精度训练 (amp) 

nl: num layers  (当 Pipeline parallel size = 8 时,为了让每个 stage 有相对数量的 layer 进行计算,我们将 num layers 从 24 调整为 48) 

ac: enable activation checkpointing 

mb: micro-batch size per gpu 

gb: global batch size total 

dxmxp,其中:  

d = 数据并行度(data-parallel-size)  

m = 模型并行度(tensor-model-parallel-size)  

p = 流水并行度(pipeline-model-parallel-size)  

1n1g 表示单机单卡,1n8g 表示单机 8 卡, 2n8g 表示 2 机每机 8 卡共 16 卡, 4n8g 表示 4 机共 32 卡 

grad_acc_num_step = global_batch_size / (micro_batch_size * data_parallel_size) 展示的结果为 Throughout

7b0f69aabd52172105262f3d4c8c206f.png

(注:本组 num layers = 24,开启 amp,1n1g micro-batch size = 24, 其余组 micro-batch size = 16)

ecad6718b0be4e3dd89deef1e9fd81bd.png

(注:本组 num layers = 24,开启 amp,1n1g micro-batch size = 6, 其余组 micro-batch size = 4)

模型并行

dc0df591cf836621fcf10e5c5ed48a50.png

(注:本组 num layers = 24,开启 amp, 开启 activation checkpointing,

micro-batch size = 128, global batch size = 1024, grad acc step = 8)

691eab5471b307d6beca740713fbaaac.png

(注:本组 num layers = 24,开启 amp)

流水并行

2e125f60bcfa6bbd7195ea09c34fbacf.png

(注:前两组 num layers = 24,grad acc step = 8, 最后一组 num layers = 48, grad acc step = 16,均开启 amp,开启 activation checkpointing)

79a2cc484b6e9cb6d65b93a3db3381d0.png

(注:前两组 num layers = 24,grad acc step = 8, 最后一组 num layers = 48, grad acc step = 16,均开启 amp,开启 activation checkpointing)

2-D 并行

数据 + 模型并行

e424474fc3ffecf420c397c5ae14ffe4.png

(注:本组均为 num layers = 24,均开启 amp,开启 activation checkpointing, micro-batch size = 128,grad acc step = 8)

1319b6543aab8b2b8371ec769acd3947.png

(注:本组均为 num layers = 24,均开启 amp,开启 activation checkpointing, micro-batch size = 32,grad acc step = 8)

数据 + 流水并行

dd6bdd40991969404f30c17fac334bbd.png

(注:本组均为 num layers = 24,均开启 amp,开启 activation checkpointing, micro-batch size = 128,grad acc step = 8)

d557bfe45c8f4febf3a45e32d04ea5f6.png

(注:本组均为 num layers = 24,均开启 amp,开启 activation checkpointing, micro-batch size = 32,grad acc step = 8)

3-D 并行

0ff6885648d34cf29e9fde7a3fac1570.png(注:本组均为 num layers = 24,均开启 amp,开启 activation checkpointing,grad acc step = 8)

9c1daefaf13757827d2facbb5fe2fb5e.png

(注:本组均为 num layers = 24,均开启 amp,开启 activation checkpointing,grad acc step = 8)

从上述性能对比数据可以看到,在严格对齐的实验环境下,在 Bert、GPT-2 模型上,LiBai 的训练速度全方位超过 Megatron-LM。

2

人有我优,人无我有:LiBai vs 其他训练方案

如前所述,为了解决大模型训练的难题,业内已经有 Hugging Face、DeepSpeed 和 Megatron-LM、FairSeq 等流行方案,OneFlow 是否还有必要再研发一个 LiBai 模型库?

接下来,让我们具体比较下上述模型库的优势和不足,也许你就会做出判断。

518fc455b4aa97c36c34a1b1bd295ebe.png

HuggingFace:提供了全面的 SOTA Transformer 模型 ,便于使用预训练好的模型进行微调,提供强大的社区和生态,方便开发者使用预训练好的模型。但它只支持数据并行的方式,如果模型超过单个 GPU 显存容量就不适用了,而且想用它做从零开始训练速度也比较受限。

FairSeq:主要针对序列模型,在 NLP 和 CV 大一统的趋势下,缺少对 CV 模型的支持。

Megatron-LM:基于 PyTorch 实现了数据并行、模型并行和流水并行,性能高,可以用来真正地训练超大规模模型。

不过它做了大量的定制化,对于不熟悉分布式训练的算法工程师而言学习和使用门槛太高,基本上只能被分布式专家所复用。另外,Megatron-LM 提供的模型也远远少于 Hugging Face,使得想使用 PyTorch 复现大模型的工程师都必须要等待其他分布式高手基于 Megatron-LM 实现了自己想用的模型才行。

DeepSpeed:基于 PyTorch 的模型显存优化相关的深度定制库,提供分布式训练、混合精度训练、ZeRO 等技术,可以有效节约内存的开销,使得在数据并行下也可以有效地训练大模型。但是,DeepSpeed 还不支持模型并行,当模型某些层的参数大到超过了单个 GPU 的显存,或是使用 DeepSpeed 的切分方式导致的通信效率不是最优时,最好还是使用模型并行(Tensor 并行、流水并行),此时,只能结合 Megetron-LM 加上侵入原代码的改造来满足需求。

除了作为 PyTorch 生态中实现大模型训练之鼻祖的 Megatron-LM 和 DeepSpeed ,来自国内外的多家知名机构也研发和推出了如 FairSeq 等若干大模型训练库,需要特别指出的是,这些库的分布式核心功能无一例外都是基于 Megatron-LM、DeepSpeed 完成的。

LiBai 模型库的与众不同之处在于,它不是以上任一分布式训练工具的简单升级或包装,而是基于 OneFlow 的分布式和图编译器能力构建的大规模预训练模型开发套件。唯有如此,LiBai 不仅在性能上无出其右,在分布式易用性上更是不遑多让:

  • 兼容性。可以有效和目前基于 PyTorch 实现的 SOTA 模型兼容,方便用户快速迁移模型。

  • 高效性。无论是单卡还是多卡,用户使用 LiBai 都可以提高训练效率。

  • 易用性。LiBai 具有优秀的扩展性,可以很方便地根据需求修改模型,增加新功能,更快地完成原型功能的开发。以几乎无感知、零学习成本的方式帮助用户大幅降低分布式深度学习训练的门槛,用户在使用 LiBai 开发新模型和新功能时,只要会单张 GPU 编程就能自动扩展到大规模 GPU 的集群,无须为分布式训练重写代码,从而提高开发的效率。

看完上述对比,相信 LiBai 也会成为 AI 工程师做分布式训练的绝佳选择,你觉得呢?

3

LiBai 支持所有常见并行训练策略

分布式训练大模型是个复杂问题,涉及到数据并行(data parallel),模型并行(tensor/model parallel),流水并行(pipeline parallel)等多种并行策略,LiBai 模型库支持这三种常见的并行策略以及这些并行策略的任意组合(并行策略的基本概念:https://docs.oneflow.org/master/parallelism/01_introduction.html)。

自行实现这些并行策略让人十分头疼,比如以前为了使用自动混合精度训练,需要学习配置 Apex;为了支持数据加载流水线,需要学习配置 DALI;为了使用 ZeRO 减少显存占用,需要学习配置 DeepSpeed …… 但用 LiBai 就完全不用担心这类问题,它内置了多种并行策略且具备良好的可扩展性。

以下是 LiBai 中各类并行方法的实例。

万能并行的实现方式

借助 OneFlow 的 SBP 接口,用户可以很方便地根据自身的需求,依照 GPU 的分组排布情况对网络中的输入或者权重进行切分,以实现数据或张量并行。

在 LiBai 的 layers 模块(libai.layers)下,已内置一系列可自适应不同并行策略的网络层,包括常用的 Linear、MLP、Transformer 模块等,使用 LiBai 的 layers 搭建的神经网络, 只需调整配置文件中关于分布式配置的超参,就可以轻松实现纯数据并行、纯张量并行以及数据 & 张量混合并行的训练策略。

关于分布式配置的格式如下:

# configs/common/train.py
# Distributed arguments
dist=dict(
        data_parallel_size=1,
        tensor_parallel_size=1,
        pipeline_parallel_size=1,
)

通过 data_parallel_size 与 tensor_parallel_size 来控制输入数据与模型权重在不同 GPU 组上的切分方式,当用户使用 LiBai 的内置 layers 模块搭建好神经网络后,可以在自己的训练配置文件中修改分布式超参, 以实现不同的并行训练策略,上图所有值都取为 1 表示在单卡上运行。假设用户拥有一台 8 卡机器,下面介绍一下如何通过修改此配置文件实现数据并行、张量并行以及流水并行训练。

具体操作可参考 LiBai 分布式配置文档:https://libai.readthedocs.io/en/latest/tutorials/basics/Distributed_Configuration.html

纯数据并行 & 纯模型并行

当用户要在 8 卡上进行纯数据(或模型)并行训练, 只需要在训练配置文件中对分布式超参进行覆写即可:

  • 纯数据并行

# your config.py
from libai.config import get_config
train = get_config("common/train.py").train


train.dist.data_parallel_size = 8

训练时,在不同的 rank 上会复制一份相同的模型,每个 rank 会分别处理一部分的输入数据, 以实现数据并行训练。

  • 纯模型并行

# your config.py
from libai.config import get_config
train = get_config("common/train.py").train


train.dist.tensor_parallel_size = 8

在这种情况下, 模型会自动在 8 个 GPU 上进行切分, 每个 GPU 仅包含整体模型结构的一部分, 以实现模型并行训练。

数据 & 模型混合并行训练

当用户要在 8 卡上进行数据与模型混合并行训练, 只需要在训练配置文件中对分布式超参进行以下简单改动:

# your config.py
from libai.config import get_config
train = get_config("common/train.py").train


train.dist.data_parallel_size = 2
train.dist.tensor_parallel_size = 4

这种情况下,  LiBai 会自动对 GPU 进行分组, 我们以 [0, 1, 2, 3, 4, 5, 6, 7] 对 8 个 GPU 进行编号,当设置了 data_parallel_size=2 以及 tensor_parallel_size=4 后,在执行时,会自动将 8 个 GPU 进行分组,可以表示为 [[0, 1, 2, 3], [4, 5, 6, 7]], 其中[0, 1, 2, 3] 为一组,[4, 5, 6, 7]为一组,执行时,会在组之间进行数据并行训练,在组内进行模型并行训练。

流水并行的配置

流水并行的核心概念可以简单总结为:将网络分为多个阶段(stage), 不同的 stage 被分发到不同的 GPU 上, 每个 stage 的计算结果传递给下一个 stage 进行计算,最终按接力的方式完成训练。关于流水并行的具体内容可参考:https://docs.oneflow.org/master/parallelism/01_introduction.html#_6。

朴素流水并行配置

在 LiBai 下可以通过设置 placement 参数,将网络的不同层分配到不同的 GPU 上,placement 参数的值可以通过 libai.utils.distributed 下的 get_layer_placement()接口轻松配置,LiBai 会自动根据配置文件(config)中的分布式配置,来做 stage 的切分,将不同的 placement 自动分配到不同的 stage 上,所以只需要为网络的每一层配置好 placement,再结合分布式配置,便可以轻松实现流水并行配置。

在大部分网络中,往往用一层 Linear 层作为网络的头部(head), 产生网络的最终结果用作分类或者其他任务, 所以以 Linear 层为例, 简要介绍 LiBai 中最简单的流水并行配置方法:

from libai.layers import Linear


self.head = Linear(hidden_size, num_classes)

配置网络模块(module)的 placement

在 LiBai 中可以通过两种方式将一层网络分配到对应的 placement 上:

1、通过 to_global 接口结合 get_layer_placement()来手动指定 placement, 这里通过设置 get_layer_placement(-1)来将 head 层配置到最后一组接力的 placement 上。

from libai.layers import Linear
import libai.utils.distributed as dist


self.head = Linear(hidden_size, num_classes).to_global(placement=dist.get_layer_placement(-1))

2、(Recommended) 在 libai.layers 中实现的 module 自带 layer_idx 参数, 可以直接设置 layer_idx 参数来指定这一层的 placement

from libai.layers import Linear


self.head = Linear(hidden_size, num_classes, layer_idx=-1)

配置输入数据的 placement

在配置好了网络中模块的 placement 后, 还需要指定输入数据的 placement, 因为只有当输入和网络在同一个 stage 的时候才可以进行计算, 最直观的方式就是为输入和网络配置相同的 placement, 可以结合 to_global 与 get_layer_placement()实现:

class MyModule(nn.Module):
    def __init__(self, ... *, layer_idx):
        ...
        self.layer_idx = layer_idx
        ...


    def forward(self, input_data):
        input_data = input_data.to_global(placement=dist.get_layer_placement(self.layer_idx))
        ...

结合配置文件轻松实现朴素流水并行

在配置好网络中不同层的 placement 以及输入的 placement 后,在执行流水并行前,用户只需要调整配置文件(config)即可,需要提前知道网络中的层数,并且调整配置文件中的 pipeline_num_layers:

# set the number of pipeline stages to be 2
train.dist.pipeline_parallel_size = 2


# set model layers for pipeline
train.dist.pipeline_num_layers = hidden_layers

1F1B 是在 PipeDream(https://arxiv.org/pdf/1806.03377.pdf)中介绍的一种新的流水并行训练方式,可以更好地节省显存与利用资源。LiBai 也可以比较容易地支持这种 1F1B 的策略(https://github.com/Oneflow-Inc/libai/blob/main/docs/source/tutorials/advanced_tutorials/customize_dataloader.md)

3D 并行的实现

掌握了数据 & 模型混合并行,以及流水并行以后,配置数据 + 模型 + 流水并行也只是综合一下上述各种并行的改动即可。

# your config.py
from libai.config import get_config
train = get_config("common/train.py").train


train.dist.data_parallel_size = 2
train.dist.tensor_parallel_size = 2
train.dist.pipeline_parallel_size = 2


hidden_layers = 8 #网络的层数
train.dist.pipeline_num_layers = hidden_layers

还是以 8 卡作为例子,在设置 data_parallel_size,tensor_parallel_size, pipeline_parallel_size 都为 2 以后,在执行时,模型将根据用户设置的 pinepine_num_layers 在 GPU 上自动进行划分。 

以上述配置为例,模型将在 [0, 1, 2, 3] 和[4, 5, 6, 7]号 GPU 上拆分为 2 个 stage。其中,stage0 会在 [0, 2] 和[1, 3]号 GPU 上数据并行;在 [0, 1] 和[2, 3]号 GPU 上模型并行;stage1 会在 [4, 6] 和[5, 7]号 GPU 上数据并行;在 [4, 5] 和[6, 7]号 GPU 上模型并行。

自定义并行训练

根据上文的介绍,LiBai 在 libai/layers / 下提供了封装好的模块供用户调用。通过这些模块的组合,用户可以拼凑出自己的并行网络。

当 LiBai 中的模块无法满足用户需求时,用户也可以非常方便地自定义并行策略。不同于 PyTorch 下需要手工插入 scatter -> forward -> reduce 等一系列复杂的通信操作,在 LiBai 中,用户只需在初始化 tensor 时定义 sbp 和 placement,便可像写单机运行的代码一样跑起来自己的并行代码。(sbp 和 placement 的详情可参考:https://docs.oneflow.org/master/parallelism/04_2d-sbp.html)。

举例来说,在用户进行 4 卡训练时,网络的中间结果有一个 shape 为 (16, 8) 的 2D Parallel 的 tensor 在 GPU 上的划分方式为如下图, 在 LiBai 中。该 tensor 的 placement 分布为 ranks=[[0, 1],[2, 3]],SBP 为 (S[0], S[1]) 或(S[1], S[0])。

[            |   
    X00 gpu0 |  X01 gpu1
--------------------------
    X10 gpu2 |  X11 gpu3
             |           ]

其中, Xij 的 shape 都为 (8, 4) 均匀的分布在每张卡上, 如果你想对这个 tensor 加入一些随机噪声,那么在 LiBai 中可以非常方便地加上如下代码:

LiBai 中封装 dist.get_nd_sbp()是为了兼容 1D parallel 的需求,同时 dist.get_layer_placement()是为了方便配置 pipeline parallel。大多数情况下,用户可以直接参照以下代码:

# test.py
import oneflow as flow
from omegaconf import DictConfig
from oneflow import nn


from libai.utils import distributed as dist


cfg = DictConfig(
    dict(data_parallel_size=2, tensor_parallel_size=2, pipeline_parallel_size=1))
dist.setup_dist_util(cfg)




class Noise(nn.Module):
    def __init__(self):
        super().__init__()
        self.noise_tensor = flow.randn(
            16, 8,
            sbp=dist.get_nd_sbp([flow.sbp.split(0), flow.sbp.split(1)]),
            placement=dist.get_layer_placement(layer_idx=0)
        )
        # 也可以换成以下的写法
        # self.noise_tensor = flow.randn(
        #     16, 8,
        #     sbp=(flow.sbp.split(0), flow.sbp.split(1)),
        #     placement=flow.placement("cuda", ranks=[[0, 1],[2, 3]])
        # )


    def forward(self, x):
        return x + self.noise_tensor




Noise = Noise()


x = flow.zeros(
    16, 8,
    sbp=(flow.sbp.split(0), flow.sbp.split(1)),
    placement=flow.placement("cuda", ranks=[[0, 1],[2, 3]])
)
y = Noise(x)


print(f"rank: {flow.env.get_rank()}, global tensor: shape {y.shape} sbp {y.sbp} placement {y.placement}, local tensor shape: {y.to_local().shape}")

运行指令:

python3 -m oneflow.distributed.launch --nproc_per_node 4 test.py

以下显示输出,根据 shape 可以看到每个 rank 下 tensor 的分布,以及在 global 视角下该 tensor 的信息。

rank: 2, global tensor: shape oneflow.Size([16, 8]) sbp (oneflow.sbp.split(axis=0), oneflow.sbp.split(axis=1)) placement oneflow.placement(type="cuda", ranks=[[0, 1], [2, 3]]), local tensor shape: oneflow.Size([8, 4])rank: 3, global tensor: shape oneflow.Size([16, 8]) sbp (oneflow.sbp.split(axis=0), oneflow.sbp.split(axis=1)) placement oneflow.placement(type="cuda", ranks=[[0, 1], [2, 3]]), local tensor shape: oneflow.Size([8, 4])rank: 1, global tensor: shape oneflow.Size([16, 8]) sbp (oneflow.sbp.split(axis=0), oneflow.sbp.split(axis=1)) placement oneflow.placement(type="cuda", ranks=[[0, 1], [2, 3]]), local tensor shape: oneflow.Size([8, 4])rank: 0, global tensor: shape oneflow.Size([16, 8]) sbp (oneflow.sbp.split(axis=0), oneflow.sbp.split(axis=1)) placement oneflow.placement(type="cuda", ranks=[[0, 1], [2, 3]]), local tensor shape: oneflow.Size([8, 4])

4

未来计划

9be562d9e730c3c33b0f006fbaccb99b.png

LiBai 目前已支持 BERT、GPT、ViT、Swin-Transformer、T5 等常见模型,以及 MoCoV3、MAE 等最新研究,开箱即用,并且可以很方便地在下游任务上进行微调。

此外,OneFlow 也会更好地兼容 Hugging Face 的模型,接入其生态,同时再利用 OneFlow 自动并行功能,帮助用户享受只写单卡代码即自动扩展到分布式系统的一劳永逸的激爽体验。

未来,在支持更多模型训练的基础上,OneFlow 也会持续完善推理和 Serving 相关的功能,从而打通训练和部署的全流程,让 OneFlow 成为用户的一站式开发平台。

  • LiBai 模型库地址:https://github.com/Oneflow-Inc/libai

  • LiBai 文档地址:https://libai.readthedocs.io/en/latest

  • OneFlow 项目地址:https://github.com/Oneflow-Inc/oneflow

其他人都在看

欢迎体验OneFlow v0.8.0​​​​​​​:https://github.com/Oneflow-Inc/oneflow/icon-default.png?t=M666https://github.com/Oneflow-Inc/oneflow/

相关推荐

<span class=“js_title_inner“>OpenAI 前首席研究官:AGI 核心突破已实现</span>

归根结底,与人合作时要理解他们的诉求,既要让他们实现创作目标,又要协调所有人的贡献形成整体成果,并持续反复地解决这个问题。但如果他们知道你是在为他们争取最大利益,那么当你要求他们去做那件极其困难且令他们恐惧的事情时,有时你就能帮助他们跨越鸿沟,解决问题,避免他们做出愚蠢的举动,最终获得圆满的结果。,包括在实现方式上的品味,其中可能存在不明显的后果——也许是性能上的隐性影响,也许是用户界面演变过程中难以预见的连锁反应,进而需要改变系统更深层的抽象结构——这些只能依靠人类来完成,目前别无选择。

OneFlow深度学习框架 738

<span class=“js_title_inner“>OpenAI 前首席研究官:AGI 核心突破已实现</span>

归根结底,与人合作时要理解他们的诉求,既要让他们实现创作目标,又要协调所有人的贡献形成整体成果,并持续反复地解决这个问题。但如果他们知道你是在为他们争取最大利益,那么当你要求他们去做那件极其困难且令他们恐惧的事情时,有时你就能帮助他们跨越鸿沟,解决问题,避免他们做出愚蠢的举动,最终获得圆满的结果。,包括在实现方式上的品味,其中可能存在不明显的后果——也许是性能上的隐性影响,也许是用户界面演变过程中难以预见的连锁反应,进而需要改变系统更深层的抽象结构——这些只能依靠人类来完成,目前别无选择。

OneFlow深度学习框架 423

<span class=“js_title_inner“>LLM 推理经济学</span>

作者 | Piotr Mazurek & Felix GabrielOneFlow 编译翻译|张雪聃题图由 SiliconCloud 生成当前 LLM 公司的主要商业模式是通过 API 提供模型访问服务,推理成本结构是决定其盈利能力的关键。本文将从底层原理阐释大模型托管/服务的成本来源、单个 GPU 可生成的词元(Token)数量及其成因,本文以开源模型 LLaMA 3.3 为基础,搭建一个简化版的大模型推理运算世界模型,旨在建立关于 LLM 推理的精确直觉认知。大模型推理的经济学影响远超过技术范畴本身。随

OneFlow深度学习框架 643

Databricks“三级跳”:600 亿美元独角兽的战略跃迁

本文以 S 曲线理论为分析框架,深度解构 Databricks 的三次关键战略跃迁,还原了其技术商业化路径中的关键决策——如拒绝本地化部署的短期利益、与微软 Azure 的生态合作以及从开源社区到企业级服务的平衡艺术。Databricks 作为数据与 AI 领域的代表性企业,从开源项目 Spark 起步,逐步发展为估值超 600 亿美元的行业巨头,其成长历程不仅折射出大数据技术的演进史,更揭示了科技公司如何通过连续的战略跃迁实现指数级增长。当时的背景是:互联网的迅速发展催生了海量数据,尤其是非结构化数据。

OneFlow深度学习框架 1220

AI 云服务之争:CoreWeave 向上,Nebius 向下

平台中的大多数工具均为自主研发,包括支持大规模调度的托管 Kubernetes、基于 Slurm 的集群调度系统、用于实验管理的 MLflow、自研的可观测性工具,以及一个具备安全保障的云端基础设施控制平台。它跳过了这一环节,设计了自己的服务器机架,以建立一个更加垂直整合的系统,从数据中心架构到托管式 Kubernetes 服务,再到像 Nebius AI Studio 这样的应用层工具(该工具为 DeepSeek、Llama 和 Flux 这样的开源模型提供推理 API)。的策略更全面和“全栈”。

OneFlow深度学习框架 2120

<span class=“js_title_inner“>AI 云服务之争:CoreWeave 向上,Nebius 向下</span>

平台中的大多数工具均为自主研发,包括支持大规模调度的托管 Kubernetes、基于 Slurm 的集群调度系统、用于实验管理的 MLflow、自研的可观测性工具,以及一个具备安全保障的云端基础设施控制平台。它跳过了这一环节,设计了自己的服务器机架,以建立一个更加垂直整合的系统,从数据中心架构到托管式 Kubernetes 服务,再到像 Nebius AI Studio 这样的应用层工具(该工具为 DeepSeek、Llama 和 Flux 这样的开源模型提供推理 API)。的策略更全面和“全栈”。

OneFlow深度学习框架 156

关于 DeepSeek-R1 API 评测,至少有 7 个误区

xx 58.33%。以某评测者的“人类头发数量的乘积是多少?市面上基本不存在“非满血版 R1”,也基本不存在所谓模型“降智”,而 R1 蒸馏版(70B、1.5B等)与满血版的效果差距很明显,一般知名服务商都会注明,如果这些平台提供所谓“非满血版 R1”,很容易测试出来,这完全是自砸招牌,他们没有动机“以次充好”。可以确定的是,市面上知名的第三方平台部署的都是“满血版 R1(671B)”,之所以用户使用感受有差异,是因为模型输出的随机性、平台提供的配套功能及超参数设置等可能不一致,而非底层模型本身的差异。

OneFlow深度学习框架 1157

<span class=“js_title_inner“>关于 DeepSeek-R1 API 评测,至少有 7 个误区</span>

xx 58.33%。以某评测者的“人类头发数量的乘积是多少?市面上基本不存在“非满血版 R1”,也基本不存在所谓模型“降智”,而 R1 蒸馏版(70B、1.5B等)与满血版的效果差距很明显,一般知名服务商都会注明,如果这些平台提供所谓“非满血版 R1”,很容易测试出来,这完全是自砸招牌,他们没有动机“以次充好”。可以确定的是,市面上知名的第三方平台部署的都是“满血版 R1(671B)”,之所以用户使用感受有差异,是因为模型输出的随机性、平台提供的配套功能及超参数设置等可能不一致,而非底层模型本身的差异。

OneFlow深度学习框架 139

首发!硅基流动 x 华为云联合推出基于昇腾云的 DeepSeek R1 & V3 推理服务

DeepSeek-R1、DeepSeek-V3 开源后引发全球震动,它们是深度求索团队为全人类献上的一份大礼,我们由衷为他们取得的成功感到高兴。经过硅基流动和华为云团队连日攻坚,今天,我们也为国内用户献上春节礼物:大模型云服务平台 SiliconCloud 首发上线基于华为云昇腾云服务的 DeepSeek-V3、DeepSeek-R1。 需要特别强调的是,无论是在昇腾上适配 DeepSeek-R...

OneFlow深度学习框架 4249

<span class=“js_title_inner“>首发!硅基流动 x 华为云联合推出基于昇腾云的 DeepSeek R1 & V3 推理服务</span>

5. 与 DeepSeek 官方优惠期价格保持一致,SiliconCloud 上的 DeepSeek-V3 的优惠期价格(截止 2 月 8 日 24:00)为 ¥1 / M tokens(输入)& ¥2 / M tokens (输出),DeepSeek-R1 的价格为 ¥4 / M tokens(输入)& ¥16 / M tokens (输出)。华为云昇腾云服务可提供澎湃、弹性、充足的算力。双模型,还是在此前上线其他模型的过程中,我们都得到了 DeepSeek 与华为云的大力支持,向他们致以深深的谢意与。

OneFlow深度学习框架 142

站在 AI 十字路口:直面智能体与机器人狂潮

生成式 AI 正在迅速介入人类世界。随着 AI 大模型不断进步,我们正面临着巨大的社会变革。本文探讨了一个由高度智能的智能体和机器人主导的世界——AI 亚特兰蒂斯世界(指在数字领域拥有几乎无限的 AI 资源)。本文分析了当前的 AI 模型为何从根本上不同于以往的技术范式,它们如何重塑各行业,以及人类面临的关键选择。作者认为,每个人都必须理解 AI 的进步将如何重塑经济、创造力和人类潜力的规则。除...

OneFlow深度学习框架 605

<span class=“js_title_inner“>站在 AI 十字路口:直面智能体与机器人狂潮</span>

拥有 AI 的政府能够提供更好的服务,制定数据驱动的政策,增强国家安全,并为民众提供更高的透明度和问责制。这里有一个令人难以置信的想法:你现在可以雇佣智能体员工和机器人工作者,他们的薪水甚至低于你花在咖啡上的费用——然而他们却拥有与普通大学毕业生相同的技能。拥有更多的闲暇时间当然不错,但真正的关键是,AI 为你腾出了精神空间,让你能专注于更大的挑战。像 ComfyUI 这样的工具是这一转变的早期例子——人们现在可以创建复杂的 AI 工作流,其中信息和任务从一个阶段无缝流向另一个阶段。这些模型是通用翻译器。

OneFlow深度学习框架 96

迈向 AI 驱动型经济:当资本不需要打工人

AI 的迅猛发展与普及,引发了学术界与工业界对现在的社会结构与经济模型的根本性反思。此前 OneFlow 发布的《资本、AGI 与人类雄心》、《AGI 时代的智能诅咒》、《AGI 崛起之后:重构经济模式与社会结构》三篇文章,深入探讨了劳动力替代性 AI 改变人力与非人力生产要素的相对重要性后,给整个社会带来的好处与风险,以及应对挑战的解决方案。在本文中,借助一众经济学家和科幻作家的理论观点,Int...

OneFlow深度学习框架 1026

<span class=“js_title_inner“>迈向 AI 驱动型经济:当资本不需要打工人</span>

相对而言,伊恩·M·班克斯(https://en.wikipedia.org/wiki/Iain_Banks)的《文明》系列丛书则描绘了一个后匮乏的社会,在这个社会中,拥有感知能力的 “AI 智能体(AI Minds)” 管理着星舰和栖息地,根据需求分配资源,而非货币。例如,《星际迷航》中,技术(如复制器和先进的星舰 AI )消除了物质匮乏,推动了一个专注于探索和文化发展的社会。而 AI 的引入,使非人类智能体成为生产力的主要推动者,将剩余价值的核心转移到了算法、数据集和计算系统的所有权上。

OneFlow深度学习框架 107

AGI 崛起之后:重构经济模式与社会结构

AGI 日益临近,这也迫使我们重新审视现有的社会结构和经济模式。在《资本、AGI 与人类雄心》一文中,Rudolf 指出,AGI 到来之后,劳动力替代性 AI 将改变人力与非人力生产要素的相对重要性,这会降低社会对人类的关注度,同时使现有的权力更加有效和根深蒂固。基于资源诅咒现象,Luke Drago 在《AGI 时代的智能诅咒》一文中将 Rudolf 的上述核心观点描述为智能诅咒。他认为,智能诅...

OneFlow深度学习框架 1310

AGI 时代的智能诅咒

经济学研究指出,依赖出售石油等自然资源获得收入而非公民税收的国家,会受到资源诅咒的影响,结果是权贵们攫取了大量财富,却停止了对普通人的投资。当 AGI 实现后,人类是否会面临类似的“智能诅咒”?在此前发布的《资本、AGI 与人类雄心》一文中,Rudolf 指出,AGI 到来之后,劳动力替代性 AI 将改变人力与非人力生产要素的相对重要性,这会降低社会对人类的关注度,同时使现有的权力更加有效和根深蒂...

OneFlow深度学习框架 766

资本、AGI 与人类雄心

通用人工智能(AGI)正在不可阻挡地走向人类社会,有人期待它带来的巨大生产力突破,有人也在警告它可能成为洪水猛兽,也有人对它的发展只是持观望态度。不管怎样,基于你所了解的信息,你可以尝试描绘一幅 AGI 图景,并畅想它在人类政治、经济、社会发展会产生的影响。在本文中,作者 Rudolf 深入剖析了 AGI 到来之后的资本、人类劳动与社会权力结构之间的复杂关系。其核心观点是,劳动力替代性 AI 将改...

OneFlow深度学习框架 886

2025 年 AI 十大展望:软件市场扩大 10 倍、系统比模型更重要、OpenAI 先发优势消退...

尽管有 Scaling Law 放缓这样的疑虑,但整体而言,多数业内人士对AI过去一年的诸多进展感到兴奋,对新的一年 AI 的发展更是充满期待,尽管他们对未来的预测可能不尽相同。在本文中,Foundation Capital 合伙人Ashu Grag回顾了 2024 年 AI 发展的里程碑事件,并重点介绍了 2025 年的前景,主要包括:1.预训练局限将推动新的 AI 突破2.AI系...

OneFlow深度学习框架 1590

900页免费“生成式AI与大模型”电子书|OneFlow年货

难以想象,如果不是Scaling Law放缓,2024年AI领域会发生哪些惊人变化,但你可能又会感到庆幸,正是由于Scaling Law放缓,它给了这个行业的后来者们追赶的机会,也给了更多普通人搭乘这一轮技术革命的机会。AI领域的变化激荡人心。一年前,AI社区普遍认为,与OpenAI的模型相比,大部分模型与它有半年或一年的差距,但大模型预训练逐渐没有秘密,它的入局门槛数量级降低。令国内外科技界深感...

OneFlow深度学习框架 659

2024年AI盘点:投资高歌猛进、基础设施重构、技术采用加速

本文全面分析了今年AI 的发展,包含AI 技术栈的基础设施层、基础模型层、应用层、工具层,尤其是各个层面的主要收获、值得关注的趋势与值得关注的初创公司。此外,本文还概括了 AI 领域的投资和并购情况,以及其他AI 趋势。需要指出的是,可能限于作者KelvinMu的关注重心,本文除了对中国基础模型的介绍,没有更多关于中国 AI 其他技术栈的进展。不过,这并不妨碍本文仍是我们了解 2024...

OneFlow深度学习框架 2010

从零实现极速LLM推理

作者 | Andrew Chen翻译|张雪聃、刘乾裕OneFlow编译题图由SiliconCloud平台生成本文旨在从零开始,仅使用C++和CUDA构建一个大语言模型(LLM)推理引擎,且不借助其他外部库。为何要这样做?通过这种方式,我们能够全面了解LLM推理的整个技术栈——这一点正变得日益重要[1]——从CUDA kernel到模型架构,并且切实体会不同的优化方式如何影响推理速度。其中一个最为重...

OneFlow深度学习框架 1207

AI数据中心历史、技术与关键企业

过去一年,通过模型架构创新、更优质训练数据和更大算力规模来训练模型,顶尖大模型之间的性能差距急剧缩小。如果Scaling law依然有效,为了进一步扩展模型规模与性能,在模型架构创新存在极大不确定性情况下,通过获得更多的算力来建造全新的数据中心,从而更快地训练模型以取得领先地位,这是确定性更高的收益。目前,以马斯克xAI为代表的大模型公司,快速部署了10万台GPU集群,成为数据中心扩展的领头羊,可...

OneFlow深度学习框架 971

红杉资本2025年AI三大展望:大模型厂商各显神通;杀手级应用AI搜索;AI支出变稳...

2024年,随着Scaling law放缓,AI领域在大模型、基础设施上的能力稳步提升,尽管应用层出现了各种有趣的探索,但是更大的潜能有待挖掘。2025年即将来临,将出现哪些变化?近日,红杉资本投资人David Cahn对2024年AI领域的发展作了简要总结并对2025年作了三大预测。他认为,今年是AI发展的萌芽期,其构建基石已经稳固建立,只待2025年发芽结果。他在本文中阐述了三点预言:首次,基...

OneFlow深度学习框架 1675

AI半导体技术、市场与未来

过去两年,英伟达崛起是科技领域的一个经典案例。通过CUDA系统,他们创建了一个使用GPU进行机器学习的开发者生态系统;通过Mellanox,他们成为了数据中心网络的领导者。然后,他们将所有硬件集成到服务器中,提供垂直集成的算力一体机。凭借这一系列组合性技术优势,英伟达在“AI淘金热”中提供的铲子占据行业核心地位,这导致它成为有史以来最成功的公司之一。随之而来的是,不少挑战者入局以求从英伟达主导的市...

OneFlow深度学习框架 1万+

比GPU快20倍?d-Matrix推理性价比分析

AI推理算力需求正在大幅增长。一方面,像硅基流动、Fireworks这样的AI基础设施软件公司通过软件层面的优化以提供高性价比的大模型推理服务,另一方面,以Cerebras、Groq为代表的芯片公司相继推出了专用AI推理芯片,通过硬件层面的创新,以数量级的推理速度与成本优势来挑战英伟达GPU的市场地位。AI推理芯片市场的竞争者还在增加。近日,成立于2019年的硅谷推理芯片创业公司d-Matrix的...

OneFlow深度学习框架 2035

生成式AI推理技术、市场与未来

OpenAI o1、QwQ-32B-Preview、DeepSeek R1-Lite-Preview的相继发布,预示着生成式AI研究正从预训练转向推理(Inference),以提升AI逻辑推理(reasoning)能力,这一转变将极大推动上层应用的发展。红杉资本近期指出,在可预见的未来,逻辑推理和推理时计算将是一个重要主题,并开启生成式AI的下一阶段。新一轮竞赛已然开始。那么,在推理这一新兴市场,...

OneFlow深度学习框架 2091

50张图,直观理解混合专家(MoE)大模型

Mixtral 8x7B的高效训练与推理效果曾引发AI社区对混合专家(MoE)模型的广泛关注,后来居上的国产开源大模型De‍epSeek以及腾讯近期开源的Hunyuan-Large(基于Transformer的最大MoE模型)也选择了MoE框架路线。为何大语言模型总是离不开MoE的身影?借助50多个图例,数据科学家Maarten Grootendorst由浅入深多维度剖析了MoE模型,从基础概念出...

OneFlow深度学习框架 9529

LLM后训练绝招:1%预训练成本,实现最高20倍算力扩展效果

根据规模定律,扩大训练计算规模可以提高大型语言模型(LLM)性能的关键,但调研机构Epoch AI的研究,LLM再训练无需高额费用,也能让AI能力获得显著提升。在该研究中,他们引入了一个基本框架,用于量化后训练增强的收益和成本,特别是通过计算等效增益来衡量收益。他们将该框架应用于一系列具有代表性的后训练增强,并发现性能提升非常显著,但微调成本通常与预训练成本相比非常小,某些后训练增强技术可以在不到...

OneFlow深度学习框架 4620

LLM逻辑推演策略选择:推理时计算 vs 训练时计算

AGI实现的一大标志是,具备人类级别的逻辑推理(reasoning)能力。近期,随着推理(inference)模型GPT o1、DeepSeek R1-Lite的发布,模型的逻辑推理能力得到显著提升,也预示着对LLM潜力的深度挖掘正在转向推理阶段。围绕增强LLM逻辑推理能力这一目标,美国人工智能与密码学研究实验室Bagel团队结合最新研究,从算术、常识和符号这三种主要逻辑推理类型出发,对比了在推理...

OneFlow深度学习框架 4206

探索AI框架前沿|OneFlow招聘深度学习研发工程师(实习)

一、岗位名称:深度学习研发工程师-框架开发方向(实习)岗位职责1. 参与 OneFlow 框架开发、重构与性能优化;2. 参与深度学习编译、高阶自动微分等深度学习框架相关技术演进工作。岗位要求1. 计算机或电子通信相关专业,本科及以上学历;2. 具备C/C++、Python编程基础,有良好的软件开发素养,熟悉TDD、CI/CD、敏捷开发流程等;3. 了解深度学习模型,有一定机器学习基础;4. 熟悉...

OneFlow深度学习框架 571
上一篇: 并行计算的量化模型及其在深度学习引擎里的应用
下一篇: OneFlow源码一览:GDB编译调试
OneFlow深度学习框架
OneFlow深度学习框架 企业官方账号 企业官方账号
博客等级 码龄6年 5868粉丝 385原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值