全部產品
Search
文件中心

Object Storage Service:使用OSS加速器

更新時間:Nov 01, 2024

OSS加速器能夠與各類OSS常用工具以及OSS SDK相配合,實現高效的資料上傳和下載等操作。本文將為您介紹OSS相關常用工具和OSS SDK如何進行配置並使用OSS加速器。

方案概覽

通過OSS加速器實現毫秒級響應、低延遲以及高輸送量的資料訪問,有以下四種方案:

  1. ossutil使用OSS加速器:在ossutil的設定檔ossutilconfig中,通過添加OSS加速器網域名稱,完成加速器的配置。

  2. ossfs使用OSS加速器:使用ossfs掛載遠程Bucket時,在掛載命令中添加OSS加速器網域名稱,完成加速器的配置。

  3. OSS Connector for AI/ML使用OSS加速器:使用OSS Connector構建資料集時,通過endpoint參數將OSS加速器網域名稱注入,完成加速器的配置。

  4. OSS SDK使用OSS加速器:以Java SDK為例,在初始化ossClient時通過endpoint參數,將OSS加速器網域名稱注入,完成加速器的配置。

重要

使用OSS加速器時,請注意將訪問網域名稱填寫為OSS加速器網域名稱。例如:

  • 在配置ossutil時,將endpoint參數值替換為OSS加速器網域名稱。

  • ossfs掛載本地檔案系統時,將-ourl參數填寫為OSS加速器網域名稱。

前提條件

  • 已建立OSS加速器。具體操作,請參見建立加速器

  • OSS加速器功能目前在華東1(杭州)、華東2(上海)、華北2(北京)、華北6(烏蘭察布)、華南1(深圳)、新加坡地區公測。

方案一:ossutil使用OSS加速器

ossutil使用OSS加速器

以下內容以Linux x86 64bit環境為例進行安裝介紹。其他系統下載安裝,請參見安裝ossutil

  1. 安裝ossutil。

    1. 下載ossutil壓縮包。

      curl -o ossutil-2.0.3-beta.09261200-linux-amd64.zip https://gosspublic.alicdn.com/ossutil/v2-beta/2.0.3-beta.09261200/ossutil-2.0.3-beta.09261200-linux-amd64.zip
    2. 在軟體包所在目錄,執行以下解壓命令。

      unzip ossutil-2.0.3-beta.09261200-linux-amd64.zip
    3. 進入所在目錄,執行以下命令。

      chmod 755 ossutil
    4. 在目前的目錄執行以下命令,實現ossutil的全域調用。

      sudo mv ossutil /usr/local/bin/ && sudo ln -s /usr/local/bin/ossutil /usr/bin/ossutil
    5. 繼續執行以下命令,如果能返回版本號碼,說明安裝成功。

      ossutil version
  2. 配置ossutil並添加OSS加速器網域名稱。

    1. 建立ossutil設定檔,檔案路徑和檔案名稱可自訂。

      touch ossutilconfig
    2. 添加配置並儲存。關於ossutil更多配置,請參見配置ossutil

      #[profile dev]                 節名稱,dev可自訂其名稱。
      #accessKeyId、accessKeySecret  RAM使用者AK、SK。 
      #region                        目標bucket所處地區。
      #buckets=dev-bucket            引用節名稱為dev-bucket中的參數。
      #[buckets dev-bucket]          節名稱,dev-bucket可自訂其名稱。
      #bucketname                    目標bucket名稱。 
      #endpoint                      OSS加速器網域名稱。 
      
      [profile dev]
      accessKeyId=LTA*********************ICT
      accessKeySecret=V0qK**********************OOKp
      region=cn-hangzhou
      buckets=dev-bucket
      
      [buckets dev-bucket]
      bucket-name =
      #請填入OSS加速器網域名稱。
        endpoint=cn-hangzhou-internal.oss-data-acc.aliyuncs.com
  3. 使用OSS加速器。

    由於在ossutil配置了OSS加速器,以下樣本將更快速從bucket內下載檔案到目前的目錄test下。關於ossutil更多命令操作,請參見ossutil命令

    其中cp為下載命令,-r參數對bucket-name中檔案進行遞迴操作,-c參數指定了ossutil設定檔路徑,--profile參數引用了設定檔中節名稱為dev的配置。

    ossutil cp -r oss://bucket-name/ ./test/ -c ./ossutilconfig --profile dev

