執行您的本機程式碼做為 SageMaker 訓練工作 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

執行您的本機程式碼做為 SageMaker 訓練工作

您可以將本機機器學習 (ML) Python 程式碼當做大型單節點 Amazon SageMaker 訓練任務或多個 parallel 任務執行。若要達成此操作,您可以利用 @remote 裝飾項目來註釋代碼,如下列代碼範例所示。遠端函式不支援分散式訓練 (跨多個執行個體)。

@remote(**settings) def divide(x, y): return x / y

SageMaker Python SDK 會自動將您現有的工作區環境以及任何相關聯的資料處理程式碼和資料集轉換為在 SageMaker 訓練平台上執行的 SageMaker 訓練工作。您還可以啟用持續快取功能,藉由快取先前下載的相依性套件,進一步減少任務開始延遲。這種減少的工作延遲大於單獨使用 SageMaker 受管暖集區所減少的延遲。如需詳細資訊,請參閱 使用持久性快取

注意

遠端函式不支援分散式訓練工作。

下列區段說明如何利用 @remote 裝飾項目來註釋本機機器學習 (ML) 程式碼,並針對您的使用案例量身打造您的體驗。這包括自訂您的環境以及與 SageMaker 實驗整合。

設定您的環境

請從下列三個選項選擇一個來設定環境。

您可以通過創建 SageMaker 筆記本並附加 SageMaker Studio 經典圖像上可用的任何圖像來註釋並運行 SageMaker Studio 經典版本中的本地 ML 代碼。下列指示可協助您建立 SageMaker 筆記本、安裝 SageMaker Python SDK,以及使用裝飾器註解程式碼。

  1. 創建一個 SageMaker 筆記本,並在 SageMaker Studio 經典中附加圖像,如下所示:

    1. 按照 Amazon SageMaker 開發人員指南中的啟動 Amazon SageMaker 工作室經典版中的說明

    2. 從左側導覽窗格選取 Studio。這會開啟新視窗。

    3. 入門對話方塊,從向下箭頭選取使用者設定檔。這會開啟新視窗。

    4. 選取 [開放工作室經典]

    5. 從主要工作區選取開啟啟動器。這會開啟新頁面。

    6. 從主要工作區選取建立筆記本

    7. 變更環境對話方塊,從映像旁邊的向下箭頭選取基本 Python 3.0

      @remote 裝飾器會自動偵測附加至 SageMaker Studio 經典筆記本的影像,並使用它來執行 SageMaker訓練工作。如在裝飾項目或組態檔案指定 image_uri 為引數,則會採用 image_uri 指定的值,而非偵測到的映像。

      如需有關如何在 SageMaker Studio Classic 中建立筆記本的詳細資訊,請參閱建立或開啟 Amazon SageMaker Studio 傳統筆記本中的從檔案功能表建立筆記本一節。

      如需可用映像檔清單,請參閱支援的 Docker 映像

  2. 安裝開 SageMaker Python 套件。

    若要使用 SageMaker工作室經典筆記本內的 @remote 函數來註解您的程式碼,您必須安裝 SageMaker Python SDK。安裝 SageMaker Python SDK,如下列程式碼範例所示。

    !pip install sagemaker
  3. 使用 @remote 裝飾器在 SageMaker 訓練工作中執行函數。

    若要執行本機 ML 程式碼,請先建立相依性檔案,以指示 SageMaker 在何處找到您的本機程式碼。若要執行此作業,請遵循下列步驟:

    1. 從 SageMaker Studio 傳統啟動器主工作區,在「公用程式和檔案」中,選擇「文字檔」。這會在新索引標籤開啟名為 untitled.txt. 的文字檔案

      如需有關 SageMaker 工作室典型使用者介面 (UI) 的詳細資訊,請參閱 Amazon SageMaker 工作室經典 UI 概觀

    2. 重新命名 untitled.txt requirements.txt

    3. 將代碼所需的所有依賴項以及 SageMaker 庫添加到requirements.txt.

      下個區段將針對範例 divide 函式的 requirements.txt 提供最小代碼範例,如下所示。

      sagemaker
    4. 透過傳遞相依性檔案,使用遠端裝飾項目來執行代碼,如下所示。

      from sagemaker.remote_function import remote @remote(instance_type="ml.m5.xlarge", dependencies='./requirements.txt') def divide(x, y): return x / y divide(2, 3.0)

      如需其他代碼範例,請參閱範例筆記本 quick_start.ipynb

      如果您已經在運行 SageMaker 工作室經典筆記本,並且您按照 2 中的說明安裝 Python SDK。安裝 SageMaker Python SDK 後,您必須重新啟動內核。如需詳細資訊,請參閱 Amazon SageMaker 開發人員指南中的使用 SageMaker Studio 典型筆記本工具列

