一流企业做标准:英特尔收购Barefoot背后的逻辑 - 老石谈芯

这篇的原文链接:https://zhuanlan.zhihu.com/p/84367537

今年6月,英特尔宣布收购一家名为“Barefoot”的公司,旨在帮助英特尔的数据中心部门“更好的应对云数据中心客户的不断变化的各类需求”。伴随着收购,Barefoot的CEO兼总裁,Craig Barratt博士(下图右)被任命为英特尔数据中心部门旗下“互联事业部(connectivity group)”的总经理,负责英特尔以太网控制器、网卡、交换芯片等一系列网络互联产品。

img

很多读者也许并没有听说过Barefoot这个公司。事实上,它的飞速发展已经对诸如博通和英特尔等传统网络交换芯片厂商形成了逼宫之势,大有一种“光脚的不怕穿鞋的”之感。

在这篇文章中,老石将详细解读这家“赤脚”公司的四大核心竞争科技:

  1. 一种编程语言:P4
  2. 一种可编程芯片架构:PISA
  3. 一种编译器与工具链:P4 Studio
  4. 一种可编程网络芯片:Tofino

文章最后,老石将分析Barefoot的这些“黑科技”对FPGA在网络应用的影响。

一种编程语言:P4

早在2014年,Barefoot与英特尔、谷歌、微软,以及斯坦福大学和普林斯顿大学联合发表了一篇名为《P4:Programming Protocol-Independent Packet Processors》的论文,这也代表着P4编程语言的正式诞生。

img


Kubernetes 学习路径 - caicloud

这篇的原文链接:https://github.com/caicloud/kube-ladder

背景

本文由 才云科技(Caicloud) 于 2019 年内部推出,现以开源的形式进行维护

目前云计算行业对于 Kubernetes 学习的需求日益增加,但市面上关于 Kubernetes 的资源良莠不齐,存在几个问题:

  • 官方文档缺少明确的”梯度”,信息错综复杂
  • 资料较为分散,查找信息费时费力
  • Kubernetes 发展很快,书籍或者网上教程容易过时

本文档旨在为广大从业者提供一个 Kubernetes 学习路径,为大家提供一定的指引。我们最终的目标是让所有人剥茧抽丝般地了解 Kubernetes,不仅仅知道怎么用 Kubernetes,还知道 Kubernetes 各个功能是如何设计的。在学习路径后期,我们还可以很”自然”的联想到正确的设计思路。

学习路径

注意

第一阶段 炼气期(2-4 周,每周 3-5 小时)

目标

  • Kubernetes 的背景
  • 安装 Kubernetes 环境
  • Kubernetes 基本概念和使用方法

路径

学习任何系统的之前,了解其出现的背景和意义都是必不可少的,为什么会出现 Kubernetes?它解决了什么问题?有没有其他类似的系统?这里推荐阅读才云科技 CEO 张鑫在 2017 年文章《从风口浪尖到十字路口,写在 Kubernetes 两周年之际》。

接下来,在了解 Kubernetes 系统本质之前,我们需要对 Kubernetes 有一个较为”感性”的认识,打消对 Kubernetes 的畏难情绪。这里,我们推荐使用 minikubekind 部署一个本地环境,然后开始部署一个”真实”的应用(minikube 安装需要使用科学上网,或使用“国内版” minikube)。如果想一开始就挑战更高难度的安装方式(不推荐),可以使用 kubeadm 或者手动部署所有组件。关于安装,可以参考文档 lab1-installation

在安装好环境之后,可以开始动手实践最基本的 Kubernetes 概念。在第一阶段,我们推荐熟练使用以下常用资源和概念:Pod、Node、Label、Event、Service、Configmap & Secret、Deployment、Namespace。相关学习可以参考文档 lab2-application-and-service

(可选)仅完成上述内容可能还不足以让我们非常熟悉 Kubernetes 的基本概念,下面列出其他可以参考的资料,大家也可以按照自己的方式去搜索相关的资料:

心法🤨

  • 请反复加深对上面资源的操作熟练度。如果你是第一次接触 Kubernetes,或者仅了解过一点 Kubernetes 的知识,那么基(ken)本(ding)是不明白 Kubernetes 底层到底发生了什么。请不要心急,姑且把它当成一个黑盒工具即可 🛠。
  • 你可能会在网上看到更多的概念,如 PVC、Ingress、Priority 等。炼气阶段,请不要尝试学习过多的资源类型。Kubernetes 有非常多的概念和类似的资源,我们这里熟悉最核心的概念即可,否则易走火入魔 👻,切记。当我们打通任督二脉之时,所有的新概念都不过尔尔。

第二阶段 筑基期(4-6 周,每周 8-10 小时)

目标

  • Kubernetes 的基本架构
  • Kubernetes 容器调度的基本流程

路径

短暂接触 Kubernetes 概念之后,我们需要知其然并且知其所以然,因此在第二阶段我们开始学习 Kubernetes 基本架构。学习 Kubernetes 基本架构至少需要了解以下内容:

  • Master & Node
    • 知道什么是 Kubernetes Master,什么是 Node
    • 知道两者的关系,知道它们是如何通信的
  • Master 组件
    • API Server。Kubernetes 如何接收请求,又是如何将结果返回至客户端。
    • Etcd。了解 Etcd 主要功能机制。
    • Controller Manager。Kubernetes 控制器是其架构中最为核心的一环,我们需要了解控制器的原理,List-Watch 的基本原理,知道 Kubernetes 默认情况下大致包含哪些类型的控制器。
    • Scheduler。熟悉 Kubernetes 的调度流程是怎样的,调度器在整个调度流程中的角色。
  • Node 组件
    • Kubelet。知道 Kubelet 是如何接受调度请求并启动容器的。
    • Kube-proxy。了解 Kube-proxy 的作用,提供的能力是什么。
    • Container Runtime。了解都有哪些 Container Runtime,主要了解 Docker 一些基本操作与实现原理。
  • 核心 Addons & Plugins
    • DNS。DNS 为集群的服务发现提供的支持,Kubernetes 1.13 开始默认使用 CoreDNS
    • Network Plugin。Kubernetes 多节点环境需要部署网络插件才可以使用,默认情况下使用 flannel 即可。

首先可以阅读书籍或网上博客,推荐阅读:

