前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EKS集群单个pod内多个容器如何共享GPU卡

EKS集群单个pod内多个容器如何共享GPU卡

原创
作者头像
聂伟星
发布2022-07-13 15:13:13
1.8K0
发布2022-07-13 15:13:13
举报

弹性容器服务(Elastic Kubernetes Service,EKS)是腾讯云容器服务推出的无须用户购买节点即可部署工作负载的服务模式。弹性容器服务 EKS 完全兼容原生 Kubernetes,支持使用原生方式购买及管理资源,按照容器真实使用的资源量计费。弹性容器服务 EKS 还扩展支持腾讯云的存储及网络等产品,同时确保用户容器的安全隔离,开箱即用。

现在很多企业会把自己的业务部署到eks集群上,其中有些深度学习业务会需要用到GPU资源,eks也是支持gpu部署的,但是因为eks存在一些局限性,不像tke有qgpu这类组件支持gpu共享。 但是很多时候,我们的一个pod会有多个容器,这些容器都需要用到gpu资源,如果给每个容器申请一张gpu卡,由于gpu资源比较昂贵,这样会极大的增加成本。

eks上一个pod就相当于一台微型的CVM资源,那么这里是否可以一个pod申请一张GPU卡,然后pod内的多个容器共享这一张GPU卡呢?下面我们说说如何配置多个容器共享pod的GPU卡。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: gpu-test1
    qcloud-app: gpu-test1
  name: gpu-test1
  namespace: weixnie
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: gpu-test1
      qcloud-app: gpu-test1
  template:
    metadata:
      annotations:
        eks.tke.cloud.tencent.com/gpu-type: T4
      labels:
        k8s-app: gpu-test1
        qcloud-app: gpu-test1
    spec:
      containers:
      - args:
        - 70d
        command:
        - sleep
        image: centos:7
        imagePullPolicy: IfNotPresent
        name: container1
        resources:
          limits:
            nvidia.com/gpu: "1"
          requests:
            nvidia.com/gpu: "1"
        securityContext:
          privileged: true
      - args:
        - 70d
        command:
        - sleep
        env:
        - name: NVIDIA_VISIBLE_DEVICES
          value: all
        image: centos:7
        imagePullPolicy: IfNotPresent
        name: container2
        resources: {}
        securityContext:
          privileged: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always

具体的yaml配置如上,下面我们来说明下需要配置的几个点

  • 注解指定gpu卡类型
代码语言:javascript
复制
template:
    metadata:
      annotations:
        eks.tke.cloud.tencent.com/gpu-type: T4 # 这里指定的是T4类型GPU卡
  • 其中一个容器声明申请的gpu卡数量,eks上申请gpu卡数量是根据容器设置的request和limit配置来申请的
代码语言:javascript
复制
name: container1
resources:
  limits:
    nvidia.com/gpu: "1"
  requests:
    nvidia.com/gpu: "1"
  • 多容器共享gpu配置,配置环境变量NVIDIA_VISIBLE_DEVICES,容器设置为特权模式
代码语言:javascript
复制
        env:
        - name: NVIDIA_VISIBLE_DEVICES
          value: all
        image: centos:7
        imagePullPolicy: IfNotPresent
        name: container2
        resources: {}
        securityContext:
          privileged: true

配置好之后,启动pod,你可以发现2个容器都能正常启动,并且只申请了一张gpu卡,这里2个容器就都能使用gpu资源了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档