tencent cloud

容器服务

动态与公告
产品动态
公告
产品发布记录
产品简介
产品概述
产品优势
产品架构
应用场景
产品功能
基本概念
原生 Kubernetes 名词对照
容器服务高危操作
地域和可用区
开源组件
购买指南
购买指引
购买 TKE 标准集群
购买原生节点
购买超级节点
快速入门
新手指引
快速创建一个标准集群
入门示例
容器应用部署 Check List
集群配置
标准集群概述
集群管理
网络管理
存储管理
节点管理
GPU 资源管理
远程终端
应用配置
工作负载管理
服务和配置管理
组件和应用管理
弹性伸缩
容器登录方式
可观测配置
运维可观测性
成本洞察和优化
调度配置
调度组件概述
资源利用率优化调度
业务优先级保障调度
Qos 感知调度
安全和稳定性
容器服务安全组设置
身份验证和授权
应用安全
多集群管理
计划升级
备份中心
云原生服务指南
云原生 etcd
Prometheus 监控服务
TKE Serverless 集群指南
TKE 注册集群指南
实践教程
集群
Serverless 集群
调度
安全
服务部署
网络
发布
日志
监控
运维
Terraform
DevOps
弹性伸缩
容器化
微服务
成本管理
混合云
AI
故障处理
节点磁盘爆满排障处理
节点高负载排障处理
节点内存碎片化排障处理
集群 DNS 解析异常排障处理
集群 Kube-Proxy 异常排障处理
集群 API Server 网络无法访问排障处理
Service&Ingress 网络无法访问排障处理
Service&Ingress 常见报错和处理
Nginx Ingress 偶现 Connection Refused
CLB Ingress 创建报错排障处理
Pod 网络无法访问排查处理
Pod 状态异常与处理措施
授权腾讯云售后运维排障
CLB 回环问题
API 文档
History
Introduction
API Category
Making API Requests
Elastic Cluster APIs
Resource Reserved Coupon APIs
Cluster APIs
Third-party Node APIs
Relevant APIs for Addon
Network APIs
Node APIs
Node Pool APIs
TKE Edge Cluster APIs
Cloud Native Monitoring APIs
Scaling group APIs
Super Node APIs
Other APIs
Data Types
Error Codes
TKE API 2022-05-01
常见问题
TKE 标准集群
TKE Serverless 集群
运维类
隐患处理
服务类
镜像仓库类
远程终端类
事件类
资源管理类
服务协议
TKE Service Level Agreement
TKE Serverless Service Level Agreement
联系我们
词汇表

在 TKE Serverless 上运行深度学习

PDF
聚焦模式
字号
最后更新时间: 2024-12-23 16:44:01

操作场景

本系列文章将记录在 TKE Serverless 上部署深度学习的一系列实践,从直接部署 TensorFlow 到后续实现 Kubeflow 的部署,旨在提供一个较完整的容器深度学习实践方案。

前提条件

本文将在上一篇文档 构建深度学习容器镜像 基础上继续操作,利用自建集群,在 TKE Serverless 上运行深度学习任务。自建镜像已上传到镜像仓库中:ccr.ccs.tencentyun.com/carltk/tensorflow-model,无需重新构建,可以直接拉取使用。

操作步骤

创建 TKE Serverless 集群

请参见 创建集群 文档创建 TKE Serverless 集群。
说明:
由于需要运行 GPU 训练任务,在创建集群时,请注意选择的容器网络所在区的支持资源,选择支持 GPU 的可用区,如下图所示:



创建 CFS 文件系统(可选)

容器将在任务结束后,自动删除容器并且释放资源。因此为了实现对模型和数据的持久化存储,建议通过挂载外部存储的方式持久存储数据。目前支持 云硬盘 CBS文件存储 CFS对象存储 COS 等方式。
本文示例将利用 NFS 盘的方式,使用 CFS,实现于多读多写的持久化存储。

创建文件存储

1. 登录 文件存储 CFS 控制台,进入“文件系统”页面。
2. 单击创建,在弹出的新建文件系统页面中,选择文件系统类型,并单击下一步:详细设置
3. 在详细设置页面进行相关配置,CFS 类型信息与配置细节可参见 创建文件系统及挂载点 文档。如下图所示:


注意:
创建的 CFS 地域,需确保与集群在同一地域。
4. 确认无误之后单击立即购买并完成付费即可创建文件存储。

获取文件系统挂载信息

1. 在文件系统页面,单击需获取子目标路径的文件系统 ID,进入该文件系统详情页。
2. 选择挂载点信息页签,从 “Linux下挂载” 获取该文件系统挂载信息。如下图所示:


说明:
在挂载点详细中需要记住 IPv4 地址,IPv4 将作为 NFS 路径,后续配置挂载时需要,例如 10.0.0.161:/

创建训练任务

本文任务以 MNIST 手写数字识别数据集,加两层 CNN 为例,相关示范镜像为上一章 自建镜像,如需自定义镜像,请参见 深度学习容器镜像构建 文档。以下提供两种创建任务的方式。
控制台操作指引
Kubectl 操作指引
由于深度学习任务的性质,本文以部署 Job 节点为例。如何部署 Job 请参见 Job 管理 文档。以下提供控制台的部署范例:
1. 数据卷(选填)配置项中,选择 NFS 盘,并输入上述步骤创建的 CFS 名称和 IPv4地址。如下图所示:


2. 实例内容器中的挂载点配置项里,选择数据卷,并配置挂载点。
注意:
因为数据集可能需要联网下载,所以需要配置对集群的外网访问。详情请参见常见问题 公网访问相关
选择 GPU 型号后,在填写 request 和 limit 时需要为容器分配符合 资源规格 的 CPU 和内存,实际填写并不严格要求精确到个位。在控制台中配置,也可以选择删除默认配置以留空,即为“不限制”,也会有对应的计费规格;更推荐这种做法。
容器运行命令 command 继承 Docker 的 CMD 字段,而 CMD 指令首选 exec 形式,不调用 shell 命令。这意味着不会发生正常的 shell 处理。因此命令需要 shell 形式运行,就需要在前面添加 "sh","-c"。在控制台输入多个命令和参数时,每个命令单独一行(以换行为准)。
您还可以使用 YAML 文件创建任务。
1. 准备 YAML 文件,示例 gpu_pod.yaml 如下:
apiVersion: v1
kind: Pod
metadata:
name: tf-cnn
annotations:
#eks.tke.cloud.tencent.com/cpu: "8"
#eks.tke.cloud.tencent.com/gpu-count: "1"
eks.tke.cloud.tencent.com/gpu-type: T4
#eks.tke.cloud.tencent.com/mem: 32Gi
spec:
containers:
- name: tf-cnn
image: hkccr.ccs.tencentyun.com/carltk/tensorflow-model:latest # 训练任务的镜像
env:
- name: MODEL_DIR
value: /tf/model
- name: DATA_DIR
value: /tf/data
command:
- "sh"
- "-c"
# 触发训练任务的脚本
- "python3 official/vision/image_classification/mnist_main.py \\
--model_dir=$MODEL_DIR \\
--data_dir=$DATA_DIR \\
--train_epochs=5 \\
--distribution_strategy=one_device \\
--num_gpus=1 \\
--download"
resources:
limits:
#cpu: "8"
#memory: 32Gi
nvidia.com/gpu: "1"
requests:
#cpu: "8"
#memory: 32Gi
nvidia.com/gpu: "1"
volumeMounts:
- name: tf-model-cfs
mountPath: /tf
volumes:
- name: tf-model-cfs #训练结果持久化,保存到CFS
nfs:
path: / #此处填写CFS保存的根目录
server: 10.0.1.8 #此处填写之前创建的CFS的IPv4地址
restartPolicy: OnFailure

2. 执行以下命令完成部署。
kubectl create -f [yaml_name]
注意:
除了控制台操作指引中提到的 注意事项,还需注意:
在 YAML 文件中需使用 Annotations 声明资源分配,详情请参见 Annotation 说明。同样需要注意的是不同 GPU 对应不同的 CPU、内存选项,建议按需填写。
此处数据卷使用的是 NFS 。若需使用其他数据卷进行持久化存储,请参见 其他存储卷使用说明
Annotation 可以只保留eks.tke.cloud.tencent.com/gpu-type不需要其他项。如果写上了 /gpu-count,那么 cpumem 也需要一起写上(本文不推荐加上其他项。不加不会影响实际效果,加了之后未按规格填写可能会报 OOM 错误)。
在 GPU 的调度中,对 nvidia.com/gpu 而言,limits 是必须且仅需填写。如果只写 Annotation ,将出现找不到卡的报错。如果只填 limits ,该值将被作为 request 。如果也写上 request ,二者值必须相等。详情请参见 K8S 文档 调度 GPUs(这里同样不推荐在 request 和 limits 中加上 cpu 和 memory 的设置,理由同上)。


查看运行结果

以下提供控制台和命令行两种方式查看运行结果:
控制台查看
命令行查看
在创建 Job 之后,默认进入 Job 管理页面。您也可以通过以下步骤进入 Job 管理页面:
1. 登录容器服务控制台,选择左侧导航栏中的 集群
2. 在弹性集群列表中,单击需要查看的事件集群 ID,进入集群管理页面。
3. 选择工作负载 > Job,在 Job 列表中单击上述步骤创建的 Job。
选择事件页签在查看事件
选择日志页签查看日志,如下图所示:




您可以使用命令查看事件或日志:
执行以下命令查看事件:
kubectl describe pod [name]
如下图所示:



执行以下命令持续输出日志:
kubectl logs -f [pod_name]
如下图所示:


因为 TKE Serverless 即用即消的特性,导致如果需要查看日志,必须当且仅当 Pod 处于 Running 状态时才可查看。解决方法请参见常见问题 日志采集相关

查看存储

如果已经按照前面的配置 NFS ,此时可以前往挂载点,查看 NFS 内存储:
1. 执行以下命令进入相关挂载目录,查看是否存在相关目录。
cd /mound_data
如下图所示:



2. 进入 model 目录,查看目录下是否有相关数据。如下图所示:



3. 进入 data 目录,查看目录下是否有相关数据。如下图所示:




相关操作

在 TKE 上使用 GPU 部署深度学习任务

在 TKE 上部署和 TKE Serverless 的部署几乎没有区别。以 kubectl 通过 YAML 部署为例,有以下两点改动:
创建 TKE 节点时,选择带有 GPU 的节点。详情请参见 新建 GPU 云服务器 文档。
因为节点自带 GPU 资源,因此无需 Annotations 和 Resources。在实践操作汇总,您可以保留 Annotations,TKE 不会处理这部分。Resources 则建议注释掉,因为在某些情况下可能会导致不合理的资源需求。

常见问题

在进行本实践过程中遇到的问题,请参见 常见问题 文档进行排查解决。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