接下来,推荐从 0 开始部署一个 Kubernetes 集群(不使用任何工具),来加深对各个组件的理解:解决部署中出现的各种问题,查看组件启动日志等等。如果时间有限,也可以尝试使用 kubeadm 等工具来部署集群。目前 Kubernetes 集群部署自动化已经做得比较完善,但出于学习目的,再次墙裂推荐手动安装。关于手动安装集群,可以参考文档 lab3-manual-installtion

在本阶段修炼结束后,我们至少应该对以下问题了如指掌:Kubernetes 组件是如何交互,来启动容器,并对外提供服务的?

心法💪

  • 请不要死记硬背 Kubernetes 架构,要开动大脑 🧠去理解其背后设计的原因。
  • 筑基期是比较困难的一个阶段,如果感觉一头雾水,请不要气馁,你不是一个人。当你感觉进入了瓶颈时,可以尝试寻找身边的战友,总结一些你的问题并寻求答案 🍻。

第三阶段 金丹期(2-4 周,每周 3-5 小时)

目标

  • Kubernetes API 结构
  • 熟悉 Kubernetes 各个子系统
  • 熟悉 Kubernetes 排错相关内容

路径

当我们可以熟练使用 Kubernetes 的基本资源,并且对 Kubernetes 的基本架构有了充足了认识,接下来需要对 Kubernetes 的 API 结构和子系统要有一个比较全面的认识,同时也要开始更加系统的了解排查问题相关的内容。

要知道 Kubernetes API 是其最引以为傲的设计,掌握 API 的关键是需要了解:

我们可以通过浏览 Kubernetes API 代码仓库来了解 Kubernetes API 组(Group)的信息。所有的资源定义代码都遵循 //types.go 的规范,例如上述 Deployment 资源是定义在 apps group 中。我们可以在 apps/v1/types.go 中查找到关于 Deployment 的定义。

接下来,我们可以通过浏览 Kubernetes/Community 代码仓库来了解各个兴趣小组(SIG),”SIG” 是 Special Interest Group 的简称。Kubernetes 的演进都是通过 SIG 来推动的,因此了解 SIG 的分工对我们理解 Kubernetes 非常重要。一般来讲,一个 SIG 对应着一个 Kubernetes 子系统,例如,sig-apps 负责决定是否引入新的 API,或者现有 API 是否需要升级等等。我们通过查看 Community 中带有 “sig-“ 前缀的目录来了解 SIG 的工作内容、会议纪要等等。这里简单列举 Kubernetes 重要的子系统:

  • 架构 Architecture
  • 应用 Apps
  • 存储 Storage
  • 网络 Network
  • 权限 Auth
  • 节点 Node
  • 调度 Scheduling
  • 命令行 CLI
  • 多集群 MultiCluster
  • 云平台 CloudProvider
  • 扩展性 Scalability
  • 弹性伸缩 Autoscaling
  • 监控日志 Instrumentation

(可选)细心的你可能会发现以 “wg-“ 开头的目录,例如 “wg-resource-management”。”wg” 是 working group 的简称,是针对需要涉及多个 SIG 之间合作而展开的一种工作组,独立于任何 SIG 。例如 resource management 会涉及到 Node、Storage、Scheduling 等 SIGs。

作为一个承上启下的阶段,我们需要总结一些 Kubernetes 排错的能力,推荐阅读:

心法🌱

  • 本阶段的重点是”耳听六路 🙈 眼观八方 🙉”。前两个阶段接触到了很多 Kubernetes 的细节,本阶段需要对 Kubernetes 的全貌有个更加清晰的认识。很多内容可能看不太懂,但请在你的心中埋下一颗种子。

第四阶段 元婴期(4-6 周,每周 8-10 小时)

目标

  • 加深对各个资源的理解
  • 学习更多 Kubernetes 概念和知识

路径

不出意外,你现在对 Kubernetes 基本的资源已经很熟练了,对 Kubernetes 内部组件和它们的交互比较清晰,还对 Kubernetes 的 API 全貌和组织结构也有一定的了解。如果出了意外 🤔,请重新回顾你的学习过程。

本阶段,我们围绕几个关键方向来学习 Kubernetes,加深对其各个技术点的认识(这里只列出本阶段需要学习的核心能力,其他功能请量力而学):

总结一下,1)本阶段我们接触到更多的资源,包括:HPA、Job、CronJob、DaemonSet、StatefulSet、Ingress、Volume、PV/PVC、StorageClass、NetworkPolicy、PSP。2)更加深入了解已学资源的使用,例如 Init-Container、SecurityContext、Affinity 等。这些能力最终都会体现在各个资源的 API 上,例如 Affinity 是 Pod API 结构的一个字段,Scheduler 通过解析这个字段来进行合理的调度。未来如果有更多的能力,我们都可以通过解读不同资源的 API 字段来一探究竟。

本阶段相关学习可以参考文档 lab4

心法🧘‍♂️🧘‍♀️

  • 本阶段难度指数高,请合理调整你的心境。渡劫 🌋 成功后,你对 Kubernetes 的掌握将会进入一个新的台(tian)阶(keng)。
  • 学习相关功能时,可以回顾其所在 SIG,看看能不能发现有用的资源。

第五阶段 化神期(3-5 周,每周 6-8 小时)

目标

  • 学习更多 Kubernetes 集群层面的功能
  • 更加深入学习 Kubernetes 架构和组件能力

路径

当我们了解了 Kubernetes API 的设计理念,学习到了足够多的 API 资源及其使用方法之后,让我们再回顾一下 Kubernetes Master & Node 架构,以及它们运行的组件。事实上,Kubernetes 的每个组件都有很强的可配置性和能力,我们可以围绕 Kubernetes 的每个组件,来学习 Kubernetes 较为“隐晦”的功能。

推荐通过 Kubernetes Command Line Reference 来了解这些组件的配置:

同时,Kubernetes 提供了 FeatureGate 来控制不同的特性开关,我们可以通过 FeatureGate 来了解 Kubernetes 的新特性。此外,为了方便开发者和配置管理,Kubernetes 把所有配置都挪到了相对应的 GitHub 代码仓库中,即:

  • https://github.com/kubernetes/kube-scheduler
  • https://github.com/kubernetes/kube-controller-manager
  • https://github.com/kubernetes/kube-proxy
  • https://github.com/kubernetes/kubelet
  • https://github.com/kubernetes/kubectl

当然,直接裸看配置有点硬核。为方便入手,下面我们简单总结部分功能(笼统的分为 Master 和 Node):

