Introduction to IncludeOS

Introduction to IncludeOS

这是我和队友在 2019 年操作系统(H)课程中做的项目,这里做一个简单的回顾。

简介

Unikernel

传统内核都选择对硬件做了抽象,避免应用程序直接访问硬件资源,只提供抽象层提供的接口,例如 Linux 的应用程序全部运行在用户态,对硬件的操作全部通过系统调用进入内核态实现。这样做当然有好处,可以隐藏复杂的硬件细节,使用户专注于逻辑实现,但用户态和内核态之间的切换开销很大,损伤应用性能(在通常情况下影响不大,但对一些特殊场景,例如延迟敏感的 IoT 设备,会对影响性能)。

Unikernel 不区分用户态和内核态,所有应用都运行在同一层级,减少不必要的硬件抽象,(大多数 Unikernel)每次只运行一个应用,最大程度精简以提升性能表现。

当前社会,IoT 设备具有极大发展,具有很多有潜力的应用场景,我们希望在大量基于 ARM 架构的 IoT 设备上部署 Unikernel,因为 Unikernel 有如下优势:

  • 更高的运行性能;
  • 更高的资源利用效率;
  • 更好的隔离性和安全性;
  • 更好的可迁移性和可伸缩性。

但 Unikernel 也存在缺陷,最大的缺点就是调试非常困难。

经过调研,我们选择了 IncludeOS 作为基础的 Unikernel 实现,并将其移植到 ARM 上。

阅读更多...

CAPCG 复盘(三)

CAPCG 复盘(三)

应用背景

本次比赛的应用为 POP (Parallel Ocean Program)。

POP 是由 LANL 在能源部的 CHAMMP 计划赞助下开发的,该计划将大规模并行计算机引入了气候建模领域。上世纪60年代末,美国国家海洋和大气管理局地球物理流体动力学实验室的 Kirk Bryan 和 Michael Cox 首次开发了 Bryan-Cox-semtner 海洋模型,而 POP 是在这个模型的基础上进行开发的。POP 的第一个版本是由 Semtner 和 Chervin 开发的。

  1. 这是一个为了研究海洋气候系统提出的三维洋流模型,适用于海洋学和气候学研究;
  2. 研究人员通过实验发现,POP 模拟得到的结果总体上符合真实数据的大致分布趋势,但是仍然需要在更高分辨率下进行预测才能进一步减小与真实数据之间的误差;
  3. 由于 POP 里面的 stencil 计算以及 global reduction 存在一定的访存及通信瓶颈,所以实际工作性能不能达到平台的最佳性能(计算的瓶颈较小,访存的瓶颈较大)

应用运行的大体过程如下:

  • 对地图进行网格划分,每个进程分配部分任务;
  • 每个进程独自计算自己的任务;
  • 每个网格需要和相邻的网格交换边界信息;
  • 每次迭代过程需要若干次 global reduction 收集全局信息。

在这里多说一句,海洋模型为什么会跟共轭梯度法有关联。这是因为海洋模型本质上是通过连续的微分方程描述的,而求解微分方程的常用做法是离散化,之后通过一定的变换问题就能转化为求解 $Ax=b$ 这种线性方程,也就可以使用共轭梯度法进行求解了。

应用中主要求解的是正压 (barotropic) 模型,stencil operator 的作用是差分,可以发现源码中矩阵乘法的部分都是使用 stencil 计算。这也和微分方程的离散化有所对应(可以看成稀疏矩阵乘法的一种替代形式)。

阅读更多...

CAPCG 复盘(二)

CAPCG 复盘(二)

PCG 简介

Conjugate Gradient

经过了前面(充分的)的铺垫,终于到了 Conjugate Gradient 的介绍,其实共轭梯度法本质上就是将 Conjugate Direction 中构建的搜索方向的一组线性无关向量 $u_{(i)}$ 设定为残差 $r_{(i)}$,这样做的原因有以下几点:

  • 残差在最速下降法中被作为搜索方向使用,虽然在 Conjugate Direction 中的搜索方向构建与最速下降法不同,但仍有相似之处,可以拿来尝试;
  • 由之前的推导中 $d_{(i)}^{T} r_{(j)} =0$ 可知,残差具有和之前搜索方向正交的性质,这使得我们新的搜索方向总是与之前的搜索方向线性无关,除非 $r_{(j)} = 0$,但这种情况下问题已经被解决了。

因为 $d_{(i)}$ 都是由 $r_{(i)}$ 构建而来,所以 $\operatorname{span}\left\{r_{(0)}, r_{(1)}, \ldots, r_{(i-1)}\right\} = \operatorname{span}\left\{d_{(0)}, d_{(1)}, \ldots, d_{(i-1)}\right\}$。并且每个残差都与之前的搜索方向正交,于是可以推出:

阅读更多...

CAPCG 复盘(一)

CAPCG 复盘(一)

PCG 简介

预处理共轭梯度法 (Preconditioned Conjugate Gradient) 从共轭梯度法 (Conjugate Gradient) 衍生而来,是常用的用于求解线性方程组 $Ax = b$ 的数值解法,目前主要应用于数值计算领域。

Conjugate Gradient

共轭梯度法主要适用于系数矩阵 $A$ 较为稀疏的情况下。如果矩阵 $A$ 不是稀疏的,那么最好的求解方法是对系数矩阵进行分解,这样也可以快速对不同的 $b$ 求得答案,在系数矩阵很大而且稀疏的情况下,分解产生的矩阵可能含有比 $A$ 更多的非零元素,并且在时间和空间上均不具有优势,所以使用迭代法是一种较好的选择。

阅读更多...

BERT-illustration

BERT illustration

发展历史及主要想法

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, BERT 是 Bidirectional Encoder Representations from Transformers 的缩写。这个预训练模型让 NLP 领域进入了类似于当时 CV 界的后 ImageNet 时代(大量预训练模型应用)。

How BERT is developed

  • Step 1:在大量数据上(Wikipedia 和 大量书籍)进行半监督预训练
    • 预训练任务:Language Modeling,包含多个子任务:预测 masked 词,判读句子上下文关系等;
    • 这使得预训练模型具有一定的特征抽取和判断上下文联系(提取语义)等能力。
  • Step 2:在特定任务中进行监督学习
    • 根据特定任务的不同,按照一定的约定方式处理输入;
    • 输入内容通过预训练模型,后面根据任务要求添加分类器(e.g. Linear + Softmax)等得到输出。

Model Architecture

Model encoder hidden units(in feedforward network) attention heads (in multi-head attention)
BERT-BASE 12 encoder layers 768 hidden units 12 attention heads
BERT-LARGE 24 encoder layers 1024 hidden units 16 attention heads
阅读更多...
  • © 2020 Bowen
  • Powered by Hexo Theme Ayer

请我喝杯咖啡吧~

支付宝
微信