Higher-Level Libraries

The MSC adapters for higher-level libraries use shortcuts under the hood.

fsspec

multistorageclient.async_fs aliases the multistorageclient.contrib.async_fs module.

This module provides the multistorageclient.contrib.async_fs.MultiStorageAsyncFileSystem class which implements fsspec’s AsyncFileSystem class.

Note

The msc:// protocol is automatically registered when pip install multi-storage-client is run.

 1import multistorageclient as msc
 2
 3# Create an MSC-based AsyncFileSystem instance.
 4fs = msc.async_fs.MultiStorageAsyncFileSystem()
 5
 6# Create a client for the data-s3-iad profile and open a file.
 7file = fs.open("msc://data-s3-iad/animal-photos/red-panda.png")
 8
 9# Reuse the client for the data-s3-iad profile and download a file.
10fs.get_file(
11    rpath="msc://data-s3-iad/animal-photos/red-panda.png",
12    lpath="/tmp/animal-photos/red-panda.png"
13)

Hydra

The MSC Hydra plugin enables loading Hydra configurations directly from object storage using msc:// URLs.

Note

The plugin is automatically registered by Hydra when both multistorageclient and hydra-core are installed.

Programmatic usage.
import hydra
import multistorageclient as msc
from omegaconf import DictConfig

# Load config directly from object storage
@hydra.main(version_base=None, config_path="msc://profile/configs", config_name="training")
def your_app(cfg: DictConfig) -> None:
    print(f"Loaded config: {cfg}")
Shell usage.
python your_app.py --config-path="msc://profile/configs" --config-name=training

NumPy

multistorageclient.numpy aliases the multistorageclient.contrib.numpy module.

This module provides load, memmap, and save methods for loading and saving NumPy arrays.

 1import multistorageclient as msc
 2import numpy
 3
 4# Create a client for the data-s3-iad profile and load an array.
 5array = msc.numpy.load("msc://data-s3-iad/numpy-arrays/ndarray-1.npz")
 6
 7# Reuse the client for the data-s3-iad profile and load a memory-mapped array.
 8mmarray = msc.numpy.memmap("msc://data-s3-iad/numpy-arrays/ndarray-1.bin")
 9
10# Reuse the client for the data-s3-iad profile and save an array.
11msc.numpy.save(
12    "msc://data-s3-iad/numpy-arrays/ndarray-2.npy",
13    numpy.array([1, 2, 3, 4, 5], dtype=numpy.int32)
14)

PyTorch

multistorageclient.torch aliases the multistorageclient.contrib.torch module.

This module provides load and save methods for loading and saving PyTorch data.

 1import multistorageclient as msc
 2import torch
 3
 4# Create a client for the data-s3-iad profile and load a tensor.
 5tensor = msc.torch.load("msc://data-s3-iad/pytorch-tensors/tensor-1.pt")
 6
 7# Reuse the client for the data-s3-iad profile and save a tensor.
 8msc.torch.save(
 9    torch.tensor([1, 2, 3, 4]),
10    "msc://data-s3-iad/pytorch-tensors/tensor-2.pt"
11)

In addition to the load and save methods, the torch module provides the MultiStorageFileSystemReader and MultiStorageFileSystemWriter classes for reading and writing PyTorch objects to multiple storage backends.

 1import multistorageclient as msc
 2import torch
 3import torch.distributed.checkpoint as dcp
 4
 5# Create a MultiStorageFileSystemWriter for the data-s3-iad profile.
 6writer = msc.torch.MultiStorageFileSystemWriter("msc://data-s3-iad/checkpoint/1")
 7dcp.save(
 8    state_dict=state_dict,
 9    storage_writer=writer,
10)
11
12# Create a MultiStorageFileSystemReader for the data-s3-iad profile.
13reader = msc.torch.MultiStorageFileSystemReader("msc://data-s3-iad/checkpoint/1")
14dcp.load(
15    state_dict=loaded_state_dict,
16    storage_reader=reader,
17)

Xarray

Xarray supports msc:// URLs through MSC’s built-in fsspec implementation. Use the native Xarray API directly.

1import xarray
2
3# Load a Zarr array through MSC's fsspec implementation.
4xarray_dataset = xarray.open_zarr("msc://data-s3-iad/abc.zarr")

Warning

The former msc.xarray adapter is no longer available. Replace msc.xarray.open_zarr("msc://...") with xarray.open_zarr("msc://...").

Zarr

Zarr supports msc:// URLs through MSC’s built-in fsspec implementation. Use the native Zarr API directly.

1import zarr
2
3# Load a Zarr array through MSC's fsspec implementation.
4z = zarr.open("msc://data-s3-iad/abc.zarr", mode="r")

Note

The former msc.zarr adapter is no longer available. Replace msc.zarr.open_consolidated("msc://...") with zarr.open("msc://...").

Path

multistorageclient.Path aliases the multistorageclient.pathlib.MultiStoragePath class.

This module provides the Path class for working with paths in a way similar to pathlib.Path.

 1import multistorageclient as msc
 2
 3# Create a Path object for a file in the data-s3-iad profile
 4path = msc.Path("msc://data-s3-iad/data/file.txt")
 5
 6# Get parent directory
 7parent = path.parent  # msc://data-s3-iad/data
 8
 9# Get file name
10name = path.name  # file.txt
11
12# Join paths
13new_path = path.parent / "other.txt"  # msc://data-s3-iad/data/other.txt
14
15# Check if path exists
16exists = path.exists()
17
18# List contents of a directory
19for child in msc.Path("msc://data-s3-iad/data").iterdir():
20    print(child)
21
22# Find files matching a pattern
23for matched in msc.Path("msc://data-s3-iad/data").glob("*.txt"):
24    print(matched)
25
26# Sort paths for deterministic processing
27paths = sorted(msc.Path("msc://data-s3-iad/data").glob("*.txt"))

Note

The Path class implements much of the same interface as pathlib.Path, making it familiar to use while working with remote storage.