构建 Dataset
更新时间:2025-01-10
bostorchconnector 当前支持两种 dataset:
- BosMapDataset:继承自torch.utils.data.Dataset
- BosIterableDataset:继承自torch.utils.data.IterableDataset
两种 dataset 均支持以下两种方式构建:
- from_prefix:通过存储前缀构建
- from_objects:通过已知的object列表构建
构建dataset时候的bos_client_config配置参数如下:
配置项 | 默认值 | 说明 |
---|---|---|
credentials_path | "~/.baidubce/credentials" | 存储访问凭证ak/sk的路径 |
log_level | 1 | 日志级别,默认是INFO级别。0表示DEBUG;1表示INFO;2表示WARN;3表示ERROR:4表示FATAL; |
log_path | "/tmp/bostorchconnector/sdk.log" | 日志存储路径 |
part_size | 8388608 | 分块上传时的分块大小,默认8MB |
prefect_limit_mb | 4096 | 预取缓存限制,单位MB,默认4096MB |
构建适用于随机读取的BosMapDataset
BosMapDataset 适用于数据量不大,需要随机访问的数据集。
以 from_prefix 构建为例:
Bash
1from bostorchconnector import BosMapDataset
2
3# 填充 <BUCKET>、<PREFIX> 和对应的endpoint
4DATASET_URI="bos://<BUCKET>/<PREFIX>"
5ENDPOINT="http://bj.bcebos.com"
6config = BosClientConfig(log_level=1)
7
8map_dataset = BosMapDataset.from_prefix(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
9
10# 随机读index=0的样本
11item = map_dataset[0]
12
13# 获取bucket、key、数据等信息
14bucket = item.bucket
15key = item.key
16content = item.read()
17len(content)
以 from_objects 构建为例:
Bash
1from bostorchconnector import BosMapDataset
2
3# 填充 <BUCKET>、ObjectName和对应的endpoint
4DATASET_URIS = [
5 "bos://<BUCKET>/img001.jpg",
6 "bos://<BUCKET>/img002.jpg",
7 "bos://<BUCKET>/img003.jpg"
8]
9ENDPOINT="http://bj.bcebos.com"
10config = BosClientConfig(log_level=1)
11
12map_dataset = BosMapDataset.from_objects(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
13
14# 随机读index=0的样本
15item = map_dataset[0]
16
17# 获取bucket、key、数据等信息
18bucket = item.bucket
19key = item.key
20content = item.read()
21len(content)
构建适用于流式顺序读取的BosIterableDataset
BosIterableDataset 适用于数据量大,需要顺序处理的数据集。
以 from_prefix 构建为例:
Bash
1from bostorchconnector import BosIterableDataset
2
3# 填充 <BUCKET>、ObjectName和对应的endpoint
4DATASET_URI="bos://<BUCKET>/<PREFIX>"
5ENDPOINT="http://bj.bcebos.com"
6config = BosClientConfig(log_level=1)
7
8iterable_dataset = BosIterableDataset.from_prefix(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
9
10# BosIterableDataset是可迭代对象
11for item in iterable_dataset:
12 data = item.read()
13 print(len(data))
14 print(item.key)
以 from_objects 构建为例:
Bash
1from bostorchconnector import BosIterableDataset
2
3# 填充 <BUCKET>、ObjectName和对应的endpoint
4DATASET_URIS = [
5 "bos://<BUCKET>/img001.jpg",
6 "bos://<BUCKET>/img002.jpg",
7 "bos://<BUCKET>/img003.jpg"
8]
9ENDPOINT="http://bj.bcebos.com"
10config = BosClientConfig(log_level=1)
11
12iterable_dataset = BosIterableDataset.from_objects(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
13
14# BosIterableDataset是可迭代对象
15for item in iterable_dataset:
16 data = item.read()
17 print(len(data))
18 print(item.key)