Master

  • Dynamic Admission Control
    • 动态准入控制(在练虚期阶段需要更加深入的了解)
    • 对应 API Server --admission-control-config-file 参数
  • Advanced Auditing
    • 提供可动态配置的审计功能
    • 对应 API Server 带有 --audit- 前缀的参数
  • Etcd Configuration
    • 提供各种与 Etcd 相关的配置,例如 Kubernetes event TTL
    • 对应 API Server 带有 --etcd- 前缀的参数
  • All Admission Controllers
    • 列举所有 Kubernetes 所支持的 Admission Controllers,每个 Admission 都与 Kubernetes 特定的功能相关联
    • 对应 API Server --enable-admission-plugins 参数,该参数注释列举了所有的默认 Admission Controllers
  • Garbage Collection
    • 启用后,Kubernetes 会自动根据 OwnerReferences 来回收 API 资源
    • 对应 Controller-Manager --enable-garbage-collector 参数
  • Concurrent Sync Limiting
    • 避免过多的资源同步导致集群资源的消耗
    • 对应 Controller-Manager 带有 --concurrent 前缀的参数
  • All Controllers
    • 列举所有 Kubernetes 所支持的 Controllers,每个 Controller 都与 Kubernetes 特定的功能相关联
    • 对应 Controller-Manager --controllers,该参数注释列举了所有的默认 Controllers

其它值得注意的参数包括:

  • API-Server --max-requests-inflight, --min-request-timeout
  • API-Server --watch-cache, --watch-cache-sizes
  • Controller-Manager --node-eviction-rate
  • Controller-Manager --pod-eviction-timeout
  • Controller-Manager --terminated-pod-gc-threshold
  • Controller-Manager --pv-recycler-minimum-timeout-*

Node

  • Kubelet Eviction
    • 当节点资源不足时,Kubernetes 通过驱逐 Pods 的方式确保节点的稳定性
    • 对应 Kubelet 带有 --eviction- 前缀的参数,例如 --eviction-hard
  • Image GC
    • 清理容器镜像占用的磁盘空间
    • 对应 Kubelet 带有 --image-gc- 前缀的参数,以及 --minimum-image-ttl-duration 等参数
  • Resource Reserve
    • 为系统资源预留一定的资源,确保节点的稳定性
    • 对应 Kubelet --kube-reserved--kube-reserved-cgroup 等参数
  • CPU Manager
    • 提供更多的 CPU 管理能力,例如静态 CPU 亲和性
    • 对应 Kubelet --cpu-manager-* 前缀的参数
  • Storage Limit
    • 避免节点过度挂载数据卷
    • 对应 FeatureGate AttachVolumeLimit

其它值得注意的参数包括:

  • Kubelet & Kubeproxy --hostname-override
  • Kubelet --cgroups-per-qos
  • Kubelet --fail-swap-on
  • Kubelet --host-*
  • Kubelet --max-pods, --pods-per-core
  • Kubelet --resolv-conf
  • Kubeproxy --nodeport-addresses

心法😇

  • 通过组件配置学习 Kubernetes 功能是我们需要具备的一个常规能力,或许比较枯燥,但对我们的修炼大有裨益。
  • 如果你对 Kubernetes “无穷无尽”的功能感到有点迷茫,这是一个很正常的现象。除非是深度参与 Kubernetes 的开发,否则一定会有很多遗漏的地方。我们只要保持两个基本点不动摇:1. 懂 Kubernetes 架构和最核心的能力;2. 懂得怎么快速定位我们需要的能力。关于第二点,我们将在大乘期介绍,stay tuned!

第六阶段 练虚期(4-6 周,每周 8-10 小时)

目标

  • 对 Kubernetes 的扩展机制了如指掌
  • 可以编写 Kubernetes 控制器,能够基于扩展机制灵活地二次开发

路径

本阶段我们可以开始了解 Kubernetes 各种扩展机制。如果说 Kubernetes 的 API 和架构设计是其重要的基石,那么扩展机制使得 Kubernetes 在各个生态领域开花结果。下面我们尝试列举出所有的扩展方式,每一种扩展都有其优势和局限性,请自行思考。注意这里提到的扩展机制指的是架构上的扩展,而非功能层面的扩展,例如 Pod 支持各种 Probe 来进行健康检查,包括自定义,这里我们不归为扩展机制的能力。

API 资源扩展能力

学习 API 资源扩展的一个重要方式是创建一个扩展资源,或者编写一个自己的控制器。强烈推荐自行编写一个控制器,这里列出几个常见的工具:

API 访问扩展能力

Kubernetes API 访问扩展主要是通过 Webhook 来实现。注意只有访问控制支持动态增加外部服务,认证鉴权的外部服务在启动 API Server 的时候就注册完毕,无法在后续增加,主要原因是动态增加外部认证鉴权服务,带来的安全风险过大。

调度器扩展能力

针对简单场景,我们可以直接使用 Scheduler Extender 即可,例如按 GPU 型号调度。复杂调度场景可以使用多调度器或调度器框架,例如基于流图的调度器 poseidon,批处理调取器 kube-batch 等。一般而言,使用 Extender 即可满足大多数场景。

网络扩展能力

网络插件 CNI 是容器网络标准,Kubernetes 提供了良好的支持,常用插件包括 flannel、Calico 等等。对于 Ingress、NetworkPolicy、DNS,相信到目前为止大家应该可以理解,其本质上是 Kubernetes 定义的一套 API,底层实现可插拔,用户可以有自己的选择。

存储扩展能力

  • FlexVolume:Kubernetes 提供的一种动态对接存储方案,支持用户自定义存储后端
  • 存储插件 CSI:使用 CSI 插件,可以选择任何我们需要的存储方案

FlexVolume 是 Kubernetes 自带的对接外部存储的方案,用户编写少量的代码即可加入自定义存储后端,适用于简单场景。存储插件 CSI 是容器网络标准,Kubernetes 提供了良好的支持,同时为方便第三方实现,还提供了一整套 SDK 解决方案。所有底层存储相关的能力都与 CSI 密切相关。

运行时扩展能力

运行时接口 CRI 是 Kubernetes 提出,为解决支持多种运行时而提供的方案。任何运行时,只需实现 CRI 相关的接口,即可接入 Kubernetes 中,包括 Docker、Containerd、gVisor、Kata 等。

