You need to enable JavaScript to run this app.
Torch Object Storage

Torch Object Storage

Copy page
Download PDF
TOS PyTorch Connector
Best practices
Copy page
Download PDF
Best practices
This topic outlines the standard programming template and provides recommendations for performance optimization and logging configuration for TOS PyTorch Connector.​
Standard programming template​
The TosMapDataset, TosIterableDataset, and TosCheckpoint classes all have __enter__ and __exit__ functions. We recommend using the context manager pattern and consistently handling TosException.​
​
from tostorchconnector import TosMapDataset, TosIterableDataset, TosCheckpoint, CredentialProvider, TosException​
​
# Dataset path​
dataset_uri = 'tos://bucket/prefix'​
checkpoint_uri = 'tos://bucket/key'​
region = 'cn-beijing'​
# TOS endpoint​
endpoint = 'http://tos-cn-beijing.ivolces.com'​
ak = '<your-access-key>'​
sk = '<your-secret-key>'​
​
# Use TosMapDataset​
try:​
with TosMapDataset.from_prefix(dataset_uri,​
region=region, endpoint=endpoint,​
cred=CredentialProvider(​
ak=ak,​
sk=sk)) as dataset:​
for item in dataset:​
print(item.key)​
except TosException as ex:​
print(str(ex))​
​
# Use TosIterableDataset​
try:​
with TosIterableDataset.from_prefix(dataset_uri,​
region=region, endpoint=endpoint,​
cred=CredentialProvider(​
ak=ak,​
sk=sk)) as dataset:​
for item in dataset:​
print(item.key)​
except TosException as ex:​
print(str(ex))​
​
# Use TosCheckpoint​
try:​
with TosCheckpoint(region, endpoint, cred=CredentialProvider(ak, sk)) as checkpoint:​
# Use TosObjectWriter​
with checkpoint.writer(checkpoint_uri) as writer:​
writer.write(b'hello')​
writer.write(b'world')​
​
# Use TosObjectReader​
with checkpoint.reader(checkpoint_uri) as reader:​
data = reader.read()​
assert data == b'helloworld'​
except TosException as ex:​
print(str(ex))​
​
Performance optimization​
  1. Large object read/write: Performance can be improved by configuring a higher concurrency level.​
  1. PyTorch dataset loading: Performance can be improved by configuring the preloading read concurrency.​
  1. Repeated reads: Performance can be improved by selecting a reader with a cache.​
tip​
  • ReaderType.SEQUENTIAL: A reader that caches all data. It is ideal for repeatedly reading the same object.​
  • ReaderType.RANGED: A reader that only caches data up to the block size. This type of reader is suitable for scenarios where a single object is read repeatedly in small chunks, and where memory cache size needs to be controlled.​
  • ReaderType.DIRECT: A reader without a cache. It is suitable for one-time read scenarios.​
​
​
from tostorchconnector import CredentialProvider, TosClientConfig, ReaderType, TosIterableDataset, TosCheckpoint​
​
region = 'cn-beijing'​
# TOS endpoint​
endpoint = 'http://tos-cn-beijing.ivolces.com'​
ak = '<your-access-key>'​
sk = '<your-secret-key>'​
​
#1. Large object read/write​
shared_prefetch_tasks = 200​
shared_upload_part_tasks = 200​
with TosCheckpoint(region, endpoint, cred=CredentialProvider(ak, sk), ​
client_conf=TosClientConfig(shared_prefetch_tasks=shared_prefetch_tasks,​
shared_upload_part_tasks=shared_upload_part_tasks)) as checkpoint:​
pass ​
​
#2. PyTorch dataset loading​
dataset_uri = 'tos://bucket/prefix'​
prefetch_concurrency = 256​
with TosIterableDataset.from_prefix(dataset_uri, region=region, endpoint=endpoint, cred=CredentialProvider(ak=ak, sk=sk), prefetch_concurrency=prefetch_concurrency) as dataset:​
pass​
​
#3. Repeated reads​
checkpoint_uri = 'tos://bucket/key'​
with TosCheckpoint(region, endpoint, cred=CredentialProvider(ak, sk)) as checkpoint:​
with checkpoint.reader(checkpoint_uri, reader_type=ReaderType.SEQUENTIAL) as reader:​
pass​
​
with TosIterableDataset.from_prefix(dataset_uri, region=region, endpoint=endpoint, cred=CredentialProvider(ak=ak, sk=sk), reader_type=ReaderType.SEQUENTIAL) as dataset:​
pass​
​
Logging configuration​
TOS PyTorch Connector offers daily log rotation, which can be activated using tostorchconnector.init_log, as demonstrated below.​
​
from tostorchconnector import init_log​
# Log level​
level = 'info'​
# Log directory​
directory = 'logs' ​
# Log file prefix​
file_name_prefix = 'connector'​
init_log(level, directory, file_name_prefix)​
​
In multi-process data loading scenarios, logging must be initialized independently for each worker process when it starts. To do so, configure logging for each process using the worker_init_fn function, as demonstrated below.​
​
from tostorchconnector import TosMapDataset, CredentialProvider, init_log​
​
region = 'cn-beijing'​
# TOS endpoint​
endpoint = 'http://tos-cn-beijing.ivolces.com'​
ak = '<your-access-key>'​
sk = '<your-secret-key>'​
dataset_uri = 'tos://bucket/prefix'​
​
def transform(item):​
data = item.read()​
return item.key, item.size​
​
def worker_init_fn(x):​
init_log('info', 'logs', 'connector.log')​
​
with TosMapDataset.from_prefix(dataset_uri, region=region, endpoint=endpoint,​
cred=CredentialProvider(ak, sk),​
transform=transform) as dataset:​
train_loader = DataLoader(dataset=dataset, batch_size=256, num_workers=32,​
shuffle=True, worker_init_fn=worker_init_fn)​
for data in train_loader:​
print(data)​
​
​
Last updated: 2026.03.23 11:37:42