Use o SDK do OSS para Python ou a API do OSS para Python para ler e gravar dados do Object Storage Service (OSS) no DSW.
Recomendações
Para acesso frequente a grandes volumes de dados, registre o OSS como um conjunto de dados e monte-o. Para acessos eventuais ou dependentes de lógica, use os métodos de SDK e API descritos neste tópico.
Uso do SDK do OSS para Python
O DSW inclui o pacote Python oss2. Para ler e gravar dados no OSS:
-
Autentique-se e inicialize o cliente.
import oss2 auth = oss2.Auth('<your_AccessKey_ID>', '<your_AccessKey_Secret>') bucket = oss2.Bucket(auth, '<your_oss_endpoint>', '<your_bucket_name>')Substitua os seguintes espaços reservados.
Parâmetro
Descrição
<your_AccessKey_ID> e <your_AccessKey_Secret>
O AccessKey ID e o AccessKey secret da sua conta Alibaba Cloud. Para mais informações, consulte Criar um AccessKey.
<your_oss_endpoint>
O endpoint do OSS. Selecione o endpoint correspondente à região da sua instância:
-
Instâncias de pagamento conforme o uso na região China (Pequim):
oss-cn-beijing.aliyuncs.com -
Instâncias de assinatura na região China (Pequim):
oss-cn-beijing-internal.aliyuncs.com -
Instâncias GPU P100 ou CPU na região China (Xangai):
oss-cn-shanghai.aliyuncs.com -
Instâncias GPU M40 na região China (Xangai):
oss-cn-shanghai-internal.aliyuncs.com
<your_bucket_name>
Nome do bucket, sem o prefixo
oss://. -
-
Leia e grave dados no OSS.
# Read a complete file. result = bucket.get_object('<your_file_path/your_file>') print(result.read()) # Read data by range. result = bucket.get_object('<your_file_path/your_file>', byte_range=(0, 99)) # Write data to OSS. bucket.put_object('<your_file_path/your_file>', '<your_object_content>') # Append data to a file. result = bucket.append_object('<your_file_path/your_file>', 0, '<your_object_content>') result = bucket.append_object('<your_file_path/your_file>', result.next_position, '<your_object_content>')Substitua estes espaços reservados:
<your_file_path/your_file>: Caminho do arquivo a ser lido ou gravado.<your_object_content>: Conteúdo a ser gravado ou anexado.
Uso da API do OSS para Python
O DSW fornece a API do OSS para Python, permitindo que usuários do PyTorch leiam e gravem dados no OSS diretamente.
Armazene dados de treinamento ou modelos no OSS:
-
Carregar dados de treinamento
Armazene os dados em um bucket do OSS com um arquivo de índice que mapeia caminhos para rótulos. Crie um
Datasetpersonalizado para usar a APIDataLoaderdo PyTorch e habilitar leituras paralelas multiprocesso. Exemplo:import io import oss2 import PIL import torch class OSSDataset(torch.utils.data.dataset.Dataset): def __init__(self, endpoint, bucket, auth, index_file): self._bucket = oss2.Bucket(auth, endpoint, bucket) self._indices = self._bucket.get_object(index_file).read().split(',') def __len__(self): return len(self._indices) def __getitem__(self, index): img_path, label = self._indices(index).strip().split(':') img_str = self._bucket.get_object(img_path) img_buf = io.BytesIO() img_buf.write(img_str.read()) img_buf.seek(0) img = Image.open(img_buf).convert('RGB') img_buf.close() return img, label dataset = OSSDataset(endpoint, bucket, auth, index_file) data_loader = torch.utils.data.DataLoader( dataset, batch_size=batch_size, num_workers=num_loaders, pin_memory=True)Substitua os seguintes espaços reservados:
endpoint: Endpoint do OSS.bucket: Nome do bucket.auth: Objeto de autenticação.index_file: Caminho para o arquivo de índice.
NotaFormato do arquivo de índice: vírgulas (,) separam as amostras e dois pontos (:) separam o caminho do rótulo.
-
Salvar ou carregar um modelo
Salve ou carregue um modelo PyTorch usando a API Python
oss2. Tutorial de serialização do PyTorch.-
Salvar um modelo
from io import BytesIO import torch import oss2 # Specify the Bucket name. bucket_name = "<your_bucket_name>" bucket = oss2.Bucket(auth, endpoint, bucket_name) buffer = BytesIO() torch.save(model.state_dict(), buffer) bucket.put_object("<your_model_path>", buffer.getvalue())Substitua os seguintes espaços reservados:
auth: Objeto de autenticação.endpoint: Endpoint do OSS.<your_bucket_name>: Nome do bucket do OSS, sem o prefixooss://.<your_model_path>: Caminho de destino do modelo no bucket.
-
Carregar um modelo
from io import BytesIO import torch import oss2 bucket_name = "<your_bucket_name>" bucket = oss2.Bucket(auth, endpoint, bucket_name) buffer = BytesIO(bucket.get_object("<your_model_path>").read()) model.load_state_dict(torch.load(buffer))Substitua os seguintes espaços reservados:
auth: Objeto de autenticação.endpoint: Endpoint do OSS.<your_bucket_name>: Nome do bucket do OSS, sem o prefixooss://.<your_model_path>: Caminho do modelo no bucket.
-