特殊硬件或资源扩展能力

对于简单场景,例如静态汇报资源数量,可以直接使用 Extended Resource 扩展 Kubernetes 所支持的硬件。Device Plugin 的核心是自动接入各种特殊硬件如 Nvidia、Infiniband、FPGA 等。在资源汇报层面 Device Plugin 目前也使用了 Extended Resource 的能力,但由于 Extended Resource 的局限性,Device Plugin 未来也可以与其他 API 对接。目前使用最多的 Device Plugin 主要是 Nvidia 的 GPU device plugin

监控扩展能力

  • 自定义监控:支持使用自定义监控组件如 Prometheus 提供监控指标

自定义监控包括 Custom Metrics 和 External Metrics,例如 Prometheus adaptor

云供应商扩展能力

云扩展能力的目标是使各个云供应商可以在不改变 Kubernetes 源码的情况下,接入其服务。每个云供应商都有独立的项目

命令行插件

  • Kubectl Plugin:kubectl plugin 支持扩展 kubectl 子命令,与 API 扩展能力结合可以提供近乎原生的使用方法。

心法

  • 推荐实现一个端到端的 Kubernetes 控制器,可以对整个 Kubernetes 的二次开发有更加深入的了解。此外,针对所有的扩展能力,建议先建立一个全面的认识,再根据需要深入某一项能力。
  • 我们除了通过用户手册来学习上面的技术,也可多参考 Kubernetes 的花式设计文档,主要是 Design ProposalsKEPs

第七阶段 大乘期(终身学习)

目标

  • 了解 Kubernetes 生态项目
  • 跟踪 Kubernetes 社区发展
  • 跟踪 CNCF 社区发展

路径

目前为止,我们学习了很多 Kubernetes 的概念,但也只是其最重要的部分。在本阶段,我们需要专注以下几个问题:

  • 如何跟进 Kubernetes 的新功能,以及现有功能的更多细节?
  • 如何了解 Kubernetes 整个生态环境的发展?

首先,让我们一起来学习几个重要的项目。围绕 Kubernetes 的生态环境建设是其成为容器标准的关键。

  • Helm:作为 Kubernetes 生态里的 brew、dnf、dpkg,Helm 为 Kubernetes 提供了包管理能力,方便用户快速部署安装各种服务。
  • Harbor:Harbor 与 Kubernetes 无直接关系,但作为云原生环境下最常用的镜像仓库解决方案,了解 Harbor 十分重要。
  • Prometheus:Prometheus 是云原生环境下最重要的监控组件。
  • Istio:Istio 是服务网格的关键项目,但较为复杂,可以尝试简单了解。

以上,我们仅列出了极少量的重要项目,Kubernetes 周边的项目十分之多,令人咂舌 😱。因此大乘期的你,需要开始持续跟踪 Kubernetes 及其生态的发展,甚至可以推动其发展,接下来我们列举一些靠谱资源:

GitHub 仓库

关注 GitHub 仓库可以让你了解最一手的进展,但是信息量一般较大,讨论很多难度也比较大。不过对于大乘期的你来讲,应该不是问题 😉。另外,这里还包含很多 Kubernetes 系统内部的设计,例如调度器的优化方案、资源垃圾回收方案等,值得了解和学习。

Twitter 账号

