petastorm是一个库,允许使用来自tensorflow、pytorch和其他基于python的ml培训框架的拼花存储。

petastorm的Python项目详细描述


petastorm

构建状态(travis ci)代码覆盖率license最新版本

内容

petastorm是uber atg开发的一个开源数据访问库。此库启用单机或 apache parquet中直接从数据集获取深度学习模型的分布式训练与评估 格式。petastorm支持流行的基于python的机器学习(ml)框架,如 tensorflow pytorch ,以及 pyspark 。它也可以从纯python代码中使用。

文档网站:https://petastorm.readthedocs.io rel="nofollow">https://petastorm.readthedocs.io

安装

pip install petastorm

有几个由 petastorm 包定义的额外依赖项没有自动安装。 额外费用包括: tf tf_gpu torch opencv docs test

例如,要触发tensorflow和opencv的gpu版本的安装,请使用以下pip命令:

pip install petastorm[opencv,tf_gpu]

生成数据集

使用petastorm创建的数据集以apache parquet格式存储。 在拼花模式之上,petastorm还存储更高级别的模式信息,使多维数组成为petastorm数据集的本机部分。

petastorm支持可扩展的数据编解码器。用户可以使用其中一种标准数据压缩(jpeg、png)或实现自己的压缩。

使用pyspark生成数据集。 Pyspark本机支持拼花格式,使其易于在单机或spark计算集群上运行。 下面是一个简单的例子,用一些随机数据写出一个表格。

HelloWorldSchema=Unischema('HelloWorldSchema',[UnischemaField('id',np.int32,(),ScalarCodec(IntegerType()),False),UnischemaField('image1',np.uint8,(128,256,3),CompressedImageCodec('png'),False),UnischemaField('other_data',np.uint8,(None,128,30,None),NdarrayCodec(),False),])defrow_generator(x):"""Returns a single entry in the generated dataset. Return a bunch of random values as an example."""return{'id':x,'image1':np.random.randint(0,255,dtype=np.uint8,size=(128,256,3)),'other_data':np.random.randint(0,255,dtype=np.uint8,size=(4,128,30,3))}defgenerate_hello_world_dataset(output_url='file:///tmp/hello_world_dataset'):rows_count=10rowgroup_size_mb=256spark=SparkSession.builder.config('spark.driver.memory','2g').master('local[2]').getOrCreate()sc=spark.sparkContext# Wrap dataset materialization portion. Will take care of setting up spark environment variables as# well as save petastorm specific metadatawithmaterialize_dataset(spark,output_url,HelloWorldSchema,rowgroup_size_mb):rows_rdd=sc.parallelize(range(rows_count))\
           .map(row_generator)\
           .map(lambdax:dict_to_spark_row(HelloWorldSchema,x))spark.createDataFrame(rows_rdd,HelloWorldSchema.as_spark_schema()) \
           .coalesce(10) \
           .write \
           .mode('overwrite') \
           .parquet(output_url)
  • helloworldschema是unischema对象的一个实例。 Unischema能够将其字段的类型呈现为不同的 特定于框架的格式,例如:spark structtype ,tensorflow tf.dtype 和numpy numpy.dtype
  • 要定义数据集字段,需要指定一个 类型 形状 ,一个 编解码器 实例以及该字段对于 Unischema公司
  • 我们使用pyspark来编写输出拼花文件。在本例中,我们启动 本地盒上的pyspark( .master('local[2]') )。当然是更大的 缩放数据集生成我们需要一个真正的计算集群。
  • 我们用 物化数据集包装spark数据集生成代码 上下文管理器。上下文管理器负责配置行 开始时分组大小,并在 结束,
  • 行生成代码应返回由 字段名。为此,我们使用 行生成器 函数。
  • dict_to_spark_row 将字典转换为 pyspark.row 对象,同时确保模式符合性(shape, 测试类型和为空条件。
  • 一旦我们有了一个 pyspark.dataframe 存储。拼花模式自动从 HelloWorldSchema

纯python api

petastorm.reader.reader类是用户的主要入口点 从ml框架(如tensorflow或pytorch)访问数据的代码。 阅读器有多种功能,如:

  • 选择性列读数
  • 多并行策略:线程、进程、单线程(用于调试)
  • N-grams读数支持
  • 行筛选(行谓词)
  • 洗牌
  • 多GPU训练的分区
  • 本地缓存

使用可以使用 petastorm.make戋reader 工厂方法:

frompetastormimportmake_readerwithmake_reader('hdfs://myhadoop/some_dataset')asreader:forrowinreader:print(row)

hdfs://… 文件://… 是受支持的url协议。

一旦 reader 被实例化,就可以将其用作迭代器。

TensorFlow API的

要将读取器连接到tensorflow图中,可以使用 tf\u张量 功能:

withmake_reader('file:///some/localpath/a_dataset')asreader:row_tensors=tf_tensors(reader)withtf.Session()assession:for_inrange(3):print(session.run(row_tensors))

或者,您可以使用新的 tf.data.dataset api;

withmake_reader('file:///some/localpath/a_dataset')asreader:dataset=make_petastorm_dataset(reader)iterator=dataset.make_one_shot_iterator()tensor=iterator.get_next()withtf.Session()assess:sample=sess.run(tensor)print(sample.id)

Pythorch API

如所示 pytorch_example.py , 从pytorch读取petastorm数据集 可以通过适配器类petastorm.pytorch.dataloader来完成, 它允许提供自定义pytorch排序功能和转换。

确保已安装 手电筒 手电筒视野

pip install torchvision

下面的最简示例假设一个 net 类的定义 train test 函数,包含在 pytorch示例中

importtorchfrompetastorm.pytorchimportDataLoadertorch.manual_seed(1)device=torch.device('cpu')model=Net().to(device)optimizer=torch.optim.SGD(model.parameters(),lr=0.01,momentum=0.5)def_transform_row(mnist_row):transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,),(0.3081,))])return(transform(mnist_row['image']),mnist_row['digit'])transform=TransformSpec(_transform_row,removed_fields=['idx'])withDataLoader(make_reader('file:///localpath/mnist/train',num_epochs=10,transform_spec=transform),batch_size=64)astrain_loader:train(model,device,train_loader,10,optimizer,1)withDataLoader(make_reader('file:///localpath/mnist/test',num_epochs=10,transform_spec=transform),batch_size=1000)astest_loader:test(model,device,test_loader)

