mindspore.dataset.OBSMindDataset
- class mindspore.dataset.OBSMindDataset(dataset_files, server, ak, sk, sync_obs_path, columns_list=None, shuffle=Shuffle.GLOBAL, num_shards=None, shard_id=None, shard_equal_rows=True)[源代码]
读取和解析存放在华为云OBS、Minio以及AWS S3等云存储上的MindRecord格式数据集。生成的数据集的列名和列类型取决于MindRecord文件中的保存的列名与类型。
- 参数:
dataset_files (list[str]) - 云存储上MindRecord格式数据集文件的路径列表,每个文件的路径格式为s3://bucketName/objectKey。
server (str) - 连接云存储的服务地址。可包含协议类型、域名、端口号。 假如为华为云OBS,服务地址为:
<obs.cn-north-4.myhuaweicloud.com>
。 假如为Minio,服务地址为:<https://your-endpoint:9000>
。ak (str) - 用于访问OBS数据的访问密钥ID。
sk (str) - 用于访问OBS数据的私有访问密钥。
sync_obs_path (str) - 用于同步操作云存储上的路径,用户需要提前创建,目录路径的格式为s3://bucketName/objectKey。
columns_list (list[str],可选) - 指定从MindRecord文件中读取的数据列。默认值:
None
,读取所有列。shuffle (Union[bool,
Shuffle
], 可选) - 每个epoch中数据混洗的模式,支持传入bool类型与枚举类型进行指定。默认值:Shuffle.GLOBAL
。 如果 shuffle 为False
,则不混洗,如果 shuffle 为True
,等同于将 shuffle 设置为mindspore.dataset.Shuffle.GLOBAL
。 通过传入枚举变量设置数据混洗的模式:Shuffle.GLOBAL
:混洗文件和文件中的数据。Shuffle.FILES
:仅混洗文件。Shuffle.INFILE
:保持读入文件的序列,仅混洗每个文件中的数据。
num_shards (int, 可选) - 指定分布式训练时将数据集进行划分的分片数。默认值:
None
。shard_id (int, 可选) - 指定分布式训练时使用的分片ID号。默认值:
None
。只有当指定了 num_shards 时才能指定此参数。shard_equal_rows (bool, 可选) - 分布式训练时,为所有分片获取等量的数据行数。默认值:
True
。 如果 shard_equal_rows 为False,则可能会使得每个分片的数据条目不相等,从而导致分布式训练失败。 因此当每个MindRecord文件的数据数量不相等时,建议将此参数设置为True
。注意,只有当指定了 num_shards 时才能指定此参数。
- 异常:
RuntimeError - sync_obs_path 参数指定的目录不存在。
ValueError - columns_list 参数无效。
RuntimeError - 指定了 num_shards 参数,但是未指定 shard_id 参数。
RuntimeError - 指定了 shard_id 参数,但是未指定 num_shards 参数。
ValueError - 如果 shard_id 取值不在[0, num_shards )范围。
样例:
>>> import mindspore.dataset as ds >>> # OBS >>> bucket = "iris" # your obs bucket name >>> # the bucket directory structure is similar to the following: >>> # - imagenet21k >>> # | - mr_imagenet21k_01 >>> # | - mr_imagenet21k_02 >>> # - sync_node >>> dataset_obs_dir = ["s3://" + bucket + "/imagenet21k/mr_imagenet21k_01", ... "s3://" + bucket + "/imagenet21k/mr_imagenet21k_02"] >>> sync_obs_dir = "s3://" + bucket + "/sync_node" >>> num_shards = 8 >>> shard_id = 0 >>> dataset = ds.OBSMindDataset(dataset_obs_dir, "obs.cn-north-4.myhuaweicloud.com", ... "AK of OBS", "SK of OBS", ... sync_obs_dir, shuffle=True, num_shards=num_shards, shard_id=shard_id)
- 教程样例:
说明
需要用户提前在云存储上创建同步用的目录,然后通过 sync_obs_path 指定。
如果线下训练,建议为每次训练设置 BATCH_JOB_ID 环境变量。
分布式训练中,假如使用多个节点(服务器),则必须使用每个节点全部的8张卡。如果只有一个节点(服务器),则没有这样的限制。
预处理操作
对数据集对象执行给定操作函数。 |
|
对传入的多个数据集对象进行拼接操作。 |
|
通过自定义判断条件对数据集对象中的数据进行过滤。 |
|
对数据集对象中每一条数据执行给定的数据处理,并将结果展平。 |
|
给定一组数据增强列表,按顺序将数据增强作用在数据集对象上。 |
|
从数据集对象中选择需要的列,并按给定的列名的顺序进行排序。 |
|
对数据集对象按指定的列名进行重命名。 |
|
重复此数据集 count 次。 |
|
重置下一个epoch的数据集对象。 |
|
将数据处理管道中正处理的数据保存为通用的数据集格式。 |
|
通过创建 buffer_size 大小的缓存来混洗该数据集。 |
|
跳过此数据集对象的前 count 条数据。 |
|
将数据集拆分为多个不重叠的子数据集。 |
|
截取数据集的前指定条数据。 |
|
将多个dataset对象按列进行合并压缩,多个dataset对象不能有相同的列名。 |
Batch(批操作)
将数据集中连续 batch_size 条数据组合为一个批数据,并可通过可选参数 per_batch_map 指定组合前要进行的预处理操作。 |
|
根据数据的长度进行分桶。 |
|
将数据集中连续 batch_size 条数据组合为一个批数据,并可通过可选参数 pad_info 预先将样本补齐。 |
迭代器
基于数据集对象创建迭代器。 |
|
基于数据集对象创建迭代器。 |
数据集属性
获得数据集对象定义的批处理大小,即一个批处理数据中包含的数据条数。 |
|
获取类别名称到类别索引的映射字典。 |
|
返回数据集对象中包含的列名。 |
|
返回一个epoch中的batch数。 |
|
获取 RepeatDataset 中定义的repeat操作的次数。 |
|
获取/设置数据列索引,它表示使用下沉模式时数据列映射至网络中的对应关系。 |
|
获取数据集对象中所有样本的类别数目。 |
|
获取数据集对象中每列数据的shape。 |
|
获取数据集对象中每列数据的数据类型。 |
应用采样方法
为当前数据集添加子采样器。 |
|
替换当前数据集的最末子采样器,保持父采样器不变。 |
其他方法
将数据异步传输到Ascend/GPU设备上。 |
|
释放阻塞条件并使用给定数据触发回调函数。 |
|
为同步操作在数据集对象上添加阻塞条件。 |
|
将数据处理管道序列化为JSON字符串,如果提供了文件名,则转储到文件中。 |