在虚拟机中使用 GPU 计算

本文介绍如何在 Linux 虚拟机中直接使用 GPU 做科学计算,要达到这个目的,需要满足下面几个条件: 物理主机使用 VMWare ESXi 作为虚拟化的 VMM,并且版本最好大于等于 6.5 使用的是 Nvidia GPU 的显卡 Linux 虚拟机 OS 没有限制,我使用的是 ubuntu ESXi 开启显卡直通 假设已经安装好了 ESXi,通过 WebUI 进入 Host 的 Manage 界面,点击 Hardware,如图 把 nVidia 开头的这几个全部选中,然后 “Active”, 表示开启 PCI 设备的直通 (passthrough)。 重启物理主机。 配置虚拟机 创建一个新虚拟机,或者修改已有的虚拟机, 点击 Edit,VM Options ,在 Advanced 里面点击 Edit configuration 。 增加一条配置参数 hypervisor.cpuid.v0, 对应的值为 FALSE,这一步的目的是让驱动把虚拟机当做物理机来处理。 另一需要修改的地方让虚拟机硬件配置内存大小下面勾选 “Reserve all guest memory (All locked)”,让虚拟机启动时一次性获取物理主机内存,而不是按需获取。 到这里,主机和虚拟机的配置就全部完成了,接下来是驱动软件的安装 虚拟机安装驱动 重启并进入虚拟机 CLI,首先可以确认一下 GPU 已经被直通给了虚拟机,这一步不是必须要做,但检查一下没坏处。 ...

2020-06-13 · Me

Kubeflow 部署 MNIST

在阅读本文之前,假设已经在 GCP 上安装好了 Kubeflow。 首先进入 Kubeflow,点击 Notebook Server,新建一个 Jupyter Notebook。 新建的时候会让你输入 Name 和 Namespace,在 Kubeflow 中,每个用户都在 k8s 集群上有自己的 Namespace。 这里输入的 Name 对应的 Notebook Pod 最后会在自己的 Namespace 下。 新的 Notebook 里面是空的,我们需要下载一些例子。打开 terminal 然后输入 git clone 命令: git clone https://github.com/kubeflow/examples.git 回到默认界面会看到刚刚 clone 的项目,打开 mnist 目录下的 mnist_gcp.ipynb 开始 首先第一个问题,当我打开这个 Jupyter Notebook 的 WebUI 时,它运行在哪里? Notebook 是在哪个 Pod $ kubectl -n Your-namespace get pod NAME READY STATUS RESTARTS AGE fairing-builder-chvkq-6s4cn 0/1 Completed 0 3d23h mnist-model-7886dcbb5b-t2kk8 1/1 Running 0 3d22h mnist-tensorboard-774c585b7c-65766 2/2 Running 0 21h mnist-train-2596-chief-0 0/1 Completed 0 3d22h mnist-train-2596-worker-0 0/1 Completed 0 3d22h mnist-ui-7f95c8498b-xqsfs 2/2 Running 0 3d22h test1-0 2/2 Running 0 3d23h test1-0 是之前在 UI里面创建 Notebook server 时定下的名字,于是test1-0 ...

2020-03-22 · Me

[Istio] 使用 istio 控制转发流量

概念 首先介绍几个概念,Ingress 指的是进入到 k8s 集群中的 traffic,比如一个 client 发起的 HTTP 请求,经过层层网络最终到达了 k8s cluster 的外部,那么让不让它进入到 cluster 内部就是 ingress controller 做的事。 Kubernetes 原生提供了自己的 Ingress Controller,此外还有很多第三方的 Ingress Controller,istio 就是其中之一。需要注意的是,本文所有部署都是基于 GKE,其他的云平台可能略有不同。 在 k8s 中安装了 istio 之后,就可以用 istio 来控制所有进入 cluster 的流量。如何安装 istio 不在本文的范围,读者可以参考 istio 官方文档。 安装 istio 完成之后,kubectl get namespace 命令可以看到有个名叫 istio-system 的空间,所有 istio 组件的 pod 都在这个空间中。 然后用如下命令查看 istio ingressgateway $ kubectl -n istio-system get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT istio-ingressgateway LoadBalancer 10.0.23.180 35.222.xxx.xxx 15020:32011/TCP,80:30444/TCP 我们会看到这个名叫 istio-ingressgateway 的 LoadBalancer 它有公网 IP 地址 35.222.xxx.xxx,也就是说任何人都可以 ping 这个地址。 ...

2020-03-15 · Me

minikube, 单机版 kubernetes

本来想在我的 linux 主机上创建 3 个虚拟机,然后手工搭建一个拥有 3 个节点的 k8s 集群。 但是翻了翻网上的各种教程,发现每个教程都是巨复杂,给我一种 “即使我跟着教程千辛万苦敲完所有命令,也不一定能运行” 的感觉。最后,我发现了 minikube 这个东西,可以方便的搭建一个单机版 k8s。 麻雀虽小五脏俱全,即便是这样一个简单的 k8s,目前也足够我学习一些基本知识了。 本文记录一下安装 minikube 的具体步骤,并在 k8s 中部署一个简单的服务。 安装 minikube 开局一张图,先展示一下 minikube 的整个架构。 首先是准备工作,更新系统,安装必要组件。 sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get upgrade 然后安装 virtualbox, sudo apt install virtualbox virtualbox-ext-pack 安装 minikube wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 chmod +x minikube-linux-amd64 sudo mv minikube-linux-amd64 /usr/local/bin/minikube 添加 kubectl 源 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - 值得注意的是,我的主机是 ubuntu 18.04,代号 bionic,而安装的源却是 xenial,对应 ubuntu 16.04。 这是因为 kubernetes 源还没有为 18.04 更新,不过旧的源仍然可以用,亲测有效。 ...

2019-08-13 · Me