LeNet-5 神经网络结构详解

卷积层的参数计算:

  1. 卷积后feature map边长: outputSize =(originalSize + paddingX2 – kernelSize)/ stride + 1 (其中outputSize是卷积之后得到的feature map的边长,originalSize是输⼊图的边长,padding是填充的⼤⼩,kernelSize是卷积核的边长,stride是步长)
  2. 卷积层的可训练的参数个数: trainNum = (outputSize X outputSize + 1) X kernelNum (其中kernelNum是卷积核的个数,加1是因为每⼀个卷积核有⼀个bias参数)
  3. 卷积层的连接数: connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum
  4. 卷积层的神经元个数: neuralNum = (outputSzie X outputSize) X kernelNum

采样层的参数计算:

  1. 采样后map的边长: outputSize =(originalSize + paddingX2 – kernelSize)/ stride + 1 (其中outputSize是卷积之后得到的feature map的边长,originalSize是输⼊图的边长,padding是填充的⼤⼩,kernelSize是卷积核的边长,stride是步长)
  2. 采样层可训练的参数个数: trainNum = (1+ 1) X kernelNum (其中kernelNum是卷积核的个数)
  3. 采样层的连接数: connectNum = (kernelSize X kernelSize) X (outputSize X outputSize) X kernelNum
  4. 采样层的神经元个数: neuralNum = (outputSzie X outputSize) X kernelNum

0


Blink Fast and Generic Collectives for Distributed ML

论文原址:https://arxiv.org/abs/1910.04940

blink 论文最创新的地方,其实就是在训练的过程中,考虑了硬件的拓扑结构,类似于最短路径优化,找到一个训练时间最短的路径

1. 背景介绍

随着机器学习模型,和数据量的不断增长,模型训练逐渐由单机训练,转变为分布式的多机训练。在分布式深度学习中,数据并行是最为常用的模型训练方式。然而数据并行的模型训练过程中,需要频繁的做数据聚合/模型同步。参与运算的 GPU 数量越多,其对应的数据聚合的开销也会越大。当下单个 GPU 的算力不断增加,GPU 间的数据聚合成成了新的分布式机器学习的瓶颈。

各大公司也发现了数据聚合这个重大瓶颈,因此在软硬件上都提出了自己的解决方案。硬件层面上,GPU 厂商 Nvidia 发布了 GPU 之间直接相连的高速通信通道 NVLink,以及多 GPU 之间的路由器 NVSwitch。软件层面上,各大公司都相继发布了自己的 GPU 通信库(例如:Nvidia 的 NCCL,Baidu 的 Ring-AllReduce),或者针对 GPU 通信进行优化的分布式机器学习平台(最流行的 Uber 的 Horovod)。

然而,这些软件层面上的通信库或者机器学习平台,并没有充分利用所有的,同构和异构的网络通信线路。因此,由 UC Berkeley,Microsoft Research 以及 University of Wisconsin-Madison 组成的研究团队发布,能够充分利用所有同构及异构的网络传输线路,从而实现最优 GPU 间数据聚合的 Blink 项目。

2. 论文摘要

当下流行的分布式机器学习平台(Horovod)或 GPU 间数据聚合的通信库(NCCL),其最大问题在于无法很好的解决网络异构性。网络异构性主要表现为如下三点:

1. 同构的 GPU 间链接线路,例如 NVLink,用于不同型号的 GPU 的对应 NVLink 的版本和带宽不同,其组成的网络的拓扑结构也不相同。具体区别如图一所示。

0

在一个 8 卡的 DGX-1 机器上:如果 GPU 是 P100,其对应的 NVLink 是第一代,带宽为 18-20GB/s,其拓扑结构如图 1 黑线所示。如果 DGX-1 用的 GPU 是 V100,其 NVLink 通信线路为第二代,带宽为 22-25GB/s。于此同时,相比 P100 的 DGX-1,V100 的 DGX-1 的网络拓扑结构也不同,其在 P100 的基础上,新增了一圈红色虚线的 NVLink 线路。


Autopilot: workload autoscaling at Google

autopilot 算是 google 今年混部领域最重磅的论文了吧

论文原址:https://dl.acm.org/doi/pdf/10.1145/3342195.3387524

在传统的数据中心里,资源超售最简单的方式就是把闲置资源回收再分配,total = total – allocated + reclaim

有时候,业务为了应对峰值流量(特别是互联网服务这种有明显流量特征的),都会购买多一些冗余资源。但是这些冗余资源会因为各种原因,不是那么准确。比如流量随着时间流逝会逐渐发生变化、或者用户过于焦虑

用户填的Quota永远都是不准的

这会带来一些问题:

  1. 集群资源浪费,由于Quota不准,导致机器资源被大量闲置和浪费。比如 Quota 分配出去了100c,但实际使用了10c
  2. 集群负载不均衡,同样两个机器,分配率一样,但是实际使用差别很大,对混部性能的影响就不一样

