热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

尝鲜阿里云容器服务Kubernetes1.9,拥抱GPU新姿势

尝鲜阿里云容器服务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.首先选择区域

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

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

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

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

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

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

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

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

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

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

kubectl get nodes -l 'aliyun.accelerator/nvidia' --show-labels
NAME                                 STATUS    ROLES     AGE       VERSION   LABELS
cn-hongkong.i-uf6jd9dgj8kgb5wua461   Ready         2d        v1.9.3    aliyun.accelerator/nvidia=Tesla-P100-PCIE-16GB
cn-hongkong.i-uf6jd9dgj8kgbhr0yg35   Ready         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配置:

  • nvidia.com/gpu 指定调用nvidia gpu的数量
  • type=LoadBalancer 指定使用阿里云的负载均衡访问内部服务和负载均衡
  • 环境变量 PASSWORD 指定了访问Jupyter服务的密码,您可以按照您的需要修改

如果您编写过老的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())

可以看到如下输出

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

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

总结

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


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • vb6集成ad登录共享文件_SCSP实验2单点登录
    01—实验目的掌握单点登陆相关原理和深信服配置02—实验环境1.AC版本v12.0.42AC1地址:https:172.172.1.1AC2地址:htt ... [详细]
  • 动量|收益率_基于MT策略的实战分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了基于MT策略的实战分析相关的知识,希望对你有一定的参考价值。基于MT策略的实战分析 ... [详细]
  • 有什么3D框架或者插件值得学习的?推荐一个前端开发者的常用工具列表:1.lodash:一个一致性、模块化、高性能的JavaScript实用工具库。2.ramda:一个很重要的库,提 ... [详细]
author-avatar
骏天天在线
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有