在BML平台使用并行文件系统PFS和对象存储BOS

全功能AI开发平台 BML

  • 版本发布记录
  • 快速开始
    • 用BML实现表格预测
    • 用BML实现序列标注
    • 用BML实现文本实体抽取
    • 用BML实现图片分类
    • 用BML实现实例分割
    • 用BML评价短文本相似度
    • 用BML实现开源大模型的预训练(Post-pretrain)
    • 用BML实现文本分类
    • 用BML实现物体检测
  • 模型仓库
    • 从训练任务导入模型
    • 查看模型
    • 创建模型
    • 模型仓库简介
    • 从本地导入模型
    • 校验模型
    • 服务代码文件示例
      • Sklearn服务代码文件示例
      • XGBoost服务代码文件示例
  • 平台管理
    • 权限管理
    • 在BML平台使用并行文件系统PFS和对象存储BOS
    • 在BML平台使用容器镜像服务CCR
    • 在BML使用外部镜像
    • 项目空间管理
    • 镜像管理
      • 镜像使用
      • 镜像管理简介
      • 常见问题
      • 自定义镜像
    • 资源管理
      • 资源池管理简介
      • 资源池使用简介
  • 预测部署
    • 批量预测(用户资源池)API
    • 文字识别模型部署
      • 文字识别任务API参考文档
      • 文字识别任务公有云部署
    • 通用模型部署
      • 标准接口规范参考
      • Paddle框架API调用文档
      • sklearn框架API调用文档
      • 公有云部署
      • XGBoost框架API调用文档
      • tensorflow框架API调用文档
      • Pytorch框架API调用文档
      • 通用类模型API参考
      • 错误码
    • 语音技术模型部署
      • 声音分类API调用文档
    • 视觉模型部署
      • 智能边缘控制台-多节点版
      • 端云协同服务部署
      • 智能边缘控制台-单节点版
      • 视觉任务模型部署整体说明
      • 软硬一体方案部署
        • 视觉任务Jetson专用SDK集成文档
        • 如何获取视觉任务软硬一体产品
        • 视觉任务EdgeBoard(VMX)专用SDK集成文档
        • 视觉任务EdgeBoard(FZ)专用SDK集成文档
        • 视觉任务专用辨影SDK集成开发文档
      • 私有服务器部署
        • 视觉模型如何部署在私有服务器
        • 私有API
          • 如何发布私有API
          • 图像分类-单图单标签私有API集成文档
          • 图像分类-单图多标签私有API集成文档
          • 物体检测私有API集成文档
        • 服务器端SDK
          • 视觉任务服务器端LinuxSDK集成文档-Python
          • 视觉任务服务器端LinuxSDK集成文档-C++
          • 如何发布服务器端SDK
          • 视觉任务服务器端WindowsSDK集成文档
          • 视觉任务服务器端SDK简介
      • 设备端SDK部署
        • 视觉任务WindowsSDK集成文档
        • 视觉任务iOSSDK集成文档
        • 视觉任务LinuxSDK集成文档-Python
        • 视觉任务LinuxSDK集成文档-C++
        • 视觉任务设备端SDK使用说明
        • 如何发布视觉任务设备端SDK
        • 视觉任务AndroidSDK集成文档
      • 公有云部署
        • 文字识别API参考文档
        • 视觉任务公有云部署
        • 物体检测API参考文档
        • 图像分类-单图单标签API参考文档
        • 实例分割API参考文档
        • 图像分类-单图多标签API参考文档
    • 表格预测模型部署
      • 整体说明
      • 公有云部署
    • 公有云部署管理
      • 配置AB测试版本
      • 批量预测服务
      • 公有云部署
      • 公有云部署简介
      • 配置休眠策略
    • NLP模型部署
      • 自然语言处理任务模型部署整体说明
      • 私有服务器部署
        • 如何部署在私有服务器
        • 私有服务API说明
          • 私有部署说明-短文本相似度
          • 私有化部署接口说明-文本分类
          • 私有部署文档-序列标注
          • 文本实体抽取API调用文档
      • 公有云部署
        • 短文本匹配API调用文档
        • 文本实体抽取私有API调用说明
        • 如何发布自然语言处理任务API
        • 文本分类-多标签API调用文档
        • 文本分类API调用文档
        • 序列标注API调用文档
  • 数据服务
    • 数据服务简介
    • 智能数据API
    • 公有云服务调用数据反馈
    • 智能标注
      • 文本智能标注介绍及原理说明
      • 图像智能标注介绍说明
    • 管理视觉数据
      • 实例分割数据导入与标注
        • 数据标注说明
        • 导入未标注数据
        • 导入已标注数据
      • 物体检测数据导入与标注
        • 物体检测数据标注说明
        • 物体检测导入未标注数据
        • 物体检测导入已标注数据
      • 图像分类数据导入与标注
        • 图像分类导入未标注数据
        • 图像分类导入已标注数据
        • 图像分类数据标注说明
    • 管理文本数据
      • 文本分类数据导入与标注
        • 文本分类数据标注说明
        • 文本分类数据导入与标注
        • 数据去重策略
      • 序列标注数据导入与标注
        • 序列标注标注说明
        • 序列标注数据导入
        • 数据去重策略
      • 文本实体抽取数据标注
        • 文本实体抽取数据标注
        • 文本实体抽取数据导入
        • 数据去重策略
      • 短文本匹配数据导入与标注
        • 短文本匹配数据导入与标注
        • 数据去重策略说明
        • 短文本匹配数据标注
  • 产品简介
    • BML平台升级公告
    • 平台重点升级介绍
    • 产品优势
    • 产品功能
    • 什么是BML
    • 文心大模型
  • 产品定价
    • 服务器部署价格说明
    • 专项适配硬件部署价格说明
    • 公有云部署计费说明
    • 批量预测计费说明
    • 模型训练计费说明
    • 通用小型设备部署价格说明
  • 模型训练
    • Notebook建模
      • 创建并启动Notebook
      • Notebook导入数据集
      • 保存Notebook中的模型
      • Notebook使用参考
      • 常见问题
      • 数据模型可视化功能说明
      • Notebook简介
      • 发布模型
      • 配置模型
      • 使用Notebook开发模型
      • 如何使用Notebook SSH 功能
      • Notebook从训练到部署快速入门
        • Codelab Notebook自定义环境部署最佳实践
        • 基于Notebook的图像分类模板使用指南
        • 基于 Notebook 的 NLP 通用模板使用指南
        • Notebook 模板使用指南概述
        • 基于 Notebook 的通用模板使用指南
        • 基于 Notebook 的物体检测模板使用指南
    • 自定义作业建模
      • 自定义作业简介
      • 训练作业API
      • 训练作业
        • 使用训练作业训练模型
        • 创建训练作业
        • 发布模型
        • 训练作业代码示例
          • TensorFlow 1.13.2
          • AIAK- Training Pytorch版
          • TensorFlow 2.3.0
          • Blackhole 1.0.0
          • Pytorch 1.7.1
          • Sklearn 0.23.2
          • XGBoost 1.3.1
          • PaddlePaddle 2.0.0rc
      • 自动搜索作业
        • 创建自动搜索作业
        • yaml文件编写规范
        • 自动搜索作业简介
        • 自动搜索作业代码编写规范
        • 自动搜索作业代码示例
          • XGBoost 1.3.1代码规范
          • TensorFlow 1.13.2代码规范
          • Sklearn 0.23.2代码规范
          • Pytorch 1.7.1代码规范
          • Tensorflow2.3.0代码规范
          • PaddlePaddle 2.1.1代码规范
    • 可视化建模
      • 快速入门
      • 概述
      • 组件菜单
        • 001-基本操作
        • 003-查看模型特征溯源
        • 007-组件状态
        • 008-组件资源配置
        • 006-组件列选择
        • 002-查看模型可解释性
        • 004-查看特征重要性
      • 组件说明
        • 015-图算法
        • 004-特征工程组件
        • 003-数据处理组件
        • 012-预测组件
        • 008-聚类算法
        • 009-Python算法组件
        • 002-数据集组件
        • 014-自然语言处理组件
        • 010-NLP算法
        • 016-统计分析组件
        • 006-回归算法
        • 007-异常检测算法
        • 013-模型评估组件
        • 005-分类算法
        • 018-时间序列组件
      • 画布操作说明
        • 005-AutoML(自动调参)
        • 002-开始训练
        • 001-概述
    • 预置模型调参建模
      • 预置模型调参简介
      • 神经网络训练搜索
      • 开发视觉模型
        • 视觉任务简介
        • 查看训练结果
        • 创建视觉任务
        • 配置视觉任务
        • 开发参考
          • 视觉预训练模型
          • 超参数配置参考
          • 评估报告参考
          • 自动超参搜索配置参考
          • 数据增强算子参考
          • 训练时长设置参考
          • 网络选型参考
      • 开发表格预测模型
        • 创建表格预测任务
        • 配置专家模式表格数据预测任务
        • 查看训练结果
        • 配置AUTOML模式表格数据预测任务
        • 表格预测任务简介
      • 开发文字识别模型
        • 文字识别任务简介
        • 文字识别任务操作流程
      • 开发自然语言处理模型
        • 查看训练结果
        • 自然语言处理任务简介
        • 配置NLP任务
        • 创建NLP任务
        • 代码模板升级及迁移说明
