尝鲜阿里云容器服务Kubernetes 1.9,拥抱GPU新姿势

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 尝鲜阿里云容器服务Kubernetes 1.9.3, 拥抱Nvidia GPU的新姿势 自从1.8版本开始,Kubernetes已经明确表示要通过统一的设备插件方式支持像Nvidia PU,InfiniBand,FPGA等硬件加速设备。

尝鲜阿里云容器服务Kubernetes, 拥抱Nvidia GPU的新姿势

自从1.8版本开始,Kubernetes已经明确表示要通过统一的设备插件方式支持像Nvidia PU,InfiniBand,FPGA等硬件加速设备,而社区的GPU方案将在1.10全面弃用,并在1.11版本彻底从主干代码移除。

而Kubernetes全新的GPU调度方案基于Nvidia官方的设备插件nvidia-container-runtime, 和之前社区方案相比,最终用户所要做的配置更少。

基于该方案,客户可以将应用程序利用容器技术构建镜像,结合Kubernetes+GPU运行机器学习,图像处理等高运算密度等任务,无需安装nvidia driver和CUDA,就能实现一键部署和弹性扩缩容等功能。

下面开始体验如何在阿里云容器服务上创建Tesla P4和P100的Kubernetes GPU混部集群,部署和测试Jupyter应用运行TensorFlow。

创建Kubernetes GPU集群

阿里云容器服务Kubernetes 1.9.3目前在已经上线,但是购买按量付费的GPU计算型服务器需要申请ECS工单开通。具体创建过程,可以参考创建Kubernetes集群

1.首先选择区域

1_select_region

2. 选择实例系列:GPU计算型gn5,通过下拉框可以选择实例规格

2_select_gpu

3. 勾选开放公网SSH登录,这样就可以通过ssh登录Kubernetes的Master节点

3_select_ssh

4.当集群创建成功后,点击管理按钮

4_click_management

5. 这样就可以看到Master节点SSH连接地址


5_management_view

6. 通过ssh登录Master查看包含GPU节点

kubectl get nodes -l 'aliyun.accelerator/nvidia' --show-labels
NAME                                 STATUS    ROLES     AGE       VERSION   LABELS
cn-hongkong.i-uf6jd9dgj8kgb5wua461   Ready     <none>    2d        v1.9.3    aliyun.accelerator/nvidia=Tesla-P100-PCIE-16GB
cn-hongkong.i-uf6jd9dgj8kgbhr0yg35   Ready     <none>    2d        v1.9.3    aliyun.accelerator/nvidia=Tesla-P4

这样就可以通过label: aliyun.accelerator/nvidia看到GPU类型,在该例子中可以看到这里有两台GPU服务器:Tesla P100和P4。这样在部署应用时,可以利用Node Affinity机制将其调度到指定的GPU型号。

7. 具体查看GPU节点的状态信息

kubectl get node ${node_name} -o=yaml
...
status:
  addresses:
  - address: 192.168.75.179
    type: InternalIP
  allocatable:
    cpu: "8"
    memory: 61578152Ki
    nvidia.com/gpu: "1"
    pods: "110"
  capacity:
    cpu: "8"
    memory: 61680552Ki
    nvidia.com/gpu: "1"
    pods: "110"
...

可以看到该节点的含有GPU资源数量为1, 这样我们就可以开始运行使用GPU的TensorFlow应用

运行TensorFLow的GPU实验环境

数据科学家通常习惯使用Jupyter作为TensorFlow实验环境,我们这里可以用一个例子向您展示如何快速部署一个Jupyter应用。

下面的deployment.yaml内容分为两部分: Deployment和Service,

---
# Define the tensorflow deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tf-notebook
  labels:
    app: tf-notebook
spec:
  replicas: 1
  selector: # define how the deployment finds the pods it mangages
    matchLabels:
      app: tf-notebook
  template: # define the pods specifications
    metadata:
      labels:
        app: tf-notebook
    spec:
      containers:
      - name: tf-notebook
        image: tensorflow/tensorflow:1.4.1-gpu-py3
        resources:
          limits:
            nvidia.com/gpu: 1
        ports:
        - containerPort: 8888
          hostPort: 8888
        env:
          - name: PASSWORD
            value: mypassw0rd

# Define the tensorflow service
---
apiVersion: v1
kind: Service
metadata:
  name: tf-notebook
spec:
  ports:
  - port: 80
    targetPort: 8888
    name: jupyter
  selector:
    app: tf-notebook
  type: LoadBalancer

Deployment配置:

如果您编写过老的GPU部署方案,会知道过去必须要定义如下的nvidia驱动所在的数据卷。