下面推荐几个 Kubernetes 项目的核心人员。大牛都喜欢用 Twitter 交(si)流(bi),可以关注一波。感兴趣的话题可以去交流,大牛都十分耐撕(nice。

除此之外,Twitter 上还有不少项目和其他 Weekly 性质的 Twitter,推荐几个账号关注:

Twitter 会根据你的喜好推荐其他相关内容,接下来就自由发挥。

Blog 账号

可以关注的优秀 Blog 很多,这里就不一一列举。

心法🐲

请坚持学习!送上一句黑鸡汤:

“The last thing you want is to look back on your life and wonder… if only.”

参考资料


传统软件工程师的 Machine Learning 学习路径 - caicloud

原文链接:https://github.com/caicloud/mlsys-ladder

从造丹炉到学炼丹的修真之路

目录

Created by gh-md-toc

背景

才云科技是一家基于容器技术和人工智能,打造新一代智能云计算平台和 AI 服务的公司。而随着超参数搜索,模型结构搜索,模型量化与压缩等功能与概念在业界的逐渐落地,机器学习平台的开发工作对机器学习本身的要求越来越高。这要求传统的软件开发工程师不仅需要了解分布式系统等与云计算相关的知识,也需要了解基础的机器学习原理与概念。因此,出于帮助才云内部的机器学习平台开发工程师们更加好地了解机器学习的目的,我们于 2019 年内部推出了这一文档,现以开源的方式进行维护。

文档主要为传统的软件工程师提供一个循序渐进,实践性强的路径,来了解深度学习的基本原理,以及深度学习在计算机视觉和其他领域的应用。由于我们的目标不是让每一位软件工程师转型为算法工程师,而是学习深度学习的知识来指导我们的工作。因此内容更偏向工程化,而非深度学习的数学知识与理论证明

这一文档以计算机视觉领域中的图像识别问题作为切入口,聚焦于一个具体的问题,深入浅出地了解经典的深度网络模型,而不会对各个领域浅尝则止。

深度学习在计算机视觉领域的应用

深度学习在计算机视觉领域有许多应用场景。

Fig. 1 图像识别与对象识别

首先最简单的是图像识别,也就是 Fig. 1 中的上图。图片中只有一个物体,而图像识别算法会识别出图像中唯一的物体是什么物体。这一例子中是狗。图像识别也是我们这一课程面向的应用场景。其代表模型有 MNIST(数字图像识别),ResNet, MobileNet, DenseNet, VGG 等。

接下来,是对象检测,或者说目标检测,也就是 Fig. 1 中的下图。在一张图中,检测出图中所有的对象以及类别(两条狗,一只猫),以及它们的位置(蓝色框和红色框)。这一应用场景下的经典模型有Faster RCNN, SSD, Yolo-v3 等。

Fig. 2 语义分割与实例分割

再接下来,有图像语义分割,也就是 Fig. 2 中的上图。图像语义分割就是机器自动从图像中分割出对象区域,并识别其中的内容。图中例子为识别了狗和猫,并且用不同的颜色区分区域。这一应用场景的经典模型有 FCN, PSP, DeepLab v3 等。

图像实例分割如 Fig. 2 下图所示,是在语义分割的基础上,划分不同实例。狗作为一个对象(可以理解为面向对象中的类),有不同的实例。实例分割不仅需要区分不同对象,还需要区分不同实例。这一场景的经典模型有 Mask RCNN 等。

Fig. 3 姿态估计(credit:知乎李沐)

姿态估计,如图 Fig. 3 所示,就是根据图像确定人体骨架,以及人体姿态动作。这一领域的经典模型有 Simple Pose 等。

Fig. 4 GAN

除了上述应用,还有一类特殊的模型应用,即生成式对抗网络。它可以被用来做风格转移(照片转水墨画风格等),超分辨率(分辨率低的图片生成高分辨率的图片,或者根据低分辨率的图片复原高分辨率的图片等)等不同的生成图片任务上。Fig. 4 中所展示的就是一个 GAN 模型利用人脸图片生成对应 emoji 下的图片的过程。这一模型由于应用很广而且过于灵活,因此有很多不同的实现,比较经典的有 WGAN, CycleGAN,SRGAN 等。

Fig. 5 行人重识别

除此之外,如 Fig. 5 所示,还有一类应用就是行人重识别。这是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术。广泛被认为是一个图像检索的子问题。给定一个监控行人图像,检索跨设备下的该行人图像。旨在弥补目前固定的摄像头的视觉局限,并可与行人检测/行人跟踪技术相结合,可广泛应用于智能视频监控、智能安保等领域。

深度学习在计算机视觉领域的应用形形色色,我们只针对其中最简单的应用,也就是图像识别问题展开学习。

学习路径

学习路径一共分为六个阶段,其中第一个阶段主要会了解 DL 的基本概念;第二个阶段会以 kNN(k 近邻算法)为例,了解传统机器学习在图像分类问题的解法。第三个阶段会了解梯度下降,反向传播等神经网络的基础知识。第四个阶段会了解卷积神经网络的卷积层,池化层等概念。第五个阶段将会更加深入地了解模型训练的过程。第六个阶段会以 TensorFlow 为例,了解模型部署和可视化过程,最后一个阶段则是自由的探索与学习。

其中会首先介绍每一阶段的目标,随后是推荐的学习资料,最后是 Checklist。

第一阶段 炼气期(3-5 周,每周 2-4 小时)

目标

这一阶段的主要目标是,熟悉 AI,尤其是 DL 的基本概念。在这一阶段中,以下知识会需要了解:

  • 什么是数据
  • 神经网络是什么,以及它在最近兴起的原因
  • 机器学习的基本概念,监督学习与非监督学习的关系
  • 神经网络与机器学习的关系
  • 深度网络是什么,它与神经网络又是什么关系

通过这一阶段的了解,我们会清楚,机器学习是一门怎样的学科,神经网络在其中又扮演着怎样的角色。

推荐资料

首先,对于英语水平不错的同学,推荐先上完 AI For Everyone。这一课程是由 Andrew Ng 推出的面向 CEO、CTO、产品经理、工程师等不同角色的科普性课程。目前这一课程暂无中文翻译,但有英文字幕。课程分为四周,每周大约需要 2-3 个小时即可。因此总共只需要 8-12 小时即可看完。这门课程可以帮助塑造对 AI 的感性认识。

如果英语确实是障碍,可以跳过这一课程的学习。

接下来,可以进行下一步的学习。网易深度学习工程师微专业中的第一课-神经网络和深度学习中的第一周的所有课程是下一步学习的目标。这一微专业同样是 Andrew Ng 推出的课程系列。在第一门课程的第一周中,主要介绍了神经网络是什么,和深度网络的关系等。

Checklist

  • (可选) AI For Everyone 所有课程
  • 网易深度学习工程师微专业中的第一课-神经网络和深度学习中的第一周的所有课程

第二阶段 筑基期(2 周,每周 3-5 小时)

目标

在上一阶段,我们已经了解了 DL 是什么,可以用来做什么。第二阶段中,我们将面向图像识别这一特定的场景,了解一些机器学习传统的算法和一些基础的数学概念。

图像识别场景是深度学习领域应用最广泛,也是最经典的应用场景。从这一场景入手有助于简化问题。图像识别,顾名思义,就是给定一个图片,预测这一图片上的内容是什么(如,猫,狗,人,树木等)。

在这一阶段中,我们需要了解:

  • 图像识别是一个什么问题
  • 传统统计学,和传统机器学习的方法是如何解决这一问题的(主要关注 kNN 算法即可)

推荐资料

推荐 2017 斯坦福李飞飞视觉识别课程,这一课程具有良好的中文翻译。在第二阶段,我们只需要上完第一讲和第二讲,也就是课时 1 到课时 6 即可。总计大约 2 小时。其中第二讲,可以只关注 kNN 这一最简单的算法。

除了视频以外,斯坦福这一课程的主页也有一些资源,这些都是非常有帮助的:

这一阶段有一个渡劫任务:CS231n-Assignment-1 的 Q1: k-Nearest Neighbor classifier (20 points)。这一问题是利用 KNN 这一简单的算法,来进行图像识别任务。如果有问题,可以参考网友的开源解答

如果对 kNN 算法仍有疑问,可以参考文章:

这一算法能够在图像分类(CIFAR-10 数据集)问题上取得约 28% 的准确率。CIFAR-10 数据集一共包含 60000 张图片,一共有十类物体(飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck ))。28% 的准确率意味着 kNN 算法在给定 100 张图片的情况下,可以识别大约 28 张图片为正确的分类。而随机算法的准确率为 10% 左右。

如果学完后仍不满足,可以继续网易深度学习工程师微专业中的第一课-神经网络和深度学习中的第二周所有课程。这一周的课程会介绍与上面提到的李飞飞课程相似的内容,以及一些额外的数学工具,但是不特别针对视觉识别场景。如果觉得其中的数学要求过多,可以跳过不看。

Checklist

  • 2017 斯坦福李飞飞视觉识别课程 第一讲,第二讲
  • CS231n-Assignment-1 的 Q1
  • (可选) 网易深度学习工程师微专业中的第一课-神经网络和深度学习中的第二周所有课程

第三阶段 金丹期(2 周,每周 3-5 小时)

目标

在上一个阶段,我们大致了解了传统机器学习算法(KNN)是如何解决图像识别问题的。接下来我们需要了解:

  • 损失函数是什么,它的作用是什么
  • 梯度下降等优化方法是什么,它们想解决什么问题
  • 神经网络的反向传播是在做什么

