將本機程式碼執行為 SageMaker 訓練任務 - Amazon SageMaker AI

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

將本機程式碼執行為 SageMaker 訓練任務

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

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

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

注意

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

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

設定您的環境

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

您可以透過建立 SageMaker 筆記本並連接 SageMaker Studio Classic 映像上可用的任何映像,從 SageMaker Studio Classic 註釋和執行本機 ML 程式碼。下列指示可協助您建立 SageMaker 筆記本、安裝 SageMaker Python SDK,以及使用裝飾器註釋程式碼。

  1. 建立 SageMaker 筆記本並在 SageMaker Studio Classic 中連接映像,如下所示:

    1. 請遵循 Amazon SageMaker AI 開發人員指南中的啟動 Amazon Studio Classic 中的指示。 SageMaker

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

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

    4. 選取開啟 Studio Classic

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

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

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

      @remote 裝飾程式會自動偵測連接至 SageMaker Studio Classic 筆記本的映像,並使用它來執行 SageMaker訓練任務。如在裝飾項目或組態檔案指定 image_uri 為引數,則會採用 image_uri 指定的值,而非偵測到的映像。

      如需如何在 Studio Classic 中 SageMaker建立筆記本的詳細資訊,請參閱建立或開啟 Amazon Studio Classic Notebook 中的從檔案選單建立筆記本 SageMaker 一節。

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

  2. 安裝 SageMaker Python SDK。

    若要在 Studio Classic Notebook 中使用 @remote SageMaker函數註釋程式碼,您必須SDK安裝 SageMaker Python。安裝 SageMaker Python SDK,如下列程式碼範例所示。

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

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

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

      如需 SageMaker Studio Classic 使用者介面 (UI) 的詳細資訊,請參閱 Amazon SageMaker Studio Classic UI 概觀

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

    3. 將程式碼所需的所有相依性以及 SageMaker AI 程式庫新增至 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 Studio Classic 筆記本,並SDK依照 2 中的指示安裝 Python。安裝 SageMaker Python SDK,您必須重新啟動核心。如需詳細資訊,請參閱《Amazon SageMaker AI 開發人員指南》中的使用 SageMaker Studio Classic Notebook 工具列

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

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

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

    1. 在 開啟 SageMaker AI 主控台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 筆記本。

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

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

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

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

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

  3. 安裝 SageMaker Python SDK。

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

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

    當您在 SageMaker 筆記本中使用 @remote 裝飾程式註釋本機 ML 程式碼時, SageMaker 訓練會自動解譯程式碼的函數,並將其作為 SageMaker 訓練任務執行。執行下列操作以設定筆記本:

    1. 從您在步驟 1 中建立的 SageMaker筆記本執行個體中選取筆記本功能表中的核心名稱,使用自訂核心建立 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

您可以在您偏好的本機 內使用 @remote 裝飾工具註釋本機 ML 程式碼IDE。下列步驟顯示必要的先決條件、如何安裝 Python SDK,以及如何使用 @remote 裝飾工具註釋您的程式碼。

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

    • 按照設定 Amazon SageMaker AI AWS CLI 先決條件一節中的指示加入 AI 網域。 SageMaker

    • 在 AI IAM角色的建立執行角色區段之後建立角色。 SageMaker

  2. 使用 PyCharm 或 conda和 Python 3.7 版或更高版本建立虛擬環境,最高可達 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 SDK。

    若要從偏好的 封裝程式碼IDE,您必須使用 Python 3.7 或更新版本設定虛擬環境,最高可達 3.10 倍。您還需要相容的容器映像。SDK 使用以下程式碼範例安裝 SageMaker Python。

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

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

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

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

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

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

        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 專業版原生支援 Jupyter。如需更多指引,請參閱 文件中 PyCharm的 Jupyter 筆記本支援