云服务器内容精选

  • 加速保存checkpoint 在保存checkpoint的时候,利用两阶段写、内存副本、异步持久化等技术保证checkpoint的快速、高可靠存储。具体地,第一阶段,各个节点将自己的checkpoint高速同步写入HOST侧的内存缓存中,同时写入配置好的backup节点内存缓存中,backup的内存副本可以在主节点进程异常退出时不会丢失内存checkpoint;第二阶段,拥有相同checkpoint的节点会选择代表节点异步写一份完整的checkpoint到SFS Turbo服务端进行持久化存储,通过异步方式最大程度隐藏了checkpoint持久化到远端存储的耗时,实现checkpoint秒级同步保存,避免训练任务长时间阻塞,异步保存阶段,主节点持久化过程中,内存中写入了相同检查点的备节点会持续监听主节点的保存结果。保存失败之后,备节点会接管主节点的持久化操作,代替主节点将检查点持久化下去,保证可靠性。 图1 保存checkpoint流程
  • 加速加载checkpoint 在加载checkpoint的时候,利用内存快恢、checkpoint广播等技术,大大减少后端存储的带宽压力,提升加载效率。具体地,对于训练中进程级故障、硬件仍然健康的故障场景,主机侧客户端内存缓存仍会保留,本机缓存中的checkpoint仍可正常访问,此时可从主机侧客户端内存中直接加载checkpoint进行原地秒级快速恢复;为避免所有GPU/NPU卡同时从存储中加载checkpoint致使存储带宽成为拥塞瓶颈,在具有相同checkpoint的冗余组内,采用部分代表节点先从远端存储加载checkpoint并将checkpoint广播到剩余其他节点的恢复机制,这种策略显著降低大规模训练集群故障恢复过程对远端存储带宽的需求,加速大规模训练集群checkpoint快速恢复。 图2 加载checkpoint流程
  • 安装AITurbo SDK 安装AITurbo SDK依赖包。 AITurbo SDK依赖rpyc,setproctitle,PyYAML,pathlib2等三方库,安装方式如下: pip install rpyc setproctitle pathlib2 PyYAML 安装AITurbo SDK,checkpoint的保存和加载优化依赖于AITurbo SDK,安装包的下载地址请提交工单获取。
  • 背景 当前,大模型训练往往使用成百上千加速卡训练几周到几个月不等。在训练过程中,故障导致训练中断经常发生。训练程序一般采用周期 checkpoint方案来将训练状态持久化到存储,当发生故障时,训练程序能恢复到故障之前的模型和优化器的状态继续训练。原生Pytorch系框架在保存checkpoint时均直接持久化到存储系统,耗时与模型大小、存储的IO性能等密切相关,往往需要几分钟到几十分钟不等,为了保证训练状态的一致性,保存checkpoint时训练必须暂停,保存时间影响了训练过程的整体效率。当发生故障,训练程序从已有checkpoint恢复时,每张卡都需要从持久化存储中加载,在训练集群规模较大,存储带宽较低的场景下,加载耗时可能会达到小时级,严重影响训练恢复。因此,我们在AITurbo SDK中提供了快速保存和加载checkpoint的功能,当前流行的两种大模型训练框架Megatron和DeepSpeed进行很简单地适配便可使用。
  • 创建备份操作步骤 请确认目标文件系统为“可用”状态,否则无法启动备份任务。此步骤介绍如何手动创建文件系统备份。 备份标准型、标准型-增强版(停售)、性能型、性能型-增强版(停售)等类型的SFS Turbo文件系统过程中,挂载文件系统可能会失败,正在挂载使用的连接会感知30秒左右的IO延迟,建议在业务低峰期备份。 登录云备份管理控制台。 在左侧导航栏选择“SFS Turbo备份”。 参考《云备份用户指南》的“快速创建SFS Turbo备份”章节,完成创建备份存储库的操作,再根据创建文件系统备份完成创建备份操作。 系统会自动进行文件系统的备份。 您可以在备份页面,查看备份创建状态。当文件系统备份的“备份状态”变为“可用”时,表示备份创建成功。 当文件系统发生错误等故障时,可以使用备份创建新的文件系统,具体请参考使用备份创建新文件系统。
  • 响应示例 状态码: 200 成功 { "tasks" : [ { "task_id" : "2b31ed520xxxxxxebedb6e57xxxxxxxx", "status" : "SUC CES S", "dir_usage" : { "path" : "/path", "used_capacity" : 0, "file_count" : { "dir" : 0, "regular" : 0, "pipe" : 0, "char" : 0, "block" : 0, "socket" : 0, "symlink" : 0 }, "message" : "" }, "begin_time" : "2023-03-01 11:46:01", "end_time" : "2023-03-01 11:46:01" } ] } 状态码: 400 错误响应 { "errCode" : "SFS.TURBO.0123", "errMsg" : "feature invalid" } 状态码: 404 错误响应 { "errCode" : "SFS.TURBO.0124", "errMsg" : "task_id not found" } 状态码: 500 错误响应 { "errCode" : "SFS.TURBO.0005", "errMsg" : "Internal server error" }
  • 请求示例 ID为"77ba6f4b-6365-4895-8dda-bc7142af4dde的文件系统,获取DU任务列表,从任务ID为"11abef677ac40f46644d1d5cfc2424a4"起,获取50个任务 GET HTTPS://{endpoint}/v1/{project_id}/sfs-turbo/shares/77ba6f4b-6365-4895-8dda-bc7142af4dde/fs/dir-usage/tasks?marker=11abef677ac40f46644d1d5cfc2424a4&limit=50
  • URI GET /v1/{project_id}/sfs-turbo/shares/{share_id}/fs/{feature}/tasks 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目id share_id 是 String 文件系统id feature 是 String 任务类型。例,DU任务取值为dir-usage 表2 Query参数 参数 是否必选 参数类型 描述 marker 否 String marker,取值为task_id limit 否 Integer limit, 取值为正整数. 默认为20,最大值为100
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 tasks Array of OneFsTaskResp objects 任务列表 表5 OneFsTaskResp 参数 参数类型 描述 task_id String 任务ID status String 任务状态, SUCCESS表示成功,DOING表示正在执行,FAIL表示失败 dir_usage FsDuInfo object 目录资源使用情况(包含子目录) begin_time String 任务开始时间,UTC时间,例如:2006-01-02 15:04:05' end_time String 任务结束时间,UTC时间,例如:2006-01-02 15:04:06' 表6 FsDuInfo 参数 参数类型 描述 path String 文件系统内合法的目录全路径 used_capacity Long 占用容量,单位:byte file_count FsFileCount object 该目录下所有文件数目 message String 错误信息 表7 FsFileCount 参数 参数类型 描述 dir Long 目录数目 regular Long 普通文件数目 pipe Long 管道文件数目 char Long 字符设备数目 block Long 块设备数目 socket Long 套接字数目 symlink Long 符号链接数目 状态码: 400 表8 响应Body参数 参数 参数类型 描述 errCode String 错误码 errMsg String 错误描述 状态码: 404 表9 响应Body参数 参数 参数类型 描述 errCode String 错误码 errMsg String 错误描述 状态码: 500 表10 响应Body参数 参数 参数类型 描述 errCode String 错误码 errMsg String 错误描述
  • 接口约束 在2023年8月1号之后创建的文件系统支持该API操作。后端有5min的缓存时间,查询的数据可能有延迟。API请求路径的feature仅支持以下取值: dir-usage 该接口仅适用于以下类型: 20MB/s/TiB 40MB/s/TiB 125MB/s/TiB 250MB/s/TiB 500MB/s/TiB 1000MB/s/TiB HPC缓存型文件系统 标准型、标准型-增强版、性能型、性能型-增强版类型 的SFS Turbo文件系统,请使用“查询目录资源使用情况”接口。
  • 接口约束 在2023年8月1号之后创建的文件系统支持该API操作。如果存在10个正在执行的任务,则不允许创建新任务。该接口并发请求数过大可能会影响文件系统性能,建议同时提交的查询请求不要超过4 个。查询超大目录耗时较久,请不要重复提交。API请求路径的feature仅支持以下取值: dir-usage 该接口仅适用于以下类型: 20MB/s/TiB 40MB/s/TiB 125MB/s/TiB 250MB/s/TiB 500MB/s/TiB 1000MB/s/TiB HPC缓存型文件系统 标准型、标准型-增强版、性能型、性能型-增强版类型 的SFS Turbo文件系统,请使用“查询目录资源使用情况”接口。
  • 响应示例 状态码: 202 Accepted { "task_id" : "d651ea2b-2b20-4c6d-8bbf-2adcec18dac9" } 状态码: 400 错误响应 { "errCode" : "SFS.TURBO.0123", "errMsg" : "feature invalid" } 状态码: 500 错误响应 { "errCode" : "SFS.TURBO.0005", "errMsg" : "internal server error" }
  • 响应示例 状态码: 400 错误响应 { "errCode" : "SFS.TURBO.0123", "errMsg" : "feature invalid" } 状态码: 404 错误响应 { "errCode" : "SFS.TURBO.0124", "errMsg" : "task_id not found" } 状态码: 500 错误响应 { "errCode" : "SFS.TURBO.0005", "errMsg" : "Internal server error" }
  • 请求示例 ID为"77ba6f4b-6365-4895-8dda-bc7142af4dde"的文件系统,删除任务ID为"11abef677ac40f46644d1d5cfc2424a4"的DU任务 DELETE HTTPS://{endpoint}/v1/{project_id}/sfs-turbo/shares/77ba6f4b-6365-4895-8dda-bc7142af4dde/fs/dir-usage/tasks/11abef677ac40f46644d1d5cfc2424a4
  • URI DELETE /v1/{project_id}/sfs-turbo/shares/{share_id}/fs/{feature}/tasks/{task_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目id share_id 是 String 文件系统id feature 是 String 任务类型。例,DU任务取值为dir-usage task_id 是 String 任务ID