方案二:ossfs使用OSS加速器

ossfs使用OSS加速器

以下內容以Ubuntu 16.04 (x64)環境為例進行安裝介紹。其他版本及系統安裝,請參見安裝ossfs

  1. 安裝ossfs。

    sudo wget https://gosspublic.alicdn.com/ossfs/ossfs_1.91.3_ubuntu16.04_amd64.deb
    sudo apt-get update
    sudo apt-get install gdebi-core
    sudo gdebi ossfs_1.91.3_ubuntu16.04_amd64.deb
  2. 添加mime.types檔案。

    您可以通過以下命令添加mime.types檔案,使上傳檔案的Content-Type和副檔名匹配。

    sudo apt-get install mime-support
  3. ossfs配置、並掛載啟用了OSS加速器的bucket。關於ossfs的更多配置,請參見ossfs配置與掛載

    1. 將AccessKey ID和AccessKey Secret儲存到帳號資訊設定檔/etc/passwd-ossfs下。

      echo bucket-test:LTAI****************2CT:V0************************OKp > /etc/passwd-ossfs
    2. 設定帳號資訊設定檔許可權為640。

      chmod 640 /etc/passwd-ossfs 
    3. 建立掛載目錄。

      mkdir bucket-test
    4. 將名稱為bucket-test的bucket掛載到/tmp/bucket-test/目錄下,並指定OSS加速器網域名稱。

      ossfs bucket-test /tmp/bucket-test/ -ourl=cn-hangzhou-internal.oss-data-acc.aliyuncs.com
  4. 使用OSS加速器。

    在ossfs配置了OSS加速器後,您可以在ossfs掛載的本地檔案系統中,更加高效地對遠程bucket內檔案進行讀寫操作。例如在本地模型訓練任務中更快速地載入儲存在OSS上的模型檔案。

方案三:OSS Connector for AI/ML使用OSS加速器

OSS Connector for AI/ML使用OSS加速器

以下內容為Python3.12版本安裝OSS Connector for AI/ML樣本。其他Python版本安裝將Python換為指定版本即可。

  1. 環境要求。

  • 作業系統:Linux x86-64

  • glibc:>=2.17

  • Python:3.8-3.12

  • PyTorch: >=2.0

  • 使用OSS Checkpoint功能需Linux核心支援userfaultfd

    說明

    以Ubuntu系統為例,您可以執行sudo grep CONFIG_USERFAULTFD /boot/config-$(uname -r)命令確認Linux是否支援userfaultfd,當返回結果中顯示CONFIG_USERFAULTFD=y時,則表示核心支援。返回結果顯示CONFIG_USERFAULTFD=n時,則表示核心不支援,即無法使用OSS Checkpoint功能。

  1. 安裝OSS Connector for AI/ML。

    1. 在Linux作業系統或基於Linux作業系統構建鏡像所產生容器空間內,執行pip3.12 install osstorchconnector命令安裝OSS Connector for AI/ML。

      pip3.12 install osstorchconnector
    2. 執行pip3.12 show osstorchconnector查看是否安裝成功。

      pip3.12 show osstorchconnector

      當返回結果中顯示osstorchconnector的版本資訊時表示OSS Connector for AI/ML安裝成功。

      image

  2. 配置OSS Connector for AI/ML。

    1. 建立訪問憑證設定檔。

      mkdir -p /root/.alibabacloud && touch /root/.alibabacloud/credentials
    2. 添加訪問憑證配置並儲存。

      樣本中的<Access-key-id><Access-key-secret>請分別替換為RAM使用者的AccessKey ID、AccessKeySecret。關於如何建立AccessKey ID和AccessKeySecret,請參見建立AccessKey,配置項說明以及使用臨時訪問憑證配置請參見配置訪問憑證

      {
        "AccessKeyId": "LTAI************************",
        "AccessKeySecret": "At32************************"
      }
    3. 建立OSS Connector設定檔。

      mkdir -p /etc/oss-connector/ && touch /etc/oss-connector/config.json
    4. 添加OSS Connector相關配置並儲存。配置項說明請參見配置OSS Connector

      正常情況下使用以下預設配置即可。

      {
          "logLevel": 1,
          "logPath": "/var/log/oss-connector/connector.log",
          "auditPath": "/var/log/oss-connector/audit.log",
          "datasetConfig": {
              "prefetchConcurrency": 24,
              "prefetchWorker": 2
          },
          "checkpointConfig": {
              "prefetchConcurrency": 24,
              "prefetchWorker": 4,
              "uploadConcurrency": 64
          }
      }
      
  3. 使用OSS加速器。

    以下樣本用於使用OssMapDataset的from_prefix方法,從OSS加速器空間中更快速地構建Dataset。其中ENDPOINT值為OSS加速器網域名稱。

    from osstorchconnector import OssMapDataset
    
    # 請將ENDPOINT替換為OSS加速器網域名稱 
    ENDPOINT = "cn-hangzhou-internal.oss-data-acc.aliyuncs.com"
    # OSS Connector for AI/ML設定檔路徑 
    CONFIG_PATH = "/etc/oss-connector/config.json"
    # OSS訪問憑證設定檔路徑 
    CRED_PATH = "/root/.alibabacloud/credentials"
    # bucket檔案目錄路徑 
    OSS_URI = "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/"
    
    # 使用OssMapDataset的from_frefix方法構建Dataset
    map_dataset = OssMapDataset.from_prefix(oss_uri=OSS_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH)
    
    # 隨機訪問已建立Dataset中的對象
    item = map_dataset[0]
    print(item.key)
    content = item.read()
    print(item.size)
    print(len(content))
    
    # 遍曆Dataset中對象
    for item in map_dataset:
        print(item.key)
        print(item.size)
        content = item.read()
        print(len(content))
    