所有文档
menu
没有找到结果,请重新输入

全功能AI开发平台 BML

  • 版本发布记录
  • 快速开始
    • 用BML实现表格预测
    • 用BML实现序列标注
    • 用BML实现文本实体抽取
    • 用BML实现图片分类
    • 用BML实现实例分割
    • 用BML评价短文本相似度
    • 用BML实现开源大模型的预训练(Post-pretrain)
    • 用BML实现文本分类
    • 用BML实现物体检测
  • 模型仓库
    • 从训练任务导入模型
    • 查看模型
    • 创建模型
    • 模型仓库简介
    • 从本地导入模型
    • 校验模型
    • 服务代码文件示例
      • Sklearn服务代码文件示例
      • XGBoost服务代码文件示例
  • 平台管理
    • 权限管理
    • 在BML平台使用并行文件系统PFS和对象存储BOS
    • 在BML平台使用容器镜像服务CCR
    • 在BML使用外部镜像
    • 项目空间管理
    • 镜像管理
      • 镜像使用
      • 镜像管理简介
      • 常见问题
      • 自定义镜像
    • 资源管理
      • 资源池管理简介
      • 资源池使用简介
  • 预测部署
    • 批量预测(用户资源池)API
    • 文字识别模型部署
      • 文字识别任务API参考文档
      • 文字识别任务公有云部署
    • 通用模型部署
      • 标准接口规范参考
      • Paddle框架API调用文档
      • sklearn框架API调用文档
      • 公有云部署
      • XGBoost框架API调用文档
      • tensorflow框架API调用文档
      • Pytorch框架API调用文档
      • 通用类模型API参考
      • 错误码
    • 语音技术模型部署
      • 声音分类API调用文档
    • 视觉模型部署
      • 智能边缘控制台-多节点版
      • 端云协同服务部署
      • 智能边缘控制台-单节点版
      • 视觉任务模型部署整体说明
      • 软硬一体方案部署
        • 视觉任务Jetson专用SDK集成文档
        • 如何获取视觉任务软硬一体产品
        • 视觉任务EdgeBoard(VMX)专用SDK集成文档
        • 视觉任务EdgeBoard(FZ)专用SDK集成文档
        • 视觉任务专用辨影SDK集成开发文档
      • 私有服务器部署
        • 视觉模型如何部署在私有服务器
        • 私有API
          • 如何发布私有API
          • 图像分类-单图单标签私有API集成文档
          • 图像分类-单图多标签私有API集成文档
          • 物体检测私有API集成文档
        • 服务器端SDK
          • 视觉任务服务器端LinuxSDK集成文档-Python
          • 视觉任务服务器端LinuxSDK集成文档-C++
          • 如何发布服务器端SDK
          • 视觉任务服务器端WindowsSDK集成文档
          • 视觉任务服务器端SDK简介
      • 设备端SDK部署
        • 视觉任务WindowsSDK集成文档
        • 视觉任务iOSSDK集成文档
        • 视觉任务LinuxSDK集成文档-Python
        • 视觉任务LinuxSDK集成文档-C++
        • 视觉任务设备端SDK使用说明
        • 如何发布视觉任务设备端SDK
        • 视觉任务AndroidSDK集成文档
      • 公有云部署
        • 文字识别API参考文档
        • 视觉任务公有云部署
        • 物体检测API参考文档
        • 图像分类-单图单标签API参考文档
        • 实例分割API参考文档
        • 图像分类-单图多标签API参考文档
    • 表格预测模型部署
      • 整体说明
      • 公有云部署
    • 公有云部署管理
      • 配置AB测试版本
      • 批量预测服务
      • 公有云部署
      • 公有云部署简介
      • 配置休眠策略
    • NLP模型部署
      • 自然语言处理任务模型部署整体说明
      • 私有服务器部署
        • 如何部署在私有服务器
        • 私有服务API说明
          • 私有部署说明-短文本相似度
          • 私有化部署接口说明-文本分类
          • 私有部署文档-序列标注
          • 文本实体抽取API调用文档
      • 公有云部署
        • 短文本匹配API调用文档
        • 文本实体抽取私有API调用说明
        • 如何发布自然语言处理任务API
        • 文本分类-多标签API调用文档
        • 文本分类API调用文档
        • 序列标注API调用文档
  • 数据服务
    • 数据服务简介
    • 智能数据API
    • 公有云服务调用数据反馈
    • 智能标注
      • 文本智能标注介绍及原理说明
      • 图像智能标注介绍说明
    • 管理视觉数据
      • 实例分割数据导入与标注
        • 数据标注说明
        • 导入未标注数据
        • 导入已标注数据
      • 物体检测数据导入与标注
        • 物体检测数据标注说明
        • 物体检测导入未标注数据
        • 物体检测导入已标注数据
      • 图像分类数据导入与标注
        • 图像分类导入未标注数据
        • 图像分类导入已标注数据
        • 图像分类数据标注说明
    • 管理文本数据
      • 文本分类数据导入与标注
        • 文本分类数据标注说明
        • 文本分类数据导入与标注
        • 数据去重策略
      • 序列标注数据导入与标注
        • 序列标注标注说明
        • 序列标注数据导入
        • 数据去重策略
      • 文本实体抽取数据标注
        • 文本实体抽取数据标注
        • 文本实体抽取数据导入
        • 数据去重策略
      • 短文本匹配数据导入与标注
        • 短文本匹配数据导入与标注
        • 数据去重策略说明
        • 短文本匹配数据标注
  • 产品简介
    • BML平台升级公告
    • 平台重点升级介绍
    • 产品优势
    • 产品功能
    • 什么是BML
    • 文心大模型
  • 产品定价
    • 服务器部署价格说明
    • 专项适配硬件部署价格说明
    • 公有云部署计费说明
    • 批量预测计费说明
    • 模型训练计费说明
    • 通用小型设备部署价格说明
  • 模型训练
    • Notebook建模
      • 创建并启动Notebook
      • Notebook导入数据集
      • 保存Notebook中的模型
      • Notebook使用参考
      • 常见问题
      • 数据模型可视化功能说明
      • Notebook简介
      • 发布模型
      • 配置模型
      • 使用Notebook开发模型
      • 如何使用Notebook SSH 功能
      • Notebook从训练到部署快速入门
        • Codelab Notebook自定义环境部署最佳实践
        • 基于Notebook的图像分类模板使用指南
        • 基于 Notebook 的 NLP 通用模板使用指南
        • Notebook 模板使用指南概述
        • 基于 Notebook 的通用模板使用指南
        • 基于 Notebook 的物体检测模板使用指南
    • 自定义作业建模
      • 自定义作业简介
      • 训练作业API
      • 训练作业
        • 使用训练作业训练模型
        • 创建训练作业
        • 发布模型
        • 训练作业代码示例
          • TensorFlow 1.13.2
          • AIAK- Training Pytorch版
          • TensorFlow 2.3.0
          • Blackhole 1.0.0
          • Pytorch 1.7.1
          • Sklearn 0.23.2
          • XGBoost 1.3.1
          • PaddlePaddle 2.0.0rc
      • 自动搜索作业
        • 创建自动搜索作业
        • yaml文件编写规范
        • 自动搜索作业简介
        • 自动搜索作业代码编写规范
        • 自动搜索作业代码示例
          • XGBoost 1.3.1代码规范
          • TensorFlow 1.13.2代码规范
          • Sklearn 0.23.2代码规范
          • Pytorch 1.7.1代码规范
          • Tensorflow2.3.0代码规范
          • PaddlePaddle 2.1.1代码规范
    • 可视化建模
      • 快速入门
      • 概述
      • 组件菜单
        • 001-基本操作
        • 003-查看模型特征溯源
        • 007-组件状态
        • 008-组件资源配置
        • 006-组件列选择
        • 002-查看模型可解释性
        • 004-查看特征重要性
      • 组件说明
        • 015-图算法
        • 004-特征工程组件
        • 003-数据处理组件
        • 012-预测组件
        • 008-聚类算法
        • 009-Python算法组件
        • 002-数据集组件
        • 014-自然语言处理组件
        • 010-NLP算法
        • 016-统计分析组件
        • 006-回归算法
        • 007-异常检测算法
        • 013-模型评估组件
        • 005-分类算法
        • 018-时间序列组件
      • 画布操作说明
        • 005-AutoML(自动调参)
        • 002-开始训练
        • 001-概述
    • 预置模型调参建模
      • 预置模型调参简介
      • 神经网络训练搜索
      • 开发视觉模型
        • 视觉任务简介
        • 查看训练结果
        • 创建视觉任务
        • 配置视觉任务
        • 开发参考
          • 视觉预训练模型
          • 超参数配置参考
          • 评估报告参考
          • 自动超参搜索配置参考
          • 数据增强算子参考
          • 训练时长设置参考
          • 网络选型参考
      • 开发表格预测模型
        • 创建表格预测任务
        • 配置专家模式表格数据预测任务
        • 查看训练结果
        • 配置AUTOML模式表格数据预测任务
        • 表格预测任务简介
      • 开发文字识别模型
        • 文字识别任务简介
        • 文字识别任务操作流程
      • 开发自然语言处理模型
        • 查看训练结果
        • 自然语言处理任务简介
        • 配置NLP任务
        • 创建NLP任务
        • 代码模板升级及迁移说明
  • 文档中心
  • arrow
  • 全功能AI开发平台BML
  • arrow
  • 平台管理
  • arrow
  • 在BML平台使用并行文件系统PFS和对象存储BOS
