日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

讀寫(xiě)OSS數(shù)據(jù)

本文為您介紹如何使用OSS Python SDK及OSS Python API讀寫(xiě)OSS數(shù)據(jù)。

背景信息

對(duì)象存儲(chǔ)OSS(Object Storage Service)是阿里云提供的海量、安全、低成本及高可靠性的云存儲(chǔ)服務(wù)。DSW不僅預(yù)置NAS文件系統(tǒng),而且對(duì)接OSS存儲(chǔ)。

如果您需要頻繁訪問(wèn)和處理大規(guī)模數(shù)據(jù),推薦您在創(chuàng)建DSW實(shí)例時(shí)將OSS注冊(cè)為數(shù)據(jù)集,然后掛載該數(shù)據(jù)集;如果您只需要臨時(shí)訪問(wèn)OSS數(shù)據(jù),或者根據(jù)業(yè)務(wù)邏輯來(lái)決定是否訪問(wèn)OSS,可采用更靈活的方式,比如SDK和API方式。

OSS Python SDK

通常,您可以直接使用OSS的Python API讀寫(xiě)OSS中的數(shù)據(jù),詳情請(qǐng)參見(jiàn)OSS2 Package

DSW已預(yù)裝OSS2 Python包,您可以參見(jiàn)如下方法讀寫(xiě)OSS數(shù)據(jù)。

  1. 鑒權(quán)及初始化。

    import oss2
    auth = oss2.Auth('<your_AccessKey_ID>', '<your_AccessKey_Secret>')
    bucket = oss2.Bucket(auth, 'http://oss-cn-beijing-internal.aliyuncs.com', '<your_bucket_name>')

    需要根據(jù)實(shí)際需要修改以下參數(shù)。

    參數(shù)

    描述

    <your_AccessKey_ID>

    阿里云的AccessKey ID。

    <your_AccessKey_Secret>

    阿里云的AccessKey Secret。

    http://oss-cn-beijing-internal.aliyuncs.com

    OSS域名。需要根據(jù)實(shí)例的地域選擇對(duì)應(yīng)的OSS域名:

    • 華北2(北京)后付費(fèi)實(shí)例:oss-cn-beijing.aliyuncs.com

    • 華北2(北京)預(yù)付費(fèi)實(shí)例:oss-cn-beijing-internal.aliyuncs.com

    • 華東2(上海)GPU P100實(shí)例或CPU實(shí)例:oss-cn-shanghai.aliyuncs.com

    • 華東2(上海)GPU M40實(shí)例:oss-cn-shanghai-internal.aliyuncs.com

    <your_bucket_name>

    Bucket名稱(chēng),且開(kāi)頭不帶oss://

  2. 讀寫(xiě)OSS數(shù)據(jù)。

    #讀取一個(gè)完整文件。
    result = bucket.get_object('<your_file_path/your_file>')
    print(result.read())
    #按Range讀取數(shù)據(jù)。
    result = bucket.get_object('<your_file_path/your_file>', byte_range=(0, 99))
    #寫(xiě)數(shù)據(jù)至OSS。
    bucket.put_object('<your_file_path/your_file>', '<your_object_content>')
    #對(duì)文件進(jìn)行Append。
    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>')

    其中<your_file_path/your_file>表示待讀寫(xiě)的文件路徑,<your_object_content>表示待Append的內(nèi)容,需要根據(jù)實(shí)際情況修改。

OSS Python API

對(duì)于PyTorch用戶(hù),DSW提供OSS Python API,用于直接讀寫(xiě)OSS數(shù)據(jù)。

您可以在OSS存儲(chǔ)訓(xùn)練數(shù)據(jù)或模型:

  • 加載訓(xùn)練數(shù)據(jù)

    您可以將數(shù)據(jù)存放在一個(gè)OSS Bucket中,且將數(shù)據(jù)路徑和對(duì)應(yīng)的Label存儲(chǔ)在同一個(gè)OSS Bucket的索引文件中。通過(guò)自定義DataSet,在PyTorch中使用DataLoader API多進(jìn)程并行讀取數(shù)據(jù),示例如下。

    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)

    其中endpoint為OSS域名,bucket為Bucket名稱(chēng),auth為鑒權(quán)對(duì)象,index_file為索引文件的路徑,都需要根據(jù)實(shí)際情況修改。

    說(shuō)明

    示例中,索引文件格式為每條樣本使用英文逗號(hào)(,)分隔,樣本路徑與Label之間使用英文冒號(hào)(:)分隔。

  • Save或Load模型

    您可以使用OSS2 Python API Save或Load PyTorch模型(關(guān)于PyTorch如何Save或Load模型,詳情請(qǐng)參見(jiàn)PyTorch),示例如下:

    • Save模型

      from io import BytesIO
      import torch
      import oss2
      # 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())

      其中endpoint為OSS域名,<your_bucket_name>為OSS Bucket名稱(chēng),且開(kāi)頭不帶oss://auth為鑒權(quán)對(duì)象,<your_model_path>為模型路徑,都需要根據(jù)實(shí)際情況修改。

    • Load模型

      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))

      其中endpoint為OSS域名,<your_bucket_name>為OSS Bucket名稱(chēng),且開(kāi)頭不帶oss://auth為鑒權(quán)對(duì)象,<your_model_path>為模型路徑,都需要根據(jù)實(shí)際情況修改。