为了解决这个问题,google设计了autopilot,尝试通过自动的校准用户的 Quota,实现一定程度的超售,降低成本


Borg: the next generation

论文原址:https://dl.acm.org/doi/pdf/10.1145/3342195.3387517

这篇论文主要是分析了google内部8个集群的workload数据,并和2011年(1个集群)的数据集做了一些对比,以此来跟踪数据中心这几年的workload变化

相较于2011年的workload数据,可以发现,无论是资源模型、负载分布、混部密度、系统架构,等,都有很大的变化。这里面的很多内容和想法,和我们过去做过的还有正在做的,都不谋而合

1. 资源模型

2011年的时候,google的资源模型只有4个优先级,分别是:

  1. Free tier:免费资源,基本上不承诺任何SLA,通常是研发用来跑一些测试任务
  2. Best-effort Batch (beb) tier:同样不承诺SLA,低优先级资源,一般用来跑离线任务
  3. Production tier:生产级别,承诺SLA,一般用来托管在线服务,比如以下 long runing service
  4. Monitoring tier:监控级别,具有最高级别的SLA,用来运行数据中心的基础系统

机器学习算法之——卷积神经网 (CNN)原理讲解

很经典的一篇文章,存档一下:https://xie.infoq.cn/article/c4d846096c92c7dfcd6539075

一、从神经网络到卷积神经网络

我们知道神经网络的结构是这样的:

那卷积神经网络跟它是什么关系呢?

其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。比如下图中就多了许多传统神经网络没有的层次。

1. 定义

简而言之,卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。卷积神经网络的创始人是着名的计算机科学家 Yann LeCun,目前在 Facebook 工作,他是第一个通过卷积神经网络在 MNIST 数据集上解决手写数字问题的人。

Yann LeCunn

2. 卷积神经网络的架构

如上图所示,卷积神经网络架构与常规人工神经网络架构非常相似,特别是在网络的最后一层,即全连接。此外,还注意到卷积神经网络能够接受多个特征图作为输入,而不是向量。


Bringing HPC Techniques to Deep Learning

原文地址: andrew.gibiansky.com/bl

Allreduce 其实一直是HPC领域很常见的一个技术,所以百度这篇论文其实讲的也是如何将Allreduce从HPC引入到深度学习领域,通过Allreduce算法,大大的提高了深度学习的模型训练速度

简介

过去几年中,神经网络规模不断扩大,而训练可能需要大量的数据和计算资源。 为了提供所需的计算能力,我们使用高性能计算(HPC)常用的技术将模型缩放到数十个GPU,但在深度学习中却没有充分使用。 这种ring allreduce技术减少了在不同GPU之间进行通信所花费的时间,从而使他们可以将更多的时间花费在进行有用的计算上。 在百度的硅谷AI实验室(SVAIL)中,我们成功地使用了这些技术来训练最先进的语音识别模型。 我们很高兴将Ring Allreduce的实现发布为TensorFlow的库和补丁程序,并希望通过发布这些库,我们可以使深度学习社区更有效地扩展其模型。

Introduction

在过去的几年中,神经网络已被证明是解决各种问题的非常有效的工具,并且在规模和计算需求方面迅速增长。 2012年,用于图像识别的SuperVision卷积网络通过两个星期的GPU和6000万个参数在对象识别方面取得了长足的进步。 2016年,研究人员在网络上进行语言建模方面取得了突破,该网络具有在32个GPU上进行了为期三周的训练的十亿多个参数。 在百度研究院的硅谷AI实验室中,2014年,我们的Deep Speech语音识别系统的第一次迭代大约有1100万个参数,而一年后的下一次迭代已增长到1亿个参数。

随着神经网络的参数数量和计算需求的增长,在许多节点和许多GPU上有效并行化神经网络训练变得越来越重要,因为等待大型网络训练数月会减慢实验速度并限制进一步的发展。 在此博客文章中,我们介绍了一种来自高性能计算(HPC)领域的技术,并演示了如何将其应用于深度学习以在神经网络训练中获得显着的性能提升。


sony xz2p do版本最全app清理列表

由于日版 docomo 有芯片锁,无法解锁bl,也无法 root,目前唯一的办法只能通过 adb 删除自带软件已达到精简目的

adb 怎么安装怎么用自行百度,目前只贴 app 的清理列表。可以直接保存为 bat 文件,执行即可

adb shell pm uninstall –user 0 com.amazon.mShop.android.shopping

adb shell pm uninstall –user 0 com.google.android.calendar

adb shell pm uninstall –user 0 jp.co.nttdocomo.lcsapp

adb shell pm uninstall –user 0 com.sonymobile.scan3d

adb shell pm uninstall –user 0 com.google.android.youtube


