0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Github上放出了只需4-8块GPU就能训练的“改进版”BigGAN模型代码

DPVg_AI_era 来源:lp 2019-03-29 11:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

机器学习模型训练成本往往令普通人倍感头疼,动辄几十上百块泰坦,别说买,就是租都肉疼。近日,BigGAN作者之一在Github上放出了只需4-8块GPU就能训练的“改进版”BigGAN模型代码,可以说是穷人的福音。新模型使用PyTorch实现。

机器学习模型训练是一个耗时费力的过程,而且随着人们对模型性能要求的提升,训练模型需要的计算力正以惊人的速度增长,堆叠高性能GPU进行数据训练几乎是唯一选择,动辄几十块上百块的泰坦,搞的地主家也没有余粮。

BigGAN效果拔群,但训练成本同样让人望而却步,想自己搞?先摸摸钱包再说。

现在,BigGAN原作者之一Andrew Brock在Github上放出了只需4-8块GPU就能训练的新版BigGAN,想穷人之所想,急穷人之所急,可以说是非常亲民了。新模型使用的是PyTorch,而不是TF

下面一起看看这个新模型的具体介绍,以下内容来自Github上的简介。

本资源包含由Andrew Brock,JeffDonahue和Karen Simonyan进行的大规模GAN高保真自然图像合成训练的BigGAN,只需4-8块 GPU的训练代码。

本段代码由Andy Brock和Alex Andonian编写。

运行环境和条件

PyTorch 1.0.1

tqdm,numpy,scipy和h5py

ImageNet训练集

首先,可以选择准备目标数据集的预处理HDF5版本,以实现更快的输入输出。之后需要计算FID所需的Inception时刻。这些都可以通过修改和运行以下代码来完成

shscripts / utils / prepare_data.sh

默认情况下,ImageNet训练集被下载到此目录中的根文件夹中,并将以128x128像素分辨率准备缓存的HDF5。

在scripts文件夹中,有多个bash脚本可以训练具有不同批量大小的BigGAN。假设您无法访问完整的TPU pod,因此通过梯度累积(在多个小批量下进行梯度平均,并且仅在N次累积后执行优化程序步骤),以此形式表示大批量。

默认情况下,可以使用launch_BigGAN_bs256x8.sh脚本训练一个全尺寸的BigGAN模型,批大小为256和8个梯度累积,总批量为2048。在8张V100上进行全精度训练(无张量),训练需要15天,期间共进行约150k次迭代。

首先需要确定设置可以支持的最大批量大小。这里提供的预训练模型是在8个V100上(每个显存16GB )上训练的,这个配置可以支持比默认使用的B1S256稍多一些的载荷。一旦确定了这一点,就应该修改脚本,使批大小乘以梯度累积的数量等于所需的总批量大小(BigGAN默认为2048)。

另外,此脚本使用--load_in_memarg,将整个(最大支持64GB)的I128.hdf5文件加载到RAM中,以加快数据的加载速度。如果没有足够的RAM做硬件支持(可能需要96GB以上的RAM),请删除此参数。

度量标准和抽样

在训练期间,脚本将输出带有训练指标和测试指标的日志,同时保存模型权重和优化程序参数的多个副本(前者保存最近的2个,后者保存5个最高得分),并且每次保存权重时将生成样本和插值。 logs文件夹包含处理这些日志的脚本,并使用MATLAB绘制结果。

训练之后,可以使用sample.py生成其他样本和插值,使用不同的截断值,批量大小,站立统计累积次数等进行测试。有关示例,请参阅sample_BigGAN_bs256x8.sh脚本。

默认情况下,所有内容都保存在weights/samples/logs/data文件夹中,这些文件夹设置与此repo位于同一文件夹中。可以使用--base_root参数将所有这些指向不同的基本文件夹,或者使用各自的参数(例如--logs_root)选择每个基础文件夹的特定位置。

此代码中包含了运行BigGAN-deep的脚本,但还没有完全训练使用它们的模型,因此用户可以视作这些模型尚未测试过。此外,我代码中还包括在CIFAR上运行模型的脚本,以及在ImageNet上运行SA-GAN(包括EMA)和SN-GAN的脚本。

SA-GAN代码假设用户配置在4张TitanX(或等同于该配置的GPU RAM),并且将以批量大小为128以及2个梯度累积运行。

关于初始度量标准的重要说明

本资源使用PyTorch内置的初始网络来计算IS和FID分数。这些分数与使用Tensorflow官方初始代码获得的分数不同,仅用于监控目的。使用--sample_npz参数在模型上运行sample.py,然后运行inception_tf13来计算实际的TensorFlow IS。请注意,需要安装TensorFlow 1.3或更早版本,因为1.4或更高版本会破坏原始的IS代码。