正所谓结为金丹客,方是我辈人。通过这一阶段的学习,我们会掌握神经网络中的基本概念,真正走入深度学习的殿堂。

推荐资料

仍然推荐 2017 斯坦福李飞飞视觉识别课程,这里需要上完第三讲和第四讲。这里的内容可能有一些数学知识。损失函数涉及初等数学,梯度下降涉及偏导数,反向传播涉及求导的链式法则。如果能多了解一些数学知识最好,如果不了解可以先知道下这些数学知识都是为了做什么而存在的。

这里还有一些参考资料:

梯度下降其实是一个非常直观的算法,所有的机器学习算法,都可以理解为运用某种算法来最小化损失函数的一个过程,而梯度下降则是“某种算法”中比较常用的一种。如果视频课程中介绍的仍然有些晦涩,可以参考:

如果还是有些困难,不妨先把它当做一个黑盒,继续往下去看。这一黑盒过程的输入是模型的参数,和模型对应的损失函数。黑盒的过程是寻找合适的模型参数,使得模型对应的损失最小的过程。

这一阶段也有两个渡劫任务:CS231n-Assignment-1 的 Q2 和 Q3。这两个问题是利用传统的机器学习方法解决视觉识别任务。如果有问题,可以参考网友的开源解答。如果觉得数学知识太多,可跳过。

如果学完后仍不满足,可以继续网易深度学习工程师微专业中的第一课-神经网络和深度学习中的第三周和第四周所有课程。在这一课程中,会介绍激活函数、梯度下降、反向传播等概念。如果觉得其中的数学要求过多,可以跳过不看。

Checklist

  • 2017 斯坦福李飞飞视觉识别课程 第三讲,第四讲
  • CS231n-Assignment-1 的 Q2 Q3
  • (可选) 网易深度学习工程师微专业中的第一课-神经网络和深度学习中的第三周和第四周所有课程

第四阶段 元婴期(2 周,每周 3-5 小时)

目标

这一阶段的目标,是在上周对神经网络的基础上,了解卷积神经网络。

卷积神经网络是一种由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。

本阶段需要了解如下概念:

  • 卷积是什么,卷积的步长是什么,卷积为什么有效,为什么要在视觉识别场景下使用卷积操作
  • 池化操作是什么,它的作用是什么

经过这一阶段的学习,我们就已经掌握了视觉识别场景下最常用的神经网络结构:卷积神经网络。

推荐资料

仍然推荐 2017 斯坦福李飞飞视觉识别课程,这里需要上完第五讲。这里涉及的数学知识非常少,只有矩阵运算和部分高等数学的知识。

这里有一个参考笔记:

这一阶段的渡劫任务为 CS231n-Assignment-1 的 Q5。如果有问题,可以参考网友的开源解答。如果觉得数学知识太多,可跳过。

如果学完后仍不满足,可以继续网易深度学习工程师微专业中的第四课-卷积神经网络的第一周内容。这一课程与上面的李飞飞课程第五讲内容相似,可以帮助理解。如果觉得其中的数学要求过多,可以跳过不看。

Checklist

  • 2017 斯坦福李飞飞视觉识别课程 第五讲
  • CS231n-Assignment-1 的 Q5
  • [ ](可选) 网易深度学习工程师微专业中的第四课卷积神经网络的第一周内容

第五阶段 化神期(3-5 周,每周 3-5 小时)

目标

在上一阶段的学习中,我们已经了解了卷积神经网络,这一阶段主要学习如何训练卷积神经网络。

这一阶段主要需要了解:

  • 激活函数的选择
  • 模型训练的本质是什么(前向与后向传播)
  • 如何利用 PyTorch,TensorFlow 等框架进行模型的训练

通过这一阶段的学习,我们可以自豪地说,我们成为了一个合格的炼丹师,懂得丹药之理(模型训练的本质),也懂得如何利用炼丹炉(TensorFlow)炼制丹药(训练模型)。

推荐资料

这一阶段,仍然推荐 2017 斯坦福李飞飞视觉识别课程,这里需要上完第六讲和第七讲。在这两个讲座中,我们将学习正则化、激活函数等内容。

这里有一些推荐的笔记:

如果学完后仍不满足,可以继续网易深度学习工程师微专业中的第二课-改善深层神经网络的全部三周课程,与李飞飞课程类似但编排不同,一起学习可相互促进。

这一阶段有一个渡劫任务:CS231n-Assignment-2 的 Q1 Q4 Q5,如果自觉了解非常透彻,可继续完成 Q2 Q3。如果有问题,可以参考网友的开源解答。如果觉得数学知识太多,可跳过。但建议起码完成 Q5,或阅读网友的开源解答

Checklist

  • 2017 斯坦福李飞飞视觉识别课程 第六讲,第七讲
  • CS231n-Assignment-2 的 Q1 Q4 Q5
  • (可选) 网易深度学习工程师微专业中的第二课改善深层神经网络的全部三周课程

第六阶段 练虚期 (1 周,3-5 小时)

目标

在之前的阶段中,我们已经学习了如何训练一个模型,接下来我们需要了解:

  • 模型可视化的工具与作用
  • 如何进行模型部署

对于有计算机系统背景的炼丹师来说,这反而是返璞归真,最简单的阶段。这两个需求在 TensorFlow 框架上对应两个工具 TensorBoard 和 TFServing。这也是 TensorFlow 之所以比 PyTorch 更受工业界欢迎的重要原因。

推荐资料

对于模型可视化,建议阅读 TensorBoard 文档,以及观看视频(有中文字幕)。建议以 TF MNIST 为示例,自己进行一次可视化训练。

对于模型部署,建议阅读 TensorFlow 学习笔记-模型部署章节(为第三方文档,不是 TensorFlow 官方文档)。建议以 MNIST 或者 ResNet 为例,在 Clever 平台上利用模型推理服务部署一个模型或者在自己本地利用 TFServing 部署一个模型,并且尝试利用 HTTP 请求进行访问。

Checklist

  • TensorBoard 文档,以及观看视频
  • 阅读 TensorFlow 学习笔记-模型部署章节

第七阶段 大乘期(终身学习)

目标

