构建 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 构建为例:
from bostorchconnector import BosMapDataset
# 填充 <BUCKET>、<PREFIX> 和对应的endpoint
DATASET_URI="bos://<BUCKET>/<PREFIX>"
ENDPOINT="http://bj.bcebos.com"
config = BosClientConfig(log_level=1)
map_dataset = BosMapDataset.from_prefix(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
# 随机读index=0的样本
item = map_dataset[0]
# 获取bucket、key、数据等信息
bucket = item.bucket
key = item.key
content = item.read()
len(content)
以 from_objects 构建为例:
from bostorchconnector import BosMapDataset
# 填充 <BUCKET>、ObjectName和对应的endpoint
DATASET_URIS = [
"bos://<BUCKET>/img001.jpg",
"bos://<BUCKET>/img002.jpg",
"bos://<BUCKET>/img003.jpg"
]
ENDPOINT="http://bj.bcebos.com"
config = BosClientConfig(log_level=1)
map_dataset = BosMapDataset.from_objects(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
# 随机读index=0的样本
item = map_dataset[0]
# 获取bucket、key、数据等信息
bucket = item.bucket
key = item.key
content = item.read()
len(content)
构建适用于流式顺序读取的BosIterableDataset
BosIterableDataset 适用于数据量大,需要顺序处理的数据集。
以 from_prefix 构建为例:
from bostorchconnector import BosIterableDataset
# 填充 <BUCKET>、ObjectName和对应的endpoint
DATASET_URI="bos://<BUCKET>/<PREFIX>"
ENDPOINT="http://bj.bcebos.com"
config = BosClientConfig(log_level=1)
iterable_dataset = BosIterableDataset.from_prefix(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
# BosIterableDataset是可迭代对象
for item in iterable_dataset:
data = item.read()
print(len(data))
print(item.key)
以 from_objects 构建为例:
from bostorchconnector import BosIterableDataset
# 填充 <BUCKET>、ObjectName和对应的endpoint
DATASET_URIS = [
"bos://<BUCKET>/img001.jpg",
"bos://<BUCKET>/img002.jpg",
"bos://<BUCKET>/img003.jpg"
]
ENDPOINT="http://bj.bcebos.com"
config = BosClientConfig(log_level=1)
iterable_dataset = BosIterableDataset.from_objects(DATASET_URI, endpoint=ENDPOINT, bos_client_config=config)
# BosIterableDataset是可迭代对象
for item in iterable_dataset:
data = item.read()
print(len(data))
print(item.key)