预训练模型

PyTorch初始分数和FID分数

我们引入了两个预训练模型检查点(使用G,D,G的EMA副本,优化器和状态dict):

主要检查点是在 128x128 ImageNet 图像上训练的 BigGAN,该模型使用 BS256 和 8 梯度累积,并在崩溃前实现,其 TF Inception Score 为 97.35 +/- 1.79,

详见:

https://drive.google.com/open?id=1nAle7FCVFZdix2—ks0r5JBkFnKw8ctW

第一个模型(100k G iters)的早期检查点,性能更高,在崩溃之前实现,可能更容易微调。

详见:

https://drive.google.com/open?id=1dmZrcVJUAWkPBGza_XgswSuT-UODXZcO。

另外,使用Places-365数据集的预训练模型即将推出。

此repo还包含用于将原始TF HubBigGAN 生成器权重的PyTorch的移植脚本。有关更多详细信息,请参阅TFHub文件夹中的脚本。

使用自己的数据集或创建新的训练函数微调模型

如果想恢复中断训练或微调预训练模型,请在运行相同的启动脚本,添加--resume参数。实验名称是由训练配置自动生成的,但如果希望使用修改后的优化器设置微调模型,可以使用--experiment_namearg进行文件名的覆盖。

要准备自己的数据集,需要将其添加到datasets.py并修改utils.py中的convenience dicts,以获得数据集的相应元数据。在prepare_data.sh中重复此过程(也可以选择生成HDF5预处理副本,并计算FID的Inception Moments)。

默认情况下,训练脚本将保存初始分数最高的前5个检查点。对于ImageNet以外的数据集,初始分数可能是一种非常差的质量标准,可以使用--which_bestFID来代替。

要使用自己的训练函数(如训练BigVAE):修改train_fns.GAN_training_function或在if config['which_train_fn'] =='GAN'之后添加新的训练函数。

本模型的主要亮点

本资源库提供完整的训练和指标日志以供参考。重现论文过程中最困难的事情之一就是检查训练早期的记录日志是否规整,特别是在训练时间长达数周的情况下。希望这将有助于未来的工作。

本资源库包括一个加速的FID计算 - 原始的scipy版本可能需要超过10分钟来计算矩阵sqrt,此版本使用加速的PyTorch版本,计算时间不到1秒。

本资源用了一种加速、低内存消耗的正交寄存器实现。默认情况下,只计算最大奇异值(谱范数),但本段代码通过 —num_G_SVs 参数支持了更多 SV 的计算。

本模型与原始BigGAN之间的主要区别