cgroup 内存管理之 tmpfs

1. tmpfs 内存简介

tmpfs 文件系统是 pod 中常见的一种“存储”介质,也叫 ram disk,都是一个东西
tmpfs 的特殊的地方在于:
  1. 首先它是个文件系统
  2. 但是它的文件数据是完全存放在内存里面的,不在磁盘上
所以要讲 tmpfs 的话,就得把这两部分都讲清楚,一个是文件系统的实现,一个是底层“持久化”层内存的管理
通常应用程序之间会通过 tmpfs 文件系统来实现高效的数据共享
/dev/shm 就是一个最典型的 tmpfs 文件系统,是操作系统为了解决大多数程序数据共享而默认挂在的一个 tmpfs

2. tmpfs 文件系统的实现

我们知道 file 是linux内核最重要的设计,一切皆文件
除了普通的文件,平时我们接触到的,unix管道、socket、proc、cgroup 等等,都是基于文件的实现
为了实现灵活可扩展的文件系统架构,Linux设计了 virtual file system 抽象层,简称 vfs,对用户台程序屏蔽了所有具体的底层文件系统的实现细节,提供统一的文件系统接口

2.1. virtual file system 接口定义

vfs 属于一个专题,我们这里不讲那么复杂,有时间可以专门展开讲
vfs 定义了文件系统实现最关键的2个接口:
  1. 一个是 struct file_operations:文件读写的接口
  2. 一个是 struct inode_operations:inode操作接口
inode_opertions 定义如下:
struct inode_operations {
        int (*create) (struct user_namespace *, struct inode *,struct dentry *, umode_t, bool);
        int (*symlink) (struct user_namespace *, struct inode *,struct dentry *,const char *);
        int (*mkdir) (struct user_namespace *, struct inode *,struct dentry *,umode_t);
        int (*rmdir) (struct inode *,struct dentry *);
        /* 省略一万字 */
};
是不是很熟悉?


主成分分析(PCA)简明过程

主成分分析(PCA)是最常见的降维算法,通常用于数据压缩以及噪音过滤

比如我们可以通过PCA将100维的向量最后用10维来表示,那么压缩率为90%,同时还可以保证数据的特性损失尽可能的小

1)PCA算法流程

在详细展开讲之前,先了解一下几个基本数学符号的定义:

x^{i} 表示第i个样本数据(这个数据是一个N维向量)

x_{j}^{i} 表示第i个样本的第j个特征

x_{j} 表示由所有样本数据的第j个特征变量组成的一个向量

了解这些数学符号的定义非常重要,否则后面的推导公式很容易混乱

假设我们有一个n维的样本数据集 D = (x^{(1)}, x^{(2)}, ..., x^{(m)}),其中每一个数据都是n维的 x^{(i)} = \{x_1^i, x_2^i, ..., x_n^i\},我们要把维度从n维降到k维:

  1. 对所有样本进行归一化 x^{(i)} = x^{(i)} - \frac{1}{m} \sum\limits_{j=1}^{m} x^{(j)}
  2. 计算协方差矩阵covariance matrixXX^T,其中 X 的定义非常重要
  3. 计算协方差矩阵XX^T特征向量eigenvectors),通常用SVD分解,得到 [U, S, V]
  4. 从U中选取前k个最大特征值对应的特征向量,组成一个新的特征向量矩阵U_{reduce}
  5. 对所有样本,求的新的降维后的样本,z^{(i)} = U_{reduce}^T * x^{(i)}


x230 再战黑苹果 10.14.5

距离上一次安装黑苹果,已经3年过去了。第一次安装的时候作为一个新手,参考网上教程,整个安装过程顺利的让我这种小白都震惊了,x230 不愧是为黑苹果而生的一个本本

但是后来因为网卡问题,安装后就没有继续用了,切记!使用黑苹果千万别用usb网卡,那真是非常蛋疼,能上网但是进不去 app store 的,因为 app store 必须要求网卡BSD名字是en0。虽然有一些魔改的教程,但是成功率不高,不建议尝试,比较浪费时间

x230 上黑苹果能用的网卡主流是2种,一种是AR9285,一种是BCM94352,BCM的高级很多,AR的最傻瓜凑合用。我淘了一个AR的把原装网卡换掉了。接下来准备开始安装黑苹果,但是这次就没那么顺利了,为了防止下一次继续掉坑,记录了一下安装过程需要特别注意的一些地方

安装黑苹果的过程可以分为4大块

  1. BIOS 参数修改
  2. 制作U盘启动盘(EFI + 原始镜像)
  3. 安装(硬盘分区,安装)
  4. 硬盘引导

其中网上大部分傻瓜教程或者视频,都是讲2-4,但其实1非常关键,你看那些教程视频装个黑苹果跟装个Windows似的,因为很多前置的坑都填了(就比如BIOS参数),当然是看着很简单了。