Loading

摘要: 表达式模板是Eigen、GSL和boost.uBLAS等高性能C++矩阵库的核心技术。本文基于MXNet给出的教程文档来阐述MXNet所依赖的高性能矩阵库MShadow背后的原理。 编写高效的机器学习代码 我们先来思考一个问题:如何才能编写出高效的机器学习代码?假设DNN模型按照下面的代码进行权重更 阅读全文
posted @ 2022-02-27 19:54 shuo-ouyang 阅读(162) 评论(0) 推荐(1) 编辑
摘要: 在C中,特殊成员函数指的是那些编译器在需要时会自动生成的成员函数。C98中有四种特殊的成员函数,分别是默认构造函数、析构函数、拷贝构造函数和拷贝赋值运算符。而在C11中,随着移动语义的引入,移动构造函数和移动赋值运算符也加入了特殊成员函数的大家庭。本文主要基于Klaus Iglberger在CppC 阅读全文
posted @ 2022-02-20 22:07 shuo-ouyang 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 虚函数的问题 虚函数的主要问题是性能开销比较大,一个虚函数调用可能需要花费数倍于非虚函数调用的时间,尤其是当非虚函数被声明为inline时(注意,虚函数不能被内联)。 CRTP介绍 CRTP的全称是Curiously Recurring Template Pattern,中文可以翻译成奇异递归模板模 阅读全文
posted @ 2022-01-06 22:53 shuo-ouyang 阅读(798) 评论(0) 推荐(0) 编辑
摘要: 本文整理了Arthur O'Dwyer在CppCon 2019上关于RAII的演讲,演讲的slides可以在此链接进行下载。 在C++程序中,我们往往需要管理各种各样的资源。资源通常包括以下几种: Allocated memory (malloc/free, new/delete, new[]/de 阅读全文
posted @ 2021-04-20 23:30 shuo-ouyang 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 在超算系统上运行MXNet分布式训练任务时,面临着一个IP地址相关的问题。我们在提交MXNet的分布式任务时,需要知道各个GPU节点的IP地址,把这些IP地址放到一个hosts文件中,以供分布式训练使用。因此,一种常用的方式是先使用salloc或yhalloc申请若干节点,然后依次登录这些节点,查询 阅读全文
posted @ 2021-03-14 18:16 shuo-ouyang 阅读(1384) 评论(0) 推荐(0) 编辑
摘要: 本文是谷歌发表在NeurIPS 2012上的一篇论文,主要讨论了在几万个CPU节点上训练大规模深度网络的问题,并提出了一个名为DistBelief的软件框架。在该框架下实现了两种大规模分布式训练算法:Downpour SGD和Sandblaster L-BFGS,这两种算法都增加了深度网络训练的规模 阅读全文
posted @ 2020-12-16 19:30 shuo-ouyang 阅读(273) 评论(0) 推荐(0) 编辑
摘要: MShadow是一个基于表达式模板实现的张量库,在MXNet框架中被广泛使用。这篇文章简单介绍了MShadow的基本用法和特性,文章主要翻译自mshadow/guide/README。 张量数据结构 MShadow中的主要数据结构就是张量(Tensor),下面是一个简化版本的声明定义(来自mshad 阅读全文
posted @ 2020-11-01 22:18 shuo-ouyang 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 本文发表在MLHPC 2018上,主要介绍了一个名为Aluminum通信库,这个库针对Allreduce做了一些关于计算通信重叠以及针对延迟的优化,以加速分布式深度学习训练过程。 分布式训练的通信需求 通信何时发生 一般来说,神经网络的训练过程分为三步:前向传播、反向传播以及参数优化。在使用数据并行 阅读全文
posted @ 2020-10-09 22:18 shuo-ouyang 阅读(667) 评论(0) 推荐(0) 编辑
摘要: 本文主要基于MXNet1.6.0版本进行分析。 在上一篇文章中,我们分析了MXNet中KVStore的进程内通信机制。在这篇文章中,我们主要分析KVStore如何进行多节点分布式通信。 在KVStore的实现中,KVStoreDist和KVStoreDistServer分别对应参数服务器中的work 阅读全文
posted @ 2020-09-21 21:49 shuo-ouyang 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 本文主要基于MXNet1.6.0版本,对Gluon接口的分布式训练过程进行简要分析。 众所周知,KVStore负责MXNet分布式训练过程中参数的同步,那么它究竟是如何应用在训练中的呢?下面我们将从Gluon.Trainer这个接口入手,逐步分析分布式训练的梯度交换以及参数同步过程。下面这段代码摘自 阅读全文
posted @ 2020-09-21 11:19 shuo-ouyang 阅读(517) 评论(0) 推荐(0) 编辑