王希刚 发布于 02月17, 2019

适合AI场景的调度器 - gang-schedule

使用kubeflow结合kubernetes进行大规模分布式训练时,由于AI场景下对任务的调度需要: all or nothing, multi-tenant task queue, task priority, preemption,gpu affinity等条件,但是kubernetes默认的调度器对这些条件还没有完全的支持,幸运的是kubernetes社区孵化了一个适合训练的调度器kube-batch

阅读全文 »

王希刚 发布于 12月08, 2018

Kubeflow使用Kubernetes进行机器学习

Kubeflow是Google推出的基于kubernetes环境下的机器学习组件,通过Kubeflow可以实现对TFJob等资源类型定义,可以像部署应用一样完成在TFJob分布式训练模型的过程。最初的设计是将Kubernetes和Tensorflow结合实现对Tensorflow分布式训练的支持。但是仅仅实现对Tensorflow的支持还是远远不够的,Kubeflow社区又陆续对各种深度学习框架进行支持,例如:MXNet, Caffee, PyTorch等。使得机器学习算法同学只需关心算法实现,而后续的模型训练和服务上线都交给平台来做,解放算法同学使其专做自己擅长的事儿。

阅读全文 »

王希刚 发布于 11月08, 2018

深入理解 nvidia-docker2.0

NVIDIA于2016年开始设计NVIDIA-Docker已便于容器使用NVIDIA GPUs。 第一代nvidia-docker1.0实现了对docker client的封装,并在容器启动时,将必要的GPU devicelibraries挂载到容器中。但是这种设计的方式高度的与docker运行时耦合,缺乏灵活性。存在的缺陷具体如下:

阅读全文 »

王希刚 发布于 11月06, 2018

nvidia-docker2在kubernetes上实践

现在公司线上所有的k8s集群对GPU资源的使用都是nvidia-docker 1.0(历史遗留问题)。但是现在的kubernetes1.9推荐使用device plugin的方式来对接外部厂商的资源。这样所有的厂商资源就不要kubernetes去特定的支持,而是各服务厂商只要按照kubernetes提供的device plugin实现自己的一套就可以了。今天就针对nvidia-docker2.0 进行了下测试。在此做下记录。

阅读全文 »

王希刚 发布于 07月09, 2018

浅谈Cgroups

说起容器监控,首先会想到通过Cadvisor, Docker stats等多种方式获取容器的监控数据,并同时会想到容器通过Cgroups实现对容器中的资源进行限制。但是这些数据来自哪里,并且如何计算的?答案是Cgroups。最近在写docker容器监控组件,在深入Cadvisor和Docker stats源码发现数据都来源于Cgroups。了解之余,并对Cgroups做下笔记。

阅读全文 »

王希刚 发布于 06月04, 2018

Kube-controller-manager解析之启动流程

最近在工作之余准备看看Kube-controller-manager比较核心的几个控制器,也是现在容器平台主要使用的几个,如:Deployment, ReplicaSet, Garbage Collection, ReousrceQuota, Node Controller等。在分析这些控制器之前,先介绍下kube-controller-manager的功能及它的启动流程。

注意: kubernetes 1.9.0, commit Id: 925c127ec6b946659ad0fd596fa959be43f0cc05

阅读全文 »

王希刚 发布于 01月25, 2018

kube-scheduler源码解析

源码为kubernetes1.9, git commit id为 925c127ec6b946659ad0fd596fa959be43f0cc05。本文前半部分讲解scheduler的原理,后半部分对scheduler源码进行分析。

阅读全文 »