本页目录
  • 在BML平台使用并行文件系统PFS
  • 前提条件
  • 在用户资源池中挂载PFS实例
  • 使用PFS作为数据来源提交作业建模任务
  • 操作及代码示例
  • 前提条件
  • 操作
  • 代码示例

在BML平台使用并行文件系统PFS和对象存储BOS

更新时间:2025-08-21

在BML平台使用并行文件系统PFS

平台支持用户在用户资源池上关联并行文件存储PFS作为建模任务时的数据存储,当前支持使用并行文件系统PFS提交的任务:

  • 自定义作业-训练作业任务、自动搜索作业任务

前提条件

  1. 用户在平台上已经挂载了容器引擎CCE资源作为用户资源池,点击了解容器引擎CCE;

image.png

  1. 用户已经创建了并行文件系统PFS,点击了解并行文件系统PFS。
  2. 并行文件系统PFS能够被容器引擎CCE资源访问到,也即能被对应的VPC访问到。

在用户资源池中挂载PFS实例

  • Step1:进入平台管理-资源池管理,已挂载运行正常的用户资源池支持“挂载PFS”的操作项,点击即可选择挂载的PFS实例。

image.png

image.png

  • Step2:完成引入PFS后,支持点击“查看PFS”,并支持卸载操作。

image.png