volumes:
    - hostPath:
        path: /usr/lib/nvidia-375/bin
        name: bin
    - hostPath:
        path: /usr/lib/nvidia-375
        name: lib

这需要您在编写部署文件时,强依赖于所在的集群,导致缺乏可移植性。但是在Kubernetes 1.9.3中,最终用户无需指定这些hostPath,nvidia的插件会自发现驱动所需的库链接和执行文件。

1. 运行kubectl部署该应用:

kubectl create -f deployment.yaml

2. 查看deployment的配置

 kubectl get deploy tf-notebook -o=yaml
apiVersion: extensions/v1beta1
...
kind: Deployment
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: tf-notebook
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: tf-notebook
    spec:
      containers:
      - image: tensorflow/tensorflow:1.4.1-gpu-py3
        imagePullPolicy: IfNotPresent
        name: tf-notebook
        ports:
        - containerPort: 8888
          hostPort: 8888
          protocol: TCP
        resources:
          limits:
            nvidia.com/gpu: "1"

3. 查看deployment日志

# kubectl logs $(kubectl get po | awk '{print $1}' |grep tf-notebook)
[I 13:03:19.579 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[W 13:03:19.595 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 13:03:19.604 NotebookApp] Serving notebooks from local directory: /notebooks
[I 13:03:19.604 NotebookApp] 0 active kernels
[I 13:03:19.604 NotebookApp] The Jupyter Notebook is running at:
[I 13:03:19.604 NotebookApp] http://[all ip addresses on your system]:8888/?token=71586cf8ab9fcd6175d489b0e07c7ed3fccd5f6395824e31
[I 13:03:19.604 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 13:03:19.604 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=71586cf8ab9fcd6175d489b0e07c7ed3fccd5f6395824e31

4. 通过service查看访问端点,只需要检查EXTERNAL-IP

kubectl get svc
kubectl get svc tf-notebook
NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
tf-notebook   LoadBalancer   172.19.12.63   139.196.5.196   80:32490/TCP   11m

5. 这样就直接可以访问Jupyter实例,链接是http://EXTERNAL-IP

现在要验证这个Jupyter实例可以使用GPU,可以在运行下面的程序。它将列出Tensorflow可用的所有设备。

from tensorflow.python.client import device_lib

def get_available_devices():
    local_device_protos = device_lib.list_local_devices()
    return [x.name for x in local_device_protos]

print(get_available_devices())

可以看到如下输出

6_jupyter

这样,您就可以正式开始自己的TensorFlow on GPU之旅

总结

利用阿里云容器服务的Kubernetes,您可以在部署时刻选择GPU类型的工作节点,而无需操心复杂Nvidia驱动和Kubernetes集群配置,一键部署,不出十分钟就可以轻松获得阿里云强大的异构计算能力和Kubernetes的GPU应用部署调度能力。这样您就可以专心的构建和运行自己的深度学习应用了。欢迎您在香港区域尝试和体验,后续我们也会开放其他地区的Kubernetes 1.9.3。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
14天前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
5天前
|
Kubernetes 监控 Cloud Native
|
3天前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
随着容器技术的快速发展,容器编排工具成为了现代软件开发和运维的重要环节。在众多容器编排工具中,Kubernetes和Docker Swarm无疑是最受欢迎的两个。本文将从技术特性、易用性和社区支持三个方面,对Kubernetes和Docker Swarm进行比较,以帮助您选择更适合您需求的容器编排工具。
15 3
|
2天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
10天前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
48 2
|
19天前
|
Kubernetes Cloud Native 调度
深入探讨容器化技术:Kubernetes 的魅力
【10月更文挑战第6天】深入探讨容器化技术:Kubernetes 的魅力
44 0
|
21天前
|
运维 Kubernetes Cloud Native
云原生时代的容器编排:Kubernetes入门与实践
【10月更文挑战第4天】在云计算的浪潮中,云原生技术以其敏捷、可扩展和高效的特点引领着软件开发的新趋势。作为云原生生态中的关键组件,Kubernetes(通常被称为K8s)已成为容器编排的事实标准。本文将深入浅出地介绍Kubernetes的基本概念,并通过实际案例引导读者理解如何利用Kubernetes进行高效的容器管理和服务部署。无论你是初学者还是有一定经验的开发者,本文都将为你打开云原生世界的大门,并助你一臂之力在云原生时代乘风破浪。
|
23天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
61 0
|
10天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
31 5
|
4天前
|
存储 缓存 Docker
docker中挂载数据卷到容器
【10月更文挑战第16天】
15 2

热门文章

最新文章

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多