pyspark和sql

使用spark本机支持的拼花数据格式,可以使用广泛的spark 用于分析和操作数据集的工具。下面的示例演示如何读取petastorm数据集 作为Spark RDD对象:

# Create a dataframe object from a parquet filedataframe=spark.read.parquet(dataset_url)# Show a schemadataframe.printSchema()# Count alldataframe.count()# Show a single columndataframe.select('id').show()

SQL可用于o查询petastorm数据集:

pip install petastorm
0

您可以在这里找到完整的代码示例: pyspark庀hello庀world.py

非Petastorm拼花店

petastorm还可以直接从apache拼花店读取数据。为了达到这个目的,使用 制作批处理读取器 (而不是 制作读取器 )。下表总结了不同之处 制作批处理读取器 制作读取器 功能。

<表> < COLGROUP > < COL/> < COL/> <广告> 使读卡器 制作批处理读取器 < /广告> <正文> 仅Petastorm数据集(使用物化数据集创建) 任何拼花店(一些本地拼花柱类型 尚不支持。 读取器一次返回一条记录。 读取器返回一批记录。的大小 批处理不是固定的,由拼花行组定义 大小: 传递给 make-reader的谓词按单行计算。 传递给 make_batch_reader的谓词按批计算。 <表>

故障排除

请参见故障排除页面,如果您找不到 答:

出版物

  1. gruener,r.,cheng,o.,和litvin,y.(2018) 介绍petastorm:uber-atg用于深度学习的数据访问库 。网址:https://eng.uber.com/petastorm/" rel="nofollow">https://eng.uber.com/petastorm/
  2. < > >

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java组织。百里香。模板模式。无法解析StandardTemplateModeHandler   java标记声明必须格式良好   如何通过maven插件设置Java/Scala测试的系统属性?   在Maven、Eclipse和Glassfish中自动部署更改的java代码   字节数组的java计算SHA1   java我在使用Optional时遇到找不到错误。朱尼特·莫基托   java如何从Jackson@JsonCreator构造函数访问Spring引导环境变量   java Android两个ListView两个ListListener   查询优化如何使用高斯分布在道路网络图中创建距离,最好在Java中模拟真实世界场景?   java如何在生产环境中运行spring boot可执行jar?   tomcat是一个简单的Java服务器,用于侦听客户端并将[302]重定向到其他站点   java中的Foreach循环   web服务Java writeBytes空白被“+”替换   在64位Windows中使用32位Java的jvm   java将在Android中指向同一个意图/活动的“实例”   java对于更大的数字,什么是int的替代方案?   使用tomcat 6.0和java 1.6配置commons DBCP的数据库   java如何使用:jsoup中的空伪选择器   java Kafka本地状态存储是否消耗应用程序内存(JVM)   java如何提高Android Opencv摄像头FPS?