您可以從 SageMaker 筆記本執行個體註解本機 ML 程式碼。下列指示說明如何使用自訂核心建立筆記本執行個體、安裝 SageMaker Python SDK,以及使用裝飾器為程式碼加上註解。

  1. 利用自訂 conda 核心建立筆記本執行個體。

    您可以使用 @remote 裝飾器來註解本機 ML 程式碼,以便在 SageMaker 訓練工作中使用。首先,您必須建立並自訂 SageMaker 筆記本執行個體,才能使用 Python 3.7 或更高版本 (最高 3.10.x) 的核心。若要執行此作業,請遵循下列步驟:

    1. 開啟主 SageMaker 控台,網址為 https://console.aws.amazon.com/sagemaker/

    2. 從左側導覽面板選擇筆記本並展開選項。

    3. 從展開的選項選擇筆記本執行個體

    4. 選擇建立筆記本執行個體按鈕。這會開啟新頁面。

    5. 筆記本執行個體名稱,輸入名稱 (上限為 63 個字元且無空格)。有效字元:A-Za-z0-9 以及 .:+=@ _%- (連字號)。

    6. 筆記本執行個體設定對話方塊,展開其他組態旁邊的向右箭頭。

    7. 生命週期組態 - 選擇性,展開向下箭頭並選取建立新生命週期組態。這將開啟新對話方塊。

    8. 針對名稱,輸入組態設定名稱。

    9. 指令碼對話方塊的開始筆記本標籤,以下列指令碼取代文字方塊的現有內容。

      #!/bin/bash set -e sudo -u ec2-user -i <<'EOF' unset SUDO_UID WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda/ source "$WORKING_DIR/miniconda/bin/activate" for env in $WORKING_DIR/miniconda/envs/*; do BASENAME=$(basename "$env") source activate "$BASENAME" python -m ipykernel install --user --name "$BASENAME" --display-name "Custom ($BASENAME)" done EOF echo "Restarting the Jupyter server.." # restart command is dependent on current running Amazon Linux and JupyterLab CURR_VERSION_AL=$(cat /etc/system-release) CURR_VERSION_JS=$(jupyter --version) if [[ $CURR_VERSION_JS == *$"jupyter_core : 4.9.1"* ]] && [[ $CURR_VERSION_AL == *$" release 2018"* ]]; then sudo initctl restart jupyter-server --no-wait else sudo systemctl --no-block restart jupyter-server.service fi
    10. 指令碼對話方塊的建立筆記本標籤,以下列指令碼取代文字方塊的現有內容。

      #!/bin/bash set -e sudo -u ec2-user -i <<'EOF' unset SUDO_UID # Install a separate conda installation via Miniconda WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda mkdir -p "$WORKING_DIR" wget https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh -O "$WORKING_DIR/miniconda.sh" bash "$WORKING_DIR/miniconda.sh" -b -u -p "$WORKING_DIR/miniconda" rm -rf "$WORKING_DIR/miniconda.sh" # Create a custom conda environment source "$WORKING_DIR/miniconda/bin/activate" KERNEL_NAME="custom_python310" PYTHON="3.10" conda create --yes --name "$KERNEL_NAME" python="$PYTHON" pip conda activate "$KERNEL_NAME" pip install --quiet ipykernel # Customize these lines as necessary to install the required packages EOF
    11. 選擇視窗底部右方的建立組態按鈕。

    12. 選擇視窗底部右方的建立筆記本執行個體按鈕。

    13. 等待筆記本執行個體 [狀態] 從 [擱置中] 變更為InService

  2. 在筆記本執行個體建立 Jupyter 筆記本。

    下列指示說明如何在新建立的執行個體中使用 Python 3.10 建立 Jupyter 筆記本。 SageMaker

    1. 在上一個步驟的記事本執行個體狀態為之後 InService,請執行下列動作:

      1. 在包含新建立筆記本執行個體名稱的那一列,選取動作下的開啟 Jupyter。這會開啟新 Jupyter 伺服器。

    2. 在 Jupyter 伺服器,從頂部右方的函式表選取新增

    3. 從向下箭頭選取 conda_custom_python310。這會建立採用 Python 3.10 核心的新 Jupyter 筆記本。您現可以運用本機 Jupyter 筆記本的類似方式使用此新 Jupyter 筆記本。

  3. 安裝開 SageMaker Python 套件。

    執行虛擬環境之後,請使用下列程式碼範例來安裝 SageMaker Python SDK。

    !pip install sagemaker
  4. 使用 @remote 裝飾器在 SageMaker 訓練工作中執行函數。

    當您使用 SageMaker 筆記本內部的 @remote 裝飾器來註解本機 ML 程式碼時, SageMaker 訓練會自動解譯程式碼的功能,並將其做為 SageMaker 訓練工作執行。執行下列操作以設定筆記本:

    1. 從您在步驟 1「使用自訂核心建立 No SageMaker tebook 執行個體」中建立的筆記本執行個體中,選取 SageMaker 筆記本功能表中的核心名稱。

      如需更多資訊,請參閱變更映像或核心

    2. 從向下箭頭,選擇自訂 conda 核心 (需採用 Python 3.7 版本或更高版本)。

      例如,選取 conda_custom_python310 即可選擇 Python 3.10 作為核心。

    3. 選擇選取

    4. 等待核心狀態顯示為閒置,這表示核心已啟動。

    5. 在 Jupyter 伺服器首頁,從頂部右方的函式表選取新增

    6. 選取向下箭頭旁邊的文字檔案。這會建立新文字檔案,名為 untitled.txt.

    7. 重新命名 untitled.txtrequirements.txt,並新增代碼所需的任何相依性以及 sagemaker

    8. 透過傳遞相依性檔案,使用遠端裝飾項目來執行代碼,如下所示。

      from sagemaker.remote_function import remote @remote(instance_type="ml.m5.xlarge", dependencies='./requirements.txt') def divide(x, y): return x / y divide(2, 3.0)

      如需其他代碼範例,請參閱範例筆記本 quick_start.ipnyb