我们使用来自SA-GAN的优化器设置(G_lr= 1e-4,D_lr = 4e-4,num_D_steps= 1,与BigGAN的设置不同(G_lr = 5e-5,D_lr = 2e-5,num_D_steps = 2)。虽然这样牺牲了些许性能,但这是削减训练时间的第一步。

默认情况下,本资源不使用Cross-Replica BatchNorm(又名Synced BatchNorm)。本资源尝试的两种变体与内置的BatchNorm具有略微不同的梯度(尽管是相同的前向传递),可以满足训练要求。

梯度累积意味着需要更频繁地更新SV估计值和BN统计量(频度增加了8倍)。这意味着BN统计数据更接近于常设统计数据,而且奇异值估计往往更准确。因此,在测试模式下默认使用G来衡量指标(使用BatchNorm运行统计估算,而不是像文件中那样计算常设统计数据)。

我们仍然支持常设统计信息(具体见sample.sh脚本)。这也可能导致早期累积的梯度变得过时,但在实践中这已经不再是个问题。

目前给出的预训练模型未经过正交正则化训练。似乎增加了模型由于截断变得不可修复的可能性,但本资源库中给出特定模型似乎格外好运,没有碰到这种情况。不过,我们还是提供两个经过高度优化(快速和最小内存消耗)的正交寄存器实现,直接计算正交寄存器梯度。

Github资源地址:

https://github.com/ajbrock/BigGAN-PyTorch

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5115

    浏览量

    134544
  • 机器学习
    +关注

    关注

    66

    文章

    8542

    浏览量

    136333
  • GitHub
    +关注

    关注

    3

    文章

    485

    浏览量

    18444

原文标题:学生党福音!仅4个GPU打造自己的BigGAN,PyTorch代码已开源

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    在Ubuntu20.04系统中训练神经网络模型的一些经验

    本帖欲分享在Ubuntu20.04系统中训练神经网络模型的一些经验。我们采用jupyter notebook作为开发IDE,以TensorFlow2为训练框架,目标是训练一个手写数字识
    发表于 10-22 07:03

    AI智能大模型,你身边的最好用的办公提效小能手

    几十亿到数万亿; 任务广:一次训练可以支持多个任务,具备通用能力; 适应快:只需少量样例,就能迁移到新任务中(Few-shot、Zero-shot)。 讯维AI智能大模型
    的头像 发表于 09-30 10:59 222次阅读

    Arm神经技术是业界首创在 Arm GPU 增添专用神经加速器的技术,移动设备实现PC级别的AI图形性能

    应用,该 AI 图形优化升级技术能够以每帧四毫秒的速度实现两倍的分辨率提升 开发者即刻就能通过业界首个神经图形的开放开发套件进行构建,其中包含虚幻引擎插件、模拟器,以及 GitHub 和 Hugging Face 的开放
    的头像 发表于 08-14 17:59 2542次阅读

    aicube的n卡gpu索引该如何添加?

    请问有人知道aicube怎样才能读取n卡的gpu索引呢,我已经安装了cuda和cudnn,在全局的py里添加了torch,能够调用gpu,当还是只能看到默认的gpu0,显示不了gpu1
    发表于 07-25 08:18

    make sence成的XML文件能上传到自助训练模型吗?

    make sence成的XML文件能上传到自助训练模型
    发表于 06-23 07:38

    为什么无法在GPU使用INT8 和 INT4量化模型获得输出?

    安装OpenVINO™ 2024.0 版本。 使用 optimum-intel 程序包将 whisper-large-v3 模型转换为 int 4 和 int8,并在 GPU
    发表于 06-23 07:11

    请问如何在imx8mplus上部署和运行YOLOv5训练模型

    我正在从事 imx8mplus yocto 项目。我已经在自定义数据集的 YOLOv5 训练了对象检测模型。它在 ubuntu 电脑
    发表于 03-25 07:23

    摩尔线程GPU原生FP8计算助力AI训练

    近日,摩尔线程正式开源MT-MegatronLM与MT-TransformerEngine两大AI框架。通过深度融合FP8混合训练策略和高性能算子库,这两大框架在国产全功能GPU实现
    的头像 发表于 03-17 17:05 1269次阅读
    摩尔线程<b class='flag-5'>GPU</b>原生FP<b class='flag-5'>8</b>计算助力AI<b class='flag-5'>训练</b>

    无法在GPU运行ONNX模型的Benchmark_app怎么解决?

    在 CPU 和 GPU 运行OpenVINO™ 2023.0 Benchmark_app推断的 ONNX 模型。 在 CPU 推理成功,但在
    发表于 03-06 08:02

    是否可以输入随机数据集来生成INT8训练后量化模型

    无法确定是否可以输入随机数据集来生成 INT8 训练后量化模型
    发表于 03-06 06:45

    用PaddleNLP在4060单卡实践大模型训练技术

    手把手教您如何在单张消费级显卡,利用PaddleNLP实践OpenAI的GPT-2模型的预训练。GPT-2的预训练关键技术与流程与GPT-4
    的头像 发表于 02-19 16:10 2159次阅读
    用PaddleNLP在4060单卡<b class='flag-5'>上</b>实践大<b class='flag-5'>模型</b>预<b class='flag-5'>训练</b>技术

    马斯克揭秘Grok 3训练成本:20万英伟达GPU

    近日,马斯克旗下的xAI公司正式推出了其新一代大模型——Grok 3。在备受瞩目的发布会直播中,马斯克亲自披露了Grok 3的训练成本,这一数字引起了业界的广泛关注。 据马斯克透露,Grok 3
    的头像 发表于 02-19 09:39 1201次阅读

    FP8在大模型训练中的应用

    越来越多的技术团队开始使用 FP8 进行大模型训练,这主要因为 FP8 有很多技术优势。比如在新一代的 GPU
    的头像 发表于 01-23 09:39 1937次阅读
    FP<b class='flag-5'>8</b>在大<b class='flag-5'>模型</b><b class='flag-5'>训练</b>中的应用

    模型训练框架(五)之Accelerate

    Hugging Face 的 Accelerate1是一个用于简化和加速深度学习模型训练的库,它支持在多种硬件配置上进行分布式训练,包括 CPU、GPU、TPU 等。Accelerat
    的头像 发表于 01-14 14:24 1816次阅读

    GPU是如何训练AI大模型

    在AI模型训练过程中,大量的计算工作集中在矩阵乘法、向量加法和激活函数等运算上。这些运算正是GPU所擅长的。接下来,AI部落小编带您了解GPU是如何
    的头像 发表于 12-19 17:54 1421次阅读