如何使用PAI深度学习TensorFlow读写OSS教程?

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
对象存储 OSS,20GB 3个月
简介: Python不支持读取oss的数据, 故所有调用 python Open(), os.path.exist() 等文件, 文件夹操作的函数的代码都无法执行。如Scipy.misc.imread(), numpy.load() 等。

怕这才是“深度学习”的正确打开方式!

今日小天带来的就是天池用户Clark Wan分享的干货——如何使用PAI深度学习TensorFlow读写OSS教程~

导语

Python不支持读取oss的数据, 故所有调用 python Open(), os.path.exist() 等文件, 文件夹操作的函数的代码都无法执行。

如Scipy.misc.imread(), numpy.load() 等。

那如何在PAI读取数据呢, 通常我们采用两种办法。

如果只是简单的读取一张图片, 或者一个文本等, 可以使用tf.gfile下的函数, 具体成员函数如下:

tf.gfile.Copy(oldpath, newpath, overwrite=False) # 拷贝文件

tf.gfile.DeleteRecursively(dirname) # 递归删除目录下所有文件tf.gfile.Exists(filename) # 文件是否存在

tf.gfile.FastGFile(name, mode='r') # 无阻塞读写文件tf.gfile.GFile(name, mode='r') # 读写文件

tf.gfile.Glob(filename) # 列出文件夹下所有文件, 支持patterntf.gfile.IsDirectory(dirname) # 返回dirname是否为一个目录

tf.gfile.ListDirectory(dirname) # 列出dirname下所有文件

tf.gfile.MakeDirs(dirname) # 在dirname下创建一个文件夹, 如果父目录不存在, 会自动创建父目录. 如果文件夹已经存在, 且文件夹可写, 会返回成功

tf.gfile.MkDir(dirname) # 在dirname处创建一个文件夹tf.gfile.Remove(filename) # 删除filename

tf.gfile.Rename(oldname, newname, overwrite=False) # 重命名

tf.gfile.Stat(dirname) # 返回目录的统计数据tf.gfile.Walk(top, inOrder=True) # 返回目录的文件树

具体的文档可以参照这里http://t.cn/EVuwpoc

如果是一批一批的读取文件, 一般会采用tf.WholeFileReader() 和 tf.train.batch() 或者 tf.train.shuffer_batch();

接下来会重点介绍常用的 tf.gfile.Glob, tf.gfile.FastGFile, tf.WholeFileReader() 和 tf.train.shuffer_batch()

读取文件一般有两步

  1. 获取文件列表
  2. 读取文件

如果是批量读取, 还有第三步

  1. 创建batch

从代码上手: 在使用PAI的时候, 通常需要在右侧设置读取目录, 代码文件等参数, 这些参数都会通过--XXX的形式传入

image.png

tf.flags可以提供这个功能

接下来就分两种情况:

1.(小规模读取时建议) tf.gfile.FastGFile()

image.png

2.(大批量读取时建议) tf.WholeFileReader()

image.png

解释下其中重要的部分

tf.train.string_input_producer, 这个是把files转换成一个队列, 并且需要 tf.train.start_queue_runners 来启动队列;
tf.train.shuffle_batch 参数解释;
batch_size 批大小, 每次运行这个batch, 返回多少个数据;
num_threads 运行线程数, 在PAI上4个就好;
capacity 随机取文件范围, 比如你的数据集有10000个数据, 你想从5000个>数据中随机取, capacity就设置成5000;
min_after_dequeue 维持队列的最小长度, 这里只要注意不要大于capacity即可。

如果遇到不得不使用第三方库的情况:

如读取pkl、npy、tiff可以使用tf.gfile.Copy(FLAGS.buckets,'./文件名')从OSS拷贝到运行时目录 ('./') , 然后用直接用第三方库读取就可以。

文件写入

直接使用tf.gfile.FastGFile()写入

tf.gfile.FastGFile(FLAGS.checkpointDir + 'example.txt', 'wb').write('hello world')

通过tf.gfile.Copy()拷贝

tf.gfile.Copy('./example.txt', FLAGS.checkpointDir + 'example.txt')

通过这两种方法, 文件都会出现在 '输出目录/model/example.txt' 下

费用开支

这里只讨论读取文件所需要的费用开支

原则上来说, PAI不跨区域读取OSS是不收费的, 但是OSS的API是收费的。 PAI在使用 tf.gile.Glob 的时候会产生GET请求, 在写入tensorboard 的时候,也会产生PUT请求。 这两种请求都是按次收费的,具体价格如下:

标准型单价: 0.01元/万次

低频访问型单价: 0.1元/万次

归档型单价: 0.1元/万次

当数据集有几十万图片, 通过 tf.gile.Glob 一次就需要几毛钱, 所以减少费用开支的方法就是减少GET请求次数。

这里给出几种解决思路:

最好的解决思路, 把所有会使用到的数据, 一并上传传到OSS, 然后使用tensorflow拷贝到运行时目录, 最后通过tensorflow读取, 这样是最节省开支的.

通过tfrecords, 在本地, 提前把几十上百张图片通过tfrecords存下来, 这样读取的时候可以减少GET请求

把训练使用的图片随着代码的压缩包一起传上去, 不走OSS读取

三种方法都可以显著的减少开支.。

除此之外,插播一则天池相关的PAI-DSW产品GPU资源促销,感兴趣的同学抓紧戳!

使用注意

事实上, 每次读取传过来的地址就是 oss://你的buckets名字/XXX, 本以为不需要在PAI界面上设置, 直接读取这个目录就好, 事实上并不如此。

PAI没有权限读取不在数据源目录和输出目录下的文件, 所以在使用路径前, 确保他们已经在控制台右侧设置过。

image.png

另外如果需要写入文件到OSS, 可以使用 tf.gfile.fastGFile('OSS路径', 'wb').write('内容')

OSS路径推荐使用:FLAGS.checkpointDir以及FLAGS.summaryDIr这样的形式传入,经过测试,好像也只有这两个目录下有写权限;

FLAGS.buckets下所有文件夹都有读写权限。

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
14天前
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
51 3
|
1月前
|
机器学习/深度学习 并行计算 PyTorch
【机器学习】探索GRU:深度学习中门控循环单元的魅力
【机器学习】探索GRU:深度学习中门控循环单元的魅力
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能的未来:机器学习与深度学习的融合之旅
【9月更文挑战第35天】在这篇文章中,我们将深入探讨人工智能的两大支柱——机器学习和深度学习。我们将通过代码示例和实际应用案例,揭示它们如何相互补充,共同推动AI技术的发展。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启示。
57 0
|
4天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
25 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
4天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
19 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
4天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
22 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
20天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
65 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
1月前
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
63 2

热门文章

最新文章