方案四:OSS SDK使用OSS加速器

OSS SDK使用OSS加速器

以下內容為Java SDK使用OSS加速器樣本。其他語言SDK使用OSS加速器時,在ossClient初始化時將訪問網域名稱填寫為OSS加速器網域名稱即可。

  1. 環境要求。

    • 使用Java 1.7.0及以上版本。

    • 您可以通過命令java -version查看Java版本。

  2. 在Maven專案中加入OSS Java SDK依賴。Jar包方式引入OSS Java SDK,請參見安裝SDK

    在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相應依賴即可。以在<dependencies>中加入3.17.4版本的依賴為例:

    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.17.4</version>
    </dependency>

    如果使用的是Java 9及以上的版本,則需要添加JAXB相關依賴。添加JAXB相關依賴範例程式碼如下:

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    <!-- no more than 2.3.3-->
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.3</version>
    </dependency>
  3. 使用OSS加速器。

    以下樣本通過JavaSDK使用OSS加速器進行資料上傳。請注意將endpoint值替換為OSS加速器網域名稱。

    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import java.io.ByteArrayInputStream;
    
    public class OssCliectTest {
        public static void main(String[] args) throws Exception {
            // endpoint值請填寫OSS加速器網域名稱。
            String endpoint = "cn-hangzhou-internal.oss-data-acc.aliyuncs.com";
    
            //訪問憑證資訊
            String alibaba_cloud_access_key_id = "LT********************CT";
            String alibaba_cloud_access_key_secret = "V0q***************************OKp";
    
            // 填寫Bucket名稱,例如examplebucket。
            String bucketName = "BucketName";
            // 填寫Object完整路徑,例如exampledir/exampleobject.txt。Object完整路徑中不能包含Bucket名稱。
            String objectName = "Test.txt";
    
            // 建立OSSClient執行個體。
            OSS ossClient = new OSSClientBuilder().build(endpoint, alibaba_cloud_access_key_id,alibaba_cloud_access_key_secret);
            String content = "##################";
            // 將content變數內容上傳至BucketName下的Test.txt檔案中
            ossClient.putObject(bucketName,objectName,new ByteArrayInputStream(content.getBytes()));
            
            // 關閉OSSClient。
            ossClient.shutdown();
        }
    }