image.png

使用PFS作为数据来源提交作业建模任务

在提交作业建模任务时,选择用户资源池后,支持选择该资源池中引入的BOS存储或者PFS存储作为数据来源。

挂载数据和编辑代码时需要注意:平台仅能使用挂载路径下的文件,请确保您的相关文件在此挂载路径之下。

image.png

操作及代码示例

前提条件

平台上的用户资源池已经成功挂载PFS。

操作

依次点击 自定义作业 -> 训练作业 -> 新建

选择了用户资源池之后,算法配置信息填写如下:

0ee28d968040f3261f115db1fe27b7c1.png

以代码文件为例: 找到机器中pfs的挂载点,将代码及数据集上传到pfs挂载中,代码文件中只需要填写基于挂载路径的相对路径即可。

9a677c8e011c1ef0acb9fe97362592fa.png

demo2.py内容附后, 为官网提供的多节点paddle2.1.1的demo案例,我们只需要修改输出路径为pfs中基于挂载路径的相对路径即可。

9acdee9dd9143be6cdfe111ce0340386.png

代码示例

Plain Text
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3"""
4"""
5import os
6import gzip
7import struct
8import numpy as np
9from PIL import Image
10import time
11import paddle
12import paddle.distributed.fleet as fleet
13import paddle.static.nn as nn
14import paddle.fluid as fluid
15from paddle.io import Dataset
16TEST_IMAGE = 't10k-images-idx3-ubyte.gz'
17TEST_LABEL = 't10k-labels-idx1-ubyte.gz'
18TRAIN_IMAGE = 'train-images-idx3-ubyte.gz'
19TRAIN_LABEL = 'train-labels-idx1-ubyte.gz'
20class MNIST(Dataset):
21    """
22    MNIST
23    """
24    def __init__(self,
25                 data_dir=None,
26                 mode='train',
27                 transform=None,
28                 backend=None):
29        assert mode.lower() in ['train', 'test'],                 "mode should be 'train' or 'test', but got {}".format(mode)
30        if backend is None:
31            backend = paddle.vision.get_image_backend()
32        if backend not in ['pil', 'cv2']:
33            raise ValueError(
34                "Expected backend are one of ['pil', 'cv2'], but got {}"
35                .format(backend))
36        self.backend = backend
37        self.mode = mode.lower()
38        if self.mode == 'train':
39            self.image_path = os.path.join(data_dir, TRAIN_IMAGE)
40            self.label_path = os.path.join(data_dir, TRAIN_LABEL)
41        else:
42            self.image_path = os.path.join(data_dir, TEST_IMAGE)
43            self.label_path = os.path.join(data_dir, TEST_LABEL)
44        self.transform = transform
45        # read dataset into memory
46        self._parse_dataset()
47        self.dtype = paddle.get_default_dtype()
48    def _parse_dataset(self, buffer_size=100):
49        self.images = []
50        self.labels = []
51        with gzip.GzipFile(self.image_path, 'rb') as image_file:
52            img_buf = image_file.read()
53            with gzip.GzipFile(self.label_path, 'rb') as label_file:
54                lab_buf = label_file.read()
55                step_label = 0
56                offset_img = 0
57                # read from Big-endian
58                # get file info from magic byte
59                # image file : 16B
60                magic_byte_img = '>IIII'
61                magic_img, image_num, rows, cols = struct.unpack_from(
62                    magic_byte_img, img_buf, offset_img)
63                offset_img += struct.calcsize(magic_byte_img)
64                offset_lab = 0
65                # label file : 8B
66                magic_byte_lab = '>II'
67                magic_lab, label_num = struct.unpack_from(magic_byte_lab,
68                                                          lab_buf, offset_lab)
69                offset_lab += struct.calcsize(magic_byte_lab)
70                while True:
71                    if step_label >= label_num:
72                        break
73                    fmt_label = '>' + str(buffer_size) + 'B'
74                    labels = struct.unpack_from(fmt_label, lab_buf, offset_lab)
75                    offset_lab += struct.calcsize(fmt_label)
76                    step_label += buffer_size
77                    fmt_images = '>' + str(buffer_size * rows * cols) + 'B'
78                    images_temp = struct.unpack_from(fmt_images, img_buf,
79                                                     offset_img)
80                    images = np.reshape(images_temp, (buffer_size, rows *
81                                                      cols)).astype('float32')
82                    offset_img += struct.calcsize(fmt_images)
83                    for i in range(buffer_size):
84                        self.images.append(images[i, :])
85                        self.labels.append(
86                            np.array([labels[i]]).astype('int64'))
87    def __getitem__(self, idx):
88        image, label = self.images[idx], self.labels[idx]
89        image = np.reshape(image, [28, 28])
90        if self.backend == 'pil':
91            image = Image.fromarray(image.astype('uint8'), mode='L')
92        if self.transform is not None:
93            image = self.transform(image)
94        if self.backend == 'pil':
95            return image, label.astype('int64')
96        return image.astype(self.dtype), label.astype('int64')
97    def __len__(self):
98        return len(self.labels)
99def mlp_model():
100    """
101    mlp_model
102    """
103    x = paddle.static.data(name="x", shape=[64, 28, 28], dtype='float32')
104    y = paddle.static.data(name="y", shape=[64, 1], dtype='int64')
105    x_flatten = paddle.reshape(x, [64, 784])
106    fc_1 = nn.fc(x=x_flatten, size=128, activation='tanh')
107    fc_2 = nn.fc(x=fc_1, size=128, activation='tanh')
108    prediction = nn.fc(x=[fc_2], size=10, activation='softmax')
109    cost = paddle.fluid.layers.cross_entropy(input=prediction, label=y)
110    acc_top1 = paddle.metric.accuracy(input=prediction, label=y, k=1)
111    avg_cost = paddle.mean(x=cost)
112    res = [x, y, prediction, avg_cost, acc_top1]
113    return res
114def train(epoch, exe, train_dataloader, cost, acc):
115    """
116    train
117    """
118    total_time = 0
119    step = 0
120    for data in train_dataloader():
121        step += 1
122        start_time = time.time()
123        loss_val, acc_val = exe.run(
124        paddle.static.default_main_program(),
125        feed=data, fetch_list=[cost.name, acc.name])
126        if step % 100 == 0:
127            end_time = time.time()
128            total_time += (end_time - start_time)
129            print(
130                    "epoch: %d, step:%d, train_loss: %f, train_acc: %f, total time cost = %f, speed: %f"
131                % (epoch, step, loss_val[0], acc_val[0], total_time,
132                1 / (end_time - start_time) ))
133def test(exe, test_dataloader, cost, acc):
134    """
135    test
136    """
137    total_time = 0
138    step = 0
139    for data in test_dataloader():
140        step += 1
141        start_time = time.time()
142        loss_val, acc_val = exe.run(
143        paddle.static.default_main_program(),
144        feed=data, fetch_list=[cost.name, acc.name])
145        if step % 100 == 0:
146            end_time = time.time()
147            total_time += (end_time - start_time)
148            print(
149                    "step:%d, test_loss: %f, test_acc: %f, total time cost = %f, speed: %f"
150                % (step, loss_val[0], acc_val[0], total_time,
151                1 / (end_time - start_time) ))
152def save(save_dir, feed_vars, fetch_vars, exe):
153    """
154    save
155    """
156    path_prefix = os.path.join(save_dir, 'model')
157    if fleet.is_first_worker():
158        paddle.static.save_inference_model(path_prefix, feed_vars, fetch_vars, exe)
159if __name__ == '__main__':
160    # 设置训练集路径
161    train_data = './job_model/paddle2.1.1/train_data'
162    # 设置验证集路径
163    test_data = './job_model/paddle2.1.1/train_data'
164    # 设置输出路径
165    save_dir = './job_model/paddle2.1.1/output'
166    # 设置迭代轮数
167    epochs = 10
168    # 设置验证间隔轮数
169    test_interval = 2
170    # 设置模型保存间隔轮数
171    save_interval = 2
172    paddle.enable_static()
173    paddle.vision.set_image_backend('cv2')
174    # 训练数据集
175    train_dataset = MNIST(data_dir=train_data, mode='train')
176    # 验证数据集
177    test_dataset = MNIST(data_dir=test_data, mode='test')
178    # 设置模型
179    [x, y, pred, cost, acc] = mlp_model()
180    place = paddle.CUDAPlace(int(os.environ.get('FLAGS_selected_gpus', 0)))
181    # 数据加载
182    train_dataloader = paddle.io.DataLoader(
183        train_dataset, feed_list=[x, y], drop_last=True,
184        places=place, batch_size=64, shuffle=True, return_list=False)
185    test_dataloader = paddle.io.DataLoader(
186        test_dataset, feed_list=[x, y], drop_last=True,
187        places=place, batch_size=64, return_list=False)
188    # fleet初始化
189    strategy = fleet.DistributedStrategy()
190    fleet.init(is_collective=True, strategy=strategy)
191    # 设置优化器
192    optimizer = paddle.optimizer.Adam()
193    optimizer = fleet.distributed_optimizer(optimizer)
194    optimizer.minimize(cost)
195    exe = paddle.static.Executor(place)
196    exe.run(paddle.static.default_startup_program())
197    prog = paddle.static.default_main_program()
198    for epoch in range(epochs):
199        train(epoch, exe, train_dataloader, cost, acc)
200        if epoch % test_interval == 0:
201            test(exe, test_dataloader, cost, acc)
202        # save model
203        if epoch % save_interval == 0:
204            save(save_dir, [x], [pred], exe)

资源配置 (依据代码情况填写即可,上文中的案例用到了多节点和GPU资源)

a7c4fa11ef7057be47b65eac75c2a380.png

上一篇
权限管理
下一篇
在BML平台使用容器镜像服务CCR