完成了上述阶段的学习后,我们已经了解了卷积神经网络从原理,到训练,再到部署的知识。接下来可以:

  • 继续学习卷积神经网络,了解各种经典的模型(AlexNet,ResNet 等)
  • 学习循环神经网络(RNN),一种不同于卷积神经网络(CNN)的全新网络。可以用来做时序预测等不同于图像是别的任务
  • 学习生成网络(GAN)
  • 其他一切你想做的

推荐资料

推荐继续完成 2017 斯坦福李飞飞视觉识别课程的所有讲座。其中会介绍 RNN,GAN,强化学习等不同的神经网络,也会介绍经典的 CNN 模型。之后可以考虑在 Kaggle 上寻找自己感兴趣的算法比赛,在真实的比赛中感受神经网络的能力。Kaggle 是一个算法爱好者们利用数据组织机器学习算法比赛的平台,上面有不同难度的问题。

参考文献与资料

  1. GluonCV: a Deep Learning Toolkit for Computer Vision
  2. TensorFlow 学习笔记
  3. 知乎问答:普通程序员如何正确学习人工智能方向的知识?

许可协议


Google B4 广域网SDN 的前世今生 - sdnlab

这篇的原文链接:https://www.sdnlab.com/22346.html

1 Google 网络架构

随着云计算的发展,Internet 从最早承载海量文本/图片/视频,演变到高清直播占据Internet 主要流量(Netfliex/AWS, Youtube/Google, Facebook Live/Facebook)。随着AR 相机 和社交VR(SocialVR)的等新应用的到来,互联网的流量还会持续高速增长。大部分的流量增长没有体现在运营商SP 的网络中,而是主要集中在OTT 网络中。 Google/Facebook/AWS/Microsoft/Apple 为代表五大 OTT 都构建了全球规模的骨干网,很多人也称之为『Private Internet』。OTT 的数据中心/WAN/PoP流量快速增长,带来OTT 网络架构的快速迭代和升级。传统的设备形态和网管工具无法适应流量和业务的快速发展。OTT 纷纷采用自研设备,引入SDN 来管理全球骨干网。

img

Google 的SDN 网络大概可以分为四个主要部分:

云平台Andromeda(仙女座)/数据中心 Jupiter(木星)/Peering Espresso SDN(意式咖啡)/DCI 互联WAN SDN(B4)

Google 的广域网实际上分为B4(DCI)数据中心互联和B2 骨干网。如下图所示。B4 作为Google全球数据中心互联采用自研交换机设备,运行纯IP 网络。B2 连接数据中心和POP 点,采用厂家路由器设备,并且运行MPLS RSVP-TE 进行流量工程调节,还没有进行SDN 改造。简单的说B2负责数据中心到用户的流量转发(Machine to User),B4 负责数据中心到数据中心的流量转发(Machine to Machine)。

B4 的流量增长率远远高于B2,容量每9 个月就要翻倍(Double),5 年时间,流量增长了100倍。没有商用单机路由器可以支持这么大容量的业务增长。所以Google 决定利用交换机芯片来自定义自己的『超级核心路由器』

img

Google 在2012 年部署全球SDN 广域网络B4,基于自研设备 Saturn(土星),2013 年8 月在香港 SIGCOMM 发表B4 SDN 控制器白皮书。《B4: Experience with a Globally-Deployed Software Defined WAN》 ,2018 年发表《B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google Software-Defined WAN》。描述B4 的演进,更新了自研设备Stargate(星关)和层次化的TE 控制器。2012 年B4 部署在全球12 个站点,到2018 年1 月B4 站点增加到33 个。 如下图所示,红色图标中的数字,说明在位置附近有多少个站点(sites)

img

业界对于B4 的理解仅仅停留在两篇晦涩的白皮书上。本文从一个架构师的视角试图解析B4 的自研设备,网络架构,SDN 控制和部署中碰到的难题。对于Google 如何构建云计算平台GCP 请参考作者的另一篇关于混合云/多云网络的文章 云网融合的多云网络。对于 OTT 网络架构的深入理解,基本上来源于 SIGCOM 的白皮书和一些公开视频和讨论。

2 B4 详解

2.1 B4 硬件发展

第一代 B4 Saturn(土星)交换机: 为了应对数据中心流量的快速增长,Google 2009 年在数据中心部署了第四代机框式 Saturn(土 星)交换机,可以在半高机箱中支持 288x10GE 接口,单槽 240Gbps, 一个机架支持 5.76T。相比 同期厂商路由器设备,大部分仅仅支持单槽 40G。(CRS-3 2010/2011 年全高机箱支持 140G/Slot x 16 = 2.24T)。Saturn 图片上面的 Pizzabox 是同样 24x10GE 的 TOR 交换机,接 10GE 的服务器。

img

多机互联 vs CLOS 运营商网络一般采用多机框的方式来 Scale out. 但是多机框需要设计专门的 Fabric 机框。最早的多 机系统通过非常复杂的交换矩阵互联把多台 LCC(line card chassis)连接起来。比如 4+2 系统需要 960 根 VCSEL(Vertical Cavity Surface-Emitting Lasers, 一个 3x12 bundle 里面有 36 根 fiber )线缆互 联。连接效率非常低,同时非常容易出现光纤故障难于 debug。在 2014 年推出的 200G/400G 每槽 的单机之后,连接的光纤采用 CXP 100GE 标准光纤带(每条 12 根光纤),也是个庞大的复杂系统。 而且非常难于升级,多机互联采用的芯片基本上比单机系统晚一代(2-3 年)。

全球 SP 客户基本上都摒弃了 Multi-Chassis 的设计,OTT 网络从设计之初就抛弃了多机互联。很 多 OTT 客户采用 CLOS Fabric 来构建大型路由器系统。

2010 年在设计 B4 之初, Google 采用的是 CLOS 架构,用 6-8 台 Saturn 来构造一个 CLOS Fabric,并大规模部署在全球 12 个 DC site。

根据不同 site 流量要求,每个 Saturn Fabric 可以提供,5.12Tbps 连接数据中心,5.12/6.4T 到广域网连接。

img img

CLOS Fabric as a Router 随着业务流量的增长,Saturn 大机箱 CLOS 设计也无法满足业务发展。2013 年,Google 重新设计了 B4 site,取消了原来的大盒子设计,采用小盒子 Pizzabox 来构建新型的 CLOS Fabric,两种设计 JPOP 和 Stargate(星际之门),JPOP 主要部署在 POP 点,Stargate 用来升级传统的 Saturn(土 星)站点。

