尝鲜阿里云容器服务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工单开通。

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配置:

  • 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())

可以看到如下输出

6_jupyter

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

总结

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

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
18天前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
160 3
|
2月前
|
运维 Kubernetes 持续交付
ACK One GitOps:让全球化游戏服务持续交付更简单
ACK One GitOps 致力于提供开箱即用的多集群 GitOps 持续交付能力,简化游戏等服务的多集群/多地域统一部署,让您更加专注于业务开发。
|
6月前
|
存储 测试技术 对象存储
容器计算服务ACS单张GPU即可快速搭建QwQ-32B推理模型
阿里云最新发布的QwQ-32B模型拥有320亿参数,通过强化学习大幅度提升了模型推理能力,其性能与DeepSeek-R1 671B媲美,本文介绍如何使用ACS算力部署生产可用的QwQ-32B模型推理服务。
|
6月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
236 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
6月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
152 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
6月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
7月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
119 1
|
7月前
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
176 0
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
167 9
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。

相关产品

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

    更多