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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 尝鲜阿里云容器服务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。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7天前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
51 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
2月前
|
Kubernetes 监控 调度
阿里云容器服务ACK
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)提供高性能、可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。在ACK中,利用cGPU(Containerized GPU)技术可以实现GPU资源的共享,提高GPU利用率,降低整体成本。
53 6
|
2天前
|
弹性计算 缓存 Kubernetes
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
弹性容器实例是阿里云的云服务器产品,使用弹性容器实例之后,用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,与阿里云容器服务无缝对接并仅为容器实际运行消耗的资源付费。本文介绍了阿里云弹性容器实例的、功能特性、产品优势及应用场景。
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
|
10天前
|
存储 机器学习/深度学习 并行计算
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下不同类型的云服务器有何不同,主要特点及适用场景有哪些。
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
|
27天前
|
机器学习/深度学习 存储 弹性计算
阿里云GPU服务器价格多少钱?2024年阿里云GPU服务器价格配置及性能测评
2024年阿里云GPU服务器是一款高性能的计算服务器,基于GPU应用的计算服务,多适用于视频解码、图形渲染、深度学习、科学计算等应用场景。阿里云GPU服务器具有超强的计算能力、网络性能出色、购买方式灵活、高性能实例存储等特点。 阿里云提供了多种配置的GPU服务器,包括gn6v、gn6i、vgn6i-vws和gn6e等,这些服务器配备了不同型号的GPU计算卡、不同规格的内存和存储空间,可以满足不同用户的计算需求。同时,阿里云还为新用户提供了特惠价格,包年购买更是低至3折起,使得用户可以更加经济地购买到高性能的GPU服务器。
121 0
|
1月前
|
Kubernetes 监控 Cloud Native
阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)考试大纲
介绍阿里云云原生容器高级工程师认证(ACP级-Alibaba Cloud Certification Professional)所需具备的知识及学习方法等。
146 2
|
2月前
|
Kubernetes 容器
阿里云OpenAPI咋取到ack集群的Deployment呀?
阿里云OpenAPI咋取到ack集群的Deployment呀?【1月更文挑战第17天】【1月更文挑战第84篇】
20 2
|
2月前
|
人工智能 运维 Kubernetes
期待已久!阿里云容器服务 ACK AI 助手正式上线
期待已久!阿里云容器服务 ACK AI 助手正式上线
|
2月前
|
Kubernetes 容器
使用阿里云kubernetes镜像源出现gpg问题
使用阿里云kubernetes镜像源出现gpg问题

相关产品

  • 容器服务Kubernetes版