Stargate 利用 1.28T 的 Trident2 芯片,采用盒式交换机(见上图右上角)。利用 16 Spine + 32 leaf, 总计 48 个盒式交换机构建了一个 Stargate(星际之门)Super Node 路由器。在一个 Stargate 站点内,一般有四个 Fabric,提供 81.2Tbps 的容量来连接 Cluster/Sidelinks 和 WAN。

从 Google B4 路由器硬件的演进可以看出,最早采用大机箱 Fabric,后来把大机箱拆开分为 Spine(Fabric Card)/Leaf(Line Card) IP CLOS 系统,多个系统组成一个站点。最近由小盒子组成的 IP Fabric Core 路由器在很多 OTT 网络中出现,比如 AWS 的 Brick 设计就是类似架构,采用不同芯片架构和 BGP 设计,更兼顾长距传输的 QOS 要求和低成本要求。

国内 OTT 纷纷参考 OCP,Sonic/Stratum 架构,开始自研数据中心交换机。但是国内 OTT 广域网(WAN)设计还没有采用专用的自研设备,也基本上没有区分 B2(DC-POP/Peering)和 B4 (DCI 互联)不同的网络设计目标,并引入广域网 SDN 控制器。Google/AWS/Facebook 的 WAN 设计值得国内 OTT 学习。限于篇幅本文仅介绍 Google 的 WAN network,后续会介绍 Facebook 和 AWS 的网络架构。

2.2 B4 网络架构

img

Google B4 SDN Picture from netmanis.com

B4 的流量调度,首先通过 Center TE server 搜集全球 DC Cluster 的流量发送请求。通过 SDN Gateway 调节全球 12+ DC site 之间的流量。Google 是第一家公司采用 SDN 技术,在跨洲光缆链 路做到链路利用率 98%以上。


对计算机体系结构研究的一点认识 - 钱学海

本文是计算机学会通讯专栏的一篇文章,第 10 卷  第 6 期  2014 年 6 月。只做片段摘抄。

编者按:美国斯坦福大学最近在一份报告中分析了过去20年间出现的几乎所有的处理器,发现处理器性能提高了约1万倍。这使得像深度学习等20多年前还是遥不可及的技术,在今天强大的计算能力的支持下,释放出巨大的潜力。该报告进一步指出,在1万倍的性能提升中,半导体工艺贡献了100多倍,计算机体系结构贡献了80多倍。由于处理器在信息领域的基础性与普适性,计算机体系结构技术的进步对整个信息领域的快速发展起到了重要的推动作用。而该领域的四大国际顶级会议(ISCA,HPCA,MICRO,ASPLOS)1则是技术进步的思想源泉,几乎所有计算机体系结构领域的重大技术突破都是最早发表在这四大会议上。加州大学伯克利分校的钱学海博士是体系结构领域的新星,过去5年在四大会议上发表了7篇论文,对计算机体系结构研究有相当的理解和造诣。为此,本期专栏特邀钱学海与读者分享他对计算机体系结构研究的认识。

… …

研究心得

什么是好的研究?这可以从两个方面衡量,首先看研究的问题是否重要,其次看是否提出了有挑战性或者新颖的解决方案,若具备两者之一就是好的研究。对于什么是“重要”的问题,不同学者有不同的看法,但我们可以用一个通俗的标准来概括,即解决方案能否提高“效益”(提高性能或降低能耗)。这个标准相对简单,也得到大家认可。在第二个标准中,同行对于有挑战性的问题通常都有统一的认识,解决方案的新颖性也不难被专家发现。

谈到研究方法,最重要的是对研究问题有深刻的认识。这不仅意味着对现有工作了如指掌,知道它们的不同和不足,还需要思考它们为何会有这些差异和不足?做研究和心理分析有相似之处,一篇论文读的次数多了,往往可以从字里行间发现作者的思维方式,如果能做到这一步,就离自己做出成果不远了。

相信读者有类似的体会,在开始读论文时常常觉得复杂或者难以分辨差别,但如果有了更深层次认识,即了解了作者为什么这样想,就可以相对轻松地提出更好的方案。这里不妨做一个类比,我们可以把对一个问题的解决空间看成是一个从根节点开始的有很多分支的程序,而发表的论文看成是叶节点的集合。如果只关注表象,就只能看到不同叶节点集合之间的重叠和差异。但是如果关注本质,回溯到离根节点较近的分支,就会发现虽然同一个人写了不同的论文,但其思路大都是从一个分支出发的。而不同的人写论文往往从最初就选择不同的分支。

在理解现有工作的过程中,我们要尽量离根节点更近些,即看到论文的本质,然后从这个节点寻找不同的分支(解法)。这样做出的研究就不会过于增量(incremental)。类似的原则也应用于软件测试中,好的测试需要尽量保证覆盖靠近根节点的分支,以免造成许多测试都集中于一个子分支的叶节点(或底层节点)的情况。

读论文要涉猎广泛,不要局限于本领域,这样才能对一些问题有更深刻的认识,或发现一些其他领域的解决方法并应用在自己的研究问题上。计算机科学有很多领域,每个领域的研究方法有各自的特点。也许有些问题是类似的甚至是等价的,如果能够广泛的阅读,就可以让自己站得更高、看得更远。此外,衡量一个领域的好坏,往往可以根据有多少重要原创方法出自该领域来判断。读者可以在广泛的阅读后给出自己心中认为重要的领域。

最后,做研究一定要选择自己感兴趣的课题,这样工作才能持久并容易做出成果。

附文

HPCA

HPCA全称高性能计算架构国际研讨会(International Symposium on High-Performance Computer Architecture),是计算机体系结构的顶会之一。

ISCA

ISCA全称计算机体系结构国际研讨会(The International Symposium on Computer Architecture)是计算机体系结构新思想和新研究成果发现的重要会议。

MICRO

MICRO全称微架构国际研讨会(International Symposium on Microarchitecture),是计算机体系结构的著名会议,关注高级计算和通信系统创新微架构思想和技术,与 ISCA、HPCA 并列体系结构三大顶会。

ASPLOS

ASPLOS全称ACM International Conference on Architectural Support for Programming Languages and Operating Systems,也是体系结构的顶会之一。ASPLOS涉及的领域包括计算机体系结构和硬件、编程语言和编译器、操作系统和网络。


1 2 3 4 5 6 7 101 102