0%

流量控制是指对系统流量的管控,包括了对网格入口的流量、网格出口的流量以及在网格内部微服务间相互调用流量的控制。在 Istio 入门 中我们知道,Istio 架构在逻辑上分为 Control plane 和 Data plane,Control plane 负责整体管理和配置代理, Data plane 负责网格内所有微服务间的网络通信,同时还收集报告网络请求的遥测数据等。流量控制是在 Data plane 层实现。

阅读全文 »

Istio 是一个完全开源的服务网格,以透明的方式构建在现有的分布式应用中。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特性使你能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。

阅读全文 »

Service Mesh 是一个基础设施层,用于处理服务到服务间的网络通信。云原生应用有着复杂的服务拓扑,Service Mesh负责在这些网络拓扑中实现请求的可靠传递。在实践中,Service Mesh通常实现为一组轻量级的网络代理,它们与应用程序部署在一起,但是对应用保持透明

本文作为 「Service Mesh」系列开篇,将理清 Service Mesh 的前世今生,通过对其概念与原理的理解,开始上手 Service Mesh的工作。与此同时,我们也会讨论 Service Mesh 在业界当前的应用现状,探讨其落地的难点与痛点。

阅读全文 »

经过立冬后的一夜冬雨,北京城满地黄叶堆积,下班路上被冻进口袋的双手真真切地告诉我:冬天真的来了。经过一周的工作,今年冬天的初雪如约而至,这里是2020年「朝花夕拾」第二十五期 めぐる季节,在季节转换间我们继续。

阅读全文 »

A survey of GPU sharing for DL

当前机器学习训练中,使用GPU提供算力已经非常普遍,对于GPU-based AI system的研究也如火如荼。在这些研究中,以提高资源利用率为主要目标的GPU共享(GPU sharing)是当下研究的热点之一。GPU共享涉及到的技术面较广,包括GPU架构(计算,存储等),Cuda,IO(内存,显存),机器学习框架(Tf,Pytorch),集群&调度,ML/DL算法特性,通信(单机内和多机间),逆向工程等等,是一个自上而下的工作。本篇文章希望能提供一个对GPU共享工作的分享,希望能和相关领域的研究者们共同讨论。限于笔者能力有限,可能会出现一些错漏,希望能多多指正,感谢。

GPU共享,是指在同一张GPU卡上同时运行多个任务。优势在于:(1)集群中可以运行更多任务,减少抢占。(2)资源利用率(GPU/显存/e.t.c.)提高;GPU共享后,总利用率接近运行任务利用率之和,减少了资源浪费。(3)可以增强公平性,因为多个任务可以同时开始享受资源;也可以单独保证某一个任务的QoS。(4)减少任务排队时间。(5)总任务结束时间下降;假设两个任务结束时间分别是x,y,通过GPU共享,两个任务全部结束的时间小于x+y。

想要实现GPU共享,需要完成的主要工作有:(1)资源隔离,是指共享组件有能力限制任务占据算力(线程/SM)及显存的比例,更进一步地,可以限制总线带宽。(2)并行模式,主要指时间片模式和MPS模式。

阅读全文 »

MIG,也就是 Multi-Instance GPU 是 NVIDIA 在 NVIDIA GTC 2020 发布的最新 Ampere 架构的 NVIDIA A100 GPU 推出的新特性。当配置为 MIG 运行状态时,A100 可以通过分出最多 7 个核心来帮助供应商提高 GPU 服务器的利用率,无需额外投入。MIG 提供了一种多用户使用隔离的GPU资源、提高GPU资源使用率的新的方式,特别适合于云服务提供商的多租户场景,保证一个租户的运行不干扰另一个租户。本文将介绍 MIG 的新特性和使用方法,以及在容器和 k8s 中使用 MIG 的方案。

阅读全文 »

原生的 k8s 基于 Device PluginExtended Resource 机制实现了在容器中使用GPU,但是只支持GPU的独占使用,不允许在Pod间共享GPU,这大大降低了对集群中GPU的利用率。为了在集群层面共享GPU,我们需要实现GPU资源的隔离与调度,本文将依次介绍阿里的 GPUShare 与腾讯的 GPUManager,分析其实现机制。

阅读全文 »

我们在 GPU 与 CUDA 编程入门 这篇博客中初步介绍了如何Linux上使用GPU的方法,随着容器和k8s的迅猛发展,人们对于在容器中使用GPU的需求越发强烈。本文将基于前文,继续介绍如何在容器中使用GPU,进一步地,介绍在Kubernetes中如何调度GPU,并以Tensorflow为例,介绍如何基于Docker搭建部署了GPU的深度学习开发环境。

阅读全文 »

Kubernetes 原生支持对于CPU和内存资源的发现,但是有很多其他的设备 kubelet不能原生处理,比如GPU、FPGA、RDMA、存储设备和其他类似的异构计算资源设备。为了能够使用这些设备资源,我们需要进行各个设备的初始化和设置。按照 Kubernetes 的 OutOfTree 的哲学理念,我们不应该把各个厂商的设备初始化设置相关代码与 Kubernetes 核心代码放在一起。与之相反,我们需要一种机制能够让各个设备厂商向 Kubelet 上报设备资源,而不需要修改 Kubernetes 核心代码。这即是 Device Plugin 这一机制的来源,本文将介绍 Device Plugin 的实现原理,并介绍其使用。

阅读全文 »

随着近年来深度学习的爆发,原来被用于图形渲染的GPU被大量用于并行加速深度学习的模型训练中,在这个过程中 CUDA 作为 NVIDIA 推出的基于GPU的一个通用并行计算平台和编程模型也得到了广泛的使用。或许你已经十分了解 现代CPU的体系架构,但是对于GPU还不甚清晰,GPU的体系架构到底和CPU有何区别,CUDA模型是什么,我们该如何使用 CUDA实现并行计算,本文将为你扫盲祛魅,本文中使用到的所有代码可以在我的 Github 中找到。

阅读全文 »