在Kubernetes集群中使用GPU资源

Kubernetes(下文简称为k8s)具有对机器的资源进行分配和使用的能力,比如k8s可以指定容器最多使用多少内存以及使用多少CPU计算资源。那么问题来了,一般来说容器就是使用CPU和内存资源,那么对于需要使用显卡的Pod,k8s也能够支持吗?答案当然是可以啦!目前k8s不仅支持容器请求GPU资源,还支持请求几块显卡的GPU资源,这使得k8s在深度学习等场景下也有了用武之地。

所以本文的主要内容就是如何在k8s集群中使用GPU资源

基于Docker的Kubernetes-1.12集群搭建

上了Docker怎能不上Kubernetes(下文简称为k8s)呢,k8s是一款旨在提供跨主机集群的自动部署、扩展以及运行应用程序容器的平台。至于它具体是什么,有什么好处,可以自行网络搜索(主要是好处太多了罗列不过来)

本文的主要内容为在服务器上如何安装k8s以及搭建单master节点的k8s集群

使用Harbor搭建Docker私有仓库

Docker官方提供了Docker Hub作为Docker公共仓库,大家可以上传或者下载镜像。但是对于企业来说将生产环境的镜像放在公共仓库是不安全的,所以企业有必要搭建自己的私有仓库。Docker官方提供了开源的registry镜像,可以用于搭建Docker私有仓库。但是它没有管理界面,缺少运维和管理功能,并不适用于企业搭建

由VMware中国研发团队负责开发的开源企业级Docker Registry——Harbor,以Docker官方提供的开源registry为基础,增加了Web UI、用户权限管理、日志等一系列便于运维和管理的功能,可以帮助企业快速搭建企业级的Docker私有仓库。所以Harbor成为了第一选择

本文的主要内容为如何使用Harbor搭建Docker私有仓库,并简单说明下使用中的注意事项

Docker安装指南以及使用GPU

随着公司GPU服务器数量的增加,深度学习开发环境的部署逐渐成为了负担。因为机器本身环境配置的差异,即使经验丰富的人也会遇到一些全新的问题,需要耗费时间去解决。而Docker与生俱来的Build once, Run anywhere特点使得多机器统一环境部署变得极为容易,所以使用Docker势在必行

本文的主要内容为在腾讯云的GPU服务器上如何安装Docker,并能支持GPU的使用

(用了Docker后,就可以跟前文介绍的Anaconda拜拜了,因为conda只做到了Python环境隔离,并且每个虚拟环境还是要手动配置)

使用Python多进程Pool类时遇见的一些问题

在学习Python多进程的过程中,虽然Process和Pool都能实现多进程的功能,但是侧重点各有不同:

  • Process需要自己管理进程,起一个Process就是起一个新进程

  • Pool是进程池,它可以开启固定数量的进程,然后将任务放到一个池子里,系统来调度多进程执行池子里的任务

所以从直观感受上更倾向于使用Pool,但是使用过程中却发现Pool存在一些问题(或者说与Process的差异),所以记录下来给大家分享一下

多版本CUDA和TensorFlow共存

直奔主题,为什么要做这件事情?

  • 服务器目前安装了CUDA 8.0、TensorFlow 1.3.0,并已有线上服务基于该版本环境配置开发,无法轻易修改本机环境版本
  • TensorFlow版本迭代很快,新版本使用更高版本的CUDA,不仅计算速度上更快,而且还有一些更加丰富的API可供使用,例如TensorFlow 1.8.0版本中的eager模式

所以通过查资料以及实验完成了这件事情,并记录下来以供有同样需求的朋友参考

文章修改记录:

  • 2018.11.25:统一路径信息、修改部分链接、增加全局pip源设置以及一些小问题修复

腾讯云GPU服务器搭建TensorFlow开发环境

日前,我司开始使用腾讯云的GPU服务器,那自然需要在其上配置TF的开发环境。之前写过在CentOS6上进行源码编译安装TF(传送门),所以这篇也是在以前的基础上修改而来,不过因为系统版本换为CentOS7,许多步骤都可以省略了,方便不少。不过仍有部分操作或问题与之前不一致,在此也会对其说明

最终配置的环境为CUDA-8.0 + cuDNN-6.0 + TensorFlow-1.3.0

CentOS6源码编译安装TensorFlow

文章首发于微信公众号:链家产品技术团队,欢迎搜索关注~

公司前一阵搞了两台GPU服务器,终于有“玩具”可以玩了~用的卡是最新的P100(好吧,真正最新的是V100,不过还没铺货)。本着爱折腾的精神,自然就开始了折腾它们的征程(结果是我被折腾了。。。)

以前自己也搭建过TensorFlow的开发环境(见链接),所以一开始以为这次也不会难,结果。。。咳咳,还是要正视自己的水平的。因为服务器上装的是系统是CentOS,以前自己捣鼓的时候用的是Ubuntu,差别还是不少的,所以特此记录自己踩过的坑,也给其他人一些经验帮助。

这次折腾总共分为两个阶段:最初打算直接通过pip下载TensorFlow安装包安装,结果完全失败,不过在此期间摸清了许多限制条件,也为第二个阶段——通过编译的方式安装TensorFlow打下了基础。

系统版本:CentOS release 6.8 (Final) 64位

增强学习 Reinforcement learning part 4 - Model-Free Prediction

本文是在学习David Silver所教授的Reinforcement learning课程过程中所记录的笔记。因为个人知识的不足以及全程啃生肉,难免会有理解偏差的地方,欢迎一起交流。

课程资料:http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html

1、Introduction

上一节讲的东西是基于已知的MPD,也就是有模型学习,而实际中很多情况下MDP是未知的,各个状态之间的转移概率以及reward很难得知,所以这种环境称为model free。

首先先讲model free prediction,类似于DP中的policy evaluation,去估计这个未知的MDP中各个状态的value function。]

下一节会讲model free control,类似于DP中的policy iteration,去最优化这个未知的MDP中各个状态的value function。

增强学习 Reinforcement learning part 3 - Planning by Dynamic Programming

本文是在学习David Silver所教授的Reinforcement learning课程过程中所记录的笔记。因为个人知识的不足以及全程啃生肉,难免会有理解偏差的地方,欢迎一起交流。

课程资料:http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html

1、Introduction

这一部分是用动态规划来解决MDP问题,所以先介绍下什么是动态规划

Dynamic Programming(动态规划),是用来解决一些复杂的问题,将复杂的问题分解为一些子问题,然后分别解决这些子问题,最后再把解决方案合并得到复杂问题的解

  • Dynamic:代表这个问题是连续的或者是跟时间相关的
  • Programming:不是编程的意思,而指的是优化一个程序