热门标签 | 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。


推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 思科IOS XE与ISE集成实现TACACS认证配置
    本文详细介绍了如何在思科IOS XE设备上配置TACACS认证,并通过ISE(Identity Services Engine)进行用户管理和授权。配置包括网络拓扑、设备设置和ISE端的具体步骤。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
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社区 版权所有