您可以在偏好的本機 IDE 內部利用 @remote 裝飾項目註釋本機機器學習 (ML) 程式碼。下列步驟顯示必備先決條件、如何安裝 Python SDK,以及如何使用 @remote 裝飾項目註釋代碼。

  1. 透過設定 AWS Command Line Interface (AWS CLI) 和建立角色來安裝必要條件,如下所示:

  2. 使用或conda並使用 Python 3.7 PyCharm 或更高版本 (最高 3.10.x) 來建立虛擬環境。

    • 使 PyCharm 用下列方式設定虛擬環境:

      1. 從主功能表選取檔案

      2. 選擇新專案

      3. 新環境使用下的向下箭頭選擇 Conda

      4. Python 版本欄位,利用向下箭頭選取 Python 版本,需為 3.7 或更高版本。您可以從清單選取的最高版本為 3.10.x。

        已選取的 Python 新環境為 Conda,而已選取的 Python 版本為 3.10。
    • 如您已安裝 Anaconda,您可以利用 conda 來設定虛擬環境,如下所示:

      • 開啟 Anaconda 提示終端機介面。

      • 利用 Python 3.7 或更高版本 (最高為 3.10x) 建立並啟用新 conda 環境。下列代碼範例示範如何利用 Python 3.10 版本建立 conda 環境。

        conda create -n sagemaker_jobs_quick_start python=3.10 pip conda activate sagemaker_jobs_quick_start
  3. 安裝開 SageMaker Python 套件。

    若要從偏好的 IDE 封裝代碼,您必須利用 Python 3.7 或更高版本 (最高為 3.10x) 來設定虛擬環境。您還需要相容的容器映像。使用下列程式碼範例安裝 SageMaker Python SDK。

    pip install sagemaker
  4. 將代碼包裝在 @remote 裝飾項目內部。 SageMaker Python SDK 會自動解譯程式碼的功能,並將其作為 SageMaker訓練工作執行。下列程式碼範例會示範如何匯入必要的程式庫、設定 SageMaker 工作階段,以及使用 @remote 裝飾器為函數加上註解。

    您可以直接提供所需的相依性,或利用已啟用 conda 環境的相依性來執行代碼。

    • 若要直接提供相依性,請執行下列操作:

      • 在代碼所在的工作目錄建立 requirements.txt 檔案。

      • 加入程式碼所需的所有相依性以及程式 SageMaker 庫。下個區段將針對範例 divide 函式的 requirements.txt 提供最小代碼範例。

        sagemaker
      • 透過傳遞相依性檔案,使用 @remote 裝飾項目來執行代碼。在下列程式碼範例中,請以您想 SageMaker 要用來執行工作的 AWS Identity and Access Management (IAM) 角色 ARN 取The IAM role name代。

        import boto3 import sagemaker from sagemaker.remote_function import remote sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="us-west-2")) settings = dict( sagemaker_session=sm_session, role=<The IAM role name>, instance_type="ml.m5.xlarge", dependencies='./requirements.txt' ) @remote(**settings) def divide(x, y): return x / y if __name__ == "__main__": print(divide(2, 3.0))
    • 若要使用已啟用 conda 環境的相依性,請針對 dependencies 參數採用值 auto_capture,如下所示。

      import boto3 import sagemaker from sagemaker.remote_function import remote sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="us-west-2")) settings = dict( sagemaker_session=sm_session, role=<The IAM role name>, instance_type="ml.m5.xlarge", dependencies="auto_capture" ) @remote(**settings) def divide(x, y): return x / y if __name__ == "__main__": print(divide(2, 3.0))
      注意

      您也可以在 Jupyter 筆記本中實作先前的程式碼。 PyCharm 專業版本本地支持木普特。如需更多指引,請參閱文件中 PyCharm的 Jupyter 筆記本支援